@namzu/sdk 46.0.0 → 48.1.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 (768) hide show
  1. package/CHANGELOG.md +351 -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 +8 -0
  71. package/dist/authorization/gate.d.ts.map +1 -1
  72. package/dist/authorization/gate.js +12 -1
  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 +8 -1
  85. package/dist/authorization/rules.js.map +1 -1
  86. package/dist/authorization/shell-lexer.d.ts +19 -4
  87. package/dist/authorization/shell-lexer.d.ts.map +1 -1
  88. package/dist/authorization/shell-lexer.js +91 -65
  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 +71 -4
  108. package/dist/connector/mcp/adapter.js.map +1 -1
  109. package/dist/connector/mcp/client.d.ts +32 -4
  110. package/dist/connector/mcp/client.d.ts.map +1 -1
  111. package/dist/connector/mcp/client.js +383 -5
  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/era.d.ts.map +1 -1
  118. package/dist/connector/mcp/era.js +7 -0
  119. package/dist/connector/mcp/era.js.map +1 -1
  120. package/dist/connector/mcp/index.d.ts +2 -0
  121. package/dist/connector/mcp/index.d.ts.map +1 -1
  122. package/dist/connector/mcp/index.js +11 -0
  123. package/dist/connector/mcp/index.js.map +1 -1
  124. package/dist/connector/mcp/mcp-toolset.d.ts +133 -0
  125. package/dist/connector/mcp/mcp-toolset.d.ts.map +1 -0
  126. package/dist/connector/mcp/mcp-toolset.js +399 -0
  127. package/dist/connector/mcp/mcp-toolset.js.map +1 -0
  128. package/dist/connector/mcp/streamable-http.d.ts +15 -0
  129. package/dist/connector/mcp/streamable-http.d.ts.map +1 -1
  130. package/dist/connector/mcp/streamable-http.js +281 -6
  131. package/dist/connector/mcp/streamable-http.js.map +1 -1
  132. package/dist/connector/tools/index.d.ts +2 -2
  133. package/dist/connector/tools/index.d.ts.map +1 -1
  134. package/dist/connector/tools/index.js +1 -1
  135. package/dist/connector/tools/index.js.map +1 -1
  136. package/dist/connector/tools/router.d.ts +15 -13
  137. package/dist/connector/tools/router.d.ts.map +1 -1
  138. package/dist/connector/tools/router.js +30 -51
  139. package/dist/connector/tools/router.js.map +1 -1
  140. package/dist/contracts/a2a.d.ts +2 -2
  141. package/dist/directory/derive-supervisor.d.ts +2 -2
  142. package/dist/directory/derive-supervisor.d.ts.map +1 -1
  143. package/dist/directory/derive-supervisor.js +6 -7
  144. package/dist/directory/derive-supervisor.js.map +1 -1
  145. package/dist/directory/derive.d.ts.map +1 -1
  146. package/dist/directory/derive.js +5 -5
  147. package/dist/directory/derive.js.map +1 -1
  148. package/dist/execution/code-runtime/types.d.ts +2 -2
  149. package/dist/execution/code-runtime/types.js +1 -1
  150. package/dist/invariants/index.d.ts +2 -1
  151. package/dist/invariants/index.d.ts.map +1 -1
  152. package/dist/invariants/index.js +3 -2
  153. package/dist/invariants/index.js.map +1 -1
  154. package/dist/manager/agent/lifecycle.d.ts +1 -0
  155. package/dist/manager/agent/lifecycle.d.ts.map +1 -1
  156. package/dist/manager/agent/lifecycle.js +146 -18
  157. package/dist/manager/agent/lifecycle.js.map +1 -1
  158. package/dist/manager/connector/environment.d.ts +6 -0
  159. package/dist/manager/connector/environment.d.ts.map +1 -1
  160. package/dist/manager/connector/environment.js +11 -4
  161. package/dist/manager/connector/environment.js.map +1 -1
  162. package/dist/manager/connector/index.d.ts +2 -2
  163. package/dist/manager/connector/index.d.ts.map +1 -1
  164. package/dist/manager/connector/index.js +2 -2
  165. package/dist/manager/connector/index.js.map +1 -1
  166. package/dist/manager/connector/tenant.d.ts +6 -0
  167. package/dist/manager/connector/tenant.d.ts.map +1 -1
  168. package/dist/manager/connector/tenant.js +11 -4
  169. package/dist/manager/connector/tenant.js.map +1 -1
  170. package/dist/manager/index.d.ts +2 -2
  171. package/dist/manager/index.d.ts.map +1 -1
  172. package/dist/manager/index.js +2 -2
  173. package/dist/manager/index.js.map +1 -1
  174. package/dist/manager/resident/initiative.d.ts +6 -6
  175. package/dist/manager/resident/learning-observation.d.ts +4 -4
  176. package/dist/manager/resident/learning.d.ts +36 -36
  177. package/dist/manager/resident/outbox.d.ts +4 -4
  178. package/dist/manager/session/attribution.d.ts +22 -0
  179. package/dist/manager/session/attribution.d.ts.map +1 -0
  180. package/dist/manager/session/attribution.js +64 -0
  181. package/dist/manager/session/attribution.js.map +1 -0
  182. package/dist/manager/session/turn-recorder.d.ts +14 -0
  183. package/dist/manager/session/turn-recorder.d.ts.map +1 -1
  184. package/dist/manager/session/turn-recorder.js +208 -55
  185. package/dist/manager/session/turn-recorder.js.map +1 -1
  186. package/dist/peers/address.d.ts +36 -0
  187. package/dist/peers/address.d.ts.map +1 -0
  188. package/dist/peers/address.js +52 -0
  189. package/dist/peers/address.js.map +1 -0
  190. package/dist/peers/client.d.ts +47 -0
  191. package/dist/peers/client.d.ts.map +1 -0
  192. package/dist/peers/client.js +132 -0
  193. package/dist/peers/client.js.map +1 -0
  194. package/dist/peers/dir.d.ts +88 -0
  195. package/dist/peers/dir.d.ts.map +1 -0
  196. package/dist/peers/dir.js +139 -0
  197. package/dist/peers/dir.js.map +1 -0
  198. package/dist/peers/endpoint.d.ts +144 -0
  199. package/dist/peers/endpoint.d.ts.map +1 -0
  200. package/dist/peers/endpoint.js +420 -0
  201. package/dist/peers/endpoint.js.map +1 -0
  202. package/dist/peers/envelope.d.ts +42 -0
  203. package/dist/peers/envelope.d.ts.map +1 -0
  204. package/dist/peers/envelope.js +110 -0
  205. package/dist/peers/envelope.js.map +1 -0
  206. package/dist/peers/index.d.ts +30 -0
  207. package/dist/peers/index.d.ts.map +1 -0
  208. package/dist/peers/index.js +22 -0
  209. package/dist/peers/index.js.map +1 -0
  210. package/dist/peers/protocol.d.ts +645 -0
  211. package/dist/peers/protocol.d.ts.map +1 -0
  212. package/dist/peers/protocol.js +151 -0
  213. package/dist/peers/protocol.js.map +1 -0
  214. package/dist/peers/record.d.ts +71 -0
  215. package/dist/peers/record.d.ts.map +1 -0
  216. package/dist/peers/record.js +45 -0
  217. package/dist/peers/record.js.map +1 -0
  218. package/dist/peers/registry.d.ts +54 -0
  219. package/dist/peers/registry.d.ts.map +1 -0
  220. package/dist/peers/registry.js +213 -0
  221. package/dist/peers/registry.js.map +1 -0
  222. package/dist/plugin/define.d.ts +24 -0
  223. package/dist/plugin/define.d.ts.map +1 -0
  224. package/dist/plugin/define.js +42 -0
  225. package/dist/plugin/define.js.map +1 -0
  226. package/dist/plugin/index.d.ts +2 -0
  227. package/dist/plugin/index.d.ts.map +1 -1
  228. package/dist/plugin/index.js +1 -0
  229. package/dist/plugin/index.js.map +1 -1
  230. package/dist/plugin/lifecycle.d.ts +27 -3
  231. package/dist/plugin/lifecycle.d.ts.map +1 -1
  232. package/dist/plugin/lifecycle.js +242 -92
  233. package/dist/plugin/lifecycle.js.map +1 -1
  234. package/dist/plugin/resolver.d.ts +2 -2
  235. package/dist/plugin/resolver.d.ts.map +1 -1
  236. package/dist/plugin/resolver.js.map +1 -1
  237. package/dist/plugin/shell-hook.d.ts.map +1 -1
  238. package/dist/plugin/shell-hook.js +17 -3
  239. package/dist/plugin/shell-hook.js.map +1 -1
  240. package/dist/probe/errors.d.ts +2 -1
  241. package/dist/probe/errors.d.ts.map +1 -1
  242. package/dist/probe/errors.js +3 -2
  243. package/dist/probe/errors.js.map +1 -1
  244. package/dist/prompt/coding-agent-doctrine.d.ts +18 -7
  245. package/dist/prompt/coding-agent-doctrine.d.ts.map +1 -1
  246. package/dist/prompt/coding-agent-doctrine.js +11 -6
  247. package/dist/prompt/coding-agent-doctrine.js.map +1 -1
  248. package/dist/prompt/contributions.d.ts +4 -1
  249. package/dist/prompt/contributions.d.ts.map +1 -1
  250. package/dist/prompt/contributions.js +7 -2
  251. package/dist/prompt/contributions.js.map +1 -1
  252. package/dist/prompt/index.d.ts +1 -1
  253. package/dist/prompt/index.d.ts.map +1 -1
  254. package/dist/prompt/index.js +1 -1
  255. package/dist/prompt/index.js.map +1 -1
  256. package/dist/provider/collect-chat-completion.d.ts +6 -1
  257. package/dist/provider/collect-chat-completion.d.ts.map +1 -1
  258. package/dist/provider/collect-chat-completion.js +88 -10
  259. package/dist/provider/collect-chat-completion.js.map +1 -1
  260. package/dist/provider/mock.d.ts.map +1 -1
  261. package/dist/provider/mock.js +23 -6
  262. package/dist/provider/mock.js.map +1 -1
  263. package/dist/provider/registry.d.ts +2 -1
  264. package/dist/provider/registry.d.ts.map +1 -1
  265. package/dist/provider/registry.js +3 -2
  266. package/dist/provider/registry.js.map +1 -1
  267. package/dist/provider/tool-call-framing.d.ts +164 -0
  268. package/dist/provider/tool-call-framing.d.ts.map +1 -0
  269. package/dist/provider/tool-call-framing.js +163 -0
  270. package/dist/provider/tool-call-framing.js.map +1 -0
  271. package/dist/public-runtime.d.ts +24 -11
  272. package/dist/public-runtime.d.ts.map +1 -1
  273. package/dist/public-runtime.js +45 -9
  274. package/dist/public-runtime.js.map +1 -1
  275. package/dist/public-tools.d.ts +6 -4
  276. package/dist/public-tools.d.ts.map +1 -1
  277. package/dist/public-tools.js +8 -3
  278. package/dist/public-tools.js.map +1 -1
  279. package/dist/public-types.d.ts +13 -2
  280. package/dist/public-types.d.ts.map +1 -1
  281. package/dist/read-model/registry.d.ts +2 -1
  282. package/dist/read-model/registry.d.ts.map +1 -1
  283. package/dist/read-model/registry.js +3 -2
  284. package/dist/read-model/registry.js.map +1 -1
  285. package/dist/registry/ManagedRegistry.d.ts +30 -0
  286. package/dist/registry/ManagedRegistry.d.ts.map +1 -1
  287. package/dist/registry/ManagedRegistry.js +45 -6
  288. package/dist/registry/ManagedRegistry.js.map +1 -1
  289. package/dist/registry/collision.d.ts +57 -0
  290. package/dist/registry/collision.d.ts.map +1 -0
  291. package/dist/registry/collision.js +41 -0
  292. package/dist/registry/collision.js.map +1 -0
  293. package/dist/registry/command/index.d.ts +5 -3
  294. package/dist/registry/command/index.d.ts.map +1 -1
  295. package/dist/registry/command/index.js +6 -4
  296. package/dist/registry/command/index.js.map +1 -1
  297. package/dist/registry/index.d.ts +3 -4
  298. package/dist/registry/index.d.ts.map +1 -1
  299. package/dist/registry/index.js +2 -2
  300. package/dist/registry/index.js.map +1 -1
  301. package/dist/registry/plugin/index.d.ts.map +1 -1
  302. package/dist/registry/plugin/index.js +14 -1
  303. package/dist/registry/plugin/index.js.map +1 -1
  304. package/dist/registry/tool/callable.d.ts +7 -7
  305. package/dist/registry/tool/callable.d.ts.map +1 -1
  306. package/dist/registry/tool/callable.js +6 -7
  307. package/dist/registry/tool/callable.js.map +1 -1
  308. package/dist/registry/tool/execute.d.ts +14 -77
  309. package/dist/registry/tool/execute.d.ts.map +1 -1
  310. package/dist/registry/tool/execute.js +15 -727
  311. package/dist/registry/tool/execute.js.map +1 -1
  312. package/dist/registry/tool/portable.d.ts +25 -0
  313. package/dist/registry/tool/portable.d.ts.map +1 -1
  314. package/dist/registry/tool/portable.js +50 -0
  315. package/dist/registry/tool/portable.js.map +1 -1
  316. package/dist/registry/tool/presentation.d.ts +6 -5
  317. package/dist/registry/tool/presentation.d.ts.map +1 -1
  318. package/dist/registry/tool/presentation.js +3 -3
  319. package/dist/registry/tool/presentation.js.map +1 -1
  320. package/dist/runtime/bidi/session.d.ts +5 -4
  321. package/dist/runtime/bidi/session.d.ts.map +1 -1
  322. package/dist/runtime/bidi/session.js +18 -1
  323. package/dist/runtime/bidi/session.js.map +1 -1
  324. package/dist/runtime/query/executor/tool-call-admission.d.ts +45 -2
  325. package/dist/runtime/query/executor/tool-call-admission.d.ts.map +1 -1
  326. package/dist/runtime/query/executor/tool-call-admission.js +189 -5
  327. package/dist/runtime/query/executor/tool-call-admission.js.map +1 -1
  328. package/dist/runtime/query/executor.d.ts +33 -3
  329. package/dist/runtime/query/executor.d.ts.map +1 -1
  330. package/dist/runtime/query/executor.js +86 -10
  331. package/dist/runtime/query/executor.js.map +1 -1
  332. package/dist/runtime/query/file-evidence-replay.d.ts +1 -1
  333. package/dist/runtime/query/file-evidence-replay.d.ts.map +1 -1
  334. package/dist/runtime/query/file-evidence-replay.js +8 -7
  335. package/dist/runtime/query/file-evidence-replay.js.map +1 -1
  336. package/dist/runtime/query/fork/prepare.d.ts +4 -1
  337. package/dist/runtime/query/fork/prepare.d.ts.map +1 -1
  338. package/dist/runtime/query/fork/prepare.js +4 -0
  339. package/dist/runtime/query/fork/prepare.js.map +1 -1
  340. package/dist/runtime/query/guardrail-presets.d.ts +4 -3
  341. package/dist/runtime/query/guardrail-presets.d.ts.map +1 -1
  342. package/dist/runtime/query/guardrail-presets.js +4 -3
  343. package/dist/runtime/query/guardrail-presets.js.map +1 -1
  344. package/dist/runtime/query/index.d.ts +23 -10
  345. package/dist/runtime/query/index.d.ts.map +1 -1
  346. package/dist/runtime/query/index.js +149 -70
  347. package/dist/runtime/query/index.js.map +1 -1
  348. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  349. package/dist/runtime/query/iteration/index.js +8 -1
  350. package/dist/runtime/query/iteration/index.js.map +1 -1
  351. package/dist/runtime/query/iteration/phases/compaction.js +1 -1
  352. package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
  353. package/dist/runtime/query/iteration/phases/context.d.ts +2 -2
  354. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  355. package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
  356. package/dist/runtime/query/iteration/phases/tool-review.js +55 -2
  357. package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
  358. package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -1
  359. package/dist/runtime/query/iteration/stream-turn.js +342 -116
  360. package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
  361. package/dist/runtime/query/iteration/tool-input.d.ts +79 -0
  362. package/dist/runtime/query/iteration/tool-input.d.ts.map +1 -0
  363. package/dist/runtime/query/iteration/tool-input.js +291 -0
  364. package/dist/runtime/query/iteration/tool-input.js.map +1 -0
  365. package/dist/runtime/query/observation-context.d.ts +2 -2
  366. package/dist/runtime/query/observation-context.d.ts.map +1 -1
  367. package/dist/runtime/query/observation-context.js.map +1 -1
  368. package/dist/runtime/query/prelude-lease.d.ts +18 -0
  369. package/dist/runtime/query/prelude-lease.d.ts.map +1 -0
  370. package/dist/runtime/query/prelude-lease.js +121 -0
  371. package/dist/runtime/query/prelude-lease.js.map +1 -0
  372. package/dist/runtime/query/prepare-turn.d.ts.map +1 -1
  373. package/dist/runtime/query/prepare-turn.js +386 -187
  374. package/dist/runtime/query/prepare-turn.js.map +1 -1
  375. package/dist/runtime/query/prompt-cache.d.ts +2 -2
  376. package/dist/runtime/query/prompt-cache.d.ts.map +1 -1
  377. package/dist/runtime/query/prompt.d.ts +2 -2
  378. package/dist/runtime/query/prompt.d.ts.map +1 -1
  379. package/dist/runtime/query/prompt.js +1 -1
  380. package/dist/runtime/query/prompt.js.map +1 -1
  381. package/dist/runtime/query/resume-session.d.ts.map +1 -1
  382. package/dist/runtime/query/resume-session.js +37 -2
  383. package/dist/runtime/query/resume-session.js.map +1 -1
  384. package/dist/runtime/query/review-policy.d.ts +22 -3
  385. package/dist/runtime/query/review-policy.d.ts.map +1 -1
  386. package/dist/runtime/query/review-policy.js +84 -6
  387. package/dist/runtime/query/review-policy.js.map +1 -1
  388. package/dist/runtime/query/tooling.d.ts +3 -2
  389. package/dist/runtime/query/tooling.d.ts.map +1 -1
  390. package/dist/runtime/query/tooling.js.map +1 -1
  391. package/dist/runtime/query/turn-state.d.ts.map +1 -1
  392. package/dist/runtime/query/turn-state.js +5 -0
  393. package/dist/runtime/query/turn-state.js.map +1 -1
  394. package/dist/runtime/system-events.d.ts +112 -0
  395. package/dist/runtime/system-events.d.ts.map +1 -0
  396. package/dist/runtime/system-events.js +183 -0
  397. package/dist/runtime/system-events.js.map +1 -0
  398. package/dist/scheduler/delegating.d.ts +2 -1
  399. package/dist/scheduler/delegating.d.ts.map +1 -1
  400. package/dist/scheduler/delegating.js +3 -2
  401. package/dist/scheduler/delegating.js.map +1 -1
  402. package/dist/scheduler/local.d.ts.map +1 -1
  403. package/dist/scheduler/local.js +2 -0
  404. package/dist/scheduler/local.js.map +1 -1
  405. package/dist/session/retention/archive.js +1 -1
  406. package/dist/session/retention/archive.js.map +1 -1
  407. package/dist/skills/index.d.ts +1 -1
  408. package/dist/skills/index.d.ts.map +1 -1
  409. package/dist/skills/index.js +1 -1
  410. package/dist/skills/index.js.map +1 -1
  411. package/dist/skills/registry.d.ts +12 -0
  412. package/dist/skills/registry.d.ts.map +1 -1
  413. package/dist/skills/registry.js +19 -0
  414. package/dist/skills/registry.js.map +1 -1
  415. package/dist/store/evidence/index-page.d.ts +2 -2
  416. package/dist/store/session/disk.d.ts.map +1 -1
  417. package/dist/store/session/disk.js +2 -0
  418. package/dist/store/session/disk.js.map +1 -1
  419. package/dist/store/session-log/conformance.d.ts +1 -1
  420. package/dist/store/session-log/conformance.d.ts.map +1 -1
  421. package/dist/store/session-log/conformance.js +49 -8
  422. package/dist/store/session-log/conformance.js.map +1 -1
  423. package/dist/store/session-log/core.d.ts +8 -3
  424. package/dist/store/session-log/core.d.ts.map +1 -1
  425. package/dist/store/session-log/core.js +2 -1
  426. package/dist/store/session-log/core.js.map +1 -1
  427. package/dist/store/session-log/fold.d.ts +12 -0
  428. package/dist/store/session-log/fold.d.ts.map +1 -1
  429. package/dist/store/session-log/fold.js +57 -7
  430. package/dist/store/session-log/fold.js.map +1 -1
  431. package/dist/store/session-log/index.d.ts +2 -2
  432. package/dist/store/session-log/index.d.ts.map +1 -1
  433. package/dist/store/session-log/index.js +1 -1
  434. package/dist/store/session-log/index.js.map +1 -1
  435. package/dist/test-support/toolset.d.ts +19 -0
  436. package/dist/test-support/toolset.d.ts.map +1 -0
  437. package/dist/test-support/toolset.js +20 -0
  438. package/dist/test-support/toolset.js.map +1 -0
  439. package/dist/tools/builtins/bash.d.ts +29 -0
  440. package/dist/tools/builtins/bash.d.ts.map +1 -1
  441. package/dist/tools/builtins/bash.js +19 -9
  442. package/dist/tools/builtins/bash.js.map +1 -1
  443. package/dist/tools/builtins/browser-url.d.ts +1 -1
  444. package/dist/tools/builtins/browser-url.js +1 -1
  445. package/dist/tools/builtins/browser.d.ts +6 -6
  446. package/dist/tools/builtins/browser.js +2 -2
  447. package/dist/tools/builtins/browser.js.map +1 -1
  448. package/dist/tools/builtins/computer-use.d.ts.map +1 -1
  449. package/dist/tools/builtins/computer-use.js +19 -11
  450. package/dist/tools/builtins/computer-use.js.map +1 -1
  451. package/dist/tools/builtins/edit.d.ts.map +1 -1
  452. package/dist/tools/builtins/edit.js +9 -1
  453. package/dist/tools/builtins/edit.js.map +1 -1
  454. package/dist/tools/builtins/json-string-hint.d.ts +15 -0
  455. package/dist/tools/builtins/json-string-hint.d.ts.map +1 -0
  456. package/dist/tools/builtins/json-string-hint.js +17 -0
  457. package/dist/tools/builtins/json-string-hint.js.map +1 -0
  458. package/dist/tools/builtins/search-tools.d.ts.map +1 -1
  459. package/dist/tools/builtins/search-tools.js +7 -15
  460. package/dist/tools/builtins/search-tools.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 +10 -0
  482. package/dist/tools/defineTool.d.ts.map +1 -1
  483. package/dist/tools/defineTool.js +17 -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/schedule-tool.d.ts.map +1 -1
  500. package/dist/tools/schedules/schedule-tool.js +94 -14
  501. package/dist/tools/schedules/schedule-tool.js.map +1 -1
  502. package/dist/tools/schedules/types.d.ts +52 -6
  503. package/dist/tools/schedules/types.d.ts.map +1 -1
  504. package/dist/tools/trusted-read-only.d.ts +9 -5
  505. package/dist/tools/trusted-read-only.d.ts.map +1 -1
  506. package/dist/tools/trusted-read-only.js +14 -10
  507. package/dist/tools/trusted-read-only.js.map +1 -1
  508. package/dist/tools/untrusted-envelope.d.ts +67 -28
  509. package/dist/tools/untrusted-envelope.d.ts.map +1 -1
  510. package/dist/tools/untrusted-envelope.js +108 -59
  511. package/dist/tools/untrusted-envelope.js.map +1 -1
  512. package/dist/toolsets/combine.d.ts +44 -0
  513. package/dist/toolsets/combine.d.ts.map +1 -0
  514. package/dist/toolsets/combine.js +153 -0
  515. package/dist/toolsets/combine.js.map +1 -0
  516. package/dist/toolsets/manager.d.ts +201 -0
  517. package/dist/toolsets/manager.d.ts.map +1 -0
  518. package/dist/toolsets/manager.js +837 -0
  519. package/dist/toolsets/manager.js.map +1 -0
  520. package/dist/toolsets/source-glob.d.ts +15 -0
  521. package/dist/toolsets/source-glob.d.ts.map +1 -0
  522. package/dist/toolsets/source-glob.js +23 -0
  523. package/dist/toolsets/source-glob.js.map +1 -0
  524. package/dist/toolsets/toolset.d.ts +20 -0
  525. package/dist/toolsets/toolset.d.ts.map +1 -0
  526. package/dist/toolsets/toolset.js +28 -0
  527. package/dist/toolsets/toolset.js.map +1 -0
  528. package/dist/toolsets/types.d.ts +128 -0
  529. package/dist/toolsets/types.d.ts.map +1 -0
  530. package/dist/toolsets/types.js +33 -0
  531. package/dist/toolsets/types.js.map +1 -0
  532. package/dist/toolsets/wrappers.d.ts +59 -0
  533. package/dist/toolsets/wrappers.d.ts.map +1 -0
  534. package/dist/toolsets/wrappers.js +165 -0
  535. package/dist/toolsets/wrappers.js.map +1 -0
  536. package/dist/types/agent/base.d.ts +27 -16
  537. package/dist/types/agent/base.d.ts.map +1 -1
  538. package/dist/types/agent/index.d.ts +1 -0
  539. package/dist/types/agent/index.d.ts.map +1 -1
  540. package/dist/types/agent/index.js +1 -0
  541. package/dist/types/agent/index.js.map +1 -1
  542. package/dist/types/agent/pipeline.d.ts +2 -0
  543. package/dist/types/agent/pipeline.d.ts.map +1 -1
  544. package/dist/types/agent/query.d.ts +117 -0
  545. package/dist/types/agent/query.d.ts.map +1 -0
  546. package/dist/types/agent/query.js +2 -0
  547. package/dist/types/agent/query.js.map +1 -0
  548. package/dist/types/agent/reactive.d.ts +2 -129
  549. package/dist/types/agent/reactive.d.ts.map +1 -1
  550. package/dist/types/agent/router.d.ts +2 -0
  551. package/dist/types/agent/router.d.ts.map +1 -1
  552. package/dist/types/agent/scheduler.d.ts +6 -1
  553. package/dist/types/agent/scheduler.d.ts.map +1 -1
  554. package/dist/types/agent/supervisor.d.ts +5 -2
  555. package/dist/types/agent/supervisor.d.ts.map +1 -1
  556. package/dist/types/agent/task.d.ts +19 -1
  557. package/dist/types/agent/task.d.ts.map +1 -1
  558. package/dist/types/agent/task.js.map +1 -1
  559. package/dist/types/authorization/index.d.ts +49 -12
  560. package/dist/types/authorization/index.d.ts.map +1 -1
  561. package/dist/types/authorization/index.js +6 -0
  562. package/dist/types/authorization/index.js.map +1 -1
  563. package/dist/types/connector/mcp.d.ts +45 -0
  564. package/dist/types/connector/mcp.d.ts.map +1 -1
  565. package/dist/types/errors/index.d.ts +15 -0
  566. package/dist/types/errors/index.d.ts.map +1 -1
  567. package/dist/types/errors/index.js.map +1 -1
  568. package/dist/types/hitl/index.d.ts +57 -0
  569. package/dist/types/hitl/index.d.ts.map +1 -1
  570. package/dist/types/hitl/index.js.map +1 -1
  571. package/dist/types/message/index.d.ts +130 -9
  572. package/dist/types/message/index.d.ts.map +1 -1
  573. package/dist/types/message/index.js +4 -1
  574. package/dist/types/message/index.js.map +1 -1
  575. package/dist/types/plugin/index.d.ts +22 -4
  576. package/dist/types/plugin/index.d.ts.map +1 -1
  577. package/dist/types/plugin/index.js +1 -0
  578. package/dist/types/plugin/index.js.map +1 -1
  579. package/dist/types/provider/chat.d.ts +5 -0
  580. package/dist/types/provider/chat.d.ts.map +1 -1
  581. package/dist/types/provider/config.d.ts +8 -3
  582. package/dist/types/provider/config.d.ts.map +1 -1
  583. package/dist/types/provider/stream.d.ts +39 -0
  584. package/dist/types/provider/stream.d.ts.map +1 -1
  585. package/dist/types/sandbox/index.d.ts +1 -1
  586. package/dist/types/session/events.d.ts +14 -3
  587. package/dist/types/session/events.d.ts.map +1 -1
  588. package/dist/types/session/events.js.map +1 -1
  589. package/dist/types/session/sub-session.d.ts +2 -0
  590. package/dist/types/session/sub-session.d.ts.map +1 -1
  591. package/dist/types/tool/index.d.ts +152 -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 +1 -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 +21 -1
  616. package/src/authorization/program.ts +773 -0
  617. package/src/authorization/reexec-wrapper.ts +589 -0
  618. package/src/authorization/rules.ts +18 -1
  619. package/src/authorization/shell-lexer.ts +104 -59
  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 +73 -3
  625. package/src/connector/mcp/client.ts +425 -6
  626. package/src/connector/mcp/discovery.ts +60 -0
  627. package/src/connector/mcp/era.ts +7 -0
  628. package/src/connector/mcp/index.ts +13 -0
  629. package/src/connector/mcp/mcp-toolset.ts +515 -0
  630. package/src/connector/mcp/streamable-http.ts +302 -5
  631. package/src/connector/tools/index.ts +2 -2
  632. package/src/connector/tools/router.ts +35 -58
  633. package/src/directory/derive-supervisor.ts +12 -8
  634. package/src/directory/derive.ts +8 -5
  635. package/src/execution/code-runtime/types.ts +2 -2
  636. package/src/invariants/index.ts +4 -1
  637. package/src/manager/agent/lifecycle.ts +167 -19
  638. package/src/manager/connector/environment.ts +17 -4
  639. package/src/manager/connector/index.ts +2 -2
  640. package/src/manager/connector/tenant.ts +17 -4
  641. package/src/manager/index.ts +2 -2
  642. package/src/manager/session/attribution.ts +79 -0
  643. package/src/manager/session/turn-recorder.ts +211 -55
  644. package/src/peers/address.ts +58 -0
  645. package/src/peers/client.ts +202 -0
  646. package/src/peers/dir.ts +176 -0
  647. package/src/peers/endpoint.ts +564 -0
  648. package/src/peers/envelope.ts +121 -0
  649. package/src/peers/index.ts +96 -0
  650. package/src/peers/protocol.ts +196 -0
  651. package/src/peers/record.ts +56 -0
  652. package/src/peers/registry.ts +241 -0
  653. package/src/plugin/define.ts +68 -0
  654. package/src/plugin/index.ts +2 -0
  655. package/src/plugin/lifecycle.ts +286 -106
  656. package/src/plugin/resolver.ts +6 -3
  657. package/src/plugin/shell-hook.ts +21 -5
  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 +136 -7
  667. package/src/public-tools.ts +24 -4
  668. package/src/public-types.ts +60 -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 +8 -9
  676. package/src/registry/tool/execute.ts +16 -846
  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 +228 -6
  681. package/src/runtime/query/executor.ts +110 -12
  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 +87 -9
  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/scheduler/local.ts +2 -0
  704. package/src/session/retention/archive.ts +1 -1
  705. package/src/skills/index.ts +1 -1
  706. package/src/skills/registry.ts +25 -0
  707. package/src/store/session/disk.ts +3 -0
  708. package/src/store/session-log/conformance.ts +51 -8
  709. package/src/store/session-log/core.ts +10 -4
  710. package/src/store/session-log/fold.ts +33 -7
  711. package/src/store/session-log/index.ts +2 -0
  712. package/src/test-support/toolset.ts +23 -0
  713. package/src/tools/builtins/bash.ts +27 -10
  714. package/src/tools/builtins/browser-url.ts +1 -1
  715. package/src/tools/builtins/browser.ts +2 -2
  716. package/src/tools/builtins/computer-use.ts +21 -11
  717. package/src/tools/builtins/edit.ts +12 -2
  718. package/src/tools/builtins/json-string-hint.ts +16 -0
  719. package/src/tools/builtins/search-tools.ts +7 -20
  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 +28 -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/schedule-tool.ts +107 -14
  732. package/src/tools/schedules/types.ts +52 -6
  733. package/src/tools/trusted-read-only.ts +19 -10
  734. package/src/tools/untrusted-envelope.ts +121 -57
  735. package/src/toolsets/combine.ts +181 -0
  736. package/src/toolsets/manager.ts +996 -0
  737. package/src/toolsets/source-glob.ts +22 -0
  738. package/src/toolsets/toolset.ts +31 -0
  739. package/src/toolsets/types.ts +154 -0
  740. package/src/toolsets/wrappers.ts +191 -0
  741. package/src/types/agent/base.ts +29 -16
  742. package/src/types/agent/index.ts +1 -0
  743. package/src/types/agent/pipeline.ts +2 -0
  744. package/src/types/agent/query.ts +129 -0
  745. package/src/types/agent/reactive.ts +5 -142
  746. package/src/types/agent/router.ts +2 -0
  747. package/src/types/agent/scheduler.ts +6 -1
  748. package/src/types/agent/supervisor.ts +5 -2
  749. package/src/types/agent/task.ts +21 -1
  750. package/src/types/authorization/index.ts +12 -0
  751. package/src/types/connector/mcp.ts +46 -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/session/sub-session.ts +2 -0
  762. package/src/types/tool/index.ts +154 -105
  763. package/src/types/toolset/index.ts +10 -47
  764. package/dist/registry/toolset/catalog.d.ts +0 -42
  765. package/dist/registry/toolset/catalog.d.ts.map +0 -1
  766. package/dist/registry/toolset/catalog.js +0 -234
  767. package/dist/registry/toolset/catalog.js.map +0 -1
  768. package/src/registry/toolset/catalog.ts +0 -308
