@mcpmesh/sdk 2.4.0 → 2.6.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 (118) hide show
  1. package/dist/__tests__/agent-single-instance.spec.d.ts +2 -0
  2. package/dist/__tests__/agent-single-instance.spec.d.ts.map +1 -0
  3. package/dist/__tests__/agent-single-instance.spec.js +80 -0
  4. package/dist/__tests__/agent-single-instance.spec.js.map +1 -0
  5. package/dist/__tests__/event-loop-resilience.spec.d.ts +2 -0
  6. package/dist/__tests__/event-loop-resilience.spec.d.ts.map +1 -0
  7. package/dist/__tests__/event-loop-resilience.spec.js +321 -0
  8. package/dist/__tests__/event-loop-resilience.spec.js.map +1 -0
  9. package/dist/__tests__/llm-max-iterations.test.js +10 -8
  10. package/dist/__tests__/llm-max-iterations.test.js.map +1 -1
  11. package/dist/__tests__/llm-provider-multistep.test.d.ts +20 -0
  12. package/dist/__tests__/llm-provider-multistep.test.d.ts.map +1 -0
  13. package/dist/__tests__/llm-provider-multistep.test.js +138 -0
  14. package/dist/__tests__/llm-provider-multistep.test.js.map +1 -0
  15. package/dist/__tests__/llm-provider-output-mode.test.js +1 -0
  16. package/dist/__tests__/llm-provider-output-mode.test.js.map +1 -1
  17. package/dist/__tests__/llm-provider-stopwhen.test.d.ts +22 -0
  18. package/dist/__tests__/llm-provider-stopwhen.test.d.ts.map +1 -0
  19. package/dist/__tests__/llm-provider-stopwhen.test.js +127 -0
  20. package/dist/__tests__/llm-provider-stopwhen.test.js.map +1 -0
  21. package/dist/__tests__/llm-provider-system-synthesis.test.js +1 -0
  22. package/dist/__tests__/llm-provider-system-synthesis.test.js.map +1 -1
  23. package/dist/__tests__/llm-provider-vertex-settings.test.d.ts +18 -0
  24. package/dist/__tests__/llm-provider-vertex-settings.test.d.ts.map +1 -0
  25. package/dist/__tests__/llm-provider-vertex-settings.test.js +128 -0
  26. package/dist/__tests__/llm-provider-vertex-settings.test.js.map +1 -0
  27. package/dist/__tests__/port-conflict-fallback.spec.d.ts +2 -0
  28. package/dist/__tests__/port-conflict-fallback.spec.d.ts.map +1 -0
  29. package/dist/__tests__/port-conflict-fallback.spec.js +123 -0
  30. package/dist/__tests__/port-conflict-fallback.spec.js.map +1 -0
  31. package/dist/__tests__/port-probe-errors.spec.d.ts +2 -0
  32. package/dist/__tests__/port-probe-errors.spec.d.ts.map +1 -0
  33. package/dist/__tests__/port-probe-errors.spec.js +100 -0
  34. package/dist/__tests__/port-probe-errors.spec.js.map +1 -0
  35. package/dist/__tests__/provider-handler-registry.test.d.ts +0 -1
  36. package/dist/__tests__/provider-handler-registry.test.d.ts.map +1 -1
  37. package/dist/__tests__/provider-handler-registry.test.js +23 -1
  38. package/dist/__tests__/provider-handler-registry.test.js.map +1 -1
  39. package/dist/__tests__/proxy-sse-no-data.test.d.ts +13 -0
  40. package/dist/__tests__/proxy-sse-no-data.test.d.ts.map +1 -0
  41. package/dist/__tests__/proxy-sse-no-data.test.js +147 -0
  42. package/dist/__tests__/proxy-sse-no-data.test.js.map +1 -0
  43. package/dist/__tests__/proxy-stream.test.js +26 -0
  44. package/dist/__tests__/proxy-stream.test.js.map +1 -1
  45. package/dist/__tests__/proxy-timer-leak.test.d.ts +16 -0
  46. package/dist/__tests__/proxy-timer-leak.test.d.ts.map +1 -0
  47. package/dist/__tests__/proxy-timer-leak.test.js +97 -0
  48. package/dist/__tests__/proxy-timer-leak.test.js.map +1 -0
  49. package/dist/__tests__/proxy-tool-error.test.d.ts +13 -0
  50. package/dist/__tests__/proxy-tool-error.test.d.ts.map +1 -0
  51. package/dist/__tests__/proxy-tool-error.test.js +313 -0
  52. package/dist/__tests__/proxy-tool-error.test.js.map +1 -0
  53. package/dist/__tests__/route.test.js +21 -1
  54. package/dist/__tests__/route.test.js.map +1 -1
  55. package/dist/__tests__/settle-window.spec.d.ts +2 -0
  56. package/dist/__tests__/settle-window.spec.d.ts.map +1 -0
  57. package/dist/__tests__/settle-window.spec.js +324 -0
  58. package/dist/__tests__/settle-window.spec.js.map +1 -0
  59. package/dist/__tests__/sse.test.js +12 -0
  60. package/dist/__tests__/sse.test.js.map +1 -1
  61. package/dist/__tests__/stop-dispatchers.spec.d.ts +2 -0
  62. package/dist/__tests__/stop-dispatchers.spec.d.ts.map +1 -0
  63. package/dist/__tests__/stop-dispatchers.spec.js +227 -0
  64. package/dist/__tests__/stop-dispatchers.spec.js.map +1 -0
  65. package/dist/agent.d.ts +65 -5
  66. package/dist/agent.d.ts.map +1 -1
  67. package/dist/agent.js +313 -78
  68. package/dist/agent.js.map +1 -1
  69. package/dist/api-runtime.d.ts +33 -3
  70. package/dist/api-runtime.d.ts.map +1 -1
  71. package/dist/api-runtime.js +125 -32
  72. package/dist/api-runtime.js.map +1 -1
  73. package/dist/claim-dispatcher.d.ts +25 -0
  74. package/dist/claim-dispatcher.d.ts.map +1 -1
  75. package/dist/claim-dispatcher.js +59 -1
  76. package/dist/claim-dispatcher.js.map +1 -1
  77. package/dist/config.d.ts +73 -1
  78. package/dist/config.d.ts.map +1 -1
  79. package/dist/config.js +108 -2
  80. package/dist/config.js.map +1 -1
  81. package/dist/debug.d.ts +1 -1
  82. package/dist/debug.d.ts.map +1 -1
  83. package/dist/express.d.ts +33 -0
  84. package/dist/express.d.ts.map +1 -1
  85. package/dist/express.js +149 -31
  86. package/dist/express.js.map +1 -1
  87. package/dist/index.d.ts +1 -1
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +1 -1
  90. package/dist/index.js.map +1 -1
  91. package/dist/llm-provider.d.ts +18 -0
  92. package/dist/llm-provider.d.ts.map +1 -1
  93. package/dist/llm-provider.js +86 -34
  94. package/dist/llm-provider.js.map +1 -1
  95. package/dist/provider-handlers/gemini-handler.js +6 -0
  96. package/dist/provider-handlers/gemini-handler.js.map +1 -1
  97. package/dist/provider-handlers/provider-handler-registry.d.ts +10 -1
  98. package/dist/provider-handlers/provider-handler-registry.d.ts.map +1 -1
  99. package/dist/provider-handlers/provider-handler-registry.js +4 -1
  100. package/dist/provider-handlers/provider-handler-registry.js.map +1 -1
  101. package/dist/proxy.d.ts.map +1 -1
  102. package/dist/proxy.js +178 -40
  103. package/dist/proxy.js.map +1 -1
  104. package/dist/route.d.ts.map +1 -1
  105. package/dist/route.js +38 -0
  106. package/dist/route.js.map +1 -1
  107. package/dist/settle.d.ts +129 -0
  108. package/dist/settle.d.ts.map +1 -0
  109. package/dist/settle.js +284 -0
  110. package/dist/settle.js.map +1 -0
  111. package/dist/sse.d.ts.map +1 -1
  112. package/dist/sse.js +5 -2
  113. package/dist/sse.js.map +1 -1
  114. package/dist/tracing.d.ts +1 -0
  115. package/dist/tracing.d.ts.map +1 -1
  116. package/dist/tracing.js +3 -0
  117. package/dist/tracing.js.map +1 -1
  118. package/package.json +2 -2
