stitchkit 0.104.2 → 0.105.1

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 (430) hide show
  1. package/CHANGELOG.md +401 -13
  2. package/darwin-native.cjs +4 -2
  3. package/dist/agent-runtime/browser-control-contract.d.ts +32 -2
  4. package/dist/agent-runtime/browser-control-contract.d.ts.map +1 -1
  5. package/dist/agent-runtime/browser-controller.d.ts +21 -3
  6. package/dist/agent-runtime/browser-controller.d.ts.map +1 -1
  7. package/dist/agent-runtime/coding-shell-process.d.ts.map +1 -1
  8. package/dist/agent-runtime/coding-tool-refusals.d.ts +1 -0
  9. package/dist/agent-runtime/coding-tool-refusals.d.ts.map +1 -1
  10. package/dist/agent-runtime/coding-tool-shell.d.ts.map +1 -1
  11. package/dist/agent-runtime/compaction.d.ts.map +1 -1
  12. package/dist/agent-runtime/contained-write.d.ts.map +1 -1
  13. package/dist/agent-runtime/control-schema.d.ts +48 -1
  14. package/dist/agent-runtime/control-schema.d.ts.map +1 -1
  15. package/dist/agent-runtime/deferred-tool-search.d.ts +3 -2
  16. package/dist/agent-runtime/deferred-tool-search.d.ts.map +1 -1
  17. package/dist/agent-runtime/harness-control.d.ts.map +1 -1
  18. package/dist/agent-runtime/harness-realtime.d.ts +34 -4
  19. package/dist/agent-runtime/harness-realtime.d.ts.map +1 -1
  20. package/dist/agent-runtime/runtime-recovery.d.ts.map +1 -1
  21. package/dist/agent-runtime/runtime-state.d.ts.map +1 -1
  22. package/dist/agent-runtime/sandbox-contract.d.ts.map +1 -1
  23. package/dist/agent-runtime/sandbox-process-owner.d.ts +9 -1
  24. package/dist/agent-runtime/sandbox-process-owner.d.ts.map +1 -1
  25. package/dist/agent-runtime/sandbox.d.ts +32 -1
  26. package/dist/agent-runtime/sandbox.d.ts.map +1 -1
  27. package/dist/agent-runtime/schedule-records.d.ts.map +1 -1
  28. package/dist/agent-runtime/schedules.d.ts.map +1 -1
  29. package/dist/agent-runtime/store-events.d.ts +9 -4
  30. package/dist/agent-runtime/store-events.d.ts.map +1 -1
  31. package/dist/agent-runtime/testing.d.ts.map +1 -1
  32. package/dist/application/diagnostic-journal-contract.d.ts +50 -0
  33. package/dist/application/diagnostic-journal-contract.d.ts.map +1 -1
  34. package/dist/application/diagnostic-journal-generations.d.ts +24 -0
  35. package/dist/application/diagnostic-journal-generations.d.ts.map +1 -0
  36. package/dist/application/diagnostic-journal-manager.d.ts.map +1 -1
  37. package/dist/application/diagnostic-journal-open.d.ts +10 -0
  38. package/dist/application/diagnostic-journal-open.d.ts.map +1 -0
  39. package/dist/application/diagnostic-journal-quarantine.d.ts +28 -0
  40. package/dist/application/diagnostic-journal-quarantine.d.ts.map +1 -0
  41. package/dist/application/diagnostic-journal-read-contract.d.ts +73 -3
  42. package/dist/application/diagnostic-journal-read-contract.d.ts.map +1 -1
  43. package/dist/application/diagnostic-journal-reader.d.ts +17 -2
  44. package/dist/application/diagnostic-journal-reader.d.ts.map +1 -1
  45. package/dist/application/diagnostic-journal-recovery.d.ts +18 -2
  46. package/dist/application/diagnostic-journal-recovery.d.ts.map +1 -1
  47. package/dist/application/diagnostic-journal-storage.d.ts +6 -2
  48. package/dist/application/diagnostic-journal-storage.d.ts.map +1 -1
  49. package/dist/application/diagnostic-journal-tail.d.ts +12 -0
  50. package/dist/application/diagnostic-journal-tail.d.ts.map +1 -0
  51. package/dist/application/diagnostic-journal.d.ts +3 -0
  52. package/dist/application/diagnostic-journal.d.ts.map +1 -1
  53. package/dist/application/directory-inbox-accept.d.ts +3 -3
  54. package/dist/application/directory-inbox-accept.d.ts.map +1 -1
  55. package/dist/application/directory-inbox-contract.d.ts +38 -10
  56. package/dist/application/directory-inbox-contract.d.ts.map +1 -1
  57. package/dist/application/directory-inbox-delivery.d.ts +3 -3
  58. package/dist/application/directory-inbox-delivery.d.ts.map +1 -1
  59. package/dist/application/directory-inbox-files.d.ts +17 -2
  60. package/dist/application/directory-inbox-files.d.ts.map +1 -1
  61. package/dist/application/directory-inbox-state.d.ts +1 -1
  62. package/dist/application/directory-inbox-state.d.ts.map +1 -1
  63. package/dist/application/directory-inbox.d.ts +1 -1
  64. package/dist/application/directory-inbox.d.ts.map +1 -1
  65. package/dist/application/file-state-store.d.ts +21 -1
  66. package/dist/application/file-state-store.d.ts.map +1 -1
  67. package/dist/application/grammy.d.ts.map +1 -1
  68. package/dist/application/kernel-contract.d.ts.map +1 -1
  69. package/dist/application/revision-signal.d.ts.map +1 -1
  70. package/dist/application/state-store.d.ts +3 -0
  71. package/dist/application/state-store.d.ts.map +1 -1
  72. package/dist/browser/api-error.d.ts +38 -0
  73. package/dist/browser/api-error.d.ts.map +1 -0
  74. package/dist/browser/chunked-upload.d.ts.map +1 -1
  75. package/dist/browser/client-executors.d.ts.map +1 -1
  76. package/dist/browser/client-url.d.ts.map +1 -1
  77. package/dist/browser/contract-stream.d.ts.map +1 -1
  78. package/dist/browser/http.d.ts +0 -25
  79. package/dist/browser/http.d.ts.map +1 -1
  80. package/dist/browser/resumable.d.ts.map +1 -1
  81. package/dist/contract/define-validation.d.ts +0 -1
  82. package/dist/contract/define-validation.d.ts.map +1 -1
  83. package/dist/contract/define.d.ts.map +1 -1
  84. package/dist/contract/errors-factory.d.ts.map +1 -1
  85. package/dist/contract/errors.d.ts +15 -18
  86. package/dist/contract/errors.d.ts.map +1 -1
  87. package/dist/contract/normalize.d.ts.map +1 -1
  88. package/dist/durability/effect.d.ts.map +1 -1
  89. package/dist/durability/scheduler.d.ts.map +1 -1
  90. package/dist/entrypoints/agent-runtime/browser.js +29 -18
  91. package/dist/entrypoints/agent-runtime/coding-tools.js +8 -7
  92. package/dist/entrypoints/agent-runtime/harness.js +15 -14
  93. package/dist/entrypoints/agent-runtime/realtime.d.ts +1 -1
  94. package/dist/entrypoints/agent-runtime/realtime.d.ts.map +1 -1
  95. package/dist/entrypoints/agent-runtime/realtime.js +119 -54
  96. package/dist/entrypoints/agent-runtime/sandbox.js +23 -17
  97. package/dist/entrypoints/agent-runtime/sqlite/bun.js +4 -3
  98. package/dist/entrypoints/agent-runtime/sqlite/node.js +4 -3
  99. package/dist/entrypoints/agent-runtime/testing.js +8 -6
  100. package/dist/entrypoints/agent-runtime.js +37 -38
  101. package/dist/entrypoints/application/diagnostic-journal.js +305 -111
  102. package/dist/entrypoints/application/directory-inbox.js +174 -77
  103. package/dist/entrypoints/application/grammy.js +5 -2
  104. package/dist/entrypoints/application/opentelemetry.js +2 -2
  105. package/dist/entrypoints/application.d.ts +2 -2
  106. package/dist/entrypoints/application.d.ts.map +1 -1
  107. package/dist/entrypoints/application.js +17 -8
  108. package/dist/entrypoints/cli/publish.d.ts +16 -0
  109. package/dist/entrypoints/cli/publish.d.ts.map +1 -0
  110. package/dist/entrypoints/cli/publish.js +527 -0
  111. package/dist/entrypoints/cli.d.ts +1 -2
  112. package/dist/entrypoints/cli.d.ts.map +1 -1
  113. package/dist/entrypoints/cli.js +59 -966
  114. package/dist/entrypoints/contract.js +3 -3
  115. package/dist/entrypoints/files/packaging.js +161 -66
  116. package/dist/entrypoints/files.d.ts +1 -0
  117. package/dist/entrypoints/files.d.ts.map +1 -1
  118. package/dist/entrypoints/files.js +17 -10
  119. package/dist/entrypoints/index.d.ts +2 -1
  120. package/dist/entrypoints/index.d.ts.map +1 -1
  121. package/dist/entrypoints/index.js +31 -60
  122. package/dist/entrypoints/node.js +8 -8
  123. package/dist/entrypoints/observability.js +3 -3
  124. package/dist/entrypoints/primitives.js +67 -83
  125. package/dist/entrypoints/process.d.ts +1 -1
  126. package/dist/entrypoints/process.d.ts.map +1 -1
  127. package/dist/entrypoints/process.js +2 -2
  128. package/dist/entrypoints/react.js +4 -2
  129. package/dist/entrypoints/remote.js +37 -13
  130. package/dist/entrypoints/server.js +18 -16
  131. package/dist/entrypoints/telegram/screens.js +5 -3
  132. package/dist/entrypoints/telegram.js +31 -46
  133. package/dist/entrypoints/testing.d.ts +1 -1
  134. package/dist/entrypoints/testing.d.ts.map +1 -1
  135. package/dist/entrypoints/testing.js +444 -448
  136. package/dist/entrypoints/tools/connections.js +268 -105
  137. package/dist/entrypoints/tools/contract.js +2 -2
  138. package/dist/entrypoints/tools/invoker.js +8 -7
  139. package/dist/entrypoints/tools/mcp.d.ts +2 -2
  140. package/dist/entrypoints/tools/mcp.d.ts.map +1 -1
  141. package/dist/entrypoints/tools/mcp.js +10 -9
  142. package/dist/entrypoints/tools.d.ts +0 -1
  143. package/dist/entrypoints/tools.d.ts.map +1 -1
  144. package/dist/entrypoints/tools.js +118 -53
  145. package/dist/entrypoints/tracking.js +2 -3
  146. package/dist/files/boundary.d.ts +2 -2
  147. package/dist/files/boundary.d.ts.map +1 -1
  148. package/dist/files/chunk-spool.d.ts.map +1 -1
  149. package/dist/files/file-io.d.ts +2 -2
  150. package/dist/files/file-io.d.ts.map +1 -1
  151. package/dist/files/native-packaging-layout.d.ts +50 -4
  152. package/dist/files/native-packaging-layout.d.ts.map +1 -1
  153. package/dist/files/native-packaging.d.ts +78 -17
  154. package/dist/files/native-packaging.d.ts.map +1 -1
  155. package/dist/{index-r5hsgkz5.js → index-0gs4ymfj.js} +6 -3
  156. package/dist/{index-zax7resm.js → index-0gxvns6s.js} +1 -13
  157. package/dist/index-0s4xebbg.js +8 -0
  158. package/dist/{index-r4r70zmh.js → index-12zsej7b.js} +5 -2
  159. package/dist/{index-269zqj8m.js → index-1ptj98e0.js} +28 -12
  160. package/dist/{index-kemm0ej5.js → index-1pwwan01.js} +65 -22
  161. package/dist/{index-vgkbcnkc.js → index-299sm5tr.js} +1 -1
  162. package/dist/{index-2vnh05w4.js → index-2k91mewf.js} +31 -74
  163. package/dist/{index-wh0ecvyk.js → index-37asdw3a.js} +1 -1
  164. package/dist/index-3h0ztg0z.js +285 -0
  165. package/dist/{index-g95fk660.js → index-4vsby8n8.js} +8 -15
  166. package/dist/index-556g5hsh.js +17 -0
  167. package/dist/{index-f330qqyg.js → index-5c26631f.js} +244 -67
  168. package/dist/{index-adhgd4pe.js → index-5p55xreg.js} +2 -2
  169. package/dist/index-5w6t91ze.js +47 -0
  170. package/dist/{index-9pw0a51a.js → index-6yxhe58g.js} +40 -7
  171. package/dist/{index-6d9xaxw1.js → index-8ks9b85e.js} +33 -5
  172. package/dist/{index-bhb950qs.js → index-916yh4e2.js} +25 -12
  173. package/dist/index-9tqbxv5p.js +44 -0
  174. package/dist/{index-5csmzesf.js → index-azx12jgv.js} +4 -3
  175. package/dist/{index-mbnnw3f2.js → index-b0kddvzw.js} +15 -5
  176. package/dist/{index-n5yqxd3d.js → index-b0w7rbpt.js} +23 -2
  177. package/dist/index-b56nnscm.js +132 -0
  178. package/dist/{index-0ndk4555.js → index-c0hffcmj.js} +2 -2
  179. package/dist/{index-pptyv13k.js → index-c17xcx4k.js} +42 -6
  180. package/dist/index-cazts87s.js +105 -0
  181. package/dist/{index-g2j7pnak.js → index-cmzvhhtd.js} +5 -2
  182. package/dist/{index-ssmd41kh.js → index-d2h99n7d.js} +1 -1
  183. package/dist/{index-z94wht4y.js → index-dky0dcmf.js} +34 -5
  184. package/dist/index-drs41arz.js +455 -0
  185. package/dist/{index-za6j7nwy.js → index-dsnjzb62.js} +104 -51
  186. package/dist/index-eemvahkc.js +21 -0
  187. package/dist/{index-fa4wg312.js → index-f199nfq5.js} +10 -6
  188. package/dist/{index-ck71tbcf.js → index-fsw1ybf3.js} +11 -15
  189. package/dist/{index-fk18k56k.js → index-gr5g3xfw.js} +11 -18
  190. package/dist/{index-jn9g8xdt.js → index-hjvje0pf.js} +6 -4
  191. package/dist/index-j4zh647a.js +59 -0
  192. package/dist/{index-x928baz2.js → index-j9gxbztg.js} +18 -14
  193. package/dist/index-kfjkb396.js +37 -0
  194. package/dist/{index-6drst9sg.js → index-ksfagmyz.js} +45 -345
  195. package/dist/index-m616f0yz.js +120 -0
  196. package/dist/{index-fm1c1a08.js → index-m6w6jtda.js} +40 -21
  197. package/dist/{index-bakgedh8.js → index-msfpyy2f.js} +2 -4
  198. package/dist/{index-ywppsaby.js → index-n1nszyk0.js} +23 -34
  199. package/dist/{index-v14qqmys.js → index-n4689krb.js} +1 -1
  200. package/dist/{index-a0zzh8ak.js → index-pz3y6b6g.js} +3 -3
  201. package/dist/{index-43p08g7t.js → index-pzb63z66.js} +12 -8
  202. package/dist/{index-h97tqqp1.js → index-qaet40b2.js} +5 -3
  203. package/dist/{index-t1sr4aks.js → index-qaqbdm7s.js} +52 -6
  204. package/dist/{index-77nxk6ay.js → index-r393tnfp.js} +16 -10
  205. package/dist/{index-kb8styz3.js → index-rpzewktb.js} +15 -5
  206. package/dist/{index-27a2pj09.js → index-sj28htvf.js} +1 -1
  207. package/dist/{index-hbd32c6a.js → index-w8etpm8j.js} +38 -89
  208. package/dist/{index-2hyavjjj.js → index-wbhdzxar.js} +3 -3
  209. package/dist/{index-4e0ah203.js → index-wdy68sh6.js} +47 -24
  210. package/dist/{index-hp9d77wk.js → index-x7w1z6pf.js} +15 -4
  211. package/dist/{index-ptn0g0gj.js → index-y7k2cdgv.js} +21 -20
  212. package/dist/{index-20yvtn9a.js → index-yt7gyg5x.js} +1 -1
  213. package/dist/{index-cvda079a.js → index-yvfk3y36.js} +12 -2
  214. package/dist/{index-5z6jn897.js → index-z23rfxhj.js} +1 -1
  215. package/dist/internal/abort-race.d.ts +8 -2
  216. package/dist/internal/abort-race.d.ts.map +1 -1
  217. package/dist/internal/atomic-file.d.ts +55 -9
  218. package/dist/internal/atomic-file.d.ts.map +1 -1
  219. package/dist/internal/atomic-publication.d.ts +39 -4
  220. package/dist/internal/atomic-publication.d.ts.map +1 -1
  221. package/dist/internal/atomic-staging.d.ts +47 -0
  222. package/dist/internal/atomic-staging.d.ts.map +1 -0
  223. package/dist/internal/bounded-file-read.d.ts +19 -11
  224. package/dist/internal/bounded-file-read.d.ts.map +1 -1
  225. package/dist/internal/bounded-lines.d.ts.map +1 -1
  226. package/dist/internal/close-after.d.ts +11 -0
  227. package/dist/internal/close-after.d.ts.map +1 -0
  228. package/dist/internal/deadline.d.ts +10 -0
  229. package/dist/internal/deadline.d.ts.map +1 -1
  230. package/dist/internal/exclusive-lock-read.d.ts +10 -12
  231. package/dist/internal/exclusive-lock-read.d.ts.map +1 -1
  232. package/dist/internal/exclusive-lock.d.ts +2 -2
  233. package/dist/internal/exclusive-lock.d.ts.map +1 -1
  234. package/dist/internal/file-observation.d.ts +14 -0
  235. package/dist/internal/file-observation.d.ts.map +1 -0
  236. package/dist/internal/json-data.d.ts +22 -5
  237. package/dist/internal/json-data.d.ts.map +1 -1
  238. package/dist/internal/positive-integer.d.ts +9 -0
  239. package/dist/internal/positive-integer.d.ts.map +1 -0
  240. package/dist/internal/process-instance.d.ts +35 -5
  241. package/dist/internal/process-instance.d.ts.map +1 -1
  242. package/dist/internal/secure-fetch.d.ts.map +1 -1
  243. package/dist/internal/timers.d.ts +11 -0
  244. package/dist/internal/timers.d.ts.map +1 -0
  245. package/dist/internal/with-exclusive-lock.d.ts +5 -4
  246. package/dist/internal/with-exclusive-lock.d.ts.map +1 -1
  247. package/dist/observability/bounded-sink.d.ts.map +1 -1
  248. package/dist/primitives/canonical-json.d.ts +23 -2
  249. package/dist/primitives/canonical-json.d.ts.map +1 -1
  250. package/dist/primitives/delivery.d.ts.map +1 -1
  251. package/dist/primitives/index.d.ts +1 -1
  252. package/dist/primitives/index.d.ts.map +1 -1
  253. package/dist/primitives/money.d.ts.map +1 -1
  254. package/dist/process/cleanup.d.ts +7 -2
  255. package/dist/process/cleanup.d.ts.map +1 -1
  256. package/dist/process/command-lifetime.d.ts +6 -1
  257. package/dist/process/command-lifetime.d.ts.map +1 -1
  258. package/dist/process/command-owner.d.ts +1 -0
  259. package/dist/process/command-owner.d.ts.map +1 -1
  260. package/dist/process/command.d.ts +4 -0
  261. package/dist/process/command.d.ts.map +1 -1
  262. package/dist/process/contract.d.ts +68 -2
  263. package/dist/process/contract.d.ts.map +1 -1
  264. package/dist/process/group.d.ts +42 -3
  265. package/dist/process/group.d.ts.map +1 -1
  266. package/dist/process/launch.d.ts +12 -1
  267. package/dist/process/launch.d.ts.map +1 -1
  268. package/dist/process/terminate.d.ts +40 -0
  269. package/dist/process/terminate.d.ts.map +1 -0
  270. package/dist/react/query-client.d.ts.map +1 -1
  271. package/dist/realtime/rejection.d.ts.map +1 -1
  272. package/dist/server/contract-stream.d.ts.map +1 -1
  273. package/dist/server/handler-state.d.ts.map +1 -1
  274. package/dist/server/implement.d.ts.map +1 -1
  275. package/dist/server/request-body.d.ts +0 -1
  276. package/dist/server/request-body.d.ts.map +1 -1
  277. package/dist/server/unix-client.d.ts.map +1 -1
  278. package/dist/telegram/broadcast-delivery.d.ts.map +1 -1
  279. package/dist/telegram/broadcast-failure.d.ts +10 -2
  280. package/dist/telegram/broadcast-failure.d.ts.map +1 -1
  281. package/dist/telegram/operator-channel.d.ts.map +1 -1
  282. package/dist/telegram/screens/outcome.d.ts.map +1 -1
  283. package/dist/testing/surface-conformance.d.ts +1 -1
  284. package/dist/testing/surface-conformance.d.ts.map +1 -1
  285. package/dist/testing/surface-manifest.d.ts +0 -6
  286. package/dist/testing/surface-manifest.d.ts.map +1 -1
  287. package/dist/tools/agent.d.ts +1 -1
  288. package/dist/tools/agent.d.ts.map +1 -1
  289. package/dist/tools/cli/args.d.ts +1 -1
  290. package/dist/tools/cli/args.d.ts.map +1 -1
  291. package/dist/tools/cli/help.d.ts.map +1 -1
  292. package/dist/tools/cli/invoke.d.ts +2 -2
  293. package/dist/tools/cli/invoke.d.ts.map +1 -1
  294. package/dist/tools/cli/profile.d.ts.map +1 -1
  295. package/dist/tools/cli/publication-assets.d.ts.map +1 -1
  296. package/dist/tools/cli/publication-contract.d.ts +8 -0
  297. package/dist/tools/cli/publication-contract.d.ts.map +1 -1
  298. package/dist/tools/cli/publication-control.d.ts.map +1 -1
  299. package/dist/tools/cli/publication-storage.d.ts +23 -2
  300. package/dist/tools/cli/publication-storage.d.ts.map +1 -1
  301. package/dist/tools/cli/publication.d.ts +8 -1
  302. package/dist/tools/cli/publication.d.ts.map +1 -1
  303. package/dist/tools/connections/errors.d.ts +18 -6
  304. package/dist/tools/connections/errors.d.ts.map +1 -1
  305. package/dist/tools/connections/limits.d.ts +8 -2
  306. package/dist/tools/connections/limits.d.ts.map +1 -1
  307. package/dist/tools/connections/mcp-client.d.ts.map +1 -1
  308. package/dist/tools/connections/mcp-envelope.d.ts.map +1 -1
  309. package/dist/tools/connections/openapi.d.ts.map +1 -1
  310. package/dist/tools/connections/schema-budget.d.ts +1 -1
  311. package/dist/tools/connections/schema-budget.d.ts.map +1 -1
  312. package/dist/tools/connections/sse-session.d.ts.map +1 -1
  313. package/dist/tools/execute-args.d.ts.map +1 -1
  314. package/dist/tools/execute-result.d.ts.map +1 -1
  315. package/dist/tools/internal/surface-projector.d.ts +17 -3
  316. package/dist/tools/internal/surface-projector.d.ts.map +1 -1
  317. package/dist/tools/internal/tool-error-projection.d.ts +16 -0
  318. package/dist/tools/internal/tool-error-projection.d.ts.map +1 -0
  319. package/dist/tools/internal/tool-view.d.ts.map +1 -1
  320. package/dist/tools/invoker.d.ts.map +1 -1
  321. package/dist/tools/list-names.d.ts +3 -2
  322. package/dist/tools/list-names.d.ts.map +1 -1
  323. package/dist/tools/manifest.d.ts +3 -2
  324. package/dist/tools/manifest.d.ts.map +1 -1
  325. package/dist/tools/mcp/handler.d.ts +7 -0
  326. package/dist/tools/mcp/handler.d.ts.map +1 -1
  327. package/dist/tools/mcp/mount.d.ts +18 -2
  328. package/dist/tools/mcp/mount.d.ts.map +1 -1
  329. package/dist/tools/mcp/prepare.d.ts +3 -3
  330. package/dist/tools/mcp/prepare.d.ts.map +1 -1
  331. package/dist/tools/mcp/register.d.ts.map +1 -1
  332. package/dist/tools/mcp/runtime-tools.d.ts.map +1 -1
  333. package/dist/tools/mcp/stdio-signals.d.ts +14 -0
  334. package/dist/tools/mcp/stdio-signals.d.ts.map +1 -1
  335. package/dist/tools/mcp/stdio.d.ts +7 -0
  336. package/dist/tools/mcp/stdio.d.ts.map +1 -1
  337. package/dist/tools/operations/async-operation-runtime-tools.d.ts.map +1 -1
  338. package/dist/tools/operations/async-operation-runtime-types.d.ts +3 -3
  339. package/dist/tools/operations/async-operation-runtime-types.d.ts.map +1 -1
  340. package/dist/tools/operations/define-wait-tool.d.ts +1 -1
  341. package/dist/tools/operations/define-wait-tool.d.ts.map +1 -1
  342. package/dist/tools/operations/wait-core.d.ts +0 -6
  343. package/dist/tools/operations/wait-core.d.ts.map +1 -1
  344. package/dist/tools/registry.d.ts +1 -1
  345. package/dist/tools/registry.d.ts.map +1 -1
  346. package/dist/tools/remote.d.ts +1 -1
  347. package/dist/tools/remote.d.ts.map +1 -1
  348. package/dist/tools/{runtime-tool-execution.d.ts → runtime-tool-declaration.d.ts} +32 -9
  349. package/dist/tools/runtime-tool-declaration.d.ts.map +1 -0
  350. package/dist/tools/runtime-tool-mcp.d.ts +6 -15
  351. package/dist/tools/runtime-tool-mcp.d.ts.map +1 -1
  352. package/dist/tools/runtime-tool.d.ts +14 -12
  353. package/dist/tools/runtime-tool.d.ts.map +1 -1
  354. package/dist/tools/schema/coerce.d.ts +4 -0
  355. package/dist/tools/schema/coerce.d.ts.map +1 -1
  356. package/dist/tools/schema/flatten-join.d.ts.map +1 -1
  357. package/dist/tools/surface.d.ts +7 -11
  358. package/dist/tools/surface.d.ts.map +1 -1
  359. package/dist/tools/transfer/define-download-tool.d.ts +1 -1
  360. package/dist/tools/transfer/define-download-tool.d.ts.map +1 -1
  361. package/dist/tools/transfer/define-upload-tool.d.ts +1 -1
  362. package/dist/tools/transfer/define-upload-tool.d.ts.map +1 -1
  363. package/dist/tools/transfer/define-view-file-tool.d.ts +1 -1
  364. package/dist/tools/transfer/define-view-file-tool.d.ts.map +1 -1
  365. package/dist/tools/transfer/managed-file-error.d.ts.map +1 -1
  366. package/dist/tools/transfer/view-file-contract.d.ts.map +1 -1
  367. package/dist/tools/transfer/view-file.d.ts +1 -1
  368. package/dist/tools/transfer/view-file.d.ts.map +1 -1
  369. package/dist/tools/transports.d.ts +3 -2
  370. package/dist/tools/transports.d.ts.map +1 -1
  371. package/llms/agent-runtime-browser.txt +10 -4
  372. package/llms/agent-runtime-harness.txt +32 -31
  373. package/llms/agent-runtime-react.txt +1 -1
  374. package/llms/agent-runtime-realtime.txt +14 -5
  375. package/llms/agent-runtime-sandbox.txt +3 -11
  376. package/llms/agent-runtime.3.txt +2 -2
  377. package/llms/agent-runtime.txt +0 -9
  378. package/llms/application.2.txt +3 -12
  379. package/llms/application.3.txt +7 -4
  380. package/llms/application.txt +44 -15
  381. package/llms/cli-publish.txt +29 -0
  382. package/llms/cli.2.txt +9 -11
  383. package/llms/cli.txt +26 -14
  384. package/llms/declaration.txt +0 -9
  385. package/llms/files-packaging.txt +18 -8
  386. package/llms/files.txt +4 -2
  387. package/llms/geo.txt +0 -9
  388. package/llms/live.txt +4 -13
  389. package/llms/observability.txt +31 -5
  390. package/llms/primitives.txt +38 -20
  391. package/llms/process.txt +324 -160
  392. package/llms/react-keyboard.txt +0 -9
  393. package/llms/react.txt +0 -18
  394. package/llms/server.4.txt +1 -1
  395. package/llms/server.5.txt +1 -1
  396. package/llms/server.txt +1 -1
  397. package/llms/stitchkit.txt +6 -7
  398. package/llms/telegram-screens.txt +2 -2
  399. package/llms/testing.txt +0 -1
  400. package/llms/tools-mcp.txt +2 -3
  401. package/llms/tools.2.txt +12 -0
  402. package/llms/tools.3.txt +5 -6
  403. package/llms/tools.txt +6 -4
  404. package/llms/upgrading-0.37.0-0.50.0.txt +947 -0
  405. package/llms/{upgrading-0.44.0-0.61.0.txt → upgrading-0.53.0-0.67.0.txt} +576 -506
  406. package/llms/{upgrading-0.62.0-0.80.0.txt → upgrading-0.68.0-0.94.0.txt} +562 -576
  407. package/llms/{upgrading-0.81.0-0.104.0.txt → upgrading-0.95.0-0.105.0.txt} +452 -567
  408. package/llms/upgrading.txt +4 -4
  409. package/llms-full.txt +1068 -412
  410. package/llms.txt +24 -24
  411. package/native-assets.json +11 -3
  412. package/package.json +6 -6
  413. package/dist/agent-runtime/harness-tools.d.ts +0 -11
  414. package/dist/agent-runtime/harness-tools.d.ts.map +0 -1
  415. package/dist/entrypoints/agent-runtime/harness-tools.d.ts +0 -2
  416. package/dist/entrypoints/agent-runtime/harness-tools.d.ts.map +0 -1
  417. package/dist/entrypoints/agent-runtime/harness-tools.js +0 -32
  418. package/dist/index-1a6jtnd9.js +0 -88
  419. package/dist/index-8a9ksm91.js +0 -95
  420. package/dist/index-a3wma1hk.js +0 -48
  421. package/dist/index-jd470k6q.js +0 -109
  422. package/dist/index-n1dqr7gf.js +0 -20
  423. package/dist/index-nggfa2yn.js +0 -34
  424. package/dist/index-s4evrmp5.js +0 -98
  425. package/dist/index-ze1eph1k.js +0 -20
  426. package/dist/tools/connections/error-projection.d.ts +0 -4
  427. package/dist/tools/connections/error-projection.d.ts.map +0 -1
  428. package/dist/tools/runtime-tool-execution.d.ts.map +0 -1
  429. package/llms/agent-runtime-harness-tools.txt +0 -25
  430. package/llms/upgrading-0.37.0-0.44.0.txt +0 -444
