From a327255834d1be21f18d65e4e40535ab378e9496 Mon Sep 17 00:00:00 2001 From: Chris Farhood Date: Sun, 12 Apr 2026 08:57:51 -0400 Subject: [PATCH] Capture text from step_finish message field in parse OpenCode outputs the final response in step_finish.part.message, not just as type:text events. Added parsing of part.message to ensure the summary is captured when the agent responds. Co-Authored-By: Claude Opus 4.6 --- src/server/parse.test.ts | 13 +++++++++++++ src/server/parse.ts | 2 ++ 2 files changed, 15 insertions(+) diff --git a/src/server/parse.test.ts b/src/server/parse.test.ts index aa6f391..0505bb3 100644 --- a/src/server/parse.test.ts +++ b/src/server/parse.test.ts @@ -31,6 +31,19 @@ describe("parseOpenCodeJsonl", () => { expect(result.costUsd).toBeCloseTo(0.001); }); + it("captures text from step_finish message field", () => { + const stdout = [ + JSON.stringify({ + type: "step_finish", + part: { message: "Final response text", tokens: { input: 10, output: 5 } }, + }), + ].join("\n"); + + const result = parseOpenCodeJsonl(stdout); + + expect(result.summary).toBe("Final response text"); + }); + it("captures errors from error type events", () => { const stdout = [ JSON.stringify({ type: "error", error: { message: "Something went wrong" } }), diff --git a/src/server/parse.ts b/src/server/parse.ts index 96af0ed..de049fa 100644 --- a/src/server/parse.ts +++ b/src/server/parse.ts @@ -51,6 +51,8 @@ export function parseOpenCodeJsonl(stdout: string) { if (type === "step_finish") { const part = parseObject(event.part); + const text = asString(part.message, "").trim(); + if (text) messages.push(text); const tokens = parseObject(part.tokens); const cache = parseObject(tokens.cache); usage.inputTokens += asNumber(tokens.input, 0);