@mcpmesh/sdk 2.3.0 → 2.4.0

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 (77) hide show
  1. package/dist/__tests__/llm-agent-model-params.test.js +83 -0
  2. package/dist/__tests__/llm-agent-model-params.test.js.map +1 -1
  3. package/dist/__tests__/llm-max-iterations.test.d.ts +20 -0
  4. package/dist/__tests__/llm-max-iterations.test.d.ts.map +1 -0
  5. package/dist/__tests__/llm-max-iterations.test.js +250 -0
  6. package/dist/__tests__/llm-max-iterations.test.js.map +1 -0
  7. package/dist/__tests__/llm-mesh-error-mapping.test.d.ts +16 -0
  8. package/dist/__tests__/llm-mesh-error-mapping.test.d.ts.map +1 -0
  9. package/dist/__tests__/llm-mesh-error-mapping.test.js +135 -0
  10. package/dist/__tests__/llm-mesh-error-mapping.test.js.map +1 -0
  11. package/dist/__tests__/llm-provider-output-mode.test.d.ts +21 -0
  12. package/dist/__tests__/llm-provider-output-mode.test.d.ts.map +1 -0
  13. package/dist/__tests__/llm-provider-output-mode.test.js +115 -0
  14. package/dist/__tests__/llm-provider-output-mode.test.js.map +1 -0
  15. package/dist/__tests__/llm-provider-system-synthesis.test.d.ts +20 -0
  16. package/dist/__tests__/llm-provider-system-synthesis.test.d.ts.map +1 -0
  17. package/dist/__tests__/llm-provider-system-synthesis.test.js +167 -0
  18. package/dist/__tests__/llm-provider-system-synthesis.test.js.map +1 -0
  19. package/dist/__tests__/llm-response-model.test.d.ts +10 -0
  20. package/dist/__tests__/llm-response-model.test.d.ts.map +1 -0
  21. package/dist/__tests__/llm-response-model.test.js +92 -0
  22. package/dist/__tests__/llm-response-model.test.js.map +1 -0
  23. package/dist/__tests__/proxy-timeout-guard.test.d.ts +12 -0
  24. package/dist/__tests__/proxy-timeout-guard.test.d.ts.map +1 -0
  25. package/dist/__tests__/proxy-timeout-guard.test.js +85 -0
  26. package/dist/__tests__/proxy-timeout-guard.test.js.map +1 -0
  27. package/dist/__tests__/registry-disconnect-retains-deps.spec.d.ts +2 -0
  28. package/dist/__tests__/registry-disconnect-retains-deps.spec.d.ts.map +1 -0
  29. package/dist/__tests__/registry-disconnect-retains-deps.spec.js +101 -0
  30. package/dist/__tests__/registry-disconnect-retains-deps.spec.js.map +1 -0
  31. package/dist/__tests__/response-parser.test.js +29 -0
  32. package/dist/__tests__/response-parser.test.js.map +1 -1
  33. package/dist/agent.d.ts.map +1 -1
  34. package/dist/agent.js +4 -0
  35. package/dist/agent.js.map +1 -1
  36. package/dist/api-runtime.d.ts.map +1 -1
  37. package/dist/api-runtime.js +8 -1
  38. package/dist/api-runtime.js.map +1 -1
  39. package/dist/express.d.ts.map +1 -1
  40. package/dist/express.js +8 -1
  41. package/dist/express.js.map +1 -1
  42. package/dist/llm-agent.d.ts +34 -0
  43. package/dist/llm-agent.d.ts.map +1 -1
  44. package/dist/llm-agent.js +239 -434
  45. package/dist/llm-agent.js.map +1 -1
  46. package/dist/llm-provider.d.ts +33 -4
  47. package/dist/llm-provider.d.ts.map +1 -1
  48. package/dist/llm-provider.js +91 -4
  49. package/dist/llm-provider.js.map +1 -1
  50. package/dist/llm.d.ts +1 -1
  51. package/dist/llm.d.ts.map +1 -1
  52. package/dist/llm.js +8 -5
  53. package/dist/llm.js.map +1 -1
  54. package/dist/provider-handlers/gemini-handler.d.ts.map +1 -1
  55. package/dist/provider-handlers/gemini-handler.js +2 -14
  56. package/dist/provider-handlers/gemini-handler.js.map +1 -1
  57. package/dist/provider-handlers/openai-handler.d.ts.map +1 -1
  58. package/dist/provider-handlers/openai-handler.js +2 -15
  59. package/dist/provider-handlers/openai-handler.js.map +1 -1
  60. package/dist/provider-handlers/provider-handler.d.ts +12 -0
  61. package/dist/provider-handlers/provider-handler.d.ts.map +1 -1
  62. package/dist/provider-handlers/provider-handler.js +24 -0
  63. package/dist/provider-handlers/provider-handler.js.map +1 -1
  64. package/dist/proxy.d.ts.map +1 -1
  65. package/dist/proxy.js +189 -254
  66. package/dist/proxy.js.map +1 -1
  67. package/dist/response-parser.d.ts +10 -0
  68. package/dist/response-parser.d.ts.map +1 -1
  69. package/dist/response-parser.js +55 -0
  70. package/dist/response-parser.js.map +1 -1
  71. package/dist/tracing.d.ts +12 -0
  72. package/dist/tracing.d.ts.map +1 -1
  73. package/dist/tracing.js +37 -0
  74. package/dist/tracing.js.map +1 -1
  75. package/dist/types.d.ts +10 -2
  76. package/dist/types.d.ts.map +1 -1
  77. package/package.json +2 -2