@@ -1,46 +1,97 @@
1
1
  /**
2
- * Narrower rosters from a wider one.
2
+ * Selecting a narrower roster of tools from a wider one.
3
3
  *
4
- * A delegate that can only look, or a file-defined agent with an allowlist,
5
- * needs a registry that is the parent's minus something — and every host
6
- * that builds delegates wrote the same two loops. They live here so the
7
- * predicate for "read-only" is the one the authorization gate and the
8
- * prompt exemption already use (`isTrustedReadOnly`), not a third reading
9
- * of the same flag.
4
+ * `filterReadOnlyTools`/`filterToolsNamed` (a registry-shaped "copy the
5
+ * matching subset into a new one") are gone (plan.md v3 §8, a break): a
6
+ * toolset's own `filtered(ts, selector)` (`toolsets/wrappers.ts`) replaces
7
+ * both — `filtered(ts, (tool, source) => isTrustedReadOnly(tool, undefined, source))`
8
+ * for the read-only case, `filtered(ts, names)` for the name-list case —
9
+ * and, unlike the old registry-level copy, it keeps the inner toolset's
10
+ * `availability` and stays live over a live source instead of freezing a
11
+ * snapshot at filter time.
10
12
  *
11
- * Both filters INTERSECT: a name in an allowlist that the source does not
12
- * carry is simply not there. A filter can never widen.
13
+ * **Filter each contributing toolset, then combine — never the reverse.**
14
+ * `filtered`'s predicate reads `source` from the ONE toolset it is called
15
+ * on (`ToolPredicate`, `toolsets/types.ts`). Call it on a wide toolset
16
+ * `combineToolsets` already merged from several sources and `source` is
17
+ * the merge's own umbrella source, not any one contributor's — so a
18
+ * predicate built to keep only trusted-read-only tools would keep an
19
+ * untrusted MCP server's tool too, because it never sees that server's
20
+ * source. Filter each source's toolset on its own, THEN combine the
21
+ * filtered results:
22
+ *
23
+ * const readOnlyOnly = parentToolsets.map((ts) =>
24
+ * filtered(ts, (tool, source) => isTrustedReadOnly(tool, undefined, source)),
25
+ * )
26
+ * // readOnlyOnly: readonly Toolset[], hand it to a child ToolManager
27
+ * // directly, or combineToolsets(...) it if the caller needs one Toolset.
13
28
  */