@@ -0,0 +1,324 @@
1
+ /**
2
+ * Settling-window dependency grace tests (issue #1193).
3
+ *
4
+ * Cross-runtime contract (mirrors the Python/Java suites):
5
+ *
6
+ * (a) a call firing while a declared dep is unresolved waits — bounded by
7
+ * the remaining settle budget — and proceeds EARLY when the
8
+ * `dependency_available` event lands (event-driven, never a sleep);
9
+ * (b) on timeout the call proceeds with `null` exactly as today
10
+ * (defensive user code untouched);
11
+ * (c)/(d) the settled latch is permanent (window expiry OR all declared
12
+ * deps resolved) — subsequent calls never wait;
13
+ * (e) `MCP_MESH_SETTLE_TIMEOUT=0` disables the grace entirely;
14
+ * (h) the settled steady-state call path never touches the wait
15
+ * primitives.
16
+ *
17
+ * Route coverage: RouteRegistry declaration/resolution/rename keep the
18
+ * settle state's keys aligned with remapped route IDs.
19
+ */
20
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
21
+ import { z } from "zod";
22
+ import { MeshAgent } from "../agent.js";
23
+ import { RouteRegistry } from "../route.js";
24
+ import { SETTLE_TIMEOUT_DEFAULT_SECONDS, getSettleState, getSettleTimeoutSeconds, resetSettleStateForTests, } from "../settle.js";
25
+ function makeFastMCPStub() {
26
+ return {
27
+ addTool: vi.fn(),
28
+ start: vi.fn(),
29
+ getApp: vi.fn(),
30
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
31
+ };
32
+ }
33
+ let autoStartSpy = null;
34
+ const savedEnv = {};
35
+ beforeEach(() => {
36
+ autoStartSpy = vi
37
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
+ .spyOn(MeshAgent.prototype, "_autoStart")
39
+ .mockImplementation(async () => {
40
+ /* no-op */
41
+ });
42
+ savedEnv.MCP_MESH_SETTLE_TIMEOUT = process.env.MCP_MESH_SETTLE_TIMEOUT;
43
+ savedEnv.MCP_MESH_TOOL_ISOLATION = process.env.MCP_MESH_TOOL_ISOLATION;
44
+ // Run tool bodies inline — worker isolation is orthogonal to the settle
45
+ // grace (the wait happens before the isolation branch either way).
46
+ process.env.MCP_MESH_TOOL_ISOLATION = "false";
47
+ delete process.env.MCP_MESH_SETTLE_TIMEOUT;
48
+ resetSettleStateForTests();
49
+ RouteRegistry.reset();
50
+ });
51
+ afterEach(() => {
52
+ if (autoStartSpy) {
53
+ autoStartSpy.mockRestore();
54
+ autoStartSpy = null;
55
+ }
56
+ for (const [key, value] of Object.entries(savedEnv)) {
57
+ if (value === undefined)
58
+ delete process.env[key];
59
+ else
60
+ process.env[key] = value;
61
+ }
62
+ resetSettleStateForTests();
63
+ RouteRegistry.reset();
64
+ });
65
+ function setBudget(seconds) {
66
+ process.env.MCP_MESH_SETTLE_TIMEOUT = seconds;
67
+ resetSettleStateForTests();
68
+ }
69
+ /**
70
+ * Register a one-dep tool and return its FastMCP-registered execute fn.
71
+ * The tool's user function follows the defensive `if (dep)` idiom.
72
+ */
73
+ function registerTool(toolName = "settle_tool", capability = "db_cap") {
74
+ const fastmcp = makeFastMCPStub();
75
+ const agent = new MeshAgent(fastmcp, { name: "settle-agent", httpPort: 0 });
76
+ agent.addTool({
77
+ name: toolName,
78
+ parameters: z.object({}),
79
+ dependencies: [{ capability }],
80
+ execute: async (_args, dep) => dep ? "resolved" : "degraded",
81
+ });
82
+ const execute = fastmcp.addTool.mock.calls[0][0].execute;
83
+ return { agent, execute };
84
+ }
85
+ function resolveDep(agent, toolName, capability, depIndex = 0) {
86
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
87
+ agent.handleDependencyAvailable(capability, "http://localhost:19999", "remote_fn", "provider-agent", toolName, depIndex);
88
+ }
89
+ describe("settle timeout knob", () => {
90
+ it("defaults to 20 seconds", () => {
91
+ expect(getSettleTimeoutSeconds()).toBe(SETTLE_TIMEOUT_DEFAULT_SECONDS);
92
+ expect(SETTLE_TIMEOUT_DEFAULT_SECONDS).toBe(20);
93
+ });
94
+ it("honors a float env override and caches it per process", () => {
95
+ setBudget("3.5");
96
+ expect(getSettleTimeoutSeconds()).toBe(3.5);
97
+ process.env.MCP_MESH_SETTLE_TIMEOUT = "99";
98
+ expect(getSettleTimeoutSeconds()).toBe(3.5); // cached
99
+ });
100
+ it("falls back to the default on negative values", () => {
101
+ setBudget("-5");
102
+ expect(getSettleTimeoutSeconds()).toBe(SETTLE_TIMEOUT_DEFAULT_SECONDS);
103
+ });
104
+ });
105
+ describe("MCP tool execute wrapper", () => {
106
+ it("(a) proceeds early with the real proxy when resolution arrives mid-wait", async () => {
107
+ setBudget("10");
108
+ const { agent, execute } = registerTool();
109
+ setTimeout(() => resolveDep(agent, "settle_tool", "db_cap"), 200);
110
+ const start = Date.now();
111
+ const result = await execute({});
112
+ const elapsedMs = Date.now() - start;
113
+ expect(result).toBe("resolved");
114
+ // Unblocked by the event, not the 10s budget ceiling.
115
+ expect(elapsedMs).toBeLessThan(5000);
116
+ expect(getSettleState().waitCount).toBeGreaterThanOrEqual(1);
117
+ });
118
+ it("(b) proceeds with null at budget expiry — defensive user code runs", async () => {
119
+ setBudget("0.3");
120
+ const { execute } = registerTool();
121
+ const start = Date.now();
122
+ const result = await execute({});
123
+ const elapsedMs = Date.now() - start;
124
+ expect(result).toBe("degraded");
125
+ expect(elapsedMs).toBeGreaterThanOrEqual(200); // actually waited
126
+ });
127
+ it("(c) settled by window expiry → latch is permanent, no more waits", async () => {
128
+ setBudget("0.1");
129
+ const { execute } = registerTool();
130
+ await new Promise((resolve) => setTimeout(resolve, 150));
131
+ for (let i = 0; i < 2; i++) {
132
+ const start = Date.now();
133
+ expect(await execute({})).toBe("degraded");
134
+ expect(Date.now() - start).toBeLessThan(50);
135
+ }
136
+ const state = getSettleState();
137
+ expect(state.isSettled()).toBe(true);
138
+ expect(state.waitCount).toBe(0);
139
+ });
140
+ it("(d) settled by all-declared-resolved → eager latch, no waits", async () => {
141
+ setBudget("10");
142
+ const { agent, execute } = registerTool();
143
+ resolveDep(agent, "settle_tool", "db_cap");
144
+ const state = getSettleState();
145
+ expect(state.isSettled()).toBe(true);
146
+ const start = Date.now();
147
+ expect(await execute({})).toBe("resolved");
148
+ expect(Date.now() - start).toBeLessThan(50);
149
+ expect(state.waitCount).toBe(0);
150
+ });
151
+ it("tracks the agent-level union: one unresolved dep keeps the agent unsettled", async () => {
152
+ setBudget("0.3");
153
+ const fastmcp = makeFastMCPStub();
154
+ const agent = new MeshAgent(fastmcp, { name: "settle-agent", httpPort: 0 });
155
+ agent.addTool({
156
+ name: "tool_a",
157
+ parameters: z.object({}),
158
+ dependencies: [{ capability: "cap_a" }],
159
+ execute: async (_args, dep) => (dep ? "a-resolved" : "a-degraded"),
160
+ });
161
+ agent.addTool({
162
+ name: "tool_b",
163
+ parameters: z.object({}),
164
+ dependencies: [{ capability: "cap_b" }],
165
+ execute: async (_args, dep) => (dep ? "b-resolved" : "b-degraded"),
166
+ });
167
+ const executeA = fastmcp.addTool.mock.calls[0][0].execute;
168
+ const executeB = fastmcp.addTool.mock.calls[1][0].execute;
169
+ resolveDep(agent, "tool_a", "cap_a");
170
+ const state = getSettleState();
171
+ expect(state.isSettled()).toBe(false); // cap_b still unresolved
172
+ // tool_a's dep is resolved — no wait even though unsettled.
173
+ let start = Date.now();
174
+ expect(await executeA({})).toBe("a-resolved");
175
+ expect(Date.now() - start).toBeLessThan(50);
176
+ // tool_b's dep is unresolved — it waits toward the budget.
177
+ start = Date.now();
178
+ expect(await executeB({})).toBe("b-degraded");
179
+ expect(Date.now() - start).toBeGreaterThanOrEqual(200);
180
+ });
181
+ it("anchors the settle window at first dependency declaration, not process start", async () => {
182
+ setBudget("0.3");
183
+ // Idle past the would-be window BEFORE any dependency declaration —
184
+ // with an import/reset-time anchor this would (incorrectly) expire it.
185
+ await new Promise((resolve) => setTimeout(resolve, 350));
186
+ const { execute } = registerTool();
187
+ expect(getSettleState().isSettled()).toBe(false);
188
+ const start = Date.now();
189
+ expect(await execute({})).toBe("degraded");
190
+ // Waited toward the freshly-anchored budget.
191
+ expect(Date.now() - start).toBeGreaterThanOrEqual(200);
192
+ });
193
+ it("a caller-supplied mock dependency never waits (documented mock contract)", async () => {
194
+ setBudget("5");
195
+ const fastmcp = makeFastMCPStub();
196
+ const agent = new MeshAgent(fastmcp, { name: "settle-agent", httpPort: 0 });
197
+ agent.addTool({
198
+ name: "tool_a",
199
+ parameters: z.object({}),
200
+ dependencies: [{ capability: "cap_a" }],
201
+ execute: async (_args, dep) => dep ? "a-resolved" : "a-degraded",
202
+ });
203
+ agent.addTool({
204
+ name: "tool_b",
205
+ parameters: z.object({}),
206
+ dependencies: [{ capability: "cap_b" }],
207
+ execute: async (_args, dep) => dep ? "b-resolved" : "b-degraded",
208
+ });
209
+ const executeA = fastmcp.addTool.mock.calls[0][0].execute;
210
+ // Caller supplies cap_a explicitly; cap_b stays unresolved so the
211
+ // agent is still UNSETTLED — proving the per-slot skip, not the latch.
212
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
213
+ agent.setMockDependency("cap_a", (async () => "mock"));
214
+ const state = getSettleState();
215
+ expect(state.isSettled()).toBe(false);
216
+ const start = Date.now();
217
+ expect(await executeA({})).toBe("a-resolved"); // mock injected
218
+ expect(Date.now() - start).toBeLessThan(50);
219
+ expect(state.waitCount).toBe(0);
220
+ });
221
+ it("(e) MCP_MESH_SETTLE_TIMEOUT=0 disables the grace entirely", async () => {
222
+ setBudget("0");
223
+ const { execute } = registerTool();
224
+ const start = Date.now();
225
+ expect(await execute({})).toBe("degraded");
226
+ expect(Date.now() - start).toBeLessThan(50);
227
+ const state = getSettleState();
228
+ expect(state.isSettled()).toBe(true);
229
+ expect(state.waitCount).toBe(0);
230
+ });
231
+ it("(h) the settled steady-state path never touches the wait primitives", async () => {
232
+ setBudget("10");
233
+ const { agent, execute } = registerTool();
234
+ resolveDep(agent, "settle_tool", "db_cap");
235
+ const state = getSettleState();
236
+ expect(state.isSettled()).toBe(true);
237
+ const waitForSpy = vi.spyOn(state, "waitFor");
238
+ const awaitPendingSpy = vi.spyOn(state, "awaitPending");
239
+ for (let i = 0; i < 3; i++) {
240
+ await execute({});
241
+ }
242
+ expect(waitForSpy).not.toHaveBeenCalled();
243
+ expect(awaitPendingSpy).not.toHaveBeenCalled();
244
+ expect(state.waitCount).toBe(0);
245
+ });
246
+ });
247
+ describe("RouteRegistry settle integration", () => {
248
+ it("declares route deps and resolves them through setDependency", () => {
249
+ setBudget("10");
250
+ const registry = RouteRegistry.getInstance();
251
+ const routeId = registry.registerRoute("POST", "/compute", [
252
+ { capability: "calculator" },
253
+ ]);
254
+ const state = getSettleState();
255
+ expect(state.isSettled()).toBe(false);
256
+ expect(state.isResolved(`${routeId}:dep_0`)).toBe(false);
257
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
258
+ registry.setDependency(routeId, 0, {});
259
+ expect(state.isResolved(`${routeId}:dep_0`)).toBe(true);
260
+ // Single declared dep resolved → agent settles eagerly.
261
+ expect(state.isSettled()).toBe(true);
262
+ });
263
+ it("keeps settle keys aligned when route IDs are remapped", () => {
264
+ setBudget("10");
265
+ const registry = RouteRegistry.getInstance();
266
+ const placeholderId = registry.registerRoute("UNKNOWN", "UNKNOWN", [
267
+ { capability: "calculator" },
268
+ ]);
269
+ registry.updateRouteInfo(placeholderId, "POST", "/compute");
270
+ const state = getSettleState();
271
+ // Resolution arrives under the remapped ID — must still flip the
272
+ // (renamed) declared key and settle the agent.
273
+ registry.setDependency("POST:/compute", 0, {}); // eslint-disable-line @typescript-eslint/no-explicit-any
274
+ expect(state.isResolved("POST:/compute:dep_0")).toBe(true);
275
+ expect(state.isSettled()).toBe(true);
276
+ });
277
+ it("releases a displaced waiter on rename key collision (chains to survivor)", async () => {
278
+ setBudget("10");
279
+ const state = getSettleState();
280
+ state.registerDeclared("old:dep_0");
281
+ state.registerDeclared("POST:/compute:dep_0");
282
+ // A call is already waiting under the OLD key when the rename lands
283
+ // on a key that has its own waiter (collision).
284
+ const displaced = state.waitFor("old:dep_0", "calculator");
285
+ const survivor = state.waitFor("POST:/compute:dep_0", "calculator");
286
+ state.renameDeclared("old:dep_0", "POST:/compute:dep_0");
287
+ state.markResolved("POST:/compute:dep_0");
288
+ const winner = await Promise.race([
289
+ Promise.all([displaced, survivor]).then(() => "released"),
290
+ new Promise((resolve) => setTimeout(resolve, 1000, "stuck")),
291
+ ]);
292
+ expect(winner).toBe("released");
293
+ });
294
+ it("releases a renamed waiter immediately when the new key already resolved", async () => {
295
+ setBudget("10");
296
+ const state = getSettleState();
297
+ state.registerDeclared("old:dep_0");
298
+ const displaced = state.waitFor("old:dep_0", "calculator");
299
+ state.markResolved("POST:/compute:dep_0");
300
+ state.renameDeclared("old:dep_0", "POST:/compute:dep_0");
301
+ const winner = await Promise.race([
302
+ displaced.then(() => "released"),
303
+ new Promise((resolve) => setTimeout(resolve, 1000, "stuck")),
304
+ ]);
305
+ expect(winner).toBe("released");
306
+ });
307
+ it("a waiting route call unblocks when the dependency resolves", async () => {
308
+ setBudget("10");
309
+ const registry = RouteRegistry.getInstance();
310
+ const routeId = registry.registerRoute("GET", "/data", [
311
+ { capability: "store" },
312
+ ]);
313
+ const state = getSettleState();
314
+ setTimeout(
315
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
316
+ () => registry.setDependency(routeId, 0, { live: true }), 150);
317
+ const start = Date.now();
318
+ await state.waitFor(`${routeId}:dep_0`, "store");
319
+ const elapsedMs = Date.now() - start;
320
+ expect(elapsedMs).toBeLessThan(5000);
321
+ expect(registry.getDependency(routeId, 0)).toEqual({ live: true });
322
+ });
323
+ });
324
+ //# sourceMappingURL=settle-window.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settle-window.spec.js","sourceRoot":"","sources":["../../src/__tests__/settle-window.spec.ts"],"names":[],"mappings":"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"}
@@ -122,6 +122,18 @@ data: {"step": 3, "complete": true}
122
122
  expect(results[2].step).toBe(3);
