@namzu/sdk 48.3.1 → 50.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 (838) hide show
  1. package/CHANGELOG.md +542 -0
  2. package/README.md +137 -125
  3. package/dist/agents/QueryAgent.d.ts.map +1 -1
  4. package/dist/agents/QueryAgent.js +1 -0
  5. package/dist/agents/QueryAgent.js.map +1 -1
  6. package/dist/agents/examples/SupervisorAgent.d.ts.map +1 -1
  7. package/dist/agents/examples/SupervisorAgent.js +1 -0
  8. package/dist/agents/examples/SupervisorAgent.js.map +1 -1
  9. package/dist/agents/runAgent.d.ts +2 -0
  10. package/dist/agents/runAgent.d.ts.map +1 -1
  11. package/dist/agents/runAgent.js +1 -0
  12. package/dist/agents/runAgent.js.map +1 -1
  13. package/dist/authorization/shell-lexer.d.ts.map +1 -1
  14. package/dist/authorization/shell-lexer.js +16 -1
  15. package/dist/authorization/shell-lexer.js.map +1 -1
  16. package/dist/bridge/acp/permission.d.ts +8 -2
  17. package/dist/bridge/acp/permission.d.ts.map +1 -1
  18. package/dist/bridge/acp/permission.js +1 -0
  19. package/dist/bridge/acp/permission.js.map +1 -1
  20. package/dist/bridge/acp/server.d.ts +25 -1
  21. package/dist/bridge/acp/server.d.ts.map +1 -1
  22. package/dist/bridge/acp/server.js +205 -21
  23. package/dist/bridge/acp/server.js.map +1 -1
  24. package/dist/bridge/acp/tasks.d.ts +5 -0
  25. package/dist/bridge/acp/tasks.d.ts.map +1 -0
  26. package/dist/bridge/acp/tasks.js +19 -0
  27. package/dist/bridge/acp/tasks.js.map +1 -0
  28. package/dist/bridge/acp/update.d.ts.map +1 -1
  29. package/dist/bridge/acp/update.js +148 -13
  30. package/dist/bridge/acp/update.js.map +1 -1
  31. package/dist/config/registry.d.ts +2 -0
  32. package/dist/config/registry.d.ts.map +1 -1
  33. package/dist/config/registry.js +23 -3
  34. package/dist/config/registry.js.map +1 -1
  35. package/dist/config/runtime.d.ts +31 -31
  36. package/dist/connector/mcp/adapter.d.ts.map +1 -1
  37. package/dist/connector/mcp/adapter.js +11 -4
  38. package/dist/connector/mcp/adapter.js.map +1 -1
  39. package/dist/connector/mcp/client.d.ts.map +1 -1
  40. package/dist/connector/mcp/client.js +6 -3
  41. package/dist/connector/mcp/client.js.map +1 -1
  42. package/dist/connector/mcp/discovery.d.ts +9 -5
  43. package/dist/connector/mcp/discovery.d.ts.map +1 -1
  44. package/dist/connector/mcp/discovery.js +16 -8
  45. package/dist/connector/mcp/discovery.js.map +1 -1
  46. package/dist/connector/mcp/mcp-toolset.d.ts +3 -0
  47. package/dist/connector/mcp/mcp-toolset.d.ts.map +1 -1
  48. package/dist/connector/mcp/mcp-toolset.js +20 -2
  49. package/dist/connector/mcp/mcp-toolset.js.map +1 -1
  50. package/dist/connector/mcp/reconnect.d.ts +2 -0
  51. package/dist/connector/mcp/reconnect.d.ts.map +1 -1
  52. package/dist/connector/mcp/reconnect.js +36 -5
  53. package/dist/connector/mcp/reconnect.js.map +1 -1
  54. package/dist/constants/acp/index.d.ts +3 -0
  55. package/dist/constants/acp/index.d.ts.map +1 -1
  56. package/dist/constants/acp/index.js +3 -0
  57. package/dist/constants/acp/index.js.map +1 -1
  58. package/dist/contracts/a2a.d.ts +80 -80
  59. package/dist/contracts/schemas.d.ts +2 -2
  60. package/dist/contracts/session/schemas.d.ts +10 -10
  61. package/dist/manager/agent/lifecycle.d.ts +11 -0
  62. package/dist/manager/agent/lifecycle.d.ts.map +1 -1
  63. package/dist/manager/agent/lifecycle.js +178 -3
  64. package/dist/manager/agent/lifecycle.js.map +1 -1
  65. package/dist/manager/plan/lifecycle.d.ts +7 -8
  66. package/dist/manager/plan/lifecycle.d.ts.map +1 -1
  67. package/dist/manager/plan/lifecycle.js +7 -8
  68. package/dist/manager/plan/lifecycle.js.map +1 -1
  69. package/dist/manager/resident/consumption.d.ts +8 -8
  70. package/dist/manager/resident/learning-cycle.d.ts +2 -2
  71. package/dist/manager/resident/learning-observation.d.ts +12 -12
  72. package/dist/manager/resident/learning.d.ts +82 -82
  73. package/dist/manager/resident/outbox.d.ts +8 -8
  74. package/dist/manager/resident/proposal.d.ts +2 -2
  75. package/dist/manager/resident/store.d.ts +10 -10
  76. package/dist/manager/session/attribution.d.ts +1 -0
  77. package/dist/manager/session/attribution.d.ts.map +1 -1
  78. package/dist/manager/session/attribution.js +9 -1
  79. package/dist/manager/session/attribution.js.map +1 -1
  80. package/dist/manager/session/streamed-message-identity.d.ts +6 -0
  81. package/dist/manager/session/streamed-message-identity.d.ts.map +1 -0
  82. package/dist/manager/session/streamed-message-identity.js +14 -0
  83. package/dist/manager/session/streamed-message-identity.js.map +1 -0
  84. package/dist/manager/session/turn-recorder.d.ts.map +1 -1
  85. package/dist/manager/session/turn-recorder.js +4 -3
  86. package/dist/manager/session/turn-recorder.js.map +1 -1
  87. package/dist/pals/activity/causality.d.ts +23 -0
  88. package/dist/pals/activity/causality.d.ts.map +1 -0
  89. package/dist/pals/activity/causality.js +205 -0
  90. package/dist/pals/activity/causality.js.map +1 -0
  91. package/dist/pals/activity/projection.d.ts +5 -0
  92. package/dist/pals/activity/projection.d.ts.map +1 -0
  93. package/dist/pals/activity/projection.js +79 -0
  94. package/dist/pals/activity/projection.js.map +1 -0
  95. package/dist/pals/activity/source.d.ts +16 -0
  96. package/dist/pals/activity/source.d.ts.map +1 -0
  97. package/dist/pals/activity/source.js +235 -0
  98. package/dist/pals/activity/source.js.map +1 -0
  99. package/dist/pals/activity/subscription-policy.d.ts +38 -0
  100. package/dist/pals/activity/subscription-policy.d.ts.map +1 -0
  101. package/dist/pals/activity/subscription-policy.js +183 -0
  102. package/dist/pals/activity/subscription-policy.js.map +1 -0
  103. package/dist/pals/activity/subscription-schema.d.ts +353 -0
  104. package/dist/pals/activity/subscription-schema.d.ts.map +1 -0
  105. package/dist/pals/activity/subscription-schema.js +24 -0
  106. package/dist/pals/activity/subscription-schema.js.map +1 -0
  107. package/dist/pals/activity/subscription-store.d.ts +25 -0
  108. package/dist/pals/activity/subscription-store.d.ts.map +1 -0
  109. package/dist/pals/activity/subscription-store.js +152 -0
  110. package/dist/pals/activity/subscription-store.js.map +1 -0
  111. package/dist/pals/activity/subscription-types.d.ts +42 -0
  112. package/dist/pals/activity/subscription-types.d.ts.map +1 -0
  113. package/dist/pals/activity/subscription-types.js +2 -0
  114. package/dist/pals/activity/subscription-types.js.map +1 -0
  115. package/dist/pals/activity/subscriptions.d.ts +32 -0
  116. package/dist/pals/activity/subscriptions.d.ts.map +1 -0
  117. package/dist/pals/activity/subscriptions.js +151 -0
  118. package/dist/pals/activity/subscriptions.js.map +1 -0
  119. package/dist/pals/activity/types.d.ts +77 -0
  120. package/dist/pals/activity/types.d.ts.map +1 -0
  121. package/dist/pals/activity/types.js +2 -0
  122. package/dist/pals/activity/types.js.map +1 -0
  123. package/dist/pals/channels/ingress.d.ts +9 -0
  124. package/dist/pals/channels/ingress.d.ts.map +1 -0
  125. package/dist/pals/channels/ingress.js +131 -0
  126. package/dist/pals/channels/ingress.js.map +1 -0
  127. package/dist/pals/channels/routes.d.ts +20 -0
  128. package/dist/pals/channels/routes.d.ts.map +1 -0
  129. package/dist/pals/channels/routes.js +111 -0
  130. package/dist/pals/channels/routes.js.map +1 -0
  131. package/dist/pals/channels/routing.d.ts +37 -0
  132. package/dist/pals/channels/routing.d.ts.map +1 -0
  133. package/dist/pals/channels/routing.js +150 -0
  134. package/dist/pals/channels/routing.js.map +1 -0
  135. package/dist/pals/channels/schema.d.ts +234 -0
  136. package/dist/pals/channels/schema.d.ts.map +1 -0
  137. package/dist/pals/channels/schema.js +94 -0
  138. package/dist/pals/channels/schema.js.map +1 -0
  139. package/dist/pals/channels/types.d.ts +115 -0
  140. package/dist/pals/channels/types.d.ts.map +1 -0
  141. package/dist/pals/channels/types.js +2 -0
  142. package/dist/pals/channels/types.js.map +1 -0
  143. package/dist/pals/communication/broker.d.ts +8 -0
  144. package/dist/pals/communication/broker.d.ts.map +1 -0
  145. package/dist/pals/communication/broker.js +121 -0
  146. package/dist/pals/communication/broker.js.map +1 -0
  147. package/dist/pals/communication/dispatch.d.ts +4 -0
  148. package/dist/pals/communication/dispatch.d.ts.map +1 -0
  149. package/dist/pals/communication/dispatch.js +57 -0
  150. package/dist/pals/communication/dispatch.js.map +1 -0
  151. package/dist/pals/communication/inbound.d.ts +9 -0
  152. package/dist/pals/communication/inbound.d.ts.map +1 -0
  153. package/dist/pals/communication/inbound.js +155 -0
  154. package/dist/pals/communication/inbound.js.map +1 -0
  155. package/dist/pals/communication/ingress-dispatch.d.ts +5 -0
  156. package/dist/pals/communication/ingress-dispatch.d.ts.map +1 -0
  157. package/dist/pals/communication/ingress-dispatch.js +51 -0
  158. package/dist/pals/communication/ingress-dispatch.js.map +1 -0
  159. package/dist/pals/communication/ingress-inbound.d.ts +9 -0
  160. package/dist/pals/communication/ingress-inbound.d.ts.map +1 -0
  161. package/dist/pals/communication/ingress-inbound.js +222 -0
  162. package/dist/pals/communication/ingress-inbound.js.map +1 -0
  163. package/dist/pals/communication/ingress-schema.d.ts +7829 -0
  164. package/dist/pals/communication/ingress-schema.d.ts.map +1 -0
  165. package/dist/pals/communication/ingress-schema.js +479 -0
  166. package/dist/pals/communication/ingress-schema.js.map +1 -0
  167. package/dist/pals/communication/ingress-types.d.ts +187 -0
  168. package/dist/pals/communication/ingress-types.d.ts.map +1 -0
  169. package/dist/pals/communication/ingress-types.js +73 -0
  170. package/dist/pals/communication/ingress-types.js.map +1 -0
  171. package/dist/pals/communication/operator.d.ts +75 -0
  172. package/dist/pals/communication/operator.d.ts.map +1 -0
  173. package/dist/pals/communication/operator.js +217 -0
  174. package/dist/pals/communication/operator.js.map +1 -0
  175. package/dist/pals/communication/policy.d.ts +41 -0
  176. package/dist/pals/communication/policy.d.ts.map +1 -0
  177. package/dist/pals/communication/policy.js +138 -0
  178. package/dist/pals/communication/policy.js.map +1 -0
  179. package/dist/pals/communication/schema.d.ts +2000 -0
  180. package/dist/pals/communication/schema.d.ts.map +1 -0
  181. package/dist/pals/communication/schema.js +170 -0
  182. package/dist/pals/communication/schema.js.map +1 -0
  183. package/dist/pals/communication/store.d.ts +61 -0
  184. package/dist/pals/communication/store.d.ts.map +1 -0
  185. package/dist/pals/communication/store.js +450 -0
  186. package/dist/pals/communication/store.js.map +1 -0
  187. package/dist/pals/communication/tools.d.ts +23 -0
  188. package/dist/pals/communication/tools.d.ts.map +1 -0
  189. package/dist/pals/communication/tools.js +107 -0
  190. package/dist/pals/communication/tools.js.map +1 -0
  191. package/dist/pals/communication/types.d.ts +168 -0
  192. package/dist/pals/communication/types.d.ts.map +1 -0
  193. package/dist/pals/communication/types.js +24 -0
  194. package/dist/pals/communication/types.js.map +1 -0
  195. package/dist/pals/communication/verify.d.ts +22 -0
  196. package/dist/pals/communication/verify.d.ts.map +1 -0
  197. package/dist/pals/communication/verify.js +142 -0
  198. package/dist/pals/communication/verify.js.map +1 -0
  199. package/dist/pals/lifecycle.d.ts +37 -0
  200. package/dist/pals/lifecycle.d.ts.map +1 -0
  201. package/dist/pals/lifecycle.js +22 -0
  202. package/dist/pals/lifecycle.js.map +1 -0
  203. package/dist/pals/prompt.d.ts +30 -0
  204. package/dist/pals/prompt.d.ts.map +1 -0
  205. package/dist/pals/prompt.js +65 -0
  206. package/dist/pals/prompt.js.map +1 -0
  207. package/dist/pals/reference-images.d.ts +44 -0
  208. package/dist/pals/reference-images.d.ts.map +1 -0
  209. package/dist/pals/reference-images.js +248 -0
  210. package/dist/pals/reference-images.js.map +1 -0
  211. package/dist/pals/runtime.d.ts +46 -0
  212. package/dist/pals/runtime.d.ts.map +1 -0
  213. package/dist/pals/runtime.js +624 -0
  214. package/dist/pals/runtime.js.map +1 -0
  215. package/dist/pals/store.d.ts +26 -0
  216. package/dist/pals/store.d.ts.map +1 -0
  217. package/dist/pals/store.js +334 -0
  218. package/dist/pals/store.js.map +1 -0
  219. package/dist/pals/types.d.ts +145 -0
  220. package/dist/pals/types.d.ts.map +1 -0
  221. package/dist/pals/types.js +2 -0
  222. package/dist/pals/types.js.map +1 -0
  223. package/dist/peers/envelope.js +1 -1
  224. package/dist/peers/envelope.js.map +1 -1
  225. package/dist/peers/protocol.d.ts +83 -83
  226. package/dist/peers/record.d.ts +10 -10
  227. package/dist/plugin/lifecycle.d.ts +14 -10
  228. package/dist/plugin/lifecycle.d.ts.map +1 -1
  229. package/dist/plugin/lifecycle.js +178 -41
  230. package/dist/plugin/lifecycle.js.map +1 -1
  231. package/dist/plugin/shell-hook.d.ts.map +1 -1
  232. package/dist/plugin/shell-hook.js +7 -2
  233. package/dist/plugin/shell-hook.js.map +1 -1
  234. package/dist/process/kill-tree.d.ts.map +1 -1
  235. package/dist/process/kill-tree.js +9 -1
  236. package/dist/process/kill-tree.js.map +1 -1
  237. package/dist/prompt/resident-learning.js +2 -2
  238. package/dist/prompt/resident-learning.js.map +1 -1
  239. package/dist/prompt/resident-step.d.ts +2 -2
  240. package/dist/prompt/resident-step.js +4 -4
  241. package/dist/prompt/resident-step.js.map +1 -1
  242. package/dist/provider/errors.d.ts +19 -0
  243. package/dist/provider/errors.d.ts.map +1 -1
  244. package/dist/provider/errors.js +123 -2
  245. package/dist/provider/errors.js.map +1 -1
  246. package/dist/public-runtime.d.ts +43 -15
  247. package/dist/public-runtime.d.ts.map +1 -1
  248. package/dist/public-runtime.js +37 -9
  249. package/dist/public-runtime.js.map +1 -1
  250. package/dist/public-tools.d.ts +8 -3
  251. package/dist/public-tools.d.ts.map +1 -1
  252. package/dist/public-tools.js +8 -3
  253. package/dist/public-tools.js.map +1 -1
  254. package/dist/public-types.d.ts +27 -7
  255. package/dist/public-types.d.ts.map +1 -1
  256. package/dist/registry/tool/presentation.d.ts +1 -0
  257. package/dist/registry/tool/presentation.d.ts.map +1 -1
  258. package/dist/registry/tool/presentation.js +9 -7
  259. package/dist/registry/tool/presentation.js.map +1 -1
  260. package/dist/registry/tool/screen.d.ts.map +1 -1
  261. package/dist/registry/tool/screen.js +33 -2
  262. package/dist/registry/tool/screen.js.map +1 -1
  263. package/dist/runtime/harness-session/index.d.ts +5 -0
  264. package/dist/runtime/harness-session/index.d.ts.map +1 -0
  265. package/dist/runtime/harness-session/index.js +928 -0
  266. package/dist/runtime/harness-session/index.js.map +1 -0
  267. package/dist/runtime/harness-session/journal.d.ts +37 -0
  268. package/dist/runtime/harness-session/journal.d.ts.map +1 -0
  269. package/dist/runtime/harness-session/journal.js +177 -0
  270. package/dist/runtime/harness-session/journal.js.map +1 -0
  271. package/dist/runtime/harness-session/saved-view.d.ts +8 -0
  272. package/dist/runtime/harness-session/saved-view.d.ts.map +1 -0
  273. package/dist/runtime/harness-session/saved-view.js +112 -0
  274. package/dist/runtime/harness-session/saved-view.js.map +1 -0
  275. package/dist/runtime/jobs/awaited-jobs.d.ts +2 -1
  276. package/dist/runtime/jobs/awaited-jobs.d.ts.map +1 -1
  277. package/dist/runtime/jobs/awaited-jobs.js +2 -1
  278. package/dist/runtime/jobs/awaited-jobs.js.map +1 -1
  279. package/dist/runtime/jobs/registry.d.ts +56 -1
  280. package/dist/runtime/jobs/registry.d.ts.map +1 -1
  281. package/dist/runtime/jobs/registry.js +377 -39
  282. package/dist/runtime/jobs/registry.js.map +1 -1
  283. package/dist/runtime/query/abandon-turn.d.ts +12 -1
  284. package/dist/runtime/query/abandon-turn.d.ts.map +1 -1
  285. package/dist/runtime/query/abandon-turn.js +3 -1
  286. package/dist/runtime/query/abandon-turn.js.map +1 -1
  287. package/dist/runtime/query/checkpoint.d.ts +4 -0
  288. package/dist/runtime/query/checkpoint.d.ts.map +1 -1
  289. package/dist/runtime/query/checkpoint.js +10 -0
  290. package/dist/runtime/query/checkpoint.js.map +1 -1
  291. package/dist/runtime/query/durable-inbound.d.ts +5 -0
  292. package/dist/runtime/query/durable-inbound.d.ts.map +1 -0
  293. package/dist/runtime/query/durable-inbound.js +89 -0
  294. package/dist/runtime/query/durable-inbound.js.map +1 -0
  295. package/dist/runtime/query/events.d.ts +4 -0
  296. package/dist/runtime/query/events.d.ts.map +1 -1
  297. package/dist/runtime/query/events.js +22 -5
  298. package/dist/runtime/query/events.js.map +1 -1
  299. package/dist/runtime/query/executor/tool-call-admission.d.ts +5 -1
  300. package/dist/runtime/query/executor/tool-call-admission.d.ts.map +1 -1
  301. package/dist/runtime/query/executor/tool-call-admission.js +85 -13
  302. package/dist/runtime/query/executor/tool-call-admission.js.map +1 -1
  303. package/dist/runtime/query/executor.d.ts +41 -18
  304. package/dist/runtime/query/executor.d.ts.map +1 -1
  305. package/dist/runtime/query/executor.js +227 -114
  306. package/dist/runtime/query/executor.js.map +1 -1
  307. package/dist/runtime/query/index.d.ts +9 -0
  308. package/dist/runtime/query/index.d.ts.map +1 -1
  309. package/dist/runtime/query/index.js +41 -5
  310. package/dist/runtime/query/index.js.map +1 -1
  311. package/dist/runtime/query/iteration/index.d.ts +18 -6
  312. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  313. package/dist/runtime/query/iteration/index.js +176 -75
  314. package/dist/runtime/query/iteration/index.js.map +1 -1
  315. package/dist/runtime/query/iteration/outstanding-work.d.ts +9 -5
  316. package/dist/runtime/query/iteration/outstanding-work.d.ts.map +1 -1
  317. package/dist/runtime/query/iteration/outstanding-work.js +63 -6
  318. package/dist/runtime/query/iteration/outstanding-work.js.map +1 -1
  319. package/dist/runtime/query/iteration/phases/context.d.ts +8 -0
  320. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  321. package/dist/runtime/query/iteration/phases/context.js.map +1 -1
  322. package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
  323. package/dist/runtime/query/iteration/phases/tool-review.js +106 -17
  324. package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
  325. package/dist/runtime/query/iteration/step-shaping.d.ts +2 -0
  326. package/dist/runtime/query/iteration/step-shaping.d.ts.map +1 -1
  327. package/dist/runtime/query/iteration/step-shaping.js +5 -1
  328. package/dist/runtime/query/iteration/step-shaping.js.map +1 -1
  329. package/dist/runtime/query/observation-context.d.ts +2 -2
  330. package/dist/runtime/query/observation-context.d.ts.map +1 -1
  331. package/dist/runtime/query/observation-context.js +20 -13
  332. package/dist/runtime/query/observation-context.js.map +1 -1
  333. package/dist/runtime/query/prepare-turn.js +2 -2
  334. package/dist/runtime/query/prepare-turn.js.map +1 -1
  335. package/dist/runtime/query/prompt-cache.d.ts +1 -0
  336. package/dist/runtime/query/prompt-cache.d.ts.map +1 -1
  337. package/dist/runtime/query/prompt-cache.js +2 -0
  338. package/dist/runtime/query/prompt-cache.js.map +1 -1
  339. package/dist/runtime/query/prompt.d.ts +2 -0
  340. package/dist/runtime/query/prompt.d.ts.map +1 -1
  341. package/dist/runtime/query/prompt.js +23 -1
  342. package/dist/runtime/query/prompt.js.map +1 -1
  343. package/dist/runtime/query/repeat-call.d.ts +12 -3
  344. package/dist/runtime/query/repeat-call.d.ts.map +1 -1
  345. package/dist/runtime/query/repeat-call.js +33 -10
  346. package/dist/runtime/query/repeat-call.js.map +1 -1
  347. package/dist/runtime/query/resume-pending.d.ts +5 -6
  348. package/dist/runtime/query/resume-pending.d.ts.map +1 -1
  349. package/dist/runtime/query/resume-pending.js +30 -3
  350. package/dist/runtime/query/resume-pending.js.map +1 -1
  351. package/dist/runtime/query/resume-session.js +1 -1
  352. package/dist/runtime/query/resume-session.js.map +1 -1
  353. package/dist/runtime/query/review-policy.d.ts +8 -1
  354. package/dist/runtime/query/review-policy.d.ts.map +1 -1
  355. package/dist/runtime/query/review-policy.js +6 -0
  356. package/dist/runtime/query/review-policy.js.map +1 -1
  357. package/dist/runtime/query/saved-presentation.d.ts +13 -0
  358. package/dist/runtime/query/saved-presentation.d.ts.map +1 -0
  359. package/dist/runtime/query/saved-presentation.js +63 -0
  360. package/dist/runtime/query/saved-presentation.js.map +1 -0
  361. package/dist/runtime/query/steering.d.ts +6 -9
  362. package/dist/runtime/query/steering.d.ts.map +1 -1
  363. package/dist/runtime/query/steering.js.map +1 -1
  364. package/dist/runtime/query/tool-executions.d.ts +7 -3
  365. package/dist/runtime/query/tool-executions.d.ts.map +1 -1
  366. package/dist/runtime/query/tool-executions.js +89 -9
  367. package/dist/runtime/query/tool-executions.js.map +1 -1
  368. package/dist/runtime/query/tooling.d.ts +3 -1
  369. package/dist/runtime/query/tooling.d.ts.map +1 -1
  370. package/dist/runtime/query/tooling.js +3 -0
  371. package/dist/runtime/query/tooling.js.map +1 -1
  372. package/dist/scheduler/completion-inbox.d.ts +25 -1
  373. package/dist/scheduler/completion-inbox.d.ts.map +1 -1
  374. package/dist/scheduler/completion-inbox.js +102 -8
  375. package/dist/scheduler/completion-inbox.js.map +1 -1
  376. package/dist/scheduler/delegating.d.ts.map +1 -1
  377. package/dist/scheduler/delegating.js +5 -0
  378. package/dist/scheduler/delegating.js.map +1 -1
  379. package/dist/scheduler/local.d.ts.map +1 -1
  380. package/dist/scheduler/local.js +2 -0
  381. package/dist/scheduler/local.js.map +1 -1
  382. package/dist/session/summary/materialize.d.ts +10 -6
  383. package/dist/session/summary/materialize.d.ts.map +1 -1
  384. package/dist/session/summary/materialize.js +41 -8
  385. package/dist/session/summary/materialize.js.map +1 -1
  386. package/dist/store/budget/ledger.d.ts +9 -0
  387. package/dist/store/budget/ledger.d.ts.map +1 -1
  388. package/dist/store/budget/ledger.js +58 -6
  389. package/dist/store/budget/ledger.js.map +1 -1
  390. package/dist/store/evidence/index-page.d.ts +12 -12
  391. package/dist/store/evidence/source-text.d.ts +4 -4
  392. package/dist/store/index.d.ts +1 -0
  393. package/dist/store/index.d.ts.map +1 -1
  394. package/dist/store/index.js +1 -0
  395. package/dist/store/index.js.map +1 -1
  396. package/dist/store/memory/disk.d.ts +7 -2
  397. package/dist/store/memory/disk.d.ts.map +1 -1
  398. package/dist/store/memory/disk.js +58 -5
  399. package/dist/store/memory/disk.js.map +1 -1
  400. package/dist/store/memory/index.d.ts +9 -0
  401. package/dist/store/memory/index.d.ts.map +1 -1
  402. package/dist/store/memory/index.js +43 -5
  403. package/dist/store/memory/index.js.map +1 -1
  404. package/dist/store/memory/markdown.d.ts +7 -2
  405. package/dist/store/memory/markdown.d.ts.map +1 -1
  406. package/dist/store/memory/markdown.js +33 -0
  407. package/dist/store/memory/markdown.js.map +1 -1
  408. package/dist/store/memory/memory.d.ts +7 -2
  409. package/dist/store/memory/memory.d.ts.map +1 -1
  410. package/dist/store/memory/memory.js +34 -0
  411. package/dist/store/memory/memory.js.map +1 -1
  412. package/dist/store/memory/revision.d.ts +16 -0
  413. package/dist/store/memory/revision.d.ts.map +1 -0
  414. package/dist/store/memory/revision.js +144 -0
  415. package/dist/store/memory/revision.js.map +1 -0
  416. package/dist/store/session/disk.d.ts +9 -4
  417. package/dist/store/session/disk.d.ts.map +1 -1
  418. package/dist/store/session/disk.js +57 -11
  419. package/dist/store/session/disk.js.map +1 -1
  420. package/dist/store/session/memory.d.ts +5 -3
  421. package/dist/store/session/memory.d.ts.map +1 -1
  422. package/dist/store/session/memory.js +24 -7
  423. package/dist/store/session/memory.js.map +1 -1
  424. package/dist/store/session-log/core.d.ts +26 -6
  425. package/dist/store/session-log/core.d.ts.map +1 -1
  426. package/dist/store/session-log/core.js +61 -8
  427. package/dist/store/session-log/core.js.map +1 -1
  428. package/dist/store/session-log/disk.d.ts +2 -2
  429. package/dist/store/session-log/disk.d.ts.map +1 -1
  430. package/dist/store/session-log/disk.js +1 -0
  431. package/dist/store/session-log/disk.js.map +1 -1
  432. package/dist/store/session-log/fold.d.ts +7 -0
  433. package/dist/store/session-log/fold.d.ts.map +1 -1
  434. package/dist/store/session-log/fold.js +21 -0
  435. package/dist/store/session-log/fold.js.map +1 -1
  436. package/dist/store/session-log/index.d.ts +5 -3
  437. package/dist/store/session-log/index.d.ts.map +1 -1
  438. package/dist/store/session-log/index.js +3 -1
  439. package/dist/store/session-log/index.js.map +1 -1
  440. package/dist/store/session-log/memory.d.ts +1 -1
  441. package/dist/store/session-log/memory.d.ts.map +1 -1
  442. package/dist/store/session-log/memory.js +1 -0
  443. package/dist/store/session-log/memory.js.map +1 -1
  444. package/dist/store/session-log/spill.d.ts +10 -3
  445. package/dist/store/session-log/spill.d.ts.map +1 -1
  446. package/dist/store/session-log/spill.js +70 -5
  447. package/dist/store/session-log/spill.js.map +1 -1
  448. package/dist/store/session-log/structured-result.d.ts +21 -0
  449. package/dist/store/session-log/structured-result.d.ts.map +1 -0
  450. package/dist/store/session-log/structured-result.js +67 -0
  451. package/dist/store/session-log/structured-result.js.map +1 -0
  452. package/dist/store/task/disk.d.ts +11 -0
  453. package/dist/store/task/disk.d.ts.map +1 -1
  454. package/dist/store/task/disk.js +41 -2
  455. package/dist/store/task/disk.js.map +1 -1
  456. package/dist/store/task/memory.d.ts.map +1 -1
  457. package/dist/store/task/memory.js +15 -3
  458. package/dist/store/task/memory.js.map +1 -1
  459. package/dist/tools/admit-facts.d.ts +13 -0
  460. package/dist/tools/admit-facts.d.ts.map +1 -0
  461. package/dist/tools/admit-facts.js +142 -0
  462. package/dist/tools/admit-facts.js.map +1 -0
  463. package/dist/tools/builtins/bash.d.ts +4 -1
  464. package/dist/tools/builtins/bash.d.ts.map +1 -1
  465. package/dist/tools/builtins/bash.js +108 -22
  466. package/dist/tools/builtins/bash.js.map +1 -1
  467. package/dist/tools/builtins/browser.d.ts +10 -10
  468. package/dist/tools/builtins/computer-use.d.ts +90 -90
  469. package/dist/tools/builtins/edit.d.ts +17 -0
  470. package/dist/tools/builtins/edit.d.ts.map +1 -1
  471. package/dist/tools/builtins/edit.js +34 -0
  472. package/dist/tools/builtins/edit.js.map +1 -1
  473. package/dist/tools/builtins/file-write-result.d.ts.map +1 -1
  474. package/dist/tools/builtins/file-write-result.js +13 -0
  475. package/dist/tools/builtins/file-write-result.js.map +1 -1
  476. package/dist/tools/builtins/glob.d.ts.map +1 -1
  477. package/dist/tools/builtins/glob.js +12 -0
  478. package/dist/tools/builtins/glob.js.map +1 -1
  479. package/dist/tools/builtins/grep.d.ts.map +1 -1
  480. package/dist/tools/builtins/grep.js +14 -0
  481. package/dist/tools/builtins/grep.js.map +1 -1
  482. package/dist/tools/builtins/index.d.ts +2 -0
  483. package/dist/tools/builtins/index.d.ts.map +1 -1
  484. package/dist/tools/builtins/index.js +1 -0
  485. package/dist/tools/builtins/index.js.map +1 -1
  486. package/dist/tools/builtins/job.d.ts.map +1 -1
  487. package/dist/tools/builtins/job.js +4 -1
  488. package/dist/tools/builtins/job.js.map +1 -1
  489. package/dist/tools/builtins/lsp.d.ts +2 -2
  490. package/dist/tools/builtins/read-file.d.ts.map +1 -1
  491. package/dist/tools/builtins/read-file.js +49 -0
  492. package/dist/tools/builtins/read-file.js.map +1 -1
  493. package/dist/tools/builtins/view-image.d.ts +24 -0
  494. package/dist/tools/builtins/view-image.d.ts.map +1 -0
  495. package/dist/tools/builtins/view-image.js +385 -0
  496. package/dist/tools/builtins/view-image.js.map +1 -0
  497. package/dist/tools/builtins/wait-for-job-bounds.d.ts +8 -4
  498. package/dist/tools/builtins/wait-for-job-bounds.d.ts.map +1 -1
  499. package/dist/tools/builtins/wait-for-job-bounds.js +43 -8
  500. package/dist/tools/builtins/wait-for-job-bounds.js.map +1 -1
  501. package/dist/tools/builtins/wait-for-job.d.ts +3 -0
  502. package/dist/tools/builtins/wait-for-job.d.ts.map +1 -1
  503. package/dist/tools/builtins/wait-for-job.js +127 -15
  504. package/dist/tools/builtins/wait-for-job.js.map +1 -1
  505. package/dist/tools/builtins/write-file.d.ts.map +1 -1
  506. package/dist/tools/builtins/write-file.js +1 -0
  507. package/dist/tools/builtins/write-file.js.map +1 -1
  508. package/dist/tools/command-shell.d.ts +37 -2
  509. package/dist/tools/command-shell.d.ts.map +1 -1
  510. package/dist/tools/command-shell.js +100 -3
  511. package/dist/tools/command-shell.js.map +1 -1
  512. package/dist/tools/coordinator/agent.d.ts +9 -19
  513. package/dist/tools/coordinator/agent.d.ts.map +1 -1
  514. package/dist/tools/coordinator/agent.js.map +1 -1
  515. package/dist/tools/coordinator/index.d.ts.map +1 -1
  516. package/dist/tools/coordinator/index.js +127 -67
  517. package/dist/tools/coordinator/index.js.map +1 -1
  518. package/dist/tools/coordinator/wait-with-idle-bound.d.ts +2 -0
  519. package/dist/tools/coordinator/wait-with-idle-bound.d.ts.map +1 -1
  520. package/dist/tools/coordinator/wait-with-idle-bound.js +1 -1
  521. package/dist/tools/coordinator/wait-with-idle-bound.js.map +1 -1
  522. package/dist/tools/defineTool.d.ts.map +1 -1
  523. package/dist/tools/defineTool.js +4 -0
  524. package/dist/tools/defineTool.js.map +1 -1
  525. package/dist/tools/failure-facts.d.ts +8 -0
  526. package/dist/tools/failure-facts.d.ts.map +1 -0
  527. package/dist/tools/failure-facts.js +24 -0
  528. package/dist/tools/failure-facts.js.map +1 -0
  529. package/dist/tools/host-output.d.ts +24 -0
  530. package/dist/tools/host-output.d.ts.map +1 -0
  531. package/dist/tools/host-output.js +117 -0
  532. package/dist/tools/host-output.js.map +1 -0
  533. package/dist/tools/memory/delete.d.ts.map +1 -1
  534. package/dist/tools/memory/delete.js +38 -3
  535. package/dist/tools/memory/delete.js.map +1 -1
  536. package/dist/tools/memory/read.d.ts.map +1 -1
  537. package/dist/tools/memory/read.js +38 -2
  538. package/dist/tools/memory/read.js.map +1 -1
  539. package/dist/tools/memory/search.d.ts.map +1 -1
  540. package/dist/tools/memory/search.js +38 -7
  541. package/dist/tools/memory/search.js.map +1 -1
  542. package/dist/tools/memory/update.d.ts.map +1 -1
  543. package/dist/tools/memory/update.js +30 -3
  544. package/dist/tools/memory/update.js.map +1 -1
  545. package/dist/tools/oem-code-pages.d.ts +8 -0
  546. package/dist/tools/oem-code-pages.d.ts.map +1 -0
  547. package/dist/tools/oem-code-pages.js +23 -0
  548. package/dist/tools/oem-code-pages.js.map +1 -0
  549. package/dist/tools/schedules/schedule-tool.d.ts.map +1 -1
  550. package/dist/tools/schedules/schedule-tool.js +35 -6
  551. package/dist/tools/schedules/schedule-tool.js.map +1 -1
  552. package/dist/tools/schedules/types.d.ts +23 -3
  553. package/dist/tools/schedules/types.d.ts.map +1 -1
  554. package/dist/tools/task/list.d.ts.map +1 -1
  555. package/dist/tools/task/list.js +14 -6
  556. package/dist/tools/task/list.js.map +1 -1
  557. package/dist/tools/task/present.d.ts.map +1 -1
  558. package/dist/tools/task/present.js +26 -6
  559. package/dist/tools/task/present.js.map +1 -1
  560. package/dist/tools/task/update.d.ts.map +1 -1
  561. package/dist/tools/task/update.js +12 -5
  562. package/dist/tools/task/update.js.map +1 -1
  563. package/dist/tools/text-window.d.ts +19 -0
  564. package/dist/tools/text-window.d.ts.map +1 -0
  565. package/dist/tools/text-window.js +83 -0
  566. package/dist/tools/text-window.js.map +1 -0
  567. package/dist/toolsets/manager.d.ts +24 -0
  568. package/dist/toolsets/manager.d.ts.map +1 -1
  569. package/dist/toolsets/manager.js +105 -2
  570. package/dist/toolsets/manager.js.map +1 -1
  571. package/dist/turn/memory-recall.d.ts +2 -0
  572. package/dist/turn/memory-recall.d.ts.map +1 -1
  573. package/dist/turn/memory-recall.js +3 -1
  574. package/dist/turn/memory-recall.js.map +1 -1
  575. package/dist/types/acp/index.d.ts +137 -1
  576. package/dist/types/acp/index.d.ts.map +1 -1
  577. package/dist/types/agent/base.d.ts +3 -0
  578. package/dist/types/agent/base.d.ts.map +1 -1
  579. package/dist/types/agent/manager.d.ts +8 -23
  580. package/dist/types/agent/manager.d.ts.map +1 -1
  581. package/dist/types/agent/scheduler.d.ts +10 -1
  582. package/dist/types/agent/scheduler.d.ts.map +1 -1
  583. package/dist/types/agent/task.d.ts +4 -0
  584. package/dist/types/agent/task.d.ts.map +1 -1
  585. package/dist/types/authorization/index.d.ts +30 -30
  586. package/dist/types/connector/mcp.d.ts +7 -0
  587. package/dist/types/connector/mcp.d.ts.map +1 -1
  588. package/dist/types/errors/catalog.d.ts.map +1 -1
  589. package/dist/types/errors/catalog.js +4 -2
  590. package/dist/types/errors/catalog.js.map +1 -1
  591. package/dist/types/harness/schema.d.ts +354 -0
  592. package/dist/types/harness/schema.d.ts.map +1 -0
  593. package/dist/types/harness/schema.js +203 -0
  594. package/dist/types/harness/schema.js.map +1 -0
  595. package/dist/types/harness/session.d.ts +278 -0
  596. package/dist/types/harness/session.d.ts.map +1 -0
  597. package/dist/types/harness/session.js +2 -0
  598. package/dist/types/harness/session.js.map +1 -0
  599. package/dist/types/hitl/index.d.ts +12 -0
  600. package/dist/types/hitl/index.d.ts.map +1 -1
  601. package/dist/types/hitl/index.js.map +1 -1
  602. package/dist/types/job/index.d.ts +47 -0
  603. package/dist/types/job/index.d.ts.map +1 -0
  604. package/dist/types/job/index.js +2 -0
  605. package/dist/types/job/index.js.map +1 -0
  606. package/dist/types/memory/index.d.ts +29 -0
  607. package/dist/types/memory/index.d.ts.map +1 -1
  608. package/dist/types/memory/index.js +6 -0
  609. package/dist/types/memory/index.js.map +1 -1
  610. package/dist/types/message/inbound-delivery.d.ts +44 -0
  611. package/dist/types/message/inbound-delivery.d.ts.map +1 -0
  612. package/dist/types/message/inbound-delivery.js +14 -0
  613. package/dist/types/message/inbound-delivery.js.map +1 -0
  614. package/dist/types/message/index.d.ts +4 -1
  615. package/dist/types/message/index.d.ts.map +1 -1
  616. package/dist/types/message/index.js +5 -1
  617. package/dist/types/message/index.js.map +1 -1
  618. package/dist/types/plugin/index.d.ts +18 -8
  619. package/dist/types/plugin/index.d.ts.map +1 -1
  620. package/dist/types/plugin/index.js +5 -2
  621. package/dist/types/plugin/index.js.map +1 -1
  622. package/dist/types/sandbox/index.d.ts +39 -2
  623. package/dist/types/sandbox/index.d.ts.map +1 -1
  624. package/dist/types/sandbox/index.js.map +1 -1
  625. package/dist/types/session/checkpoint.d.ts +24 -17
  626. package/dist/types/session/checkpoint.d.ts.map +1 -1
  627. package/dist/types/session/checkpoint.js +1 -0
  628. package/dist/types/session/checkpoint.js.map +1 -1
  629. package/dist/types/session/events.d.ts +23 -1
  630. package/dist/types/session/events.d.ts.map +1 -1
  631. package/dist/types/session/events.js.map +1 -1
  632. package/dist/types/session/records.d.ts +1514 -565
  633. package/dist/types/session/records.d.ts.map +1 -1
  634. package/dist/types/session/records.js +89 -1
  635. package/dist/types/session/records.js.map +1 -1
  636. package/dist/types/session/step.d.ts +2 -0
  637. package/dist/types/session/step.d.ts.map +1 -1
  638. package/dist/types/session/step.js.map +1 -1
  639. package/dist/types/session/store.d.ts +19 -10
  640. package/dist/types/session/store.d.ts.map +1 -1
  641. package/dist/types/session/tool-execution.d.ts +6 -0
  642. package/dist/types/session/tool-execution.d.ts.map +1 -1
  643. package/dist/types/structured-output/index.d.ts +12 -2
  644. package/dist/types/structured-output/index.d.ts.map +1 -1
  645. package/dist/types/summary/ref.d.ts +3 -1
  646. package/dist/types/summary/ref.d.ts.map +1 -1
  647. package/dist/types/tool/index.d.ts +32 -4
  648. package/dist/types/tool/index.d.ts.map +1 -1
  649. package/dist/types/tool/index.js.map +1 -1
  650. package/dist/types/tool/presentation.d.ts +106 -0
  651. package/dist/types/tool/presentation.d.ts.map +1 -1
  652. package/dist/utils/json-snapshot.d.ts +6 -2
  653. package/dist/utils/json-snapshot.d.ts.map +1 -1
  654. package/dist/utils/json-snapshot.js +19 -9
  655. package/dist/utils/json-snapshot.js.map +1 -1
  656. package/dist/utils/structured-result-json.d.ts +5 -0
  657. package/dist/utils/structured-result-json.d.ts.map +1 -0
  658. package/dist/utils/structured-result-json.js +10 -0
  659. package/dist/utils/structured-result-json.js.map +1 -0
  660. package/package.json +1 -1
  661. package/src/agents/QueryAgent.ts +1 -0
  662. package/src/agents/examples/SupervisorAgent.ts +1 -0
  663. package/src/agents/runAgent.ts +3 -0
  664. package/src/authorization/shell-lexer.ts +16 -1
  665. package/src/bridge/acp/permission.ts +17 -3
  666. package/src/bridge/acp/server.ts +271 -25
  667. package/src/bridge/acp/tasks.ts +23 -0
  668. package/src/bridge/acp/update.ts +167 -13
  669. package/src/config/registry.ts +24 -3
  670. package/src/connector/mcp/adapter.ts +16 -4
  671. package/src/connector/mcp/client.ts +6 -2
  672. package/src/connector/mcp/discovery.ts +29 -8
  673. package/src/connector/mcp/mcp-toolset.ts +25 -4
  674. package/src/connector/mcp/reconnect.ts +34 -4
  675. package/src/constants/acp/index.ts +4 -0
  676. package/src/manager/agent/lifecycle.ts +230 -3
  677. package/src/manager/plan/lifecycle.ts +11 -9
  678. package/src/manager/session/attribution.ts +12 -2
  679. package/src/manager/session/streamed-message-identity.ts +21 -0
  680. package/src/manager/session/turn-recorder.ts +4 -3
  681. package/src/pals/activity/causality.ts +261 -0
  682. package/src/pals/activity/projection.ts +89 -0
  683. package/src/pals/activity/source.ts +240 -0
  684. package/src/pals/activity/subscription-policy.ts +230 -0
  685. package/src/pals/activity/subscription-schema.ts +27 -0
  686. package/src/pals/activity/subscription-store.ts +172 -0
  687. package/src/pals/activity/subscription-types.ts +48 -0
  688. package/src/pals/activity/subscriptions.ts +209 -0
  689. package/src/pals/activity/types.ts +108 -0
  690. package/src/pals/channels/ingress.ts +153 -0
  691. package/src/pals/channels/routes.ts +118 -0
  692. package/src/pals/channels/routing.ts +197 -0
  693. package/src/pals/channels/schema.ts +108 -0
  694. package/src/pals/channels/types.ts +156 -0
  695. package/src/pals/communication/broker.ts +131 -0
  696. package/src/pals/communication/dispatch.ts +66 -0
  697. package/src/pals/communication/inbound.ts +193 -0
  698. package/src/pals/communication/ingress-dispatch.ts +63 -0
  699. package/src/pals/communication/ingress-inbound.ts +269 -0
  700. package/src/pals/communication/ingress-schema.ts +526 -0
  701. package/src/pals/communication/ingress-types.ts +336 -0
  702. package/src/pals/communication/operator.ts +315 -0
  703. package/src/pals/communication/policy.ts +174 -0
  704. package/src/pals/communication/schema.ts +173 -0
  705. package/src/pals/communication/store.ts +577 -0
  706. package/src/pals/communication/tools.ts +139 -0
  707. package/src/pals/communication/types.ts +227 -0
  708. package/src/pals/communication/verify.ts +220 -0
  709. package/src/pals/lifecycle.ts +54 -0
  710. package/src/pals/prompt.ts +101 -0
  711. package/src/pals/reference-images.ts +322 -0
  712. package/src/pals/runtime.ts +670 -0
  713. package/src/pals/store.ts +369 -0
  714. package/src/pals/types.ts +157 -0
  715. package/src/peers/envelope.ts +1 -1
  716. package/src/plugin/lifecycle.ts +217 -46
  717. package/src/plugin/shell-hook.ts +8 -2
  718. package/src/process/kill-tree.ts +10 -1
  719. package/src/prompt/resident-learning.ts +2 -2
  720. package/src/prompt/resident-step.ts +4 -4
  721. package/src/provider/errors.ts +135 -2
  722. package/src/public-runtime.ts +119 -12
  723. package/src/public-tools.ts +13 -1
  724. package/src/public-types.ts +69 -7
  725. package/src/registry/tool/presentation.ts +9 -4
  726. package/src/registry/tool/screen.ts +34 -2
  727. package/src/runtime/harness-session/index.ts +1125 -0
  728. package/src/runtime/harness-session/journal.ts +209 -0
  729. package/src/runtime/harness-session/saved-view.ts +122 -0
  730. package/src/runtime/jobs/awaited-jobs.ts +2 -1
  731. package/src/runtime/jobs/registry.ts +423 -50
  732. package/src/runtime/query/abandon-turn.ts +18 -2
  733. package/src/runtime/query/checkpoint.ts +11 -0
  734. package/src/runtime/query/durable-inbound.ts +101 -0
  735. package/src/runtime/query/events.ts +22 -5
  736. package/src/runtime/query/executor/tool-call-admission.ts +125 -32
  737. package/src/runtime/query/executor.ts +316 -130
  738. package/src/runtime/query/index.ts +48 -5
  739. package/src/runtime/query/iteration/index.ts +253 -114
  740. package/src/runtime/query/iteration/outstanding-work.ts +57 -7
  741. package/src/runtime/query/iteration/phases/context.ts +8 -0
  742. package/src/runtime/query/iteration/phases/tool-review.ts +124 -22
  743. package/src/runtime/query/iteration/step-shaping.ts +9 -1
  744. package/src/runtime/query/observation-context.ts +22 -16
  745. package/src/runtime/query/prepare-turn.ts +2 -2
  746. package/src/runtime/query/prompt-cache.ts +3 -0
  747. package/src/runtime/query/prompt.ts +32 -1
  748. package/src/runtime/query/repeat-call.ts +40 -10
  749. package/src/runtime/query/resume-pending.ts +60 -7
  750. package/src/runtime/query/resume-session.ts +1 -1
  751. package/src/runtime/query/review-policy.ts +23 -2
  752. package/src/runtime/query/saved-presentation.ts +70 -0
  753. package/src/runtime/query/steering.ts +6 -9
  754. package/src/runtime/query/tool-executions.ts +108 -9
  755. package/src/runtime/query/tooling.ts +6 -1
  756. package/src/scheduler/completion-inbox.ts +108 -7
  757. package/src/scheduler/delegating.ts +5 -0
  758. package/src/scheduler/local.ts +2 -0
  759. package/src/session/summary/materialize.ts +51 -9
  760. package/src/store/budget/ledger.ts +60 -5
  761. package/src/store/index.ts +1 -0
  762. package/src/store/memory/disk.ts +82 -7
  763. package/src/store/memory/index.ts +66 -7
  764. package/src/store/memory/markdown.ts +54 -2
  765. package/src/store/memory/memory.ts +52 -2
  766. package/src/store/memory/revision.ts +158 -0
  767. package/src/store/session/disk.ts +77 -10
  768. package/src/store/session/memory.ts +32 -7
  769. package/src/store/session-log/core.ts +118 -11
  770. package/src/store/session-log/disk.ts +9 -2
  771. package/src/store/session-log/fold.ts +22 -0
  772. package/src/store/session-log/index.ts +5 -0
  773. package/src/store/session-log/memory.ts +2 -1
  774. package/src/store/session-log/spill.ts +89 -6
  775. package/src/store/session-log/structured-result.ts +96 -0
  776. package/src/store/task/disk.ts +46 -2
  777. package/src/store/task/memory.ts +13 -3
  778. package/src/tools/admit-facts.ts +145 -0
  779. package/src/tools/builtins/bash.ts +132 -24
  780. package/src/tools/builtins/edit.ts +42 -0
  781. package/src/tools/builtins/file-write-result.ts +14 -0
  782. package/src/tools/builtins/glob.ts +12 -0
  783. package/src/tools/builtins/grep.ts +14 -0
  784. package/src/tools/builtins/index.ts +2 -0
  785. package/src/tools/builtins/job.ts +4 -1
  786. package/src/tools/builtins/read-file.ts +57 -0
  787. package/src/tools/builtins/view-image.ts +409 -0
  788. package/src/tools/builtins/wait-for-job-bounds.ts +45 -7
  789. package/src/tools/builtins/wait-for-job.ts +159 -36
  790. package/src/tools/builtins/write-file.ts +4 -2
  791. package/src/tools/command-shell.ts +132 -5
  792. package/src/tools/coordinator/agent.ts +9 -19
  793. package/src/tools/coordinator/index.ts +150 -75
  794. package/src/tools/coordinator/wait-with-idle-bound.ts +3 -1
  795. package/src/tools/defineTool.ts +4 -0
  796. package/src/tools/failure-facts.ts +24 -0
  797. package/src/tools/host-output.ts +136 -0
  798. package/src/tools/memory/delete.ts +33 -3
  799. package/src/tools/memory/read.ts +35 -2
  800. package/src/tools/memory/search.ts +38 -7
  801. package/src/tools/memory/update.ts +28 -3
  802. package/src/tools/oem-code-pages.ts +22 -0
  803. package/src/tools/schedules/schedule-tool.ts +38 -5
  804. package/src/tools/schedules/types.ts +23 -3
  805. package/src/tools/task/list.ts +15 -7
  806. package/src/tools/task/present.ts +37 -7
  807. package/src/tools/task/update.ts +12 -5
  808. package/src/tools/text-window.ts +87 -0
  809. package/src/toolsets/manager.ts +132 -2
  810. package/src/turn/memory-recall.ts +5 -1
  811. package/src/types/acp/index.ts +150 -4
  812. package/src/types/agent/base.ts +3 -0
  813. package/src/types/agent/manager.ts +8 -23
  814. package/src/types/agent/scheduler.ts +10 -1
  815. package/src/types/agent/task.ts +4 -0
  816. package/src/types/connector/mcp.ts +7 -0
  817. package/src/types/errors/catalog.ts +4 -2
  818. package/src/types/harness/schema.ts +203 -0
  819. package/src/types/harness/session.ts +306 -0
  820. package/src/types/hitl/index.ts +17 -1
  821. package/src/types/job/index.ts +42 -0
  822. package/src/types/memory/index.ts +43 -0
  823. package/src/types/message/inbound-delivery.ts +63 -0
  824. package/src/types/message/index.ts +8 -1
  825. package/src/types/plugin/index.ts +11 -6
  826. package/src/types/sandbox/index.ts +46 -0
  827. package/src/types/session/checkpoint.ts +4 -1
  828. package/src/types/session/events.ts +23 -1
  829. package/src/types/session/records.ts +114 -2
  830. package/src/types/session/step.ts +2 -0
  831. package/src/types/session/store.ts +23 -9
  832. package/src/types/session/tool-execution.ts +6 -0
  833. package/src/types/structured-output/index.ts +13 -2
  834. package/src/types/summary/ref.ts +3 -1
  835. package/src/types/tool/index.ts +39 -5
  836. package/src/types/tool/presentation.ts +121 -0
  837. package/src/utils/json-snapshot.ts +26 -9
  838. package/src/utils/structured-result-json.ts +10 -0
