@namzu/sdk 30.1.0 → 31.0.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 (714) hide show
  1. package/CHANGELOG.md +576 -0
  2. package/README.md +43 -2
  3. package/dist/advisory/executor.d.ts +2 -1
  4. package/dist/advisory/executor.d.ts.map +1 -1
  5. package/dist/advisory/executor.js +4 -1
  6. package/dist/advisory/executor.js.map +1 -1
  7. package/dist/agents/ReactiveAgent.d.ts.map +1 -1
  8. package/dist/agents/ReactiveAgent.js +12 -0
  9. package/dist/agents/ReactiveAgent.js.map +1 -1
  10. package/dist/agents/RouterAgent.d.ts.map +1 -1
  11. package/dist/agents/RouterAgent.js +21 -3
  12. package/dist/agents/RouterAgent.js.map +1 -1
  13. package/dist/agents/SupervisorAgent.d.ts.map +1 -1
  14. package/dist/agents/SupervisorAgent.js +34 -11
  15. package/dist/agents/SupervisorAgent.js.map +1 -1
  16. package/dist/agents/runAgent.d.ts +12 -0
  17. package/dist/agents/runAgent.d.ts.map +1 -1
  18. package/dist/agents/runAgent.js +26 -2
  19. package/dist/agents/runAgent.js.map +1 -1
  20. package/dist/authorization/command-line.d.ts +81 -0
  21. package/dist/authorization/command-line.d.ts.map +1 -0
  22. package/dist/authorization/command-line.js +347 -0
  23. package/dist/authorization/command-line.js.map +1 -0
  24. package/dist/authorization/rules.d.ts.map +1 -1
  25. package/dist/authorization/rules.js +22 -1
  26. package/dist/authorization/rules.js.map +1 -1
  27. package/dist/bridge/a2a/client.d.ts +23 -5
  28. package/dist/bridge/a2a/client.d.ts.map +1 -1
  29. package/dist/bridge/a2a/client.js +320 -73
  30. package/dist/bridge/a2a/client.js.map +1 -1
  31. package/dist/bridge/a2a/mapper.d.ts.map +1 -1
  32. package/dist/bridge/a2a/mapper.js +4 -0
  33. package/dist/bridge/a2a/mapper.js.map +1 -1
  34. package/dist/bridge/acp/server.d.ts +13 -1
  35. package/dist/bridge/acp/server.d.ts.map +1 -1
  36. package/dist/bridge/acp/server.js +150 -44
  37. package/dist/bridge/acp/server.js.map +1 -1
  38. package/dist/bridge/mcp/connector/adapter.d.ts +3 -2
  39. package/dist/bridge/mcp/connector/adapter.d.ts.map +1 -1
  40. package/dist/bridge/mcp/connector/adapter.js +17 -21
  41. package/dist/bridge/mcp/connector/adapter.js.map +1 -1
  42. package/dist/bridge/sse/mapper.d.ts.map +1 -1
  43. package/dist/bridge/sse/mapper.js +3 -0
  44. package/dist/bridge/sse/mapper.js.map +1 -1
  45. package/dist/compaction/dangling.d.ts +29 -2
  46. package/dist/compaction/dangling.d.ts.map +1 -1
  47. package/dist/compaction/dangling.js +172 -35
  48. package/dist/compaction/dangling.js.map +1 -1
  49. package/dist/compaction/index.d.ts +3 -2
  50. package/dist/compaction/index.d.ts.map +1 -1
  51. package/dist/compaction/index.js +1 -1
  52. package/dist/compaction/index.js.map +1 -1
  53. package/dist/compaction/manual.d.ts +11 -1
  54. package/dist/compaction/manual.d.ts.map +1 -1
  55. package/dist/compaction/manual.js +89 -14
  56. package/dist/compaction/manual.js.map +1 -1
  57. package/dist/compaction/plan.d.ts +19 -6
  58. package/dist/compaction/plan.d.ts.map +1 -1
  59. package/dist/compaction/plan.js +18 -4
  60. package/dist/compaction/plan.js.map +1 -1
  61. package/dist/compaction/retention.d.ts +10 -7
  62. package/dist/compaction/retention.d.ts.map +1 -1
  63. package/dist/compaction/retention.js +26 -8
  64. package/dist/compaction/retention.js.map +1 -1
  65. package/dist/compaction/summary.d.ts +4 -4
  66. package/dist/compaction/summary.js +4 -4
  67. package/dist/compaction/verifier.d.ts +19 -1
  68. package/dist/compaction/verifier.d.ts.map +1 -1
  69. package/dist/compaction/verifier.js +20 -1
  70. package/dist/compaction/verifier.js.map +1 -1
  71. package/dist/config/runtime.d.ts +6 -6
  72. package/dist/connector/BaseConnector.d.ts +6 -4
  73. package/dist/connector/BaseConnector.d.ts.map +1 -1
  74. package/dist/connector/BaseConnector.js +8 -2
  75. package/dist/connector/BaseConnector.js.map +1 -1
  76. package/dist/connector/builtins/http.d.ts +16 -4
  77. package/dist/connector/builtins/http.d.ts.map +1 -1
  78. package/dist/connector/builtins/http.js +177 -44
  79. package/dist/connector/builtins/http.js.map +1 -1
  80. package/dist/connector/builtins/webhook.d.ts +15 -4
  81. package/dist/connector/builtins/webhook.d.ts.map +1 -1
  82. package/dist/connector/builtins/webhook.js +165 -45
  83. package/dist/connector/builtins/webhook.js.map +1 -1
  84. package/dist/connector/execution-contract.d.ts +11 -0
  85. package/dist/connector/execution-contract.d.ts.map +1 -0
  86. package/dist/connector/execution-contract.js +14 -0
  87. package/dist/connector/execution-contract.js.map +1 -0
  88. package/dist/connector/http-operation.d.ts +48 -0
  89. package/dist/connector/http-operation.d.ts.map +1 -0
  90. package/dist/connector/http-operation.js +205 -0
  91. package/dist/connector/http-operation.js.map +1 -0
  92. package/dist/connector/mcp/adapter.d.ts.map +1 -1
  93. package/dist/connector/mcp/adapter.js +8 -3
  94. package/dist/connector/mcp/adapter.js.map +1 -1
  95. package/dist/connector/mcp/client.d.ts +14 -8
  96. package/dist/connector/mcp/client.d.ts.map +1 -1
  97. package/dist/connector/mcp/client.js +160 -44
  98. package/dist/connector/mcp/client.js.map +1 -1
  99. package/dist/connector/mcp/http-sse.d.ts +8 -2
  100. package/dist/connector/mcp/http-sse.d.ts.map +1 -1
  101. package/dist/connector/mcp/http-sse.js +70 -17
  102. package/dist/connector/mcp/http-sse.js.map +1 -1
  103. package/dist/connector/mcp/prompt-adapter.d.ts.map +1 -1
  104. package/dist/connector/mcp/prompt-adapter.js +9 -2
  105. package/dist/connector/mcp/prompt-adapter.js.map +1 -1
  106. package/dist/connector/mcp/stdio.d.ts +2 -2
  107. package/dist/connector/mcp/stdio.d.ts.map +1 -1
  108. package/dist/connector/mcp/stdio.js +14 -50
  109. package/dist/connector/mcp/stdio.js.map +1 -1
  110. package/dist/connector/mcp/streamable-http.d.ts +7 -2
  111. package/dist/connector/mcp/streamable-http.d.ts.map +1 -1
  112. package/dist/connector/mcp/streamable-http.js +66 -18
  113. package/dist/connector/mcp/streamable-http.js.map +1 -1
  114. package/dist/connector/tools/adapter.d.ts +2 -2
  115. package/dist/connector/tools/adapter.d.ts.map +1 -1
  116. package/dist/connector/tools/adapter.js +23 -14
  117. package/dist/connector/tools/adapter.js.map +1 -1
  118. package/dist/connector/tools/definitions.d.ts.map +1 -1
  119. package/dist/connector/tools/definitions.js +5 -2
  120. package/dist/connector/tools/definitions.js.map +1 -1
  121. package/dist/connector/tools/result.d.ts +4 -0
  122. package/dist/connector/tools/result.d.ts.map +1 -0
  123. package/dist/connector/tools/result.js +20 -0
  124. package/dist/connector/tools/result.js.map +1 -0
  125. package/dist/connector/web/guarded-fetch.d.ts +4 -2
  126. package/dist/connector/web/guarded-fetch.d.ts.map +1 -1
  127. package/dist/connector/web/guarded-fetch.js +157 -43
  128. package/dist/connector/web/guarded-fetch.js.map +1 -1
  129. package/dist/constants/sandbox/index.d.ts +3 -2
  130. package/dist/constants/sandbox/index.d.ts.map +1 -1
  131. package/dist/constants/sandbox/index.js +3 -2
  132. package/dist/constants/sandbox/index.js.map +1 -1
  133. package/dist/contracts/api.d.ts +2 -0
  134. package/dist/contracts/api.d.ts.map +1 -1
  135. package/dist/contracts/schemas.d.ts +38 -12
  136. package/dist/contracts/schemas.d.ts.map +1 -1
  137. package/dist/contracts/schemas.js +7 -0
  138. package/dist/contracts/schemas.js.map +1 -1
  139. package/dist/directory/derive-supervisor.d.ts.map +1 -1
  140. package/dist/directory/derive-supervisor.js +8 -0
  141. package/dist/directory/derive-supervisor.js.map +1 -1
  142. package/dist/directory/derive.d.ts.map +1 -1
  143. package/dist/directory/derive.js +8 -0
  144. package/dist/directory/derive.js.map +1 -1
  145. package/dist/directory/load.d.ts.map +1 -1
  146. package/dist/directory/load.js +2 -0
  147. package/dist/directory/load.js.map +1 -1
  148. package/dist/directory/types.d.ts +4 -0
  149. package/dist/directory/types.d.ts.map +1 -1
  150. package/dist/eval/experiment.d.ts +10 -10
  151. package/dist/eval/experiment.d.ts.map +1 -1
  152. package/dist/eval/experiment.js +121 -91
  153. package/dist/eval/experiment.js.map +1 -1
  154. package/dist/eval/judge.d.ts +6 -0
  155. package/dist/eval/judge.d.ts.map +1 -1
  156. package/dist/eval/judge.js +7 -2
  157. package/dist/eval/judge.js.map +1 -1
  158. package/dist/eval/types.d.ts +7 -1
  159. package/dist/eval/types.d.ts.map +1 -1
  160. package/dist/manager/agent/lifecycle.d.ts +12 -10
  161. package/dist/manager/agent/lifecycle.d.ts.map +1 -1
  162. package/dist/manager/agent/lifecycle.js +16 -3
  163. package/dist/manager/agent/lifecycle.js.map +1 -1
  164. package/dist/manager/connector/environment.d.ts +2 -2
  165. package/dist/manager/connector/environment.d.ts.map +1 -1
  166. package/dist/manager/connector/environment.js +2 -2
  167. package/dist/manager/connector/environment.js.map +1 -1
  168. package/dist/manager/connector/lifecycle.d.ts +10 -2
  169. package/dist/manager/connector/lifecycle.d.ts.map +1 -1
  170. package/dist/manager/connector/lifecycle.js +273 -24
  171. package/dist/manager/connector/lifecycle.js.map +1 -1
  172. package/dist/manager/connector/tenant.d.ts +5 -4
  173. package/dist/manager/connector/tenant.d.ts.map +1 -1
  174. package/dist/manager/connector/tenant.js +47 -22
  175. package/dist/manager/connector/tenant.js.map +1 -1
  176. package/dist/manager/goal/activation.d.ts +23 -0
  177. package/dist/manager/goal/activation.d.ts.map +1 -0
  178. package/dist/manager/goal/activation.js +41 -0
  179. package/dist/manager/goal/activation.js.map +1 -0
  180. package/dist/manager/index.d.ts +3 -2
  181. package/dist/manager/index.d.ts.map +1 -1
  182. package/dist/manager/index.js.map +1 -1
  183. package/dist/manager/run/persistence.d.ts +2 -0
  184. package/dist/manager/run/persistence.d.ts.map +1 -1
  185. package/dist/manager/run/persistence.js +5 -1
  186. package/dist/manager/run/persistence.js.map +1 -1
  187. package/dist/manager/topic/dependency.d.ts +24 -0
  188. package/dist/manager/topic/dependency.d.ts.map +1 -0
  189. package/dist/manager/topic/dependency.js +13 -0
  190. package/dist/manager/topic/dependency.js.map +1 -0
  191. package/dist/manager/topic/lifecycle.d.ts +9 -21
  192. package/dist/manager/topic/lifecycle.d.ts.map +1 -1
  193. package/dist/manager/topic/lifecycle.js +17 -29
  194. package/dist/manager/topic/lifecycle.js.map +1 -1
  195. package/dist/plugin/index.d.ts +1 -0
  196. package/dist/plugin/index.d.ts.map +1 -1
  197. package/dist/plugin/index.js.map +1 -1
  198. package/dist/plugin/lifecycle.d.ts +15 -0
  199. package/dist/plugin/lifecycle.d.ts.map +1 -1
  200. package/dist/plugin/lifecycle.js +144 -38
  201. package/dist/plugin/lifecycle.js.map +1 -1
  202. package/dist/plugin/loader.d.ts +3 -3
  203. package/dist/plugin/loader.d.ts.map +1 -1
  204. package/dist/plugin/loader.js +58 -12
  205. package/dist/plugin/loader.js.map +1 -1
  206. package/dist/provider/collect-chat-completion.d.ts +7 -0
  207. package/dist/provider/collect-chat-completion.d.ts.map +1 -1
  208. package/dist/provider/collect-chat-completion.js +35 -0
  209. package/dist/provider/collect-chat-completion.js.map +1 -1
  210. package/dist/provider/fallback.d.ts +3 -1
  211. package/dist/provider/fallback.d.ts.map +1 -1
  212. package/dist/provider/fallback.js +62 -10
  213. package/dist/provider/fallback.js.map +1 -1
  214. package/dist/provider/idle-timeout.d.ts +4 -0
  215. package/dist/provider/idle-timeout.d.ts.map +1 -1
  216. package/dist/provider/idle-timeout.js +131 -15
  217. package/dist/provider/idle-timeout.js.map +1 -1
  218. package/dist/provider/index.d.ts +2 -0
  219. package/dist/provider/index.d.ts.map +1 -1
  220. package/dist/provider/index.js +1 -0
  221. package/dist/provider/index.js.map +1 -1
  222. package/dist/provider/instrumentation.d.ts.map +1 -1
  223. package/dist/provider/instrumentation.js +1 -0
  224. package/dist/provider/instrumentation.js.map +1 -1
  225. package/dist/provider/retry.d.ts.map +1 -1
  226. package/dist/provider/retry.js +13 -1
  227. package/dist/provider/retry.js.map +1 -1
  228. package/dist/public-runtime.d.ts +57 -24
  229. package/dist/public-runtime.d.ts.map +1 -1
  230. package/dist/public-runtime.js +42 -35
  231. package/dist/public-runtime.js.map +1 -1
  232. package/dist/public-tools.d.ts +1 -0
  233. package/dist/public-tools.d.ts.map +1 -1
  234. package/dist/public-tools.js +5 -0
  235. package/dist/public-tools.js.map +1 -1
  236. package/dist/public-types.d.ts +33 -12
  237. package/dist/public-types.d.ts.map +1 -1
  238. package/dist/rag/embedding.d.ts +8 -3
  239. package/dist/rag/embedding.d.ts.map +1 -1
  240. package/dist/rag/embedding.js +120 -9
  241. package/dist/rag/embedding.js.map +1 -1
  242. package/dist/rag/index.d.ts +1 -1
  243. package/dist/rag/index.d.ts.map +1 -1
  244. package/dist/rag/index.js +1 -1
  245. package/dist/rag/index.js.map +1 -1
  246. package/dist/rag/ingestion.d.ts +2 -2
  247. package/dist/rag/ingestion.d.ts.map +1 -1
  248. package/dist/rag/ingestion.js +15 -3
  249. package/dist/rag/ingestion.js.map +1 -1
  250. package/dist/rag/knowledge-base.d.ts +3 -3
  251. package/dist/rag/knowledge-base.d.ts.map +1 -1
  252. package/dist/rag/knowledge-base.js +8 -4
  253. package/dist/rag/knowledge-base.js.map +1 -1
  254. package/dist/rag/operation.d.ts +10 -0
  255. package/dist/rag/operation.d.ts.map +1 -0
  256. package/dist/rag/operation.js +26 -0
  257. package/dist/rag/operation.js.map +1 -0
  258. package/dist/rag/rag-tool.d.ts.map +1 -1
  259. package/dist/rag/rag-tool.js +6 -3
  260. package/dist/rag/rag-tool.js.map +1 -1
  261. package/dist/rag/retriever.d.ts +2 -2
  262. package/dist/rag/retriever.d.ts.map +1 -1
  263. package/dist/rag/retriever.js +31 -15
  264. package/dist/rag/retriever.js.map +1 -1
  265. package/dist/rag/vector-store.d.ts +3 -3
  266. package/dist/rag/vector-store.d.ts.map +1 -1
  267. package/dist/rag/vector-store.js +4 -2
  268. package/dist/rag/vector-store.js.map +1 -1
  269. package/dist/registry/command/kernel-commands.d.ts +16 -4
  270. package/dist/registry/command/kernel-commands.d.ts.map +1 -1
  271. package/dist/registry/command/kernel-commands.js +171 -0
  272. package/dist/registry/command/kernel-commands.js.map +1 -1
  273. package/dist/run/reporter.d.ts.map +1 -1
  274. package/dist/run/reporter.js +9 -0
  275. package/dist/run/reporter.js.map +1 -1
  276. package/dist/run-query/index.d.ts +15 -1
  277. package/dist/run-query/index.d.ts.map +1 -1
  278. package/dist/run-query/index.js +69 -15
  279. package/dist/run-query/index.js.map +1 -1
  280. package/dist/runtime/query/context.d.ts.map +1 -1
  281. package/dist/runtime/query/context.js +10 -3
  282. package/dist/runtime/query/context.js.map +1 -1
  283. package/dist/runtime/query/executor.d.ts +3 -0
  284. package/dist/runtime/query/executor.d.ts.map +1 -1
  285. package/dist/runtime/query/executor.js +80 -18
  286. package/dist/runtime/query/executor.js.map +1 -1
  287. package/dist/runtime/query/guard.d.ts +9 -0
  288. package/dist/runtime/query/guard.d.ts.map +1 -1
  289. package/dist/runtime/query/guard.js +11 -0
  290. package/dist/runtime/query/guard.js.map +1 -1
  291. package/dist/runtime/query/index.d.ts +30 -1
  292. package/dist/runtime/query/index.d.ts.map +1 -1
  293. package/dist/runtime/query/index.js +548 -95
  294. package/dist/runtime/query/index.js.map +1 -1
  295. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  296. package/dist/runtime/query/iteration/index.js +74 -14
  297. package/dist/runtime/query/iteration/index.js.map +1 -1
  298. package/dist/runtime/query/iteration/phases/compaction.d.ts.map +1 -1
  299. package/dist/runtime/query/iteration/phases/compaction.js +94 -53
  300. package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
  301. package/dist/runtime/query/iteration/phases/context.d.ts +3 -0
  302. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  303. package/dist/runtime/query/iteration/phases/context.js.map +1 -1
  304. package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
  305. package/dist/runtime/query/iteration/phases/tool-review.js +21 -0
  306. package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
  307. package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -1
  308. package/dist/runtime/query/iteration/stream-turn.js +4 -0
  309. package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
  310. package/dist/runtime/query/project-instructions.d.ts +69 -0
  311. package/dist/runtime/query/project-instructions.d.ts.map +1 -0
  312. package/dist/runtime/query/project-instructions.js +137 -0
  313. package/dist/runtime/query/project-instructions.js.map +1 -0
  314. package/dist/runtime/query/request-rich-content.d.ts +22 -0
  315. package/dist/runtime/query/request-rich-content.d.ts.map +1 -0
  316. package/dist/runtime/query/request-rich-content.js +122 -0
  317. package/dist/runtime/query/request-rich-content.js.map +1 -0
  318. package/dist/runtime/query/result.d.ts.map +1 -1
  319. package/dist/runtime/query/result.js +12 -1
  320. package/dist/runtime/query/result.js.map +1 -1
  321. package/dist/runtime/query/resume-pending.d.ts.map +1 -1
  322. package/dist/runtime/query/resume-pending.js +19 -20
  323. package/dist/runtime/query/resume-pending.js.map +1 -1
  324. package/dist/runtime/query/resume-run.d.ts.map +1 -1
  325. package/dist/runtime/query/resume-run.js +54 -8
  326. package/dist/runtime/query/resume-run.js.map +1 -1
  327. package/dist/runtime/query/run-state.d.ts +5 -0
  328. package/dist/runtime/query/run-state.d.ts.map +1 -1
  329. package/dist/runtime/query/run-state.js +6 -1
  330. package/dist/runtime/query/run-state.js.map +1 -1
  331. package/dist/runtime/query/sandbox-lifecycle.d.ts +54 -0
  332. package/dist/runtime/query/sandbox-lifecycle.d.ts.map +1 -0
  333. package/dist/runtime/query/sandbox-lifecycle.js +167 -0
  334. package/dist/runtime/query/sandbox-lifecycle.js.map +1 -0
  335. package/dist/sandbox/isolation.d.ts.map +1 -1
  336. package/dist/sandbox/isolation.js +9 -0
  337. package/dist/sandbox/isolation.js.map +1 -1
  338. package/dist/sandbox/provider/local.d.ts +56 -6
  339. package/dist/sandbox/provider/local.d.ts.map +1 -1
  340. package/dist/sandbox/provider/local.js +181 -76
  341. package/dist/sandbox/provider/local.js.map +1 -1
  342. package/dist/sandbox/terminal.d.ts +13 -5
  343. package/dist/sandbox/terminal.d.ts.map +1 -1
  344. package/dist/sandbox/terminal.js +11 -3
  345. package/dist/sandbox/terminal.js.map +1 -1
  346. package/dist/session/errors.d.ts +28 -29
  347. package/dist/session/errors.d.ts.map +1 -1
  348. package/dist/session/errors.js +28 -29
  349. package/dist/session/errors.js.map +1 -1
  350. package/dist/session/handoff/broadcast.d.ts +5 -8
  351. package/dist/session/handoff/broadcast.d.ts.map +1 -1
  352. package/dist/session/handoff/broadcast.js +16 -6
  353. package/dist/session/handoff/broadcast.js.map +1 -1
  354. package/dist/session/handoff/single.d.ts +5 -8
  355. package/dist/session/handoff/single.d.ts.map +1 -1
  356. package/dist/session/handoff/single.js +7 -4
  357. package/dist/session/handoff/single.js.map +1 -1
  358. package/dist/store/attachment/index.d.ts +11 -3
  359. package/dist/store/attachment/index.d.ts.map +1 -1
  360. package/dist/store/attachment/index.js +49 -4
  361. package/dist/store/attachment/index.js.map +1 -1
  362. package/dist/store/feedback/conformance.d.ts.map +1 -1
  363. package/dist/store/feedback/conformance.js +32 -0
  364. package/dist/store/feedback/conformance.js.map +1 -1
  365. package/dist/store/feedback/disk.d.ts +8 -6
  366. package/dist/store/feedback/disk.d.ts.map +1 -1
  367. package/dist/store/feedback/disk.js +111 -76
  368. package/dist/store/feedback/disk.js.map +1 -1
  369. package/dist/store/goal/index.d.ts +111 -0
  370. package/dist/store/goal/index.d.ts.map +1 -0
  371. package/dist/store/goal/index.js +436 -0
  372. package/dist/store/goal/index.js.map +1 -0
  373. package/dist/store/index.d.ts +1 -1
  374. package/dist/store/index.d.ts.map +1 -1
  375. package/dist/store/index.js +1 -1
  376. package/dist/store/index.js.map +1 -1
  377. package/dist/store/kv/revision-record-store.d.ts +70 -0
  378. package/dist/store/kv/revision-record-store.d.ts.map +1 -0
  379. package/dist/store/kv/revision-record-store.js +290 -0
  380. package/dist/store/kv/revision-record-store.js.map +1 -0
  381. package/dist/store/memory/disk.d.ts +9 -7
  382. package/dist/store/memory/disk.d.ts.map +1 -1
  383. package/dist/store/memory/disk.js +256 -98
  384. package/dist/store/memory/disk.js.map +1 -1
  385. package/dist/store/run/disk.d.ts +10 -2
  386. package/dist/store/run/disk.d.ts.map +1 -1
  387. package/dist/store/run/disk.js +70 -4
  388. package/dist/store/run/disk.js.map +1 -1
  389. package/dist/store/run/memory.d.ts +4 -2
  390. package/dist/store/run/memory.d.ts.map +1 -1
  391. package/dist/store/run/memory.js +15 -1
  392. package/dist/store/run/memory.js.map +1 -1
  393. package/dist/store/session/disk.d.ts +9 -0
  394. package/dist/store/session/disk.d.ts.map +1 -1
  395. package/dist/store/session/disk.js +57 -5
  396. package/dist/store/session/disk.js.map +1 -1
  397. package/dist/store/session/memory.d.ts +1 -0
  398. package/dist/store/session/memory.d.ts.map +1 -1
  399. package/dist/store/session/memory.js +14 -0
  400. package/dist/store/session/memory.js.map +1 -1
  401. package/dist/store/topic/memory.d.ts +1 -2
  402. package/dist/store/topic/memory.d.ts.map +1 -1
  403. package/dist/store/topic/memory.js +4 -5
  404. package/dist/store/topic/memory.js.map +1 -1
  405. package/dist/store/topic/objective.d.ts +8 -4
  406. package/dist/store/topic/objective.d.ts.map +1 -1
  407. package/dist/store/topic/objective.js +185 -100
  408. package/dist/store/topic/objective.js.map +1 -1
  409. package/dist/store/topic/state.d.ts +1 -2
  410. package/dist/store/topic/state.d.ts.map +1 -1
  411. package/dist/store/topic/state.js +50 -62
  412. package/dist/store/topic/state.js.map +1 -1
  413. package/dist/tools/builtins/bash.d.ts.map +1 -1
  414. package/dist/tools/builtins/bash.js +20 -0
  415. package/dist/tools/builtins/bash.js.map +1 -1
  416. package/dist/tools/builtins/computer-use.d.ts +9 -1
  417. package/dist/tools/builtins/computer-use.d.ts.map +1 -1
  418. package/dist/tools/builtins/computer-use.js.map +1 -1
  419. package/dist/tools/builtins/content-fingerprint.d.ts +8 -7
  420. package/dist/tools/builtins/content-fingerprint.d.ts.map +1 -1
  421. package/dist/tools/builtins/content-fingerprint.js +9 -10
  422. package/dist/tools/builtins/content-fingerprint.js.map +1 -1
  423. package/dist/tools/builtins/edit.d.ts +6 -1
  424. package/dist/tools/builtins/edit.d.ts.map +1 -1
  425. package/dist/tools/builtins/edit.js +166 -27
  426. package/dist/tools/builtins/edit.js.map +1 -1
  427. package/dist/tools/builtins/write-file.d.ts.map +1 -1
  428. package/dist/tools/builtins/write-file.js +45 -19
  429. package/dist/tools/builtins/write-file.js.map +1 -1
  430. package/dist/tools/command-arguments.d.ts +43 -0
  431. package/dist/tools/command-arguments.d.ts.map +1 -0
  432. package/dist/tools/command-arguments.js +52 -0
  433. package/dist/tools/command-arguments.js.map +1 -0
  434. package/dist/tools/coordinator/index.d.ts +2 -0
  435. package/dist/tools/coordinator/index.d.ts.map +1 -1
  436. package/dist/tools/coordinator/index.js +3 -1
  437. package/dist/tools/coordinator/index.js.map +1 -1
  438. package/dist/tools/defineTool.d.ts +10 -0
  439. package/dist/tools/defineTool.d.ts.map +1 -1
  440. package/dist/tools/defineTool.js +1 -0
  441. package/dist/tools/defineTool.js.map +1 -1
  442. package/dist/tools/env-scrub.d.ts +7 -5
  443. package/dist/tools/env-scrub.d.ts.map +1 -1
  444. package/dist/tools/env-scrub.js +7 -5
  445. package/dist/tools/env-scrub.js.map +1 -1
  446. package/dist/tools/goal/index.d.ts +20 -0
  447. package/dist/tools/goal/index.d.ts.map +1 -0
  448. package/dist/tools/goal/index.js +104 -0
  449. package/dist/tools/goal/index.js.map +1 -0
  450. package/dist/tools/memory/index.d.ts +16 -0
  451. package/dist/tools/memory/index.d.ts.map +1 -1
  452. package/dist/tools/memory/index.js +6 -2
  453. package/dist/tools/memory/index.js.map +1 -1
  454. package/dist/tools/memory/search.d.ts +4 -1
  455. package/dist/tools/memory/search.d.ts.map +1 -1
  456. package/dist/tools/memory/search.js +10 -2
  457. package/dist/tools/memory/search.js.map +1 -1
  458. package/dist/types/agent/base.d.ts +11 -3
  459. package/dist/types/agent/base.d.ts.map +1 -1
  460. package/dist/types/agent/factory.d.ts +2 -0
  461. package/dist/types/agent/factory.d.ts.map +1 -1
  462. package/dist/types/agent/reactive.d.ts +2 -0
  463. package/dist/types/agent/reactive.d.ts.map +1 -1
  464. package/dist/types/agent/supervisor.d.ts +6 -0
  465. package/dist/types/agent/supervisor.d.ts.map +1 -1
  466. package/dist/types/agent/task.d.ts +6 -2
  467. package/dist/types/agent/task.d.ts.map +1 -1
  468. package/dist/types/connector/core.d.ts +13 -8
  469. package/dist/types/connector/core.d.ts.map +1 -1
  470. package/dist/types/connector/definition.d.ts +37 -18
  471. package/dist/types/connector/definition.d.ts.map +1 -1
  472. package/dist/types/connector/http.d.ts +6 -0
  473. package/dist/types/connector/http.d.ts.map +1 -1
  474. package/dist/types/connector/mcp.d.ts +24 -6
  475. package/dist/types/connector/mcp.d.ts.map +1 -1
  476. package/dist/types/connector/tenant.d.ts +17 -7
  477. package/dist/types/connector/tenant.d.ts.map +1 -1
  478. package/dist/types/connector/webhook.d.ts +6 -0
  479. package/dist/types/connector/webhook.d.ts.map +1 -1
  480. package/dist/types/goal/index.d.ts +46 -0
  481. package/dist/types/goal/index.d.ts.map +1 -0
  482. package/dist/types/goal/index.js +2 -0
  483. package/dist/types/goal/index.js.map +1 -0
  484. package/dist/types/ids/index.d.ts +2 -0
  485. package/dist/types/ids/index.d.ts.map +1 -1
  486. package/dist/types/ids/index.js.map +1 -1
  487. package/dist/types/message/index.d.ts +75 -10
  488. package/dist/types/message/index.d.ts.map +1 -1
  489. package/dist/types/message/index.js +49 -3
  490. package/dist/types/message/index.js.map +1 -1
  491. package/dist/types/plugin/index.d.ts +7 -5
  492. package/dist/types/plugin/index.d.ts.map +1 -1
  493. package/dist/types/plugin/index.js.map +1 -1
  494. package/dist/types/provider/chat.d.ts +27 -4
  495. package/dist/types/provider/chat.d.ts.map +1 -1
  496. package/dist/types/provider/interface.d.ts +18 -7
  497. package/dist/types/provider/interface.d.ts.map +1 -1
  498. package/dist/types/provider/stream.d.ts +6 -0
  499. package/dist/types/provider/stream.d.ts.map +1 -1
  500. package/dist/types/rag/embedding.d.ts +15 -2
  501. package/dist/types/rag/embedding.d.ts.map +1 -1
  502. package/dist/types/rag/ingestion.d.ts +2 -2
  503. package/dist/types/rag/ingestion.d.ts.map +1 -1
  504. package/dist/types/rag/knowledge-base.d.ts +3 -3
  505. package/dist/types/rag/knowledge-base.d.ts.map +1 -1
  506. package/dist/types/rag/retrieval.d.ts +2 -2
  507. package/dist/types/rag/retrieval.d.ts.map +1 -1
  508. package/dist/types/rag/scope.d.ts +4 -0
  509. package/dist/types/rag/scope.d.ts.map +1 -1
  510. package/dist/types/rag/vector.d.ts +5 -2
  511. package/dist/types/rag/vector.d.ts.map +1 -1
  512. package/dist/types/run/config.d.ts +20 -0
  513. package/dist/types/run/config.d.ts.map +1 -1
  514. package/dist/types/run/events.d.ts +25 -1
  515. package/dist/types/run/events.d.ts.map +1 -1
  516. package/dist/types/run/events.js.map +1 -1
  517. package/dist/types/run/metadata.d.ts +2 -0
  518. package/dist/types/run/metadata.d.ts.map +1 -1
  519. package/dist/types/run/step.d.ts +2 -6
  520. package/dist/types/run/step.d.ts.map +1 -1
  521. package/dist/types/run/step.js.map +1 -1
  522. package/dist/types/run/store.d.ts +55 -2
  523. package/dist/types/run/store.d.ts.map +1 -1
  524. package/dist/types/sandbox/index.d.ts +47 -6
  525. package/dist/types/sandbox/index.d.ts.map +1 -1
  526. package/dist/types/sandbox/index.js +23 -10
  527. package/dist/types/sandbox/index.js.map +1 -1
  528. package/dist/types/session/store.d.ts +13 -0
  529. package/dist/types/session/store.d.ts.map +1 -1
  530. package/dist/types/tool/index.d.ts +33 -11
  531. package/dist/types/tool/index.d.ts.map +1 -1
  532. package/dist/types/tool/index.js.map +1 -1
  533. package/dist/types/topic/entity.d.ts +3 -4
  534. package/dist/types/topic/entity.d.ts.map +1 -1
  535. package/dist/types/topic/store.d.ts +3 -3
  536. package/dist/utils/id.d.ts +3 -1
  537. package/dist/utils/id.d.ts.map +1 -1
  538. package/dist/utils/id.js +4 -0
  539. package/dist/utils/id.js.map +1 -1
  540. package/dist/utils/process-environment.d.ts +26 -0
  541. package/dist/utils/process-environment.d.ts.map +1 -0
  542. package/dist/utils/process-environment.js +78 -0
  543. package/dist/utils/process-environment.js.map +1 -0
  544. package/dist/vault/InMemoryCredentialVault.d.ts +2 -0
  545. package/dist/vault/InMemoryCredentialVault.d.ts.map +1 -1
  546. package/dist/vault/InMemoryCredentialVault.js +24 -4
  547. package/dist/vault/InMemoryCredentialVault.js.map +1 -1
  548. package/dist/vault/instrumentation.d.ts.map +1 -1
  549. package/dist/vault/instrumentation.js +15 -0
  550. package/dist/vault/instrumentation.js.map +1 -1
  551. package/package.json +1 -1
  552. package/src/advisory/executor.ts +4 -1
  553. package/src/agents/ReactiveAgent.ts +12 -0
  554. package/src/agents/RouterAgent.ts +25 -3
  555. package/src/agents/SupervisorAgent.ts +33 -11
  556. package/src/agents/runAgent.ts +38 -2
  557. package/src/authorization/command-line.ts +390 -0
  558. package/src/authorization/rules.ts +22 -1
  559. package/src/bridge/a2a/client.ts +384 -97
  560. package/src/bridge/a2a/mapper.ts +5 -0
  561. package/src/bridge/acp/server.ts +184 -42
  562. package/src/bridge/mcp/connector/adapter.ts +28 -20
  563. package/src/bridge/sse/mapper.ts +3 -0
  564. package/src/compaction/dangling.ts +203 -38
  565. package/src/compaction/index.ts +9 -2
  566. package/src/compaction/manual.ts +125 -18
  567. package/src/compaction/plan.ts +42 -11
  568. package/src/compaction/retention.ts +23 -8
  569. package/src/compaction/summary.ts +4 -4
  570. package/src/compaction/verifier.ts +66 -0
  571. package/src/connector/BaseConnector.ts +19 -4
  572. package/src/connector/builtins/http.ts +236 -46
  573. package/src/connector/builtins/webhook.ts +207 -47
  574. package/src/connector/execution-contract.ts +27 -0
  575. package/src/connector/http-operation.ts +238 -0
  576. package/src/connector/mcp/adapter.ts +8 -3
  577. package/src/connector/mcp/client.ts +207 -58
  578. package/src/connector/mcp/http-sse.ts +91 -23
  579. package/src/connector/mcp/prompt-adapter.ts +8 -2
  580. package/src/connector/mcp/stdio.ts +21 -46
  581. package/src/connector/mcp/streamable-http.ts +86 -22
  582. package/src/connector/tools/adapter.ts +23 -14
  583. package/src/connector/tools/definitions.ts +5 -2
  584. package/src/connector/tools/result.ts +21 -0
  585. package/src/connector/web/guarded-fetch.ts +188 -48
  586. package/src/constants/sandbox/index.ts +3 -2
  587. package/src/contracts/api.ts +2 -0
  588. package/src/contracts/schemas.ts +7 -0
  589. package/src/directory/derive-supervisor.ts +8 -0
  590. package/src/directory/derive.ts +8 -0
  591. package/src/directory/load.ts +2 -0
  592. package/src/directory/types.ts +4 -0
  593. package/src/eval/experiment.ts +160 -111
  594. package/src/eval/judge.ts +13 -2
  595. package/src/eval/types.ts +7 -1
  596. package/src/manager/agent/lifecycle.ts +28 -12
  597. package/src/manager/connector/environment.ts +3 -1
  598. package/src/manager/connector/lifecycle.ts +364 -24
  599. package/src/manager/connector/tenant.ts +56 -23
  600. package/src/manager/goal/activation.ts +52 -0
  601. package/src/manager/index.ts +10 -2
  602. package/src/manager/run/persistence.ts +6 -1
  603. package/src/manager/topic/dependency.ts +39 -0
  604. package/src/manager/topic/lifecycle.ts +19 -31
  605. package/src/plugin/index.ts +1 -0
  606. package/src/plugin/lifecycle.ts +180 -39
  607. package/src/plugin/loader.ts +70 -13
  608. package/src/pricing/rates.source.json +315 -204
  609. package/src/provider/collect-chat-completion.ts +36 -0
  610. package/src/provider/fallback.ts +79 -11
  611. package/src/provider/idle-timeout.ts +143 -17
  612. package/src/provider/index.ts +2 -0
  613. package/src/provider/instrumentation.ts +1 -0
  614. package/src/provider/retry.ts +16 -1
  615. package/src/public-runtime.ts +190 -32
  616. package/src/public-tools.ts +5 -0
  617. package/src/public-types.ts +85 -11
  618. package/src/rag/embedding.ts +147 -19
  619. package/src/rag/index.ts +1 -1
  620. package/src/rag/ingestion.ts +16 -2
  621. package/src/rag/knowledge-base.ts +13 -4
  622. package/src/rag/operation.ts +28 -0
  623. package/src/rag/rag-tool.ts +6 -3
  624. package/src/rag/retriever.ts +62 -11
  625. package/src/rag/vector-store.ts +8 -2
  626. package/src/registry/command/kernel-commands.ts +223 -4
  627. package/src/run/reporter.ts +10 -0
  628. package/src/run-query/index.ts +84 -15
  629. package/src/runtime/query/context.ts +13 -3
  630. package/src/runtime/query/executor.ts +90 -17
  631. package/src/runtime/query/guard.ts +12 -0
  632. package/src/runtime/query/index.ts +652 -103
  633. package/src/runtime/query/iteration/index.ts +89 -13
  634. package/src/runtime/query/iteration/phases/compaction.ts +120 -55
  635. package/src/runtime/query/iteration/phases/context.ts +4 -0
  636. package/src/runtime/query/iteration/phases/tool-review.ts +28 -0
  637. package/src/runtime/query/iteration/stream-turn.ts +3 -0
  638. package/src/runtime/query/project-instructions.ts +212 -0
  639. package/src/runtime/query/request-rich-content.ts +153 -0
  640. package/src/runtime/query/result.ts +12 -1
  641. package/src/runtime/query/resume-pending.ts +20 -18
  642. package/src/runtime/query/resume-run.ts +52 -8
  643. package/src/runtime/query/run-state.ts +11 -1
  644. package/src/runtime/query/sandbox-lifecycle.ts +210 -0
  645. package/src/sandbox/isolation.ts +9 -0
  646. package/src/sandbox/provider/local.ts +255 -90
  647. package/src/sandbox/terminal.ts +13 -5
  648. package/src/session/errors.ts +68 -42
  649. package/src/session/handoff/broadcast.ts +20 -14
  650. package/src/session/handoff/single.ts +14 -13
  651. package/src/store/attachment/index.ts +65 -3
  652. package/src/store/feedback/conformance.ts +39 -0
  653. package/src/store/feedback/disk.ts +128 -82
  654. package/src/store/goal/index.ts +594 -0
  655. package/src/store/index.ts +1 -1
  656. package/src/store/kv/revision-record-store.ts +346 -0
  657. package/src/store/memory/disk.ts +288 -113
  658. package/src/store/run/disk.ts +96 -5
  659. package/src/store/run/memory.ts +22 -2
  660. package/src/store/session/disk.ts +93 -6
  661. package/src/store/session/memory.ts +22 -0
  662. package/src/store/topic/memory.ts +4 -5
  663. package/src/store/topic/objective.ts +215 -100
  664. package/src/store/topic/state.ts +100 -63
  665. package/src/tools/builtins/bash.ts +21 -0
  666. package/src/tools/builtins/computer-use.ts +9 -1
  667. package/src/tools/builtins/content-fingerprint.ts +9 -12
  668. package/src/tools/builtins/edit.ts +190 -27
  669. package/src/tools/builtins/write-file.ts +55 -19
  670. package/src/tools/command-arguments.ts +54 -0
  671. package/src/tools/coordinator/index.ts +4 -1
  672. package/src/tools/defineTool.ts +11 -0
  673. package/src/tools/env-scrub.ts +7 -5
  674. package/src/tools/goal/index.ts +129 -0
  675. package/src/tools/memory/index.ts +26 -3
  676. package/src/tools/memory/search.ts +20 -3
  677. package/src/types/agent/base.ts +12 -3
  678. package/src/types/agent/factory.ts +2 -0
  679. package/src/types/agent/reactive.ts +2 -0
  680. package/src/types/agent/supervisor.ts +6 -0
  681. package/src/types/agent/task.ts +6 -2
  682. package/src/types/connector/core.ts +13 -8
  683. package/src/types/connector/definition.ts +54 -20
  684. package/src/types/connector/http.ts +7 -0
  685. package/src/types/connector/mcp.ts +27 -6
  686. package/src/types/connector/tenant.ts +21 -7
  687. package/src/types/connector/webhook.ts +7 -0
  688. package/src/types/goal/index.ts +50 -0
  689. package/src/types/ids/index.ts +2 -0
  690. package/src/types/message/index.ts +143 -9
  691. package/src/types/plugin/index.ts +7 -5
  692. package/src/types/provider/chat.ts +35 -4
  693. package/src/types/provider/interface.ts +22 -7
  694. package/src/types/provider/stream.ts +6 -0
  695. package/src/types/rag/embedding.ts +16 -2
  696. package/src/types/rag/ingestion.ts +2 -1
  697. package/src/types/rag/knowledge-base.ts +7 -3
  698. package/src/types/rag/retrieval.ts +2 -1
  699. package/src/types/rag/scope.ts +5 -0
  700. package/src/types/rag/vector.ts +5 -2
  701. package/src/types/run/config.ts +20 -0
  702. package/src/types/run/events.ts +28 -3
  703. package/src/types/run/metadata.ts +2 -0
  704. package/src/types/run/step.ts +2 -7
  705. package/src/types/run/store.ts +60 -2
  706. package/src/types/sandbox/index.ts +57 -14
  707. package/src/types/session/store.ts +18 -0
  708. package/src/types/tool/index.ts +33 -11
  709. package/src/types/topic/entity.ts +3 -4
  710. package/src/types/topic/store.ts +3 -3
  711. package/src/utils/id.ts +6 -0
  712. package/src/utils/process-environment.ts +101 -0
  713. package/src/vault/InMemoryCredentialVault.ts +29 -4
  714. package/src/vault/instrumentation.ts +24 -0
