























@@ -6,6 +6,7 @@ import {
66buildSessionEntry,
77listSessionFilesForAgent,
88sessionPathForFile,
9+type SessionFileEntry,
910} from "./session-files.js";
10111112let fixtureRoot: string;
@@ -36,6 +37,14 @@ afterEach(() => {
3637}
3738});
383940+function requireSessionEntry(entry: SessionFileEntry | null): SessionFileEntry {
41+expect(entry).toBeTruthy();
42+if (!entry) {
43+throw new Error("expected session entry");
44+}
45+return entry;
46+}
47+3948describe("listSessionFilesForAgent", () => {
4049it("includes reset and deleted transcripts in session file listing", async () => {
4150const sessionsDir = path.join(tmpDir, "agents", "main", "sessions");
@@ -110,19 +119,19 @@ describe("buildSessionEntry", () => {
110119const filePath = path.join(tmpDir, "session.jsonl");
111120fsSync.writeFileSync(filePath, jsonlLines.join("\n"));
112121113-const entry = await buildSessionEntry(filePath);
122+const entry = requireSessionEntry(await buildSessionEntry(filePath));
114123// The content should have 3 lines (3 message records)
115-const contentLines = entry?.content.split("\n");
124+const contentLines = entry.content.split("\n");
116125expect(contentLines).toHaveLength(3);
117-expect(contentLines?.[0]).toContain("User: Hello world");
118-expect(contentLines?.[1]).toContain("Assistant: Hi there");
119-expect(contentLines?.[2]).toContain("User: Tell me a joke");
126+expect(contentLines[0]).toContain("User: Hello world");
127+expect(contentLines[1]).toContain("Assistant: Hi there");
128+expect(contentLines[2]).toContain("User: Tell me a joke");
120129121130// lineMap should map each content line to its original JSONL line (1-indexed)
122131// Content line 0 → JSONL line 4 (the first user message)
123132// Content line 1 → JSONL line 6 (the assistant message)
124133// Content line 2 → JSONL line 7 (the second user message)
125-expect(entry?.lineMap).toEqual([4, 6, 7]);
134+expect(entry.lineMap).toEqual([4, 6, 7]);
126135});
127136128137it("returns empty lineMap when no messages are found", async () => {
@@ -133,9 +142,9 @@ describe("buildSessionEntry", () => {
133142const filePath = path.join(tmpDir, "empty-session.jsonl");
134143fsSync.writeFileSync(filePath, jsonlLines.join("\n"));
135144136-const entry = await buildSessionEntry(filePath);
137-expect(entry?.content).toBe("");
138-expect(entry?.lineMap).toEqual([]);
145+const entry = requireSessionEntry(await buildSessionEntry(filePath));
146+expect(entry.content).toBe("");
147+expect(entry.lineMap).toEqual([]);
139148});
140149141150it("indexes usage-counted reset/deleted archives but still skips bak and checkpoint artifacts", async () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。