




















@@ -19,14 +19,27 @@ function expectArrayMessageContent(
1919return message.content as Array<{ type: string; text?: string; data?: string }>;
2020}
212122+function expectContentBlock(
23+block: { type: string; text?: string; data?: string } | undefined,
24+expected: { type: string; text?: string; data?: string },
25+) {
26+expect(block?.type).toBe(expected.type);
27+if ("text" in expected) {
28+expect(block?.text).toBe(expected.text);
29+}
30+if ("data" in expected) {
31+expect(block?.data).toBe(expected.data);
32+}
33+}
34+2235function expectPrunedImageMessage(
2336messages: AgentMessage[],
2437errorMessage: string,
2538): Array<{ type: string; text?: string; data?: string }> {
2639const pruned = expectPrunedMessages(messages);
2740const content = expectArrayMessageContent(pruned[0], errorMessage);
2841expect(content).toHaveLength(2);
29-expect(content[1]).toMatchObject({ type: "text", text: PRUNED_HISTORY_IMAGE_MARKER });
42+expectContentBlock(content[1], { type: "text", text: PRUNED_HISTORY_IMAGE_MARKER });
3043return content;
3144}
3245@@ -45,7 +58,7 @@ function expectImageMessagePreserved(messages: AgentMessage[], errorMessage: str
45584659expect(pruned).toBeNull();
4760const content = expectArrayMessageContent(messages[0], errorMessage);
48-expect(content[1]).toMatchObject({ type: "image", data: "abc" });
61+expectContentBlock(content[1], { type: "image", data: "abc" });
4962}
50635164function oldEnoughTail(): AgentMessage[] {
@@ -117,13 +130,13 @@ describe("pruneProcessedHistoryImages", () => {
117130PRUNED_HISTORY_MEDIA_REFERENCE_MARKER,
118131].join("\n"),
119132);
120-expect(content[1]).toMatchObject({ type: "text", text: PRUNED_HISTORY_IMAGE_MARKER });
133+expectContentBlock(content[1], { type: "text", text: PRUNED_HISTORY_IMAGE_MARKER });
121134const originalContent = expectArrayMessageContent(
122135messages[0],
123136"expected original user content",
124137);
125138expect(originalContent[0]?.text).toContain("[media attached: media://inbound/old.png]");
126-expect(originalContent[1]).toMatchObject({ type: "image", data: "abc" });
139+expectContentBlock(originalContent[1], { type: "image", data: "abc" });
127140});
128141129142it("scrubs old media attachment markers from string content without image blocks", () => {
@@ -207,7 +220,7 @@ describe("pruneProcessedHistoryImages", () => {
207220expect(pruned).toBeNull();
208221const content = expectArrayMessageContent(messages[0], "expected user array content");
209222expect(content[0]?.text).toBe("recent [media attached: media://inbound/current.png]");
210-expect(content[1]).toMatchObject({ type: "image", data: "abc" });
223+expectContentBlock(content[1], { type: "image", data: "abc" });
211224});
212225213226it("does not count multiple assistant messages from one tool loop as separate turns", () => {
@@ -249,7 +262,7 @@ describe("pruneProcessedHistoryImages", () => {
249262expect(pruned).toBeNull();
250263const content = expectArrayMessageContent(messages[0], "expected user array content");
251264expect(content).toHaveLength(2);
252-expect(content[1]).toMatchObject({ type: "image", data: "abc" });
265+expectContentBlock(content[1], { type: "image", data: "abc" });
253266});
254267255268it("prunes image blocks from toolResult messages older than 3 assistant turns", () => {
@@ -292,16 +305,16 @@ describe("pruneProcessedHistoryImages", () => {
292305const pruned = expectPrunedMessages(messages);
293306294307const oldContent = expectArrayMessageContent(pruned[0], "expected old user content");
295-expect(oldContent[1]).toMatchObject({ type: "text", text: PRUNED_HISTORY_IMAGE_MARKER });
308+expectContentBlock(oldContent[1], { type: "text", text: PRUNED_HISTORY_IMAGE_MARKER });
296309297310const recentContent = expectArrayMessageContent(pruned[6], "expected recent user content");
298-expect(recentContent[1]).toMatchObject({ type: "image", data: "abc" });
311+expectContentBlock(recentContent[1], { type: "image", data: "abc" });
299312300313const originalOldContent = expectArrayMessageContent(
301314messages[0],
302315"expected original old user content",
303316);
304-expect(originalOldContent[1]).toMatchObject({ type: "image", data: "abc" });
317+expectContentBlock(originalOldContent[1], { type: "image", data: "abc" });
305318});
306319307320it("does not change messages when no assistant turn exists", () => {
@@ -359,7 +372,7 @@ describe("installHistoryImagePruneContextTransform", () => {
359372"expected replay user array content",
360373);
361374expect(replayContent[0]?.text).toBe(`stale ${PRUNED_HISTORY_MEDIA_REFERENCE_MARKER}`);
362-expect(replayContent[1]).toMatchObject({
375+expectContentBlock(replayContent[1], {
363376type: "text",
364377text: PRUNED_HISTORY_IMAGE_MARKER,
365378});
@@ -368,7 +381,7 @@ describe("installHistoryImagePruneContextTransform", () => {
368381"expected original transformed content",
369382);
370383expect(originalContent[0]?.text).toContain("media://inbound/old.png");
371-expect(originalContent[1]).toMatchObject({ type: "image", data: "abc" });
384+expectContentBlock(originalContent[1], { type: "image", data: "abc" });
372385373386restore();
374387expect(agent.transformContext).toBe(originalTransformContext);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。