From cf9e2cd3d65d8e7a5d3eeb46fe731a172adbc94b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=A9=98?= Date: Mon, 18 May 2026 17:05:54 +0000 Subject: [PATCH] fix: parse session_id from stderr (hermes --quiet writes it there) hermes --quiet outputs session_id to stderr and AI response to stdout. The agent was only parsing stdout, so session_id was never found and detail always fell back to raw output. Now checks stderr first, then stdout as fallback. --- packages/uwf-agent-hermes/src/hermes.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/uwf-agent-hermes/src/hermes.ts b/packages/uwf-agent-hermes/src/hermes.ts index bb27661..3836deb 100644 --- a/packages/uwf-agent-hermes/src/hermes.ts +++ b/packages/uwf-agent-hermes/src/hermes.ts @@ -43,7 +43,7 @@ export function buildHermesPrompt(ctx: AgentContext): string { return parts.join("\n"); } -function spawnHermesChat(prompt: string): Promise { +function spawnHermesChat(prompt: string): Promise<{ stdout: string; stderr: string }> { return new Promise((resolve, reject) => { const args = [ "chat", @@ -76,7 +76,7 @@ function spawnHermesChat(prompt: string): Promise { child.on("close", (code) => { if (code === 0) { - resolve(stdout); + resolve({ stdout, stderr }); return; } const detail = stderr.trim() !== "" ? ` stderr=${stderr.trim()}` : ""; @@ -87,10 +87,11 @@ function spawnHermesChat(prompt: string): Promise { async function runHermes(ctx: AgentContext): Promise { const fullPrompt = buildHermesPrompt(ctx); - const rawOutput = await spawnHermesChat(fullPrompt); + const { stdout, stderr } = await spawnHermesChat(fullPrompt); const { store } = ctx; - const sessionId = parseSessionIdFromStdout(rawOutput); + // --quiet mode: session_id may be on stdout or stderr + const sessionId = parseSessionIdFromStdout(stderr) ?? parseSessionIdFromStdout(stdout); if (sessionId !== null) { const session = await loadHermesSession(sessionId); if (session !== null) { @@ -99,8 +100,8 @@ async function runHermes(ctx: AgentContext): Promise { } } - const detailHash = await storeHermesRawOutput(store, rawOutput); - return { output: rawOutput, detailHash }; + const detailHash = await storeHermesRawOutput(store, stdout); + return { output: stdout, detailHash }; } /** Agent CLI factory: parses argv, runs Hermes, extracts output, writes StepNode. */