@@ -1,3 +1,5 @@
1
+ import { isAbsolute } from 'node:path'
2
+
1
3
  import {
2
4
  ACP_CLIENT_NOTIFICATIONS,
3
5
  ACP_CLIENT_REQUESTS,
@@ -90,7 +92,14 @@ export interface AcpAgentGateway {
90
92
  readonly filesystem: AcpClientFilesystem | undefined
91
93
  /** Turns to resume from, oldest first. Empty for a fresh session. */
92
94
  readonly history: readonly unknown[]
93
- }): Promise<{ readonly stopReason?: string }>
95
+ }): Promise<{
96
+ readonly stopReason?: string
97
+ /**
98
+ * The exact conversation to use for the next prompt, after the run has
99
+ * settled. Omit it when the gateway does not own durable history.
100
+ */
101
+ readonly history?: readonly unknown[]
102
+ }>
94
103
 
95
104
  /**
96
105
  * The turns a prior session left behind, for `session/load`.
@@ -123,6 +132,8 @@ export interface AcpServerOptions {
123
132
  interface Session {
124
133
  readonly cwd: string
125
134
  controller: AbortController
135
+ /** One live prompt per protocol session. Other sessions remain independent. */
136
+ promptInFlight: boolean
126
137
  /**
127
138
  * Whether the human said "approve all" for THIS session.
128
139
  *
@@ -153,7 +164,10 @@ class AcpError extends Error {
153
164
  export class ACPServer {
154
165
  private readonly log: Logger
155
166
  private readonly sessions = new Map<string, Session>()
167
+ /** IDs being loaded or created but not yet published. */
168
+ private readonly reservedSessionIds = new Map<string, symbol>()
156
169
  private initialized = false