@@ -34,13 +34,21 @@ const STOP_REASONS: Readonly<Record<string, AcpStopReason>> = {
34
34
  stop_condition: 'end_turn',
35
35
  max_iterations: 'max_turns',
36
36
  max_tokens: 'max_turns',
37
+ token_budget: 'max_turns',
38
+ cost_limit: 'max_turns',
39
+ cost_unmeasurable: 'error',
40
+ timeout: 'error',
37
41
  cancelled: 'cancelled',
38
42
  canceled: 'cancelled',
39
43
  aborted: 'cancelled',
40
44
  paused: 'cancelled',
41
45
  guardrail_blocked: 'refused',
46
+ input_guardrail: 'refused',
47
+ output_guardrail: 'refused',
48
+ step_refused: 'refused',
42
49
  plan_rejected: 'refused',
43
50
  answer_rejected: 'refused',
51
+ structured_output_failed: 'error',
44
52
  error: 'error',
45
53
  provider_error: 'error',
46
54
  }
@@ -50,6 +58,28 @@ export function toAcpStopReason(reason: StopReason | string | undefined): AcpSto
50
58
  return STOP_REASONS[reason] ?? 'error'
51
59
  }
52
60
 
61
+ function messageIdentity(event: { messageId?: string; turnId?: string; iteration?: number }) {
62
+ return {
63
+ ...(event.messageId === undefined ? {} : { messageId: event.messageId }),
64
+ ...(event.turnId === undefined ? {} : { turnId: event.turnId }),
65
+ ...(event.iteration === undefined ? {} : { iteration: event.iteration }),
66
+ }
67
+ }
68
+
69
+ function thoughtIdentity(event: {
70
+ messageId?: string
71
+ turnId?: string
72
+ iteration?: number
73
+ blockIndex?: number
74
+ }) {
75
+ return {
76
+ ...messageIdentity(event),
77
+ ...(event.messageId === undefined || event.blockIndex === undefined
78
+ ? {}
79
+ : { blockId: `${event.messageId}:${event.blockIndex}` }),
80
+ }
81
+ }
82
+
53
83
  /**
54
84
  * One session event as a session update, or `null`.
55
85
  *
@@ -62,10 +92,48 @@ export function toAcpSessionUpdate(
62
92
  ): AcpSessionUpdate | null {
63
93
  switch (event.type) {
64
94
  case 'text_delta':
65
- return { kind: 'agent_message_chunk', text: event.text }
95
+ return {
96
+ kind: 'agent_message_chunk',
97
+ text: event.text,
98
+ ...messageIdentity(event),
99
+ ...(event.textPart
100
+ ? {
101
+ textPart: {
102
+ id: event.textPart.id,
103
+ ...(event.textPart.phase === undefined ? {} : { phase: event.textPart.phase }),
104
+ },
105
+ ...(event.textPart.phase === undefined ? {} : { phase: event.textPart.phase }),
106
+ }
107
+ : {}),
108
+ }
109
+
110
+ case 'message_completed':
111
+ return {
112
+ kind: 'agent_message',
113
+ status: 'completed',
114
+ ...messageIdentity(event),
115
+ stopReason: event.stopReason,
116
+ ...(event.content === undefined ? {} : { content: event.content }),
117
+ ...(event.textParts
118
+ ? {
119
+ textParts: event.textParts.map((part) => ({
120
+ id: part.id,
121
+ text: part.text,
122
+ ...(part.phase === undefined ? {} : { phase: part.phase }),
123
+ })),
124
+ }
125
+ : {}),
126
+ }
127
+
128
+ case 'reasoning_started':
129
+ return { kind: 'agent_thought', status: 'pending', ...thoughtIdentity(event) }
66
130
 
67
131
  case 'reasoning_delta':
68
- return { kind: 'agent_thought_chunk', text: event.text }
132
+ return { kind: 'agent_thought_chunk', text: event.text, ...thoughtIdentity(event) }
133
+
134
+ case 'reasoning_completed':
135
+ // Readable text arrived as deltas. Never copy signed or opaque replay material.
136
+ return { kind: 'agent_thought', status: 'completed', ...thoughtIdentity(event) }
69
137
 
70
138
  case 'tool_executing':
71
139
  return {
@@ -76,28 +144,114 @@ export function toAcpSessionUpdate(
76
144
  view: presenter.presentCall(event.toolName, event.input),
77
145
  }
78
146
 
147
+ case 'tool_progress':
148
+ return {
149
+ kind: 'tool_call',
150
+ toolCallId: event.toolUseId,
151
+ title: event.toolName,
152
+ status: 'pending',
153
+ view: { kind: 'generic', label: event.toolName },
154
+ progress: {
155
+ message: event.message,
156
+ ...(event.fraction === undefined ? {} : { fraction: event.fraction }),
157
+ },
158
+ }
159
+
79
160
  case 'tool_completed':
80
161
  return {
81
162
  kind: 'tool_call',
82
163
  toolCallId: event.toolUseId,
83
164
  title: event.toolName,
84
- // `isError`, the field the event actually carries. The INPUT is
85
- // not on this event — only the result is — so the presenter is
86
- // asked with `undefined`, and a tool whose `presentResult` needs
87
- // its input falls back to the generic view rather than being
88
- // handed a guess at what it was called with.
165
+ // The runtime already presented the result with its real input and
166
+ // data. Older producers may only carry text; keep that fallback.
89
167
  status: event.isError === true ? 'failed' : 'completed',
90
- view: presenter.presentResult(event.toolName, undefined, {
91
- success: event.isError !== true,
92
- output: typeof event.result === 'string' ? event.result : String(event.result ?? ''),
93
- }),
168
+ ...(event.durationMs === undefined ? {} : { durationMs: event.durationMs }),
169
+ ...(event.facts === undefined ? {} : { facts: event.facts }),
170
+ view:
171
+ event.presentation ??
172
+ presenter.presentResult(event.toolName, undefined, {
173
+ success: event.isError !== true,
174
+ output: typeof event.result === 'string' ? event.result : String(event.result ?? ''),
175
+ }),
176
+ }
177
+
178
+ case 'hosted_tool': {
179
+ // This is provider-executed activity, not a local tool request. Reuse
180
+ // the peer's existing display-only tool row without exposing a raw
181
+ // provider item or asking the host to execute or approve anything.
182
+ const page = Boolean(event.tool.url && !event.tool.query)
183
+ const title = page ? 'Web fetch' : 'Web search'
184
+ const target = (page ? event.tool.url : event.tool.query)?.replace(/\s+/g, ' ').trim()
185
+ const label =
186
+ event.tool.status === 'running'
187
+ ? ''
188
+ : `${title}${target ? `: ${target.slice(0, 200)}` : ''}${
189
+ event.tool.status === 'failed'
190
+ ? ' failed'
191
+ : !page &&
192
+ Number.isSafeInteger(event.tool.results) &&
193
+ (event.tool.results ?? -1) >= 0
194
+ ? ` · ${event.tool.results} ${event.tool.results === 1 ? 'source' : 'sources'}`
195
+ : ''
196
+ }`
197
+ return {
198
+ kind: 'tool_call',
199
+ toolCallId: `provider-hosted-web-search:${event.iteration}:${event.tool.id}`,
200
+ title,
201
+ status:
202
+ event.tool.status === 'running'
203
+ ? 'pending'
204
+ : event.tool.status === 'completed'
205
+ ? 'completed'
206
+ : 'failed',
207
+ view: { kind: 'generic', label, presentation: 'activity' },
208
+ }
209
+ }
210
+
211
+ case 'provider_retry':
212
+ return {
213
+ kind: 'provider_retry',
214
+ attempt: event.attempt,
215
+ maxRetries: event.maxRetries,
216
+ delayMs: event.delayMs,
217
+ ...(event.status === undefined ? {} : { status: event.status }),
218
+ serverDirected: event.serverDirected,
219
+ ...(event.turnId === undefined ? {} : { turnId: event.turnId }),
94
220
  }
95
221
 
96
222
  case 'turn_completed':
97
- return { kind: 'turn_ended', stopReason: toAcpStopReason(event.stopReason) }
223
+ return {
224
+ kind: 'turn_ended',
225
+ stopReason: toAcpStopReason(event.stopReason),
226
+ ...(event.turnId === undefined ? {} : { turnId: event.turnId }),
227
+ ...(event.settlement?.resultMessageId === undefined
228
+ ? {}
229
+ : { messageId: event.settlement.resultMessageId }),
230
+ ...(event.stopReason === undefined ? {} : { reason: event.stopReason }),
231
+ ...(event.result === undefined ? {} : { result: event.result }),
232
+ }
233
+
234
+ case 'turn_paused':
235
+ return {
236
+ kind: 'turn_ended',
237
+ stopReason: 'cancelled',
238
+ reason: 'paused',
239
+ // A checkpointed provider fault is still a failure the operator
240
+ // needs to see. Ordinary review/handoff pauses remain non-errors.
241
+ ...(event.failure || event.providerError
242
+ ? { error: event.failure?.message || event.reason }
243
+ : {}),
244
+ ...(event.turnId === undefined ? {} : { turnId: event.turnId }),
245
+ }
98
246
 
99
247
  case 'turn_failed':
100
- return { kind: 'turn_ended', stopReason: 'error' }
248
+ return {
249
+ kind: 'turn_ended',
250
+ stopReason: 'error',
251
+ reason: 'error',
252
+ error: event.error,
253
+ ...(event.turnId === undefined ? {} : { turnId: event.turnId }),
254
+ }
101
255
 
102
256
  default:
103
257
  // Everything else: iteration boundaries, token accounting, plan and
@@ -48,6 +48,8 @@ export interface ConfigScope<T> {
48
48
  update(patch: Partial<T> | Record<string, unknown>): T
49
49
  /** Called after a successful update. Returns an unsubscribe. */
