@mcpmesh/sdk 1.3.4 → 2.0.0-beta.1

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 (262) hide show
  1. package/dist/__tests__/a2a/a2a-bearer.spec.d.ts +2 -0
  2. package/dist/__tests__/a2a/a2a-bearer.spec.d.ts.map +1 -0
  3. package/dist/__tests__/a2a/a2a-bearer.spec.js +58 -0
  4. package/dist/__tests__/a2a/a2a-bearer.spec.js.map +1 -0
  5. package/dist/__tests__/a2a/a2a-client.spec.d.ts +2 -0
  6. package/dist/__tests__/a2a/a2a-client.spec.d.ts.map +1 -0
  7. package/dist/__tests__/a2a/a2a-client.spec.js +334 -0
  8. package/dist/__tests__/a2a/a2a-client.spec.js.map +1 -0
  9. package/dist/__tests__/a2a/a2a-job.spec.d.ts +2 -0
  10. package/dist/__tests__/a2a/a2a-job.spec.d.ts.map +1 -0
  11. package/dist/__tests__/a2a/a2a-job.spec.js +255 -0
  12. package/dist/__tests__/a2a/a2a-job.spec.js.map +1 -0
  13. package/dist/__tests__/a2a/a2a-stream.spec.d.ts +2 -0
  14. package/dist/__tests__/a2a/a2a-stream.spec.d.ts.map +1 -0
  15. package/dist/__tests__/a2a/a2a-stream.spec.js +278 -0
  16. package/dist/__tests__/a2a/a2a-stream.spec.js.map +1 -0
  17. package/dist/__tests__/a2a/agent-a2a-config.spec.d.ts +2 -0
  18. package/dist/__tests__/a2a/agent-a2a-config.spec.d.ts.map +1 -0
  19. package/dist/__tests__/a2a/agent-a2a-config.spec.js +262 -0
  20. package/dist/__tests__/a2a/agent-a2a-config.spec.js.map +1 -0
  21. package/dist/__tests__/a2a/producer/auth-filter.spec.d.ts +2 -0
  22. package/dist/__tests__/a2a/producer/auth-filter.spec.d.ts.map +1 -0
  23. package/dist/__tests__/a2a/producer/auth-filter.spec.js +127 -0
  24. package/dist/__tests__/a2a/producer/auth-filter.spec.js.map +1 -0
  25. package/dist/__tests__/a2a/producer/card-builder.spec.d.ts +2 -0
  26. package/dist/__tests__/a2a/producer/card-builder.spec.d.ts.map +1 -0
  27. package/dist/__tests__/a2a/producer/card-builder.spec.js +113 -0
  28. package/dist/__tests__/a2a/producer/card-builder.spec.js.map +1 -0
  29. package/dist/__tests__/a2a/producer/dispatcher.spec.d.ts +2 -0
  30. package/dist/__tests__/a2a/producer/dispatcher.spec.d.ts.map +1 -0
  31. package/dist/__tests__/a2a/producer/dispatcher.spec.js +850 -0
  32. package/dist/__tests__/a2a/producer/dispatcher.spec.js.map +1 -0
  33. package/dist/__tests__/a2a/producer/mount-surface-push.spec.d.ts +2 -0
  34. package/dist/__tests__/a2a/producer/mount-surface-push.spec.d.ts.map +1 -0
  35. package/dist/__tests__/a2a/producer/mount-surface-push.spec.js +164 -0
  36. package/dist/__tests__/a2a/producer/mount-surface-push.spec.js.map +1 -0
  37. package/dist/__tests__/a2a/producer/mount.spec.d.ts +2 -0
  38. package/dist/__tests__/a2a/producer/mount.spec.d.ts.map +1 -0
  39. package/dist/__tests__/a2a/producer/mount.spec.js +433 -0
  40. package/dist/__tests__/a2a/producer/mount.spec.js.map +1 -0
  41. package/dist/__tests__/a2a/producer/public-url-cache.spec.d.ts +2 -0
  42. package/dist/__tests__/a2a/producer/public-url-cache.spec.d.ts.map +1 -0
  43. package/dist/__tests__/a2a/producer/public-url-cache.spec.js +116 -0
  44. package/dist/__tests__/a2a/producer/public-url-cache.spec.js.map +1 -0
  45. package/dist/__tests__/a2a/producer/sse-emitter.spec.d.ts +2 -0
  46. package/dist/__tests__/a2a/producer/sse-emitter.spec.d.ts.map +1 -0
  47. package/dist/__tests__/a2a/producer/sse-emitter.spec.js +754 -0
  48. package/dist/__tests__/a2a/producer/sse-emitter.spec.js.map +1 -0
  49. package/dist/__tests__/a2a/producer/state-translator.spec.d.ts +2 -0
  50. package/dist/__tests__/a2a/producer/state-translator.spec.d.ts.map +1 -0
  51. package/dist/__tests__/a2a/producer/state-translator.spec.js +124 -0
  52. package/dist/__tests__/a2a/producer/state-translator.spec.js.map +1 -0
  53. package/dist/__tests__/a2a/producer/task-store.spec.d.ts +2 -0
  54. package/dist/__tests__/a2a/producer/task-store.spec.d.ts.map +1 -0
  55. package/dist/__tests__/a2a/producer/task-store.spec.js +180 -0
  56. package/dist/__tests__/a2a/producer/task-store.spec.js.map +1 -0
  57. package/dist/__tests__/agent-add-tool.spec.d.ts +2 -0
  58. package/dist/__tests__/agent-add-tool.spec.d.ts.map +1 -0
  59. package/dist/__tests__/agent-add-tool.spec.js +483 -0
  60. package/dist/__tests__/agent-add-tool.spec.js.map +1 -0
  61. package/dist/__tests__/api-runtime-race.spec.d.ts +2 -0
  62. package/dist/__tests__/api-runtime-race.spec.d.ts.map +1 -0
  63. package/dist/__tests__/api-runtime-race.spec.js +193 -0
  64. package/dist/__tests__/api-runtime-race.spec.js.map +1 -0
  65. package/dist/__tests__/claim-dispatcher.spec.d.ts +2 -0
  66. package/dist/__tests__/claim-dispatcher.spec.d.ts.map +1 -0
  67. package/dist/__tests__/claim-dispatcher.spec.js +408 -0
  68. package/dist/__tests__/claim-dispatcher.spec.js.map +1 -0
  69. package/dist/__tests__/inbound-job-dispatch.spec.d.ts +2 -0
  70. package/dist/__tests__/inbound-job-dispatch.spec.d.ts.map +1 -0
  71. package/dist/__tests__/inbound-job-dispatch.spec.js +185 -0
  72. package/dist/__tests__/inbound-job-dispatch.spec.js.map +1 -0
  73. package/dist/__tests__/job-controller-progress.spec.d.ts +2 -0
  74. package/dist/__tests__/job-controller-progress.spec.d.ts.map +1 -0
  75. package/dist/__tests__/job-controller-progress.spec.js +85 -0
  76. package/dist/__tests__/job-controller-progress.spec.js.map +1 -0
  77. package/dist/__tests__/jobs-cancel-route.spec.d.ts +2 -0
  78. package/dist/__tests__/jobs-cancel-route.spec.d.ts.map +1 -0
  79. package/dist/__tests__/jobs-cancel-route.spec.js +88 -0
  80. package/dist/__tests__/jobs-cancel-route.spec.js.map +1 -0
  81. package/dist/__tests__/llm-agent-stream.test.d.ts +14 -0
  82. package/dist/__tests__/llm-agent-stream.test.d.ts.map +1 -0
  83. package/dist/__tests__/llm-agent-stream.test.js +341 -0
  84. package/dist/__tests__/llm-agent-stream.test.js.map +1 -0
  85. package/dist/__tests__/llm-provider.test.js +22 -1
  86. package/dist/__tests__/llm-provider.test.js.map +1 -1
  87. package/dist/__tests__/media-resolver.test.js +40 -0
  88. package/dist/__tests__/media-resolver.test.js.map +1 -1
  89. package/dist/__tests__/mesh-job-submitter.spec.d.ts +2 -0
  90. package/dist/__tests__/mesh-job-submitter.spec.d.ts.map +1 -0
  91. package/dist/__tests__/mesh-job-submitter.spec.js +110 -0
  92. package/dist/__tests__/mesh-job-submitter.spec.js.map +1 -0
  93. package/dist/__tests__/proxy-stream.test.d.ts +9 -0
  94. package/dist/__tests__/proxy-stream.test.d.ts.map +1 -0
  95. package/dist/__tests__/proxy-stream.test.js +347 -0
  96. package/dist/__tests__/proxy-stream.test.js.map +1 -0
  97. package/dist/__tests__/resolver-meshjob.spec.d.ts +26 -0
  98. package/dist/__tests__/resolver-meshjob.spec.d.ts.map +1 -0
  99. package/dist/__tests__/resolver-meshjob.spec.js +201 -0
  100. package/dist/__tests__/resolver-meshjob.spec.js.map +1 -0
  101. package/dist/__tests__/schema-verdict-policy.test.d.ts +6 -0
  102. package/dist/__tests__/schema-verdict-policy.test.d.ts.map +1 -0
  103. package/dist/__tests__/schema-verdict-policy.test.js +126 -0
  104. package/dist/__tests__/schema-verdict-policy.test.js.map +1 -0
  105. package/dist/__tests__/sse-stream.test.d.ts +12 -0
  106. package/dist/__tests__/sse-stream.test.d.ts.map +1 -0
  107. package/dist/__tests__/sse-stream.test.js +170 -0
  108. package/dist/__tests__/sse-stream.test.js.map +1 -0
  109. package/dist/a2a/a2a-bearer.d.ts +27 -0
  110. package/dist/a2a/a2a-bearer.d.ts.map +1 -0
  111. package/dist/a2a/a2a-bearer.js +63 -0
  112. package/dist/a2a/a2a-bearer.js.map +1 -0
  113. package/dist/a2a/a2a-client.d.ts +114 -0
  114. package/dist/a2a/a2a-client.d.ts.map +1 -0
  115. package/dist/a2a/a2a-client.js +405 -0
  116. package/dist/a2a/a2a-client.js.map +1 -0
  117. package/dist/a2a/a2a-event.d.ts +25 -0
  118. package/dist/a2a/a2a-event.d.ts.map +1 -0
  119. package/dist/a2a/a2a-event.js +9 -0
  120. package/dist/a2a/a2a-event.js.map +1 -0
  121. package/dist/a2a/a2a-job.d.ts +58 -0
  122. package/dist/a2a/a2a-job.d.ts.map +1 -0
  123. package/dist/a2a/a2a-job.js +264 -0
  124. package/dist/a2a/a2a-job.js.map +1 -0
  125. package/dist/a2a/a2a-stream.d.ts +39 -0
  126. package/dist/a2a/a2a-stream.d.ts.map +1 -0
  127. package/dist/a2a/a2a-stream.js +290 -0
  128. package/dist/a2a/a2a-stream.js.map +1 -0
  129. package/dist/a2a/errors.d.ts +29 -0
  130. package/dist/a2a/errors.d.ts.map +1 -0
  131. package/dist/a2a/errors.js +48 -0
  132. package/dist/a2a/errors.js.map +1 -0
  133. package/dist/a2a/index.d.ts +12 -0
  134. package/dist/a2a/index.d.ts.map +1 -0
  135. package/dist/a2a/index.js +11 -0
  136. package/dist/a2a/index.js.map +1 -0
  137. package/dist/a2a/producer/auth-filter.d.ts +34 -0
  138. package/dist/a2a/producer/auth-filter.d.ts.map +1 -0
  139. package/dist/a2a/producer/auth-filter.js +39 -0
  140. package/dist/a2a/producer/auth-filter.js.map +1 -0
  141. package/dist/a2a/producer/card-builder.d.ts +59 -0
  142. package/dist/a2a/producer/card-builder.d.ts.map +1 -0
  143. package/dist/a2a/producer/card-builder.js +59 -0
  144. package/dist/a2a/producer/card-builder.js.map +1 -0
  145. package/dist/a2a/producer/dispatcher.d.ts +276 -0
  146. package/dist/a2a/producer/dispatcher.d.ts.map +1 -0
  147. package/dist/a2a/producer/dispatcher.js +896 -0
  148. package/dist/a2a/producer/dispatcher.js.map +1 -0
  149. package/dist/a2a/producer/index.d.ts +26 -0
  150. package/dist/a2a/producer/index.d.ts.map +1 -0
  151. package/dist/a2a/producer/index.js +23 -0
  152. package/dist/a2a/producer/index.js.map +1 -0
  153. package/dist/a2a/producer/mount.d.ts +75 -0
  154. package/dist/a2a/producer/mount.d.ts.map +1 -0
  155. package/dist/a2a/producer/mount.js +422 -0
  156. package/dist/a2a/producer/mount.js.map +1 -0
  157. package/dist/a2a/producer/public-url-cache.d.ts +73 -0
  158. package/dist/a2a/producer/public-url-cache.d.ts.map +1 -0
  159. package/dist/a2a/producer/public-url-cache.js +0 -0
  160. package/dist/a2a/producer/public-url-cache.js.map +1 -0
  161. package/dist/a2a/producer/registry.d.ts +138 -0
  162. package/dist/a2a/producer/registry.d.ts.map +1 -0
  163. package/dist/a2a/producer/registry.js +117 -0
  164. package/dist/a2a/producer/registry.js.map +1 -0
  165. package/dist/a2a/producer/sse-emitter.d.ts +85 -0
  166. package/dist/a2a/producer/sse-emitter.d.ts.map +1 -0
  167. package/dist/a2a/producer/sse-emitter.js +405 -0
  168. package/dist/a2a/producer/sse-emitter.js.map +1 -0
  169. package/dist/a2a/producer/state-translator.d.ts +63 -0
  170. package/dist/a2a/producer/state-translator.d.ts.map +1 -0
  171. package/dist/a2a/producer/state-translator.js +108 -0
  172. package/dist/a2a/producer/state-translator.js.map +1 -0
  173. package/dist/a2a/producer/task-store.d.ts +128 -0
  174. package/dist/a2a/producer/task-store.d.ts.map +1 -0
  175. package/dist/a2a/producer/task-store.js +128 -0
  176. package/dist/a2a/producer/task-store.js.map +1 -0
  177. package/dist/agent.d.ts +99 -0
  178. package/dist/agent.d.ts.map +1 -1
  179. package/dist/agent.js +754 -19
  180. package/dist/agent.js.map +1 -1
  181. package/dist/api-runtime.d.ts +25 -0
  182. package/dist/api-runtime.d.ts.map +1 -1
  183. package/dist/api-runtime.js +75 -2
  184. package/dist/api-runtime.js.map +1 -1
  185. package/dist/claim-dispatcher.d.ts +126 -0
  186. package/dist/claim-dispatcher.d.ts.map +1 -0
  187. package/dist/claim-dispatcher.js +478 -0
  188. package/dist/claim-dispatcher.js.map +1 -0
  189. package/dist/express.d.ts.map +1 -1
  190. package/dist/express.js +33 -6
  191. package/dist/express.js.map +1 -1
  192. package/dist/inbound-job-dispatch.d.ts +105 -0
  193. package/dist/inbound-job-dispatch.d.ts.map +1 -0
  194. package/dist/inbound-job-dispatch.js +335 -0
  195. package/dist/inbound-job-dispatch.js.map +1 -0
  196. package/dist/index.d.ts +40 -4
  197. package/dist/index.d.ts.map +1 -1
  198. package/dist/index.js +40 -3
  199. package/dist/index.js.map +1 -1
  200. package/dist/job-context.d.ts +107 -0
  201. package/dist/job-context.d.ts.map +1 -0
  202. package/dist/job-context.js +95 -0
  203. package/dist/job-context.js.map +1 -0
  204. package/dist/jobs-cancel-route.d.ts +36 -0
  205. package/dist/jobs-cancel-route.d.ts.map +1 -0
  206. package/dist/jobs-cancel-route.js +60 -0
  207. package/dist/jobs-cancel-route.js.map +1 -0
  208. package/dist/jobs-helper-tools.d.ts +48 -0
  209. package/dist/jobs-helper-tools.d.ts.map +1 -0
  210. package/dist/jobs-helper-tools.js +133 -0
  211. package/dist/jobs-helper-tools.js.map +1 -0
  212. package/dist/llm-agent.d.ts +62 -53
  213. package/dist/llm-agent.d.ts.map +1 -1
  214. package/dist/llm-agent.js +211 -292
  215. package/dist/llm-agent.js.map +1 -1
  216. package/dist/llm-provider.d.ts +11 -4
  217. package/dist/llm-provider.d.ts.map +1 -1
  218. package/dist/llm-provider.js +57 -4
  219. package/dist/llm-provider.js.map +1 -1
  220. package/dist/llm.d.ts +4 -1
  221. package/dist/llm.d.ts.map +1 -1
  222. package/dist/llm.js +7 -17
  223. package/dist/llm.js.map +1 -1
  224. package/dist/media/resolver.d.ts.map +1 -1
  225. package/dist/media/resolver.js +3 -2
  226. package/dist/media/resolver.js.map +1 -1
  227. package/dist/mesh-job-submitter.d.ts +83 -0
  228. package/dist/mesh-job-submitter.d.ts.map +1 -0
  229. package/dist/mesh-job-submitter.js +143 -0
  230. package/dist/mesh-job-submitter.js.map +1 -0
  231. package/dist/provider-handlers/gemini-handler.js +5 -0
  232. package/dist/provider-handlers/gemini-handler.js.map +1 -1
  233. package/dist/proxy.d.ts +40 -0
  234. package/dist/proxy.d.ts.map +1 -1
  235. package/dist/proxy.js +375 -2
  236. package/dist/proxy.js.map +1 -1
  237. package/dist/resolver-meshjob.d.ts +170 -0
  238. package/dist/resolver-meshjob.d.ts.map +1 -0
  239. package/dist/resolver-meshjob.js +159 -0
  240. package/dist/resolver-meshjob.js.map +1 -0
  241. package/dist/route.d.ts +4 -0
  242. package/dist/route.d.ts.map +1 -1
  243. package/dist/route.js.map +1 -1
  244. package/dist/schema-normalize.d.ts +62 -0
  245. package/dist/schema-normalize.d.ts.map +1 -0
  246. package/dist/schema-normalize.js +128 -0
  247. package/dist/schema-normalize.js.map +1 -0
  248. package/dist/sse-stream.d.ts +44 -0
  249. package/dist/sse-stream.d.ts.map +1 -0
  250. package/dist/sse-stream.js +173 -0
  251. package/dist/sse-stream.js.map +1 -0
  252. package/dist/tool-worker-entry.d.ts +21 -0
  253. package/dist/tool-worker-entry.d.ts.map +1 -0
  254. package/dist/tool-worker-entry.js +162 -0
  255. package/dist/tool-worker-entry.js.map +1 -0
  256. package/dist/tool-worker-pool.d.ts +49 -0
  257. package/dist/tool-worker-pool.d.ts.map +1 -0
  258. package/dist/tool-worker-pool.js +272 -0
  259. package/dist/tool-worker-pool.js.map +1 -0
  260. package/dist/types.d.ts +351 -9
  261. package/dist/types.d.ts.map +1 -1
  262. package/package.json +5 -3
