feat(companion): 实现封闭本机管理协议 - #1271
Conversation
|
CI 首轮暴露 3 个源码契约测试依赖 |
45cd91d to
3fe564f
Compare
|
上一轮仅 |
3fe564f to
54f0db9
Compare
|
最新 CI 已全部通过:build、bun-test、bun-binary、bun-binary-musl。PR 当前状态为 OPEN / REVIEW_REQUIRED,等待评审;未执行 daemon restart 或部署。 |
|
感谢这个 PR — 整体设计思路很清晰:不复用 Dashboard token/HMAC、路由写死不代理、Bot 在启动期钉死不让请求方选、密钥文件做了严格的 owner/权限/非软链校验,这几条边界收得很干净。文档中英文同步、 下面是评审中实测复现的几个问题,供你参考(每条都跑了探针,不是读码推测): 建议合入前修复1. 幂等表 同文件的
建议:只缓存成功结果(失败即从 Map 移除以允许重试),并给条目加 TTL 或容量上限。 2. 绑定 Bot 的配置漂移会导致整个 Dashboard 进程无法启动( IIFE 在模块顶层调用了 实测三种日常操作都会触发:把绑定 Bot 的 一个可选的附加能力,通常不应该有让主进程起不来的权力。建议:启动期校验失败时降级为「不挂载 companion 路由 + 打日志告警」(该前缀返回 503/404),把 fail-closed 收敛在这道门内部;每次请求时的 3. 从会话内执行 两个 key 加进了 实测:会话内 restart 传入这两个参数 → 密钥文件和 Bot 合法性都完整校验通过 → 随后解析结果两个都是空字符串,companion 静默不启动,且没有任何提示。lease-bound 分支更直接: 这与 非阻断建议
验证情况
以上为自动评审的初步意见,可能有理解偏差,最终以维护者审阅结论为准。辛苦了 🙏 |
|
已处理评审中确认的阻断项,提交:
本地验证: |
|
本轮 CI:build、bun-binary、bun-binary-musl 通过;bun-test 仅复现既有 |
4bb9756 to
a2dfe1a
Compare
|
最新 head |
|
已明确并收紧 producer contract,提交: 精确 predicate: 安全预置:为专用测试 Bot 配置唯一 新增 compiled-dist 黑盒覆盖:relative secret rejection、zero/multiple/nonqualifying selected Bot rejection、qualifying selected Bot acceptance without daemon side effect;并覆盖 start/restart 实际 CLI parser。相关测试 75 passed,build 已通过。未重启/部署。 |
|
感谢快速跟进 —— 复审了 1. 幂等表 ✅ TTL + 上限 + 失败/超时结果不再驻留。
2. 启动期漂移不再炸进程 ✅ 用真实入口验的: 3. 生命周期参数不再被吞 ✅ 两条路径都验过:会话内 restart 现在两个值都保留(之前解析为 另外几条非阻断建议也都闭环了:复用现有
还剩一处小问题(建议合入前顺手修,1 行)
原句以冒号结尾,用来引出紧随其后的三个 header 列表项( 一条非阻断(可留作后续)handler 里的 loopback 判定仍缺少 handler 级覆盖:把 验证情况
另外提醒一下:主干在此期间前进了 16 个 commit,其中新增了 以上为自动评审的初步意见,最终以维护者审阅结论为准。修得很利落,辛苦了 🙏 |
899e5aa to
bccaccb
Compare
|
按 babysit 要求已将 PR #1271 rebase 到最新 origin/master(7326f93f2),无冲突;Companion producer 代码/协议相对 Devbox 已验证的 899e5aa 未改变。当前 head: |
|
已补合码前确认项并推送: |
deepcoldy
left a comment
There was a problem hiding this comment.
三轮双审通过:3 条阻断项(幂等表缓存失败/启动期漂移炸 dashboard/生命周期参数被吞)已全部修好并实测确认;文档破句与非回环 handler 级用例也已补齐(变异验证:删掉 loopback 闸后新用例转红,证明真承重)。
必需 CI 腿(build / bun-binary / -musl / -darwin)全绿。bun-test 的红是 test/child-env.test.ts 里 node-pty 的 lost-read,该 job 配置为 continue-on-error 且在不含本 PR 任何代码的干净 origin/master 上可复现同一条失败,与本 PR 无关。
|
🚀 Released in v3.19.3 |
关联需求
改动
botmux start/restart新增配对参数--companion-secret-file <path>与--companion-bot <appId>,只允许精确绑定一个启用 sandbox 的 codex/traex 测试 Bot。/__companion/v1HMAC surface;不授予 Dashboard 管理身份,不代理现有 Dashboard 路由。固定协议
GET /__companion/v1/healthGET|PUT /__companion/v1/roleGET|PUT /__companion/v1/runtimeX-Botmux-Companion-Timestamp/Nonce/Signaturetimestamp\nnonce\nMETHOD\nexact-pathname\nsha256(raw-body)影响面
/api/bot-agent校验/落盘链路;Role 复用现有 team-role 文件与 metadata 语义。验证
bun run build:通过。bunx tsc --noEmit --pretty false:通过。bunx vitest run --project unit test/companion-api.test.ts test/companion-startup-config.test.ts test/companion-startup-options.test.ts test/child-env.test.ts test/daemon-lifecycle-env.test.ts test/index-dashboard-entry.test.ts:99 passed。git diff --check:通过。未执行 daemon restart、部署或真实凭据探测。