14
29
 
15
- import { ToolRegistry } from '../registry/tool/execute.js'
16
- import type { ToolRegistryContract } from '../types/tool/index.js'
17
- import { isTrustedReadOnly } from './trusted-read-only.js'
30
+ import type { ToolDefinition } from '../types/tool/index.js'
18
31
 
19
32
  /**
20
- * The tools that declare themselves read-only and are trusted to say so.
33
+ * How a capability, toolset wrapper or host names the tools it wants,
34
+ * without maintaining a parallel name list of its own:
35
+ *
36
+ * - a list of exact tool names;
37
+ * - a partial match against `ToolDefinition.metadata` — every key the
38
+ * selector names must be present, with a deep-equal value (a nested plain
39
+ * object recurses the same way); a key the tool's metadata does not carry,
40
+ * or carries a different value for, fails the match. An empty object
41
+ * selector matches every tool;
42
+ * - a predicate, for anything the two shapes above cannot express.
21
43
  *
22
- * Decided by `isTrustedReadOnly` with no input, which is each tool's own
23
- * declaration: a new read-only builtin joins the roster without this file
24
- * learning its name, and a connected server's tool that merely CLAIMS to be
25
- * read-only stays out unless its provenance is trusted.
44
+ * Synchronous only, unlike some other agent frameworks' equivalent selector
45
+ * type (which also allow an async predicate): every place namzu filters a
46
+ * roster today does so synchronously, and an `Awaitable` branch nothing
47
+ * calls is a surface with nothing to test.
26
48
  */