@@ -0,0 +1,483 @@
1
+ /**
2
+ * `addTool` registration-time validation tests (Phase 1 — MeshJob substrate).
3
+ *
4
+ * Targets the misuse-detection layer in `agent.ts`'s `addTool` —
5
+ * specifically the `meshJobParamIndex` invariants from the BLOCKER
6
+ * review finding on PR #883:
7
+ *
8
+ * - position 0 is reserved for the `args` payload, so the controller
9
+ * can only land at sig pos 1+;
10
+ * - non-integer values (NaN, 1.5, etc.) silently skipped controller
11
+ * injection before the fix → user saw `null` where they expected
12
+ * a `JobController` and got a cryptic `TypeError` at first await;
13
+ * - the upper bound (10) is a sanity check for typos.
14
+ *
15
+ * The test stubs FastMCP minimally and overrides `_autoStart` on the
16
+ * prototype to keep the auto-scheduled startup from spinning up an HTTP
17
+ * server during the test run.
18
+ */
19
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
20
+ import { z } from "zod";
21
+ import { MeshAgent } from "../agent.js";
22
+ import { spliceJobController } from "../inbound-job-dispatch.js";
23
+ // Minimal FastMCP stub: `addTool` is the only surface `addTool`
24
+ // validation reaches BEFORE throwing. `start`, `getApp`, etc. would
25
+ // only run inside `_autoStart` — which we stub out below.
26
+ function makeFastMCPStub() {
27
+ return {
28
+ addTool: vi.fn(),
29
+ start: vi.fn(),
30
+ getApp: vi.fn(),
31
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
+ };
33
+ }
34
+ // Spy on `_autoStart` so the auto-scheduled `process.nextTick(...)`
35
+ // call inside the constructor doesn't actually start an HTTP server /
36
+ // reach out to a registry. The validation we're testing happens
37
+ // synchronously inside `addTool`, before any auto-start.
38
+ let autoStartSpy = null;
39
+ beforeEach(() => {
40
+ autoStartSpy = vi
41
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
42
+ .spyOn(MeshAgent.prototype, "_autoStart")
43
+ .mockImplementation(async () => {
44
+ /* no-op */
45
+ });
46
+ });
47
+ afterEach(() => {
48
+ if (autoStartSpy) {
49
+ autoStartSpy.mockRestore();
50
+ autoStartSpy = null;
51
+ }
52
+ });
53
+ describe("addTool — meshJobParamIndex validation", () => {
54
+ function newAgent() {
55
+ return new MeshAgent(makeFastMCPStub(), {
56
+ name: "test-agent",
57
+ httpPort: 0,
58
+ });
59
+ }
60
+ it("rejects 0 (position 0 is reserved for args)", () => {
61
+ const agent = newAgent();
62
+ expect(() => agent.addTool({
63
+ name: "bad-zero",
64
+ task: true,
65
+ parameters: z.object({}),
66
+ meshJobParamIndex: 0,
67
+ execute: async () => "x",
68
+ })).toThrow(/meshJobParamIndex must be an integer >= 1.*got: 0/);
69
+ });
70
+ it("rejects negative values", () => {
71
+ const agent = newAgent();
72
+ expect(() => agent.addTool({
73
+ name: "bad-neg",
74
+ task: true,
75
+ parameters: z.object({}),
76
+ meshJobParamIndex: -1,
77
+ execute: async () => "x",
78
+ })).toThrow(/meshJobParamIndex must be an integer >= 1.*got: -1/);
79
+ });
80
+ it("rejects NaN", () => {
81
+ const agent = newAgent();
82
+ expect(() => agent.addTool({
83
+ name: "bad-nan",
84
+ task: true,
85
+ parameters: z.object({}),
86
+ meshJobParamIndex: Number.NaN,
87
+ execute: async () => "x",
88
+ })).toThrow(/meshJobParamIndex must be an integer >= 1.*got: NaN/);
89
+ });
90
+ it("rejects non-integer (1.5)", () => {
91
+ const agent = newAgent();
92
+ expect(() => agent.addTool({
93
+ name: "bad-frac",
94
+ task: true,
95
+ parameters: z.object({}),
96
+ meshJobParamIndex: 1.5,
97
+ execute: async () => "x",
98
+ })).toThrow(/meshJobParamIndex must be an integer >= 1.*got: 1\.5/);
99
+ });
100
+ it("rejects values beyond a sane upper bound (typo guard)", () => {
101
+ const agent = newAgent();
102
+ expect(() => agent.addTool({
103
+ name: "bad-big",
104
+ task: true,
105
+ parameters: z.object({}),
106
+ meshJobParamIndex: 99,
107
+ execute: async () => "x",
108
+ })).toThrow(/meshJobParamIndex must be an integer >= 1.*got: 99/);
109
+ });
110
+ it("accepts 1 (most common case — no deps, just a controller)", () => {
111
+ const agent = newAgent();
112
+ expect(() => agent.addTool({
113
+ name: "ok-one",
114
+ task: true,
115
+ parameters: z.object({}),
116
+ meshJobParamIndex: 1,
117
+ execute: async () => "x",
118
+ })).not.toThrow();
119
+ });
120
+ it("accepts 3 (controller after a couple of deps)", () => {
121
+ const agent = newAgent();
122
+ expect(() => agent.addTool({
123
+ name: "ok-three",
124
+ task: true,
125
+ parameters: z.object({}),
126
+ dependencies: ["a", "b"],
127
+ meshJobParamIndex: 3,
128
+ execute: async () => "x",
129
+ })).not.toThrow();
130
+ });
131
+ });
132
+ describe("addTool — meshJobDepIndex validation", () => {
133
+ function newAgent() {
134
+ return new MeshAgent(makeFastMCPStub(), {
135
+ name: "test-agent-depidx",
136
+ httpPort: 0,
137
+ });
138
+ }
139
+ it("rejects negative values", () => {
140
+ const agent = newAgent();
141
+ expect(() => agent.addTool({
142
+ name: "bad-neg",
143
+ parameters: z.object({}),
144
+ dependencies: ["a"],
145
+ meshJobDepIndex: -1,
146
+ execute: async () => "x",
147
+ })).toThrow(/meshJobDepIndex must be a non-negative integer.*got: -1/);
148
+ });
149
+ it("rejects NaN", () => {
150
+ const agent = newAgent();
151
+ expect(() => agent.addTool({
152
+ name: "bad-nan",
153
+ parameters: z.object({}),
154
+ dependencies: ["a"],
155
+ meshJobDepIndex: Number.NaN,
156
+ execute: async () => "x",
157
+ })).toThrow(/meshJobDepIndex must be a non-negative integer.*got: NaN/);
158
+ });
159
+ it("rejects fractional values", () => {
160
+ const agent = newAgent();
161
+ expect(() => agent.addTool({
162
+ name: "bad-frac",
163
+ parameters: z.object({}),
164
+ dependencies: ["a", "b"],
165
+ meshJobDepIndex: 0.5,
166
+ execute: async () => "x",
167
+ })).toThrow(/meshJobDepIndex must be a non-negative integer.*got: 0\.5/);
168
+ });
169
+ it("rejects out-of-range values (>= depCount) with the original range error", () => {
170
+ const agent = newAgent();
171
+ expect(() => agent.addTool({
172
+ name: "bad-oor",
173
+ parameters: z.object({}),
174
+ dependencies: ["a"], // length 1
175
+ meshJobDepIndex: 5,
176
+ execute: async () => "x",
177
+ })).toThrow(/out of range — the tool declares 1 dependencies/);
178
+ });
179
+ it("accepts 0 (first dep is the MeshJob slot)", () => {
180
+ const agent = newAgent();
181
+ expect(() => agent.addTool({
182
+ name: "ok-zero",
183
+ parameters: z.object({}),
184
+ dependencies: ["a", "b"],
185
+ meshJobDepIndex: 0,
186
+ execute: async () => "x",
187
+ })).not.toThrow();
188
+ });
189
+ });
190
+ // =============================================================================
191
+ // W1 — splice helper (de-duplicated splice loop)
192
+ // =============================================================================
193
+ describe("spliceJobController helper", () => {
194
+ // The helper is purely positional — pass primitive sentinels so
195
+ // the assertions don't depend on McpMeshTool / JobController types.
196
+ const C = "<<controller>>";
197
+ it("returns just [payload] when no deps and no MeshJob slot", () => {
198
+ expect(spliceJobController({ p: 1 }, [], null, undefined)).toEqual([
199
+ { p: 1 },
200
+ ]);
201
+ });
202
+ it("appends deps after payload when no meshJobParamIndex", () => {
203
+ expect(spliceJobController({ p: 1 }, ["d0", "d1"], C, undefined)).toEqual([{ p: 1 }, "d0", "d1"]);
204
+ });
205
+ it("places controller at sig pos 1 when no deps and meshJobParamIndex=1", () => {
206
+ expect(spliceJobController({ p: 1 }, [], C, 1)).toEqual([{ p: 1 }, C]);
207
+ });
208
+ it("interleaves: meshJobParamIndex=2 with two deps shifts the second dep past the controller", () => {
209
+ // signature: (args, dep0, controller, dep1)
210
+ expect(spliceJobController({ p: 1 }, ["d0", "d1"], C, 2)).toEqual([{ p: 1 }, "d0", C, "d1"]);
211
+ });
212
+ it("trailing slot: meshJobParamIndex=3 with one dep pads with null and places controller at the trailing position", () => {
213
+ // signature: (args, dep0, ?, controller) — pos 2 has no dep, pads null.
214
+ expect(spliceJobController({ p: 1 }, ["d0"], C, 3)).toEqual([
215
+ { p: 1 },
216
+ "d0",
217
+ null,
218
+ C,
219
+ ]);
220
+ });
221
+ it("uses null for the controller slot when caller passes null", () => {
222
+ // The wrapper passes `null` when the call is NOT running under a job
223
+ // context — the helper must still reserve the slot at meshJobParamIndex.
224
+ expect(spliceJobController({ p: 1 }, ["d0"], null, 1)).toEqual([
225
+ { p: 1 },
226
+ null,
227
+ "d0",
228
+ ]);
229
+ });
230
+ });
231
+ // =============================================================================
232
+ // W4 — worker-isolation force-disable warning visibility
233
+ // =============================================================================
234
+ describe("addTool — W4 worker-isolation force-disable warning", () => {
235
+ let warnSpy;
236
+ const originalEnv = process.env.MCP_MESH_TOOL_ISOLATION;
237
+ beforeEach(() => {
238
+ warnSpy = vi.spyOn(console, "warn").mockImplementation(() => { });
239
+ });
240
+ afterEach(() => {
241
+ warnSpy.mockRestore();
242
+ if (originalEnv === undefined) {
243
+ delete process.env.MCP_MESH_TOOL_ISOLATION;
244
+ }
245
+ else {
246
+ process.env.MCP_MESH_TOOL_ISOLATION = originalEnv;
247
+ }
248
+ });
249
+ function newAgent() {
250
+ return new MeshAgent(makeFastMCPStub(), {
251
+ name: "test-agent-w4",
252
+ httpPort: 0,
253
+ });
254
+ }
255
+ it("does NOT warn when isolation env is unset (default)", () => {
256
+ delete process.env.MCP_MESH_TOOL_ISOLATION;
257
+ const agent = newAgent();
258
+ agent.addTool({
259
+ name: "task-tool",
260
+ task: true,
261
+ parameters: z.object({}),
262
+ execute: async () => "x",
263
+ });
264
+ const isolationCall = warnSpy.mock.calls.find((c) => String(c[0]).includes("worker isolation"));
265
+ expect(isolationCall).toBeUndefined();
266
+ });
267
+ it("warns when MCP_MESH_TOOL_ISOLATION=true is set explicitly for a task: true tool", () => {
268
+ process.env.MCP_MESH_TOOL_ISOLATION = "true";
269
+ const agent = newAgent();
270
+ agent.addTool({
271
+ name: "task-tool",
272
+ task: true,
273
+ parameters: z.object({}),
274
+ execute: async () => "x",
275
+ });
276
+ const isolationCall = warnSpy.mock.calls.find((c) => String(c[0]).includes("worker isolation is disabled"));
277
+ expect(isolationCall).toBeDefined();
278
+ expect(String(isolationCall[0])).toContain("'task-tool'");
279
+ expect(String(isolationCall[0])).toContain("task: true");
280
+ });
281
+ it("warns for meshJobDepIndex consumer tools too", () => {
282
+ process.env.MCP_MESH_TOOL_ISOLATION = "true";
283
+ const agent = newAgent();
284
+ agent.addTool({
285
+ name: "consumer-tool",
286
+ parameters: z.object({}),
287
+ dependencies: ["producer"],
288
+ meshJobDepIndex: 0,
289
+ execute: async () => "x",
290
+ });
291
+ const isolationCall = warnSpy.mock.calls.find((c) => String(c[0]).includes("worker isolation is disabled"));
292
+ expect(isolationCall).toBeDefined();
293
+ expect(String(isolationCall[0])).toContain("'consumer-tool'");
294
+ expect(String(isolationCall[0])).toContain("meshJobDepIndex: 0");
295
+ });
296
+ it("does NOT warn when isolation env is explicitly set to 'false'", () => {
297
+ process.env.MCP_MESH_TOOL_ISOLATION = "false";
298
+ const agent = newAgent();
299
+ agent.addTool({
300
+ name: "task-tool",
301
+ task: true,
302
+ parameters: z.object({}),
303
+ execute: async () => "x",
304
+ });
305
+ const isolationCall = warnSpy.mock.calls.find((c) => String(c[0]).includes("worker isolation"));
306
+ expect(isolationCall).toBeUndefined();
307
+ });
308
+ it("does NOT warn for non-job-bound tools regardless of env", () => {
309
+ process.env.MCP_MESH_TOOL_ISOLATION = "true";
310
+ const agent = newAgent();
311
+ agent.addTool({
312
+ name: "regular-tool",
313
+ parameters: z.object({}),
314
+ execute: async () => "x",
315
+ });
316
+ const isolationCall = warnSpy.mock.calls.find((c) => String(c[0]).includes("worker isolation"));
317
+ expect(isolationCall).toBeUndefined();
318
+ });
319
+ });
320
+ // =============================================================================
321
+ // Regression for #925 — wrappedExecute MUST return a bare string for object
322
+ // results, NOT an envelope with `structuredContent`. FastMCP TS validates
323
+ // the tool-result via ContentResultZodSchema.strict(), which rejects unknown
324
+ // keys at the server-side dispatcher BEFORE the response leaves the process.
325
+ // PR #897 originally added `structuredContent` for Python-FastMCP parity,
326
+ // but it broke uc26 tc02/tc03 (Python caller -> TS sync tool with object
327
+ // return). Field is part of the MCP spec; re-enable when FastMCP TS upstream
328
+ // accepts it.
329
+ // =============================================================================
330
+ describe("addTool — #925 wrappedExecute return shape (no structuredContent)", () => {
331
+ // Mirror FastMCP TS's strict ContentResultZodSchema so the test is
332
+ // self-contained and breaks loudly if anyone re-introduces
333
+ // `structuredContent` (or any other unknown key) into the wrapped
334
+ // execute return value.
335
+ const StrictContentResultSchema = z
336
+ .object({
337
+ content: z.array(z.object({
338
+ type: z.literal("text"),
339
+ text: z.string(),
340
+ })),
341
+ isError: z.boolean().optional(),
342
+ })
343
+ .strict();
344
+ // Mimics FastMCP's `tool.execute()` dispatch path: when the wrapped
345
+ // execute returns a bare string, FastMCP wraps it as
346
+ // {content: [{type: "text", text: <string>}]} and validates with
347
+ // ContentResultZodSchema.strict().
348
+ function fastmcpDispatch(maybeStringResult) {
349
+ if (maybeStringResult === undefined || maybeStringResult === null) {
350
+ return StrictContentResultSchema.parse({ content: [] });
351
+ }
352
+ else if (typeof maybeStringResult === "string") {
353
+ return StrictContentResultSchema.parse({
354
+ content: [{ text: maybeStringResult, type: "text" }],
355
+ });
356
+ }
357
+ else if (typeof maybeStringResult === "object" &&
358
+ "type" in maybeStringResult) {
359
+ return StrictContentResultSchema.parse({ content: [maybeStringResult] });
360
+ }
361
+ else {
362
+ return StrictContentResultSchema.parse(maybeStringResult);
363
+ }
364
+ }
365
+ // Capture the wrapped execute fn that MeshAgent registers with
366
+ // FastMCP so the test can drive it directly (no worker pool, no HTTP).
367
+ function captureWrappedExecute() {
368
+ let wrapped = null;
369
+ const stub = {
370
+ addTool: vi.fn((tool) => {
371
+ wrapped = tool.execute;
372
+ }),
373
+ start: vi.fn(),
374
+ getApp: vi.fn(),
375
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
376
+ };
377
+ const agent = new MeshAgent(stub, {
378
+ name: "test-agent-925",
379
+ httpPort: 0,
380
+ });
381
+ return { agent, getWrapped: () => wrapped };
382
+ }
383
+ // Force-disable worker isolation so the test exercises the inline
384
+ // path. Worker dispatch can't be trivially serialised over the
385
+ // worker_threads boundary in a unit test harness — the inline branch
386
+ // is the same return-shape codepath, just without the postMessage hop.
387
+ const originalIsolation = process.env.MCP_MESH_TOOL_ISOLATION;
388
+ beforeEach(() => {
389
+ process.env.MCP_MESH_TOOL_ISOLATION = "false";
390
+ });
391
+ afterEach(() => {
392
+ if (originalIsolation === undefined) {
393
+ delete process.env.MCP_MESH_TOOL_ISOLATION;
394
+ }
395
+ else {
396
+ process.env.MCP_MESH_TOOL_ISOLATION = originalIsolation;
397
+ }
398
+ });
399
+ it("returns a bare JSON-stringified string (NOT an envelope) for object results", async () => {
400
+ const { agent, getWrapped } = captureWrappedExecute();
401
+ agent.addTool({
402
+ name: "object-tool",
403
+ parameters: z.object({}),
404
+ execute: async () => ({ foo: "bar", n: 42 }),
405
+ });
406
+ const wrapped = getWrapped();
407
+ expect(wrapped).not.toBeNull();
408
+ const result = await wrapped({});
409
+ expect(typeof result).toBe("string");
410
+ expect(result).toBe('{"foo":"bar","n":42}');
411
+ // No structuredContent key — the return value is a primitive string.
412
+ expect(result).not.toHaveProperty("structuredContent");
413
+ expect(result).not.toHaveProperty("content");
414
+ });
415
+ it("returns a bare string unchanged for string results", async () => {
416
+ const { agent, getWrapped } = captureWrappedExecute();
417
+ agent.addTool({
418
+ name: "string-tool",
419
+ parameters: z.object({}),
420
+ execute: async () => "hello",
421
+ });
422
+ const result = await getWrapped()({});
423
+ expect(result).toBe("hello");
424
+ });
425
+ it("returns an empty string for null/undefined results", async () => {
426
+ const { agent, getWrapped } = captureWrappedExecute();
427
+ agent.addTool({
428
+ name: "null-tool",
429
+ parameters: z.object({}),
430
+ execute: async () => null,
431
+ });
432
+ expect(await getWrapped()({})).toBe("");
433
+ const { agent: agent2, getWrapped: getWrapped2 } = captureWrappedExecute();
434
+ agent2.addTool({
435
+ name: "undef-tool",
436
+ parameters: z.object({}),
437
+ execute: async () => undefined,
438
+ });
439
+ expect(await getWrapped2()({})).toBe("");
440
+ });
441
+ it("FastMCP-style dispatch validates without ContentResultZodSchema error (object return)", async () => {
442
+ const { agent, getWrapped } = captureWrappedExecute();
443
+ agent.addTool({
444
+ name: "object-tool-strict",
445
+ parameters: z.object({}),
446
+ execute: async () => ({ foo: "bar" }),
447
+ });
448
+ const result = await getWrapped()({});
449
+ // Simulating FastMCP's strict-schema validation must not throw.
450
+ let dispatched;
451
+ expect(() => {
452
+ dispatched = fastmcpDispatch(result);
453
+ }).not.toThrow();
454
+ expect(dispatched).toEqual({
455
+ content: [{ type: "text", text: '{"foo":"bar"}' }],
456
+ });
457
+ });
458
+ it("FastMCP-style dispatch validates without error for arrays and numbers", async () => {
459
+ const { agent, getWrapped } = captureWrappedExecute();
460
+ agent.addTool({
461
+ name: "array-tool",
462
+ parameters: z.object({}),
463
+ execute: async () => [1, 2, 3],
464
+ });
465
+ const arrResult = await getWrapped()({});
466
+ expect(() => fastmcpDispatch(arrResult)).not.toThrow();
467
+ expect(fastmcpDispatch(arrResult)).toEqual({
468
+ content: [{ type: "text", text: "[1,2,3]" }],
469
+ });
470
+ const { agent: agent2, getWrapped: getWrapped2 } = captureWrappedExecute();
471
+ agent2.addTool({
472
+ name: "number-tool",
473
+ parameters: z.object({}),
474
+ execute: async () => 42,
475
+ });
476
+ const numResult = await getWrapped2()({});
477
+ expect(() => fastmcpDispatch(numResult)).not.toThrow();
478
+ expect(fastmcpDispatch(numResult)).toEqual({
479
+ content: [{ type: "text", text: "42" }],
480
+ });
481
+ });
482
+ });
483
+ //# sourceMappingURL=agent-add-tool.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-add-tool.spec.js","sourceRoot":"","sources":["../../src/__tests__/agent-add-tool.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=api-runtime-race.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-runtime-race.spec.d.ts","sourceRoot":"","sources":["../../src/__tests__/api-runtime-race.spec.ts"],"names":[],"mappings":""}