bug: hermes ACP session/resume returns empty text on subsequent prompt #418

Closed
opened 2026-05-23 06:41:09 +00:00 by xiaoju · 0 comments
Owner

现象

跨进程 session resume 后,prompt() 返回空文本。Resume 本身不报错。

复现

// Client A: first run
const clientA = new HermesAcpClient();
await clientA.connect(cwd);
const first = await clientA.prompt("Remember: WATERMELON. Reply: ACKNOWLEDGED");
// first.text.length > 0 ✅
await clientA.close();

// Client B: resume
const clientB = new HermesAcpClient();
await clientB.resume(first.sessionId, cwd);
const second = await clientB.prompt("What was the secret code?");
// second.text.length === 0 ❌

E2E 测试文件:packages/workflow-agent-hermes/__tests__/resume-e2e.test.ts

影响

Workflow re-entry 场景(如 reviewer reject → developer re-entry)依赖 session resume 来保持上下文。当前 resume 失效导致 agent 返回空内容,frontmatter 解析失败,thread 卡住。

直接触发了 #416(developer re-entry 空输出)。

分析

  • HermesAcpClient.resume() 发送 session/resume 请求,hermes 端返回成功
  • 后续 prompt() 发送 session/prompt,但收集到的 messages 里没有新的非空 assistant content
  • Session 文件(~/.hermes/sessions/)也没有 resume 后的新消息

可能原因

  1. Hermes ACP 的 session/resume 恢复了 session 元数据,但 agent 上下文(对话历史)没有正确加载
  2. 或者 prompt 发出去了但 hermes 端处理异常,静默返回了空响应

临时 workaround

在 resume 失败时 fallback 到新 session(hermes.ts 已有此逻辑),但当前 resume 不报错所以不会触发 fallback。可以检测 prompt 结果为空时主动 fallback。

— 小橘 🍊(NEKO Team)
Ref: #416

## 现象 跨进程 session resume 后,`prompt()` 返回空文本。Resume 本身不报错。 ## 复现 ```typescript // Client A: first run const clientA = new HermesAcpClient(); await clientA.connect(cwd); const first = await clientA.prompt("Remember: WATERMELON. Reply: ACKNOWLEDGED"); // first.text.length > 0 ✅ await clientA.close(); // Client B: resume const clientB = new HermesAcpClient(); await clientB.resume(first.sessionId, cwd); const second = await clientB.prompt("What was the secret code?"); // second.text.length === 0 ❌ ``` E2E 测试文件:`packages/workflow-agent-hermes/__tests__/resume-e2e.test.ts` ## 影响 Workflow re-entry 场景(如 reviewer reject → developer re-entry)依赖 session resume 来保持上下文。当前 resume 失效导致 agent 返回空内容,frontmatter 解析失败,thread 卡住。 直接触发了 #416(developer re-entry 空输出)。 ## 分析 - `HermesAcpClient.resume()` 发送 `session/resume` 请求,hermes 端返回成功 - 后续 `prompt()` 发送 `session/prompt`,但收集到的 messages 里没有新的非空 assistant content - Session 文件(`~/.hermes/sessions/`)也没有 resume 后的新消息 ## 可能原因 1. Hermes ACP 的 `session/resume` 恢复了 session 元数据,但 agent 上下文(对话历史)没有正确加载 2. 或者 prompt 发出去了但 hermes 端处理异常,静默返回了空响应 ## 临时 workaround 在 resume 失败时 fallback 到新 session(`hermes.ts` 已有此逻辑),但当前 resume 不报错所以不会触发 fallback。可以检测 prompt 结果为空时主动 fallback。 — 小橘 🍊(NEKO Team) Ref: #416
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: uncaged/workflow#418