





















@@ -97,7 +97,7 @@ describe("compaction-timeout helpers", () => {
9797});
98989999it("uses pre-compaction snapshot when compaction timeout occurs", () => {
100-const pre = [castAgentMessage({ role: "assistant", content: "pre" })] as const;
100+const pre = [castAgentMessage({ role: "user", content: "pre" })] as const;
101101const current = [castAgentMessage({ role: "assistant", content: "current" })] as const;
102102expectSelectedSnapshot({
103103timedOutDuringCompaction: true,
@@ -111,8 +111,100 @@ describe("compaction-timeout helpers", () => {
111111});
112112});
113113114+it("trims assistant-tailed pre-compaction snapshots after compaction timeout", () => {
115+const user = castAgentMessage({ role: "user", content: "pre-user" });
116+const pre = [user, castAgentMessage({ role: "assistant", content: "pre-assistant" })] as const;
117+const current = [
118+castAgentMessage({ role: "user", content: "current-user" }),
119+castAgentMessage({ role: "assistant", content: "current-assistant" }),
120+] as const;
121+expectSelectedSnapshot({
122+timedOutDuringCompaction: true,
123+preCompactionSnapshot: [...pre],
124+preCompactionSessionId: "session-pre",
125+currentSnapshot: [...current],
126+currentSessionId: "session-current",
127+expectedSource: "pre-compaction",
128+expectedSessionIdUsed: "session-pre",
129+expectedSnapshot: [user],
130+});
131+});
132+133+it("keeps tool-result tails continuable after compaction timeout", () => {
134+const toolResult = castAgentMessage({
135+role: "toolResult",
136+toolCallId: "call-1",
137+toolName: "lookup",
138+content: [{ type: "text", text: "result" }],
139+isError: false,
140+timestamp: 1,
141+});
142+const pre = [
143+castAgentMessage({ role: "user", content: "pre-user" }),
144+castAgentMessage({ role: "assistant", content: "tool call" }),
145+toolResult,
146+castAgentMessage({ role: "assistant", content: "pre-assistant" }),
147+] as const;
148+expectSelectedSnapshot({
149+timedOutDuringCompaction: true,
150+preCompactionSnapshot: [...pre],
151+preCompactionSessionId: "session-pre",
152+currentSnapshot: [castAgentMessage({ role: "user", content: "current-user" })],
153+currentSessionId: "session-current",
154+expectedSource: "pre-compaction",
155+expectedSessionIdUsed: "session-pre",
156+expectedSnapshot: pre.slice(0, 3),
157+});
158+});
159+160+it("keeps replay-normalized summary tails continuable after compaction timeout", () => {
161+const summary = castAgentMessage({
162+role: "compactionSummary",
163+summary: "older work was summarized",
164+tokensBefore: 120_000,
165+timestamp: 1,
166+});
167+expectSelectedSnapshot({
168+timedOutDuringCompaction: true,
169+preCompactionSnapshot: null,
170+preCompactionSessionId: "session-pre",
171+currentSnapshot: [summary],
172+currentSessionId: "session-current",
173+expectedSource: "current",
174+expectedSessionIdUsed: "session-current",
175+expectedSnapshot: [summary],
176+});
177+});
178+179+it("falls back to current snapshot when the pre-compaction timeout snapshot has no continuable tail", () => {
180+const current = [castAgentMessage({ role: "user", content: "current" })] as const;
181+expectSelectedSnapshot({
182+timedOutDuringCompaction: true,
183+preCompactionSnapshot: [castAgentMessage({ role: "assistant", content: "pre" })],
184+preCompactionSessionId: "session-pre",
185+currentSnapshot: [...current],
186+currentSessionId: "session-current",
187+expectedSource: "current",
188+expectedSessionIdUsed: "session-current",
189+expectedSnapshot: current,
190+});
191+});
192+193+it("returns an empty snapshot when compaction timeout leaves only assistant-tailed snapshots", () => {
194+expectSelectedSnapshot({
195+timedOutDuringCompaction: true,
196+preCompactionSnapshot: [castAgentMessage({ role: "assistant", content: "pre" })],
197+preCompactionSessionId: "session-pre",
198+currentSnapshot: [castAgentMessage({ role: "assistant", content: "current" })],
199+currentSessionId: "session-current",
200+expectedSource: "current",
201+expectedSessionIdUsed: "session-current",
202+expectedSnapshot: [],
203+});
204+});
205+114206it("falls back to current snapshot when pre-compaction snapshot is unavailable", () => {
115-const current = [castAgentMessage({ role: "assistant", content: "current" })] as const;
207+const current = [castAgentMessage({ role: "user", content: "current" })] as const;
116208expectSelectedSnapshot({
117209timedOutDuringCompaction: true,
118210preCompactionSnapshot: null,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。