import { RunId, ThreadId, TurnItemId, type OrchestrationV2TurnItem } from "@t3tools/contracts"; import * as DateTime from "effect/DateTime"; import { describe, expect, it } from "vite-plus/test"; import { deriveTimelineEntriesFromVisibleTurnItems } from "./session-logic"; import { deriveMessagesTimelineRows, workEntryDisplayLabel, } from "./components/chat/MessagesTimeline.logic"; const retainedMessage = "2026-03-14T16:11:12.550224Z ERROR codex_core::codex: failed to load skill /home/sebherrerabe/repos/devsuite/.agent/skills/monorepo-scaffolding/SKILL.md: invalid YAML: mapping va..."; const warningSummary = "2026-03-14T16:11:12.550224Z ERROR codex_core::codex: failed to load skill /home/sebherrerabe/repos/devsuite/.agent/sk..."; const now = DateTime.makeUnsafe("2026-09-05T00:00:00.000Z"); const baseItem = { id: TurnItemId.make("diagnostic"), threadId: ThreadId.make("thread-1"), runId: RunId.make("run-1"), nodeId: null, providerThreadId: null, providerTurnId: null, nativeItemRef: null, parentItemId: null, ordinal: 0, status: "completed" as const, title: "Runtime error", startedAt: now, completedAt: now, updatedAt: now, }; function workEntry(item: OrchestrationV2TurnItem) { const [entry] = deriveTimelineEntriesFromVisibleTurnItems({ visibleTurnItems: [ { position: 0, visibility: "local", sourceThreadId: item.threadId, sourceItemId: item.id, item, }, ], optimisticMessages: [], }); if (entry?.kind !== "work") throw new Error("Expected a work-log entry"); return entry.entry; } function errorItem( overrides: Partial> = {}, ): Extract { return { ...baseItem, type: "error", failure: { class: "provider_error", message: retainedMessage, code: "runtime_error", retryable: false, }, ...overrides, }; } describe("runtime diagnostics in the v2 work log", () => { it("shows the retained error message in place of a generic row label", () => { const entry = workEntry(errorItem()); expect(entry).toMatchObject({ label: "Runtime error", detail: retainedMessage }); expect(workEntryDisplayLabel(entry, undefined)).toBe(retainedMessage); }); it("shows the retained diagnostic message beyond its truncated title", () => { const entry = workEntry(errorItem({ title: warningSummary })); expect(entry).toMatchObject({ label: warningSummary, detail: retainedMessage }); expect(workEntryDisplayLabel(entry, undefined)).toBe(retainedMessage); }); it("uses the full system notice instead of a truncated warning title", () => { const entry = workEntry({ ...baseItem, type: "system_notice", title: warningSummary, message: retainedMessage, }); expect(entry.label).toBe(retainedMessage); expect(workEntryDisplayLabel(entry, undefined)).toBe(retainedMessage); expect(entry.detail).toBeUndefined(); }); it("keeps retry progress visible while retaining its diagnostic detail", () => { const entry = workEntry( errorItem({ title: "Provider retry", status: "running", retry: { attempt: 2, maxAttempts: 5, retryDelayMs: 1_500 }, }), ); expect(workEntryDisplayLabel(entry, undefined)).toBe("Retrying provider (2/5)"); expect(entry.detail).toBe(`${retainedMessage} Retrying in 1.5s.`); }); it("keeps a diagnostic separate from adjacent tool summaries", () => { const entries = deriveTimelineEntriesFromVisibleTurnItems({ visibleTurnItems: [ { ...baseItem, type: "command_execution" as const, id: TurnItemId.make("command-before"), input: "git status", output: "clean", exitCode: 0, }, errorItem(), { ...baseItem, type: "command_execution" as const, id: TurnItemId.make("command-after"), input: "git diff", output: "", exitCode: 0, }, ].map((item, position) => ({ position, visibility: "local" as const, sourceThreadId: item.threadId, sourceItemId: item.id, item, })), optimisticMessages: [], }); const rows = deriveMessagesTimelineRows({ timelineEntries: entries, isWorking: true, activeTurnStartedAt: DateTime.formatIso(now), latestRun: { runId: baseItem.runId, status: "running", startedAt: DateTime.formatIso(now), completedAt: null, }, turnDiffSummaryByAssistantMessageId: new Map(), revertTurnCountByUserMessageId: new Map(), }); const diagnostic = rows.find((row) => row.id === baseItem.id); expect(diagnostic?.kind).toBe("work"); if (diagnostic?.kind !== "work") throw new Error("Expected a diagnostic row"); expect(diagnostic.isExpandedToolGroup).toBe(false); expect(diagnostic.groupedEntries).toHaveLength(1); expect(workEntryDisplayLabel(diagnostic.groupedEntries[0]!, undefined)).toBe(retainedMessage); }); it("does not turn an unrelated tool payload message into a diagnostic", () => { const entry = workEntry({ ...baseItem, type: "dynamic_tool", title: "Read file", toolName: "read_file", input: {}, output: { message: retainedMessage }, }); expect(entry.label).toBe("Read file"); expect(entry.detail).toBeUndefined(); }); });