feat(clone): 支持一键克隆机器人 - #972
Conversation
|
感谢这个 PR!方向很实用,整体实现也挺干净。以下是自动评审跑出来的初步意见,供参考,最终以维护者审阅为准。 先说好的部分:owner 身份边界的设计是对的。 有两点建议在合入前处理: 1)缺回归测试(建议必补)。 仓库 2)实例态字段被整体克隆(建议同 PR 修一行)。 另有两个小问题(可选):
再次感谢贡献 🙏 以上仅为自动评审的初步意见,具体是否调整、如何取舍,请以维护者的审阅结论为准。 |
|
克隆时,让填一个不重复的名字会比较好? |
74d598e to
3335270
Compare
|
已按评审意见更新并 rebase 最新
相关测试 352 passed, |
|
感谢快速跟进!新提交(333527003)很好地处理了上一轮的两点主要意见,自动复审已确认:
一个完全可选的小清理(不阻断合入):排除名单目前还漏了两个同类的按-chat_id 字段—— 另有一个 UX 小项(可 fast-follow):Dashboard 克隆模式下,表单里填的 再次感谢 🙏 以上仍为自动评审的初步意见,是否调整、以及最终合入,请以维护者的审阅结论为准。 |
一键克隆机器人(#972)合入后的三处收尾。 1. 克隆排除名单补上两个按-chat_id 的实例态字段: - defaultOncallAutoboundChats:源应用 chat_id 的 append-only「已自动绑定」 账本,带进新应用会让共享群的自动 oncall 绑定被误判成「已花掉」而不触发。 - chatFeedbackPolicies:按源 chat_id 建 key 的反馈策略,对新应用是死条目。 同时把排除名单与身份字段提为导出常量 CLONE_EXCLUDED_KEYS / CLONE_IDENTITY_KEYS,测试直接引用,避免测试另抄一份后与实现漂移。 2. Dashboard 克隆弹窗按源 Bot 预填 cliId / 工作目录 / model。此前表单显示通用 默认值而后端克隆会用源 Bot 覆盖,用户填了却被静默丢弃。 3. 修复克隆后工作目录被默认值遮蔽:源 Bot 只有 workingDir(setup add 建出来 的常见形态)时,表单默认 fixed 形态会让目标带上 defaultWorkingDir '~',而 后端取目录是 defaultWorkingDir ?? workingDir,'~' 排在前面把源仓库目录遮蔽 掉,新会话直接在家目录启动。改为按源自身的目录形态预填:源有 defaultWorkingDir 走 fixed,否则有 workingDir 走 card,都没有则不臆造。 为此 bot-payload / BotDefaultsRow 补出 workingDir 字段,并把「源配置行 → 表单预填值」抽成纯函数 cloneSourceDefaultsFrom。 影响面:仅克隆入口(Dashboard 预填与共享的排除名单)及其测试。owner 身份边界 与 cloneBotConfig 的身份恢复逻辑未改动;普通「添加机器人」流程、CLI clone 路径、会话与后端逻辑均不变。 验证:bun run build 通过;对当前 master 的合并树上 dashboard-clone-prefill / dashboard-bot-payload / event-dispatcher / setup-owner-identity / bot-config-editor / dashboard-bot-onboarding / bot-config-store / bot-talk-parity 八套 541 测试全绿,并逐条确认克隆相关用例确实执行而非跳过。 反向变异覆盖全链路四个环节,均如期变红:删 payload 的 workingDir 透传、 映射退回一律 fixed、去掉 dirMode 透传、从排除名单删字段、身份恢复清单去掉 allowedUsers。其中排除名单同时用字面量用例钉死内容、用常量驱动行为断言, 避免「删清单条目会连带删掉断言」的自指盲区。
|
🚀 Released in v3.18.7 |
改动
botmux clone <机器人名> [--name <新名称>]。源名称-copy-时间戳。影响
仅影响新 clone 入口;普通 setup、CLI adapters、PTY/Tmux 与既有会话不变。
验证
pnpm exec vitest run test/event-dispatcher.test.ts test/dashboard-bot-onboarding.test.ts --reporter=dot:2 files / 352 passed。pnpm build:通过。pnpm daemon:restart:5 个 Bot 与 Dashboard 均 online。截图