50
50
  watch(listener: (next: T, previous: T) => void): () => void
51
+ /** Release this registration, including its watchers, while retaining saved overrides. */
52
+ dispose(): void
51
53
  }
52
54
 
53
55
  export class ConfigNamespaceCollisionError extends RegistryCollisionError {
@@ -149,14 +151,31 @@ export class ConfigRegistry {
149
151
  watchers: new Set(),
150
152
  }
151
153
  this.entries.set(namespace, entry as Entry<unknown>)
154
+ const assertOwned = (): void => {
155
+ if (this.entries.get(namespace) !== (entry as Entry<unknown>)) {
156
+ throw new Error(`Configuration namespace "${namespace}" is no longer registered.`)
157
+ }
158
+ }
152
159
 
153
160
  return {
154
- get: () => entry.resolved,
155
- update: (patch) => this.applyUpdate(namespace, entry, patch),
161
+ get: () => {
162
+ assertOwned()
163
+ return entry.resolved
164
+ },
165
+ update: (patch) => {
166
+ assertOwned()
167
+ return this.applyUpdate(namespace, entry, patch)
168
+ },
156
169
  watch: (listener) => {
170
+ assertOwned()
157
171
  entry.watchers.add(listener)
158
172
  return () => entry.watchers.delete(listener)
159
173
  },
174
+ dispose: () => {
175
+ if (this.entries.get(namespace) !== (entry as Entry<unknown>)) return
176
+ this.entries.delete(namespace)
177
+ entry.watchers.clear()
178
+ },
160
179
  }
161
180
  }
