@mcpmesh/sdk 0.9.12 → 1.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dist/__tests__/llm-agent-media.test.d.ts +8 -0
  2. package/dist/__tests__/llm-agent-media.test.d.ts.map +1 -0
  3. package/dist/__tests__/llm-agent-media.test.js +167 -0
  4. package/dist/__tests__/llm-agent-media.test.js.map +1 -0
  5. package/dist/__tests__/media-helpers.test.d.ts +7 -0
  6. package/dist/__tests__/media-helpers.test.d.ts.map +1 -0
  7. package/dist/__tests__/media-helpers.test.js +60 -0
  8. package/dist/__tests__/media-helpers.test.js.map +1 -0
  9. package/dist/__tests__/media-param.test.d.ts +7 -0
  10. package/dist/__tests__/media-param.test.d.ts.map +1 -0
  11. package/dist/__tests__/media-param.test.js +104 -0
  12. package/dist/__tests__/media-param.test.js.map +1 -0
  13. package/dist/__tests__/media-resolver.test.d.ts +8 -0
  14. package/dist/__tests__/media-resolver.test.d.ts.map +1 -0
  15. package/dist/__tests__/media-resolver.test.js +298 -0
  16. package/dist/__tests__/media-resolver.test.js.map +1 -0
  17. package/dist/__tests__/media-result.test.d.ts +5 -0
  18. package/dist/__tests__/media-result.test.d.ts.map +1 -0
  19. package/dist/__tests__/media-result.test.js +180 -0
  20. package/dist/__tests__/media-result.test.js.map +1 -0
  21. package/dist/__tests__/media-store.test.d.ts +7 -0
  22. package/dist/__tests__/media-store.test.d.ts.map +1 -0
  23. package/dist/__tests__/media-store.test.js +102 -0
  24. package/dist/__tests__/media-store.test.js.map +1 -0
  25. package/dist/__tests__/proxy-resource-link.test.d.ts +8 -0
  26. package/dist/__tests__/proxy-resource-link.test.d.ts.map +1 -0
  27. package/dist/__tests__/proxy-resource-link.test.js +175 -0
  28. package/dist/__tests__/proxy-resource-link.test.js.map +1 -0
  29. package/dist/agent.d.ts +1 -0
  30. package/dist/agent.d.ts.map +1 -1
  31. package/dist/agent.js +76 -10
  32. package/dist/agent.js.map +1 -1
  33. package/dist/api-runtime.d.ts.map +1 -1
  34. package/dist/api-runtime.js +7 -1
  35. package/dist/api-runtime.js.map +1 -1
  36. package/dist/config.d.ts +17 -0
  37. package/dist/config.d.ts.map +1 -1
  38. package/dist/config.js +19 -0
  39. package/dist/config.js.map +1 -1
  40. package/dist/debug.d.ts +1 -1
  41. package/dist/debug.d.ts.map +1 -1
  42. package/dist/express.d.ts.map +1 -1
  43. package/dist/express.js +33 -18
  44. package/dist/express.js.map +1 -1
  45. package/dist/index.d.ts +5 -2
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +6 -1
  48. package/dist/index.js.map +1 -1
  49. package/dist/llm-agent.d.ts.map +1 -1
  50. package/dist/llm-agent.js +44 -6
  51. package/dist/llm-agent.js.map +1 -1
  52. package/dist/llm-provider.d.ts +25 -7
  53. package/dist/llm-provider.d.ts.map +1 -1
  54. package/dist/llm-provider.js +104 -17
  55. package/dist/llm-provider.js.map +1 -1
  56. package/dist/media/index.d.ts +104 -0
  57. package/dist/media/index.d.ts.map +1 -0
  58. package/dist/media/index.js +135 -0
  59. package/dist/media/index.js.map +1 -0
  60. package/dist/media/media-store.d.ts +75 -0
  61. package/dist/media/media-store.d.ts.map +1 -0
  62. package/dist/media/media-store.js +217 -0
  63. package/dist/media/media-store.js.map +1 -0
  64. package/dist/media/resolver.d.ts +67 -0
  65. package/dist/media/resolver.d.ts.map +1 -0
  66. package/dist/media/resolver.js +311 -0
  67. package/dist/media/resolver.js.map +1 -0
  68. package/dist/media-param.d.ts +17 -0
  69. package/dist/media-param.d.ts.map +1 -0
  70. package/dist/media-param.js +32 -0
  71. package/dist/media-param.js.map +1 -0
  72. package/dist/provider-handlers/provider-handler.d.ts.map +1 -1
  73. package/dist/provider-handlers/provider-handler.js +5 -4
  74. package/dist/provider-handlers/provider-handler.js.map +1 -1
  75. package/dist/proxy.d.ts +22 -1
  76. package/dist/proxy.d.ts.map +1 -1
  77. package/dist/proxy.js +65 -20
  78. package/dist/proxy.js.map +1 -1
  79. package/dist/tls-config.d.ts +31 -0
  80. package/dist/tls-config.d.ts.map +1 -0
  81. package/dist/tls-config.js +102 -0
  82. package/dist/tls-config.js.map +1 -0
  83. package/dist/types.d.ts +63 -2
  84. package/dist/types.d.ts.map +1 -1
  85. package/dist/types.js +33 -1
  86. package/dist/types.js.map +1 -1
  87. package/package.json +3 -3
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Unit tests for media option in LLM agent calls.
3
+ *
4
+ * Tests resolveMediaInputs() and the integration of media items
5
+ * into multipart user messages for LLM completions.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=llm-agent-media.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-agent-media.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/llm-agent-media.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Unit tests for media option in LLM agent calls.
3
+ *
4
+ * Tests resolveMediaInputs() and the integration of media items
5
+ * into multipart user messages for LLM completions.
6
+ */
7
+ import { describe, it, expect, vi, beforeEach } from "vitest";
8
+ // Mock @mcpmesh/core before importing
9
+ vi.mock("@mcpmesh/core", () => ({
10
+ resolveConfig: vi.fn((_key, _value) => ""),
11
+ resolveConfigInt: vi.fn((_key, _value) => null),
12
+ getDefault: vi.fn((_key) => null),
13
+ }));
14
+ // Mock the media store
15
+ const mockFetch = vi.fn();
16
+ vi.mock("../media/media-store.js", () => ({
17
+ getMediaStore: vi.fn(() => ({
18
+ fetch: mockFetch,
19
+ upload: vi.fn(),
20
+ exists: vi.fn(),
21
+ })),
22
+ resolveMediaConfig: vi.fn(() => ({
23
+ storage: "local",
24
+ storagePath: "/tmp/media",
25
+ storagePrefix: "",
26
+ })),
27
+ guessMimeType: vi.fn(() => "application/octet-stream"),
28
+ }));
29
+ import { resolveMediaInputs } from "../media/index.js";
30
+ describe("resolveMediaInputs", () => {
31
+ beforeEach(() => {
32
+ vi.clearAllMocks();
33
+ });
34
+ it("resolves a URI string via MediaStore.fetch()", async () => {
35
+ const imageData = Buffer.from("fake-png-data");
36
+ mockFetch.mockResolvedValue({ data: imageData, mimeType: "image/png" });
37
+ const parts = await resolveMediaInputs(["file:///tmp/photo.png"]);
38
+ expect(parts).toHaveLength(1);
39
+ expect(parts[0]).toEqual({
40
+ type: "image_url",
41
+ image_url: {
42
+ url: `data:image/png;base64,${imageData.toString("base64")}`,
43
+ detail: "high",
44
+ },
45
+ });
46
+ expect(mockFetch).toHaveBeenCalledWith("file:///tmp/photo.png");
47
+ });
48
+ it("resolves an inline Buffer media object", async () => {
49
+ const imageData = Buffer.from("inline-jpeg-data");
50
+ const parts = await resolveMediaInputs([
51
+ { data: imageData, mimeType: "image/jpeg" },
52
+ ]);
53
+ expect(parts).toHaveLength(1);
54
+ expect(parts[0]).toEqual({
55
+ type: "image_url",
56
+ image_url: {
57
+ url: `data:image/jpeg;base64,${imageData.toString("base64")}`,
58
+ detail: "high",
59
+ },
60
+ });
61
+ // Should NOT call MediaStore.fetch for inline buffers
62
+ expect(mockFetch).not.toHaveBeenCalled();
63
+ });
64
+ it("resolves multiple media items (mixed URI and Buffer)", async () => {
65
+ const uriImageData = Buffer.from("uri-image-data");
66
+ const bufferImageData = Buffer.from("buffer-image-data");
67
+ mockFetch.mockResolvedValue({ data: uriImageData, mimeType: "image/png" });
68
+ const parts = await resolveMediaInputs([
69
+ "file:///tmp/chart.png",
70
+ { data: bufferImageData, mimeType: "image/webp" },
71
+ ]);
72
+ expect(parts).toHaveLength(2);
73
+ // First: URI-resolved image
74
+ expect(parts[0]).toEqual({
75
+ type: "image_url",
76
+ image_url: {
77
+ url: `data:image/png;base64,${uriImageData.toString("base64")}`,
78
+ detail: "high",
79
+ },
80
+ });
81
+ // Second: inline buffer image
82
+ expect(parts[1]).toEqual({
83
+ type: "image_url",
84
+ image_url: {
85
+ url: `data:image/webp;base64,${bufferImageData.toString("base64")}`,
86
+ detail: "high",
87
+ },
88
+ });
89
+ });
90
+ it("returns empty array for empty media list", async () => {
91
+ const parts = await resolveMediaInputs([]);
92
+ expect(parts).toHaveLength(0);
93
+ expect(mockFetch).not.toHaveBeenCalled();
94
+ });
95
+ it("resolves S3 URIs via MediaStore.fetch()", async () => {
96
+ const imageData = Buffer.from("s3-image");
97
+ mockFetch.mockResolvedValue({ data: imageData, mimeType: "image/gif" });
98
+ const parts = await resolveMediaInputs(["s3://bucket/images/logo.gif"]);
99
+ expect(parts).toHaveLength(1);
100
+ expect(parts[0].type).toBe("image_url");
101
+ expect(mockFetch).toHaveBeenCalledWith("s3://bucket/images/logo.gif");
102
+ });
103
+ });
104
+ describe("LlmCallOptions.media integration", () => {
105
+ // These tests verify the message structure that would be built
106
+ // by MeshLlmAgent.run() when media is provided.
107
+ it("builds multipart content for string message with media", () => {
108
+ // Simulate what run() does: text + image parts
109
+ const prompt = "Describe this image";
110
+ const mediaParts = [
111
+ {
112
+ type: "image_url",
113
+ image_url: {
114
+ url: "data:image/png;base64,abc123",
115
+ detail: "high",
116
+ },
117
+ },
118
+ ];
119
+ const message = {
120
+ role: "user",
121
+ content: [
122
+ { type: "text", text: prompt },
123
+ ...mediaParts,
124
+ ],
125
+ };
126
+ expect(message.content).toHaveLength(2);
127
+ expect(message.content[0]).toEqual({ type: "text", text: "Describe this image" });
128
+ expect(message.content[1]).toEqual({
129
+ type: "image_url",
130
+ image_url: { url: "data:image/png;base64,abc123", detail: "high" },
131
+ });
132
+ });
133
+ it("preserves plain string message when no media provided", () => {
134
+ const prompt = "Hello world";
135
+ const mediaParts = [];
136
+ // When media is empty, run() uses plain string content
137
+ const message = mediaParts.length > 0
138
+ ? { role: "user", content: [{ type: "text", text: prompt }, ...mediaParts] }
139
+ : { role: "user", content: prompt };
140
+ expect(message.content).toBe("Hello world");
141
+ });
142
+ it("builds multipart with multiple images", () => {
143
+ const prompt = "Compare these two images";
144
+ const mediaParts = [
145
+ {
146
+ type: "image_url",
147
+ image_url: { url: "data:image/png;base64,img1", detail: "high" },
148
+ },
149
+ {
150
+ type: "image_url",
151
+ image_url: { url: "data:image/jpeg;base64,img2", detail: "high" },
152
+ },
153
+ ];
154
+ const message = {
155
+ role: "user",
156
+ content: [
157
+ { type: "text", text: prompt },
158
+ ...mediaParts,
159
+ ],
160
+ };
161
+ expect(message.content).toHaveLength(3);
162
+ expect(message.content[0].type).toBe("text");
163
+ expect(message.content[1].type).toBe("image_url");
164
+ expect(message.content[2].type).toBe("image_url");
165
+ });
166
+ });
167
+ //# sourceMappingURL=llm-agent-media.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-agent-media.test.js","sourceRoot":"","sources":["../../src/__tests__/llm-agent-media.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Unit tests for media/index.ts helper functions.
3
+ *
4
+ * Tests mediaResult() and uploadMedia() convenience functions.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=media-helpers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-helpers.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/media-helpers.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Unit tests for media/index.ts helper functions.
3
+ *
4
+ * Tests mediaResult() and uploadMedia() convenience functions.
5
+ */
6
+ import { describe, it, expect, vi } from "vitest";
7
+ // Mock @mcpmesh/core before importing
8
+ vi.mock("@mcpmesh/core", () => ({
9
+ resolveConfig: vi.fn((_key, _value) => ""),
10
+ resolveConfigInt: vi.fn((_key, _value) => null),
11
+ getDefault: vi.fn((_key) => null),
12
+ }));
13
+ import { mediaResult } from "../media/index.js";
14
+ describe("mediaResult", () => {
15
+ it("should build a proper MCP ResourceLink content item", () => {
16
+ const result = mediaResult("file:///tmp/image.png", "image.png", "image/png");
17
+ expect(result).toEqual({
18
+ type: "resource_link",
19
+ uri: "file:///tmp/image.png",
20
+ name: "image.png",
21
+ mimeType: "image/png",
22
+ });
23
+ });
24
+ it("should include description when provided", () => {
25
+ const result = mediaResult("s3://bucket/photo.jpg", "photo.jpg", "image/jpeg", "A vacation photo");
26
+ expect(result).toEqual({
27
+ type: "resource_link",
28
+ uri: "s3://bucket/photo.jpg",
29
+ name: "photo.jpg",
30
+ mimeType: "image/jpeg",
31
+ description: "A vacation photo",
32
+ });
33
+ });
34
+ it("should include size in _meta when provided", () => {
35
+ const result = mediaResult("file:///data.csv", "data.csv", "text/csv", undefined, 1024);
36
+ expect(result).toEqual({
37
+ type: "resource_link",
38
+ uri: "file:///data.csv",
39
+ name: "data.csv",
40
+ mimeType: "text/csv",
41
+ _meta: { size: 1024 },
42
+ });
43
+ });
44
+ it("should include both description and size when provided", () => {
45
+ const result = mediaResult("file:///report.pdf", "report.pdf", "application/pdf", "Quarterly report", 204800);
46
+ expect(result).toEqual({
47
+ type: "resource_link",
48
+ uri: "file:///report.pdf",
49
+ name: "report.pdf",
50
+ mimeType: "application/pdf",
51
+ description: "Quarterly report",
52
+ _meta: { size: 204800 },
53
+ });
54
+ });
55
+ it("should handle size of 0 correctly", () => {
56
+ const result = mediaResult("file:///empty.txt", "empty.txt", "text/plain", undefined, 0);
57
+ expect(result._meta).toEqual({ size: 0 });
58
+ });
59
+ });
60
+ //# sourceMappingURL=media-helpers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-helpers.test.js","sourceRoot":"","sources":["../../src/__tests__/media-helpers.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Unit tests for mediaParam() helper and enrichSchemaWithMediaTypes().
3
+ *
4
+ * Tests the [media:TYPE] description convention and JSON Schema enrichment.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=media-param.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-param.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/media-param.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Unit tests for mediaParam() helper and enrichSchemaWithMediaTypes().
3
+ *
4
+ * Tests the [media:TYPE] description convention and JSON Schema enrichment.
5
+ */
6
+ import { describe, it, expect, vi } from "vitest";
7
+ // Mock @mcpmesh/core before importing
8
+ vi.mock("@mcpmesh/core", () => ({
9
+ resolveConfig: vi.fn((_key, _value) => ""),
10
+ resolveConfigInt: vi.fn((_key, _value) => null),
11
+ getDefault: vi.fn((_key) => null),
12
+ }));
13
+ import { mediaParam } from "../types.js";
14
+ import { enrichSchemaWithMediaTypes } from "../media-param.js";
15
+ describe("mediaParam", () => {
16
+ it("creates optional string schema", () => {
17
+ const schema = mediaParam("image/*");
18
+ expect(schema.isOptional()).toBe(true);
19
+ });
20
+ it("includes media type in description", () => {
21
+ const schema = mediaParam("image/*");
22
+ expect(schema.description).toContain("[media:image/*]");
23
+ });
24
+ it("defaults to */* when no media type specified", () => {
25
+ const schema = mediaParam();
26
+ expect(schema.description).toContain("[media:*/*]");
27
+ });
28
+ it("accepts specific MIME types", () => {
29
+ const schema = mediaParam("audio/wav");
30
+ expect(schema.description).toContain("[media:audio/wav]");
31
+ });
32
+ });
33
+ describe("enrichSchemaWithMediaTypes", () => {
34
+ it("adds x-media-type from description convention", () => {
35
+ const schema = {
36
+ properties: {
37
+ image: {
38
+ type: "string",
39
+ description: "[media:image/*] Media URI for this parameter",
40
+ },
41
+ },
42
+ };
43
+ enrichSchemaWithMediaTypes(schema);
44
+ const props = schema.properties;
45
+ expect(props.image["x-media-type"]).toBe("image/*");
46
+ expect(props.image.description).toContain("accepts media URI");
47
+ expect(props.image.description).not.toContain("[media:");
48
+ });
49
+ it("leaves non-media params unchanged", () => {
50
+ const schema = {
51
+ properties: {
52
+ question: { type: "string", description: "A question" },
53
+ },
54
+ };
55
+ enrichSchemaWithMediaTypes(schema);
56
+ const props = schema.properties;
57
+ expect(props.question["x-media-type"]).toBeUndefined();
58
+ expect(props.question.description).toBe("A question");
59
+ });
60
+ it("handles schema with no properties", () => {
61
+ const schema = { type: "object" };
62
+ // Should not throw
63
+ enrichSchemaWithMediaTypes(schema);
64
+ expect(schema.type).toBe("object");
65
+ });
66
+ it("handles mixed media and non-media params", () => {
67
+ const schema = {
68
+ properties: {
69
+ question: { type: "string", description: "User question" },
70
+ image: {
71
+ type: "string",
72
+ description: "[media:image/*] Media URI for this parameter",
73
+ },
74
+ audio: {
75
+ type: "string",
76
+ description: "[media:audio/wav] Media URI for this parameter",
77
+ },
78
+ },
79
+ };
80
+ enrichSchemaWithMediaTypes(schema);
81
+ const props = schema.properties;
82
+ expect(props.question["x-media-type"]).toBeUndefined();
83
+ expect(props.question.description).toBe("User question");
84
+ expect(props.image["x-media-type"]).toBe("image/*");
85
+ expect(props.image.description).toContain("accepts media URI: image/*");
86
+ expect(props.audio["x-media-type"]).toBe("audio/wav");
87
+ expect(props.audio.description).toContain("accepts media URI: audio/wav");
88
+ });
89
+ it("cleans [media:...] prefix from description", () => {
90
+ const schema = {
91
+ properties: {
92
+ photo: {
93
+ type: "string",
94
+ description: "[media:image/png] Upload a photo",
95
+ },
96
+ },
97
+ };
98
+ enrichSchemaWithMediaTypes(schema);
99
+ const props = schema.properties;
100
+ expect(props.photo.description).toBe("Upload a photo (accepts media URI: image/png)");
101
+ expect(props.photo["x-media-type"]).toBe("image/png");
102
+ });
103
+ });
104
+ //# sourceMappingURL=media-param.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-param.test.js","sourceRoot":"","sources":["../../src/__tests__/media-param.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,sCAAsC;AACtC,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9B,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAY,EAAE,MAAqB,EAAE,EAAE,CAAC,EAAE,CAAC;IACjE,gBAAgB,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAY,EAAE,MAAqB,EAAE,EAAE,CAAC,IAAI,CAAC;IACtE,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC;CAC1C,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAE/D,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,MAAM,GAA4B;YACtC,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8CAA8C;iBAC5D;aACF;SACF,CAAC;QACF,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAqD,CAAC;QAC3E,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAA4B;YACtC,UAAU,EAAE;gBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;aACxD;SACF,CAAC;QACF,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAqD,CAAC;QAC3E,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAA4B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC3D,mBAAmB;QACnB,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAA4B;YACtC,UAAU,EAAE;gBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;gBAC1D,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8CAA8C;iBAC5D;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gDAAgD;iBAC9D;aACF;SACF,CAAC;QACF,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAqD,CAAC;QAE3E,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAEzD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QAExE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,MAAM,GAA4B;YACtC,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kCAAkC;iBAChD;aACF;SACF,CAAC;QACF,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAqD,CAAC;QAC3E,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QACtF,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Unit tests for media/resolver.ts
3
+ *
4
+ * Tests resolveResourceLinks() and hasResourceLink() for converting
5
+ * resource_link items to provider-native multimodal content.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=media-resolver.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-resolver.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/media-resolver.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}