123
123
  expect(results[2].complete).toBe(true);
124
124
  });
125
+ it("should parse data lines without the space after the colon (SSE spec: zero or one space)", () => {
126
+ const sse = `event: progress
127
+ data:{"step": 1}
128
+
129
+ event: done
130
+ data: {"step": 2}
131
+ `;
132
+ const results = parseSSEStream(sse);
133
+ expect(results).toHaveLength(2);
134
+ expect(results[0].step).toBe(1);
135
+ expect(results[1].step).toBe(2);
136
+ });
125
137
  it("should return empty array for non-SSE content", () => {
126
138
  const json = '{"result": 42}';
127
139
  const results = parseSSEStream(json);
@@ -1 +1 @@
1
- {"version":3,"file":"sse.test.js","sourceRoot":"","sources":["../../src/__tests__/sse.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sse.test.js","sourceRoot":"","sources":["../../src/__tests__/sse.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=stop-dispatchers.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop-dispatchers.spec.d.ts","sourceRoot":"","sources":["../../src/__tests__/stop-dispatchers.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Tests for #1173 — concurrent claim-dispatcher shutdown under one
3
+ * shared drain budget, and #1163 MED-2 — `MeshAgent.shutdown()` reaching
4
+ * the registry unregister (`handle.shutdown()`) regardless of drain
5
+ * outcome.
6
+ *
7
+ * Mirrors the Python fix in PR #1172
8
+ * (`_mcp_mesh/engine/claim_dispatcher.py::stop_dispatchers`):
9
+ * - N dispatchers drain CONCURRENTLY against the SAME window (one
10
+ * drain window of wall time, not N stacked 30s windows);
11
+ * - the whole phase is hard-capped at drain + grace, after which the
12
+ * remaining drains are abandoned with a warning;
13
+ * - never rejects — a wedged dispatcher must not prevent the registry
14
+ * cleanup callers sequence afterwards.
15
+ */
16
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
17
+ import { stopDispatchers } from "../claim-dispatcher.js";
18
+ import { MeshAgent } from "../agent.js";
19
+ import { ApiRuntime } from "../api-runtime.js";
20
+ import { MeshExpress } from "../express.js";
21
+ function sleep(ms) {
22
+ return new Promise((resolve) => setTimeout(resolve, ms));
23
+ }
24
+ /** Build a stub dispatcher whose stop() runs the given impl. */
25
+ function fakeDispatcher(capability, stopImpl) {
26
+ return {
27
+ capability,
28
+ stop: vi.fn(stopImpl),
29
+ };
30
+ }
31
+ describe("stopDispatchers (#1173)", () => {
32
+ let warnSpy;
33
+ beforeEach(() => {
34
+ warnSpy = vi.spyOn(console, "warn").mockImplementation(() => { });
35
+ vi.spyOn(console, "log").mockImplementation(() => { });
36
+ });
37
+ afterEach(() => {
38
+ vi.restoreAllMocks();
39
+ });
40
+ it("stops dispatchers concurrently — wall time is one drain window, not N", async () => {
41
+ const d1 = fakeDispatcher("cap-a", () => sleep(200));
42
+ const d2 = fakeDispatcher("cap-b", () => sleep(200));
43
+ const d3 = fakeDispatcher("cap-c", () => sleep(200));
44
+ const t0 = Date.now();
45
+ await stopDispatchers([d1, d2, d3], 2000, 2000);
46
+ const elapsed = Date.now() - t0;
47
+ // Sequential would be >= 600ms; concurrent is ~200ms. The 500ms
48
+ // bound leaves ~300ms of CI scheduling-jitter headroom while still
49
+ // failing a sequential drain.
50
+ expect(elapsed).toBeLessThan(500);
51
+ expect(d1.stop).toHaveBeenCalledWith(2000);
52
+ expect(d2.stop).toHaveBeenCalledWith(2000);
53
+ expect(d3.stop).toHaveBeenCalledWith(2000);
54
+ });
55
+ it("passes the SHARED drain window to every dispatcher", async () => {
56
+ const ds = [
57
+ fakeDispatcher("cap-a", async () => { }),
58
+ fakeDispatcher("cap-b", async () => { }),
59
+ fakeDispatcher("cap-c", async () => { }),
60
+ ];
61
+ await stopDispatchers(ds, 250, 100);
62
+ for (const d of ds) {
63
+ expect(d.stop).toHaveBeenCalledWith(250);
64
+ }
65
+ });
66
+ it("abandons a hanging drain at the hard cap (drain + grace) with a warning", async () => {
67
+ const hanging = fakeDispatcher("cap-stuck", () => new Promise(() => { }));
68
+ const t0 = Date.now();
69
+ await stopDispatchers([hanging], 50, 50);
70
+ const elapsed = Date.now() - t0;
71
+ // Returned at ~100ms (50 drain + 50 grace), not hung forever.
72
+ expect(elapsed).toBeGreaterThanOrEqual(90);
73
+ expect(elapsed).toBeLessThan(1000);
74
+ expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining("exceeded the shared budget"));
75
+ });
76
+ it("a rejecting stop() does not skip its peers and does not reject", async () => {
77
+ const bad = fakeDispatcher("cap-bad", async () => {
78
+ throw new Error("stop blew up");
79
+ });
80
+ const good = fakeDispatcher("cap-good", () => sleep(20));
81
+ await expect(stopDispatchers([bad, good], 500, 100)).resolves.toBeUndefined();
82
+ expect(good.stop).toHaveBeenCalledTimes(1);
83
+ expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining("error stopping dispatcher capability=cap-bad"), expect.any(Error));
84
+ });
85
+ it("is a no-op for an empty dispatcher list", async () => {
86
+ await expect(stopDispatchers([], 50, 50)).resolves.toBeUndefined();
87
+ });
88
+ });
89
+ describe("MeshAgent.shutdown() — unregister runs regardless of drain outcome (#1163 MED-2 / #1173)", () => {
90
+ beforeEach(() => {
91
+ vi.spyOn(console, "warn").mockImplementation(() => { });
92
+ vi.spyOn(console, "log").mockImplementation(() => { });
93
+ });
94
+ afterEach(() => {
95
+ vi.restoreAllMocks();
96
+ });
97
+ /**
98
+ * Drive the REAL `shutdown()` against a stub `this` (same pattern as
99
+ * the event-loop specs) so we don't have to bind a full agent to the
100
+ * napi runtime. Only the fields shutdown() reads are provided.
101
+ */
102
+ function stubAgentThis(dispatchers) {
103
+ return {
104
+ _claimDispatchers: dispatchers,
105
+ _a2aClients: new Map(),
106
+ httpsProxy: undefined,
107
+ handle: { shutdown: vi.fn(async () => { }) },
108
+ };
109
+ }
110
+ it("calls handle.shutdown() even when a dispatcher drain hangs", async () => {
111
+ const hanging = fakeDispatcher("cap-stuck", () => new Promise(() => { }));
112
+ const stubThis = stubAgentThis([hanging]);
113
+ const handle = stubThis.handle; // shutdown() nulls this.handle
114
+ const shutdown = MeshAgent.prototype.shutdown;
115
+ await shutdown.call(stubThis, {
116
+ drainTimeoutMs: 30,
117
+ drainGraceMs: 30,
118
+ });
119
+ expect(handle.shutdown).toHaveBeenCalledTimes(1);
120
+ // Handle nulled + dispatcher list cleared after a successful unregister.
121
+ expect(stubThis.handle).toBeNull();
122
+ expect(stubThis._claimDispatchers).toEqual([]);
123
+ });
124
+ it("calls handle.shutdown() even when a dispatcher stop() throws", async () => {
125
+ const bad = fakeDispatcher("cap-bad", async () => {
126
+ throw new Error("drain blew up");
127
+ });
128
+ const stubThis = stubAgentThis([bad]);
129
+ const handle = stubThis.handle;
130
+ const shutdown = MeshAgent.prototype.shutdown;
131
+ await shutdown.call(stubThis, {
132
+ drainTimeoutMs: 30,
133
+ drainGraceMs: 30,
134
+ });
135
+ expect(handle.shutdown).toHaveBeenCalledTimes(1);
136
+ });
137
+ it("drains slow dispatchers concurrently within one budget", async () => {
138
+ const d1 = fakeDispatcher("cap-a", () => sleep(200));
139
+ const d2 = fakeDispatcher("cap-b", () => sleep(200));
140
+ const d3 = fakeDispatcher("cap-c", () => sleep(200));
141
+ const stubThis = stubAgentThis([d1, d2, d3]);
142
+ const handle = stubThis.handle;
143
+ const shutdown = MeshAgent.prototype.shutdown;
144
+ const t0 = Date.now();
145
+ await shutdown.call(stubThis, {
146
+ drainTimeoutMs: 2000,
147
+ drainGraceMs: 2000,
148
+ });
149
+ const elapsed = Date.now() - t0;
150
+ // Sequential would be >= 600ms; concurrent is ~200ms. 500ms bound
151
+ // leaves ~300ms of CI scheduling-jitter headroom.
152
+ expect(elapsed).toBeLessThan(500);
153
+ expect(handle.shutdown).toHaveBeenCalledTimes(1);
154
+ });
155
+ it("shutdown() is idempotent — repeat calls return the SAME promise and never re-run the teardown", async () => {
156
+ const d = fakeDispatcher("cap-a", () => sleep(50));
157
+ const stubThis = stubAgentThis([d]);
158
+ const handle = stubThis.handle;
159
+ const shutdown = MeshAgent.prototype.shutdown;
160
+ const p1 = shutdown.call(stubThis, {
161
+ drainTimeoutMs: 1000,
162
+ drainGraceMs: 1000,
163
+ });
164
+ // Re-entrant call while the first teardown is mid-drain — the
165
+ // user-code-shutdown() + signal-during-drain race. Must NOT start
166
+ // a second concurrent teardown (double dispatcher stop, double
167
+ // napi handle.shutdown()).
168
+ const p2 = shutdown.call(stubThis, {
169
+ drainTimeoutMs: 1000,
170
+ drainGraceMs: 1000,
171
+ });
172
+ expect(p2).toBe(p1);
173
+ await p1;
174
+ // A call AFTER completion also returns the memoized promise.
175
+ const p3 = shutdown.call(stubThis);
176
+ expect(p3).toBe(p1);
177
+ await p3;
178
+ expect(d.stop).toHaveBeenCalledTimes(1);
179
+ expect(handle.shutdown).toHaveBeenCalledTimes(1);
180
+ // shutdown() itself flags the shutdown so the event loop's failure
181
+ // branch can exit promptly.
182
+ expect(stubThis.shutdownRequested).toBe(true);
183
+ });
184
+ });
185
+ describe("shutdown() idempotency — ApiRuntime / MeshExpress (same memoized-promise pattern)", () => {
186
+ beforeEach(() => {
187
+ vi.spyOn(console, "warn").mockImplementation(() => { });
188
+ vi.spyOn(console, "log").mockImplementation(() => { });
189
+ });
190
+ afterEach(() => {
191
+ vi.restoreAllMocks();
192
+ });
193
+ it("ApiRuntime.shutdown() memoizes — one napi handle.shutdown() across repeat calls", async () => {
194
+ const stubThis = {
195
+ handle: { shutdown: vi.fn(async () => { }) },
196
+ shutdownPromise: null,
197
+ shutdownRequested: false,
198
+ };
199
+ const handle = stubThis.handle; // shutdown() nulls this.handle
200
+ const shutdown = ApiRuntime.prototype.shutdown;
201
+ const p1 = shutdown.call(stubThis);
202
+ const p2 = shutdown.call(stubThis);
203
+ expect(p2).toBe(p1);
204
+ await p1;
205
+ expect(shutdown.call(stubThis)).toBe(p1);
206
+ expect(handle.shutdown).toHaveBeenCalledTimes(1);
207
+ expect(stubThis.shutdownRequested).toBe(true);
208
+ });
209
+ it("MeshExpress.shutdown() memoizes — one napi handle.shutdown() across repeat calls", async () => {
210
+ const stubThis = {
211
+ handle: { shutdown: vi.fn(async () => { }) },
212
+ server: null,
213
+ shutdownPromise: null,
214
+ shutdownRequested: false,
215
+ };
216
+ const handle = stubThis.handle;
217
+ const shutdown = MeshExpress.prototype.shutdown;
218
+ const p1 = shutdown.call(stubThis);
219
+ const p2 = shutdown.call(stubThis);
220
+ expect(p2).toBe(p1);
221
+ await p1;
222
+ expect(shutdown.call(stubThis)).toBe(p1);
223
+ expect(handle.shutdown).toHaveBeenCalledTimes(1);
224
+ expect(stubThis.shutdownRequested).toBe(true);
225
+ });
226
+ });
227
+ //# sourceMappingURL=stop-dispatchers.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop-dispatchers.spec.js","sourceRoot":"","sources":["../../src/__tests__/stop-dispatchers.spec.ts"],"names":[],"mappings":"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"}