@namzu/sdk 45.1.0 → 48.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 (767) hide show
  1. package/CHANGELOG.md +436 -8
  2. package/README.md +7 -8
  3. package/dist/advisory/history.d.ts.map +1 -1
  4. package/dist/advisory/history.js +21 -1
  5. package/dist/advisory/history.js.map +1 -1
  6. package/dist/advisory/index.d.ts +1 -1
  7. package/dist/advisory/index.d.ts.map +1 -1
  8. package/dist/advisory/index.js +1 -1
  9. package/dist/advisory/index.js.map +1 -1
  10. package/dist/advisory/registry.d.ts +17 -0
  11. package/dist/advisory/registry.d.ts.map +1 -1
  12. package/dist/advisory/registry.js +26 -0
  13. package/dist/advisory/registry.js.map +1 -1
  14. package/dist/agents/PipelineAgent.d.ts +2 -46
  15. package/dist/agents/PipelineAgent.d.ts.map +1 -1
  16. package/dist/agents/PipelineAgent.js +2 -242
  17. package/dist/agents/PipelineAgent.js.map +1 -1
  18. package/dist/agents/QueryAgent.d.ts +21 -0
  19. package/dist/agents/QueryAgent.d.ts.map +1 -0
  20. package/dist/agents/QueryAgent.js +214 -0
  21. package/dist/agents/QueryAgent.js.map +1 -0
  22. package/dist/agents/ReactiveAgent.d.ts +4 -16
  23. package/dist/agents/ReactiveAgent.d.ts.map +1 -1
  24. package/dist/agents/ReactiveAgent.js +4 -183
  25. package/dist/agents/ReactiveAgent.js.map +1 -1
  26. package/dist/agents/RouterAgent.d.ts +2 -20
  27. package/dist/agents/RouterAgent.d.ts.map +1 -1
  28. package/dist/agents/RouterAgent.js +2 -266
  29. package/dist/agents/RouterAgent.js.map +1 -1
  30. package/dist/agents/SupervisorAgent.d.ts +3 -43
  31. package/dist/agents/SupervisorAgent.d.ts.map +1 -1
  32. package/dist/agents/SupervisorAgent.js +3 -418
  33. package/dist/agents/SupervisorAgent.js.map +1 -1
  34. package/dist/agents/defineAgent.d.ts +2 -1
  35. package/dist/agents/defineAgent.d.ts.map +1 -1
  36. package/dist/agents/defineAgent.js +6 -1
  37. package/dist/agents/defineAgent.js.map +1 -1
  38. package/dist/agents/examples/PipelineAgent.d.ts +46 -0
  39. package/dist/agents/examples/PipelineAgent.d.ts.map +1 -0
  40. package/dist/agents/examples/PipelineAgent.js +242 -0
  41. package/dist/agents/examples/PipelineAgent.js.map +1 -0
  42. package/dist/agents/examples/RouterAgent.d.ts +22 -0
  43. package/dist/agents/examples/RouterAgent.d.ts.map +1 -0
  44. package/dist/agents/examples/RouterAgent.js +268 -0
  45. package/dist/agents/examples/RouterAgent.js.map +1 -0
  46. package/dist/agents/examples/SupervisorAgent.d.ts +45 -0
  47. package/dist/agents/examples/SupervisorAgent.d.ts.map +1 -0
  48. package/dist/agents/examples/SupervisorAgent.js +406 -0
  49. package/dist/agents/examples/SupervisorAgent.js.map +1 -0
  50. package/dist/agents/explore.d.ts +6 -3
  51. package/dist/agents/explore.d.ts.map +1 -1
  52. package/dist/agents/explore.js +6 -3
  53. package/dist/agents/explore.js.map +1 -1
  54. package/dist/agents/forward-options.d.ts +11 -0
  55. package/dist/agents/forward-options.d.ts.map +1 -0
  56. package/dist/agents/forward-options.js +15 -0
  57. package/dist/agents/forward-options.js.map +1 -0
  58. package/dist/agents/index.d.ts +1 -0
  59. package/dist/agents/index.d.ts.map +1 -1
  60. package/dist/agents/index.js +2 -0
  61. package/dist/agents/index.js.map +1 -1
  62. package/dist/agents/runAgent.d.ts +19 -8
  63. package/dist/agents/runAgent.d.ts.map +1 -1
  64. package/dist/agents/runAgent.js +99 -29
  65. package/dist/agents/runAgent.js.map +1 -1
  66. package/dist/authorization/command-line.d.ts +2 -0
  67. package/dist/authorization/command-line.d.ts.map +1 -1
  68. package/dist/authorization/command-line.js +2 -2
  69. package/dist/authorization/command-line.js.map +1 -1
  70. package/dist/authorization/gate.d.ts +13 -2
  71. package/dist/authorization/gate.d.ts.map +1 -1
  72. package/dist/authorization/gate.js +37 -5
  73. package/dist/authorization/gate.js.map +1 -1
  74. package/dist/authorization/program.d.ts +151 -0
  75. package/dist/authorization/program.d.ts.map +1 -0
  76. package/dist/authorization/program.js +713 -0
  77. package/dist/authorization/program.js.map +1 -0
  78. package/dist/authorization/reexec-wrapper.d.ts +106 -0
  79. package/dist/authorization/reexec-wrapper.d.ts.map +1 -0
  80. package/dist/authorization/reexec-wrapper.js +532 -0
  81. package/dist/authorization/reexec-wrapper.js.map +1 -0
  82. package/dist/authorization/rules.d.ts +9 -0
  83. package/dist/authorization/rules.d.ts.map +1 -1
  84. package/dist/authorization/rules.js +27 -1
  85. package/dist/authorization/rules.js.map +1 -1
  86. package/dist/authorization/shell-lexer.d.ts +39 -0
  87. package/dist/authorization/shell-lexer.d.ts.map +1 -1
  88. package/dist/authorization/shell-lexer.js +113 -69
  89. package/dist/authorization/shell-lexer.js.map +1 -1
  90. package/dist/bridge/sse/mapper.d.ts.map +1 -1
  91. package/dist/bridge/sse/mapper.js +6 -0
  92. package/dist/bridge/sse/mapper.js.map +1 -1
  93. package/dist/capabilities/index.d.ts +54 -0
  94. package/dist/capabilities/index.d.ts.map +1 -0
  95. package/dist/capabilities/index.js +92 -0
  96. package/dist/capabilities/index.js.map +1 -0
  97. package/dist/config/registry.d.ts +2 -1
  98. package/dist/config/registry.d.ts.map +1 -1
  99. package/dist/config/registry.js +3 -2
  100. package/dist/config/registry.js.map +1 -1
  101. package/dist/connector/index.d.ts +4 -4
  102. package/dist/connector/index.d.ts.map +1 -1
  103. package/dist/connector/index.js +3 -3
  104. package/dist/connector/index.js.map +1 -1
  105. package/dist/connector/mcp/adapter.d.ts +16 -1
  106. package/dist/connector/mcp/adapter.d.ts.map +1 -1
  107. package/dist/connector/mcp/adapter.js +60 -4
  108. package/dist/connector/mcp/adapter.js.map +1 -1
  109. package/dist/connector/mcp/client.d.ts +13 -4
  110. package/dist/connector/mcp/client.d.ts.map +1 -1
  111. package/dist/connector/mcp/client.js +20 -3
  112. package/dist/connector/mcp/client.js.map +1 -1
  113. package/dist/connector/mcp/discovery.d.ts +24 -1
  114. package/dist/connector/mcp/discovery.d.ts.map +1 -1
  115. package/dist/connector/mcp/discovery.js +44 -0
  116. package/dist/connector/mcp/discovery.js.map +1 -1
  117. package/dist/connector/mcp/index.d.ts +2 -0
  118. package/dist/connector/mcp/index.d.ts.map +1 -1
  119. package/dist/connector/mcp/index.js +11 -0
  120. package/dist/connector/mcp/index.js.map +1 -1
  121. package/dist/connector/mcp/mcp-toolset.d.ts +133 -0
  122. package/dist/connector/mcp/mcp-toolset.d.ts.map +1 -0
  123. package/dist/connector/mcp/mcp-toolset.js +399 -0
  124. package/dist/connector/mcp/mcp-toolset.js.map +1 -0
  125. package/dist/connector/tools/index.d.ts +2 -2
  126. package/dist/connector/tools/index.d.ts.map +1 -1
  127. package/dist/connector/tools/index.js +1 -1
  128. package/dist/connector/tools/index.js.map +1 -1
  129. package/dist/connector/tools/router.d.ts +15 -13
  130. package/dist/connector/tools/router.d.ts.map +1 -1
  131. package/dist/connector/tools/router.js +30 -51
  132. package/dist/connector/tools/router.js.map +1 -1
  133. package/dist/contracts/a2a.d.ts +2 -2
  134. package/dist/directory/derive-supervisor.d.ts +2 -2
  135. package/dist/directory/derive-supervisor.d.ts.map +1 -1
  136. package/dist/directory/derive-supervisor.js +6 -7
  137. package/dist/directory/derive-supervisor.js.map +1 -1
  138. package/dist/directory/derive.d.ts.map +1 -1
  139. package/dist/directory/derive.js +5 -5
  140. package/dist/directory/derive.js.map +1 -1
  141. package/dist/execution/code-runtime/types.d.ts +2 -2
  142. package/dist/execution/code-runtime/types.js +1 -1
  143. package/dist/invariants/index.d.ts +2 -1
  144. package/dist/invariants/index.d.ts.map +1 -1
  145. package/dist/invariants/index.js +3 -2
  146. package/dist/invariants/index.js.map +1 -1
  147. package/dist/manager/agent/lifecycle.d.ts.map +1 -1
  148. package/dist/manager/agent/lifecycle.js +9 -0
  149. package/dist/manager/agent/lifecycle.js.map +1 -1
  150. package/dist/manager/connector/environment.d.ts +6 -0
  151. package/dist/manager/connector/environment.d.ts.map +1 -1
  152. package/dist/manager/connector/environment.js +11 -4
  153. package/dist/manager/connector/environment.js.map +1 -1
  154. package/dist/manager/connector/index.d.ts +2 -2
  155. package/dist/manager/connector/index.d.ts.map +1 -1
  156. package/dist/manager/connector/index.js +2 -2
  157. package/dist/manager/connector/index.js.map +1 -1
  158. package/dist/manager/connector/tenant.d.ts +6 -0
  159. package/dist/manager/connector/tenant.d.ts.map +1 -1
  160. package/dist/manager/connector/tenant.js +11 -4
  161. package/dist/manager/connector/tenant.js.map +1 -1
  162. package/dist/manager/index.d.ts +2 -2
  163. package/dist/manager/index.d.ts.map +1 -1
  164. package/dist/manager/index.js +2 -2
  165. package/dist/manager/index.js.map +1 -1
  166. package/dist/manager/resident/learning-observation.d.ts +4 -4
  167. package/dist/manager/resident/learning.d.ts +36 -36
  168. package/dist/manager/session/attribution.d.ts +22 -0
  169. package/dist/manager/session/attribution.d.ts.map +1 -0
  170. package/dist/manager/session/attribution.js +64 -0
  171. package/dist/manager/session/attribution.js.map +1 -0
  172. package/dist/manager/session/turn-recorder.d.ts +14 -0
  173. package/dist/manager/session/turn-recorder.d.ts.map +1 -1
  174. package/dist/manager/session/turn-recorder.js +208 -55
  175. package/dist/manager/session/turn-recorder.js.map +1 -1
  176. package/dist/peers/address.d.ts +36 -0
  177. package/dist/peers/address.d.ts.map +1 -0
  178. package/dist/peers/address.js +52 -0
  179. package/dist/peers/address.js.map +1 -0
  180. package/dist/peers/client.d.ts +47 -0
  181. package/dist/peers/client.d.ts.map +1 -0
  182. package/dist/peers/client.js +132 -0
  183. package/dist/peers/client.js.map +1 -0
  184. package/dist/peers/dir.d.ts +88 -0
  185. package/dist/peers/dir.d.ts.map +1 -0
  186. package/dist/peers/dir.js +139 -0
  187. package/dist/peers/dir.js.map +1 -0
  188. package/dist/peers/endpoint.d.ts +144 -0
  189. package/dist/peers/endpoint.d.ts.map +1 -0
  190. package/dist/peers/endpoint.js +420 -0
  191. package/dist/peers/endpoint.js.map +1 -0
  192. package/dist/peers/envelope.d.ts +42 -0
  193. package/dist/peers/envelope.d.ts.map +1 -0
  194. package/dist/peers/envelope.js +110 -0
  195. package/dist/peers/envelope.js.map +1 -0
  196. package/dist/peers/index.d.ts +30 -0
  197. package/dist/peers/index.d.ts.map +1 -0
  198. package/dist/peers/index.js +22 -0
  199. package/dist/peers/index.js.map +1 -0
  200. package/dist/peers/protocol.d.ts +645 -0
  201. package/dist/peers/protocol.d.ts.map +1 -0
  202. package/dist/peers/protocol.js +151 -0
  203. package/dist/peers/protocol.js.map +1 -0
  204. package/dist/peers/record.d.ts +71 -0
  205. package/dist/peers/record.d.ts.map +1 -0
  206. package/dist/peers/record.js +45 -0
  207. package/dist/peers/record.js.map +1 -0
  208. package/dist/peers/registry.d.ts +54 -0
  209. package/dist/peers/registry.d.ts.map +1 -0
  210. package/dist/peers/registry.js +213 -0
  211. package/dist/peers/registry.js.map +1 -0
  212. package/dist/plugin/define.d.ts +24 -0
  213. package/dist/plugin/define.d.ts.map +1 -0
  214. package/dist/plugin/define.js +42 -0
  215. package/dist/plugin/define.js.map +1 -0
  216. package/dist/plugin/index.d.ts +2 -0
  217. package/dist/plugin/index.d.ts.map +1 -1
  218. package/dist/plugin/index.js +1 -0
  219. package/dist/plugin/index.js.map +1 -1
  220. package/dist/plugin/lifecycle.d.ts +27 -3
  221. package/dist/plugin/lifecycle.d.ts.map +1 -1
  222. package/dist/plugin/lifecycle.js +242 -92
  223. package/dist/plugin/lifecycle.js.map +1 -1
  224. package/dist/plugin/resolver.d.ts +2 -2
  225. package/dist/plugin/resolver.d.ts.map +1 -1
  226. package/dist/plugin/resolver.js.map +1 -1
  227. package/dist/plugin/shell-hook.d.ts.map +1 -1
  228. package/dist/plugin/shell-hook.js +17 -3
  229. package/dist/plugin/shell-hook.js.map +1 -1
  230. package/dist/pricing/catalogue.generated.d.ts.map +1 -1
  231. package/dist/pricing/catalogue.generated.js +28 -4
  232. package/dist/pricing/catalogue.generated.js.map +1 -1
  233. package/dist/probe/errors.d.ts +2 -1
  234. package/dist/probe/errors.d.ts.map +1 -1
  235. package/dist/probe/errors.js +3 -2
  236. package/dist/probe/errors.js.map +1 -1
  237. package/dist/prompt/coding-agent-doctrine.d.ts +18 -7
  238. package/dist/prompt/coding-agent-doctrine.d.ts.map +1 -1
  239. package/dist/prompt/coding-agent-doctrine.js +11 -6
  240. package/dist/prompt/coding-agent-doctrine.js.map +1 -1
  241. package/dist/prompt/contributions.d.ts +4 -1
  242. package/dist/prompt/contributions.d.ts.map +1 -1
  243. package/dist/prompt/contributions.js +7 -2
  244. package/dist/prompt/contributions.js.map +1 -1
  245. package/dist/prompt/index.d.ts +1 -1
  246. package/dist/prompt/index.d.ts.map +1 -1
  247. package/dist/prompt/index.js +1 -1
  248. package/dist/prompt/index.js.map +1 -1
  249. package/dist/provider/collect-chat-completion.d.ts +6 -1
  250. package/dist/provider/collect-chat-completion.d.ts.map +1 -1
  251. package/dist/provider/collect-chat-completion.js +88 -10
  252. package/dist/provider/collect-chat-completion.js.map +1 -1
  253. package/dist/provider/mock.d.ts.map +1 -1
  254. package/dist/provider/mock.js +23 -6
  255. package/dist/provider/mock.js.map +1 -1
  256. package/dist/provider/registry.d.ts +2 -1
  257. package/dist/provider/registry.d.ts.map +1 -1
  258. package/dist/provider/registry.js +3 -2
  259. package/dist/provider/registry.js.map +1 -1
  260. package/dist/provider/tool-call-framing.d.ts +164 -0
  261. package/dist/provider/tool-call-framing.d.ts.map +1 -0
  262. package/dist/provider/tool-call-framing.js +163 -0
  263. package/dist/provider/tool-call-framing.js.map +1 -0
  264. package/dist/public-runtime.d.ts +27 -14
  265. package/dist/public-runtime.d.ts.map +1 -1
  266. package/dist/public-runtime.js +49 -11
  267. package/dist/public-runtime.js.map +1 -1
  268. package/dist/public-tools.d.ts +9 -6
  269. package/dist/public-tools.d.ts.map +1 -1
  270. package/dist/public-tools.js +13 -5
  271. package/dist/public-tools.js.map +1 -1
  272. package/dist/public-types.d.ts +16 -5
  273. package/dist/public-types.d.ts.map +1 -1
  274. package/dist/read-model/registry.d.ts +2 -1
  275. package/dist/read-model/registry.d.ts.map +1 -1
  276. package/dist/read-model/registry.js +3 -2
  277. package/dist/read-model/registry.js.map +1 -1
  278. package/dist/registry/ManagedRegistry.d.ts +30 -0
  279. package/dist/registry/ManagedRegistry.d.ts.map +1 -1
  280. package/dist/registry/ManagedRegistry.js +45 -6
  281. package/dist/registry/ManagedRegistry.js.map +1 -1
  282. package/dist/registry/collision.d.ts +57 -0
  283. package/dist/registry/collision.d.ts.map +1 -0
  284. package/dist/registry/collision.js +41 -0
  285. package/dist/registry/collision.js.map +1 -0
  286. package/dist/registry/command/index.d.ts +5 -3
  287. package/dist/registry/command/index.d.ts.map +1 -1
  288. package/dist/registry/command/index.js +6 -4
  289. package/dist/registry/command/index.js.map +1 -1
  290. package/dist/registry/index.d.ts +3 -4
  291. package/dist/registry/index.d.ts.map +1 -1
  292. package/dist/registry/index.js +2 -2
  293. package/dist/registry/index.js.map +1 -1
  294. package/dist/registry/plugin/index.d.ts.map +1 -1
  295. package/dist/registry/plugin/index.js +14 -1
  296. package/dist/registry/plugin/index.js.map +1 -1
  297. package/dist/registry/tool/callable.d.ts +22 -0
  298. package/dist/registry/tool/callable.d.ts.map +1 -0
  299. package/dist/registry/tool/callable.js +28 -0
  300. package/dist/registry/tool/callable.js.map +1 -0
  301. package/dist/registry/tool/execute.d.ts +14 -77
  302. package/dist/registry/tool/execute.d.ts.map +1 -1
  303. package/dist/registry/tool/execute.js +15 -720
  304. package/dist/registry/tool/execute.js.map +1 -1
  305. package/dist/registry/tool/portable.d.ts +25 -0
  306. package/dist/registry/tool/portable.d.ts.map +1 -1
  307. package/dist/registry/tool/portable.js +50 -0
  308. package/dist/registry/tool/portable.js.map +1 -1
  309. package/dist/registry/tool/presentation.d.ts +6 -5
  310. package/dist/registry/tool/presentation.d.ts.map +1 -1
  311. package/dist/registry/tool/presentation.js +3 -3
  312. package/dist/registry/tool/presentation.js.map +1 -1
  313. package/dist/runtime/bidi/session.d.ts +5 -4
  314. package/dist/runtime/bidi/session.d.ts.map +1 -1
  315. package/dist/runtime/bidi/session.js +18 -1
  316. package/dist/runtime/bidi/session.js.map +1 -1
  317. package/dist/runtime/query/executor/tool-call-admission.d.ts +82 -13
  318. package/dist/runtime/query/executor/tool-call-admission.d.ts.map +1 -1
  319. package/dist/runtime/query/executor/tool-call-admission.js +227 -17
  320. package/dist/runtime/query/executor/tool-call-admission.js.map +1 -1
  321. package/dist/runtime/query/executor.d.ts +37 -5
  322. package/dist/runtime/query/executor.d.ts.map +1 -1
  323. package/dist/runtime/query/executor.js +103 -14
  324. package/dist/runtime/query/executor.js.map +1 -1
  325. package/dist/runtime/query/file-evidence-replay.d.ts +1 -1
  326. package/dist/runtime/query/file-evidence-replay.d.ts.map +1 -1
  327. package/dist/runtime/query/file-evidence-replay.js +8 -7
  328. package/dist/runtime/query/file-evidence-replay.js.map +1 -1
  329. package/dist/runtime/query/fork/prepare.d.ts +4 -1
  330. package/dist/runtime/query/fork/prepare.d.ts.map +1 -1
  331. package/dist/runtime/query/fork/prepare.js +4 -0
  332. package/dist/runtime/query/fork/prepare.js.map +1 -1
  333. package/dist/runtime/query/guardrail-presets.d.ts +4 -3
  334. package/dist/runtime/query/guardrail-presets.d.ts.map +1 -1
  335. package/dist/runtime/query/guardrail-presets.js +4 -3
  336. package/dist/runtime/query/guardrail-presets.js.map +1 -1
  337. package/dist/runtime/query/index.d.ts +23 -10
  338. package/dist/runtime/query/index.d.ts.map +1 -1
  339. package/dist/runtime/query/index.js +149 -70
  340. package/dist/runtime/query/index.js.map +1 -1
  341. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  342. package/dist/runtime/query/iteration/index.js +8 -1
  343. package/dist/runtime/query/iteration/index.js.map +1 -1
  344. package/dist/runtime/query/iteration/phases/compaction.js +1 -1
  345. package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
  346. package/dist/runtime/query/iteration/phases/context.d.ts +2 -2
  347. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  348. package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
  349. package/dist/runtime/query/iteration/phases/tool-review.js +55 -2
  350. package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
  351. package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -1
  352. package/dist/runtime/query/iteration/stream-turn.js +342 -116
  353. package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
  354. package/dist/runtime/query/iteration/tool-input.d.ts +79 -0
  355. package/dist/runtime/query/iteration/tool-input.d.ts.map +1 -0
  356. package/dist/runtime/query/iteration/tool-input.js +291 -0
  357. package/dist/runtime/query/iteration/tool-input.js.map +1 -0
  358. package/dist/runtime/query/observation-context.d.ts +2 -2
  359. package/dist/runtime/query/observation-context.d.ts.map +1 -1
  360. package/dist/runtime/query/observation-context.js.map +1 -1
  361. package/dist/runtime/query/prelude-lease.d.ts +18 -0
  362. package/dist/runtime/query/prelude-lease.d.ts.map +1 -0
  363. package/dist/runtime/query/prelude-lease.js +121 -0
  364. package/dist/runtime/query/prelude-lease.js.map +1 -0
  365. package/dist/runtime/query/prepare-turn.d.ts.map +1 -1
  366. package/dist/runtime/query/prepare-turn.js +386 -187
  367. package/dist/runtime/query/prepare-turn.js.map +1 -1
  368. package/dist/runtime/query/prompt-cache.d.ts +2 -2
  369. package/dist/runtime/query/prompt-cache.d.ts.map +1 -1
  370. package/dist/runtime/query/prompt.d.ts +2 -2
  371. package/dist/runtime/query/prompt.d.ts.map +1 -1
  372. package/dist/runtime/query/prompt.js +1 -1
  373. package/dist/runtime/query/prompt.js.map +1 -1
  374. package/dist/runtime/query/resume-session.d.ts.map +1 -1
  375. package/dist/runtime/query/resume-session.js +37 -2
  376. package/dist/runtime/query/resume-session.js.map +1 -1
  377. package/dist/runtime/query/review-policy.d.ts +65 -3
  378. package/dist/runtime/query/review-policy.d.ts.map +1 -1
  379. package/dist/runtime/query/review-policy.js +143 -22
  380. package/dist/runtime/query/review-policy.js.map +1 -1
  381. package/dist/runtime/query/tooling.d.ts +3 -2
  382. package/dist/runtime/query/tooling.d.ts.map +1 -1
  383. package/dist/runtime/query/tooling.js.map +1 -1
  384. package/dist/runtime/query/turn-state.d.ts.map +1 -1
  385. package/dist/runtime/query/turn-state.js +5 -0
  386. package/dist/runtime/query/turn-state.js.map +1 -1
  387. package/dist/runtime/system-events.d.ts +112 -0
  388. package/dist/runtime/system-events.d.ts.map +1 -0
  389. package/dist/runtime/system-events.js +183 -0
  390. package/dist/runtime/system-events.js.map +1 -0
  391. package/dist/scheduler/delegating.d.ts +2 -1
  392. package/dist/scheduler/delegating.d.ts.map +1 -1
  393. package/dist/scheduler/delegating.js +3 -2
  394. package/dist/scheduler/delegating.js.map +1 -1
  395. package/dist/skills/index.d.ts +1 -1
  396. package/dist/skills/index.d.ts.map +1 -1
  397. package/dist/skills/index.js +1 -1
  398. package/dist/skills/index.js.map +1 -1
  399. package/dist/skills/registry.d.ts +18 -0
  400. package/dist/skills/registry.d.ts.map +1 -1
  401. package/dist/skills/registry.js +20 -0
  402. package/dist/skills/registry.js.map +1 -1
  403. package/dist/store/evidence/index-page.d.ts +2 -2
  404. package/dist/store/session-log/conformance.d.ts +1 -1
  405. package/dist/store/session-log/conformance.d.ts.map +1 -1
  406. package/dist/store/session-log/conformance.js +49 -8
  407. package/dist/store/session-log/conformance.js.map +1 -1
  408. package/dist/store/session-log/core.d.ts +8 -3
  409. package/dist/store/session-log/core.d.ts.map +1 -1
  410. package/dist/store/session-log/core.js +2 -1
  411. package/dist/store/session-log/core.js.map +1 -1
  412. package/dist/store/session-log/fold.d.ts +12 -0
  413. package/dist/store/session-log/fold.d.ts.map +1 -1
  414. package/dist/store/session-log/fold.js +57 -7
  415. package/dist/store/session-log/fold.js.map +1 -1
  416. package/dist/store/session-log/index.d.ts +2 -2
  417. package/dist/store/session-log/index.d.ts.map +1 -1
  418. package/dist/store/session-log/index.js +1 -1
  419. package/dist/store/session-log/index.js.map +1 -1
  420. package/dist/test-support/toolset.d.ts +19 -0
  421. package/dist/test-support/toolset.d.ts.map +1 -0
  422. package/dist/test-support/toolset.js +20 -0
  423. package/dist/test-support/toolset.js.map +1 -0
  424. package/dist/tools/builtins/bash.d.ts +29 -0
  425. package/dist/tools/builtins/bash.d.ts.map +1 -1
  426. package/dist/tools/builtins/bash.js +19 -9
  427. package/dist/tools/builtins/bash.js.map +1 -1
  428. package/dist/tools/builtins/browser-url.d.ts +1 -1
  429. package/dist/tools/builtins/browser-url.js +1 -1
  430. package/dist/tools/builtins/browser.d.ts +6 -6
  431. package/dist/tools/builtins/computer-use-coordinates.d.ts +65 -0
  432. package/dist/tools/builtins/computer-use-coordinates.d.ts.map +1 -0
  433. package/dist/tools/builtins/computer-use-coordinates.js +123 -0
  434. package/dist/tools/builtins/computer-use-coordinates.js.map +1 -0
  435. package/dist/tools/builtins/computer-use-image.d.ts +77 -0
  436. package/dist/tools/builtins/computer-use-image.d.ts.map +1 -0
  437. package/dist/tools/builtins/computer-use-image.js +223 -0
  438. package/dist/tools/builtins/computer-use-image.js.map +1 -0
  439. package/dist/tools/builtins/computer-use.d.ts +519 -14
  440. package/dist/tools/builtins/computer-use.d.ts.map +1 -1
  441. package/dist/tools/builtins/computer-use.js +1196 -183
  442. package/dist/tools/builtins/computer-use.js.map +1 -1
  443. package/dist/tools/builtins/edit.d.ts.map +1 -1
  444. package/dist/tools/builtins/edit.js +9 -1
  445. package/dist/tools/builtins/edit.js.map +1 -1
  446. package/dist/tools/builtins/index.d.ts +2 -1
  447. package/dist/tools/builtins/index.d.ts.map +1 -1
  448. package/dist/tools/builtins/index.js +1 -1
  449. package/dist/tools/builtins/index.js.map +1 -1
  450. package/dist/tools/builtins/json-string-hint.d.ts +15 -0
  451. package/dist/tools/builtins/json-string-hint.d.ts.map +1 -0
  452. package/dist/tools/builtins/json-string-hint.js +17 -0
  453. package/dist/tools/builtins/json-string-hint.js.map +1 -0
  454. package/dist/tools/builtins/search-tools.d.ts.map +1 -1
  455. package/dist/tools/builtins/search-tools.js +7 -15
  456. package/dist/tools/builtins/search-tools.js.map +1 -1
  457. package/dist/tools/builtins/skill.d.ts +74 -0
  458. package/dist/tools/builtins/skill.d.ts.map +1 -1
  459. package/dist/tools/builtins/skill.js +214 -174
  460. package/dist/tools/builtins/skill.js.map +1 -1
  461. package/dist/tools/builtins/write-file.d.ts.map +1 -1
  462. package/dist/tools/builtins/write-file.js +11 -0
  463. package/dist/tools/builtins/write-file.js.map +1 -1
  464. package/dist/tools/command-shell.d.ts +10 -0
  465. package/dist/tools/command-shell.d.ts.map +1 -1
  466. package/dist/tools/command-shell.js +45 -1
  467. package/dist/tools/command-shell.js.map +1 -1
  468. package/dist/tools/coordinator/agent.d.ts.map +1 -1
  469. package/dist/tools/coordinator/agent.js +5 -0
  470. package/dist/tools/coordinator/agent.js.map +1 -1
  471. package/dist/tools/coordinator/ask-user-question.d.ts.map +1 -1
  472. package/dist/tools/coordinator/ask-user-question.js +26 -13
  473. package/dist/tools/coordinator/ask-user-question.js.map +1 -1
  474. package/dist/tools/coordinator/index.d.ts.map +1 -1
  475. package/dist/tools/coordinator/index.js +5 -0
  476. package/dist/tools/coordinator/index.js.map +1 -1
  477. package/dist/tools/coordinator/question-options.d.ts +78 -0
  478. package/dist/tools/coordinator/question-options.d.ts.map +1 -0
  479. package/dist/tools/coordinator/question-options.js +153 -0
  480. package/dist/tools/coordinator/question-options.js.map +1 -0
  481. package/dist/tools/defineTool.d.ts +12 -0
  482. package/dist/tools/defineTool.d.ts.map +1 -1
  483. package/dist/tools/defineTool.js +24 -0
  484. package/dist/tools/defineTool.js.map +1 -1
  485. package/dist/tools/memory/search.d.ts.map +1 -1
  486. package/dist/tools/memory/search.js +4 -1
  487. package/dist/tools/memory/search.js.map +1 -1
  488. package/dist/tools/memory/update.d.ts.map +1 -1
  489. package/dist/tools/memory/update.js +8 -5
  490. package/dist/tools/memory/update.js.map +1 -1
  491. package/dist/tools/render-nonce.d.ts +47 -0
  492. package/dist/tools/render-nonce.d.ts.map +1 -0
  493. package/dist/tools/render-nonce.js +63 -0
  494. package/dist/tools/render-nonce.js.map +1 -0
  495. package/dist/tools/roster.d.ts +46 -19
  496. package/dist/tools/roster.d.ts.map +1 -1
  497. package/dist/tools/roster.js +63 -33
  498. package/dist/tools/roster.js.map +1 -1
  499. package/dist/tools/schedules/present.d.ts.map +1 -1
  500. package/dist/tools/schedules/present.js +2 -0
  501. package/dist/tools/schedules/present.js.map +1 -1
  502. package/dist/tools/schedules/schedule-tool.d.ts +6 -5
  503. package/dist/tools/schedules/schedule-tool.d.ts.map +1 -1
  504. package/dist/tools/schedules/schedule-tool.js +208 -37
  505. package/dist/tools/schedules/schedule-tool.js.map +1 -1
  506. package/dist/tools/schedules/types.d.ts +120 -6
  507. package/dist/tools/schedules/types.d.ts.map +1 -1
  508. package/dist/tools/trusted-read-only.d.ts +9 -5
  509. package/dist/tools/trusted-read-only.d.ts.map +1 -1
  510. package/dist/tools/trusted-read-only.js +14 -10
  511. package/dist/tools/trusted-read-only.js.map +1 -1
  512. package/dist/tools/untrusted-envelope.d.ts +67 -28
  513. package/dist/tools/untrusted-envelope.d.ts.map +1 -1
  514. package/dist/tools/untrusted-envelope.js +108 -59
  515. package/dist/tools/untrusted-envelope.js.map +1 -1
  516. package/dist/toolsets/combine.d.ts +44 -0
  517. package/dist/toolsets/combine.d.ts.map +1 -0
  518. package/dist/toolsets/combine.js +153 -0
  519. package/dist/toolsets/combine.js.map +1 -0
  520. package/dist/toolsets/manager.d.ts +201 -0
  521. package/dist/toolsets/manager.d.ts.map +1 -0
  522. package/dist/toolsets/manager.js +837 -0
  523. package/dist/toolsets/manager.js.map +1 -0
  524. package/dist/toolsets/source-glob.d.ts +15 -0
  525. package/dist/toolsets/source-glob.d.ts.map +1 -0
  526. package/dist/toolsets/source-glob.js +23 -0
  527. package/dist/toolsets/source-glob.js.map +1 -0
  528. package/dist/toolsets/toolset.d.ts +20 -0
  529. package/dist/toolsets/toolset.d.ts.map +1 -0
  530. package/dist/toolsets/toolset.js +28 -0
  531. package/dist/toolsets/toolset.js.map +1 -0
  532. package/dist/toolsets/types.d.ts +128 -0
  533. package/dist/toolsets/types.d.ts.map +1 -0
  534. package/dist/toolsets/types.js +33 -0
  535. package/dist/toolsets/types.js.map +1 -0
  536. package/dist/toolsets/wrappers.d.ts +59 -0
  537. package/dist/toolsets/wrappers.d.ts.map +1 -0
  538. package/dist/toolsets/wrappers.js +165 -0
  539. package/dist/toolsets/wrappers.js.map +1 -0
  540. package/dist/types/agent/base.d.ts +27 -16
  541. package/dist/types/agent/base.d.ts.map +1 -1
  542. package/dist/types/agent/index.d.ts +1 -0
  543. package/dist/types/agent/index.d.ts.map +1 -1
  544. package/dist/types/agent/index.js +1 -0
  545. package/dist/types/agent/index.js.map +1 -1
  546. package/dist/types/agent/pipeline.d.ts +2 -0
  547. package/dist/types/agent/pipeline.d.ts.map +1 -1
  548. package/dist/types/agent/query.d.ts +117 -0
  549. package/dist/types/agent/query.d.ts.map +1 -0
  550. package/dist/types/agent/query.js +2 -0
  551. package/dist/types/agent/query.js.map +1 -0
  552. package/dist/types/agent/reactive.d.ts +2 -129
  553. package/dist/types/agent/reactive.d.ts.map +1 -1
  554. package/dist/types/agent/router.d.ts +2 -0
  555. package/dist/types/agent/router.d.ts.map +1 -1
  556. package/dist/types/agent/supervisor.d.ts +5 -2
  557. package/dist/types/agent/supervisor.d.ts.map +1 -1
  558. package/dist/types/authorization/index.d.ts +70 -12
  559. package/dist/types/authorization/index.d.ts.map +1 -1
  560. package/dist/types/authorization/index.js +11 -0
  561. package/dist/types/authorization/index.js.map +1 -1
  562. package/dist/types/computer-use/index.d.ts +176 -0
  563. package/dist/types/computer-use/index.d.ts.map +1 -1
  564. package/dist/types/computer-use/index.js.map +1 -1
  565. package/dist/types/connector/mcp.d.ts +32 -0
  566. package/dist/types/connector/mcp.d.ts.map +1 -1
  567. package/dist/types/errors/index.d.ts +15 -0
  568. package/dist/types/errors/index.d.ts.map +1 -1
  569. package/dist/types/errors/index.js.map +1 -1
  570. package/dist/types/hitl/index.d.ts +57 -0
  571. package/dist/types/hitl/index.d.ts.map +1 -1
  572. package/dist/types/hitl/index.js.map +1 -1
  573. package/dist/types/message/index.d.ts +130 -9
  574. package/dist/types/message/index.d.ts.map +1 -1
  575. package/dist/types/message/index.js +4 -1
  576. package/dist/types/message/index.js.map +1 -1
  577. package/dist/types/plugin/index.d.ts +22 -4
  578. package/dist/types/plugin/index.d.ts.map +1 -1
  579. package/dist/types/plugin/index.js +1 -0
  580. package/dist/types/plugin/index.js.map +1 -1
  581. package/dist/types/provider/chat.d.ts +5 -0
  582. package/dist/types/provider/chat.d.ts.map +1 -1
  583. package/dist/types/provider/config.d.ts +8 -3
  584. package/dist/types/provider/config.d.ts.map +1 -1
  585. package/dist/types/provider/stream.d.ts +39 -0
  586. package/dist/types/provider/stream.d.ts.map +1 -1
  587. package/dist/types/sandbox/index.d.ts +1 -1
  588. package/dist/types/session/events.d.ts +14 -3
  589. package/dist/types/session/events.d.ts.map +1 -1
  590. package/dist/types/session/events.js.map +1 -1
  591. package/dist/types/tool/index.d.ts +171 -91
  592. package/dist/types/tool/index.d.ts.map +1 -1
  593. package/dist/types/tool/index.js.map +1 -1
  594. package/dist/types/toolset/index.d.ts +10 -40
  595. package/dist/types/toolset/index.d.ts.map +1 -1
  596. package/package.json +3 -1
  597. package/src/advisory/history.ts +27 -2
  598. package/src/advisory/index.ts +1 -1
  599. package/src/advisory/registry.ts +33 -0
  600. package/src/agents/AGENTS.md +14 -7
  601. package/src/agents/PipelineAgent.ts +2 -303
  602. package/src/agents/QueryAgent.ts +269 -0
  603. package/src/agents/ReactiveAgent.ts +6 -216
  604. package/src/agents/RouterAgent.ts +2 -337
  605. package/src/agents/SupervisorAgent.ts +3 -476
  606. package/src/agents/defineAgent.ts +13 -2
  607. package/src/agents/examples/PipelineAgent.ts +302 -0
  608. package/src/agents/examples/RouterAgent.ts +338 -0
  609. package/src/agents/examples/SupervisorAgent.ts +472 -0
  610. package/src/agents/explore.ts +6 -3
  611. package/src/agents/forward-options.ts +37 -0
  612. package/src/agents/index.ts +2 -0
  613. package/src/agents/runAgent.ts +144 -37
  614. package/src/authorization/command-line.ts +2 -2
  615. package/src/authorization/gate.ts +46 -5
  616. package/src/authorization/program.ts +773 -0
  617. package/src/authorization/reexec-wrapper.ts +589 -0
  618. package/src/authorization/rules.ts +36 -1
  619. package/src/authorization/shell-lexer.ts +136 -63
  620. package/src/bridge/sse/mapper.ts +6 -0
  621. package/src/capabilities/index.ts +157 -0
  622. package/src/config/registry.ts +4 -1
  623. package/src/connector/index.ts +9 -2
  624. package/src/connector/mcp/adapter.ts +58 -3
  625. package/src/connector/mcp/client.ts +20 -4
  626. package/src/connector/mcp/discovery.ts +60 -0
  627. package/src/connector/mcp/index.ts +13 -0
  628. package/src/connector/mcp/mcp-toolset.ts +515 -0
  629. package/src/connector/tools/index.ts +2 -2
  630. package/src/connector/tools/router.ts +35 -58
  631. package/src/directory/derive-supervisor.ts +12 -8
  632. package/src/directory/derive.ts +8 -5
  633. package/src/execution/code-runtime/types.ts +2 -2
  634. package/src/invariants/index.ts +4 -1
  635. package/src/manager/agent/lifecycle.ts +9 -0
  636. package/src/manager/connector/environment.ts +17 -4
  637. package/src/manager/connector/index.ts +2 -2
  638. package/src/manager/connector/tenant.ts +17 -4
  639. package/src/manager/index.ts +2 -2
  640. package/src/manager/session/attribution.ts +79 -0
  641. package/src/manager/session/turn-recorder.ts +211 -55
  642. package/src/peers/address.ts +58 -0
  643. package/src/peers/client.ts +202 -0
  644. package/src/peers/dir.ts +176 -0
  645. package/src/peers/endpoint.ts +564 -0
  646. package/src/peers/envelope.ts +121 -0
  647. package/src/peers/index.ts +96 -0
  648. package/src/peers/protocol.ts +196 -0
  649. package/src/peers/record.ts +56 -0
  650. package/src/peers/registry.ts +241 -0
  651. package/src/plugin/define.ts +68 -0
  652. package/src/plugin/index.ts +2 -0
  653. package/src/plugin/lifecycle.ts +286 -106
  654. package/src/plugin/resolver.ts +6 -3
  655. package/src/plugin/shell-hook.ts +21 -5
  656. package/src/pricing/catalogue.generated.ts +28 -4
  657. package/src/pricing/rates.source.json +27 -6
  658. package/src/probe/errors.ts +4 -1
  659. package/src/prompt/coding-agent-doctrine.ts +22 -10
  660. package/src/prompt/contributions.ts +12 -2
  661. package/src/prompt/index.ts +1 -0
  662. package/src/provider/collect-chat-completion.ts +96 -11
  663. package/src/provider/mock.ts +24 -6
  664. package/src/provider/registry.ts +4 -1
  665. package/src/provider/tool-call-framing.ts +226 -0
  666. package/src/public-runtime.ts +152 -9
  667. package/src/public-tools.ts +43 -5
  668. package/src/public-types.ts +65 -6
  669. package/src/read-model/registry.ts +7 -2
  670. package/src/registry/ManagedRegistry.ts +57 -6
  671. package/src/registry/collision.ts +64 -0
  672. package/src/registry/command/index.ts +7 -3
  673. package/src/registry/index.ts +3 -9
  674. package/src/registry/plugin/index.ts +14 -1
  675. package/src/registry/tool/callable.ts +36 -0
  676. package/src/registry/tool/execute.ts +16 -839
  677. package/src/registry/tool/portable.ts +59 -0
  678. package/src/registry/tool/presentation.ts +6 -5
  679. package/src/runtime/bidi/session.ts +24 -5
  680. package/src/runtime/query/executor/tool-call-admission.ts +288 -22
  681. package/src/runtime/query/executor.ts +129 -16
  682. package/src/runtime/query/file-evidence-replay.ts +8 -7
  683. package/src/runtime/query/fork/prepare.ts +6 -1
  684. package/src/runtime/query/guardrail-presets.ts +4 -3
  685. package/src/runtime/query/index.ts +199 -101
  686. package/src/runtime/query/iteration/index.ts +13 -3
  687. package/src/runtime/query/iteration/phases/compaction.ts +1 -1
  688. package/src/runtime/query/iteration/phases/context.ts +2 -2
  689. package/src/runtime/query/iteration/phases/tool-review.ts +59 -2
  690. package/src/runtime/query/iteration/stream-turn.ts +390 -136
  691. package/src/runtime/query/iteration/tool-input.ts +284 -0
  692. package/src/runtime/query/observation-context.ts +2 -2
  693. package/src/runtime/query/prelude-lease.ts +132 -0
  694. package/src/runtime/query/prepare-turn.ts +477 -198
  695. package/src/runtime/query/prompt-cache.ts +2 -2
  696. package/src/runtime/query/prompt.ts +4 -4
  697. package/src/runtime/query/resume-session.ts +42 -3
  698. package/src/runtime/query/review-policy.ts +190 -24
  699. package/src/runtime/query/tooling.ts +3 -6
  700. package/src/runtime/query/turn-state.ts +4 -0
  701. package/src/runtime/system-events.ts +246 -0
  702. package/src/scheduler/delegating.ts +7 -2
  703. package/src/skills/index.ts +1 -1
  704. package/src/skills/registry.ts +33 -0
  705. package/src/store/session-log/conformance.ts +51 -8
  706. package/src/store/session-log/core.ts +10 -4
  707. package/src/store/session-log/fold.ts +33 -7
  708. package/src/store/session-log/index.ts +2 -0
  709. package/src/test-support/toolset.ts +23 -0
  710. package/src/tools/builtins/bash.ts +27 -10
  711. package/src/tools/builtins/browser-url.ts +1 -1
  712. package/src/tools/builtins/computer-use-coordinates.ts +144 -0
  713. package/src/tools/builtins/computer-use-image.ts +278 -0
  714. package/src/tools/builtins/computer-use.ts +1495 -191
  715. package/src/tools/builtins/edit.ts +12 -2
  716. package/src/tools/builtins/index.ts +7 -1
  717. package/src/tools/builtins/json-string-hint.ts +16 -0
  718. package/src/tools/builtins/search-tools.ts +7 -20
  719. package/src/tools/builtins/skill.ts +304 -174
  720. package/src/tools/builtins/write-file.ts +12 -0
  721. package/src/tools/command-shell.ts +46 -1
  722. package/src/tools/coordinator/agent.ts +6 -0
  723. package/src/tools/coordinator/ask-user-question.ts +29 -15
  724. package/src/tools/coordinator/index.ts +6 -0
  725. package/src/tools/coordinator/question-options.ts +195 -0
  726. package/src/tools/defineTool.ts +38 -0
  727. package/src/tools/memory/search.ts +4 -1
  728. package/src/tools/memory/update.ts +8 -5
  729. package/src/tools/render-nonce.ts +69 -0
  730. package/src/tools/roster.ts +84 -33
  731. package/src/tools/schedules/present.ts +2 -0
  732. package/src/tools/schedules/schedule-tool.ts +238 -39
  733. package/src/tools/schedules/types.ts +120 -6
  734. package/src/tools/trusted-read-only.ts +19 -10
  735. package/src/tools/untrusted-envelope.ts +121 -57
  736. package/src/toolsets/combine.ts +181 -0
  737. package/src/toolsets/manager.ts +996 -0
  738. package/src/toolsets/source-glob.ts +22 -0
  739. package/src/toolsets/toolset.ts +31 -0
  740. package/src/toolsets/types.ts +154 -0
  741. package/src/toolsets/wrappers.ts +191 -0
  742. package/src/types/agent/base.ts +29 -16
  743. package/src/types/agent/index.ts +1 -0
  744. package/src/types/agent/pipeline.ts +2 -0
  745. package/src/types/agent/query.ts +129 -0
  746. package/src/types/agent/reactive.ts +5 -142
  747. package/src/types/agent/router.ts +2 -0
  748. package/src/types/agent/supervisor.ts +5 -2
  749. package/src/types/authorization/index.ts +33 -0
  750. package/src/types/computer-use/index.ts +202 -0
  751. package/src/types/connector/mcp.ts +32 -0
  752. package/src/types/errors/index.ts +15 -0
  753. package/src/types/hitl/index.ts +57 -0
  754. package/src/types/message/index.ts +135 -7
  755. package/src/types/plugin/index.ts +44 -21
  756. package/src/types/provider/chat.ts +5 -0
  757. package/src/types/provider/config.ts +8 -3
  758. package/src/types/provider/stream.ts +39 -0
  759. package/src/types/sandbox/index.ts +1 -1
  760. package/src/types/session/events.ts +14 -3
  761. package/src/types/tool/index.ts +173 -105
  762. package/src/types/toolset/index.ts +10 -47
  763. package/dist/registry/toolset/catalog.d.ts +0 -42
  764. package/dist/registry/toolset/catalog.d.ts.map +0 -1
  765. package/dist/registry/toolset/catalog.js +0 -234
  766. package/dist/registry/toolset/catalog.js.map +0 -1
  767. package/src/registry/toolset/catalog.ts +0 -308