@@ -226,4 +226,87 @@ describe("MeshDelegatedProvider.streamComplete() — modelParams escape hatch",
226
226
  expect(modelParams.model).toBe("anthropic/claude-sonnet-4-5");
227
227
  });
228
228
  });
229
+ // ----------------------------------------------------------------------------
230
+ // output_mode override on the wire — issue #1112
231
+ // ----------------------------------------------------------------------------
232
+ describe("MeshDelegatedProvider — output_mode override on the wire (#1112)", () => {
233
+ let originalFetch;
234
+ beforeEach(() => {
235
+ originalFetch = globalThis.fetch;
236
+ });
237
+ afterEach(() => {
238
+ globalThis.fetch = originalFetch;
239
+ vi.restoreAllMocks();
240
+ });
241
+ function mockJsonResponse(body) {
242
+ return {
243
+ ok: true,
244
+ status: 200,
245
+ statusText: "OK",
246
+ headers: {
247
+ get: (name) => name.toLowerCase() === "content-type" ? "application/json" : null,
248
+ },
249
+ text: async () => JSON.stringify(body),
250
+ json: async () => body,
251
+ };
252
+ }
253
+ function mcpToolResponse(payload) {
254
+ return {
255
+ jsonrpc: "2.0",
256
+ id: 1,
257
+ result: { content: [{ type: "text", text: JSON.stringify(payload) }] },
258
+ };
259
+ }
260
+ const STUB_COMPLETION = { role: "assistant", content: "ok" };
261
+ async function captureComplete(options) {
262
+ let capturedBody;
263
+ const fetchMock = vi.fn(async (_url, init) => {
264
+ capturedBody = init.body;
265
+ return mockJsonResponse(mcpToolResponse(STUB_COMPLETION));
266
+ });
267
+ globalThis.fetch = fetchMock;
268
+ const provider = new MeshDelegatedProvider(ENDPOINT, FN_BUFFERED, false);
269
+ const messages = [{ role: "user", content: "hi" }];
270
+ await provider.complete("anthropic/claude-sonnet-4-5", messages, undefined, options);
271
+ const body = JSON.parse(capturedBody);
272
+ return body.params.arguments.request.model_params;
273
+ }
274
+ it("includes model_params.output_mode when outputMode is explicitly set", async () => {
275
+ const modelParams = await captureComplete({ outputMode: "strict" });
276
+ expect(modelParams?.output_mode).toBe("strict");
277
+ });
278
+ it("omits model_params.output_mode when outputMode is unset (default path)", async () => {
279
+ const modelParams = await captureComplete({ maxOutputTokens: 128 });
280
+ expect(modelParams).toBeDefined();
281
+ expect("output_mode" in (modelParams ?? {})).toBe(false);
282
+ });
283
+ it("typed outputMode beats escape-hatch modelParams.output_mode", async () => {
284
+ const modelParams = await captureComplete({
285
+ outputMode: "hint",
286
+ modelParams: { output_mode: "strict" },
287
+ });
288
+ expect(modelParams?.output_mode).toBe("hint");
289
+ });
290
+ it("streamComplete includes output_mode when explicitly set", async () => {
291
+ let capturedBody;
292
+ const fetchMock = vi.fn(async (_url, init) => {
293
+ capturedBody = init.body;
294
+ const body = JSON.parse(capturedBody);
295
+ const reqId = body.id;
296
+ return makeMockResponse([
297
+ sseEvent({ jsonrpc: "2.0", id: reqId, result: { content: [{ type: "text", text: "" }] } }),
298
+ ]);
299
+ });
300
+ globalThis.fetch = fetchMock;
301
+ const provider = new MeshDelegatedProvider(ENDPOINT, FN_STREAM, false);
302
+ const messages = [{ role: "user", content: "hi" }];
303
+ const gen = provider.streamComplete("anthropic/claude-sonnet-4-5", messages, undefined, {
304
+ outputMode: "text",
305
+ });
306
+ for await (const _ of gen) { /* drain */ }
307
+ const body = JSON.parse(capturedBody);
308
+ const modelParams = body.params.arguments.request.model_params;
309
+ expect(modelParams.output_mode).toBe("text");
310
+ });
311
+ });
229
312
  //# sourceMappingURL=llm-agent-model-params.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"llm-agent-model-params.test.js","sourceRoot":"","sources":["../../src/__tests__/llm-agent-model-params.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llm-agent-model-params.test.js","sourceRoot":"","sources":["../../src/__tests__/llm-agent-model-params.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Unit tests for the configurable provider-managed agentic-loop cap — issue #1116.
