ADR 0031: Schedule 设施取代 Cron
状态
已接受(2026-07)
背景
Zhin.js 原先使用 croner + kernel Cron 类 + core CronFeature + agent PersistentCronEngine,与作者自研的中国日历调度库 cn-calendar-schedule 能力重叠。需要合并调度栈并支持农历、工作日、节假日、scatter 等语义。
决策
- 新包
@zhin.js/schedule(basic/schedule/)作为日历调度 SSOT,源码迁入 monorepo,不通过 npm 安装外部包。 - Kernel 提供
ScheduleEngine(包装CalendarScheduler),删除Cron类与croner依赖。 - Core
CronFeature→ScheduleFeature;插件 API Breaking:addCron→addSchedule(descriptor, callback)。 - Agent 持久化文件
data/schedule-jobs.json取代cron-jobs.json/scheduler-jobs.json/assistant-jobs.json;不再自动迁移旧文件。 - Cron 格式 统一 6 段(秒 分 时 日 月 周);默认时区
Asia/Shanghai。 - AI / Host RPC 工具名
schedule_list/schedule_add/ …,废弃cron_*/cron:*。 - Schedule 引擎 随 kernel/core 始终可用,不绑定
assistant.enabled。
后果
- 所有使用
addCron/new Cron的插件与示例须改为addSchedule。 - 用户须手动将旧 JSON 迁移为
schedule-jobs.json或删除旧文件。 - IM 核心安装体积仍须满足 ADR 0019(
pnpm check:install-size)。
关系
- 延续 ADR 0008(调度设施)的方向,本 ADR 为一次性 breaking 落地。
- 与 ADR 0019 安装分层无冲突:
@zhin.js/schedule在 basic 层,由 kernel 引用。