@@ -1,6 +1,13 @@
1
1
  import {
2
2
  raceAbort
3
- } from "./index-mbnnw3f2.js";
3
+ } from "./index-b0kddvzw.js";
4
+ import {
5
+ MAX_TIMER_MS,
6
+ sleep
7
+ } from "./index-eemvahkc.js";
8
+ import {
9
+ assertPositiveSafeInteger
10
+ } from "./index-0s4xebbg.js";
4
11
 
5
12
  // src/process/contract.ts
6
13
  import { z } from "zod";
@@ -12,6 +19,24 @@ var NativeCommandSettlementSchema = z.discriminatedUnion("kind", [
12
19
  }),
13
20
  z.object({ kind: z.literal("error"), cause: z.unknown() })
14
21
  ]);
22
+ var COMMAND_CLEANUP_TIMEOUT_MS = 2000;
23
+ var MAX_COMMAND_STOP_GRACE_MS = 3600000;
24
+ var NativeCommandStopPolicySchema = z.strictObject({
25
+ target: z.enum(["group", "leader"]),
26
+ signal: z.enum(["SIGTERM", "SIGINT", "SIGHUP", "SIGQUIT", "SIGUSR1", "SIGUSR2"]).default("SIGTERM"),
27
+ graceMs: z.number().int().nonnegative().max(MAX_COMMAND_STOP_GRACE_MS),
28
+ killOn: z.custom((v) => v instanceof AbortSignal).optional()
29
+ });
30
+ var REMOVED_NATIVE_COMMAND_OPTIONS = {
31
+ killGraceMs: "stop: { target: 'group', graceMs } (removed in 0.105.0)"
32
+ };
33
+ function unknownOptionMessage(keys) {
34
+ return keys.map((key) => {
35
+ const name = String(key);
36
+ const replacement = Object.hasOwn(REMOVED_NATIVE_COMMAND_OPTIONS, name) ? REMOVED_NATIVE_COMMAND_OPTIONS[name] : undefined;
37
+ return replacement === undefined ? `Unknown runNativeCommand option ${name}` : `Unknown runNativeCommand option ${name}; use ${replacement}`;
38
+ }).join("; ");
39
+ }
15
40
  var NativeCommandOptionsSchema = z.strictObject({
16
41
  executable: z.string().min(1),
17
42
  args: z.array(z.string()).default([]),
@@ -19,29 +44,47 @@ var NativeCommandOptionsSchema = z.strictObject({
19
44
  env: z.record(z.string(), z.string()).optional(),
20
45
  envPolicy: z.enum(["declared-only", "ambient"]).default("declared-only"),
21
46
  signal: z.custom((v) => v instanceof AbortSignal).optional(),
22
- timeoutMs: z.number().int().positive().max(2147483647).optional(),
47
+ timeoutMs: z.number().int().positive().max(MAX_TIMER_MS).optional(),
23
48
  maxOutputBytes: z.number().int().positive().optional(),
24
49
  capture: z.boolean().default(false),
25
50
  stdin: z.custom((v) => v instanceof Uint8Array).optional(),
26
51
  maxStdinBytes: z.number().int().positive().default(1024 * 1024),
27
52
  onOutput: z.custom((v) => typeof v === "function").optional(),
28
53
  onLeaderSettled: z.custom((v) => typeof v === "function").optional(),
29
- killGraceMs: z.number().int().nonnegative().max(1e4).default(100),
30
- cleanupTimeoutMs: z.number().int().positive().max(30000).default(2000)
31
- }).superRefine((input, ctx) => {
54
+ stop: NativeCommandStopPolicySchema.default({
55
+ target: "group",
56
+ signal: "SIGTERM",
57
+ graceMs: 100
58
+ }),
59
+ descendants: z.enum(["terminate-after-leader", "leave"]).default("terminate-after-leader"),
60
+ cleanupTimeoutMs: z.number().int().positive().max(30000).default(COMMAND_CLEANUP_TIMEOUT_MS)
61
+ }, {
62
+ error: (issue) => issue.code === "unrecognized_keys" ? unknownOptionMessage(issue.keys) : undefined
63
+ }).check((ctx) => {
64
+ const input = ctx.value;
32
65
  if (!input.signal && input.timeoutMs === undefined)
33
- ctx.addIssue({ code: "custom", message: "Declare a caller signal or a finite timeout" });
66
+ ctx.issues.push({
67
+ code: "custom",
68
+ input: ctx.value,
69
+ message: "Declare a caller signal or a finite timeout"
70
+ });
34
71
  if (input.capture && input.maxOutputBytes === undefined)
35
- ctx.addIssue({
72
+ ctx.issues.push({
36
73
  code: "custom",
74
+ input: ctx.value,
37
75
  message: "Capture requires a finite combined output budget"
38
76
  });
39
77
  if (input.stdin && input.stdin.byteLength > input.maxStdinBytes)
40
- ctx.addIssue({ code: "custom", message: "stdin exceeds maxStdinBytes" });
78
+ ctx.issues.push({
79
+ code: "custom",
80
+ input: ctx.value,
81
+ message: "stdin exceeds maxStdinBytes"
82
+ });
41
83
  });
42
84
  var NativeCommandResultSchema = z.object({
43
85
  exitCode: z.number().int().nullable(),
44
86
  signal: z.string().nullable(),
87
+ descendantsStopped: z.boolean(),
45
88
  stdout: z.instanceof(Uint8Array),
46
89
  stderr: z.instanceof(Uint8Array)
47
90
  });
@@ -62,8 +105,7 @@ class NativeCommandError2 extends Error {
62
105
 
63
106
  // src/process/group.ts
64
107
  function createCommandDeadline(timeoutMs, reason) {
65
- if (!Number.isSafeInteger(timeoutMs) || timeoutMs <= 0)
66
- throw new RangeError("Command deadline must be a positive safe integer");
108
+ assertPositiveSafeInteger("Command deadline", timeoutMs, RangeError);
67
109
  const controller = new AbortController;
68
110
  const deadline = performance.now() + timeoutMs;
69
111
  let timer;
@@ -72,7 +114,7 @@ function createCommandDeadline(timeoutMs, reason) {
72
114
  if (remaining <= 0)
73
115
  controller.abort(reason);
74
116
  else
75
- timer = setTimeout(schedule, Math.min(remaining, 2147483647));
117
+ timer = setTimeout(schedule, Math.min(remaining, MAX_TIMER_MS));
76
118
  };
77
119
  schedule();
78
120
  return {
@@ -86,14 +128,19 @@ function createCommandDeadline(timeoutMs, reason) {
86
128
  function deniedOnDarwin(error) {
87
129
  return process.platform === "darwin" && error instanceof Error && "code" in error && error.code === "EPERM";
88
130
  }
131
+ function isErrno(error, code) {
132
+ return error instanceof Error && "code" in error && error.code === code;
133
+ }
89
134
  function signalGroup(pid, signal) {
90
135
  if (pid === undefined)
91
- return;
136
+ return false;
92
137
  try {
93
138
  process.kill(-pid, signal);
139
+ return true;
94
140
  } catch (error) {
95
- if (!(error instanceof Error && ("code" in error) && error.code === "ESRCH"))
96
- throw error;
141
+ if (isErrno(error, "ESRCH"))
142
+ return false;
143
+ throw error;
97
144
  }
98
145
  }
99
146
  function exists(pid) {
@@ -103,7 +150,7 @@ function exists(pid) {
103
150
  process.kill(-pid, 0);
104
151
  return true;
105
152
  } catch (error) {
106
- if (error instanceof Error && "code" in error && error.code === "ESRCH")
153
+ if (isErrno(error, "ESRCH"))
107
154
  return false;
108
155
  if (deniedOnDarwin(error))
109
156
  return true;
@@ -113,8 +160,7 @@ function exists(pid) {
113
160
  async function signalUntilSettled(pid, signal, deadline) {
114
161
  for (;; ) {
115
162
  try {
116
- signalGroup(pid, signal);
117
- return;
163
+ return signalGroup(pid, signal);
118
164
  } catch (error) {
119
165
  if (!deniedOnDarwin(error) || performance.now() >= deadline)
120
166
  throw error;
@@ -122,17 +168,51 @@ async function signalUntilSettled(pid, signal, deadline) {
122
168
  }
123
169
  }
124
170
  }
125
- async function stopCommandGroup(pid, graceMs, cleanupTimeoutMs = 2000, force = false) {
126
- const deadline = performance.now() + graceMs + cleanupTimeoutMs;
127
- if (force) {
171
+ async function stopCommandGroup(stop) {
172
+ const { pid, policy } = stop;
173
+ const deadline = performance.now() + policy.graceMs + stop.cleanupTimeoutMs;
174
+ if (stop.force || policy.killOn?.aborted)
175
+ return signalUntilSettled(pid, "SIGKILL", deadline);
176
+ if (!await signalUntilSettled(pid, policy.signal, deadline))
177
+ return false;
178
+ const until = performance.now() + policy.graceMs;
179
+ let interval = 10;
180
+ let present = exists(pid);
181
+ while (present && !policy.killOn?.aborted && performance.now() < until) {
182
+ await sleep(Math.min(interval, until - performance.now()), policy.killOn).catch(() => {
183
+ return;
184
+ });
185
+ interval = Math.min(interval * 2, 250);
186
+ present = exists(pid);
187
+ }
188
+ if (present)
128
189
  await signalUntilSettled(pid, "SIGKILL", deadline);
129
- return;
190
+ return true;
191
+ }
192
+ async function stopCommandLeader(stop) {
193
+ const { pid, policy, leader } = stop;
194
+ const deadline = performance.now() + policy.graceMs + stop.cleanupTimeoutMs;
195
+ const running = () => leader.exitCode === null && leader.signalCode === null;
196
+ let signalled = false;
197
+ if (!stop.force && !policy.killOn?.aborted && pid !== undefined && running()) {
198
+ try {
199
+ process.kill(pid, policy.signal);
200
+ signalled = true;
201
+ } catch (error) {
202
+ if (!isErrno(error, "ESRCH"))
203
+ throw error;
204
+ }
205
+ const grace = new AbortController;
206
+ const end = () => grace.abort();
207
+ policy.killOn?.addEventListener("abort", end, { once: true });
208
+ stop.leaderExit.then(end, end);
209
+ await sleep(policy.graceMs, grace.signal).catch(() => {
210
+ return;
211
+ });
212
+ policy.killOn?.removeEventListener("abort", end);
213
+ grace.abort();
130
214
  }
131
- await signalUntilSettled(pid, "SIGTERM", deadline);
132
- const until = performance.now() + graceMs;
133
- while (performance.now() < until && exists(pid))
134
- await new Promise((resolve) => setTimeout(resolve, Math.min(10, until - performance.now())));
135
- await signalUntilSettled(pid, "SIGKILL", deadline);
215
+ return await signalUntilSettled(pid, "SIGKILL", deadline) || signalled;
136
216
  }
137
217
  function commandCleanupError(cause) {
138
218
  return new NativeCommandError2("COMMAND_CLEANUP", "Command cleanup did not complete", {
@@ -146,18 +226,26 @@ function waitForCommandClose(closed, timeoutMs) {
146
226
 
147
227
  // src/process/cleanup.ts
148
228
  async function cleanupNativeCommand(input) {
229
+ const signalled = Promise.resolve().then(input.signal);
230
+ const teardown = () => input.transport?.destroy();
231
+ const destroyed = signalled.then(teardown, teardown);
232
+ const awaitRelease = async () => {
233
+ if (!input.transport)
234
+ return;
235
+ try {
236
+ await waitForCommandClose(input.transport.released, input.timeoutMs);
237
+ } catch (cause) {
238
+ throw new Error(`Command handles remained open: ${[...input.transport.pendingHandles].join(", ")}`, { cause });
239
+ }
240
+ };
241
+ const released = signalled.then(awaitRelease, () => {
242
+ return;
243
+ });
149
244
  const cleanup = await Promise.allSettled([
150
245
  input.settle(input.event ?? { kind: "error", cause: input.error }),
151
- Promise.resolve().then(() => input.transport?.destroy()),
152
- Promise.resolve().then(input.signal).then(async () => {
153
- if (!input.transport)
154
- return;
155
- try {
156
- await waitForCommandClose(input.transport.released, input.timeoutMs);
157
- } catch (cause) {
158
- throw new Error(`Command handles remained open: ${[...input.transport.pendingHandles].join(", ")}`, { cause });
159
- }
160
- })
246
+ destroyed,
247
+ signalled,
248
+ released
161
249
  ]);
162
250
  const failures = cleanup.flatMap((item) => item.status === "rejected" && item.reason !== input.error ? [item.reason] : []);
163
251
  if (failures.length)
@@ -165,6 +253,11 @@ async function cleanupNativeCommand(input) {
165
253
  }
166
254
 
167
255
  // src/process/command-lifetime.ts
256
+ class CommandStopped extends DOMException {
257
+ constructor() {
258
+ super("Command stopped", "AbortError");
259
+ }
260
+ }
168
261
  function createCommandLifetime(input) {
169
262
  const acceptSettlement = (error) => {
170
263
  if (error instanceof NativeCommandError2 && error.code === "COMMAND_CLEANUP")
@@ -198,7 +291,7 @@ function createCommandLifetime(input) {
198
291
  },
199
292
  async stop() {
200
293
  if (!input.finished())
201
- input.controller.abort(new DOMException("Command stopped", "AbortError"));
294
+ input.controller.abort(new CommandStopped);
202
295
  await input.result.then(() => {
203
296
  return;
204
297
  }, acceptSettlement);
@@ -329,13 +422,13 @@ function createCommandTransport(child) {
329
422
  function nativeCommandBudgets(options, driver) {
330
423
  const cleanupTimeoutMs = driver?.cleanupTimeoutMs ?? options.cleanupTimeoutMs;
331
424
  const timeoutMs = driver?.timeoutMs ?? options.timeoutMs;
332
- for (const [name, value] of [
425
+ const budgets = [
333
426
  ["cleanup", cleanupTimeoutMs],
334
427
  ["execution", timeoutMs],
335
428
  ["close", driver?.closeTimeoutMs]
336
- ])
337
- if (value !== undefined && (!Number.isSafeInteger(value) || value <= 0))
338
- throw new RangeError(`Command ${name} deadline must be a positive safe integer`);
429
+ ];
430
+ for (const [name, value] of budgets)
431
+ assertPositiveSafeInteger(`Command ${name} deadline`, value, RangeError);
339
432
  return { cleanupTimeoutMs, timeoutMs };
340
433
  }
341
434
  var owners = new WeakMap;
@@ -414,7 +507,14 @@ function outputStream(source, closed, maxBufferedBytes) {
414
507
  }
415
508
  };
416
509
  }
417
- function launchNativeCommand(options, driver, onSpawn, onFailure, onInputFailure, onAcquired) {
510
+ function launchNativeCommand({
511
+ options,
512
+ driver,
513
+ onSpawn,
514
+ onFailure,
515
+ onInputFailure,
516
+ onAcquired
517
+ }) {
418
518
  let native;
419
519
  const launch = driver?.launch;
420
520
  if (!launch)
@@ -518,10 +618,48 @@ async function failedCommandStart(cause, cleanup) {
518
618
  throw error;
519
619
  }
520
620
 
621
+ // src/process/terminate.ts
622
+ function signalCommandChild(child, input) {
623
+ if (input.group && ownsCommandGroup(child)) {
624
+ const stop = {
625
+ pid: child.pid,
626
+ policy: input.policy,
627
+ cleanupTimeoutMs: input.cleanupTimeoutMs,
628
+ force: input.force
629
+ };
630
+ return input.policy.target === "leader" ? stopCommandLeader({ ...stop, leader: child, leaderExit: input.leaderExit }) : stopCommandGroup(stop);
631
+ }
632
+ return Promise.resolve().then(() => {
633
+ if (child.exitCode !== null || child.signalCode !== null)
634
+ return false;
635
+ if (!child.kill("SIGKILL"))
636
+ throw new Error("Command leader termination was refused");
637
+ return true;
638
+ });
639
+ }
640
+ async function terminateOwnedGroup(child, closed, cleanupTimeoutMs) {
641
+ try {
642
+ await signalCommandChild(child, {
643
+ group: true,
644
+ policy: { target: "group", signal: "SIGTERM", graceMs: 0 },
645
+ leaderExit: closed,
646
+ cleanupTimeoutMs,
647
+ force: true
648
+ });
649
+ await waitForCommandClose(closed, cleanupTimeoutMs);
650
+ } catch (cause) {
651
+ for (const pipe of [child.stdin, child.stdout, child.stderr])
652
+ pipe.destroy();
653
+ throw commandCleanupError(cause);
654
+ }
655
+ }
656
+
521
657
  // src/process/command-owner.ts
522
658
  function startNativeCommand(input, onSpawn, driver) {
523
659
  const options = NativeCommandOptionsSchema.parse(input);
524
660
  options.signal?.throwIfAborted();
661
+ const { killOn } = options.stop;
662
+ killOn?.throwIfAborted();
525
663
  if (process.platform === "win32" && driver?.group !== false)
526
664
  throw new NativeCommandError2("COMMAND_UNAVAILABLE", "POSIX process groups are required");
527
665
  const { cleanupTimeoutMs, timeoutMs } = nativeCommandBudgets(options, driver);
@@ -530,6 +668,12 @@ function startNativeCommand(input, onSpawn, driver) {
530
668
  options.signal?.addEventListener("abort", abort, { once: true });
531
669
  if (options.signal?.aborted)
532
670
  abort();
671
+ const kill = () => controller.abort(killOn?.reason);
672
+ killOn?.addEventListener("abort", kill, { once: true });
673
+ const release = () => {
674
+ options.signal?.removeEventListener("abort", abort);
675
+ killOn?.removeEventListener("abort", kill);
676
+ };
533
677
  const deadline = timeoutMs === undefined ? undefined : createCommandDeadline(timeoutMs, new NativeCommandError2("COMMAND_LIMIT", "Command deadline exceeded", {
534
678
  reason: "deadline"
535
679
  }));
@@ -549,13 +693,15 @@ function startNativeCommand(input, onSpawn, driver) {
549
693
  return;
550
694
  });
551
695
  const signalOwned = (force = driver?.force) => {
552
- const child = acquired?.child;
553
- if (!child)
554
- return Promise.resolve();
555
- return driver?.group === false || !ownsCommandGroup(child) ? Promise.resolve().then(() => {
556
- if (child.exitCode === null && child.signalCode === null && !child.kill("SIGKILL"))
557
- throw new Error("Command leader termination was refused");
558
- }) : stopCommandGroup(child.pid, options.killGraceMs, cleanupTimeoutMs, force);
696
+ if (!acquired)
697
+ return Promise.resolve(false);
698
+ return signalCommandChild(acquired.child, {
699
+ group: driver?.group !== false,
700
+ policy: options.stop,
701
+ leaderExit: acquired.leader,
702
+ cleanupTimeoutMs,
703
+ force: force === true
704
+ });
559
705
  };
560
706
  const owner = createCommandLifetime({
561
707
  result,
@@ -567,19 +713,26 @@ function startNativeCommand(input, onSpawn, driver) {
567
713
  let spawnFailure;
568
714
  let launched;
569
715
  try {
570
- launched = launchNativeCommand(options, driver, onSpawn, (error) => {
571
- spawnFailure = new NativeCommandError2("COMMAND_UNAVAILABLE", "Command could not start", {
572
- cause: error
573
- });
574
- controller.abort(spawnFailure);
575
- }, (error) => controller.abort(error), (transport) => {
576
- acquired = transport;
577
- registerNativeCommandOwner(transport.child, owner);
716
+ launched = launchNativeCommand({
717
+ options,
718
+ driver,
719
+ onSpawn,
720
+ onFailure: (error) => {
721
+ spawnFailure = new NativeCommandError2("COMMAND_UNAVAILABLE", "Command could not start", {
722
+ cause: error
723
+ });
724
+ controller.abort(spawnFailure);
725
+ },
726
+ onInputFailure: (error) => controller.abort(error),
727
+ onAcquired: (transport) => {
728
+ acquired = transport;
729
+ registerNativeCommandOwner(transport.child, owner);
730
+ }
578
731
  });
579
732
  } catch (cause) {
580
733
  deadline?.cancel();
581
734
  deadline?.signal.removeEventListener("abort", expired);
582
- options.signal?.removeEventListener("abort", abort);
735
+ release();
583
736
  controller.abort(cause);
584
737
  failedCommandStart(cause, (error) => cleanupNativeCommand({
585
738
  error,
@@ -598,7 +751,8 @@ function startNativeCommand(input, onSpawn, driver) {
598
751
  const cancelCloseDeadline = createLeaderCloseDeadline(leader, driver?.closeTimeoutMs, controller);
599
752
  const drain = async (stream, channel, captured) => {
600
753
  for await (const chunk of stream) {
601
- controller.signal.throwIfAborted();
754
+ if (controller.signal.aborted)
755
+ continue;
602
756
  if (!(chunk instanceof Uint8Array))
603
757
  throw new TypeError("Expected binary command output");
604
758
  total += chunk.byteLength;
@@ -609,10 +763,28 @@ function startNativeCommand(input, onSpawn, driver) {
609
763
  if (options.capture)
610
764
  captured.push(Uint8Array.from(chunk));
611
765
  if (options.onOutput)
612
- await raceAbort(Promise.resolve().then(() => {
613
- controller.signal.throwIfAborted();
614
- return options.onOutput?.(chunk, channel, controller.signal);
615
- }), controller.signal);
766
+ try {
767
+ await raceAbort(Promise.resolve().then(() => {
768
+ controller.signal.throwIfAborted();
769
+ return options.onOutput?.(chunk, channel, controller.signal);
770
+ }), controller.signal);
771
+ } catch (error) {
772
+ if (!controller.signal.aborted || error !== controller.signal.reason)
773
+ throw error;
774
+ }
775
+ }
776
+ };
777
+ let descendantsStopped = false;
778
+ const settleLeader = async (event) => {
779
+ await settle(event);
780
+ if (controller.signal.aborted)
781
+ return;
782
+ if (options.descendants !== "terminate-after-leader" || event.kind !== "exit")
783
+ return;
784
+ try {
785
+ descendantsStopped = await signalOwned();
786
+ } catch (cause) {
787
+ throw commandCleanupError(cause);
616
788
  }
617
789
  };
618
790
  const run = (async () => {
@@ -622,11 +794,16 @@ function startNativeCommand(input, onSpawn, driver) {
622
794
  drain(output, "stdout", stdout),
623
795
  drain(errorOutput, "stderr", stderr)
624
796
  ]);
625
- await raceAbort(Promise.all([drains, leader.then(settle)]), controller.signal);
797
+ await raceAbort(Promise.all([drains, leader.then(settleLeader)]), controller.signal);
626
798
  const status = await raceAbort(closed, controller.signal);
627
799
  if (spawnFailure !== undefined)
628
800
  throw spawnFailure;
629
- return { ...status, stdout: Buffer.concat(stdout), stderr: Buffer.concat(stderr) };
801
+ return {
802
+ ...status,
803
+ descendantsStopped,
804
+ stdout: Buffer.concat(stdout),
805
+ stderr: Buffer.concat(stderr)
806
+ };
630
807
  } catch (error) {
631
808
  controller.abort(error);
632
809
  await cleanupNativeCommand({
@@ -642,7 +819,7 @@ function startNativeCommand(input, onSpawn, driver) {
642
819
  cancelCloseDeadline();
643
820
  deadline?.cancel();
644
821
  deadline?.signal.removeEventListener("abort", expired);
645
- options.signal?.removeEventListener("abort", abort);
822
+ release();
646
823
  controller.abort(new Error("Command completed"));
647
824
  }
648
825
  })();
@@ -650,4 +827,4 @@ function startNativeCommand(input, onSpawn, driver) {
650
827
  return owner;
651
828
  }
652
829
 
653
- export { NativeCommandError2, stopCommandGroup, spawnOwnedCommand, ownsCommandGroup, nativeCommandOwner, startNativeCommand };
830
+ export { COMMAND_CLEANUP_TIMEOUT_MS, NativeCommandError2, CommandStopped, spawnOwnedCommand, nativeCommandOwner, terminateOwnedGroup, startNativeCommand };
@@ -2,7 +2,7 @@ import {
2
2
  AgentStoreEventEnvelopeSchema2,
3
3
  AgentStoreEventPageSchema2,
4
4
  AgentRecoverablePageSchema2
5
- } from "./index-r5hsgkz5.js";
5
+ } from "./index-0gs4ymfj.js";
6
6
  import {
7
7
  AgentRecordIdSchema2,
8
8
  AgentMessageSchema2
@@ -16,7 +16,7 @@ import {
16
16
  isActiveRunState,
17
17
  replaceMessage,
18
18
  createAgentRuntimeStore2
19
- } from "./index-ssmd41kh.js";
19
+ } from "./index-d2h99n7d.js";
20
20
 
21
21
  // src/agent-runtime/store-memory.ts
22
22
  import { z } from "zod";
@@ -0,0 +1,47 @@
1
+ import {
2
+ jsonDataRefusal
3
+ } from "./index-m6w6jtda.js";
4
+ import {
5
+ serializeCanonicalJson
6
+ } from "./index-zsvzhjtk.js";
7
+
8
+ // src/primitives/canonical-json.ts
9
+ import { z } from "zod";
10
+ var CanonicalJsonOptionsSchema = z.strictObject({
11
+ maxDepth: z.number().int().min(0).max(100).default(100),
12
+ maxNodes: z.number().int().positive().default(1e5),
13
+ maxBytes: z.number().int().positive().default(1024 * 1024)
14
+ });
15
+ var MESSAGES = {
16
+ cycle: "Value contains a cycle",
17
+ "negative-zero": "Value contains -0, which JSON cannot carry",
18
+ depth: "Value is nested deeper than maxDepth",
19
+ nodes: "Value has more nodes than maxNodes",
20
+ bytes: "Value is longer than maxBytes in UTF-8",
21
+ "not-json": "Expected bounded plain JSON: dense arrays, finite numbers, plain objects, no accessors"
22
+ };
23
+
24
+ class CanonicalJsonError2 extends TypeError {
25
+ reason;
26
+ constructor(reason) {
27
+ super(MESSAGES[reason]);
28
+ this.reason = reason;
29
+ this.name = "CanonicalJsonError";
30
+ }
31
+ }
32
+ function canonicalJson2(value, options = {}) {
33
+ return serialize(value, options, false);
34
+ }
35
+ function canonicalZodJson(value, options = {}) {
36
+ return serialize(value, options, true);
37
+ }
38
+ function serialize(value, options, zodJson) {
39
+ const limits = CanonicalJsonOptionsSchema.parse(options);
40
+ const snapshot = {};
41
+ const refusal = jsonDataRefusal(value, { ...limits, omitObjectUndefined: true, zodJson }, snapshot);
42
+ if (refusal !== undefined)
43
+ throw new CanonicalJsonError2(refusal);
44
+ return serializeCanonicalJson(snapshot.value);
45
+ }
46
+
47
+ export { CanonicalJsonError2, canonicalJson2, canonicalZodJson };
@@ -34,6 +34,28 @@ function acceptsRawString(schema) {
34
34
  }
35
35
  return false;
36
36
  }
37
+ function arrayMembers(schema) {
38
+ if (schema instanceof z.ZodArray)
39
+ return [schema];
40
+ if (schema instanceof z.ZodOptional || schema instanceof z.ZodNullable || schema instanceof z.ZodDefault) {
41
+ return arrayMembers(schema.unwrap());
42
+ }
43
+ if (schema instanceof z.ZodUnion) {
44
+ return schema.def.options.flatMap((option) => arrayMembers(option));
45
+ }
46
+ return [];
47
+ }
48
+ function writtenAsList(text, schema) {
49
+ if (!text.trimStart().startsWith("["))
50
+ return false;
51
+ let parsed;
52
+ try {
53
+ parsed = safeJsonParse(text);
54
+ } catch {
55
+ return false;
56
+ }
57
+ return Array.isArray(parsed) && arrayMembers(schema).some((m) => m.safeParse(parsed).success);
58
+ }
37
59
  function matchingVariant(union, value) {
38
60
  const disc = union.def.discriminator;
39
61
  const tag = value[disc];
@@ -48,16 +70,27 @@ function matchingVariant(union, value) {
48
70
  }
49
71
  return;
50
72
  }
51
- function coerceValue(value, schema) {
73
+ function coerceValue(value, schema, path) {
52
74
  if (!schema)
53
75
  return value;
54
76
  if (schema instanceof z.ZodOptional || schema instanceof z.ZodNullable || schema instanceof z.ZodDefault) {
55
- return coerceValue(value, schema.unwrap());
77
+ return coerceValue(value, schema.unwrap(), path);
56
78
  }
57
79
  let current = value;
58
80
  if (typeof current === "string" && needsJsonCoercion(schema)) {
59
- if (acceptsRawString(schema))
81
+ if (acceptsRawString(schema)) {
82
+ if (writtenAsList(current, schema)) {
83
+ throw new z.ZodError([
84
+ {
85
+ code: "custom",
86
+ path: [...path],
87
+ message: `${path.join(".")} is a list written as text — pass the array itself, not JSON written as text`,
88
+ input: current
89
+ }
90
+ ]);
91
+ }
60
92
  return current;
93
+ }
61
94
  try {
62
95
  current = safeJsonParse(current);
63
96
  } catch {
@@ -68,21 +101,21 @@ function coerceValue(value, schema) {
68
101
  const shape = schema.shape;
69
102
  const out = {};
70
103
  for (const [key, item] of Object.entries(current)) {
71
- out[key] = coerceValue(item, shape[key]);
104
+ out[key] = coerceValue(item, shape[key], [...path, key]);
72
105
  }
73
106
  return out;
74
107
  }
75
108
  if (schema instanceof z.ZodArray && Array.isArray(current)) {
76
- return current.map((item) => coerceValue(item, schema.element));
109
+ return current.map((item, index) => coerceValue(item, schema.element, [...path, index]));
77
110
  }
78
111
  if (schema instanceof z.ZodDiscriminatedUnion && isRecord(current)) {
79
112
  const variant = matchingVariant(schema, current);
80
- return variant ? coerceValue(current, variant) : current;
113
+ return variant ? coerceValue(current, variant, path) : current;
81
114
  }
82
115
  return current;
83
116
  }
84
117
  function coerceJsonArgs2(args, schema) {
85
- const coerced = coerceValue(args, schema);
118
+ const coerced = coerceValue(args, schema, []);
86
119
  return isRecord(coerced) ? coerced : args;
87
120
  }
88
121