162
181
 
@@ -178,9 +197,11 @@ export class ConfigRegistry {
178
197
  const next = entry.schema.parse({ ...entry.base, ...candidateOverride })
179
198
 
180
199
  const previous = entry.resolved
200
+ const storeKey = this.storeKey(namespace)
201
+ this.store.save(storeKey, candidateOverride)
202
+ this.persisted[storeKey] = candidateOverride
181
203
  entry.override = candidateOverride
182
204
  entry.resolved = next
183
- this.store.save(this.storeKey(namespace), candidateOverride)
184
205
 
185
206
  for (const watcher of entry.watchers) {
186
207
  try {
@@ -81,7 +81,7 @@ function objectToZod(rawSchema: Record<string, unknown>, depth: number): z.ZodTy
81
81
 
82
82
  const properties = schema.properties as Record<string, unknown> | undefined
83
83
  if (!properties || Object.keys(properties).length === 0) {
84
- return closeOrOpen(z.object({}), schema)
84
+ return closeOrOpen(z.object({}), schema, depth)
85
85
  }
86
86
  if (depth >= MAX_CONVERSION_DEPTH) return z.record(z.unknown())
87
87
 
@@ -93,7 +93,7 @@ function objectToZod(rawSchema: Record<string, unknown>, depth: number): z.ZodTy
93
93
  shape[key] = required.has(key) ? field : field.optional()
94
94
  }
95
95
 
96
- return closeOrOpen(z.object(shape), schema)
96
+ return closeOrOpen(z.object(shape), schema, depth)
97
97
  }
98
98
 
99
99
  /**
@@ -105,9 +105,21 @@ function objectToZod(rawSchema: Record<string, unknown>, depth: number): z.ZodTy
105
105
  * silently drops undeclared keys rather than rejecting them, so the
106
106
  * contract shown to the model tightens without turning a server's
107
107
  * incomplete schema into a hard validation failure.
108
+ * A schema-valued additionalProperties explicitly declares a dictionary:
109
+ * preserve those keys and validate each value through the same converter.
108
110
  */
109
- function closeOrOpen(obj: z.ZodObject<z.ZodRawShape>, schema: Record<string, unknown>): z.ZodType {
110
- return schema.additionalProperties === true ? obj.passthrough() : obj
111
+ function closeOrOpen(
112
+ obj: z.ZodObject<z.ZodRawShape>,
113
+ schema: Record<string, unknown>,
114
+ depth: number,
115
+ ): z.ZodType {
116
+ const additional = schema.additionalProperties
117
+ if (additional === true) return obj.passthrough()
118
+ if (additional !== null && typeof additional === 'object' && !Array.isArray(additional))
119
+ return obj.catchall(
120
+ depth >= MAX_CONVERSION_DEPTH ? z.unknown() : jsonSchemaPropertyToZod(additional, depth + 1),
121
+ )
122
+ return obj
111
123
  }
112
124
 
113
125
  function jsonSchemaPropertyToZod(prop: unknown, depth = 0): z.ZodType {
@@ -38,6 +38,7 @@ import {
38
38
  type McpEraProbeAnswer,
39
39
  type McpEraResolution,
40
40
  classifyModernHttpFailure,
41
+ createMcpEraCache,
41
42
  defaultMcpEraCache,
42
43
  mcpEraCacheKey,
43
44
  resolveMcpEra,
@@ -275,7 +276,8 @@ export class MCPClient {
275
276
  ),
276
277
  this.requestTimeoutMs,
277
278
  )
278
- this.eraCache = config.eraCache ?? defaultMcpEraCache
279
+ this.eraCache =
280
+ config.eraCache ?? (config.transportFactory ? createMcpEraCache() : defaultMcpEraCache)
279
281
  this.eraCacheKey = mcpEraCacheKey(config.transport)
280
282
  this.id = config.id ?? generateMCPClientId()
281
283
  // Built BEFORE the transport, not after: `createTransport` threads
@@ -285,7 +287,9 @@ export class MCPClient {
285
287
  [SCOPE_ATTRIBUTE]: 'connector/mcp',
286
288
  [NAMZU.SERVER_ID]: config.serverName,
287
289
  })
288
- this.transport = this.createTransport(config.transport)
290
+ this.transport = config.transportFactory
291
+ ? config.transportFactory()
292
+ : this.createTransport(config.transport)
289
293
  }
290
294
 
291
295
  async connect(): Promise<MCPInitializeResult> {
@@ -55,10 +55,10 @@ export class MCPToolDiscovery {
55
55
  private log: Logger
56
56
  private options: MCPToolDiscoveryOptions
57
57
  /**
58
- * Last admitted tool set per SERVER, for drift detection.
58
+ * Last admitted tool set per owner identity, for drift detection.
59
59
  *
60
- * Keyed by server name rather than client id, and the difference is the
61
- * whole point. A client id is minted per connection, so on the path a
60
+ * Plain discovery uses the server name; plugin discovery supplies its
61
+ * qualified source id. A client id is minted per connection, so on the path a
62
62
  * real MCP server actually takes — a plugin enabling, connecting, and
63
63
  * being disabled again — every discovery was the first one that id had
64
64
  * ever seen, and drift could not fire however many times the server
@@ -119,9 +119,15 @@ export class MCPToolDiscovery {
119
119
  return results
120
120
  }
121
121
 
122
- async discoverFrom(client: MCPClient): Promise<MCPDiscoveredTool[]> {
122
+ async discoverFrom(
123
+ client: MCPClient,
124
+ options?: { readonly isCurrent?: () => boolean },
125
+ ): Promise<MCPDiscoveredTool[]> {
123
126
  const state = client.getState()
124
127
  const advertised = await client.listTools()
128
+ // A newer listing can finish before this one. Do not let the older
129
+ // generation replace the baseline or emit a drift event after that.
130
+ if (options?.isCurrent?.() === false) return []
125
131
 
126
132
  // The boundary. Without it the REMOTE side decides what enters the
127
133
  // agent's registry, which inverts least privilege: a server could
@@ -144,7 +150,7 @@ export class MCPToolDiscovery {
144
150
  })
145
151
  }
146
152
 
147
- this.detectDrift(client.id, state.serverName, admitted)
153
+ this.detectDrift(state.serverName, client.id, state.serverName, admitted)
148
154
 
149
155
  return admitted.map((tool) => ({
150
156
  tool,
@@ -153,6 +159,16 @@ export class MCPToolDiscovery {
153
159
  }))
154
160
  }
155
161
 
162
+ /** Record the exact already-admitted snapshot another owner mounted. */
163
+ recordAdmittedTools(
164
+ identity: string,
165
+ clientId: string,
166
+ serverName: string,
167
+ admitted: readonly MCPToolDefinition[],
168
+ ): void {
169
+ this.detectDrift(identity, clientId, serverName, [...admitted])
170
+ }
171
+
156
172
  /**
157
173
  * The prompts a server publishes, through the same admission gate its
158
174
  * tools go through.
@@ -251,9 +267,14 @@ export class MCPToolDiscovery {
251
267
  })
252
268
  }
253
269
 
254
- private detectDrift(clientId: string, serverName: string, admitted: MCPToolDefinition[]): void {
255
- const previous = this.lastSeen.get(serverName)
256
- this.lastSeen.set(serverName, admitted)
270
+ private detectDrift(
271
+ identity: string,
272
+ clientId: string,
273
+ serverName: string,
274
+ admitted: MCPToolDefinition[],
275
+ ): void {
276
+ const previous = this.lastSeen.get(identity)
277
+ this.lastSeen.set(identity, admitted)
257
278
  if (!previous) return
258
279
 
259
280
  const drift = diffTools(previous, admitted)
@@ -5,7 +5,11 @@ import { NAMZU } from '../../constants/telemetry/index.js'
5
5
  import { ToolsetConflictError } from '../../toolsets/combine.js'
6
6
  import type { Toolset, ToolsetAvailability } from '../../toolsets/types.js'
7
7
  import { deferred } from '../../toolsets/wrappers.js'
8
- import type { MCPResource, MCPServerCapabilities } from '../../types/connector/index.js'
8
+ import type {
9
+ MCPResource,
10
+ MCPServerCapabilities,
11
+ MCPToolDefinition,
12
+ } from '../../types/connector/index.js'
9
13
  import type { ToolContext, ToolDefinition, ToolResult } from '../../types/tool/index.js'
10
14
  import type { ToolSource } from '../../types/toolset/index.js'
11
15
  import { toErrorMessage } from '../../utils/error.js'
@@ -103,6 +107,8 @@ export interface MCPToolsetOptions {
103
107
  * added and removed names apply at the next refresh boundary.
104
108
  */
105
109
  readonly onDrift?: (event: { serverName: string; clientId: string; drift: MCPToolDrift }) => void
110
+ /** The exact admitted server listing processed at construction and each committed refresh. */
111
+ readonly onToolsAdmitted?: (tools: readonly MCPToolDefinition[]) => void
106
112
  /** Current tool, prompt and resource names refused by this server's policy. */
107
113
  readonly onRefused?: (event: {
108
114
  serverName: string
@@ -320,14 +326,20 @@ export async function mcpToolset(
320
326
  let promptDefs: ToolDefinition[] = []
321
327
  let mainTools: ToolDefinition[] = []
322
328
  let closed = false
329
+ let toolRefreshGeneration = 0
330
+ let admittedToolSnapshot: readonly MCPToolDefinition[] = []
323
331
  const listeners = new Set<() => void>()
324
332
 
325
333
  function rebuildMain(): void {
326
334
  mainTools = [...toolDefs, ...promptDefs]
327
335
  }
328
336
 
329
- async function refreshTools(): Promise<void> {
330
- const discovered = await discovery.discoverFrom(client)
337
+ async function refreshTools(): Promise<boolean> {
338
+ const generation = ++toolRefreshGeneration
339
+ const discovered = await discovery.discoverFrom(client, {
340
+ isCurrent: () => !closed && generation === toolRefreshGeneration,
341
+ })
342
+ if (closed || generation !== toolRefreshGeneration) return false
331
343
  const previous = new Map(toolDefs.map((definition) => [definition.name, definition]))
332
344
  toolDefs = discovered.map((d) => {
333
345
  const name = mcpToolsetName(serverName, d.tool.name)
@@ -346,6 +358,8 @@ export async function mcpToolset(
346
358
  if (!discovered.some((entry) => entry.tool.name === name)) heldToolNames.delete(name)
347
359
  }
348
360
  rebuildMain()
361
+ admittedToolSnapshot = discovered.map((entry) => entry.tool)
362
+ return true
349
363
  }
350
364
 
351
365
  async function refreshPrompts(): Promise<void> {
@@ -414,9 +428,12 @@ export async function mcpToolset(
414
428
  }
415
429
  }
416
430
  assertUnique()
431
+ options.onToolsAdmitted?.(admittedToolSnapshot)
417
432
 
418
433
  const notify = (): void => {
434
+ if (closed) return
419
435
  assertUnique()
436
+ options.onToolsAdmitted?.(admittedToolSnapshot)
420
437
  for (const listener of listeners) listener()
421
438
  }
422
439
  const onChange = (listener: () => void): (() => void) => {
@@ -449,7 +466,11 @@ export async function mcpToolset(
449
466
  if (closed) return
450
467
  if (method === 'notifications/tools/list_changed') {
451
468
  if (!currentCapabilities()?.tools?.listChanged) return
452
- void refreshTools().then(notify).catch(onRefreshFailure('tools'))
469
+ void refreshTools()
470
+ .then((updated) => {
471
+ if (updated) notify()
472
+ })
473
+ .catch(onRefreshFailure('tools'))
453
474
  } else if (method === 'notifications/prompts/list_changed') {
454
475
  if (!currentCapabilities()?.prompts?.listChanged) return
455
476
  void refreshPrompts().then(notify).catch(onRefreshFailure('prompts'))
@@ -83,6 +83,7 @@ export class MCPReconnectSupervisor {
83
83
  private stopped = false
84
84
  private inFlight = false
85
85
  private timer?: ReturnType<typeof setTimeout>
86
+ private finishWait?: () => void
86
87
 
87
88
  constructor(
88
89
  private readonly client: MCPClient,
@@ -106,7 +107,7 @@ export class MCPReconnectSupervisor {
106
107
 
107
108
  /** Begin watching. Idempotent. */
108
109
  start(): void {
109
- if (!this.policy().enabled || this.unsubscribe || this.stopped) return
110
+ if (this.stopped || this.unsubscribe || !this.policy().enabled) return
110
111
  this.unsubscribe = this.client.onLifecycle((event) => {
111
112
  if (event.type !== 'mcp_client_disconnected' && event.type !== 'mcp_client_error') return
112
113
  void this.recover()
@@ -124,8 +125,9 @@ export class MCPReconnectSupervisor {
124
125
  this.stopped = true
125
126
  this.unsubscribe?.()
126
127
  this.unsubscribe = undefined
127
- if (this.timer) clearTimeout(this.timer)
128
- this.timer = undefined
128
+ // Clearing the timer alone strands recover() inside an unresolved
129
+ // promise. Settle it so the stopped check can retire the loop.
130
+ this.finishWait?.()
129
131
  }
130
132
 
131
133
  private async recover(): Promise<void> {
@@ -154,9 +156,22 @@ export class MCPReconnectSupervisor {
154
156
 
155
157
  try {
156
158
  await this.client.connect()
159
+ // A host may stop the supervisor and dispose its live policy
160
+ // while connect() is still settling. Do not read that policy or
161
+ // publish a reconnect callback after teardown. A successful
162
+ // late connect also needs a second close: the host may have
163
+ // finished its own disconnect before this connect settled.
164
+ if (this.stopped) {
165
+ this.closeLateConnection()
166
+ return
167
+ }
157
168
  await this.policy().onReconnected?.()
158
169
  return
159
170
  } catch {
171
+ if (this.stopped) {
172
+ this.closeLateConnection()
173
+ return
174
+ }
160
175
  // Deliberately swallowed: a failed attempt is the normal
161
176
  // case here and the client has already logged and emitted
162
177
  // its own error. Re-raising would surface a routine retry
@@ -164,15 +179,30 @@ export class MCPReconnectSupervisor {
164
179
  delay = Math.min(delay * 2, this.policy().maxDelayMs)
165
180
  }
166
181
  }
182
+ if (this.stopped) return
167
183
  this.policy().onGaveUp?.(this.policy().maxAttempts)
168
184
  } finally {
169
185
  this.inFlight = false
170
186
  }
171
187
  }
172
188
 
189
+ private closeLateConnection(): void {
190
+ // A failed handshake can leave an opened transport, too. Stop is
191
+ // synchronous and the host's disable path has its own bounded close;
192
+ // keep this late cleanup best-effort without delaying recovery exit.
193
+ void this.client.disconnect().catch(() => {})
194
+ }
195
+
173
196
  private wait(ms: number): Promise<void> {
174
197
  return new Promise((resolve) => {
175
- this.timer = setTimeout(resolve, ms)
198
+ const finish = () => {
199
+ if (this.timer) clearTimeout(this.timer)
200
+ this.timer = undefined
201
+ if (this.finishWait === finish) this.finishWait = undefined
202
+ resolve()
203
+ }
204
+ this.finishWait = finish
205
+ this.timer = setTimeout(finish, ms)
176
206
  })
177
207
  }
178
208
  }
@@ -49,6 +49,7 @@ export type AcpMethod = (typeof ACP_METHODS)[keyof typeof ACP_METHODS]
49
49
  */
50
50
  export const ACP_CLIENT_NOTIFICATIONS = {
51
51
  SESSION_UPDATE: 'session/update',
52
+ TASK_UPDATE: 'namzu/tasks/update',
52
53
  } as const
53
54
 
54
55
  /**
@@ -102,3 +103,6 @@ export const ACP_PERMISSION_CAPABILITY = 'permission'
102
103
  * nobody is looking at.
103
104
  */
104
105
  export const ACP_FILESYSTEM_CAPABILITY = 'fs'
106
+
107
+ /** Optional Namzu planning notifications, negotiated separately from core ACP. */
108
+ export const ACP_TASK_CAPABILITY = 'namzu/tasks'