170
+ private stopped = false
157
171
  private clientCapabilities: readonly string[] = []
158
172
  private sessionSeq = 0
159
173
 
@@ -191,6 +205,7 @@ export class ACPServer {
191
205
  }
192
206
 
193
207
  async start(): Promise<void> {
208
+ if (this.stopped) throw new Error('An ACP server cannot be restarted after it has stopped.')
194
209
  this.options.transport.onMessage((message) => {
195
210
  void this.dispatch(message)
196
211
  })
@@ -198,8 +213,7 @@ export class ACPServer {
198
213
  }
199
214
 
200
215
  async stop(): Promise<void> {
201
- for (const session of this.sessions.values()) session.controller.abort()
202
- this.sessions.clear()
216
+ this.stopped = true
203
217
  // Anything still waiting on the client is rejected rather than left
204
218
  // pending: the transport is about to close, so no answer is coming, and
205
219
  // a promise nobody will ever settle keeps whatever awaited it alive.
@@ -207,6 +221,9 @@ export class ACPServer {
207
221
  waiting.reject(new Error('The client connection closed before it answered.'))
208
222
  }
209
223
  this.pending.clear()
224
+ for (const session of this.sessions.values()) session.controller.abort()
225
+ this.sessions.clear()
226
+ this.reservedSessionIds.clear()
210
227
  await this.options.transport.close()
211
228
  }
212
229
 
@@ -218,14 +235,39 @@ export class ACPServer {
218
235
  * so it needs an id, a place to park the promise, and a `dispatch` that
219
236
  * recognises a response frame.
220
237
  */
221
- private request<T>(method: string, params: Record<string, unknown>): Promise<T> {
238
+ private request<T>(
239
+ method: string,
240
+ params: Record<string, unknown>,
241
+ signal?: AbortSignal,
242
+ ): Promise<T> {
222
243
  this.requestSeq += 1
223
244
  const id = `agent_${this.requestSeq}`
224
245
  return new Promise<T>((resolve, reject) => {
225
- this.pending.set(id, { resolve: resolve as (value: unknown) => void, reject })
226
- void this.send({ jsonrpc: '2.0', id, method, params }).catch((err: unknown) => {
246
+ const finish = (): boolean => {
247
+ if (this.pending.get(id) !== entry) return false
227
248
  this.pending.delete(id)
228
- reject(err instanceof Error ? err : new Error(String(err)))
249
+ signal?.removeEventListener('abort', onAbort)
250
+ return true
251
+ }
252
+ const onAbort = (): void => {
253
+ const reason =
254
+ signal?.reason instanceof Error
255
+ ? signal.reason
256
+ : new DOMException('The permission request was cancelled.', 'AbortError')
257
+ entry.reject(reason)
258
+ }
259
+ const entry = {
260
+ resolve: (value: unknown) => {
261
+ if (finish()) resolve(value as T)
262
+ },
263
+ reject: (error: Error) => {
264
+ if (finish()) reject(error)
265
+ },
266
+ }
267
+ this.pending.set(id, entry)
268
+ signal?.addEventListener('abort', onAbort, { once: true })
269
+ void this.send({ jsonrpc: '2.0', id, method, params }).catch((err: unknown) => {
270
+ entry.reject(err instanceof Error ? err : new Error(String(err)))
229
271
  })
230
272
  })
231
273
  }
@@ -238,7 +280,6 @@ export class ACPServer {
238
280
  // asker waiting forever and the run parked with nobody coming.
239
281
  if (message.id !== undefined && this.pending.has(message.id)) {
240
282
  const waiting = this.pending.get(message.id)
241
- this.pending.delete(message.id)
242
283
  if (message.error) {
243
284
  waiting?.reject(new Error(message.error.message))
244
285
  } else {
@@ -331,7 +372,13 @@ export class ACPServer {
331
372
  private onSessionNew(params: AcpSessionNewParams): AcpSessionNewResult {
332
373
  this.requireInitialized()
333
374
  this.requirePermissionCapability()
334
- return { sessionId: this.openSession(params.cwd, []) }
375
+ const cwd = this.requireAbsoluteCwd(params.cwd)
376
+ const { sessionId, token } = this.reserveGeneratedSessionId()
377
+ // No await separates reserve from publish, so another operation cannot
378
+ // take or close this namespace slot between the two statements. Load has
379
+ // an async store read and therefore keeps its explicit failure cleanup.
380
+ this.publishSession(sessionId, token, cwd, [])
381
+ return { sessionId }
335
382
  }
336
383
 
337
384
  /**
@@ -351,29 +398,91 @@ export class ACPServer {
351
398
  'This agent has no session store, so there is nothing to resume. Create a new session instead.',
352
399
  )
353
400
  }
354
- const history = await this.options.gateway.load(params.sessionId)
355
- // The SAME id, not a new one. A client that asked to resume `ses_x` and
356
- // got `ses_y` back has to rewrite whatever it had keyed by the old one.
357
- this.sessions.set(params.sessionId, {
358
- cwd: params.cwd ?? process.cwd(),
359
- controller: new AbortController(),
360
- approveAll: false,
361
- history,
362
- })
363
- return { sessionId: params.sessionId }
401
+ const cwd = this.requireAbsoluteCwd(params.cwd)
402
+ const token = this.reserveSessionId(params.sessionId)
403
+ try {
404
+ const history = await this.options.gateway.load(params.sessionId)
405
+ if (!Array.isArray(history)) {
406
+ throw new AcpError(
407
+ ACP_ERROR_CODES.INTERNAL_ERROR,
408
+ `The session store returned an invalid history for "${params.sessionId}".`,
409
+ )
410
+ }
411
+ // The SAME id, not a new one. A client that asked to resume `ses_x` and
412
+ // got `ses_y` back has to rewrite whatever it had keyed by the old one.
413
+ this.publishSession(params.sessionId, token, cwd, history)
414
+ return { sessionId: params.sessionId }
415
+ } catch (error) {
416
+ this.releaseSessionId(params.sessionId, token)
417
+ throw error
418
+ }
419
+ }
420
+
421
+ private requireAbsoluteCwd(cwd: string | undefined): string {
422
+ const resolved = cwd ?? process.cwd()
423
+ if (!isAbsolute(resolved)) {
424
+ throw new AcpError(
425
+ ACP_ERROR_CODES.INVALID_PARAMS,
426
+ `ACP session cwd must be an absolute path; received ${JSON.stringify(resolved)}.`,
427
+ )
428
+ }
429
+ return resolved
364
430
  }
365
431
 
366
- private openSession(cwd: string | undefined, history: readonly unknown[]): string {
367
- this.sessionSeq += 1
368
- const sessionId = this.options.newSessionId?.() ?? `acp_${this.sessionSeq}`
432
+ private reserveGeneratedSessionId(): { readonly sessionId: string; readonly token: symbol } {
433
+ if (this.options.newSessionId) {
434
+ const sessionId = this.options.newSessionId()
435
+ return { sessionId, token: this.reserveSessionId(sessionId) }
436
+ }
437
+
438
+ for (;;) {
439
+ this.sessionSeq += 1
440
+ const sessionId = `acp_${this.sessionSeq}`
441
+ if (this.sessions.has(sessionId) || this.reservedSessionIds.has(sessionId)) continue
442
+ return { sessionId, token: this.reserveSessionId(sessionId) }
443
+ }
444
+ }
445
+
446
+ private reserveSessionId(sessionId: string): symbol {
447
+ if (this.stopped) {
448
+ throw new AcpError(ACP_ERROR_CODES.INVALID_REQUEST, 'The ACP connection has closed.')
449
+ }
450
+ if (!sessionId || this.sessions.has(sessionId) || this.reservedSessionIds.has(sessionId)) {
451
+ throw new AcpError(
452
+ ACP_ERROR_CODES.INVALID_PARAMS,
453
+ `Session id "${sessionId}" is already open or being loaded on this connection.`,
454
+ )
455
+ }
456
+ const token = Symbol(sessionId)
457
+ this.reservedSessionIds.set(sessionId, token)
458
+ return token
459
+ }
460
+
461
+ private releaseSessionId(sessionId: string, token: symbol): void {
462
+ if (this.reservedSessionIds.get(sessionId) === token) this.reservedSessionIds.delete(sessionId)
463
+ }
464
+
465
+ private publishSession(
466
+ sessionId: string,
467
+ token: symbol,
468
+ cwd: string,
469
+ history: readonly unknown[],
470
+ ): void {
471
+ if (this.stopped || this.reservedSessionIds.get(sessionId) !== token) {
472
+ throw new AcpError(
473
+ ACP_ERROR_CODES.INVALID_REQUEST,
474
+ `Session "${sessionId}" could not be opened because the connection closed.`,
475
+ )
476
+ }
369
477
  this.sessions.set(sessionId, {
370
- cwd: cwd ?? process.cwd(),
478
+ cwd,
371
479
  controller: new AbortController(),
480
+ promptInFlight: false,
372
481
  // Fresh per session. See `Session.approveAll`.
373
482
  approveAll: false,
374
- history,
483
+ history: [...history],
375
484
  })
376
- return sessionId
485
+ this.releaseSessionId(sessionId, token)
377
486
  }
378
487
 
379
488
  private requireInitialized(): void {
@@ -399,26 +508,52 @@ export class ACPServer {
399
508
 
400
509
  private async onSessionPrompt(params: AcpSessionPromptParams): Promise<AcpSessionPromptResult> {
401
510
  const session = this.requireSession(params.sessionId)
511
+ if (session.promptInFlight) {
512
+ throw new AcpError(
513
+ ACP_ERROR_CODES.INVALID_REQUEST,
514
+ `Session "${params.sessionId}" already has a prompt in flight. Wait for it to settle or cancel it before sending another.`,
515
+ )
516
+ }
517
+ session.promptInFlight = true
402
518
  // A fresh controller per turn: the previous one may already be aborted
403
519
  // by a cancel of the turn before, and reusing it would start this one
404
520
  // already cancelled.
405
- session.controller = new AbortController()
406
-
407
- const outcome = await this.options.gateway.prompt({
408
- sessionId: params.sessionId,
409
- prompt: params.prompt,
410
- cwd: session.cwd,
411
- signal: session.controller.signal,
412
- onEvent: (event) => {
413
- const update = toAcpSessionUpdate(event, this.options.presenter)
414
- if (update) void this.notifyUpdate(params.sessionId, update)
415
- },
416
- ask: (request) => this.askPermission(session, request),
417
- filesystem: this.clientFilesystem(),
418
- history: session.history,
419
- })
521
+ const controller = new AbortController()
522
+ session.controller = controller
420
523
 
421
- return { stopReason: toAcpStopReason(outcome.stopReason) }
524
+ try {
525
+ const outcome = await this.options.gateway.prompt({
526
+ sessionId: params.sessionId,
527
+ prompt: params.prompt,
528
+ cwd: session.cwd,
529
+ signal: controller.signal,
530
+ onEvent: (event) => {
531
+ const update = toAcpSessionUpdate(event, this.options.presenter)
532
+ if (update) void this.notifyUpdate(params.sessionId, update)
533
+ },
534
+ ask: (request) => this.askPermission(params.sessionId, session, request, controller.signal),
535
+ filesystem: this.clientFilesystem(),
536
+ history: session.history,
537
+ })
538
+ if (outcome.history !== undefined) {
539
+ if (!Array.isArray(outcome.history)) {
540
+ throw new AcpError(
541
+ ACP_ERROR_CODES.INTERNAL_ERROR,
542
+ `The gateway returned an invalid history for session "${params.sessionId}".`,
543
+ )
544
+ }
545
+ session.history = [...outcome.history]
546
+ }
547
+
548
+ return {
549
+ stopReason: controller.signal.aborted ? 'cancelled' : toAcpStopReason(outcome.stopReason),
550
+ }
551
+ } catch (error) {
552
+ if (controller.signal.aborted) return { stopReason: 'cancelled' }
553
+ throw error
554
+ } finally {
555
+ session.promptInFlight = false
556
+ }
422
557
  }
423
558
 
424
559
  private onSessionCancel(params: AcpSessionCancelParams): null {
@@ -433,9 +568,12 @@ export class ACPServer {
433
568
  * everything for this session.
434
569
  */
435
570
  private async askPermission(
571
+ sessionId: string,
436
572
  session: Session,
437
573
  request: AcpPermissionRequest,
574
+ signal: AbortSignal,
438
575
  ): Promise<AcpPermissionOutcome> {
576
+ signal.throwIfAborted()
439
577
  // The latch, read from the SESSION. Checked here rather than in the
440
578
  // gateway so no gateway can forget it.
441
579
  if (session.approveAll) return { kind: 'approve_all' }
@@ -443,10 +581,14 @@ export class ACPServer {
443
581
  const answer = await this.request<AcpRequestPermissionResult>(
444
582
  ACP_CLIENT_REQUESTS.REQUEST_PERMISSION,
445
583
  {
446
- sessionId: request.sessionId,
584
+ // The wire session owns this identity. A gateway is allowed to
585
+ // describe the tool batch, but it cannot relabel A's consent as B's.
586
+ sessionId,
447
587
  toolCalls: request.toolCalls,
448
588
  },
589
+ signal,
449
590
  )
591
+ signal.throwIfAborted()
450
592
 
451
593
  switch (answer?.outcome) {
452
594
  case 'approve':
@@ -1,16 +1,19 @@
1
- import { zodToJsonSchema } from 'zod-to-json-schema'
1
+ import { connectorToolError } from '../../../connector/tools/result.js'
2
2
  import type { ConnectorManager } from '../../../manager/connector/lifecycle.js'
3
+ import { renderToolSchema } from '../../../registry/tool/schema.js'
3
4
  import type {
4
5
  ConnectorDefinition,
5
6
  ConnectorExecuteResult,
6
7
  ConnectorInstance,
7
8
  ConnectorMethod,
9
+ ConnectorOperationOptions,
8
10
  MCPConnectorBridgeToolMapping,
9
11
  MCPJsonSchema,
10
12
  MCPToolDefinition,
11
13
  MCPToolResult,
14
+ MCPValueJsonSchema,
12
15
  } from '../../../types/connector/index.js'
13
- import type { ConnectorInstanceId } from '../../../types/ids/index.js'
16
+ import type { ConnectorId, ConnectorInstanceId } from '../../../types/ids/index.js'
14
17
  import { SCOPE_ATTRIBUTE } from '../../../utils/log/types.js'
15
18
  import { type Logger, resolveLogger } from '../../../utils/logger.js'
16
19
 
@@ -35,11 +38,11 @@ export class MCPConnectorBridge {
35
38
  const tools: MCPToolDefinition[] = []
36
39
 
37
40
  for (const instance of instances) {
38
- const definition = this.manager.getRegistry().get(instance.connectorId)
39
- if (!definition) continue
41
+ const connectorId = this.manager.getInstanceConnectorId(instance.id)
42
+ const definition = this.manager.getInstanceDefinition(instance.id)
40
43
 
41
44
  for (const method of definition.methods) {
42
- const mcpTool = this.methodToMCPTool(instance, definition, method)
45
+ const mcpTool = this.methodToMCPTool(instance.id, connectorId, definition, method)
43
46
  tools.push(mcpTool)
44
47
  }
45
48
  }
@@ -51,7 +54,11 @@ export class MCPConnectorBridge {
51
54
  return tools
52
55
  }
53
56
 
54
- async callTool(name: string, args?: Record<string, unknown>): Promise<MCPToolResult> {
57
+ async callTool(
58
+ name: string,
59
+ args?: Record<string, unknown>,
60
+ options?: ConnectorOperationOptions,
61
+ ): Promise<MCPToolResult> {
55
62
  const mapping = this.mappings.find((m) => m.mcpToolName === name)
56
63
  if (!mapping) {
57
64
  return {
@@ -64,6 +71,7 @@ export class MCPConnectorBridge {
64
71
  instanceId: mapping.instanceId,
65
72
  method: mapping.methodName,
66
73
  input: args ?? {},
74
+ signal: options?.signal,
67
75
  })
68
76
 
69
77
  return this.connectorResultToMCPResult(result)
@@ -74,16 +82,17 @@ export class MCPConnectorBridge {
74
82
  }
75
83
 
76
84
  private methodToMCPTool(
77
- instance: ConnectorInstance,
85
+ instanceId: ConnectorInstanceId,
86
+ connectorId: ConnectorId,
78
87
  definition: ConnectorDefinition,
79
88
  method: ConnectorMethod,
80
89
  ): MCPToolDefinition {
81
- const mcpToolName = `${this.prefix}_${instance.connectorId}_${method.name}`
90
+ const mcpToolName = `${this.prefix}_${connectorId}_${method.name}`
82
91
 
83
92
  this.mappings.push({
84
93
  mcpToolName,
85
- connectorId: instance.connectorId,
86
- instanceId: instance.id,
94
+ connectorId,
95
+ instanceId,
87
96
  methodName: method.name,
88
97
  })
89
98
 
@@ -93,19 +102,18 @@ export class MCPConnectorBridge {
93
102
  name: mcpToolName,
94
103
  description: `[${definition.name}] ${method.description}`,
95
104
  inputSchema,
105
+ ...(method.outputSchema ? { outputSchema: this.zodToMCPOutputSchema(method) } : {}),
96
106
  }
97
107
  }
98
108
 
99
109
  private zodToMCPSchema(method: ConnectorMethod): MCPJsonSchema {
100
- try {
101
- const jsonSchema = zodToJsonSchema(method.inputSchema, { target: 'openApi3' })
102
- return {
103
- type: 'object',
104
- ...jsonSchema,
105
- } as MCPJsonSchema
106
- } catch {
107
- return { type: 'object' }
108
- }
110
+ return renderToolSchema(method.inputSchema) as MCPJsonSchema
111
+ }
112
+
113
+ private zodToMCPOutputSchema(method: ConnectorMethod): MCPValueJsonSchema {
114
+ return renderToolSchema(
115
+ method.outputSchema as NonNullable<ConnectorMethod['outputSchema']>,
116
+ ) as MCPValueJsonSchema
109
117
  }
110
118
 
111
119
  private connectorResultToMCPResult(result: ConnectorExecuteResult): MCPToolResult {
@@ -119,7 +127,7 @@ export class MCPConnectorBridge {
119
127
  }
120
128
 
121
129
  return {
122
- content: [{ type: 'text', text: result.error ?? 'Unknown error' }],
130
+ content: [{ type: 'text', text: connectorToolError(result) }],
123
131
  isError: true,
124
132
  }
125
133
  }
@@ -383,6 +383,9 @@ const MAPPING: {
383
383
  // from the RunEvent stream directly; promoting it to the SSE contract
384
384
  // needs a StreamEventType addition first.
385
385
  capability_warning: null,
386
+ // Counts describing a local storage repair are likewise a RunEvent host
387
+ // diagnostic, not yet part of the public SSE wire vocabulary.
388
+ message_history_repaired: null,
386
389
 
387
390
  agent_pending: {
388
391
  wire: 'agent.pending',