refactor: session cache should be per-agent, not shared #461

Closed
opened 2026-05-24 08:59:52 +00:00 by xiaoju · 0 comments
Owner

问题

agent-sessions.json 被所有 agent adapter(claude-code、hermes)共用,key 是 threadId:role

如果同一个 thread+role 切换 agent,session ID 会互相覆盖,导致错误的 session resume。

方案

getCachePath() 接受 agent name 参数,按 agent 分文件存储:

cache/
  claude-code-sessions.json
  hermes-sessions.json

改动点

  1. session-cache.tsgetCachePath(agentName: string) 改为 cache/${agentName}-sessions.json
  2. getCachedSessionId / setCachedSessionId 增加 agentName 参数
  3. claude-code.ts — 传入 "claude-code"
  4. hermes.ts — 传入 "hermes"
  5. 迁移:首次运行时如果旧 agent-sessions.json 存在,可以直接忽略(旧 session 丢了无所谓,只是无法 resume)

涉及文件

  • packages/workflow-agent-kit/src/session-cache.ts
  • packages/workflow-agent-claude-code/src/claude-code.ts
  • packages/workflow-agent-hermes/src/hermes.ts
## 问题 `agent-sessions.json` 被所有 agent adapter(claude-code、hermes)共用,key 是 `threadId:role`。 如果同一个 thread+role 切换 agent,session ID 会互相覆盖,导致错误的 session resume。 ## 方案 `getCachePath()` 接受 agent name 参数,按 agent 分文件存储: ``` cache/ claude-code-sessions.json hermes-sessions.json ``` ### 改动点 1. `session-cache.ts` — `getCachePath(agentName: string)` 改为 `cache/${agentName}-sessions.json` 2. `getCachedSessionId` / `setCachedSessionId` 增加 `agentName` 参数 3. `claude-code.ts` — 传入 `"claude-code"` 4. `hermes.ts` — 传入 `"hermes"` 5. 迁移:首次运行时如果旧 `agent-sessions.json` 存在,可以直接忽略(旧 session 丢了无所谓,只是无法 resume) ## 涉及文件 - `packages/workflow-agent-kit/src/session-cache.ts` - `packages/workflow-agent-claude-code/src/claude-code.ts` - `packages/workflow-agent-hermes/src/hermes.ts`
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: uncaged/workflow#461