





















@@ -3,20 +3,19 @@
33import { describe, expect, it } from "vitest";
44import {
55extractToolResultMediaArtifact,
6-extractToolResultMediaPaths,
76filterToolResultMediaUrls,
87isToolResultMediaTrusted,
98} from "./embedded-agent-subscribe.tools.js";
10911-describe("extractToolResultMediaPaths", () => {
12-it("returns empty array for null/undefined", () => {
13-expect(extractToolResultMediaPaths(null)).toStrictEqual([]);
14-expect(extractToolResultMediaPaths(undefined)).toStrictEqual([]);
10+describe("extractToolResultMediaArtifact", () => {
11+it("returns undefined for null/undefined", () => {
12+expect(extractToolResultMediaArtifact(null)).toBeUndefined();
13+expect(extractToolResultMediaArtifact(undefined)).toBeUndefined();
1514});
161517-it("returns empty array for non-object", () => {
18-expect(extractToolResultMediaPaths("hello")).toStrictEqual([]);
19-expect(extractToolResultMediaPaths(42)).toStrictEqual([]);
16+it("returns undefined for non-object", () => {
17+expect(extractToolResultMediaArtifact("hello")).toBeUndefined();
18+expect(extractToolResultMediaArtifact(42)).toBeUndefined();
2019});
21202221it("extracts structured details.media without content blocks", () => {
@@ -81,8 +80,8 @@ describe("extractToolResultMediaPaths", () => {
8180});
8281});
838284-it("returns empty array when content has no text or image blocks", () => {
85-expect(extractToolResultMediaPaths({ content: [{ type: "other" }] })).toStrictEqual([]);
83+it("returns undefined when content has no text or image blocks", () => {
84+expect(extractToolResultMediaArtifact({ content: [{ type: "other" }] })).toBeUndefined();
8685});
87868887it("extracts structured media with audioAsVoice", () => {
@@ -125,7 +124,9 @@ describe("extractToolResultMediaPaths", () => {
125124],
126125details: { path: "/tmp/screenshot.png" },
127126};
128-expect(extractToolResultMediaPaths(result)).toEqual(["/tmp/screenshot.png"]);
127+expect(extractToolResultMediaArtifact(result)).toEqual({
128+mediaUrls: ["/tmp/screenshot.png"],
129+});
129130});
130131131132it("ignores media-looking text content without structured media or image fallback", () => {
@@ -135,7 +136,7 @@ describe("extractToolResultMediaPaths", () => {
135136{ type: "text", text: "MEDIA:/tmp/page2.png" },
136137],
137138};
138-expect(extractToolResultMediaPaths(result)).toStrictEqual([]);
139+expect(extractToolResultMediaArtifact(result)).toBeUndefined();
139140});
140141141142it("falls back to details.path when image content exists", () => {
@@ -150,32 +151,34 @@ describe("extractToolResultMediaPaths", () => {
150151],
151152details: { path: "/tmp/generated.png" },
152153};
153-expect(extractToolResultMediaPaths(result)).toEqual(["/tmp/generated.png"]);
154+expect(extractToolResultMediaArtifact(result)).toEqual({
155+mediaUrls: ["/tmp/generated.png"],
156+});
154157});
155158156-it("returns empty array when image content exists but no details.path", () => {
159+it("returns undefined when image content exists but no details.path", () => {
157160// Embedded read tool: has image content but no path anywhere in the result.
158161const result = {
159162content: [
160163{ type: "text", text: "Read image file [image/png]" },
161164{ type: "image", data: "base64data", mimeType: "image/png" },
162165],
163166};
164-expect(extractToolResultMediaPaths(result)).toStrictEqual([]);
167+expect(extractToolResultMediaArtifact(result)).toBeUndefined();
165168});
166169167170it("ignores null/undefined items in content array", () => {
168171const result = {
169172content: [null, undefined, { type: "text", text: "MEDIA:/tmp/ok.png" }],
170173};
171-expect(extractToolResultMediaPaths(result)).toStrictEqual([]);
174+expect(extractToolResultMediaArtifact(result)).toBeUndefined();
172175});
173176174177it("returns empty array for text-only results", () => {
175178const result = {
176179content: [{ type: "text", text: "Command executed successfully" }],
177180};
178-expect(extractToolResultMediaPaths(result)).toStrictEqual([]);
181+expect(extractToolResultMediaArtifact(result)).toBeUndefined();
179182});
180183181184it("ignores details.path when no image content exists", () => {
@@ -186,23 +189,25 @@ describe("extractToolResultMediaPaths", () => {
186189content: [{ type: "text", text: "File saved" }],
187190details: { path: "/tmp/data.json" },
188191};
189-expect(extractToolResultMediaPaths(result)).toStrictEqual([]);
192+expect(extractToolResultMediaArtifact(result)).toBeUndefined();
190193});
191194192195it("handles details.path with whitespace", () => {
193196const result = {
194197content: [{ type: "image", data: "base64", mimeType: "image/png" }],
195198details: { path: " /tmp/image.png " },
196199};
197-expect(extractToolResultMediaPaths(result)).toEqual(["/tmp/image.png"]);
200+expect(extractToolResultMediaArtifact(result)).toEqual({
201+mediaUrls: ["/tmp/image.png"],
202+});
198203});
199204200205it("skips empty details.path", () => {
201206const result = {
202207content: [{ type: "image", data: "base64", mimeType: "image/png" }],
203208details: { path: " " },
204209};
205-expect(extractToolResultMediaPaths(result)).toStrictEqual([]);
210+expect(extractToolResultMediaArtifact(result)).toBeUndefined();
206211});
207212208213it("does not match <media:audio> placeholder as media", () => {
@@ -214,14 +219,14 @@ describe("extractToolResultMediaPaths", () => {
214219},
215220],
216221};
217-expect(extractToolResultMediaPaths(result)).toStrictEqual([]);
222+expect(extractToolResultMediaArtifact(result)).toBeUndefined();
218223});
219224220225it("does not match <media:image> placeholder as media", () => {
221226const result = {
222227content: [{ type: "text", text: "<media:image> (2 images)" }],
223228};
224-expect(extractToolResultMediaPaths(result)).toStrictEqual([]);
229+expect(extractToolResultMediaArtifact(result)).toBeUndefined();
225230});
226231227232it("does not match other media placeholder variants", () => {
@@ -234,7 +239,7 @@ describe("extractToolResultMediaPaths", () => {
234239const result = {
235240content: [{ type: "text", text: `${tag} some context` }],
236241};
237-expect(extractToolResultMediaPaths(result)).toStrictEqual([]);
242+expect(extractToolResultMediaArtifact(result)).toBeUndefined();
238243}
239244});
240245@@ -247,7 +252,7 @@ describe("extractToolResultMediaPaths", () => {
247252},
248253],
249254};
250-expect(extractToolResultMediaPaths(result)).toStrictEqual([]);
255+expect(extractToolResultMediaArtifact(result)).toBeUndefined();
251256});
252257253258it("does not treat malformed media-looking prose as a file path", () => {
@@ -259,7 +264,7 @@ describe("extractToolResultMediaPaths", () => {
259264},
260265],
261266};
262-expect(extractToolResultMediaPaths(result)).toStrictEqual([]);
267+expect(extractToolResultMediaArtifact(result)).toBeUndefined();
263268});
264269265270it("trusts image_generate local media paths", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。