OpenRig rig reconcile-session会话协调:歧义操作如何去重不丢活
【免费下载链接】openrigBuild your own network of agents from Claude Code, Codex and Pi: persistent teams with roles, shared context and owned work.项目地址: https://gitcode.com/GitHub_Trending/op/openrig
OpenRig让你用 YAML 定义一支由 Claude Code、Codex 等智能体组成的持久化团队。当你在终端里手动resume了一个座席(seat),daemon 却仍认为它已经下线——这时一条rig reconcile-session会话协调命令就能把真实存活的进程重新"认领"回它自己的持久节点:不重启、不重放、不输入任何字符,既去重了歧义操作,又不丢任何活。
为什么会出现"歧义操作":手动 resume 之后的双视图
把 OpenRig 想成两层视图:
- 现实层:tmux 里真实存活的会话进程;
- 投影层:daemon 数据库里维护的座席状态(
rig ps、拓扑图、消息路由都读这一层)。
正常流程里,rig up启动、rig seat管理会同步这两层。但一旦你绕过工具,直接在座席的 tmux 会话里手动执行claude --resume或codex resume,投影层就"失明"了:
- daemon 显示该座席down,你却看着它正在干活;
- 你若再让 daemon 去"修",轻则重复启动一个同身份的新进程(去重失败),重则杀掉正在工作的旧进程(丢活)。
这正是 reconcile-session 要消灭的歧义操作。
reconcile-session 快速上手:一条命令修复
核心用法就一条命令(会话名格式为角色@rig名):
rig reconcile-session dev-impl@my-rig --no-launch它的行为契约非常克制,成功时输出三行关键信息:
Reconciled dev-impl@my-rig into rig my-rig Node: dev.impl (node id unchanged - no relaunch, no input sent) Conversation continuity: unverified (reconcile reconnects the projection; it does not verify the conversation)node id unchanged:绑定到同一个持久节点,不做重新分配;no relaunch, no input sent:不重启、不向面板输入任何字符;unverified:诚实地声明——协调只重连投影,绝不谎称会话内容已验证。
CLI 实现见 reconcile-session.ts,命令帮助文本里写明了全部边界。
歧义消除:--rig 与 --node 必须成对
如果多个 rig 里存在同名座席,可以显式指定目标。注意:两个参数必须同时提供,单独提供会在不联系 daemon的情况下直接报错退出(exit 1),从源头杜绝"改错了 rig"的歧义操作:
rig reconcile-session dev-impl@my-rig --rig <rig-id> --node dev.impl --no-launch这个成对校验逻辑见 reconcile-session.ts,对应测试用例见 reconcile-session.test.ts。
给智能体用的 JSON 输出
--json会透传 daemon 的完整结果,包括projectionDrift(无法证实的元数据列表)和continuity(会话连续性状态),方便自动化脚本判断"投影修好了没有、哪些字段还是存疑"。
如何做到"去重不丢活":五条永不越界
daemon 侧把 reconcile-session 实现为拓扑收敛操作reconcile_session,走的是认领服务(claim service)而非启动器——见 topology-converge.ts 与路由 sessions.ts。它承诺永不做以下五件事:
- 不 launch / relaunch——绝不额外起进程,天然去重;
- 不 kill——正在工作的会话原样保留,天然不丢活;
- 不重放启动流程、不按 resume 菜单;
- 不压缩(compaction)上下文;
- 不向终端面板写入任何输入。
它唯一做的事:把存活进程绑定回自己原有的持久节点(同 node id、不重新命名),并刷新投影。修好之后,rig ps、拓扑视图、rig send发消息、capture 捕获、queue 队列路由立刻恢复可用——原来的对话、原来的任务地址,一样都没变。
💡 与
switch-client的分工:后者只改变客户端"看哪个座席"的视角,从不修复路由。若路由坏了,OpenRig 会明确提示:先用rig reconcile-session(或 seat handover)修好路由,再跑 switch-client——见 seat-switch-client-service.ts。
修复失败会怎样:诚实报错,而不是静默猜测
如果给的会话名在当前机器上根本不存在,daemon 返回 404session_not_found,CLI 打印No live tmux session named "..."并以 exit 1 退出(行为见 reconcile-session.test.ts)。找不到就是找不到,而不是"随便挑一个相似的座席绑上去"——这同样是去重的一部分。
验证修复是否生效,直接看两处:
rig ps --nodes --rig my-rig # 座席应显示为在线,node id 保持不变 rig tui --shared # 拓扑图中该节点恢复连线相关文件资料
- CLI 命令实现:packages/cli/src/commands/reconcile-session.ts
- 拓扑收敛操作(reconcile_session):packages/daemon/src/domain/topology-converge.ts
- daemon 路由(POST /api/sessions/:name/reconcile):packages/daemon/src/routes/sessions.ts
- 命令行为测试:packages/cli/test/reconcile-session.test.ts
- 示例团队配置:demo/rig.yaml
一句话总结:手动 resume 之后,先rig reconcile-session对齐两个视图;它只认领、不重建,把歧义操作压到零,把在途的工作完整保留。
【免费下载链接】openrigBuild your own network of agents from Claude Code, Codex and Pi: persistent teams with roles, shared context and owned work.项目地址: https://gitcode.com/GitHub_Trending/op/openrig
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考