定时任务

wesgine 的 Cron 系统为 Cell 提供定时执行 Agent Run 的能力。


基本概念

定时任务模型

每个定时任务绑定一个 Agent,按 cron 表达式定时触发:

CronJob
├── schedule: "0 9 * * 1"   (每周一 9:00)
├── agent_id: "reporter"
├── prompt: "生成本周报告"
├── actor: "alice"
└── enabled: true

Per-Cell 隔离

定时任务属于 Cell,不跨 Cell 可见。


声明与播种

CellSpec 声明

定时任务可以在 CellSpec 中声明初始配置:

CellSpec{
    Cron: []CronJobSpec{
        {
            Name:     "weekly-report",
            Schedule: "0 9 * * 1",
            AgentID:  "reporter",
            Prompt:   "生成本周报告",
        },
    },
}

INV-SEED-01

CellSpec.Cron 是出生声明,不是常驻状态:

阶段行为
首次 boot播种进 wes_cron_jobs
后续 boot不再读取声明
运行时存储是唯一权威

用户在运行时删掉的任务不会在重启时复活。


管理 API

列出任务

GET /cells/{id}/cron

返回任务列表含状态信息。

添加任务

POST /cells/{id}/cron
{
    "name": "daily-summary",
    "schedule": "0 18 * * *",
    "agent_id": "summarizer",
    "prompt": "总结今日工作"
}

删除任务

DELETE /cells/{id}/cron/{jobId}

更新任务

PATCH /cells/{id}/cron/{jobId}
{
    "schedule": "0 9 * * *"
}

启用/禁用

POST /cells/{id}/cron/{jobId}/enable
POST /cells/{id}/cron/{jobId}/disable

立即触发

POST /cells/{id}/cron/{jobId}/trigger

运行记录

GET /cells/{id}/cron/{jobId}/runs

调度器统计

GET /cells/{id}/cron/stats

Actor 边界

INV-CRON-10

Cron 是 Actor 边界的第四个面——泄漏的不是数据而是执行身份:

风险说明
不查主的 Trigger以别人的身份跑代码
不查主的 Update修改别人的任务配置

可见性

每个 Manager 方法都收 actor 参数:

Actor行为
普通用户只看自己的任务
空(admin)全 Cell 视图

无主任务

无主任务仅 admin 可见(与 INV-OBS-10 无主 Run 同治)。

认领无主任务

manager.ClaimOwnerless(ctx, actor)

只给单 actor 部署使用(桌面三端 boot 各调一次)。


配额限制

INV-QUOTA-05

MaxCronJobs 在唯一增长点判定:

增长点判据
cron.Scheduler.AddQuotaFn(current, delta)

覆盖已有名字 delta=0(upsert 是编辑手势)。


温度管理

Cron 与 Cell 温度

有活跃 Cron 任务的 Cell 需要保持 Warm 态:

Cell 状态Cron 行为
Hot正常执行
Warm正常执行
CoolCell 无法 Cool
Cold任务暂停

在各产品中的使用

wesclaw

个人定时提醒与报告:

企业版

部门级定时任务:


注意事项