Cron Add 加强与 Schema 对齐
背景
最近的网关日志显示重复的 cron.add 失败,包含无效参数(缺少 sessionTarget、wakeMode、payload 以及格式错误的 schedule)。这表明至少有一个客户端(可能是代理工具调用路径)正在发送包装的或部分指定的作业载荷。另外,TypeScript、网关 schema、CLI 标志和 UI 表单类型中的 cron 提供商枚举之间存在偏差,并且 cron.status 存在 UI 不匹配(期望 jobCount 而网关返回 jobs)。
目标
- 通过规范化常见的包装器载荷并推断缺失的
kind字段,停止cron.addINVALID_REQUEST 垃圾信息。 - 对齐网关 schema、cron 类型、CLI 文档和 UI 表单中的 cron 提供商列表。
- 使代理 cron 工具 schema 明确,以便 LLM 生成正确的作业载荷。
- 修复 Control UI cron 状态作业计数显示。
- 添加测试以覆盖规范化和工具行为。
非目标
- 更改 cron 调度语义或作业执行行为。
- 添加新的调度类型或 cron 表达式解析。
- 除必要的字段修复外,全面改革 cron 的 UI/UX。
发现(当前差距)
- 网关中的
CronPayloadSchema排除了signal+imessage,而 TS 类型包含它们。 - Control UI CronStatus 期望
jobCount,但网关返回jobs。 - 代理 cron 工具 schema 允许任意
job对象,导致输入格式错误。 - 网关严格验证
cron.add且不进行规范化,因此包装的载荷会失败。
更改内容
cron.add和cron.update现在规范化常见的包装器形状并推断缺失的kind字段。- 代理 cron 工具 schema 与网关 schema 匹配,减少无效载荷。
- 提供商枚举在网关、CLI、UI 和 macOS 选择器之间对齐。
- Control UI 使用网关的
jobs计数字段显示状态。
当前行为
- 规范化: 包装的
data/job载荷被解包;在安全的情况下推断schedule.kind和payload.kind。 - 默认值: 当缺少
wakeMode和sessionTarget时应用安全默认值。 - 提供商: Discord/Slack/Signal/iMessage 现在在 CLI/UI 中一致显示。
参见 Cron 作业 了解规范化的形状和示例。
验证
- 观察网关日志,确认
cron.addINVALID_REQUEST 错误减少。 - 确认 Control UI cron 状态在刷新后显示作业计数。
可选后续工作
- 手动 Control UI 冒烟测试:为每个提供商添加一个 cron 作业并验证状态作业计数。
待解决问题
cron.add是否应接受来自客户端的显式state(当前 schema 不允许)?- 我们是否应允许
webchat作为显式投递提供商(当前在投递解析中被过滤)?