Skip to content

启动配置错误时保留 resumed session id - #40

Open
smf-h wants to merge 2 commits into
tt-a1i:mainfrom
smf-h:fix/preserve-session-on-startup-errors
Open

启动配置错误时保留 resumed session id#40
smf-h wants to merge 2 commits into
tt-a1i:mainfrom
smf-h:fix/preserve-session-on-startup-errors

Conversation

@smf-h

@smf-h smf-h commented Jul 2, 2026

Copy link
Copy Markdown

摘要

  • 增加统一判断函数,决定 resumed run 非零退出后是否应该清理持久化 session id。
  • 对可恢复的本地启动/配置错误保留 session id,例如 Codex optional dependency 缺失、hooks 配置格式错误、缺少 $VISUAL / $EDITOR
  • 在 exit handler 中从 AgentManager 读取最新 run output,再决定是否清理 last_session_id
  • 保留原有的 generic 非零退出清理行为,因此真正 stale/bad resume 失败时仍会清掉 session id。

背景

Hive 当前把任意 resumed run 的非零退出都当作保存的 session id 已损坏。

但 Codex 可能在还没进入交互提示符之前,就因为本地安装或配置问题退出,例如:

  • Missing optional dependency @openai/codex-win32-x64
  • Cannot open external editor
  • failed to parse hooks config

这些错误不代表之前的 session id 无效。此时清掉 last_session_id,会导致下一次启动不再带 --resume,用户看到的结果就像会话上下文丢了,尽管原始 Codex session 文件仍然存在。

复现 Demo

// fake-codex-startup-failure.mjs
console.error('Error: Missing optional dependency @openai/codex-win32-x64')
process.exit(1)

配置 worker:

{
  "command": "node",
  "args": ["C:/tmp/fake-codex-startup-failure.mjs"],
  "resumeArgsTemplate": "--resume {session_id}",
  "sessionIdCapture": null
}

先写入 agent_sessions.last_session_id,然后启动 worker。

修复前:fake command 退出后,Hive 会清掉保存的 session id。
修复后:Hive 会保留 session id,下一次启动仍然传入 --resume <session_id>

测试

  • volta run --node 22 --pnpm 10.30.3 pnpm exec tsc -p tsconfig.build.json --noEmit
  • volta run --node 22 --pnpm 10.30.3 pnpm exec biome check src/server/agent-run-start-context.ts src/server/agent-run-exit-handler.ts src/server/agent-run-starter.ts tests/unit/claude-session-resume-failure.test.ts
  • volta run --node 22 --pnpm 10.30.3 pnpm exec vitest run tests/unit/claude-session-resume-failure.test.ts --no-file-parallelism --maxWorkers=1

关联 Issue:#39

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.

1 participant