Skip to content

fix(manager): 按桌面身份续接运行实例并可靠启停重启 - #2736

Closed
130040167 wants to merge 3 commits into
BigPizzaV3:mainfrom
130040167:codex/codex-lifecycle-continuity-pr-20261028
Closed

130040167 wants to merge 3 commits into
BigPizzaV3:mainfrom
130040167:codex/codex-lifecycle-continuity-pr-20261028

Conversation

@130040167

@130040167 130040167 commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

退出旧管理器再启动更新后的管理器时,原生 Codex 桌面可能仍在运行,但 helper/worker 已断开;CDP 不可用时,停止或重启又可能误判为已经退出,留下残留进程或重复启动。此修改按已保存的桌面身份重新连接,并在确认旧进程树退出后才启动替代实例。

依赖 #2735 的进程身份与安全清理接口。当前提交历史包含该前置提交,前置合入后需移除依赖差异。显式 Electron 多开目录隔离配合 #2732 使用;微信功能独立维护。

  • 主实例恢复先核验原始进程、创建身份和原生目录;已连接桌面走 attach-only,不重写其供应商配置。首次自动启动仅在确认目标不存在时允许。
  • 健康且兼容的 worker 可以复用;更新交接采用带请求者身份、到期时间及提交确认的协议,恢复进程树 checkpoint。取消、请求者退出或候选失败时回到原服务,不留下过期请求。
  • CDP 断连不代表桌面退出。停止、重启校验实例代际,并等待旧树退出;未知状态保持可见且允许受保护的停止,拒绝重复启动尚存的桌面。
  • helper socket 不传给子进程,避免旧端口因继承句柄无法释放。代理端口被其他进程占用时,在关闭桌面前拒绝重启。

Windows 验证:

  • 最新上游组合源码通过 TypeScript、Vite;前端 991 项通过、1 项跳过。此前 launcher 105 项、packaged launch 26 项、handoff 协议 13 项通过;进程安全独立验证见 修复 Windows 多开进程的安全停止边界 #2735。
  • 隔离桌面主实例与两个多开实例:替换管理器保持原桌面,主实例重启确认旧树退出,兄弟实例保持;桌面停止或根进程崩溃后清理自有后代。
  • 两个多开原会话经过管理器重开、不同路径二进制交接及 worker 丢失恢复,每次显式发送下一条消息均从本地模拟上游收到回复,原 thread ID 与模型菜单保持。
  • 主实例也完成原生 UI 的下一条消息验收:同构建重开,以及从独立构建的 17cabdc3 升级到 80c2dfdd,均保持原 Codex 桌面进程和原 thread ID,升级前后两条回复保存在同一份原生历史中。两侧构建均来自干净提交,后者包含当前上游 8c2b5b5d。
  • 每次主实例发送前,通过原生只读接口重新确认测试 CODEX_HOME、配置层文件、独立 SQLite 标记、精确本地 helper 端口及非官方鉴权;模型响应只来自本地模拟服务。
  • 跨源码升级验收的进程退出、正式实例身份保持、测试端口释放和无未归属进程四项均通过,完整收尾成功。

没有将真实供应商、真实微信或跨平台行为计入上述模拟验收。首次 worker 验收曾在空白兄弟窗口的模型菜单处超时;补强为两个窗口都创建并续接会话后通过,不能据此排除所有空白页加载问题。

@130040167
130040167 force-pushed the codex/codex-lifecycle-continuity-pr-20261028 branch from 24f361c to a82153b Compare October 28, 2026 12:20
@BigPizzaV3

Copy link
Copy Markdown
Owner

感谢投入这么多验证工作。这个 PR 目前体量(约 5300 行)超出了能可靠审查的范围,建议在 #2735 定稿后拆成:主实例身份与停止/重启、包上下文启动与 CODEX_HOME 校验、Windows worker 交接协议、启动顺序与 UI 四部分。另外有几处需要先调整:

  1. resume_on_manager_start 在任一多开交接失败或超时时会跳过网关启动、模型监听和自动接管,这一整场会话 Agent 都会连不上或绕过网关,请让这些启动与多开交接解耦。
  2. 主实例停止/重启强制要求身份记录,外部启动或升级前已运行的 Codex 会被拒绝停止/重启(包括切换供应商时的重启),需要兼容路径。
  3. 旧版 worker 没有 stopped 结果,升级后会长期显示 unknown。
  4. copy_diagnostics 同步做 CDP 探测可能卡住界面。

@130040167
130040167 marked this pull request as ready for review October 28, 2026 14:01
@130040167
130040167 marked this pull request as draft October 28, 2026 14:14
@130040167

Copy link
Copy Markdown
Contributor Author

按维护建议关闭当前大型生命周期 PR,后续拆分为主实例身份与启停重启、启动上下文/CODEX_HOME、worker 交接协议、启动顺序与 UI 四个独立 PR,并逐项处理当前审查意见。

@130040167 130040167 closed this Oct 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants