From 4b9c1851d6062b1b7ee64657abe7817aec4742bd Mon Sep 17 00:00:00 2001 From: Chris Farhood Date: Sun, 12 Apr 2026 09:27:51 -0400 Subject: [PATCH] Parse JSONL events in ui-parser for cleaner output Skip step_start/step_finish/tool_use events in UI display, extract text from type:text events. Provides cleaner real-time output. Co-Authored-By: Claude Opus 4.6 --- src/ui-parser.ts | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/ui-parser.ts b/src/ui-parser.ts index 28b5859..3d8e749 100644 --- a/src/ui-parser.ts +++ b/src/ui-parser.ts @@ -9,5 +9,26 @@ type TranscriptEntry = | { kind: "system"; ts: string; text: string }; export function parseStdoutLine(line: string, ts: string): TranscriptEntry[] { - return [{ kind: "stdout", ts, text: line }]; + const trimmed = line.trim(); + if (!trimmed) return []; + + // Try to parse as JSONL event from opencode run --format json + try { + const event = JSON.parse(trimmed); + const type = typeof event.type === "string" ? event.type : ""; + const part = typeof event.part === "object" && event.part !== null ? event.part : {}; + + if (type === "text" && typeof part.text === "string" && part.text.trim()) { + return [{ kind: "stdout", ts, text: part.text.trim() }]; + } + + // Skip non-display event types + if (type === "step_start" || type === "step_finish" || type === "tool_use") { + return []; + } + } catch { + // Not JSON — treat as raw stdout + } + + return [{ kind: "stdout", ts, text: trimmed }]; }