@@ -1,46 +1,16 @@
1
- import { SpanStatusCode, context as otelContext, trace } from '@opentelemetry/api';
2
- import { assertStrictSchema } from '../../provider/strict-schema.js';
3
- import { GENAI, NAMZU, toolSpanName } from '../../telemetry/attributes.js';
4
- import { recordToolCall } from '../../telemetry/metrics.js';
5
- import { getTracer } from '../../telemetry/runtime-accessors.js';
6
- import { isTrustedReadOnly } from '../../tools/trusted-read-only.js';
7
- import { PLAN_MODE_REFUSAL } from '../../types/permission/index.js';
8
- import { toErrorMessage } from '../../utils/error.js';
9
- import { cloneJsonValue as clonePreparedInput } from '../../utils/json-snapshot.js';
10
- import { ManagedRegistry } from '../ManagedRegistry.js';
11
- import { renderToolSchema, toolWireSchema } from './schema.js';
12
- import { ToolResultHalted, screenToolResult } from './screen.js';
13
- // Tokens too generic to identify a tool by name — ignored when matching a
14
- // batched `search_tools` query so they can't activate the whole catalog
15
- // (every bridged tool name shares the `clawtool` prefix, for instance).
16
- // Generic CRUD verbs are stopped too: a query like "list deals" must rank
17
- // by "deals", not token-match every `list_*` tool in the deferred catalog.
18
- const SEARCH_STOP_TOKENS = new Set([
19
- 'clawtool',
20
- 'tool',
21
- 'tools',
22
- 'mcp',
23
- 'the',
24
- 'and',
25
- 'for',
26
- 'use',
27
- 'list',
28
- 'read',
29
- 'create',
30
- 'update',
31
- 'get',
32
- 'find',
33
- 'delete',
34
- 'search',
35
- ]);
36
- // Weighted-scoring weights mirroring ToolCatalog.searchTools (the richer,
37
- // otherwise-unused catalog scorer): exact name 12, name substring 8,
38
- // description 5 — extended here with argument-name indexing (3), following
39
- // argument names are searched too, not only the tool's own name.
40
- const SEARCH_WEIGHT_NAME_EXACT = 12;
41
- const SEARCH_WEIGHT_NAME_PARTIAL = 8;
42
- const SEARCH_WEIGHT_DESCRIPTION = 5;
43
- const SEARCH_WEIGHT_ARGUMENT = 3;
1
+ import { RegistryCollisionError } from '../collision.js';
2
+ /**
3
+ * Tool naming and a handful of small, stateless rendering helpers this file
4
+ * used to share with `ToolRegistry`.
5
+ *
6
+ * `ToolRegistry` itself — registration, availability, the execution
7
+ * pipeline — is gone (plan.md v3 §2): a runtime-owned `ToolManager`
8
+ * (`toolsets/manager.ts`) resolves toolsets instead, and carries its own
9
+ * copy of the pipeline this file used to define. What's left here is what
10
+ * had no toolset/manager analogue to move to: a tool name has to be valid
11
+ * regardless of which mechanism resolves it, and `describeWithOutput`/
12
+ * `toolDiscoveryHint` are pure string formatting `ToolManager` still calls.
13
+ */
44
14
  /**
45
15
  * What a tool name may be, everywhere it comes from.
46
16
  *
@@ -81,10 +51,10 @@ export function assertToolName(name) {
81
51
  * shadowing-by-name the only way to say "I do not want this tool", which is
82
52
  * precisely what now throws.
83
53
  */
