import test from "node:test"; import assert from "node:assert/strict"; import { mkdtemp, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { filterClaudeTraceEvents, readClaudeTraceEvents } from "../src/ui/claude-trace-store.js"; test("readClaudeTraceEvents parses and sorts ndjson records", async () => { const workspace = await mkdtemp(join(tmpdir(), "claude-trace-store-")); const logPath = join(workspace, "claude-trace.ndjson"); await writeFile( logPath, [ '{"timestamp":"2026-02-24T17:27:05.000Z","message":"later","sessionId":"s1"}', 'not-json', '{"timestamp":"2026-02-24T17:26:00.000Z","message":"earlier","sessionId":"s1"}', '{"message":"missing timestamp"}', ].join("\n"), "utf8", ); const events = await readClaudeTraceEvents(logPath); assert.equal(events.length, 2); assert.equal(events[0]?.message, "earlier"); assert.equal(events[1]?.message, "later"); }); test("filterClaudeTraceEvents filters by session and limit", () => { const events = [ { timestamp: "2026-02-24T17:00:00.000Z", message: "a", sessionId: "s1" }, { timestamp: "2026-02-24T17:01:00.000Z", message: "b", sessionId: "s2" }, { timestamp: "2026-02-24T17:02:00.000Z", message: "c", sessionId: "s1" }, ]; const filtered = filterClaudeTraceEvents(events, { sessionId: "s1", limit: 1, }); assert.equal(filtered.length, 1); assert.equal(filtered[0]?.message, "c"); });