feat(scheduler): 支持定时任务 Bash 前置条件、执行日志与多群绑定 - #1187
Conversation
|
感谢这个 PR,整体质量很高——门禁协议定义得很严格,sidecar 的身份回绑、 已复核通过的部分
建议一:相对路径的文件型条件,脚本落在沙盒可写区,却在宿主机不受限执行文件型条件的相对路径以任务 实测:把 也就是说,PR 花了很大力气把脚本正文移进 daemon 私有 sidecar、并为沙盒加了 host-only deny(这部分做得很到位, 需要说明可达性边界,这也是我们没有把它定为阻断级的原因:利用前提是 owner 已经配置了落在沙盒可写路径下的文件型条件;沙盒内的 CLI 自身无法创建这类配置(Lark 建议:配置时拒绝解析后落在 建议二:
|
|
补充更正上一条评论中「建议一」的可达性描述——上一条把缓解措施说窄了,这里更准确地重述,以免误导修复方向。 可达性(已核实):当前部署的 3 个沙盒 bot, 但 在这个前提下,沙盒内的 CLI 可以自签 dashboard IPC 自行创建带前置条件的任务;而且 inline 型(任意 bash、完全不碰文件)同样可创建,所以仅对文件路径做校验并不能堵住这条自造路径。上一条评论建议的路径校验只对「owner 误配相对路径」那一支有效,这点之前没说清楚。 需要明确的是:该 secret 暴露是 因此建议拆成两件事:
严重度维持原判(非阻断):当前 fleet 下自造路径不可达;文件型需要 owner 主动配置;而 同样地,以上仍是自动评审的初步意见,最终以维护者审阅为准。 |
|
第四轮自动评审(基线同步到 先说这轮修好的
建议一:
|
启用前置条件时拒绝空工作目录;保留无前置条件与关闭状态的原有行为。补齐三路输出流确定性时序测试并移除未使用函数。 新建或变更目标群时最多绑定五群,存量超限绑定保持原顺序时仍可编辑;群列表支持失败后重新加载,文件脚本帮助说明可信来源要求。
6931595 to
992e6c3
Compare
|
🚀 Released in v3.19.1 |
目标
为定时任务增加可选 Bash 前置条件、执行日志和多群绑定,并保证未配置或关闭前置条件的任务继续沿用原模型调用流程。
当前行为
Bash 前置条件
0且 stdout 去除首尾空白后严格等于1时才调用模型。stdout 为0、空白或其他内容时记为“前置条件未通过”;启动失败、超时、文件读取失败和非零退出记为调度失败。两种情况都不会调用模型。文件模式的可信目录
<dataDir>/schedule-preconditions/trusted-files/内。~、目录外文件、目录本身,以及任一路径段中的符号链接;文件需为 daemon 可读的普通 UTF-8 文件。可信目录由 daemon 创建并按宿主机私有目录保护。调度记账与执行日志
skipped状态:不增加repeat.completed,不自动删除有限次数任务,也不永久禁用一次性任务。自然调度与 Dashboard“立即运行”使用同一套结果处理。non_zero_exit保留完整错误类型与真实退出码;单群或多群提交失败记录具体目标及错误正文。任务卡片不展示错误正文,统一在执行日志中查看。?悬浮提示。多群绑定
?。兼容与影响范围
chatId持久化形状;多群才增加chatIds。已有超过 5 群的任务按原顺序保留,不做自动迁移。/bin/bash,覆盖 macOS/Linux daemon;未新增生产依赖,未修改 lockfile 或版本号。UI 示意
任务列表的执行历史背景:
执行日志错误详情与“已提交模型”说明:
验证
npx --yes bun@1.4.0 x vitest run --project unit test/*schedule*.test.ts test/*scheduler*.test.ts:31 个测试文件,652 项通过。npx --yes bun@1.4.0 run build:TypeScript、脚本类型检查、Dashboard 打包、dist 与嵌入资源审计通过。precondition_skipped,不再出现路径错误,且未调用模型。未通过“立即运行”制造额外任务执行。git diff --check与暂存区差异检查通过;未提交 live 任务配置、个人路径或群聊信息。已知边界