84
- export class ToolNameCollisionError extends Error {
54
+ export class ToolNameCollisionError extends RegistryCollisionError {
85
55
  toolName;
86
56
  constructor(toolName, context) {
87
- super(`Tool name "${toolName}" is already registered by this host, and ${context} will not replace it. Rename the host tool, or decline the one being mounted with runtimeToolOverrides: { "${toolName}": "disabled" }.`);
57
+ super('ToolRegistry', toolName, `Tool name "${toolName}" is already registered by this host, and ${context} will not replace it. Rename the host tool, or decline the one being mounted with runtimeToolOverrides: { "${toolName}": "disabled" }.`);
88
58
  this.name = 'ToolNameCollisionError';
89
59
  this.toolName = toolName;
90
60
  }
@@ -108,592 +78,6 @@ export function describeWithOutput(description, outputSchema) {
108
78
  return description;
109
79
  return `${description}\n\nReturns (JSON Schema): ${JSON.stringify(outputSchema)}`;
110
80
  }
111
- export class ToolRegistry extends ManagedRegistry {
112
- availability = new Map();
113
- tierConfig;
114
- resultGuardrails;
115
- preparations = new WeakMap();
116
- constructor(config) {
117
- super({
118
- componentName: 'ToolRegistry',
119
- idField: 'name',
120
- logger: config?.logger,
121
- });
122
- this.tierConfig = config?.tierConfig;
123
- this.resultGuardrails = config?.resultGuardrails;
124
- }
125
- /**
126
- * Snapshot membership and availability for another turn without changing this
127
- * registry. Discovery, registration and suspension then affect only the fork.
128
- * Definitions, handlers and configuration remain shared; this is not a deep
129
- * clone or an authorization boundary. Prepared executions belong only to the
130
- * registry that prepared them and do not transfer to the fork.
131
- */
132
- fork(options = {}) {
133
- let retained;
134
- if (options.deferExcept !== undefined) {
135
- if (!Array.isArray(options.deferExcept))
136
- throw new TypeError('ToolRegistry.fork deferExcept must be an array of tool names.');
137
- retained = new Set();
138
- for (const name of options.deferExcept) {
139
- if (typeof name !== 'string' || !TOOL_NAME_PATTERN.test(name))
140
- throw new TypeError('ToolRegistry.fork deferExcept must contain valid tool names.');
141
- if (retained.has(name))
142
- throw new TypeError(`ToolRegistry.fork deferExcept contains duplicate tool "${name}".`);
143
- this.getOrThrow(name);
144
- retained.add(name);
145
- }
146
- }
147
- const fork = new ToolRegistry({
148
- logger: this.log,
149
- tierConfig: this.tierConfig,
150
- resultGuardrails: this.resultGuardrails,
151
- });
152
- fork.items = new Map(this.items);
153
- fork.availability = new Map(this.availability);
154
- if (retained) {
155
- for (const name of fork.listNames()) {
156
- if (fork.getAvailability(name) === 'active' && !retained.has(name))
157
- fork.availability.set(name, 'deferred');
158
- }
159
- }
160
- return fork;
161
- }
162
- register(idOrToolOrTools, maybeTool) {
163
- if (Array.isArray(idOrToolOrTools)) {
164
- const state = (typeof maybeTool === 'string' ? maybeTool : 'active');
165
- for (const tool of idOrToolOrTools) {
166
- this.registerOne(tool.name, tool, state);
167
- }
168
- return;
169
- }
170
- if (typeof idOrToolOrTools === 'string') {
171
- if (!maybeTool || typeof maybeTool === 'string') {
172
- throw new Error('register(id, tool) requires a ToolDefinition argument');
173
- }
174
- this.registerOne(idOrToolOrTools, maybeTool, 'active');
175
- return;
176
- }
177
- const tool = idOrToolOrTools;
178
- const state = typeof maybeTool === 'string' ? maybeTool : 'active';
179
- this.registerOne(tool.name, tool, state);
180
- }
181
- registerOne(id, tool, state) {
182
- assertToolName(id);
183
- // A model-facing schema is what the constraint is applied TO, so
184
- // asking for enforcement without one is a request that cannot be
185
- // honoured. Refusing at registration puts the error where the author
186
- // can fix it rather than at the first request.
187
- if (tool.enforceModelInput && !tool.modelInputSchema) {
188
- throw new Error(`Tool "${id}" enables enforceModelInput but does not define modelInputSchema. Constrained input generation requires an explicit provider-safe model schema.`);
189
- }
190
- // …and the schema has to be one a constrained decoder can actually be
191
- // given. The check above asks whether a model schema EXISTS; this asks
192
- // whether it can carry the guarantee the tool just requested.
193
- //
194
- // Both belong here for the reason the comment above already states.
195
- // Strict validation runs against a SUBSET of JSON Schema, and a keyword
196
- // outside it is not degraded — the request is rejected whole, so one
197
- // unexpressible field takes down every other tool in the call. The
198
- // first version of this check lived in a provider driver, which meant
199
- // it fired per request, in one driver, long after the author had moved
200
- // on. A tool that asks for a guarantee its own schema cannot carry is
201
- // wrong at the moment it is declared, whichever model it later meets.
202
- if (tool.enforceModelInput) {
203
- assertStrictSchema(id, tool.modelInputSchema);
204
- }
205
- if (tool.tier && this.tierConfig) {
206
- const validIds = this.tierConfig.tiers.map((t) => t.id);
207
- if (!validIds.includes(tool.tier)) {
208
- throw new Error(`Tool "${id}" has tier "${tool.tier}" which is not defined. Valid tiers: ${validIds.join(', ')}`);
209
- }
210
- }
211
- super.register(id, tool);
212
- this.availability.set(id, state);
213
- }
214
- unregister(id) {
215
- this.availability.delete(id);
216
- return super.unregister(id);
217
- }
218
- clear() {
219
- this.availability.clear();
220
- super.clear();
221
- }
222
- activate(names) {
223
- for (const name of names) {
224
- this.getOrThrow(name);
225
- this.availability.set(name, 'active');
226
- this.log.debug('Tool activated', { 'namzu.tool.name': name });
227
- }
228
- }
229
- defer(names) {
230
- for (const name of names) {
231
- this.getOrThrow(name);
232
- this.availability.set(name, 'deferred');
233
- this.log.debug('Tool deferred', { 'namzu.tool.name': name });
234
- }
235
- }
236
- suspendAll() {
237
- for (const name of this.listIds()) {
238
- if (this.getAvailability(name) === 'active') {
239
- this.availability.set(name, 'suspended');
240
- }
241
- }
242
- this.log.info('All active tools suspended');
243
- }
244
- hasSuspended() {
245
- for (const state of this.availability.values()) {
246
- if (state === 'suspended')
247
- return true;
248
- }
249
- return false;
250
- }
251
- getAvailability(name) {
252
- return this.availability.get(name) ?? 'active';
253
- }
254
- /**
255
- * Ranked lexical search over DEFERRED tools, score-descending (ties broken
256
- * by name) so callers can cap activation at a top-k. Each meaningful query
257
- * term (≥3 chars, not a stop token) is scored against the tool name
258
- * (exact/substring), description, and argument names; only tools with a
259
- * positive score are returned. Description matching is safe here precisely
260
- * because the result is RANKED — the `search_tools` builtin activates only
261
- * the top slice, so a shared word can no longer drag in the whole catalog.
262
- *
263
- * PARKED (phase 5 of the tool-loading plan): an embedding-backed semantic
264
- * upgrade was evaluated and deliberately NOT built — at ≤~35 deferred
265
- * in-house tools with distinct names, weighted lexical scoring sits inside
266
- * the literature's safe zone, and a weak retriever underperforms no
267
- * retriever at all. Revisit only when (a) the deferred catalog grows past
268
- * ~75-100 tools (realistic driver: connector-MCP growth), or (b) telemetry
269
- * shows a search_tools miss-rate above ~10%. Sticky activation is also
270
- * deliberate: activating inserts the schema into the tools array at its
271
- * registry position (a one-time prompt-cache prefix bust); re-defer/TTL
272
- * would churn that prefix repeatedly and is rejected.
273
- */
274
- searchDeferred(query) {
275
- return this.searchByAvailability(query, ['deferred']);
276
- }
277
- /** Active matches use the same ranking, also recognizing exact short or generic names. */
278
- searchActive(query) {
279
- return this.searchByAvailability(query, ['active']);
280
- }
281
- searchByAvailability(query, states) {
282
- const q = query.toLowerCase().trim();
283
- if (q.length === 0)
284
- return [];
285
- const terms = q.split(/\s+/).filter((tok) => tok.length >= 3 && !SEARCH_STOP_TOKENS.has(tok));
286
- const scored = [];
287
- for (const tool of this.getByAvailability(states)) {
288
- const name = tool.name.toLowerCase();
289
- const description = tool.description.toLowerCase();
290
- const argumentNames = listArgumentNames(tool);
291
- let score = terms.length === 0 && name === q ? SEARCH_WEIGHT_NAME_EXACT : 0;
292
- for (const term of terms) {
293
- if (name === term) {
294
- score += SEARCH_WEIGHT_NAME_EXACT;
295
- }
296
- else if (name.includes(term)) {
297
- score += SEARCH_WEIGHT_NAME_PARTIAL;
298
- }
299
- if (description.includes(term)) {
300
- score += SEARCH_WEIGHT_DESCRIPTION;
301
- }
302
- if (argumentNames.some((arg) => arg.includes(term))) {
303
- score += SEARCH_WEIGHT_ARGUMENT;
304
- }
305
- }
306
- if (score > 0) {
307
- scored.push({ tool, score });
308
- }
309
- }
310
- scored.sort((a, b) => b.score - a.score || a.tool.name.localeCompare(b.tool.name));
311
- return scored.map((entry) => entry.tool);
312
- }
313
- assignTiers(mapping) {
314
- for (const [toolName, tierId] of Object.entries(mapping)) {
315
- const tool = this.getOrThrow(toolName);
316
- if (this.tierConfig) {
317
- const validIds = this.tierConfig.tiers.map((t) => t.id);
318
- if (!validIds.includes(tierId)) {
319
- throw new Error(`Tier "${tierId}" for tool "${toolName}" is not defined. Valid tiers: ${validIds.join(', ')}`);
320
- }
321
- }
322
- tool.tier = tierId;
323
- }
324
- }
325
- toTierGuidance() {
326
- if (!this.tierConfig?.guidanceTemplate)
327
- return null;
328
- return this.tierConfig.guidanceTemplate(this.tierConfig.tiers);
329
- }
330
- listNames() {
331
- return this.listIds();
332
- }
333
- toPromptSection(toolNames) {
334
- const active = this.getByAvailability(['active'], toolNames);
335
- const deferred = this.getByAvailability(['deferred'], toolNames);
336
- const parts = [];
337
- const contractNote = `<tool_runtime_contract>
338
- Executable tool names, descriptions, and JSON input schemas are attached through the runtime tools parameter. Treat that runtime schema as authoritative; this prompt section is a discoverability summary only.
339
- </tool_runtime_contract>`;
340
- if (active.length > 0) {
341
- // Name-only: every active tool's full description + JSON schema
342
- // already rides the runtime tools parameter on each request —
343
- // repeating descriptions here double-bills the same tokens.
344
- const entries = active.map((t) => `- ${t.name}`).join('\n');
345
- parts.push(`<available_tools>\n${entries}\n</available_tools>`);
346
- }
347
- if (deferred.length > 0) {
348
- // Name + one-line hint: deferred schemas stay off the wire, so the
349
- // hint is the model's only signal of what a deferred tool does. A
350
- // bare name list caused a real discovery failure in production
351
- // (the agent never found read_document behind search_tools).
352
- const entries = deferred
353
- .map((t) => {
354
- const hint = toolDiscoveryHint(t.description);
355
- return hint.length > 0 ? `- ${t.name}: ${hint}` : `- ${t.name}`;
356
- })
357
- .join('\n');
358
- const deferredIntro = this.has('search_tools') &&
359
- this.getAvailability('search_tools') === 'active' &&
360
- (!toolNames || toolNames.includes('search_tools'))
361
- ? 'Use search_tools to load these before use:'
362
- : 'Deferred tools are discoverable but not executable until the runtime activates them:';
363
- parts.push(`<deferred_tools>\n${deferredIntro}\n${entries}\n</deferred_tools>`);
364
- }
365
- if (parts.length === 0)
366
- return '';
367
- return [contractNote, ...parts].join('\n\n');
368
- }
369
- toLLMTools(toolNames) {
370
- const toolsToConvert = this.getByAvailability(['active', 'suspended'], toolNames);
371
- return toolsToConvert.map((tool) => {
372
- let description = tool.description;
373
- if (this.tierConfig?.labelInDescription && tool.tier) {
374
- const tierDef = this.tierConfig.tiers.find((t) => t.id === tool.tier);
375
- if (tierDef) {
376
- description = `[${tierDef.label}] ${description}`;
377
- }
378
- }
379
- return {
380
- type: 'function',
381
- function: {
382
- name: tool.name,
383
- description: describeWithOutput(description, tool.outputSchema),
384
- parameters: toolWireSchema(tool),
385
- },
386
- };
387
- });
388
- }
389
- getCallableTools(toolNames) {
390
- return this.getByAvailability(['active'], toolNames);
391
- }
392
- prepareExecution(toolName, rawInput) {
393
- const tool = this.getOrThrow(toolName);
394
- const parseResult = tool.inputSchema.safeParse(rawInput);
395
- if (!parseResult.success) {
396
- return {
397
- success: false,
398
- result: this.validationFailure(tool, rawInput, parseResult.error),
399
- };
400
- }
401
- let retainedInput;
402
- let reviewInput;
403
- try {
404
- retainedInput = clonePreparedInput(parseResult.data, false);
405
- reviewInput = clonePreparedInput(retainedInput, true);
406
- }
407
- catch (err) {
408
- const message = `Tool "${toolName}" produced an input that cannot be safely prepared for review and execution: ${toErrorMessage(err)}`;
409
- this.log.error('Prepared tool input could not be detached for review and execution', {
410
- 'namzu.tool.name': toolName,
411
- 'exception.message': toErrorMessage(err),
412
- });
413
- return {
414
- success: false,
415
- result: { success: false, output: '', error: message },
416
- };
417
- }
418
- const prepared = Object.freeze({ toolName, input: reviewInput });
419
- this.preparations.set(prepared, { tool, input: retainedInput });
420
- return { success: true, prepared };
421
- }
422
- async executePrepared(prepared, context) {
423
- const retained = this.preparations.get(prepared);
424
- if (!retained) {
425
- return {
426
- success: false,
427
- output: '',
428
- error: `Tool "${prepared.toolName}" preparation is not owned by this registry or is no longer valid.`,
429
- };
430
- }
431
- if (this.get(prepared.toolName) !== retained.tool) {
432
- return {
433
- success: false,
434
- output: '',
435
- error: `Tool "${prepared.toolName}" changed after its input was reviewed; prepare the call again.`,
436
- };
437
- }
438
- return this.executeRetained(prepared.toolName, retained.tool, retained.input, context);
439
- }
440
- async execute(toolName, rawInput, context) {
441
- let preparation;
442
- try {
443
- preparation = this.prepareExecution(toolName, rawInput);
444
- }
445
- catch (err) {
446
- return this.rejectPreparationWithClosedSpan(toolName, context, err);
447
- }
448
- if (!preparation.success)
449
- return preparation.result;
450
- return this.executePrepared(preparation.prepared, context);
451
- }
452
- rejectPreparationWithClosedSpan(toolName, context, err) {
453
- const tracer = getTracer();
454
- const parentCtx = context.parentSpan
455
- ? trace.setSpan(otelContext.active(), context.parentSpan)
456
- : otelContext.active();
457
- return tracer.startActiveSpan(toolSpanName(toolName), {}, parentCtx, async (span) => {
458
- try {
459
- span.setAttributes({
460
- [GENAI.TOOL_NAME]: toolName,
461
- [GENAI.TOOL_TYPE]: 'function',
462
- ...(context.toolUseId !== undefined ? { [GENAI.TOOL_CALL_ID]: context.toolUseId } : {}),
463
- ...toolSpanIdentity(context),
464
- [NAMZU.TOOL_SUCCESS]: false,
465
- [NAMZU.TOOL_ERROR]: toErrorMessage(err),
466
- });
467
- span.setStatus({ code: SpanStatusCode.ERROR, message: toErrorMessage(err) });
468
- throw err;
469
- }
470
- finally {
471
- span.end();
472
- }
473
- });
474
- }
475
- async executeRetained(toolName, tool, finalInput, context) {
476
- const tracer = getTracer();
477
- // Explicit parent, not the ambient context. Every span-owning body
478
- // upstream is an async generator, and a generator resumes on its
479
- // consumer's async context — so by the time a tool executes, whatever
480
- // `startActiveSpan` established upstream is long gone and this span
481
- // would emit as a root. `context.parentSpan` is threaded through
482
- // `ToolContext`, which already reaches here.
483
- const parentCtx = context.parentSpan
484
- ? trace.setSpan(otelContext.active(), context.parentSpan)
485
- : otelContext.active();
486
- return tracer.startActiveSpan(toolSpanName(toolName), {}, parentCtx, async (span) => {
487
- try {
488
- // The call id joins this span to the assistant block that asked
489
- // for it. Without it a trace shows that `Bash` ran four times
490
- // this turn and cannot say which span answers which
491
- // `tool_use` — and the id was already in hand here, threaded
492
- // through `ToolContext` for the tools that reply
493
- // asynchronously.
494
- //
495
- // Conditional because `toolUseId` is optional: a host calling
496
- // a tool directly, outside a turn, has no call to correlate to,
497
- // and an attribute set to `undefined` is worse than an absent
498
- // one — it reaches the exporter as a key with no value.
499
- span.setAttributes({
500
- [GENAI.TOOL_NAME]: toolName,
501
- [GENAI.TOOL_TYPE]: 'function',
502
- ...(context.toolUseId !== undefined ? { [GENAI.TOOL_CALL_ID]: context.toolUseId } : {}),
503
- ...toolSpanIdentity(context),
504
- });
505
- const availability = this.getAvailability(toolName);
506
- if (availability !== 'active') {
507
- const msg = `Tool "${toolName}" is ${availability} and cannot be executed`;
508
- this.log.warn(msg);
509
- span.setAttributes({
510
- [NAMZU.TOOL_SUCCESS]: false,
511
- [NAMZU.TOOL_ERROR]: msg,
512
- });
513
- span.setStatus({ code: SpanStatusCode.ERROR, message: msg });
514
- return {
515
- success: false,
516
- output: '',
517
- error: msg,
518
- };
519
- }
520
- // A turn that was narrowed may only call what it was narrowed to.
521
- //
522
- // This used to be enforced nowhere. `allowedTools` decided which
523
- // schemas went into the request and was then carried into this
524
- // context and read by nothing, so the restriction was a statement
525
- // about the menu rather than about the kitchen: a model that named
526
- // a withheld tool — from earlier context, from a gateway holding
527
- // its own tool list, from a replayed cache prefix — had it run.
528
- // The type says "restrict which tools the model may call"; this is
529
- // the line that makes that true.
530
- //
531
- // Absent means unrestricted. An EMPTY list does not: it is a turn
532
- // that may call nothing, and treating it as "no restriction" is
533
- // the fail-open reading this codebase has already been bitten by
534
- // once, in the delegate roster.
535
- const allowed = context.allowedTools;
536
- if (allowed !== undefined && !allowed.includes(toolName)) {
537
- const msg = `Tool "${toolName}" is not available on this step. Available: ${allowed.length > 0 ? allowed.join(', ') : '(none)'}`;
538
- this.log.warn('Blocked a tool outside the step allow-list', {
539
- [GENAI.TOOL_NAME]: toolName,
540
- 'namzu.registry.allowed': allowed.length,
541
- });
542
- span.setAttributes({
543
- [NAMZU.TOOL_SUCCESS]: false,
544
- [NAMZU.TOOL_ERROR]: msg,
545
- });
546
- span.setStatus({ code: SpanStatusCode.ERROR, message: msg });
547
- return {
548
- success: false,
549
- output: '',
550
- error: msg,
551
- permissionDenied: true,
552
- };
553
- }
554
- const mode = context.permissionContext?.mode ?? 'auto';
555
- if (mode === 'plan') {
556
- const isReadOnly = isTrustedReadOnly(tool, finalInput);
557
- if (!isReadOnly) {
558
- // The same words the review-time policy uses, so the model gets one
559
- // instruction whichever door refused it.
560
- const msg = `plan mode: non-read-only tool "${toolName}" blocked. ${PLAN_MODE_REFUSAL}`;
561
- span.setAttributes({
562
- [NAMZU.TOOL_SUCCESS]: false,
563
- [NAMZU.TOOL_ERROR]: msg,
564
- });
565
- span.setStatus({ code: SpanStatusCode.ERROR, message: msg });
566
- return {
567
- success: false,
568
- output: '',
569
- error: msg,
570
- permissionDenied: true,
571
- permissionMessage: msg,
572
- };
573
- }
574
- }
575
- try {
576
- this.log.debug('Executing tool', { 'namzu.tool.name': toolName });
577
- const startedAt = Date.now();
578
- const runResultGuardrails = context.toolResultGuardrails;
579
- const produced = await tool.execute(finalInput, context);
580
- // Screened here, which is the only place a result can be
581
- // examined before anything acts on it: the executor applies
582
- // the output budget to what this returns, and compaction
583
- // summarises later still. `provenance` is carried in so a
584
- // screen can tell a connected server's words from a
585
- // first-party tool's — a connector's result is framed with
586
- // the server's name, and a screen reading only the value
587
- // cannot use that.
588
- const result = await screenToolResult(
589
- // Explicit configuration wins, at whichever boundary it
590
- // was made. A registry built WITH `resultGuardrails`
591
- // has stated its policy — including `[]`, which means
592
- // none — and a turn must not overrule it. A registry
593
- // built without one declared none, so the turn's apply;
594
- // that is the ordinary case, since a host assembles a
595
- // registry and hands it to a turn it does not own.
596
- this.resultGuardrails ?? runResultGuardrails, produced, {
597
- toolName,
598
- input: finalInput,
599
- ...(tool.provenance ? { provenance: tool.provenance } : {}),
600
- }, this.log);
601
- const durationMs = Date.now() - startedAt;
602
- this.log.debug('Tool completed', {
603
- 'namzu.tool.name': toolName,
604
- 'namzu.registry.success': result.success,
605
- });
606
- span.setAttribute(NAMZU.TOOL_SUCCESS, result.success);
607
- recordToolCall(toolName, result.success, result.success ? undefined : result.error, durationMs);
608
- if (!result.success && result.error) {
609
- span.setAttribute(NAMZU.TOOL_ERROR, result.error);
610
- span.setStatus({
611
- code: SpanStatusCode.ERROR,
612
- message: result.error,
613
- });
614
- }
615
- else {
616
- span.setStatus({ code: SpanStatusCode.OK });
617
- }
618
- return result;
619
- }
620
- catch (err) {
621
- // A terminal refusal must not be converted into a failed
622
- // tool call. Everything below turns an exception into a
623
- // result the model reads and works around, which is what
624
- // `refuse` is for — doing it to a `halt` would silently
625
- // demote the one verdict that says the turn must not
626
- // continue.
627
- if (err instanceof ToolResultHalted) {
628
- span.setAttributes({
629
- [NAMZU.TOOL_SUCCESS]: false,
630
- [NAMZU.TOOL_ERROR]: err.message,
631
- });
632
- span.setStatus({
633
- code: SpanStatusCode.ERROR,
634
- message: err.message,
635
- });
636
- throw err;
637
- }
638
- const errorMessage = toErrorMessage(err);
639
- this.log.error('Tool execution error', {
640
- 'namzu.tool.name': toolName,
641
- 'exception.message': errorMessage,
642
- });
643
- span.setAttributes({
644
- [NAMZU.TOOL_SUCCESS]: false,
645
- [NAMZU.TOOL_ERROR]: errorMessage,
646
- });
647
- span.setStatus({
648
- code: SpanStatusCode.ERROR,
649
- message: errorMessage,
650
- });
651
- span.recordException(err instanceof Error ? err : new Error(errorMessage));
652
- return {
653
- success: false,
654
- output: '',
655
- error: `Tool "${toolName}" execution failed: ${errorMessage}`,
656
- };
657
- }
658
- }
659
- finally {
660
- // The only place this span ends. It used to be ended at three
661
- // early returns and in a finally that opened below them, so
662
- // anything throwing before that try — `getOrThrow` on a name the
663
- // registry does not hold, for one — left the span open and the
664
- // tool's trace unclosed.
665
- span.end();
666
- }
667
- });
668
- }
669
- validationFailure(tool, rawInput, error) {
670
- const errorMessage = error.issues
671
- .map((issue) => `${issue.path.join('.')}: ${issue.message}`)
672
- .join('; ');
673
- const isEmptyInput = rawInput === null ||
674
- rawInput === undefined ||
675
- (typeof rawInput === 'object' &&
676
- !Array.isArray(rawInput) &&
677
- Object.keys(rawInput).length === 0);
678
- const requiredHint = describeRequiredInput(tool.inputSchema);
679
- const recoveryHint = tool.validationErrorHint?.trim()
680
- ? ` ${tool.validationErrorHint.trim()}`
681
- : '';
682
- const enrichedMessage = isEmptyInput
683
- ? `Tool "${tool.name}" was called with no arguments. ${requiredHint}${recoveryHint} Retry the call with the required parameters populated.`
684
- : `Validation failed for "${tool.name}": ${errorMessage}. ${requiredHint}${recoveryHint}`;
685
- this.log.error('Tool input validation failed', {
686
- 'namzu.tool.name': tool.name,
687
- 'namzu.registry.errors': errorMessage,
688
- 'namzu.registry.empty': isEmptyInput,
689
- });
690
- return { success: false, output: '', error: enrichedMessage };
691
- }
692
- getByAvailability(states, filter) {
693
- const candidates = filter ? filter.map((n) => this.getOrThrow(n)) : this.getAll();
694
- return candidates.filter((t) => states.includes(this.getAvailability(t.name)));
695
- }
696
- }
697
81
  /**
698
82
  * One-line discoverability hint for a deferred tool: the first sentence of
699
83
  * its description, capped at ~100 chars. Used for the `<deferred_tools>`
@@ -710,93 +94,4 @@ export function toolDiscoveryHint(description, maxLength = 100) {
710
94
  return sentence;
711
95
  return `${sentence.slice(0, maxLength - 1).trimEnd()}…`;
712
96
  }
713
- /**
714
- * Lower-cased argument (property) names of a tool's input schema, used by
715
- * `searchDeferred` ranking. Walks the JSON-Schema rendering (already a
716
- * registration dependency) instead of Zod internals; opaque schemas simply
717
- * contribute no argument matches.
718
- */
719
- function listArgumentNames(tool) {
720
- try {
721
- // The model-facing schema when there is one: that is what the model
722
- // was shown, so it is what a search over "which tool takes this
723
- // argument" has to match against.
724
- const json = tool.modelInputSchema ?? renderToolSchema(tool.inputSchema);
725
- return [...collectSchemaPropertyNames(json)].map((key) => key.toLowerCase());
726
- }
727
- catch {
728
- return [];
729
- }
730
- }
731
- /**
732
- * Every property name a schema can accept, including the ones that only
733
- * appear inside a branch.
734
- *
735
- * A conditional schema puts its real arguments under `anyOf`/`oneOf`, so
736
- * reading the top-level `properties` alone finds nothing and the tool is
737
- * unfindable by the very argument it takes. `seen` guards a schema that
738
- * refers back to itself.
739
- */
740
- function collectSchemaPropertyNames(schema, names = new Set(), seen = new Set()) {
741
- if (!schema || typeof schema !== 'object' || Array.isArray(schema))
742
- return names;
743
- if (seen.has(schema))
744
- return names;
745
- seen.add(schema);
746
- const record = schema;
747
- const properties = record.properties;
748
- if (properties && typeof properties === 'object' && !Array.isArray(properties)) {
749
- for (const name of Object.keys(properties))
750
- names.add(name);
751
- }
752
- for (const keyword of ['anyOf', 'oneOf', 'allOf']) {
753
- const branches = record[keyword];
754
- if (!Array.isArray(branches))
755
- continue;
756
- for (const branch of branches)
757
- collectSchemaPropertyNames(branch, names, seen);
758
- }
759
- return names;
760
- }
761
- /**
762
- * Build a one-sentence "Required: <field>: <type>, <field>: <type>"
763
- * hint from a Zod schema, used to enrich tool-input validation
764
- * errors so the model can self-correct without round-tripping the
765
- * full JSON schema again. Walks the schema's JSON-Schema rendering
766
- * (already a dependency for tool registration) so we don't have to
767
- * branch over Zod's internal type tree.
768
- *
769
- * Returns a fallback string for opaque/non-object schemas — the
770
- * caller still ships the raw Zod issues separately, so the hint
771
- * here is bonus context, not the only signal.
772
- */
773
- function describeRequiredInput(schema) {
774
- try {
775
- const json = renderToolSchema(schema);
776
- const required = json.required ?? [];
777
- if (required.length === 0)
778
- return 'No required parameters known.';
779
- const props = json.properties ?? {};
780
- const lines = required.map((name) => {
781
- const def = props[name] ?? {};
782
- const type = def.type ?? 'value';
783
- const desc = def.description ? ` — ${def.description}` : '';
784
- return `${name}: ${type}${desc}`;
785
- });
786
- return `Required: ${lines.join(', ')}.`;
787
- }
788
- catch {
789
- return 'Could not introspect required parameters.';
790
- }
791
- }
792
- /**
793
- * The session and turn a tool span belongs to. A host calling a tool
794
- * directly may pass a context without them, so each is set only when present.
795
- */
796
- function toolSpanIdentity(context) {
797
- return {
798
- ...(context.sessionId ? { [GENAI.CONVERSATION_ID]: context.sessionId } : {}),
799
- ...(context.turnId ? { [NAMZU.TURN_ID]: context.turnId } : {}),
800
- };
801
- }
802
97
  //# sourceMappingURL=execute.js.map