Cron 添加硬化和架构对齐

Cron 添加硬化和架构对齐

背景

最近的网关日志显示重复的 cron.add 失败,参数无效(缺少 sessionTargetwakeModepayload 和格式错误的 schedule)。这表明至少有一个客户端(可能是智能体工具调用路径)正在发送包装的或部分指定的作业负载。此外,TypeScript、网关架构、CLI 标志和 UI 表单类型中的 cron 提供程序枚举之间存在漂移,加上 cron.status 的 UI 不匹配(期望 jobCount 而网关返回 jobs)。

目标

  • 通过规范化常见的包装负载并推断缺失的 kind 字段来停止 cron.add INVALID_REQUEST 垃圾邮件。
  • 在网关架构、cron 类型、CLI 文档和 UI 表单之间对齐 cron 提供程序列表。
  • 使智能体 cron 工具架构显式化,以便 LLM 生成正确的作业负载。
  • 修复控制 UI cron 状态作业计数显示。
  • 添加测试以覆盖规范化和工具行为。

非目标

  • 更改 cron 调度语义或作业执行行为。
  • 添加新的计划类型或 cron 表达式解析。
  • 除了必要的字段修复之外,彻底改进 cron 的 UI/UX。

发现(当前差距)

  • 网关中的 CronPayloadSchema 排除了 signal + imessage,而 TS 类型包含它们。
  • 控制UI CronStatus 期望 jobCount,但网关返回 jobs
  • 智能体 cron 工具架构允许任意 job 对象,从而启用格式错误的输入。
  • 网关严格验证 cron.add 而没有规范化,因此包装的负载失败。

更改内容

  • cron.addcron.update 现在规范化常见的包装形状并推断缺失的 kind 字段。
  • 智能体 cron 工具架构与网关架构匹配,从而减少无效负载。
  • 提供程序枚举在网关、CLI、UI 和 macOS 选择器之间对齐。
  • 控制UI使用网关的 jobs 计数字段进行状态。

当前行为

  • 规范化:包装的 data/job 负载被解包;在安全时推断 schedule.kindpayload.kind
  • 默认值:当缺少时为 wakeModesessionTarget 应用安全的默认值。
  • 提供商:Discord/Slack/Signal/iMessage 现在在 CLI/UI 中一致显示。

参阅 Cron 作业 了解规范化形状和示例。

验证

  • 观察网关日志以减少 cron.add INVALID_REQUEST 错误。
  • 确认控制 UI cron 状态在刷新后显示作业计数。

可选的后续操作

  • 手动控制 UI 烟雾检查:每个提供商添加一个 cron 作业 + 验证状态作业计数。

未解决的问题

  • cron.add 是否应该接受来自客户端的显式 state(目前被架构拒绝)?
  • 我们是否应该允许 webchat 作为显式传递提供商(目前在传递解析中被过滤)?