-
Notifications
You must be signed in to change notification settings - Fork 218
Open
Description
Hi,在阅读 Agent 相关代码时发现一个关于 session 管理一致性 的疑问。
背景
在 services/agent.ts 中,createSession() 会创建一个 session 并存入 activeSessions,随后将该 sessionId 传入 agent.plan():
// services/agent.ts:155
agent.plan(prompt, {
sessionId: session.id,
abortController: ...
});这里看起来是由 Service 层统一管理 session 生命周期,并通过 sessionId 贯穿调用链。
发现的问题
但在 ClaudeAgent.plan() 内部,并没有使用传入的 sessionId,而是重新创建了一个新的 session:
// ClaudeAgent.plan():1495
const session = this.createSession('planning'); // 新建 session
yield { type: 'session', sessionId: session.id };这会导致:
- Service 层
activeSessions中保存的是 session A - Agent 内部实际使用并向前端返回的是 session B
前端最终拿到的 sessionId 与 Service 层维护的并非同一个。
潜在影响
这可能会带来一些一致性问题,例如:
- 当前端调用
/agent/stop/:sessionId时
→ 使用的是 Agent 返回的 sessionId - 但 Service 层的
activeSessions中
→ 只存在最初创建的 sessionId
在这种情况下,是否可能导致 stop 接口无法找到对应的 session?
相关范围
类似的模式在以下方法中似乎也存在:
execute()run()
它们内部同样会重新 createSession(),而不是复用上层传入的 sessionId。
想确认的问题
- 是否应该在
ClaudeAgent.plan / execute / run中- 复用传入的
sessionId - 或建立明确的映射关系?
- 复用传入的
感谢解答 🙏
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels