@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
@@ -7,6 +7,7 @@ import { killTree } from '../../process/kill-tree.js'
7
7
  import { subscribeToAbort } from '../../utils/abort.js'
8
8
  import { readPositiveIntEnv } from '../../utils/env.js'
9
9
  import {
10
+ type CommandShell,
10
11
  bashToolDialect,
11
12
  hostShellSpawn,
12
13
  sandboxShellSpawn,
@@ -14,13 +15,11 @@ import {
14
15
  } from '../command-shell.js'
15
16
  import { defineTool } from '../defineTool.js'
16
17
  import { scrubInheritedEnv } from '../env-scrub.js'
18
+ import { jsonStringEscapes } from './json-string-hint.js'
17
19
 
18
- // Namzu owns its own bash timeout knob — `NAMZU_BASH_TIMEOUT_MS`.
19
- // The Vandal fallback (`VANDAL_NAMZU_TIMEOUT_MS`) lived here as a
20
- // historical bridge while Namzu was carved out of the Vandal repo,
21
- // but Namzu shouldn't read a consumer's env name. Consumers can
22
- // still alias their own var to `NAMZU_BASH_TIMEOUT_MS` at deploy
23
- // time if they want a unified knob.
20
+ // Namzu owns its own bash timeout knob — `NAMZU_BASH_TIMEOUT_MS` — and
21
+ // reads no consumer's env name. A consumer that wants one knob aliases
22
+ // its own variable to `NAMZU_BASH_TIMEOUT_MS` at deploy time.
24
23
  // Two minutes, not an hour. The old default meant a wedged command held
25
24
  // the turn — and, before per-tool deadlines existed, the whole turn — for
26
25
  // up to 3600s while ignoring Stop entirely. The model can still ask for
@@ -134,20 +133,30 @@ function shellProgress(report?: (message: string) => void) {
134
133
  }
135
134
  }
136
135
 
136
+ /** A progress callback for {@link execHostShell}: one line, per stream, coalesced. */
137
+ export type ExecHostShellProgress = (report: { stream: 'stdout' | 'stderr'; data: string }) => void
138
+
137
139
  /**
138
140
  * Keep the shell's process group until inherited pipes close. Node's exec
139
141
  * timeout/AbortSignal kills only the wrapper and closes its pipes immediately,
140
142
  * leaving the command and its descendants running after the promise settles.
143
+ *
144
+ * Exported so a host running a command line OUTSIDE a live turn — a
145
+ * scheduled job's own script — gets the exact same spawn, dialect,
146
+ * grace-period kill and capped-output behaviour the `bash` tool gives a
147
+ * model's call, rather than a second, drifting copy of it.
141
148
  */
