diff --git a/ui/src/components/transcript/RunTranscriptView.test.tsx b/ui/src/components/transcript/RunTranscriptView.test.tsx index 580d7a20..de01b634 100644 --- a/ui/src/components/transcript/RunTranscriptView.test.tsx +++ b/ui/src/components/transcript/RunTranscriptView.test.tsx @@ -57,4 +57,28 @@ describe("RunTranscriptView", () => { expect(html).toContain("
  • first
  • "); expect(html).toContain("
  • second
  • "); }); + + it("hides saved-session resume skip stderr from nice mode normalization", () => { + const entries: TranscriptEntry[] = [ + { + kind: "stderr", + ts: "2026-03-12T00:00:00.000Z", + text: "[paperclip] Skipping saved session resume for task \"PAP-485\" because wake reason is issue_assigned.", + }, + { + kind: "assistant", + ts: "2026-03-12T00:00:01.000Z", + text: "Working on the task.", + }, + ]; + + const blocks = normalizeTranscript(entries, false); + + expect(blocks).toHaveLength(1); + expect(blocks[0]).toMatchObject({ + type: "message", + role: "assistant", + text: "Working on the task.", + }); + }); }); diff --git a/ui/src/components/transcript/RunTranscriptView.tsx b/ui/src/components/transcript/RunTranscriptView.tsx index 7bc24c97..e64d21d3 100644 --- a/ui/src/components/transcript/RunTranscriptView.tsx +++ b/ui/src/components/transcript/RunTranscriptView.tsx @@ -275,6 +275,11 @@ function parseSystemActivity(text: string): { activityId?: string; name: string; }; } +function shouldHideNiceModeStderr(text: string): boolean { + const normalized = compactWhitespace(text).toLowerCase(); + return normalized.startsWith("[paperclip] skipping saved session resume"); +} + function groupCommandBlocks(blocks: TranscriptBlock[]): TranscriptBlock[] { const grouped: TranscriptBlock[] = []; let pending: Array["items"][number]> = []; @@ -428,6 +433,9 @@ export function normalizeTranscript(entries: TranscriptEntry[], streaming: boole } if (entry.kind === "stderr") { + if (shouldHideNiceModeStderr(entry.text)) { + continue; + } blocks.push({ type: "event", ts: entry.ts,