27
- export function filterReadOnlyTools(source: ToolRegistryContract): ToolRegistry {
28
- const filtered = new ToolRegistry()
29
- for (const tool of source.getAll()) {
30
- if (isTrustedReadOnly(tool, undefined)) filtered.register(tool)
31
- }
32
- return filtered
49
+ export type ToolSelector =
50
+ | readonly string[]
51
+ | Readonly<Record<string, unknown>>
52
+ | ((tool: ToolDefinition) => boolean)
53
+
54
+ function isPlainObject(value: unknown): value is Readonly<Record<string, unknown>> {
55
+ return typeof value === 'object' && value !== null && !Array.isArray(value)
33
56
  }
34
57
 
35
- /** The tools whose names are listed. Names the source does not carry are ignored. */
36
- export function filterToolsNamed(
37
- source: ToolRegistryContract,
38
- names: Iterable<string>,
39
- ): ToolRegistry {
40
- const allowed = new Set(names)
41
- const filtered = new ToolRegistry()
42
- for (const tool of source.getAll()) {
43
- if (allowed.has(tool.name)) filtered.register(tool)
58
+ function deepEqual(a: unknown, b: unknown): boolean {
59
+ if (Object.is(a, b)) return true
60
+ if (Array.isArray(a) && Array.isArray(b)) {
61
+ return a.length === b.length && a.every((v, i) => deepEqual(v, b[i]))
62
+ }
63
+ if (isPlainObject(a) && isPlainObject(b)) {
64
+ const keysA = Object.keys(a)
65
+ const keysB = Object.keys(b)
66
+ return keysA.length === keysB.length && keysA.every((key) => deepEqual(a[key], b[key]))
44
67
  }
45
- return filtered
68
+ return false
69
+ }
70
+
71
+ /** Every key `expected` names is present in `actual` with a deep-equal value. */
72
+ function metadataIncludes(
73
+ actual: Readonly<Record<string, unknown>> | undefined,
74
+ expected: Readonly<Record<string, unknown>>,
75
+ ): boolean {
76
+ const keys = Object.keys(expected)
77
+ if (keys.length === 0) return true
78
+ if (!actual) return false
79
+ return keys.every((key) => {
80
+ const expectedValue = expected[key]
81
+ const actualValue = actual[key]
82
+ return isPlainObject(expectedValue) && isPlainObject(actualValue)
83
+ ? metadataIncludes(actualValue, expectedValue)
84
+ : deepEqual(actualValue, expectedValue)
85
+ })
86
+ }
87
+
88
+ /**
89
+ * Whether `tool` matches `selector`: a name list, a metadata deep-match, or a
90
+ * predicate — see {@link ToolSelector}. Never reads anything but `tool.name`
91
+ * and `tool.metadata`, so it never sees a tool's schema or execution.
92
+ */
93
+ export function matchesToolSelector(selector: ToolSelector, tool: ToolDefinition): boolean {
94
+ if (typeof selector === 'function') return selector(tool)
95
+ if (Array.isArray(selector)) return selector.includes(tool.name)
96
+ return metadataIncludes(tool.metadata, selector as Readonly<Record<string, unknown>>)
46
97
  }
@@ -9,6 +9,7 @@ import type {
9
9
  ScheduleBrowserSiteLevel,
10
10
  ScheduleJobChanges,
11
11
  ScheduleJobDraft,
12
+ ScheduleJobSummary,
12
13
  ScheduleJobUpdateProposal,
13
14
  ScheduleToolHost,
14
15
  } from './types.js'
@@ -42,12 +43,30 @@ const inputSchema = z.object({
42
43
  .regex(/^[a-z0-9][a-z0-9-]{0,62}$/)
43
44
  .optional()
44
45
  .describe('create: job name, lowercase letters, digits and dashes'),
46
+ kind: z
47
+ .enum(['agent', 'script', 'script+agent'])
48
+ .optional()
49
+ .describe(
50
+ 'create: what the run does. agent (default): the model runs prompt. script: a fixed shell script runs unattended, no model call, no prompt. script+agent: a cheap gate script decides whether to wake the model; wake:false costs nothing. Prefer script/script+agent for a fixed, deterministic check that would otherwise cost tokens for no reason.',
51
+ ),
52
+ script: z
53
+ .object({
54
+ body: z.string().min(1).describe('The exact script text, run verbatim once confirmed'),
55
+ shell: z.enum(['bash', 'sh']).describe('Which shell reads it; no default'),
56
+ timeoutMs: z.number().int().positive().optional().describe('The script’s own wall clock'),
57
+ })
58
+ .optional()
59
+ .describe(
60
+ 'create: required when kind is script or script+agent. For script+agent this is the wake-gate: its stdout must be exactly one JSON line, {"wake": boolean, "context": string}.',
61
+ ),
45
62
  prompt: z
46
63
  .string()
47
64
  .min(1)
48
65
  .max(20_000)
49
66
  .optional()
50
- .describe('create, update: what the run is asked to do'),
67
+ .describe(
68
+ 'create, update: what the model run is asked to do. Required for agent and script+agent; refused for a pure script. For script+agent this is handed to the model only when the wake-gate says wake: true.',
69
+ ),
51
70
  when: z
52
71
  .string()
53
72
  .optional()
@@ -101,7 +120,7 @@ const inputSchema = z.object({
101
120
  })
102
121
  .optional()
103
122
  .describe(
104
- 'create: REQUIRED explicit permission set; there is no default. update: the whole new set, only when the permissions change',
123
+ 'create: REQUIRED explicit permission set; there is no default. A pure script cannot use a browser grant. update: the whole new set, only when the permissions change',
105
124
  ),
106
125
  budget: z
107
126
  .object({
@@ -126,10 +145,12 @@ const inputSchema = z.object({
126
145
  .int()
127
146
  .positive()
128
147
  .optional()
129
- .describe('Wall clock of one run, in milliseconds'),
148
+ .describe('Wall clock of one agent phase, in milliseconds'),
130
149
  })
131
150
  .optional()
132
- .describe('Limits of ONE run; omit to use the defaults'),
151
+ .describe(
152
+ 'Agent-phase limits; omit to use the defaults. Refused for a pure script; use script.timeoutMs instead.',
153
+ ),
133
154
  job: z.string().optional().describe('update/pause/resume/delete: job name'),
134
155
  allFolders: z.boolean().optional().describe('list: include jobs of other folders (names only)'),
135
156
  })
@@ -150,6 +171,14 @@ function effectsOf(rule: unknown): string[] {
150
171
  * Refuse a network tool beside a shell that runs on the host: a scheduled run
151
172
  * that can both read the machine and reach the internet, unattended, is the
152
173
  * exfiltration shape, and only the operator can choose it.
174
+ *
175
+ * For `runKind: 'script'`/`'script+agent'` the "shell" isn't a rule the model
176
+ * could reach at some later live call — it's the confirmed script's own
177
+ * body, which unconditionally runs shell commands whenever it runs at all.
178
+ * The `bash` rule heuristic below answers a question ("could a live call
179
+ * reach bash") that isn't the one being asked here, so a script/script+agent
180
+ * job on the host is treated as reaching a shell outright, whatever its
181
+ * rules say about `bash`.
153
182
  */
154
183
  function networkWithHostShell(draft: ScheduleJobDraft): boolean {
155
184
  const rules = draft.permissions.rules ?? {}
@@ -157,6 +186,8 @@ function networkWithHostShell(draft: ScheduleJobDraft): boolean {
157
186
  draft.permissions.browser !== undefined ||
158
187
  NETWORK_TOOLS.some((t) => effectsOf(rules[t]).some((e) => e === 'allow' || e === 'ask'))
159
188
  if (!network) return false
189
+ const onHost = (draft.permissions.execution ?? 'host') === 'host'
190
+ if ((draft.runKind ?? 'agent') !== 'agent') return onHost
160
191
  const bashEffects = effectsOf(rules.bash)
161
192
  // The read-only preset denies bash; its rules are expanded by the host,
162
193
  // so the draft carries only its name.
@@ -164,7 +195,7 @@ function networkWithHostShell(draft: ScheduleJobDraft): boolean {
164
195
  bashEffects.length > 0
165
196
  ? bashEffects.some((e) => e !== 'deny')
166
197
  : draft.permissions.preset !== 'read-only' && draft.permissions.unmatched !== 'deny'
167
- return shellPossible && (draft.permissions.execution ?? 'host') === 'host'
198
+ return shellPossible && onHost
168
199
  }
169
200
 
170
201
  /**
@@ -246,21 +277,38 @@ async function create(
246
277
  input: Input,
247
278
  signal: AbortSignal | undefined,
248
279
  ): Promise<ToolResult> {
249
- const missing = (['name', 'prompt', 'when', 'permissions'] as const).filter(
280
+ const runKind = input.kind ?? 'agent'
281
+ const required: string[] = (['name', 'when', 'permissions'] as const).filter(
250
282
  (k) => input[k] === undefined,
251
283
  )
252
- if (missing.length > 0) {
284
+ if (runKind !== 'script' && input.prompt === undefined) required.push('prompt')
285
+ if (runKind !== 'agent' && input.script === undefined) required.push('script')
286
+ if (required.length > 0) {
253
287
  return refuse(
254
- `create needs ${missing.join(', ')}. permissions is required: propose an explicit set (a preset and/or rules, plus unmatched).`,
288
+ `create needs ${required.join(', ')}. permissions is required: propose an explicit set (a preset and/or rules, plus unmatched).`,
255
289
  )
256
290
  }
291
+ if (runKind === 'agent' && input.script !== undefined) {
292
+ return refuse('an agent job has no script; omit kind (or set it to agent) to use one')
293
+ }
294
+ if (runKind === 'script' && input.prompt !== undefined)
295
+ return refuse('a pure script job has no prompt; remove prompt')
296
+ if (runKind === 'script' && input.budget !== undefined) {
297
+ return refuse(
298
+ 'a pure script job has no agent budget; remove budget and use script.timeoutMs for its timeout',
299
+ )
300
+ }
301
+ if (runKind === 'script' && input.permissions?.browser !== undefined)
302
+ return refuse('a pure script job cannot use a browser grant; remove permissions.browser')
257
303
  const checked = checkPermissions(host, input.permissions as NonNullable<Input['permissions']>)
258
304
  if (!checked.ok) return refuse(checked.error)
259
305
  const permissions = checked.permissions
260
306
  const draft: ScheduleJobDraft = {
261
307
  name: input.name as string,
262
- prompt: input.prompt as string,
263
308
  when: input.when as string,
309
+ ...(runKind !== 'agent' ? { runKind } : {}),
310
+ ...(input.script ? { script: input.script } : {}),
311
+ ...(input.prompt !== undefined ? { prompt: input.prompt } : {}),
264
312
  ...(input.folder !== undefined ? { folder: input.folder } : {}),
265
313
  ...(input.tz !== undefined ? { tz: input.tz } : {}),
266
314
  permissions,
@@ -302,7 +350,9 @@ async function create(
302
350
  const said =
303
351
  answer === 'create-paused'
304
352
  ? `Job "${created.name}" was created paused. The operator can resume it with /schedule.`
305
- : `Job "${created.name}" was created. It runs ${preview.schedule}, with nobody watching; results arrive as a notification and a session.`
353
+ : runKind === 'script'
354
+ ? `Job "${created.name}" was created. It runs ${preview.schedule}, with nobody watching; results are recorded in its history and may arrive as a notification. It creates no session.`
355
+ : `Job "${created.name}" was created. It runs ${preview.schedule}, with nobody watching; results arrive as a notification and a session.`
306
356
  return {
307
357
  success: true,
308
358
  output: created.note ? `${said} ${created.note}` : said,
@@ -311,7 +361,12 @@ async function create(
311
361
  }
312
362
 
313
363
  async function list(host: ScheduleToolHost, input: Input): Promise<ToolResult> {
314
- const jobs = await host.list({ allFolders: input.allFolders === true })
364
+ let jobs: readonly ScheduleJobSummary[]
365
+ try {
366
+ jobs = await host.list({ allFolders: input.allFolders === true })
367
+ } catch (error) {
368
+ return refuse(error instanceof Error ? error.message : String(error))
369
+ }
315
370
  if (jobs.length === 0) return { success: true, output: 'No scheduled jobs.', data: { jobs: [] } }
316
371
  const lines = jobs.map(
317
372
  (j) =>
@@ -321,7 +376,16 @@ async function list(host: ScheduleToolHost, input: Input): Promise<ToolResult> {
321
376
  }
322
377
 
323
378
  /** The fields `update` may change, as the model set them. */
324
- const CHANGEABLE = ['prompt', 'when', 'folder', 'tz', 'permissions', 'budget'] as const
379
+ const CHANGEABLE = [
380
+ 'prompt',
381
+ 'when',
382
+ 'folder',
383
+ 'tz',
384
+ 'permissions',
385
+ 'budget',
386
+ 'kind',
387
+ 'script',
388
+ ] as const
325
389
 
326
390
  async function update(
327
391
  host: ScheduleToolHost,
@@ -343,12 +407,31 @@ async function update(
343
407
  if (given.length === 0) {
344
408
  return refuse(`update needs at least one of ${CHANGEABLE.join(', ')} to change.`)
345
409
  }
410
+ if (input.kind === 'agent' && input.script !== undefined) {
411
+ return refuse(
412
+ 'update cannot set kind to agent while also giving a script; drop script to make it an agent job, or leave kind unset (or as script/script+agent) to keep one.',
413
+ )
414
+ }
346
415
  let permissions: ScheduleJobDraft['permissions'] | undefined
347
416
  if (input.permissions) {
348
417
  const checked = checkPermissions(host, input.permissions)
349
418
  if (!checked.ok) return refuse(checked.error)
350
419
  permissions = checked.permissions
351
- if (networkWithHostShell({ name: '', prompt: '', when: '', permissions }))
420
+ // The same guard `create` applies, against whatever THIS call
421
+ // changes: a kind given here is read too, since a script/script+agent
422
+ // job is refused this combination even where an agent job is not (no
423
+ // live turn reviews a script's calls one at a time). A kind changed
424
+ // with the existing permissions is checked on the effective preview
425
+ // after the host has applied all changes below.
426
+ if (
427
+ networkWithHostShell({
428
+ name: '',
429
+ prompt: '',
430
+ when: '',
431
+ ...(input.kind !== undefined ? { runKind: input.kind } : {}),
432
+ permissions,
433
+ })
434
+ )
352
435
  return refuse(NETWORK_WITH_HOST_SHELL)
353
436
  }
354
437
  const changes: ScheduleJobChanges = {
@@ -358,6 +441,8 @@ async function update(
358
441
  ...(input.tz !== undefined ? { tz: input.tz } : {}),
359
442
  ...(permissions ? { permissions } : {}),
360
443
  ...(input.budget ? { budget: input.budget } : {}),
444
+ ...(input.kind !== undefined ? { runKind: input.kind } : {}),
445
+ ...(input.script !== undefined ? { script: input.script } : {}),
361
446
  }
362
447
  let proposal: ScheduleJobUpdateProposal
363
448
  try {
@@ -365,6 +450,14 @@ async function update(
365
450
  } catch (error) {
366
451
  return refuse(error instanceof Error ? error.message : String(error))
367
452
  }
453
+ const effectiveKind = input.kind ?? proposal.preview.runKind ?? 'agent'
454
+ if (
455
+ (effectiveKind === 'script' || effectiveKind === 'script+agent') &&
456
+ proposal.preview.execution === 'host' &&
457
+ (proposal.preview.networkGrantAccess ?? proposal.preview.networkAccess)
458
+ ) {
459
+ return refuse(NETWORK_WITH_HOST_SHELL)
460
+ }
368
461
  let confirmed = false
369
462
  try {
370
463
  confirmed = await host.confirmUpdate(
@@ -450,7 +543,7 @@ export function buildScheduleTools(host: ScheduleToolHost): ToolDefinition[] {
450
543
  defineTool({
451
544
  name: SCHEDULE_TOOL_NAME,
452
545
  description:
453
- "Manage the operator's scheduled jobs: prompts that run later in a folder, with nobody watching, under an explicit permission set. Use it only when the user asks for something to happen on a schedule. create, update, resume and delete are confirmed by the operator; pause is not. A job needs name, prompt, when and permissions (unmatched: park or deny, plus a preset, rules or a browser grant). To change a job, update it with job and only the fields that change; do not delete and recreate it. Leave every other field (folder, tz, execution, budget, headed) unset unless the user asked for it: the defaults are the operator's, and the confirmation marks each value you chose. Scheduled runs cannot ask questions.",
546
+ "Manage the operator's scheduled jobs: model prompts or fixed scripts that run later in a folder, with nobody watching, under an explicit permission set. Use it only when the user asks for something to happen on a schedule. create, update, resume and delete are confirmed by the operator; pause is not. A job needs name, when and permissions (unmatched: park or deny, plus a preset, rules or a browser grant). agent and script+agent also need prompt; script and script+agent also need script. A pure script has no prompt, model, agent budget, browser grant or session; set script.timeoutMs to limit it. To change a job, update it with job and only the fields that change; do not delete and recreate it. Leave every other field (folder, tz, execution, budget, headed) unset unless the user asked for it: the defaults are the operator's, and the confirmation marks each value you chose. Scheduled runs cannot ask questions.",
454
547
  inputSchema,
455
548
  category: 'custom',
456
549
  permissions: [],
@@ -11,10 +11,29 @@
11
11
  /** A rule effect, in the vocabulary of the CLI's `[permissions]` table. */
12
12
  export type ScheduleRuleEffect = 'allow' | 'ask' | 'deny'
13
13
 
14
- /** What the model proposes. Validated by the tool's schema, then by the host. */
14
+ /**
15
+ * What the model proposes. Validated by the tool's schema, then by the host.
16
+ *
17
+ * `runKind` absent means `'agent'`, unchanged from before this field
18
+ * existed — every existing host keeps compiling and behaving the same.
19
+ * `prompt` is optional ONLY because a pure `'script'` draft has none; a
20
+ * `ScheduleToolHost` that read it as a bare `string` before this field
21
+ * existed now needs a null check under `strictNullChecks` (see the SDK's
22
+ * changeset for this release: this is a breaking change to the type, not a
23
+ * free widening).
24
+ */
15
25
  export interface ScheduleJobDraft {
16
26
  readonly name: string
17
- readonly prompt: string
27
+ /** Required unless `runKind` is `'script'`, whose prompt is unused. */
28
+ readonly prompt?: string
29
+ /** Absent: `'agent'`. */
30
+ readonly runKind?: 'agent' | 'script' | 'script+agent'
31
+ /** Required when `runKind` is `'script'` or `'script+agent'` (the wake-gate). */
32
+ readonly script?: {
33
+ readonly body: string
34
+ readonly shell: 'bash' | 'sh'
35
+ readonly timeoutMs?: number
36
+ }
18
37
  /** Schedule words: `every 30m`, `0 9 * * 1-5`, `at 09:00`, `in 2h`. */
19
38
  readonly when: string
20
39
  /** Folder the job runs in. Absent: the session's working directory. */
@@ -78,7 +97,16 @@ export interface ScheduleJobPreview {
78
97
  readonly folder: string
79
98
  /** True when `folder` is outside the session's working directory and added directories. */
80
99
  readonly outsideSessionRoots: boolean
100
+ /** Empty for a pure `'script'` job, whose prompt is unused. */
81
101
  readonly prompt: string
102
+ /** Absent: `'agent'`. */
103
+ readonly runKind?: 'agent' | 'script' | 'script+agent'
104
+ /** Present for `runKind: 'script'`/`'script+agent'`: the exact confirmed text. */
105
+ readonly script?: {
106
+ readonly body: string
107
+ readonly shell: 'bash' | 'sh'
108
+ readonly timeoutMs: number
109
+ }
82
110
  /** The schedule in words, with its zone. */
83
111
  readonly schedule: string
84
112
  /** The next fire times, ISO-8601 UTC. */
@@ -87,8 +115,11 @@ export interface ScheduleJobPreview {
87
115
  readonly rules: readonly string[]
88
116
  readonly unmatched: 'park' | 'deny' | 'allow'
89
117
  readonly execution: 'host' | 'sandbox'
90
- /** A rule lets the run reach the network. */
118
+ /** The run can reach the network, including through a fixed host script. */
91
119
  readonly networkAccess: boolean
120
+ /** Web/browser permissions grant network access, separate from a script's own capability. */
121
+ readonly networkGrantAccess?: boolean
122
+ /** Effective run limits. A pure script has zero model iterations/tokens and its script timeout. */
92
123
  readonly budget: {
93
124
  readonly maxIterations: number
94
125
  readonly tokenBudget: number
@@ -96,8 +127,8 @@ export interface ScheduleJobPreview {
96
127
  }
97
128
  /** Runs per day at most, times the token budget. Absent for a one-shot. */
98
129
  readonly dailyTokenCeiling?: number
99
- /** Provider and model the job is pinned to. */
100
- readonly model: string
130
+ /** Provider and model the agent phase is pinned to. Absent for a pure script job. */
131
+ readonly model?: string
101
132
  /** Where the run's credential comes from, in words. */
102
133
  readonly credentialSource?: string
103
134
  /** Anything the host wants said in the warning colour. */
@@ -135,6 +166,20 @@ export interface ScheduleJobChanges {
135
166
  readonly tz?: string
136
167
  readonly permissions?: ScheduleJobDraft['permissions']
137
168
  readonly budget?: ScheduleJobDraft['budget']
169
+ /**
170
+ * Changes what kind of run this is. Absent: keeps the job's current kind.
171
+ * Moving to `'script'`/`'script+agent'` needs `script`; moving to
172
+ * `'agent'` drops whatever script the job had, whether or not one is
173
+ * given here — an agent job cannot carry one.
174
+ */
175
+ readonly runKind?: 'agent' | 'script' | 'script+agent'
176
+ /**
177
+ * Replaces the whole script (or, for `'script+agent'`, wake-gate) body,
178
+ * shell and timeout — never a partial edit of just one of them. Absent:
179
+ * keeps the job's current script. Re-verified fresh against the
180
+ * scheduled-run floor and every `deny` rule, the same as a new job's.
181
+ */
182
+ readonly script?: ScheduleJobDraft['script']
138
183
  }
139
184
 
140
185
  /** A proposed change to a job, as the host computed it. */
@@ -205,7 +250,8 @@ export interface ScheduleToolHost {
205
250
  * folder's; a host may list every job regardless, marking the session
206
251
  * folder's with {@link ScheduleJobSummary.inSessionFolder}. The tool says
207
252
  * "No scheduled jobs." when this returns none, so a host that filters
208
- * says so only for its folder.
253
+ * says so only for its folder. Throw on an unreadable job store: the tool
254
+ * reports the error rather than claiming there are no jobs.
209
255
  */
210
256
  list(options: { readonly allFolders: boolean }): Promise<readonly ScheduleJobSummary[]>
211
257
  /** A job by name or id prefix, or undefined. */
@@ -1,3 +1,4 @@
1
+ import type { ToolSourceRef } from '../toolsets/types.js'
1
2
  import type { ToolDefinition } from '../types/tool/index.js'
2
3
 
3
4
  /**
@@ -30,23 +31,31 @@ import type { ToolDefinition } from '../types/tool/index.js'
30
31
  * opening its own gate.
31
32
  *
32
33
  * Trust for the second case comes from the operator, per server, and is
33
- * recorded on the tool as `provenance.readOnlyHintTrusted`. Never a global
34
- * switch: one flag meaning "trust annotations" hands every connected
35
- * server the same reach, which is the hole restated.
34
+ * carried on the OWNING TOOLSET's source (`ToolSourceRef.readOnlyHintTrusted`,
35
+ * `toolsets/manager.ts`'s `sourceOf`) rather than stamped onto the tool
36
+ * itself — `ToolDefinition` has no `provenance` field to read; a definition
37
+ * cannot claim its own source. Never a global switch: one flag meaning
38
+ * "trust annotations" hands every connected server the same reach, which is
39
+ * the hole restated.
36
40
  *
37
41
  * `isReadOnly` itself is left reporting faithfully what the server said.
38
- * Provenance and policy are different questions, and collapsing them would
42
+ * Source and policy are different questions, and collapsing them would
39
43
  * corrupt the outbound re-export and the prompt's own destructive label in
40
44
  * order to fix a gate.
41
45
  */
42
- export function isTrustedReadOnly(tool: ToolDefinition | undefined, input: unknown): boolean {
46
+ export function isTrustedReadOnly(
47
+ tool: ToolDefinition | undefined,
48
+ input: unknown,
49
+ source?: ToolSourceRef,
50
+ ): boolean {
43
51
  if (!tool?.isReadOnly) return false
44
52
 
45
- // No provenance means the tool is host-defined: it came from this
46
- // process, from code the operator installed, and there is no untrusted
47
- // party in the chain. Requiring an opt-in for a builtin would break
48
- // every read-only exemption for no gain in trust.
49
- if (tool.provenance && !tool.provenance.readOnlyHintTrusted) return false
53
+ // A source that is not `mcp_server` is host-defined: this process, code
54
+ // the operator installed, no untrusted party in the chain. Requiring an
55
+ // opt-in for a builtin would break every read-only exemption for no gain
56
+ // in trust. `source` itself absent (a caller with no manager to ask)
57
+ // is treated the same way, matching the old "no provenance" default.
58
+ if (source?.kind === 'mcp_server' && !source.readOnlyHintTrusted) return false
50
59
 
51
60
  return tool.isReadOnly(input)
52
61
  }