142
- function execHostShell(
149
+ export function execHostShell(
143
150
  command: string,
144
151
  options: {
145
152
  cwd: string
146
153
  env: NodeJS.ProcessEnv
147
154
  timeout: number
148
155
  maxBuffer: number
156
+ /** An interpreter selected and verified by the host for this command. */
157
+ shell?: CommandShell
149
158
  signal?: AbortSignal
150
- onOutput?: ReturnType<typeof shellProgress>
159
+ onOutput?: ExecHostShellProgress
151
160
  },
152
161
  ): Promise<{ stdout: string; stderr: string }> {
153
162
  options.signal?.throwIfAborted()
@@ -155,7 +164,7 @@ function execHostShell(
155
164
  // bash where the host has it, `/bin/sh` where it does not; the
156
165
  // permission rules read the line in the matching dialect. See
157
166
  // `../command-shell.ts`.
158
- const shell = hostShellSpawn(command, options.env)
167
+ const shell = hostShellSpawn(command, options.env, options.shell)
159
168
  const spawnOptions = {
160
169
  cwd: options.cwd,
161
170
  env: shell.env,
@@ -310,6 +319,14 @@ export const BashTool = defineTool({
310
319
  description:
311
320
  'Executes a bash command and returns stdout/stderr output. Command timeout is configurable. The `command` parameter is required — never call this tool with empty arguments. For very long content (e.g. building a large file), prefer `write` for the opening and `edit` with insertLine: "end" for follow-up chunks over a heredoc to avoid hitting the output token limit mid-stream.',
312
321
  inputSchema,
322
+ // A command carries quotes and backslashes of its own, and a heredoc
323
+ // carries newlines: copied into the JSON string raw, they end it.
324
+ malformedInputHint: `Required shape: {"command":"..."}. ${jsonStringEscapes('"command"')}`,
325
+ // The same advice the description gives up front, for the call that did
326
+ // not take it: a heredoc is the long bash call, and a file tool writes the
327
+ // same content in parts.
328
+ truncatedInputHint:
329
+ 'To create a long file, do not use a heredoc: write a short opening with the write tool, then add the rest in parts with edit and insertLine: "end".',
313
330
  category: 'shell',
314
331
  // This tool's own description tells the model to chain with `&&` and `;`,
315
332
  // so a permission rule about it is a rule about several commands more often
@@ -413,7 +430,7 @@ export const BashTool = defineTool({
413
430
  // Sandbox-aware: route through sandbox.exec() when available.
414
431
  //
415
432
  // `context.workingDirectory` is the HOST-side workspace path the
416
- // SDK consumer chose for the turn (Vandal: `/var/lib/vandal/sessions/<task>`),
433
+ // SDK consumer chose for the turn (e.g. `/var/lib/<host>/sessions/<task>`),
417
434
  // which is meaningless inside the sandbox container. Forwarding
418
435
  // it as `cwd` would either land on a path that doesn't exist
419
436
  // (and the worker would `mkdir -p` it inside the container,
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * The browser tools' `url` and `origin` arguments are canonicalised by their
5
5
  * input schema, and the registry hands the gate and the reviewer the schema's
6
- * OUTPUT (`ToolRegistry.prepareExecution`). So a site rule written as
6
+ * OUTPUT (`ToolManager.prepareExecution`, `toolsets/manager.ts`). So a site rule written as
7
7
  * `^https://github\.com(?:[/?#]|$)` is tested against the one spelling the
8
8
  * browser will load, never against `HTTPS://GitHub.com:443/`,
9
9
  * `https://github.com./` or `https://%67ithub.com/`, which name the same page
@@ -0,0 +1,144 @@
1
+ import type { DisplayInfo, Point, Rect } from '../../types/computer-use/index.js'
2
+
3
+ /**
4
+ * One screenshot the model was shown: its id, the size of the image it saw,
5
+ * and the display that image was made from. Every coordinate the model sends
6
+ * is read against one of these.
7
+ */
8
+ export interface ScreenshotFrame {
9
+ /** `s1`, `s2`, … in the order the tool returned them. */
10
+ readonly id: string
11
+ readonly imageWidth: number
12
+ readonly imageHeight: number
13
+ /** Physical size and virtual-desktop origin of what the image shows. */
14
+ readonly display: DisplayInfo
15
+ }
16
+
17
+ /**
18
+ * The frames this tool instance has returned, newest last. A model reads a
19
+ * coordinate off the screenshot in front of it, which is almost always the
20
+ * latest; `get(id)` covers the one that names an earlier screenshot, and a
21
+ * display whose resolution changed in between is mapped through the frame
22
+ * the model actually looked at.
23
+ */
24
+ export class ScreenshotFrames {
25
+ private readonly frames = new Map<string, ScreenshotFrame>()
26
+ private counter = 0
27
+ private newest: ScreenshotFrame | undefined
28
+
29
+ constructor(private readonly capacity = 32) {}
30
+
31
+ record(image: { width: number; height: number }, display: DisplayInfo): ScreenshotFrame {
32
+ this.counter += 1
33
+ const frame: ScreenshotFrame = {
34
+ id: `s${this.counter}`,
35
+ imageWidth: image.width,
36
+ imageHeight: image.height,
37
+ display,
38
+ }
39
+ this.frames.set(frame.id, frame)
40
+ this.newest = frame
41
+ while (this.frames.size > this.capacity) {
42
+ const oldest = this.frames.keys().next().value
43
+ if (oldest === undefined) break
44
+ this.frames.delete(oldest)
45
+ }
46
+ return frame
47
+ }
48
+
49
+ latest(): ScreenshotFrame | undefined {
50
+ return this.newest
51
+ }
52
+
53
+ get(id: string): ScreenshotFrame | undefined {
54
+ return this.frames.get(id)
55
+ }
56
+ }
57
+
58
+ /** A display for a capture from a host that does not report one. */
59
+ export function assumedDisplay(width: number, height: number): DisplayInfo {
60
+ return { id: 'default', x: 0, y: 0, width, height, scaleFactor: 1, primary: true }
61
+ }
62
+
63
+ /**
64
+ * Whether `point` lies on the frame's image. The far edge is admitted — a
65
+ * model aiming at the last column sometimes says `width` — and is clamped in
66
+ * {@link toDisplayPoint}; anything further out is a coordinate read off some
67
+ * other image, and acting on it would click somewhere the model never saw.
68
+ */
69
+ export function pointOnImage(frame: ScreenshotFrame, point: Point): boolean {
70
+ return point.x >= 0 && point.y >= 0 && point.x <= frame.imageWidth && point.y <= frame.imageHeight
71
+ }
72
+
73
+ function axisToDisplay(value: number, image: number, display: number): number {
74
+ // The centre of image pixel `value`, in display pixels: unbiased, where
75
+ // `value * scale` would lean every click half an image pixel up and left.
76
+ const mapped = Math.floor(((value + 0.5) * display) / image)
77
+ return Math.min(Math.max(mapped, 0), display - 1)
78
+ }
79
+
80
+ function axisToImage(value: number, display: number, image: number): number {
81
+ const mapped = Math.floor(((value + 0.5) * image) / display)
82
+ return Math.min(Math.max(mapped, 0), image - 1)
83
+ }
84
+
85
+ /**
86
+ * A model coordinate (pixels of the frame's image) as the display-relative
87
+ * physical pixel the host acts on. Every image pixel maps to the display
88
+ * pixel at its centre, and {@link toImagePoint} maps that pixel straight
89
+ * back, so a round trip is exact whenever the image is no larger than the
90
+ * display.
91
+ */
92
+ export function toDisplayPoint(frame: ScreenshotFrame, point: Point): Point {
93
+ return {
94
+ x: axisToDisplay(point.x, frame.imageWidth, frame.display.width),
95
+ y: axisToDisplay(point.y, frame.imageHeight, frame.display.height),
96
+ }
97
+ }
98
+
99
+ /** A display-relative physical pixel as the image pixel of `frame` that shows it. */
100
+ export function toImagePoint(frame: ScreenshotFrame, point: Point): Point {
101
+ return {
102
+ x: axisToImage(point.x, frame.display.width, frame.imageWidth),
103
+ y: axisToImage(point.y, frame.display.height, frame.imageHeight),
104
+ }
105
+ }
106
+
107
+ /**
108
+ * An image-space rectangle as the display-relative physical rectangle that
109
+ * covers it completely (outward rounding), clamped to the display. Null when
110
+ * nothing of it is on the display.
111
+ */
112
+ export function toDisplayRect(frame: ScreenshotFrame, rect: Rect): Rect | null {
113
+ const sx = frame.display.width / frame.imageWidth
114
+ const sy = frame.display.height / frame.imageHeight
115
+ const left = Math.max(0, Math.floor(rect.x * sx))
116
+ const top = Math.max(0, Math.floor(rect.y * sy))
117
+ const right = Math.min(frame.display.width, Math.ceil((rect.x + rect.width) * sx))
118
+ const bottom = Math.min(frame.display.height, Math.ceil((rect.y + rect.height) * sy))
119
+ if (right <= left || bottom <= top) return null
120
+ return { x: left, y: top, width: right - left, height: bottom - top }
121
+ }
122
+
123
+ /**
124
+ * Virtual-desktop bounds (a window's) as the part of them visible in
125
+ * `frame`'s image, in its pixels; null when none of it is on that display.
126
+ */
127
+ export function desktopRectOnImage(frame: ScreenshotFrame, bounds: Rect): Rect | null {
128
+ const { display } = frame
129
+ const left = Math.max(bounds.x - display.x, 0)
130
+ const top = Math.max(bounds.y - display.y, 0)
131
+ const right = Math.min(bounds.x + bounds.width - display.x, display.width)
132
+ const bottom = Math.min(bounds.y + bounds.height - display.y, display.height)
133
+ if (right <= left || bottom <= top) return null
134
+ const sx = frame.imageWidth / display.width
135
+ const sy = frame.imageHeight / display.height
136
+ const x = Math.floor(left * sx)
137
+ const y = Math.floor(top * sy)
138
+ return {
139
+ x,
140
+ y,
141
+ width: Math.max(1, Math.ceil(right * sx) - x),
142
+ height: Math.max(1, Math.ceil(bottom * sy) - y),
143
+ }
144
+ }
@@ -0,0 +1,278 @@
1
+ /**
2
+ * Screenshot sizing for `computer_use`.
3
+ *
4
+ * A model sees a screenshot at some size and answers with coordinates in that
5
+ * size. If the host sends a native 3440x1440 capture, the provider shrinks it
6
+ * before the model looks (or, for some computer-use tool results, rejects
7
+ * it), and every coordinate the model returns is in a space the host never
8
+ * observed: clicks land systematically off target. So the tool shrinks each
9
+ * capture itself, to the largest size the model takes without a further
10
+ * resize, remembers that size, and maps coordinates back.
11
+ *
12
+ * The size rule is the vision encoder's published reference implementation
13
+ * (`resizedSize`), ported line for line — it is a policy, not an image
14
+ * operation. The pixels are
15
+ * decoded, resampled and encoded by maintained packages: `fast-png` (PNG
16
+ * codec) and `pica` (Lanczos-3 resampling, pure JS with a bundled WASM
17
+ * kernel). Neither needs a native build, and both load only when a capture
18
+ * actually has to change size.
19
+ */
20
+
21
+ /** Patch edge of the vision encoder: an image costs ⌈w/28⌉ × ⌈h/28⌉ visual tokens. */
22
+ const PATCH_PX = 28
23
+
24
+ /**
25
+ * The limits a screenshot is fitted to: neither padded edge above
26
+ * `maxLongEdge`, and no more than `maxTiles` 28-pixel patches.
27
+ */
28
+ export interface ScreenshotLimits {
29
+ readonly maxLongEdge: number
30
+ readonly maxTiles: number
31
+ }
32
+
33
+ /**
34
+ * Every current vision model takes this without resizing it: the standard
35
+ * tier's limits exactly, and well inside the `detail: "high"` budget of the
36
+ * Responses wire (2048 px, 2 500 32-pixel patches). The default.
37
+ */
38
+ export const STANDARD_SCREENSHOT_LIMITS: ScreenshotLimits = Object.freeze({
39
+ maxLongEdge: 1568,
40
+ maxTiles: 1568,
41
+ })
42
+
43
+ /**
44
+ * The high-resolution tier some newer models accept. Use it only when every
45
+ * model the session can reach is on that tier: a standard-tier model rejects
46
+ * such a screenshot in a tool result, the Responses wire's `high` detail
47
+ * shrinks anything over 2048 px, and a request carrying more than 20 images
48
+ * caps every image at 2000 px.
49
+ */
50
+ export const HIGH_RES_SCREENSHOT_LIMITS: ScreenshotLimits = Object.freeze({
51
+ maxLongEdge: 2576,
52
+ maxTiles: 4784,
53
+ })
54
+
55
+ export interface ImageSize {
56
+ readonly width: number
57
+ readonly height: number
58
+ }
59
+
60
+ function tiles(width: number, height: number): number {
61
+ return Math.ceil(width / PATCH_PX) * Math.ceil(height / PATCH_PX)
62
+ }
63
+
64
+ /** Python's `round()`: exact .5 ties go to the even neighbour, as the live API does. */
65
+ function roundTiesToEven(value: number): number {
66
+ const floor = Math.floor(value)
67
+ if (value - floor !== 0.5) return Math.round(value)
68
+ return floor % 2 === 0 ? floor : floor + 1
69
+ }
70
+
71
+ /**
72
+ * The largest aspect-preserving size within `limits`; the input unchanged
73
+ * when it already fits. Never larger than the input.
74
+ */
75
+ export function screenshotTargetSize(
76
+ width: number,
77
+ height: number,
78
+ limits: ScreenshotLimits = STANDARD_SCREENSHOT_LIMITS,
79
+ ): ImageSize {
80
+ if (!Number.isSafeInteger(width) || !Number.isSafeInteger(height) || width < 1 || height < 1)
81
+ throw new RangeError(`screenshot size must be positive integers, got ${width}x${height}`)
82
+ const fits = (w: number, h: number): boolean =>
83
+ Math.ceil(w / PATCH_PX) * PATCH_PX <= limits.maxLongEdge &&
84
+ Math.ceil(h / PATCH_PX) * PATCH_PX <= limits.maxLongEdge &&
85
+ tiles(w, h) <= limits.maxTiles
86
+ if (fits(width, height)) return { width, height }
87
+ if (height > width) {
88
+ const transposed = screenshotTargetSize(height, width, limits)
89
+ return { width: transposed.height, height: transposed.width }
90
+ }
91
+ const aspect = width / height
92
+ let lo = 1 // always fits
93
+ let hi = width // never fits
94
+ while (lo + 1 < hi) {
95
+ const mid = Math.floor((lo + hi) / 2)
96
+ if (fits(mid, Math.max(roundTiesToEven(mid / aspect), 1))) lo = mid
97
+ else hi = mid
98
+ }
99
+ return { width: lo, height: Math.max(roundTiesToEven(lo / aspect), 1) }
100
+ }
101
+
102
+ /** Width and height from a PNG's IHDR chunk, without decoding it. */
103
+ export function pngSize(data: Uint8Array): ImageSize {
104
+ const signature = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]
105
+ if (data.length < 24 || signature.some((byte, index) => data[index] !== byte))
106
+ throw new Error('computer_use: the host returned a screenshot that is not a PNG')
107
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength)
108
+ return { width: view.getUint32(16), height: view.getUint32(20) }
109
+ }
110
+
111
+ /** 8-bit RGBA pixels, row-major, no padding. */
112
+ interface RgbaImage {
113
+ readonly width: number
114
+ readonly height: number
115
+ readonly data: Uint8Array
116
+ }
117
+
118
+ type FastPng = typeof import('fast-png')
119
+ type PicaModule = typeof import('pica')
120
+
121
+ let codec: Promise<{ png: FastPng; resizer: InstanceType<PicaModule['Pica']> }> | undefined
122
+
123
+ function loadCodec(): Promise<{ png: FastPng; resizer: InstanceType<PicaModule['Pica']> }> {
124
+ codec ??= Promise.all([import('fast-png'), import('pica')]).then(([png, picaModule]) => ({
125
+ png,
126
+ // No `ww`/`cib`: those are browser features (Web Workers,
127
+ // createImageBitmap). In Node pica resizes on the calling thread.
128
+ resizer: new picaModule.Pica({ features: ['js', 'wasm'] }),
129
+ }))
130
+ return codec
131
+ }
132
+
133
+ /** For each PNG channel count: where red, green, blue and alpha come from (-1: opaque). */
134
+ const CHANNEL_SOURCES: Readonly<Record<number, readonly [number, number, number, number]>> = {
135
+ 1: [0, 0, 0, -1],
136
+ 2: [0, 0, 0, 1],
137
+ 3: [0, 1, 2, -1],
138
+ 4: [0, 1, 2, 3],
139
+ }
140
+
141
+ async function decodeRgba(data: Uint8Array): Promise<RgbaImage> {
142
+ const { png } = await loadCodec()
143
+ const decoded = png.decode(data)
144
+ const { width, height } = decoded
145
+ let source: ArrayLike<number> = decoded.data
146
+ let channels = decoded.channels
147
+ let depth: number = decoded.depth
148
+ if (decoded.palette) {
149
+ source = png.convertIndexedToRgb(decoded)
150
+ channels = decoded.palette[0]?.length ?? 3
151
+ depth = 8
152
+ }
153
+ const sources = CHANNEL_SOURCES[channels]
154
+ if ((depth !== 8 && depth !== 16) || !sources)
155
+ throw new Error(
156
+ `computer_use: cannot read a ${depth}-bit, ${channels}-channel PNG screenshot; hosts should capture 8-bit RGB or RGBA`,
157
+ )
158
+ // The common capture — 8-bit RGBA — is already the layout the resampler takes.
159
+ if (depth === 8 && channels === 4 && !decoded.palette) {
160
+ const bytes = decoded.data
161
+ return { width, height, data: new Uint8Array(bytes.buffer, bytes.byteOffset, bytes.byteLength) }
162
+ }
163
+ // Everything else becomes 8-bit RGBA; 16-bit samples keep their high byte.
164
+ // No per-pixel branches: this runs once per pixel of a whole display.
165
+ const shift = depth === 16 ? 8 : 0
166
+ const [r, g, b, a] = sources
167
+ const pixels = width * height
168
+ const rgba = new Uint8Array(pixels * 4)
169
+ if (a < 0) rgba.fill(255)
170
+ for (let i = 0, s = 0, d = 0; i < pixels; i += 1, s += channels, d += 4) {
171
+ rgba[d] = (source[s + r] as number) >> shift
172
+ rgba[d + 1] = (source[s + g] as number) >> shift
173
+ rgba[d + 2] = (source[s + b] as number) >> shift
174
+ }
175
+ if (a >= 0)
176
+ for (let i = 0, s = a, d = 3; i < pixels; i += 1, s += channels, d += 4)
177
+ rgba[d] = (source[s] as number) >> shift
178
+ return { width, height, data: rgba }
179
+ }
180
+
181
+ async function encodePng(image: RgbaImage): Promise<Buffer> {
182
+ const { png } = await loadCodec()
183
+ const { width, height, data } = image
184
+ // An opaque capture (every desktop screenshot) is sent as RGB: a quarter
185
+ // fewer bytes in every request that carries it.
186
+ let opaque = true
187
+ for (let i = 3; i < data.length; i += 4) {
188
+ if (data[i] !== 255) {
189
+ opaque = false
190
+ break
191
+ }
192
+ }
193
+ if (!opaque) return Buffer.from(png.encode({ width, height, data, channels: 4, depth: 8 }))
194
+ const rgb = new Uint8Array(width * height * 3)
195
+ for (let s = 0, d = 0; s < data.length; s += 4, d += 3) {
196
+ rgb[d] = data[s] as number
197
+ rgb[d + 1] = data[s + 1] as number
198
+ rgb[d + 2] = data[s + 2] as number
199
+ }
200
+ return Buffer.from(png.encode({ width, height, data: rgb, channels: 3, depth: 8 }))
201
+ }
202
+
203
+ async function resizeRgba(image: RgbaImage, target: ImageSize): Promise<RgbaImage> {
204
+ if (target.width === image.width && target.height === image.height) return image
205
+ const { resizer } = await loadCodec()
206
+ const data = await resizer.resizeBuffer({
207
+ src: image.data,
208
+ width: image.width,
209
+ height: image.height,
210
+ toWidth: target.width,
211
+ toHeight: target.height,
212
+ filter: 'lanczos3',
213
+ })
214
+ return { width: target.width, height: target.height, data }
215
+ }
216
+
217
+ function cropRgba(
218
+ image: RgbaImage,
219
+ rect: { x: number; y: number; width: number; height: number },
220
+ ): RgbaImage {
221
+ const data = new Uint8Array(rect.width * rect.height * 4)
222
+ for (let row = 0; row < rect.height; row += 1) {
223
+ const from = ((rect.y + row) * image.width + rect.x) * 4
224
+ data.set(image.data.subarray(from, from + rect.width * 4), row * rect.width * 4)
225
+ }
226
+ return { width: rect.width, height: rect.height, data }
227
+ }
228
+
229
+ /** A PNG ready for the model, and the size it was made from. */
230
+ export interface FittedImage {
231
+ readonly data: Buffer
232
+ readonly width: number
233
+ readonly height: number
234
+ readonly sourceWidth: number
235
+ readonly sourceHeight: number
236
+ }
237
+
238
+ /**
239
+ * Fit a PNG capture to `limits`. A capture that already fits is returned
240
+ * byte for byte, without being decoded.
241
+ */
242
+ export async function fitPng(data: Buffer, limits: ScreenshotLimits): Promise<FittedImage> {
243
+ const source = pngSize(data)
244
+ const target = screenshotTargetSize(source.width, source.height, limits)
245
+ if (target.width === source.width && target.height === source.height)
246
+ return { data, ...target, sourceWidth: source.width, sourceHeight: source.height }
247
+ const resized = await resizeRgba(await decodeRgba(data), target)
248
+ return {
249
+ data: await encodePng(resized),
250
+ width: resized.width,
251
+ height: resized.height,
252
+ sourceWidth: source.width,
253
+ sourceHeight: source.height,
254
+ }
255
+ }
256
+
257
+ /**
258
+ * Cut `rect` (pixels of `data`, already clamped to it) out of a PNG and fit
259
+ * the piece to `limits`. Never enlarges: a small region stays at its native
260
+ * size, which is still more detail than the downscaled screenshot showed.
261
+ */
262
+ export async function cropAndFitPng(
263
+ data: Buffer,
264
+ rect: { x: number; y: number; width: number; height: number },
265
+ limits: ScreenshotLimits,
266
+ ): Promise<FittedImage> {
267
+ const decoded = await decodeRgba(data)
268
+ const piece = cropRgba(decoded, rect)
269
+ const target = screenshotTargetSize(piece.width, piece.height, limits)
270
+ const resized = await resizeRgba(piece, target)
271
+ return {
272
+ data: await encodePng(resized),
273
+ width: resized.width,
274
+ height: resized.height,
275
+ sourceWidth: piece.width,
276
+ sourceHeight: piece.height,
277
+ }
278
+ }