3
+ *
4
+ * Two surfaces are covered:
5
+ *
6
+ * 1. Provider resolution (`resolveMaxIterations`): precedence of the
7
+ * consumer-forwarded `model_params.max_iterations` over the
8
+ * `MESH_LLM_MAX_ITERATIONS` env, the default of 10 when neither is set,
9
+ * and the sanitization of invalid inputs.
10
+ *
11
+ * 2. Consumer forwarding (`MeshDelegatedProvider.complete()`): when the caller
12
+ * passes `options.maxIterations`, it surfaces on the wire request as
13
+ * `model_params.max_iterations`; when absent, no such key leaks.
14
+ *
15
+ * Parity note: the truncation marker stays the PLAIN content string
16
+ * "Maximum tool call iterations reached" (matching Python `mesh/helpers.py`);
17
+ * this PR does not introduce a structured marker.
18
+ */
19
+ export {};
20
+ //# sourceMappingURL=llm-max-iterations.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-max-iterations.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/llm-max-iterations.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
@@ -0,0 +1,250 @@
1
+ /**
2
+ * Unit tests for the configurable provider-managed agentic-loop cap — issue #1116.
3
+ *
4
+ * Two surfaces are covered:
5
+ *
6
+ * 1. Provider resolution (`resolveMaxIterations`): precedence of the
7
+ * consumer-forwarded `model_params.max_iterations` over the
8
+ * `MESH_LLM_MAX_ITERATIONS` env, the default of 10 when neither is set,
9
+ * and the sanitization of invalid inputs.
10
+ *
11
+ * 2. Consumer forwarding (`MeshDelegatedProvider.complete()`): when the caller
12
+ * passes `options.maxIterations`, it surfaces on the wire request as
13
+ * `model_params.max_iterations`; when absent, no such key leaks.
14
+ *
15
+ * Parity note: the truncation marker stays the PLAIN content string
16
+ * "Maximum tool call iterations reached" (matching Python `mesh/helpers.py`);
17
+ * this PR does not introduce a structured marker.
18
+ */
19
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
20
+ vi.mock("@mcpmesh/core", () => ({
21
+ generateTraceId: () => "trace-mock",
22
+ generateSpanId: () => "span-mock",
23
+ injectTraceContext: (argsJson) => argsJson,
24
+ publishSpan: vi.fn(async () => false),
25
+ parseSseResponse: (s) => s,
26
+ parseSseResponseToObject: (s) => JSON.parse(s),
27
+ }));
28
+ vi.mock("../http-pool.js", () => ({
29
+ getDispatcher: () => undefined,
30
+ }));
31
+ import { resolveMaxIterations, envMaxIterations, sanitizeMaxIterations, } from "../llm-provider.js";
32
+ import { MeshDelegatedProvider } from "../llm-agent.js";
33
+ // ----------------------------------------------------------------------------
34
+ // resolveMaxIterations — provider-side precedence + sanitization
35
+ // ----------------------------------------------------------------------------
36
+ describe("resolveMaxIterations — provider loop cap resolution", () => {
37
+ const ORIGINAL_ENV = process.env.MESH_LLM_MAX_ITERATIONS;
38
+ afterEach(() => {
39
+ if (ORIGINAL_ENV === undefined) {
40
+ delete process.env.MESH_LLM_MAX_ITERATIONS;
41
+ }
42
+ else {
43
+ process.env.MESH_LLM_MAX_ITERATIONS = ORIGINAL_ENV;
44
+ }
45
+ });
46
+ it("model_params override wins over env", () => {
47
+ process.env.MESH_LLM_MAX_ITERATIONS = "7";
48
+ expect(resolveMaxIterations(25)).toBe(25);
49
+ });
50
+ it("falls back to env when the param is absent", () => {
51
+ process.env.MESH_LLM_MAX_ITERATIONS = "15";
52
+ expect(resolveMaxIterations(undefined)).toBe(15);
53
+ });
54
+ it("defaults to 10 when neither param nor env is set", () => {
55
+ delete process.env.MESH_LLM_MAX_ITERATIONS;
56
+ expect(resolveMaxIterations(undefined)).toBe(10);
57
+ });
58
+ it("accepts a numeric string from the env", () => {
59
+ delete process.env.MESH_LLM_MAX_ITERATIONS;
60
+ process.env.MESH_LLM_MAX_ITERATIONS = "3";
61
+ expect(resolveMaxIterations(undefined)).toBe(3);
62
+ });
63
+ it("floors a fractional value to an integer", () => {
64
+ delete process.env.MESH_LLM_MAX_ITERATIONS;
65
+ expect(resolveMaxIterations(4.9)).toBe(4);
66
+ });
67
+ // #1116 fractional hole: floor-BEFORE-validate. 0.5 floors to 0, which is
68
+ // not > 0, so it must fall back to the default — NOT return a zero cap that
69
+ // would disable the loop.
70
+ it("falls back to 10 for a fractional value that floors to zero (0.5)", () => {
71
+ delete process.env.MESH_LLM_MAX_ITERATIONS;
72
+ expect(resolveMaxIterations(0.5)).toBe(10);
73
+ });
74
+ it("falls back to 10 for a fractional value that floors to zero (0.9)", () => {
75
+ delete process.env.MESH_LLM_MAX_ITERATIONS;
76
+ expect(resolveMaxIterations(0.9)).toBe(10);
77
+ });
78
+ it.each([
79
+ ["zero", 0],
80
+ ["negative", -5],
81
+ ["NaN", NaN],
82
+ ["non-numeric string", "abc"],
83
+ ["null", null],
84
+ ["object", {}],
85
+ ])("falls back to 10 for an invalid value (%s)", (_label, value) => {
86
+ delete process.env.MESH_LLM_MAX_ITERATIONS;
87
+ expect(resolveMaxIterations(value)).toBe(10);
88
+ });
89
+ it("an invalid env falls back to 10", () => {
90
+ process.env.MESH_LLM_MAX_ITERATIONS = "not-a-number";
91
+ expect(resolveMaxIterations(undefined)).toBe(10);
92
+ });
93
+ // Parity (#1116): the Gemini AI-SDK-managed loop sets
94
+ // `requestOptions.maxSteps = resolvedMaxIterations`, the SAME value the
95
+ // manual provider-managed loop uses as its cap. We assert the resolution
96
+ // the Gemini path consumes here rather than the wired `maxSteps`, since
97
+ // observing the latter would require a full `vi.mock("ai")` generateText
98
+ // harness that this file deliberately does not build.
99
+ it("Gemini maxSteps path consumes the forwarded resolved cap", () => {
100
+ delete process.env.MESH_LLM_MAX_ITERATIONS;
101
+ expect(resolveMaxIterations(25)).toBe(25);
102
+ });
103
+ it("Gemini maxSteps path falls back to 10 when the cap is absent", () => {
104
+ delete process.env.MESH_LLM_MAX_ITERATIONS;
105
+ expect(resolveMaxIterations(undefined)).toBe(10);
106
+ });
107
+ });
108
+ // ----------------------------------------------------------------------------
109
+ // envMaxIterations — single source of truth for env parsing
110
+ // ----------------------------------------------------------------------------
111
+ describe("envMaxIterations — env parse + validation", () => {
112
+ const ORIGINAL_ENV = process.env.MESH_LLM_MAX_ITERATIONS;
113
+ afterEach(() => {
114
+ if (ORIGINAL_ENV === undefined) {
115
+ delete process.env.MESH_LLM_MAX_ITERATIONS;
116
+ }
117
+ else {
118
+ process.env.MESH_LLM_MAX_ITERATIONS = ORIGINAL_ENV;
119
+ }
120
+ });
121
+ it("returns undefined when the env is unset", () => {
122
+ delete process.env.MESH_LLM_MAX_ITERATIONS;
123
+ expect(envMaxIterations()).toBeUndefined();
124
+ });
125
+ it.each([
126
+ ["zero", "0", undefined],
127
+ ["empty string", "", undefined],
128
+ ["non-numeric", "abc", undefined],
129
+ ["fractional below one", "0.5", undefined],
130
+ ["positive integer", "15", 15],
131
+ ["fractional floors down", "4.9", 4],
132
+ ["scientific notation (Number semantics)", "1e2", 100],
133
+ ])("parses %s → %s", (_label, raw, expected) => {
134
+ process.env.MESH_LLM_MAX_ITERATIONS = raw;
135
+ expect(envMaxIterations()).toBe(expected);
136
+ });
137
+ });
138
+ // ----------------------------------------------------------------------------
139
+ // sanitizeMaxIterations — single source of truth for cap normalization
140
+ // ----------------------------------------------------------------------------
141
+ describe("sanitizeMaxIterations — value normalization", () => {
142
+ it.each([
143
+ ["positive integer", 5, 5],
144
+ ["fractional floors down", 4.9, 4],
145
+ ["numeric string", "15", 15],
146
+ ["scientific notation (Number semantics)", "1e2", 100],
147
+ ])("normalizes a valid value (%s) → %s", (_label, value, expected) => {
148
+ expect(sanitizeMaxIterations(value)).toBe(expected);
149
+ });
150
+ it.each([
151
+ ["undefined", undefined],
152
+ ["null", null],
153
+ ["zero", 0],
154
+ ["negative", -3],
155
+ ["fractional below one", 0.5],
156
+ ["NaN", NaN],
157
+ ["non-numeric string", "abc"],
158
+ ["empty string", ""],
159
+ ["object", {}],
160
+ ])("rejects an invalid value (%s) → undefined", (_label, value) => {
161
+ expect(sanitizeMaxIterations(value)).toBeUndefined();
162
+ });
163
+ });
164
+ // ----------------------------------------------------------------------------
165
+ // MeshDelegatedProvider.complete() — consumer forwards maxIterations
166
+ // ----------------------------------------------------------------------------
167
+ const ENDPOINT = "http://provider.local:9001";
168
+ const FN_BUFFERED = "process_chat";
169
+ describe("MeshDelegatedProvider.complete() — maxIterations forwarding", () => {
170
+ let originalFetch;
171
+ beforeEach(() => {
172
+ originalFetch = globalThis.fetch;
173
+ });
174
+ afterEach(() => {
175
+ globalThis.fetch = originalFetch;
176
+ vi.restoreAllMocks();
177
+ });
178
+ function mockJsonResponse(body) {
179
+ return {
180
+ ok: true,
181
+ status: 200,
182
+ statusText: "OK",
183
+ headers: {
184
+ get: (name) => name.toLowerCase() === "content-type" ? "application/json" : null,
185
+ },
186
+ text: async () => JSON.stringify(body),
187
+ json: async () => body,
188
+ };
189
+ }
190
+ function mcpToolResponse(payload) {
191
+ return {
192
+ jsonrpc: "2.0",
193
+ id: 1,
194
+ result: {
195
+ content: [{ type: "text", text: JSON.stringify(payload) }],
196
+ },
197
+ };
198
+ }
199
+ const STUB_COMPLETION = { role: "assistant", content: "ok" };
200
+ it("forwards options.maxIterations as model_params.max_iterations", async () => {
201
+ let capturedBody;
202
+ const fetchMock = vi.fn(async (_url, init) => {
203
+ capturedBody = init.body;
204
+ return mockJsonResponse(mcpToolResponse(STUB_COMPLETION));
205
+ });
206
+ globalThis.fetch = fetchMock;
207
+ const provider = new MeshDelegatedProvider(ENDPOINT, FN_BUFFERED, false);
208
+ const messages = [{ role: "user", content: "hi" }];
209
+ await provider.complete("anthropic/claude-sonnet-4-5", messages, undefined, {
210
+ maxIterations: 25,
211
+ });
212
+ const body = JSON.parse(capturedBody);
213
+ const modelParams = body.params.arguments.request.model_params;
214
+ expect(modelParams.max_iterations).toBe(25);
215
+ });
216
+ it("typed maxIterations wins over an escape-hatch modelParams.max_iterations", async () => {
217
+ let capturedBody;
218
+ const fetchMock = vi.fn(async (_url, init) => {
219
+ capturedBody = init.body;
220
+ return mockJsonResponse(mcpToolResponse(STUB_COMPLETION));
221
+ });
222
+ globalThis.fetch = fetchMock;
223
+ const provider = new MeshDelegatedProvider(ENDPOINT, FN_BUFFERED, false);
224
+ const messages = [{ role: "user", content: "hi" }];
225
+ await provider.complete("anthropic/claude-sonnet-4-5", messages, undefined, {
226
+ maxIterations: 25,
227
+ modelParams: { max_iterations: 3 },
228
+ });
229
+ const body = JSON.parse(capturedBody);
230
+ const modelParams = body.params.arguments.request.model_params;
231
+ expect(modelParams.max_iterations).toBe(25);
232
+ });
233
+ it("does not emit max_iterations when maxIterations is absent", async () => {
234
+ let capturedBody;
235
+ const fetchMock = vi.fn(async (_url, init) => {
236
+ capturedBody = init.body;
237
+ return mockJsonResponse(mcpToolResponse(STUB_COMPLETION));
238
+ });
239
+ globalThis.fetch = fetchMock;
240
+ const provider = new MeshDelegatedProvider(ENDPOINT, FN_BUFFERED, false);
241
+ const messages = [{ role: "user", content: "hi" }];
242
+ await provider.complete("anthropic/claude-sonnet-4-5", messages, undefined, {
243
+ maxOutputTokens: 256,
244
+ });
245
+ const body = JSON.parse(capturedBody);
246
+ const modelParams = body.params.arguments.request.model_params;
247
+ expect(modelParams.max_iterations).toBeUndefined();
248
+ });
249
+ });
250
+ //# sourceMappingURL=llm-max-iterations.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-max-iterations.test.js","sourceRoot":"","sources":["../../src/__tests__/llm-max-iterations.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEzE,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9B,eAAe,EAAE,GAAG,EAAE,CAAC,YAAY;IACnC,cAAc,EAAE,GAAG,EAAE,CAAC,WAAW;IACjC,kBAAkB,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,QAAQ;IAClD,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC;IACrC,gBAAgB,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC;IAClC,wBAAwB,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;CACvD,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC;IAChC,aAAa,EAAE,GAAG,EAAE,CAAC,SAAS;CAC/B,CAAC,CAAC,CAAC;AAEJ,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,+EAA+E;AAC/E,iEAAiE;AACjE,+EAA+E;AAE/E,QAAQ,CAAC,qDAAqD,EAAE,GAAG,EAAE;IACnE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAEzD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,YAAY,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,GAAG,CAAC;QAC1C,MAAM,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,IAAI,CAAC;QAC3C,MAAM,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC3C,MAAM,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,GAAG,CAAC;QAC1C,MAAM,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC3C,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,0EAA0E;IAC1E,4EAA4E;IAC5E,0BAA0B;IAC1B,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC3C,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC3C,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;QACN,CAAC,MAAM,EAAE,CAAC,CAAC;QACX,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAChB,CAAC,KAAK,EAAE,GAAG,CAAC;QACZ,CAAC,oBAAoB,EAAE,KAA0B,CAAC;QAClD,CAAC,MAAM,EAAE,IAAyB,CAAC;QACnC,CAAC,QAAQ,EAAE,EAAuB,CAAC;KACpC,CAAC,CAAC,4CAA4C,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACjE,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC3C,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,cAAc,CAAC;QACrD,MAAM,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,sDAAsD;IACtD,wEAAwE;IACxE,yEAAyE;IACzE,wEAAwE;IACxE,yEAAyE;IACzE,sDAAsD;IACtD,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC3C,MAAM,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC3C,MAAM,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAC/E,4DAA4D;AAC5D,+EAA+E;AAE/E,QAAQ,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACzD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAEzD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,YAAY,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC3C,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;QACN,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC;QACxB,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,CAAC;QAC/B,CAAC,aAAa,EAAE,KAAK,EAAE,SAAS,CAAC;QACjC,CAAC,sBAAsB,EAAE,KAAK,EAAE,SAAS,CAAC;QAC1C,CAAC,kBAAkB,EAAE,IAAI,EAAE,EAAE,CAAC;QAC9B,CAAC,wBAAwB,EAAE,KAAK,EAAE,CAAC,CAAC;QACpC,CAAC,wCAAwC,EAAE,KAAK,EAAE,GAAG,CAAC;KACvD,CAAC,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;QAC7C,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,GAAG,CAAC;QAC1C,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAC/E,uEAAuE;AACvE,+EAA+E;AAE/E,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;IAC3D,EAAE,CAAC,IAAI,CAAC;QACN,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC;QAClC,CAAC,gBAAgB,EAAE,IAAI,EAAE,EAAE,CAAC;QAC5B,CAAC,wCAAwC,EAAE,KAAK,EAAE,GAAG,CAAC;KACvD,CAAC,CAAC,oCAAoC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;QACnE,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;QACN,CAAC,WAAW,EAAE,SAAS,CAAC;QACxB,CAAC,MAAM,EAAE,IAAI,CAAC;QACd,CAAC,MAAM,EAAE,CAAC,CAAC;QACX,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAChB,CAAC,sBAAsB,EAAE,GAAG,CAAC;QAC7B,CAAC,KAAK,EAAE,GAAG,CAAC;QACZ,CAAC,oBAAoB,EAAE,KAAK,CAAC;QAC7B,CAAC,cAAc,EAAE,EAAE,CAAC;QACpB,CAAC,QAAQ,EAAE,EAAE,CAAC;KACf,CAAC,CAAC,2CAA2C,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAChE,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAC/E,qEAAqE;AACrE,+EAA+E;AAE/E,MAAM,QAAQ,GAAG,4BAA4B,CAAC;AAC9C,MAAM,WAAW,GAAG,cAAc,CAAC;AAEnC,QAAQ,CAAC,6DAA6D,EAAE,GAAG,EAAE;IAC3E,IAAI,aAA2B,CAAC;IAEhC,UAAU,CAAC,GAAG,EAAE;QACd,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,KAAK,GAAG,aAAa,CAAC;QACjC,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,SAAS,gBAAgB,CAAC,IAAY;QACpC,OAAO;YACL,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,GAAG;YACX,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE;gBACP,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CACpB,IAAI,CAAC,WAAW,EAAE,KAAK,cAAc,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI;aACpE;YACD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YACtC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;SACA,CAAC;IAC3B,CAAC;IAED,SAAS,eAAe,CAAC,OAAe;QACtC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,CAAC;YACL,MAAM,EAAE;gBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;aAC3D;SACF,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAE7D,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,IAAI,YAAgC,CAAC;QACrC,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,IAAiB,EAAE,EAAE;YAChE,YAAY,GAAG,IAAI,CAAC,IAAc,CAAC;YACnC,OAAO,gBAAgB,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,KAAK,GAAG,SAAoC,CAAC;QAExD,MAAM,QAAQ,GAAG,IAAI,qBAAqB,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAiB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAEjE,MAAM,QAAQ,CAAC,QAAQ,CAAC,6BAA6B,EAAE,QAAQ,EAAE,SAAS,EAAE;YAC1E,aAAa,EAAE,EAAE;SAClB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAa,CAAC,CAAC;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,YAAuC,CAAC;QAC1F,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,IAAI,YAAgC,CAAC;QACrC,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,IAAiB,EAAE,EAAE;YAChE,YAAY,GAAG,IAAI,CAAC,IAAc,CAAC;YACnC,OAAO,gBAAgB,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,KAAK,GAAG,SAAoC,CAAC;QAExD,MAAM,QAAQ,GAAG,IAAI,qBAAqB,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAiB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAEjE,MAAM,QAAQ,CAAC,QAAQ,CAAC,6BAA6B,EAAE,QAAQ,EAAE,SAAS,EAAE;YAC1E,aAAa,EAAE,EAAE;YACjB,WAAW,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE;SACnC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAa,CAAC,CAAC;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,YAAuC,CAAC;QAC1F,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,IAAI,YAAgC,CAAC;QACrC,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,IAAiB,EAAE,EAAE;YAChE,YAAY,GAAG,IAAI,CAAC,IAAc,CAAC;YACnC,OAAO,gBAAgB,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,KAAK,GAAG,SAAoC,CAAC;QAExD,MAAM,QAAQ,GAAG,IAAI,qBAAqB,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAiB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAEjE,MAAM,QAAQ,CAAC,QAAQ,CAAC,6BAA6B,EAAE,QAAQ,EAAE,SAAS,EAAE;YAC1E,eAAe,EAAE,GAAG;SACrB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAa,CAAC,CAAC;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,YAAuC,CAAC;QAC1F,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,aAAa,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Unit tests for #1116 item-2 regression fixes: routing TS LLM calls through
3
+ * the shared callMcpTool must preserve the behavior the hand-rolled paths had.
4
+ *
5
+ * Covered:
6
+ * - Fix 1: MeshDelegatedProvider.complete() maps a timeout to LLMAPIError(408).
7
+ * callMcpTool re-throws the AbortError as a plain Error ("MCP call
8
+ * timed out after <N>ms"), so complete() now matches on the message.
9
+ * - Fix 2: callMcpTool surfaces a tool-level isError result by throwing, so
10
+ * complete() re-wraps it into LLMAPIError and createLlmToolProxy into
11
+ * ToolExecutionError instead of returning the error text as success.
12
+ * - Fix 3: createLlmToolProxy returns null (not "") when the tool returns no
13
+ * content.
14
+ */
15
+ export {};
16
+ //# sourceMappingURL=llm-mesh-error-mapping.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-mesh-error-mapping.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/llm-mesh-error-mapping.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Unit tests for #1116 item-2 regression fixes: routing TS LLM calls through
3
+ * the shared callMcpTool must preserve the behavior the hand-rolled paths had.
4
+ *
5
+ * Covered:
6
+ * - Fix 1: MeshDelegatedProvider.complete() maps a timeout to LLMAPIError(408).
7
+ * callMcpTool re-throws the AbortError as a plain Error ("MCP call
8
+ * timed out after <N>ms"), so complete() now matches on the message.
9
+ * - Fix 2: callMcpTool surfaces a tool-level isError result by throwing, so
10
+ * complete() re-wraps it into LLMAPIError and createLlmToolProxy into
11
+ * ToolExecutionError instead of returning the error text as success.
12
+ * - Fix 3: createLlmToolProxy returns null (not "") when the tool returns no
13
+ * content.
14
+ */
15
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
16
+ import { MeshDelegatedProvider, createLlmToolProxy } from "../llm-agent.js";
17
+ import { LLMAPIError, ToolExecutionError } from "../errors.js";
18
+ vi.mock("@mcpmesh/core", () => ({
19
+ generateTraceId: () => "trace-mock",
20
+ generateSpanId: () => "span-mock",
21
+ injectTraceContext: (argsJson) => argsJson,
22
+ publishSpan: vi.fn(async () => false),
23
+ parseSseResponse: (s) => s,
24
+ parseSseResponseToObject: (s) => JSON.parse(s),
25
+ awaitJobCancel: vi.fn(() => new Promise(() => { })),
26
+ matchesPropagateHeader: () => false,
27
+ }));
28
+ vi.mock("../http-pool.js", () => ({
29
+ getDispatcher: () => undefined,
30
+ }));
31
+ const ENDPOINT = "http://provider.local:9000";
32
+ const FUNCTION = "mesh_complete";
33
+ function jsonResponse(result) {
34
+ const body = JSON.stringify({ jsonrpc: "2.0", id: "x", result });
35
+ return {
36
+ ok: true,
37
+ status: 200,
38
+ statusText: "OK",
39
+ text: async () => body,
40
+ headers: {
41
+ get: (name) => name.toLowerCase() === "content-type" ? "application/json" : null,
42
+ },
43
+ };
44
+ }
45
+ describe("MeshDelegatedProvider.complete() error mapping (#1116 item-2)", () => {
46
+ let originalFetch;
47
+ beforeEach(() => {
48
+ originalFetch = globalThis.fetch;
49
+ });
50
+ afterEach(() => {
51
+ globalThis.fetch = originalFetch;
52
+ vi.restoreAllMocks();
53
+ delete process.env.MESH_PROVIDER_TIMEOUT_MS;
54
+ });
55
+ it("Fix 1: maps a timeout to LLMAPIError with status 408", async () => {
56
+ process.env.MESH_PROVIDER_TIMEOUT_MS = "10";
57
+ // fetch hangs until aborted; reject with AbortError when the signal fires.
58
+ const fetchMock = vi.fn((_url, init) => {
59
+ const signal = init.signal;
60
+ return new Promise((_resolve, reject) => {
61
+ signal.addEventListener("abort", () => {
62
+ const err = new Error("aborted");
63
+ err.name = "AbortError";
64
+ reject(err);
65
+ });
66
+ });
67
+ });
68
+ globalThis.fetch = fetchMock;
69
+ const provider = new MeshDelegatedProvider(ENDPOINT, FUNCTION);
70
+ const err = await provider
71
+ .complete("mesh-delegated", [{ role: "user", content: "hi" }])
72
+ .then(() => null)
73
+ .catch((e) => e);
74
+ expect(err).toBeInstanceOf(LLMAPIError);
75
+ expect(err.statusCode).toBe(408);
76
+ expect(err.message).toMatch(/timed out/i);
77
+ });
78
+ it("Fix 2: maps a tool-level isError result to LLMAPIError(0)", async () => {
79
+ const fetchMock = vi.fn(async () => jsonResponse({
80
+ isError: true,
81
+ content: [{ type: "text", text: "provider blew up" }],
82
+ }));
83
+ globalThis.fetch = fetchMock;
84
+ const provider = new MeshDelegatedProvider(ENDPOINT, FUNCTION);
85
+ const err = await provider
86
+ .complete("mesh-delegated", [{ role: "user", content: "hi" }])
87
+ .then(() => null)
88
+ .catch((e) => e);
89
+ expect(err).toBeInstanceOf(LLMAPIError);
90
+ expect(err.statusCode).toBe(0);
91
+ expect(err.message).toContain("provider blew up");
92
+ });
93
+ });
94
+ describe("createLlmToolProxy error/empty mapping (#1116 item-2)", () => {
95
+ let originalFetch;
96
+ const toolInfo = {
97
+ functionName: "do_thing",
98
+ capability: "doer",
99
+ endpoint: ENDPOINT,
100
+ agentId: "agent-1",
101
+ };
102
+ beforeEach(() => {
103
+ originalFetch = globalThis.fetch;
104
+ });
105
+ afterEach(() => {
106
+ globalThis.fetch = originalFetch;
107
+ vi.restoreAllMocks();
108
+ });
109
+ it("Fix 2: maps a tool-level isError result to ToolExecutionError", async () => {
110
+ const fetchMock = vi.fn(async () => jsonResponse({
111
+ isError: true,
112
+ content: [{ type: "text", text: "tool failed" }],
113
+ }));
114
+ globalThis.fetch = fetchMock;
115
+ const proxy = createLlmToolProxy(toolInfo);
116
+ const err = await proxy({}).then(() => null).catch((e) => e);
117
+ expect(err).toBeInstanceOf(ToolExecutionError);
118
+ expect(err.message).toContain("tool failed");
119
+ });
120
+ it("Fix 3: returns null when the tool returns no content", async () => {
121
+ const fetchMock = vi.fn(async () => jsonResponse({ content: [] }));
122
+ globalThis.fetch = fetchMock;
123
+ const proxy = createLlmToolProxy(toolInfo);
124
+ const result = await proxy({});
125
+ expect(result).toBeNull();
126
+ });
127
+ it("returns parsed JSON for non-empty content", async () => {
128
+ const fetchMock = vi.fn(async () => jsonResponse({ content: [{ type: "text", text: '{"ok":true}' }] }));
129
+ globalThis.fetch = fetchMock;
130
+ const proxy = createLlmToolProxy(toolInfo);
131
+ const result = await proxy({});
132
+ expect(result).toEqual({ ok: true });
133
+ });
134
+ });
135
+ //# sourceMappingURL=llm-mesh-error-mapping.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-mesh-error-mapping.test.js","sourceRoot":"","sources":["../../src/__tests__/llm-mesh-error-mapping.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Provider-side honoring of the consumer-supplied output_mode override — #1112.
3
+ *
4
+ * The provider's effective output mode is:
5
+ * effective = (model_params.output_mode is one of strict/hint/text)
6
+ * ? that override
7
+ * : handler.determineOutputMode(outputSchema) // today's auto
8
+ *
9
+ * Observability seam: the strict path drives `generateObject()` while
10
+ * hint/text drive `generateText()` (useStructuredOutput === outputMode ===
11
+ * "strict"). For an OpenAI provider WITH a schema and NO tools, auto-selection
12
+ * is "strict" → generateObject. A "hint"/"text" override flips it to
13
+ * generateText. An absent/invalid override leaves auto (strict) intact.
14
+ *
15
+ * Also asserts output_mode is stripped from the params before they reach the
16
+ * vendor SDK call (generateObject/generateText options).
17
+ *
18
+ * The Vercel `ai` module is mocked — no real LLM is invoked.
19
+ */
20
+ export {};
21
+ //# sourceMappingURL=llm-provider-output-mode.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-provider-output-mode.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/llm-provider-output-mode.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG"}