



























@@ -271,22 +271,17 @@ describe("sanitizeSessionHistory", () => {
271271};
272272273273const expectAssistantUsageSnapshot = (assistant: unknown) => {
274-expect(assistant).toMatchObject({
275-usage: {
276-input: expect.any(Number),
277-output: expect.any(Number),
278-cacheRead: expect.any(Number),
279-cacheWrite: expect.any(Number),
280-totalTokens: expect.any(Number),
281-cost: {
282-input: expect.any(Number),
283-output: expect.any(Number),
284-cacheRead: expect.any(Number),
285-cacheWrite: expect.any(Number),
286-total: expect.any(Number),
287-},
288-},
289-});
274+const usage = (assistant as { usage?: Usage } | undefined)?.usage;
275+expect(typeof usage?.input).toBe("number");
276+expect(typeof usage?.output).toBe("number");
277+expect(typeof usage?.cacheRead).toBe("number");
278+expect(typeof usage?.cacheWrite).toBe("number");
279+expect(typeof usage?.totalTokens).toBe("number");
280+expect(typeof usage?.cost?.input).toBe("number");
281+expect(typeof usage?.cost?.output).toBe("number");
282+expect(typeof usage?.cost?.cacheRead).toBe("number");
283+expect(typeof usage?.cost?.cacheWrite).toBe("number");
284+expect(typeof usage?.cost?.total).toBe("number");
290285};
291286292287beforeAll(async () => {
@@ -334,10 +329,8 @@ describe("sanitizeSessionHistory", () => {
334329sessionId: TEST_SESSION_ID,
335330});
336331337-expect(result[0]).toMatchObject({
338-role: "user",
339-content: "(session bootstrap)",
340-});
332+expect(result[0]?.role).toBe("user");
333+expect((result[0] as { content?: unknown } | undefined)?.content).toBe("(session bootstrap)");
341334expect(
342335sessionEntries.some((entry) => entry.customType === "google-turn-ordering-bootstrap"),
343336).toBe(true);
@@ -491,9 +484,7 @@ describe("sanitizeSessionHistory", () => {
491484const staleAssistant = result.find((message) => message.role === "assistant") as
492485| (AgentMessage & { usage?: unknown })
493486| undefined;
494-expect(staleAssistant).toMatchObject({
495-usage: makeZeroUsageSnapshot(),
496-});
487+expect(staleAssistant?.usage).toEqual(makeZeroUsageSnapshot());
497488});
498489499490it("preserves fresh assistant usage snapshots created after latest compaction summary", async () => {
@@ -800,8 +791,10 @@ describe("sanitizeSessionHistory", () => {
800791"user",
801792]);
802793expect(
803-extractToolCallsFromAssistant(result[0] as Extract<AgentMessage, { role: "assistant" }>),
804-).toMatchObject([
794+extractToolCallsFromAssistant(result[0] as Extract<AgentMessage, { role: "assistant" }>).map(
795+(call) => ({ id: call.id, name: call.name }),
796+),
797+).toEqual([
805798{ id: "call1", name: "read" },
806799{ id: "call2", name: "exec" },
807800{ id: "call3", name: "write" },
@@ -1184,16 +1177,13 @@ describe("sanitizeSessionHistory", () => {
11841177modelId: "claude-sonnet-4-6",
11851178sessionId: TEST_SESSION_ID,
11861179});
1187-expect(validated).toEqual([
1188-{
1189-role: "user",
1190-content: [
1191-{ type: "text", text: "First" },
1192-{ type: "text", text: "Second" },
1193-],
1194-timestamp: expect.any(Number),
1195-},
1180+expect(validated).toHaveLength(1);
1181+expect(validated[0]?.role).toBe("user");
1182+expect((validated[0] as Extract<AgentMessage, { role: "user" }>).content).toEqual([
1183+{ type: "text", text: "First" },
1184+{ type: "text", text: "Second" },
11961185]);
1186+expect(typeof (validated[0] as { timestamp?: unknown }).timestamp).toBe("number");
11971187});
1198118811991189it("strips prior assistant reasoning for Qwen-style OpenAI-compatible replay", async () => {
@@ -1546,10 +1536,8 @@ describe("sanitizeSessionHistory", () => {
15461536});
1547153715481538expect(result).toHaveLength(1);
1549-expect(result[0]).toMatchObject({
1550-role: "user",
1551-content: "retry",
1552-});
1539+expect(result[0]?.role).toBe("user");
1540+expect((result[0] as { content?: unknown } | undefined)?.content).toBe("retry");
15531541});
1554154215551543it("uses immutable thinking replay for amazon-bedrock claude providers when policy preserves signatures", async () => {
@@ -1574,10 +1562,8 @@ describe("sanitizeSessionHistory", () => {
15741562});
1575156315761564expect(result).toHaveLength(1);
1577-expect(result[0]).toMatchObject({
1578-role: "user",
1579-content: "retry",
1580-});
1565+expect(result[0]?.role).toBe("user");
1566+expect((result[0] as { content?: unknown } | undefined)?.content).toBe("retry");
15811567});
1582156815831569it.each([
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。