@mcpmesh/sdk 1.4.1 → 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 (242) 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__/mesh-job-submitter.spec.d.ts +2 -0
  86. package/dist/__tests__/mesh-job-submitter.spec.d.ts.map +1 -0
  87. package/dist/__tests__/mesh-job-submitter.spec.js +110 -0
  88. package/dist/__tests__/mesh-job-submitter.spec.js.map +1 -0
  89. package/dist/__tests__/proxy-stream.test.d.ts +9 -0
  90. package/dist/__tests__/proxy-stream.test.d.ts.map +1 -0
  91. package/dist/__tests__/proxy-stream.test.js +347 -0
  92. package/dist/__tests__/proxy-stream.test.js.map +1 -0
  93. package/dist/__tests__/resolver-meshjob.spec.d.ts +26 -0
  94. package/dist/__tests__/resolver-meshjob.spec.d.ts.map +1 -0
  95. package/dist/__tests__/resolver-meshjob.spec.js +201 -0
  96. package/dist/__tests__/resolver-meshjob.spec.js.map +1 -0
  97. package/dist/__tests__/schema-verdict-policy.test.d.ts +6 -0
  98. package/dist/__tests__/schema-verdict-policy.test.d.ts.map +1 -0
  99. package/dist/__tests__/schema-verdict-policy.test.js +126 -0
  100. package/dist/__tests__/schema-verdict-policy.test.js.map +1 -0
  101. package/dist/__tests__/sse-stream.test.d.ts +12 -0
  102. package/dist/__tests__/sse-stream.test.d.ts.map +1 -0
  103. package/dist/__tests__/sse-stream.test.js +170 -0
  104. package/dist/__tests__/sse-stream.test.js.map +1 -0
  105. package/dist/a2a/a2a-bearer.d.ts +27 -0
  106. package/dist/a2a/a2a-bearer.d.ts.map +1 -0
  107. package/dist/a2a/a2a-bearer.js +63 -0
  108. package/dist/a2a/a2a-bearer.js.map +1 -0
  109. package/dist/a2a/a2a-client.d.ts +114 -0
  110. package/dist/a2a/a2a-client.d.ts.map +1 -0
  111. package/dist/a2a/a2a-client.js +405 -0
  112. package/dist/a2a/a2a-client.js.map +1 -0
  113. package/dist/a2a/a2a-event.d.ts +25 -0
  114. package/dist/a2a/a2a-event.d.ts.map +1 -0
  115. package/dist/a2a/a2a-event.js +9 -0
  116. package/dist/a2a/a2a-event.js.map +1 -0
  117. package/dist/a2a/a2a-job.d.ts +58 -0
  118. package/dist/a2a/a2a-job.d.ts.map +1 -0
  119. package/dist/a2a/a2a-job.js +264 -0
  120. package/dist/a2a/a2a-job.js.map +1 -0
  121. package/dist/a2a/a2a-stream.d.ts +39 -0
  122. package/dist/a2a/a2a-stream.d.ts.map +1 -0
  123. package/dist/a2a/a2a-stream.js +290 -0
  124. package/dist/a2a/a2a-stream.js.map +1 -0
  125. package/dist/a2a/errors.d.ts +29 -0
  126. package/dist/a2a/errors.d.ts.map +1 -0
  127. package/dist/a2a/errors.js +48 -0
  128. package/dist/a2a/errors.js.map +1 -0
  129. package/dist/a2a/index.d.ts +12 -0
  130. package/dist/a2a/index.d.ts.map +1 -0
  131. package/dist/a2a/index.js +11 -0
  132. package/dist/a2a/index.js.map +1 -0
  133. package/dist/a2a/producer/auth-filter.d.ts +34 -0
  134. package/dist/a2a/producer/auth-filter.d.ts.map +1 -0
  135. package/dist/a2a/producer/auth-filter.js +39 -0
  136. package/dist/a2a/producer/auth-filter.js.map +1 -0
  137. package/dist/a2a/producer/card-builder.d.ts +59 -0
  138. package/dist/a2a/producer/card-builder.d.ts.map +1 -0
  139. package/dist/a2a/producer/card-builder.js +59 -0
  140. package/dist/a2a/producer/card-builder.js.map +1 -0
  141. package/dist/a2a/producer/dispatcher.d.ts +276 -0
  142. package/dist/a2a/producer/dispatcher.d.ts.map +1 -0
  143. package/dist/a2a/producer/dispatcher.js +896 -0
  144. package/dist/a2a/producer/dispatcher.js.map +1 -0
  145. package/dist/a2a/producer/index.d.ts +26 -0
  146. package/dist/a2a/producer/index.d.ts.map +1 -0
  147. package/dist/a2a/producer/index.js +23 -0
  148. package/dist/a2a/producer/index.js.map +1 -0
  149. package/dist/a2a/producer/mount.d.ts +75 -0
  150. package/dist/a2a/producer/mount.d.ts.map +1 -0
  151. package/dist/a2a/producer/mount.js +422 -0
  152. package/dist/a2a/producer/mount.js.map +1 -0
  153. package/dist/a2a/producer/public-url-cache.d.ts +73 -0
  154. package/dist/a2a/producer/public-url-cache.d.ts.map +1 -0
  155. package/dist/a2a/producer/public-url-cache.js +0 -0
  156. package/dist/a2a/producer/public-url-cache.js.map +1 -0
  157. package/dist/a2a/producer/registry.d.ts +138 -0
  158. package/dist/a2a/producer/registry.d.ts.map +1 -0
  159. package/dist/a2a/producer/registry.js +117 -0
  160. package/dist/a2a/producer/registry.js.map +1 -0
  161. package/dist/a2a/producer/sse-emitter.d.ts +85 -0
  162. package/dist/a2a/producer/sse-emitter.d.ts.map +1 -0
  163. package/dist/a2a/producer/sse-emitter.js +405 -0
  164. package/dist/a2a/producer/sse-emitter.js.map +1 -0
  165. package/dist/a2a/producer/state-translator.d.ts +63 -0
  166. package/dist/a2a/producer/state-translator.d.ts.map +1 -0
  167. package/dist/a2a/producer/state-translator.js +108 -0
  168. package/dist/a2a/producer/state-translator.js.map +1 -0
  169. package/dist/a2a/producer/task-store.d.ts +128 -0
  170. package/dist/a2a/producer/task-store.d.ts.map +1 -0
  171. package/dist/a2a/producer/task-store.js +128 -0
  172. package/dist/a2a/producer/task-store.js.map +1 -0
  173. package/dist/agent.d.ts +72 -0
  174. package/dist/agent.d.ts.map +1 -1
  175. package/dist/agent.js +618 -13
  176. package/dist/agent.js.map +1 -1
  177. package/dist/api-runtime.d.ts +25 -0
  178. package/dist/api-runtime.d.ts.map +1 -1
  179. package/dist/api-runtime.js +75 -2
  180. package/dist/api-runtime.js.map +1 -1
  181. package/dist/claim-dispatcher.d.ts +126 -0
  182. package/dist/claim-dispatcher.d.ts.map +1 -0
  183. package/dist/claim-dispatcher.js +478 -0
  184. package/dist/claim-dispatcher.js.map +1 -0
  185. package/dist/express.d.ts.map +1 -1
  186. package/dist/express.js +33 -6
  187. package/dist/express.js.map +1 -1
  188. package/dist/inbound-job-dispatch.d.ts +105 -0
  189. package/dist/inbound-job-dispatch.d.ts.map +1 -0
  190. package/dist/inbound-job-dispatch.js +335 -0
  191. package/dist/inbound-job-dispatch.js.map +1 -0
  192. package/dist/index.d.ts +37 -4
  193. package/dist/index.d.ts.map +1 -1
  194. package/dist/index.js +29 -3
  195. package/dist/index.js.map +1 -1
  196. package/dist/job-context.d.ts +107 -0
  197. package/dist/job-context.d.ts.map +1 -0
  198. package/dist/job-context.js +95 -0
  199. package/dist/job-context.js.map +1 -0
  200. package/dist/jobs-cancel-route.d.ts +36 -0
  201. package/dist/jobs-cancel-route.d.ts.map +1 -0
  202. package/dist/jobs-cancel-route.js +60 -0
  203. package/dist/jobs-cancel-route.js.map +1 -0
  204. package/dist/jobs-helper-tools.d.ts +48 -0
  205. package/dist/jobs-helper-tools.d.ts.map +1 -0
  206. package/dist/jobs-helper-tools.js +133 -0
  207. package/dist/jobs-helper-tools.js.map +1 -0
  208. package/dist/llm-agent.d.ts +62 -53
  209. package/dist/llm-agent.d.ts.map +1 -1
  210. package/dist/llm-agent.js +211 -292
  211. package/dist/llm-agent.js.map +1 -1
  212. package/dist/llm-provider.d.ts +4 -4
  213. package/dist/llm.d.ts +4 -1
  214. package/dist/llm.d.ts.map +1 -1
  215. package/dist/llm.js +7 -17
  216. package/dist/llm.js.map +1 -1
  217. package/dist/mesh-job-submitter.d.ts +83 -0
  218. package/dist/mesh-job-submitter.d.ts.map +1 -0
  219. package/dist/mesh-job-submitter.js +143 -0
  220. package/dist/mesh-job-submitter.js.map +1 -0
  221. package/dist/proxy.d.ts +30 -0
  222. package/dist/proxy.d.ts.map +1 -1
  223. package/dist/proxy.js +351 -1
  224. package/dist/proxy.js.map +1 -1
  225. package/dist/resolver-meshjob.d.ts +170 -0
  226. package/dist/resolver-meshjob.d.ts.map +1 -0
  227. package/dist/resolver-meshjob.js +159 -0
  228. package/dist/resolver-meshjob.js.map +1 -0
  229. package/dist/route.d.ts +4 -0
  230. package/dist/route.d.ts.map +1 -1
  231. package/dist/route.js.map +1 -1
  232. package/dist/schema-normalize.d.ts +62 -0
  233. package/dist/schema-normalize.d.ts.map +1 -0
  234. package/dist/schema-normalize.js +128 -0
  235. package/dist/schema-normalize.js.map +1 -0
  236. package/dist/sse-stream.d.ts +44 -0
  237. package/dist/sse-stream.d.ts.map +1 -0
  238. package/dist/sse-stream.js +173 -0
  239. package/dist/sse-stream.js.map +1 -0
  240. package/dist/types.d.ts +351 -9
  241. package/dist/types.d.ts.map +1 -1
  242. package/package.json +4 -3
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Process-local A2A task store (spec §4.8).
3
+ *
4
+ * Two record shapes coexist:
5
+ * - Terminal: `tasks/send` returned a sync value (or the handler raised).
6
+ * `terminalEnvelope` + `terminalAt` are populated; `jobProxy` is `null`.
7
+ * Cached for 300s so subsequent `tasks/get` requests return the same
8
+ * envelope (spec Appendix B item 5 — match Python / Java exactly for
9
+ * cross-runtime parity).
10
+ * - Long-running: handler returned a `JobProxy`. `jobProxy` is populated;
11
+ * `terminalEnvelope` / `terminalAt` are `undefined` until the SSE
12
+ * stream / `tasks/cancel` / `tasks/get` observes a terminal mesh state
13
+ * and calls {@link A2ATaskStore.markTerminal}.
14
+ *
15
+ * Eviction is lazy: every read/write sweeps entries whose `terminalAt`
16
+ * timestamp is older than `TERMINAL_EVICTION_MS`. No background sweeper is
17
+ * required (spec §4.8). JavaScript's single-threaded event loop avoids the
18
+ * race windows that Java needs `computeIfPresent` for — but we still
19
+ * defensively re-check `terminalAt === undefined` before flipping a record
20
+ * to terminal so concurrent async handlers can't clobber each other.
21
+ *
22
+ * Non-terminal records are never auto-evicted; long-running paths keep
23
+ * them alive across arbitrary durations.
24
+ *
25
+ * Cross-replica semantics: the store is process-local. A `tasks/get`
26
+ * against a replica that doesn't own the task returns `Unknown task id`
27
+ * per spec Appendix B item 3.
28
+ */
29
+ import type { JobProxy } from "@mcpmesh/core";
30
+ /**
31
+ * Cached A2A task envelope plus the metadata needed to keep it alive during
32
+ * the 300s idempotency window.
33
+ *
34
+ * Fields:
35
+ * - `sessionId` — the A2A session id (defaults to `taskId` per spec §4.2)
36
+ * - `requestMessage` — the originating request `message` object (echoed
37
+ * into `result.history[]`); `undefined` when the client omitted it
38
+ * - `terminalEnvelope` — the full Task envelope cached for `tasks/get`
39
+ * lookups; `undefined` for non-terminal records (long-running paths
40
+ * stamp this on terminal transition)
41
+ * - `terminalAt` — `Date.now()` timestamp when the task first entered a
42
+ * terminal state, or `undefined` when still in-flight
43
+ * - `jobProxy` — the parked `JobProxy` for long-running tasks (handler
44
+ * returned a `JobProxy` instance); `null` for sync-completed records
45
+ * so the field stays present + type-stable.
46
+ */
47
+ export interface TaskRecord {
48
+ readonly sessionId: string;
49
+ readonly requestMessage?: Record<string, unknown>;
50
+ readonly terminalEnvelope?: Record<string, unknown>;
51
+ readonly terminalAt?: number;
52
+ readonly jobProxy?: JobProxy | null;
53
+ }
54
+ /**
55
+ * Grace window in milliseconds before a terminal-state task is evicted from
56
+ * the store. Matches Python's `_TERMINAL_GRACE_SECS = 300` and Java's
57
+ * `MeshA2ATaskStore.TERMINAL_EVICTION_MILLIS` exactly for cross-runtime
58
+ * parity (spec Appendix B item 5).
59
+ */
60
+ export declare const TERMINAL_EVICTION_MS = 300000;
61
+ /**
62
+ * Process-local A2A task store.
63
+ */
64
+ export declare class A2ATaskStore {
65
+ private readonly store;
66
+ /**
67
+ * Store the task record for `taskId`. Caller is responsible for having
68
+ * checked for duplicates via {@link contains} when uniqueness matters
69
+ * (spec §4.3 idempotency window).
70
+ */
71
+ put(taskId: string, record: TaskRecord): void;
72
+ /**
73
+ * Atomically reserve `taskId` for an in-flight request by inserting a
74
+ * placeholder record. Returns `true` when the slot was free and is now
75
+ * reserved by the caller; returns `false` when the slot was already taken
76
+ * (caller must surface the spec §4.3 "already in use" error).
77
+ *
78
+ * Closes the race window between `contains(taskId)` and `put(taskId, ...)`
79
+ * for two concurrently-arriving `tasks/send` requests with the same id:
80
+ * Node's event loop is single-threaded, but `await deps.handler(...)`
81
+ * between the pre-check and the final `put()` yields control, letting
82
+ * another request slip its own check through.
83
+ */
84
+ reserveTask(taskId: string, placeholder: TaskRecord): boolean;
85
+ /**
86
+ * Drop a previously-reserved placeholder for `taskId`. Used by callers
87
+ * when the handler raised before producing a terminal envelope and the
88
+ * reservation needs to be released so the failure envelope can be put
89
+ * cleanly. No-op when the record is absent.
90
+ */
91
+ remove(taskId: string): void;
92
+ /**
93
+ * @returns the record for `taskId`, or `undefined` when missing or
94
+ * already evicted. Triggers a lazy sweep on each call.
95
+ */
96
+ get(taskId: string): TaskRecord | undefined;
97
+ /**
98
+ * @returns `true` when the store currently holds a record for `taskId`
99
+ * and that record has not been evicted by the lazy sweep.
100
+ */
101
+ contains(taskId: string): boolean;
102
+ /** @returns current size (post-sweep). For diagnostics + tests. */
103
+ size(): number;
104
+ /**
105
+ * Atomically mark a previously parked non-terminal record as terminal by
106
+ * stamping `terminalEnvelope` + `terminalAt`. No-op when the record is
107
+ * absent or already terminal (idempotent — spec §4.5 "Idempotent;
108
+ * best-effort"). First-write-wins is preserved.
109
+ *
110
+ * Used by Chunk 1B's long-running path to flip a `state=working` record
111
+ * to a cached terminal envelope so subsequent `tasks/get` calls return
112
+ * the same payload deterministically.
113
+ *
114
+ * @returns the new (or existing) terminal record, or `undefined` when
115
+ * the task is unknown
116
+ */
117
+ markTerminal(taskId: string, terminalEnvelope: Record<string, unknown>): TaskRecord | undefined;
118
+ /** Clear all stored tasks. Mainly for testing. */
119
+ clear(): void;
120
+ /**
121
+ * Lazy sweep: evict any record whose terminal-state timestamp is older
122
+ * than {@link TERMINAL_EVICTION_MS}. Non-terminal records are never
123
+ * evicted (long-running paths keep them alive across arbitrary
124
+ * durations).
125
+ */
126
+ private sweepExpired;
127
+ }
128
+ //# sourceMappingURL=task-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-store.d.ts","sourceRoot":"","sources":["../../../src/a2a/producer/task-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;CACrC;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,SAAU,CAAC;AAE5C;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IAEvD;;;;OAIG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAK7C;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,GAAG,OAAO;IAS7D;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI5B;;;OAGG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAK3C;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAKjC,mEAAmE;IACnE,IAAI,IAAI,MAAM;IAKd;;;;;;;;;;;;OAYG;IACH,YAAY,CACV,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACxC,UAAU,GAAG,SAAS;IAuBzB,kDAAkD;IAClD,KAAK,IAAI,IAAI;IAIb;;;;;OAKG;IACH,OAAO,CAAC,YAAY;CASrB"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Grace window in milliseconds before a terminal-state task is evicted from
3
+ * the store. Matches Python's `_TERMINAL_GRACE_SECS = 300` and Java's
4
+ * `MeshA2ATaskStore.TERMINAL_EVICTION_MILLIS` exactly for cross-runtime
5
+ * parity (spec Appendix B item 5).
6
+ */
7
+ export const TERMINAL_EVICTION_MS = 300_000;
8
+ /**
9
+ * Process-local A2A task store.
10
+ */
11
+ export class A2ATaskStore {
12
+ store = new Map();
13
+ /**
14
+ * Store the task record for `taskId`. Caller is responsible for having
15
+ * checked for duplicates via {@link contains} when uniqueness matters
16
+ * (spec §4.3 idempotency window).
17
+ */
18
+ put(taskId, record) {
19
+ this.sweepExpired();
20
+ this.store.set(taskId, record);
21
+ }
22
+ /**
23
+ * Atomically reserve `taskId` for an in-flight request by inserting a
24
+ * placeholder record. Returns `true` when the slot was free and is now
25
+ * reserved by the caller; returns `false` when the slot was already taken
26
+ * (caller must surface the spec §4.3 "already in use" error).
27
+ *
28
+ * Closes the race window between `contains(taskId)` and `put(taskId, ...)`
29
+ * for two concurrently-arriving `tasks/send` requests with the same id:
30
+ * Node's event loop is single-threaded, but `await deps.handler(...)`
31
+ * between the pre-check and the final `put()` yields control, letting
32
+ * another request slip its own check through.
33
+ */
34
+ reserveTask(taskId, placeholder) {
35
+ this.sweepExpired();
36
+ if (this.store.has(taskId)) {
37
+ return false;
38
+ }
39
+ this.store.set(taskId, placeholder);
40
+ return true;
41
+ }
42
+ /**
43
+ * Drop a previously-reserved placeholder for `taskId`. Used by callers
44
+ * when the handler raised before producing a terminal envelope and the
45
+ * reservation needs to be released so the failure envelope can be put
46
+ * cleanly. No-op when the record is absent.
47
+ */
48
+ remove(taskId) {
49
+ this.store.delete(taskId);
50
+ }
51
+ /**
52
+ * @returns the record for `taskId`, or `undefined` when missing or
53
+ * already evicted. Triggers a lazy sweep on each call.
54
+ */
55
+ get(taskId) {
56
+ this.sweepExpired();
57
+ return this.store.get(taskId);
58
+ }
59
+ /**
60
+ * @returns `true` when the store currently holds a record for `taskId`
61
+ * and that record has not been evicted by the lazy sweep.
62
+ */
63
+ contains(taskId) {
64
+ this.sweepExpired();
65
+ return this.store.has(taskId);
66
+ }
67
+ /** @returns current size (post-sweep). For diagnostics + tests. */
68
+ size() {
69
+ this.sweepExpired();
70
+ return this.store.size;
71
+ }
72
+ /**
73
+ * Atomically mark a previously parked non-terminal record as terminal by
74
+ * stamping `terminalEnvelope` + `terminalAt`. No-op when the record is
75
+ * absent or already terminal (idempotent — spec §4.5 "Idempotent;
76
+ * best-effort"). First-write-wins is preserved.
77
+ *
78
+ * Used by Chunk 1B's long-running path to flip a `state=working` record
79
+ * to a cached terminal envelope so subsequent `tasks/get` calls return
80
+ * the same payload deterministically.
81
+ *
82
+ * @returns the new (or existing) terminal record, or `undefined` when
83
+ * the task is unknown
84
+ */
85
+ markTerminal(taskId, terminalEnvelope) {
86
+ this.sweepExpired();
87
+ const existing = this.store.get(taskId);
88
+ if (!existing) {
89
+ return undefined;
90
+ }
91
+ if (existing.terminalAt !== undefined) {
92
+ return existing;
93
+ }
94
+ const next = {
95
+ sessionId: existing.sessionId,
96
+ requestMessage: existing.requestMessage,
97
+ terminalEnvelope,
98
+ terminalAt: Date.now(),
99
+ // Preserve the JobProxy reference on the terminal record — callers
100
+ // may want to read `proxy.status()` one last time for diagnostics
101
+ // before the eviction sweep drops it (300s grace window).
102
+ jobProxy: existing.jobProxy ?? null,
103
+ };
104
+ this.store.set(taskId, next);
105
+ return next;
106
+ }
107
+ /** Clear all stored tasks. Mainly for testing. */
108
+ clear() {
109
+ this.store.clear();
110
+ }
111
+ /**
112
+ * Lazy sweep: evict any record whose terminal-state timestamp is older
113
+ * than {@link TERMINAL_EVICTION_MS}. Non-terminal records are never
114
+ * evicted (long-running paths keep them alive across arbitrary
115
+ * durations).
116
+ */
117
+ sweepExpired() {
118
+ const now = Date.now();
119
+ for (const [taskId, record] of this.store) {
120
+ if (record.terminalAt === undefined)
121
+ continue;
122
+ if (now - record.terminalAt > TERMINAL_EVICTION_MS) {
123
+ this.store.delete(taskId);
124
+ }
125
+ }
126
+ }
127
+ }
128
+ //# sourceMappingURL=task-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-store.js","sourceRoot":"","sources":["../../../src/a2a/producer/task-store.ts"],"names":[],"mappings":"AAuDA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAE5C;;GAEG;AACH,MAAM,OAAO,YAAY;IACN,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAEvD;;;;OAIG;IACH,GAAG,CAAC,MAAc,EAAE,MAAkB;QACpC,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;IAED;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,MAAc,EAAE,WAAuB;QACjD,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,MAAc;QACnB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,MAAc;QAChB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,MAAc;QACrB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,mEAAmE;IACnE,IAAI;QACF,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,YAAY,CACV,MAAc,EACd,gBAAyC;QAEzC,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,IAAI,GAAe;YACvB,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,cAAc,EAAE,QAAQ,CAAC,cAAc;YACvC,gBAAgB;YAChB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;YACtB,mEAAmE;YACnE,kEAAkE;YAClE,0DAA0D;YAC1D,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,IAAI;SACpC,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kDAAkD;IAClD,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACK,YAAY;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1C,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;gBAAE,SAAS;YAC9C,IAAI,GAAG,GAAG,MAAM,CAAC,UAAU,GAAG,oBAAoB,EAAE,CAAC;gBACnD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
package/dist/agent.d.ts CHANGED
@@ -73,6 +73,41 @@ export declare class MeshAgent {
73
73
  */
74
74
  private resolvedDeps;
75
75
  private _workerMode;
76
+ /**
77
+ * Phase 1 MeshJob substrate: per-tool ClaimHandler for `task: true`
78
+ * tools. Indexed by capability so the ClaimDispatcher can look up
79
+ * the local handler without re-traversing the tools map. Populated
80
+ * by addTool() at registration time; consumed by _autoStart() to
81
+ * spawn one dispatcher per task tool.
82
+ *
83
+ * Issue #894: also carries the per-tool retryOn whitelist so the
84
+ * dispatcher can pass it into `runWithJobContext` for the
85
+ * release-lease-on-retry-eligible-throw path.
86
+ */
87
+ private _taskHandlers;
88
+ /**
89
+ * Active claim dispatchers (one per task=true capability). Started
90
+ * during _autoStart(); stopped during shutdown(). Empty for agents
91
+ * that own no task=true tools.
92
+ */
93
+ private _claimDispatchers;
94
+ /**
95
+ * Issue #917: cache of `A2AClient` instances keyed by their
96
+ * `(url, skillId, auth, timeoutMs)` tuple so multiple consumer
97
+ * tools targeting the same backend share one outbound connection
98
+ * pool. Closed via `close()` on agent shutdown.
99
+ */
100
+ private _a2aClients;
101
+ /**
102
+ * Issue #917: stable opaque IDs for `A2ABearer` instances used in
103
+ * the A2AClient cache key. Bearer fields are private so we cannot
104
+ * fingerprint by content (would also be a security risk — two
105
+ * tools with distinct literal tokens must NEVER share a cache
106
+ * entry). Identity-based keying is the safe default. `WeakMap`
107
+ * lets bearers be GC'd when the registering tool is removed.
108
+ */
109
+ private _bearerIds;
110
+ private _nextBearerId;
76
111
  constructor(server: FastMCP, config: AgentConfig);
77
112
  /**
78
113
  * Add a tool to the agent.
@@ -101,6 +136,31 @@ export declare class MeshAgent {
101
136
  * ```
102
137
  */
103
138
  addLlmProvider(config: LlmProviderConfig): this;
139
+ /**
140
+ * Issue #917: build an `A2ABearer` (or undefined) from the
141
+ * user-friendly auth config supported on `MeshA2AConfig.auth`. The
142
+ * config can be either an `{ token, tokenEnv }` shorthand object OR
143
+ * a pre-built `A2ABearer` instance the user constructed manually.
144
+ *
145
+ * Tightened to `instanceof A2ABearer` so a stray `{ token,
146
+ * authorizationHeader: () => ... }` object cannot duck-type its way
147
+ * past A2ABearer's validation (which catches blank tokens and
148
+ * mutually-exclusive `token`/`tokenEnv`).
149
+ */
150
+ private _buildBearerFromConfig;
151
+ /**
152
+ * Issue #917: cache `A2AClient` instances by their config tuple so
153
+ * multiple consumer tools targeting the same backend share one
154
+ * outbound connection pool. Auth instances participate in the cache
155
+ * key by reference (same `A2ABearer` ref → same client); two
156
+ * separately-constructed bearers — even ones holding identical
157
+ * tokens — get separate clients. Identity-based keying is the safe
158
+ * default: A2ABearer's private fields make content-fingerprinting
159
+ * impossible from outside, and a content-derived key risks leaking
160
+ * tool-A's bearer onto tool-B's outbound traffic.
161
+ */
162
+ private _bearerCacheKey;
163
+ private _getOrBuildA2AClient;
104
164
  /**
105
165
  * Convert Zod schema to JSON Schema.
106
166
  */
@@ -109,6 +169,18 @@ export declare class MeshAgent {
109
169
  * Internal: Start the agent (called by auto-start mechanism).
110
170
  */
111
171
  _autoStart(): Promise<void>;
172
+ /**
173
+ * Phase 1 MeshJob substrate: register the three framework helper
174
+ * tools on the FastMCP server AND in the agent's tool catalog so
175
+ * the heartbeat ships them to the registry as visible capabilities.
176
+ */
177
+ private registerJobsHelperTools;
178
+ /**
179
+ * Phase 1 MeshJob substrate: spawn ClaimDispatchers for every
180
+ * task=true tool registered. Skipped if no registry URL or no task
181
+ * handlers are present.
182
+ */
183
+ private startClaimDispatchers;
112
184
  /**
113
185
  * Register LLM tools from LlmToolRegistry.
114
186
  * This adds tool metadata for LLM tools created via mesh.llm().
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAG7B,OAAO,EAGL,KAAK,aAAa,EAInB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EACnB,WAAW,EAEX,WAAW,EAEX,iBAAiB,EAClB,MAAM,YAAY,CAAC;AA0BpB;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,gBAAgB,eAAuC,CAAC;AAiBrE;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,CAEjF;AAqBD;;;;;;;;GAQG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAoC;IACjD;;;;OAIG;IACH,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,UAAU,CAAC,CAA8B;IACjD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,iBAAiB,CAAS;IAElC;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY,CAAuC;IAK3D,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW;IAqChD;;;;;;OAMG;IACH,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IA4MvD;;;;;;;;;;;;;;;;;OAiBG;IACH,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAyC/C;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAI9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuHjC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;;;;;;;OAQG;IACH,OAAO,CAAC,qBAAqB;IAiC7B;;OAEG;YACW,cAAc;IA6F5B;;OAEG;YACW,YAAY;IA6G1B;;;;;;;OAOG;IACH,OAAO,CAAC,yBAAyB;IA6CjC;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAiCnC;;;;;OAKG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAYrD;;;;;;OAMG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAI1E;;OAEG;IACH,kBAAkB,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC;IAI9C;;OAEG;IACH,SAAS,IAAI,aAAa,GAAG,IAAI;IAIjC;;OAEG;IACH,SAAS,IAAI,mBAAmB;IAIhC;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAqBhC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,SAAS,CAEpE"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}