@mcpmesh/sdk 3.2.3 → 3.3.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.
- package/dist/__tests__/llm-max-iterations.test.d.ts +6 -3
- package/dist/__tests__/llm-max-iterations.test.d.ts.map +1 -1
- package/dist/__tests__/llm-max-iterations.test.js +433 -4
- package/dist/__tests__/llm-max-iterations.test.js.map +1 -1
- package/dist/__tests__/llm-provider-max-iterations.test.d.ts +25 -0
- package/dist/__tests__/llm-provider-max-iterations.test.d.ts.map +1 -0
- package/dist/__tests__/llm-provider-max-iterations.test.js +217 -0
- package/dist/__tests__/llm-provider-max-iterations.test.js.map +1 -0
- package/dist/llm-agent.d.ts +18 -2
- package/dist/llm-agent.d.ts.map +1 -1
- package/dist/llm-agent.js +80 -14
- package/dist/llm-agent.js.map +1 -1
- package/dist/llm-provider.d.ts +4 -4
- package/dist/llm-provider.d.ts.map +1 -1
- package/dist/llm-provider.js +55 -6
- package/dist/llm-provider.js.map +1 -1
- package/dist/llm-stop-reason.d.ts +78 -0
- package/dist/llm-stop-reason.d.ts.map +1 -0
- package/dist/llm-stop-reason.js +103 -0
- package/dist/llm-stop-reason.js.map +1 -0
- package/dist/llm.d.ts +1 -1
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +9 -3
- package/dist/llm.js.map +1 -1
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -12,9 +12,12 @@
|
|
|
12
12
|
* passes `options.maxIterations`, it surfaces on the wire request as
|
|
13
13
|
* `model_params.max_iterations`; when absent, no such key leaks.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
15
|
+
* Issue #1355: exhaustion is now a STRUCTURAL signal, byte-identical to the
|
|
16
|
+
* Python reference. The provider marks it with a `_mesh_stop_reason:
|
|
17
|
+
* "max_iterations"` sibling field (buffered) or a typed terminal `end` frame
|
|
18
|
+
* (streaming) — NEVER an English marker in `content` / the token stream. The
|
|
19
|
+
* delegating consumer reads the signal and raises the typed `MaxIterationsError`.
|
|
20
|
+
* Coverage below asserts the structured marker on every channel.
|
|
18
21
|
*/
|
|
19
22
|
export {};
|
|
20
23
|
//# sourceMappingURL=llm-max-iterations.test.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-max-iterations.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/llm-max-iterations.test.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"llm-max-iterations.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/llm-max-iterations.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG"}
|
|
@@ -12,9 +12,12 @@
|
|
|
12
12
|
* passes `options.maxIterations`, it surfaces on the wire request as
|
|
13
13
|
* `model_params.max_iterations`; when absent, no such key leaks.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
15
|
+
* Issue #1355: exhaustion is now a STRUCTURAL signal, byte-identical to the
|
|
16
|
+
* Python reference. The provider marks it with a `_mesh_stop_reason:
|
|
17
|
+
* "max_iterations"` sibling field (buffered) or a typed terminal `end` frame
|
|
18
|
+
* (streaming) — NEVER an English marker in `content` / the token stream. The
|
|
19
|
+
* delegating consumer reads the signal and raises the typed `MaxIterationsError`.
|
|
20
|
+
* Coverage below asserts the structured marker on every channel.
|
|
18
21
|
*/
|
|
19
22
|
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
20
23
|
vi.mock("@mcpmesh/core", () => ({
|
|
@@ -29,7 +32,9 @@ vi.mock("../http-pool.js", () => ({
|
|
|
29
32
|
getDispatcher: () => undefined,
|
|
30
33
|
}));
|
|
31
34
|
import { resolveMaxIterations, envMaxIterations, sanitizeMaxIterations, } from "../llm-provider.js";
|
|
32
|
-
import { MeshDelegatedProvider } from "../llm-agent.js";
|
|
35
|
+
import { MeshDelegatedProvider, MeshLlmAgent } from "../llm-agent.js";
|
|
36
|
+
import { MaxIterationsError } from "../errors.js";
|
|
37
|
+
import { STOP_REASON_KEY, STOP_REASON_MAX_ITERATIONS, FRAME_KEY, FRAME_CHUNK, FRAME_END, encodeChunk, encodeEnd, parseStreamFrame, } from "../llm-stop-reason.js";
|
|
33
38
|
// ----------------------------------------------------------------------------
|
|
34
39
|
// resolveMaxIterations — provider-side precedence + sanitization
|
|
35
40
|
// ----------------------------------------------------------------------------
|
|
@@ -249,4 +254,428 @@ describe("MeshDelegatedProvider.complete() — maxIterations forwarding", () =>
|
|
|
249
254
|
expect(modelParams.max_iterations).toBeUndefined();
|
|
250
255
|
});
|
|
251
256
|
});
|
|
257
|
+
// ----------------------------------------------------------------------------
|
|
258
|
+
// Issue #1360: consumer-level forwarding through MeshLlmAgent.run().
|
|
259
|
+
//
|
|
260
|
+
// The complete()-level tests above prove the wire guard omits the key when the
|
|
261
|
+
// caller passes no maxIterations. These assert the END-TO-END consumer path:
|
|
262
|
+
// run() resolves the cap, and only an EXPLICITLY configured one (runtime option
|
|
263
|
+
// / consumer env / user-supplied config) reaches the wire. A consumer that
|
|
264
|
+
// configured NOTHING must send no max_iterations key so the provider's own
|
|
265
|
+
// MESH_LLM_MAX_ITERATIONS governs — mirroring the Python/Java tests from #1356.
|
|
266
|
+
//
|
|
267
|
+
// The consumer's OWN loop cap must still default to 10 when unset (the #1355
|
|
268
|
+
// exhaustion path), which the last test asserts via the raised error's cap.
|
|
269
|
+
// ----------------------------------------------------------------------------
|
|
270
|
+
describe("MeshLlmAgent forwarding — explicit vs unset (issue #1360)", () => {
|
|
271
|
+
let originalFetch;
|
|
272
|
+
const ORIGINAL_ENV = process.env.MESH_LLM_MAX_ITERATIONS;
|
|
273
|
+
beforeEach(() => {
|
|
274
|
+
originalFetch = globalThis.fetch;
|
|
275
|
+
});
|
|
276
|
+
afterEach(() => {
|
|
277
|
+
globalThis.fetch = originalFetch;
|
|
278
|
+
vi.restoreAllMocks();
|
|
279
|
+
if (ORIGINAL_ENV === undefined) {
|
|
280
|
+
delete process.env.MESH_LLM_MAX_ITERATIONS;
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
process.env.MESH_LLM_MAX_ITERATIONS = ORIGINAL_ENV;
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
/**
|
|
287
|
+
* Run the agent through a fetch mock returning a normal completion, and
|
|
288
|
+
* return the wire request's model_params (undefined when the request carried
|
|
289
|
+
* no model_params block at all — e.g. a consumer that configured nothing).
|
|
290
|
+
*/
|
|
291
|
+
async function captureRunModelParams(agent, options) {
|
|
292
|
+
let capturedBody;
|
|
293
|
+
globalThis.fetch = vi.fn(async (_url, init) => {
|
|
294
|
+
capturedBody = init.body;
|
|
295
|
+
return mockJsonResponse(mcpToolResponse({ role: "assistant", content: "ok" }));
|
|
296
|
+
});
|
|
297
|
+
await agent.run("hi", {
|
|
298
|
+
tools: [],
|
|
299
|
+
meshProvider: { endpoint: ENDPOINT, functionName: FN_BUFFERED },
|
|
300
|
+
options,
|
|
301
|
+
});
|
|
302
|
+
const body = JSON.parse(capturedBody);
|
|
303
|
+
return body.params.arguments.request.model_params;
|
|
304
|
+
}
|
|
305
|
+
function unsetAgent() {
|
|
306
|
+
// No maxIterations configured at all — the crux of #1360.
|
|
307
|
+
return new MeshLlmAgent({
|
|
308
|
+
functionId: "test.1360.unset",
|
|
309
|
+
provider: { capability: "llm", tags: ["+claude"] },
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
it("omits max_iterations when the consumer configured nothing (provider env governs)", async () => {
|
|
313
|
+
delete process.env.MESH_LLM_MAX_ITERATIONS;
|
|
314
|
+
const modelParams = await captureRunModelParams(unsetAgent());
|
|
315
|
+
expect(modelParams?.max_iterations).toBeUndefined();
|
|
316
|
+
});
|
|
317
|
+
it("forwards an explicit runtime option", async () => {
|
|
318
|
+
delete process.env.MESH_LLM_MAX_ITERATIONS;
|
|
319
|
+
const modelParams = await captureRunModelParams(unsetAgent(), {
|
|
320
|
+
maxIterations: 25,
|
|
321
|
+
});
|
|
322
|
+
expect(modelParams?.max_iterations).toBe(25);
|
|
323
|
+
});
|
|
324
|
+
it("forwards the consumer-side MESH_LLM_MAX_ITERATIONS env", async () => {
|
|
325
|
+
process.env.MESH_LLM_MAX_ITERATIONS = "15";
|
|
326
|
+
const modelParams = await captureRunModelParams(unsetAgent());
|
|
327
|
+
expect(modelParams?.max_iterations).toBe(15);
|
|
328
|
+
});
|
|
329
|
+
it("forwards an explicit user-supplied config value", async () => {
|
|
330
|
+
delete process.env.MESH_LLM_MAX_ITERATIONS;
|
|
331
|
+
const agent = new MeshLlmAgent({
|
|
332
|
+
functionId: "test.1360.explicit-config",
|
|
333
|
+
provider: { capability: "llm", tags: ["+claude"] },
|
|
334
|
+
maxIterations: 8,
|
|
335
|
+
});
|
|
336
|
+
const modelParams = await captureRunModelParams(agent);
|
|
337
|
+
expect(modelParams?.max_iterations).toBe(8);
|
|
338
|
+
});
|
|
339
|
+
it("still caps the consumer's own loop at 10 when unset (default local cap preserved)", async () => {
|
|
340
|
+
delete process.env.MESH_LLM_MAX_ITERATIONS;
|
|
341
|
+
// Provider signals exhaustion structurally; the raised error must carry the
|
|
342
|
+
// default local cap of 10, proving the consumer loop is still bounded even
|
|
343
|
+
// though nothing is forwarded to the provider.
|
|
344
|
+
globalThis.fetch = vi.fn(async () => mockJsonResponse(mcpToolResponse({
|
|
345
|
+
role: "assistant",
|
|
346
|
+
content: "",
|
|
347
|
+
_mesh_stop_reason: "max_iterations",
|
|
348
|
+
})));
|
|
349
|
+
try {
|
|
350
|
+
await unsetAgent().run("hi", {
|
|
351
|
+
tools: [],
|
|
352
|
+
meshProvider: { endpoint: ENDPOINT, functionName: FN_BUFFERED },
|
|
353
|
+
});
|
|
354
|
+
throw new Error("expected MaxIterationsError");
|
|
355
|
+
}
|
|
356
|
+
catch (err) {
|
|
357
|
+
expect(err).toBeInstanceOf(MaxIterationsError);
|
|
358
|
+
expect(err.iterations).toBe(10);
|
|
359
|
+
}
|
|
360
|
+
});
|
|
361
|
+
});
|
|
362
|
+
// ----------------------------------------------------------------------------
|
|
363
|
+
// Issue #1355: shared exhaustion vocabulary — encode/parse frame helpers.
|
|
364
|
+
// These must be byte-identical to Python's llm_stop_reason.py so a TS consumer
|
|
365
|
+
// interoperates with a Python provider (and vice versa).
|
|
366
|
+
// ----------------------------------------------------------------------------
|
|
367
|
+
describe("llm-stop-reason vocabulary — frame encode/parse (cross-runtime shapes)", () => {
|
|
368
|
+
it("exposes the constants byte-identical to the Python reference", () => {
|
|
369
|
+
expect(STOP_REASON_KEY).toBe("_mesh_stop_reason");
|
|
370
|
+
expect(STOP_REASON_MAX_ITERATIONS).toBe("max_iterations");
|
|
371
|
+
expect(FRAME_KEY).toBe("_mesh_frame");
|
|
372
|
+
expect(FRAME_CHUNK).toBe("chunk");
|
|
373
|
+
expect(FRAME_END).toBe("end");
|
|
374
|
+
});
|
|
375
|
+
it("encodeChunk produces {_mesh_frame:'chunk', content}", () => {
|
|
376
|
+
expect(JSON.parse(encodeChunk("hi"))).toEqual({
|
|
377
|
+
_mesh_frame: "chunk",
|
|
378
|
+
content: "hi",
|
|
379
|
+
});
|
|
380
|
+
});
|
|
381
|
+
it("encodeEnd() omits stop_reason on a normal terminal frame", () => {
|
|
382
|
+
expect(JSON.parse(encodeEnd())).toEqual({ _mesh_frame: "end" });
|
|
383
|
+
});
|
|
384
|
+
it("encodeEnd('max_iterations') carries the exhaustion stop_reason", () => {
|
|
385
|
+
expect(JSON.parse(encodeEnd("max_iterations"))).toEqual({
|
|
386
|
+
_mesh_frame: "end",
|
|
387
|
+
stop_reason: "max_iterations",
|
|
388
|
+
});
|
|
389
|
+
});
|
|
390
|
+
it("parseStreamFrame round-trips encoded frames", () => {
|
|
391
|
+
expect(parseStreamFrame(encodeChunk("x"))).toEqual({
|
|
392
|
+
_mesh_frame: "chunk",
|
|
393
|
+
content: "x",
|
|
394
|
+
});
|
|
395
|
+
expect(parseStreamFrame(encodeEnd())).toEqual({ _mesh_frame: "end" });
|
|
396
|
+
expect(parseStreamFrame(encodeEnd("max_iterations"))).toEqual({
|
|
397
|
+
_mesh_frame: "end",
|
|
398
|
+
stop_reason: "max_iterations",
|
|
399
|
+
});
|
|
400
|
+
});
|
|
401
|
+
it("parseStreamFrame returns null for non-frames (defensive passthrough)", () => {
|
|
402
|
+
expect(parseStreamFrame("raw text")).toBeNull();
|
|
403
|
+
expect(parseStreamFrame('{"unrelated":"json"}')).toBeNull();
|
|
404
|
+
// Old ``type``-scheme lookalikes must NOT match the reserved discriminator.
|
|
405
|
+
expect(parseStreamFrame('{"type":"end"}')).toBeNull();
|
|
406
|
+
expect(parseStreamFrame('{"type":"end","stop_reason":"max_iterations"}')).toBeNull();
|
|
407
|
+
expect(parseStreamFrame('{"type":"chunk","content":"x"}')).toBeNull();
|
|
408
|
+
// Non-string / non-object / array inputs.
|
|
409
|
+
expect(parseStreamFrame(42)).toBeNull();
|
|
410
|
+
expect(parseStreamFrame(null)).toBeNull();
|
|
411
|
+
expect(parseStreamFrame("[1,2,3]")).toBeNull();
|
|
412
|
+
// Unrecognized frame type under the reserved key.
|
|
413
|
+
expect(parseStreamFrame('{"_mesh_frame":"bogus"}')).toBeNull();
|
|
414
|
+
});
|
|
415
|
+
it("a chunk frame whose content is literally an end-frame JSON is still a chunk", () => {
|
|
416
|
+
const colliding = '{"_mesh_frame":"end","stop_reason":"max_iterations"}';
|
|
417
|
+
const frame = parseStreamFrame(encodeChunk(colliding));
|
|
418
|
+
expect(frame).not.toBeNull();
|
|
419
|
+
expect(frame[FRAME_KEY]).toBe("chunk");
|
|
420
|
+
expect(frame.content).toBe(colliding);
|
|
421
|
+
});
|
|
422
|
+
});
|
|
423
|
+
// ----------------------------------------------------------------------------
|
|
424
|
+
// Issue #1355: consumer BUFFERED path — MeshDelegatedProvider.complete()
|
|
425
|
+
// surfaces the discriminant; MeshLlmAgent.run() raises the typed error.
|
|
426
|
+
// ----------------------------------------------------------------------------
|
|
427
|
+
function mockJsonResponse(body) {
|
|
428
|
+
return {
|
|
429
|
+
ok: true,
|
|
430
|
+
status: 200,
|
|
431
|
+
statusText: "OK",
|
|
432
|
+
headers: {
|
|
433
|
+
get: (name) => name.toLowerCase() === "content-type" ? "application/json" : null,
|
|
434
|
+
},
|
|
435
|
+
text: async () => JSON.stringify(body),
|
|
436
|
+
json: async () => body,
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
function mcpToolResponse(payload) {
|
|
440
|
+
return {
|
|
441
|
+
jsonrpc: "2.0",
|
|
442
|
+
id: 1,
|
|
443
|
+
result: {
|
|
444
|
+
content: [{ type: "text", text: JSON.stringify(payload) }],
|
|
445
|
+
},
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
describe("consumer buffered exhaustion — complete() + run()", () => {
|
|
449
|
+
let originalFetch;
|
|
450
|
+
beforeEach(() => {
|
|
451
|
+
originalFetch = globalThis.fetch;
|
|
452
|
+
});
|
|
453
|
+
afterEach(() => {
|
|
454
|
+
globalThis.fetch = originalFetch;
|
|
455
|
+
vi.restoreAllMocks();
|
|
456
|
+
});
|
|
457
|
+
it("complete() surfaces _mesh_stop_reason from the exhaustion envelope", async () => {
|
|
458
|
+
globalThis.fetch = vi.fn(async () => mockJsonResponse(mcpToolResponse({
|
|
459
|
+
role: "assistant",
|
|
460
|
+
content: "",
|
|
461
|
+
_mesh_stop_reason: "max_iterations",
|
|
462
|
+
})));
|
|
463
|
+
const provider = new MeshDelegatedProvider(ENDPOINT, FN_BUFFERED, false);
|
|
464
|
+
const response = await provider.complete("anthropic/claude-sonnet-4-5", [{ role: "user", content: "hi" }]);
|
|
465
|
+
expect(response._mesh_stop_reason).toBe("max_iterations");
|
|
466
|
+
});
|
|
467
|
+
it("complete() omits _mesh_stop_reason on a normal completion", async () => {
|
|
468
|
+
globalThis.fetch = vi.fn(async () => mockJsonResponse(mcpToolResponse({ role: "assistant", content: "the answer" })));
|
|
469
|
+
const provider = new MeshDelegatedProvider(ENDPOINT, FN_BUFFERED, false);
|
|
470
|
+
const response = await provider.complete("anthropic/claude-sonnet-4-5", [{ role: "user", content: "hi" }]);
|
|
471
|
+
expect(response._mesh_stop_reason).toBeUndefined();
|
|
472
|
+
expect(response.choices[0].message.content).toBe("the answer");
|
|
473
|
+
});
|
|
474
|
+
it("complete() does NOT mis-parse an exhaustion envelope as a bare answer", async () => {
|
|
475
|
+
// Empty content + _mesh_stop_reason must be recognized as a reserved-key
|
|
476
|
+
// envelope, NOT treated as a bare structured answer (the whole map).
|
|
477
|
+
globalThis.fetch = vi.fn(async () => mockJsonResponse(mcpToolResponse({
|
|
478
|
+
role: "assistant",
|
|
479
|
+
content: "",
|
|
480
|
+
_mesh_stop_reason: "max_iterations",
|
|
481
|
+
})));
|
|
482
|
+
const provider = new MeshDelegatedProvider(ENDPOINT, FN_BUFFERED, false);
|
|
483
|
+
const response = await provider.complete("anthropic/claude-sonnet-4-5", [{ role: "user", content: "hi" }]);
|
|
484
|
+
// Content stays empty (not the JSON-stringified envelope).
|
|
485
|
+
expect(response.choices[0].message.content).toBe("");
|
|
486
|
+
});
|
|
487
|
+
it("run() raises MaxIterationsError on the exhaustion envelope (iteration 1)", async () => {
|
|
488
|
+
globalThis.fetch = vi.fn(async () => mockJsonResponse(mcpToolResponse({
|
|
489
|
+
role: "assistant",
|
|
490
|
+
content: "",
|
|
491
|
+
_mesh_stop_reason: "max_iterations",
|
|
492
|
+
})));
|
|
493
|
+
const agent = new MeshLlmAgent({
|
|
494
|
+
functionId: "test.buffered.exhaustion",
|
|
495
|
+
provider: { capability: "llm", tags: ["+claude"] },
|
|
496
|
+
maxIterations: 7,
|
|
497
|
+
});
|
|
498
|
+
await expect(agent.run("hi", {
|
|
499
|
+
tools: [],
|
|
500
|
+
meshProvider: { endpoint: ENDPOINT, functionName: FN_BUFFERED },
|
|
501
|
+
})).rejects.toBeInstanceOf(MaxIterationsError);
|
|
502
|
+
});
|
|
503
|
+
it("run() carries the resolved cap on the raised error", async () => {
|
|
504
|
+
globalThis.fetch = vi.fn(async () => mockJsonResponse(mcpToolResponse({
|
|
505
|
+
role: "assistant",
|
|
506
|
+
content: "partial reasoning so far...",
|
|
507
|
+
_mesh_stop_reason: "max_iterations",
|
|
508
|
+
})));
|
|
509
|
+
const agent = new MeshLlmAgent({
|
|
510
|
+
functionId: "test.buffered.exhaustion.cap",
|
|
511
|
+
provider: { capability: "llm", tags: ["+claude"] },
|
|
512
|
+
maxIterations: 3,
|
|
513
|
+
});
|
|
514
|
+
try {
|
|
515
|
+
await agent.run("hi", {
|
|
516
|
+
tools: [],
|
|
517
|
+
meshProvider: { endpoint: ENDPOINT, functionName: FN_BUFFERED },
|
|
518
|
+
});
|
|
519
|
+
throw new Error("expected MaxIterationsError");
|
|
520
|
+
}
|
|
521
|
+
catch (err) {
|
|
522
|
+
expect(err).toBeInstanceOf(MaxIterationsError);
|
|
523
|
+
expect(err.iterations).toBe(3);
|
|
524
|
+
}
|
|
525
|
+
});
|
|
526
|
+
it("run() returns the answer on a normal completion (no discriminant)", async () => {
|
|
527
|
+
globalThis.fetch = vi.fn(async () => mockJsonResponse(mcpToolResponse({ role: "assistant", content: "the answer" })));
|
|
528
|
+
const agent = new MeshLlmAgent({
|
|
529
|
+
functionId: "test.buffered.normal",
|
|
530
|
+
provider: { capability: "llm", tags: ["+claude"] },
|
|
531
|
+
maxIterations: 3,
|
|
532
|
+
});
|
|
533
|
+
const result = await agent.run("hi", {
|
|
534
|
+
tools: [],
|
|
535
|
+
meshProvider: { endpoint: ENDPOINT, functionName: FN_BUFFERED },
|
|
536
|
+
});
|
|
537
|
+
expect(result).toBe("the answer");
|
|
538
|
+
});
|
|
539
|
+
});
|
|
540
|
+
// ----------------------------------------------------------------------------
|
|
541
|
+
// Issue #1355: consumer STREAMING path — MeshLlmAgent.stream() unwraps
|
|
542
|
+
// _mesh_frame frames, raises on exhaustion, never forwards a control frame.
|
|
543
|
+
// Frames ride the SSE progress-notification ``message`` field, exactly as a
|
|
544
|
+
// Python @mesh.llm_provider streaming tool emits them (cross-runtime interop).
|
|
545
|
+
// ----------------------------------------------------------------------------
|
|
546
|
+
function makeSseStream(blocks) {
|
|
547
|
+
const encoder = new TextEncoder();
|
|
548
|
+
let i = 0;
|
|
549
|
+
return new ReadableStream({
|
|
550
|
+
pull(controller) {
|
|
551
|
+
if (i < blocks.length) {
|
|
552
|
+
controller.enqueue(encoder.encode(blocks[i]));
|
|
553
|
+
i += 1;
|
|
554
|
+
}
|
|
555
|
+
else {
|
|
556
|
+
controller.close();
|
|
557
|
+
}
|
|
558
|
+
},
|
|
559
|
+
});
|
|
560
|
+
}
|
|
561
|
+
function sseEvent(payload) {
|
|
562
|
+
return `event: message\ndata: ${JSON.stringify(payload)}\n\n`;
|
|
563
|
+
}
|
|
564
|
+
function makeSseResponse(blocks) {
|
|
565
|
+
return {
|
|
566
|
+
ok: true,
|
|
567
|
+
status: 200,
|
|
568
|
+
statusText: "OK",
|
|
569
|
+
body: makeSseStream(blocks),
|
|
570
|
+
headers: {
|
|
571
|
+
get: (name) => name.toLowerCase() === "content-type" ? "text/event-stream" : null,
|
|
572
|
+
},
|
|
573
|
+
};
|
|
574
|
+
}
|
|
575
|
+
/**
|
|
576
|
+
* Build an SSE fetch mock whose progress notifications carry ``frames`` (the
|
|
577
|
+
* wire strings a provider emits), terminated by a JSON-RPC result event.
|
|
578
|
+
*/
|
|
579
|
+
function frameStreamFetch(frames) {
|
|
580
|
+
return vi.fn(async (_url, init) => {
|
|
581
|
+
const body = JSON.parse(init.body);
|
|
582
|
+
const token = body.params._meta.progressToken;
|
|
583
|
+
const reqId = body.id;
|
|
584
|
+
const events = frames.map((f, idx) => sseEvent({
|
|
585
|
+
jsonrpc: "2.0",
|
|
586
|
+
method: "notifications/progress",
|
|
587
|
+
params: { progressToken: token, progress: idx + 1, message: f },
|
|
588
|
+
}));
|
|
589
|
+
events.push(sseEvent({ jsonrpc: "2.0", id: reqId, result: {} }));
|
|
590
|
+
return makeSseResponse(events);
|
|
591
|
+
});
|
|
592
|
+
}
|
|
593
|
+
const STREAM_TOOL = "process_chat_stream";
|
|
594
|
+
function makeStreamAgent(maxIterations = 5) {
|
|
595
|
+
return new MeshLlmAgent({
|
|
596
|
+
functionId: "test.stream.exhaustion",
|
|
597
|
+
provider: { capability: "llm", tags: ["ai.mcpmesh.stream"] },
|
|
598
|
+
maxIterations,
|
|
599
|
+
});
|
|
600
|
+
}
|
|
601
|
+
async function collectStream(agent) {
|
|
602
|
+
const chunks = [];
|
|
603
|
+
for await (const c of agent.stream("hi", {
|
|
604
|
+
tools: [],
|
|
605
|
+
meshProvider: { endpoint: ENDPOINT, functionName: STREAM_TOOL },
|
|
606
|
+
})) {
|
|
607
|
+
chunks.push(c);
|
|
608
|
+
}
|
|
609
|
+
return chunks;
|
|
610
|
+
}
|
|
611
|
+
describe("consumer streaming exhaustion — stream() frame unwrapping", () => {
|
|
612
|
+
let originalFetch;
|
|
613
|
+
beforeEach(() => {
|
|
614
|
+
originalFetch = globalThis.fetch;
|
|
615
|
+
});
|
|
616
|
+
afterEach(() => {
|
|
617
|
+
globalThis.fetch = originalFetch;
|
|
618
|
+
vi.restoreAllMocks();
|
|
619
|
+
});
|
|
620
|
+
it("unwraps chunk frames and raises on the exhaustion end frame (not forwarded)", async () => {
|
|
621
|
+
globalThis.fetch = frameStreamFetch([
|
|
622
|
+
encodeChunk("Hello"),
|
|
623
|
+
encodeChunk(" world"),
|
|
624
|
+
encodeEnd("max_iterations"),
|
|
625
|
+
]);
|
|
626
|
+
const agent = makeStreamAgent(4);
|
|
627
|
+
const collected = [];
|
|
628
|
+
await expect((async () => {
|
|
629
|
+
for await (const c of agent.stream("hi", {
|
|
630
|
+
tools: [],
|
|
631
|
+
meshProvider: { endpoint: ENDPOINT, functionName: STREAM_TOOL },
|
|
632
|
+
})) {
|
|
633
|
+
collected.push(c);
|
|
634
|
+
}
|
|
635
|
+
})()).rejects.toBeInstanceOf(MaxIterationsError);
|
|
636
|
+
// Real text tokens were unwrapped and forwarded; no frame leaked.
|
|
637
|
+
expect(collected).toEqual(["Hello", " world"]);
|
|
638
|
+
expect(collected.every((c) => !c.includes("stop_reason"))).toBe(true);
|
|
639
|
+
expect(collected.every((c) => !c.includes("_mesh_frame"))).toBe(true);
|
|
640
|
+
});
|
|
641
|
+
it("a normal end frame terminates cleanly (unwrapped text, no error)", async () => {
|
|
642
|
+
globalThis.fetch = frameStreamFetch([
|
|
643
|
+
encodeChunk("The "),
|
|
644
|
+
encodeChunk("answer"),
|
|
645
|
+
encodeEnd(),
|
|
646
|
+
]);
|
|
647
|
+
const chunks = await collectStream(makeStreamAgent());
|
|
648
|
+
expect(chunks).toEqual(["The ", "answer"]);
|
|
649
|
+
});
|
|
650
|
+
it("a chunk frame colliding with the end-frame JSON is yielded verbatim (no throw)", async () => {
|
|
651
|
+
const colliding = '{"_mesh_frame":"end","stop_reason":"max_iterations"}';
|
|
652
|
+
globalThis.fetch = frameStreamFetch([
|
|
653
|
+
encodeChunk(colliding),
|
|
654
|
+
encodeEnd(),
|
|
655
|
+
]);
|
|
656
|
+
const chunks = await collectStream(makeStreamAgent());
|
|
657
|
+
expect(chunks).toEqual([colliding]);
|
|
658
|
+
});
|
|
659
|
+
it("unframed (non-frame) chunks pass through defensively as raw text", async () => {
|
|
660
|
+
globalThis.fetch = frameStreamFetch([
|
|
661
|
+
"raw plain text",
|
|
662
|
+
'{"unrelated": "json"}',
|
|
663
|
+
encodeChunk("framed"),
|
|
664
|
+
encodeEnd(),
|
|
665
|
+
]);
|
|
666
|
+
const chunks = await collectStream(makeStreamAgent());
|
|
667
|
+
expect(chunks).toEqual(["raw plain text", '{"unrelated": "json"}', "framed"]);
|
|
668
|
+
});
|
|
669
|
+
it("old ``type``-scheme lookalike deltas pass through verbatim (reserved-namespace fix)", async () => {
|
|
670
|
+
const lookalikes = [
|
|
671
|
+
'{"type":"end"}',
|
|
672
|
+
'{"type":"end","stop_reason":"max_iterations"}',
|
|
673
|
+
'{"type":"chunk","content":"x"}',
|
|
674
|
+
];
|
|
675
|
+
globalThis.fetch = frameStreamFetch(lookalikes);
|
|
676
|
+
const chunks = await collectStream(makeStreamAgent());
|
|
677
|
+
// Not misread as control (no throw / truncation) nor unwrapped as a chunk.
|
|
678
|
+
expect(chunks).toEqual(lookalikes);
|
|
679
|
+
});
|
|
680
|
+
});
|
|
252
681
|
//# sourceMappingURL=llm-max-iterations.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-max-iterations.test.js","sourceRoot":"","sources":["../../src/__tests__/llm-max-iterations.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"llm-max-iterations.test.js","sourceRoot":"","sources":["../../src/__tests__/llm-max-iterations.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-side max_iterations exhaustion signal — issue #1355 (Phase 2, TS).
|
|
3
|
+
*
|
|
4
|
+
* The provider-managed agentic loop must mark exhaustion STRUCTURALLY via a
|
|
5
|
+
* `_mesh_stop_reason: "max_iterations"` sibling field on the reply envelope —
|
|
6
|
+
* never an English marker in `content`. Two provider loops are exercised here
|
|
7
|
+
* with the REAL `ai` module (generateText + stopWhen + tool execution) driven
|
|
8
|
+
* by a `MockLanguageModelV3`:
|
|
9
|
+
*
|
|
10
|
+
* 1. Manual loop (Claude/OpenAI): iterates generateText itself. On exhaustion
|
|
11
|
+
* it sets `content` to the last genuine assistant text (or "") and adds the
|
|
12
|
+
* `_mesh_stop_reason` sibling. The old `"Maximum tool call iterations
|
|
13
|
+
* reached"` marker is gone from the wire.
|
|
14
|
+
*
|
|
15
|
+
* 2. Gemini SDK-managed loop (stopWhen = stepCountIs(n)): the AI SDK owns the
|
|
16
|
+
* loop. Step-cap exhaustion is detected post-call via
|
|
17
|
+
* `finishReason === "tool-calls"` at the step cap — the last step still
|
|
18
|
+
* wanted to call tools but the loop was cut off. A normal completion within
|
|
19
|
+
* the cap ends with `finishReason === "stop"` and carries NO discriminant.
|
|
20
|
+
*
|
|
21
|
+
* Tool execution goes through the provider's execute path → `callMcpTool`,
|
|
22
|
+
* mocked here to return a canned tool result.
|
|
23
|
+
*/
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=llm-provider-max-iterations.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-provider-max-iterations.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/llm-provider-max-iterations.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG"}
|