@iowarp/clio-coder 0.4.9 → 0.5.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 (1172) hide show
  1. package/.claude-plugin/marketplace.json +11 -3
  2. package/CHANGELOG.md +153 -0
  3. package/CODE_OF_CONDUCT.md +10 -0
  4. package/CONTRIBUTING.md +208 -382
  5. package/NOTICE +8 -2
  6. package/README.md +199 -418
  7. package/ROADMAP.md +82 -0
  8. package/SECURITY.md +14 -11
  9. package/dist/acp-KS7ARGV6.js +132 -0
  10. package/dist/agents-YOGJ2YEJ.js +163 -0
  11. package/dist/assets/codewiki.json +1 -1
  12. package/dist/auth-CEDCO6O6.js +557 -0
  13. package/dist/background-YWTBPSQU.js +39 -0
  14. package/dist/builtins-GDYO4RTR.js +23 -0
  15. package/dist/chunk-27YTM2CV.js +175 -0
  16. package/dist/chunk-2AF6YC7Q.js +75 -0
  17. package/dist/chunk-2DTIWSAW.js +381 -0
  18. package/dist/chunk-2EMLKSCX.js +262 -0
  19. package/dist/chunk-2OJ3YZQP.js +665 -0
  20. package/dist/chunk-2VLYHHFT.js +35 -0
  21. package/dist/chunk-2WVPJF3Z.js +204 -0
  22. package/dist/chunk-33OASOS6.js +176 -0
  23. package/dist/chunk-3BD2LXYJ.js +19 -0
  24. package/dist/chunk-3JHUFKG7.js +30 -0
  25. package/dist/chunk-3JLTRPN7.js +711 -0
  26. package/dist/chunk-3LT34CAM.js +2796 -0
  27. package/dist/chunk-3O5JWP4L.js +1670 -0
  28. package/dist/chunk-3UW3KU4A.js +21 -0
  29. package/dist/chunk-4A6YRGV4.js +569 -0
  30. package/dist/chunk-4D2BRCZ3.js +67 -0
  31. package/dist/chunk-4SYHGVDE.js +668 -0
  32. package/dist/chunk-4VDHLCF5.js +66 -0
  33. package/dist/chunk-4WOOTKFD.js +637 -0
  34. package/dist/chunk-4WV4PI66.js +80 -0
  35. package/dist/chunk-53OXPRI6.js +195 -0
  36. package/dist/chunk-55RMDDFM.js +1347 -0
  37. package/dist/chunk-56XP4FJU.js +2025 -0
  38. package/dist/chunk-5B3RTYAK.js +123 -0
  39. package/dist/chunk-5CD243WE.js +45 -0
  40. package/dist/chunk-5JQR5B4D.js +709 -0
  41. package/dist/chunk-5KQEUIWM.js +597 -0
  42. package/dist/chunk-5LP5FNNR.js +915 -0
  43. package/dist/chunk-62UK7AGW.js +9344 -0
  44. package/dist/chunk-6CTHLZFB.js +563 -0
  45. package/dist/chunk-6EJYVCTN.js +23 -0
  46. package/dist/chunk-6OWUM2NC.js +12289 -0
  47. package/dist/chunk-6RJMYYIE.js +1023 -0
  48. package/dist/chunk-6W75D37F.js +643 -0
  49. package/dist/chunk-733ZBT5P.js +1721 -0
  50. package/dist/chunk-77DCC6JZ.js +3710 -0
  51. package/dist/chunk-7QXCO3AF.js +156 -0
  52. package/dist/chunk-7RET77VB.js +481 -0
  53. package/dist/chunk-A4MVRV4C.js +65 -0
  54. package/dist/chunk-ALJWT6O6.js +93 -0
  55. package/dist/chunk-AVSR2HKI.js +232 -0
  56. package/dist/chunk-B7GY6QER.js +42 -0
  57. package/dist/chunk-BFOSV5EZ.js +178 -0
  58. package/dist/chunk-BGOIM7NB.js +103 -0
  59. package/dist/chunk-BJH6WFIB.js +372 -0
  60. package/dist/chunk-BOBCCDJ6.js +1533 -0
  61. package/dist/chunk-BRCOSE7O.js +117 -0
  62. package/dist/chunk-BYFHHCFV.js +601 -0
  63. package/dist/chunk-C2CPOIH2.js +83 -0
  64. package/dist/chunk-C7AQTPCE.js +694 -0
  65. package/dist/chunk-CBAQPTDU.js +165 -0
  66. package/dist/chunk-CDQ2UC6W.js +125 -0
  67. package/dist/chunk-CN6SW5DC.js +177 -0
  68. package/dist/chunk-CRHPCPZP.js +132 -0
  69. package/dist/chunk-CTFPFW3H.js +44 -0
  70. package/dist/chunk-D3KWFOUT.js +103 -0
  71. package/dist/chunk-D65E25JG.js +185 -0
  72. package/dist/chunk-DCGHJQ2U.js +236 -0
  73. package/dist/chunk-DE2LU267.js +106 -0
  74. package/dist/chunk-DF6PI6GN.js +97 -0
  75. package/dist/chunk-DGC6X6XR.js +53 -0
  76. package/dist/chunk-DOUISWEE.js +526 -0
  77. package/dist/chunk-DR3TAEUA.js +188 -0
  78. package/dist/chunk-DVTBERFY.js +33 -0
  79. package/dist/chunk-DXSETN72.js +1051 -0
  80. package/dist/chunk-DZLR4UEH.js +128 -0
  81. package/dist/chunk-E6IPKW2E.js +77 -0
  82. package/dist/chunk-EG4ARXPC.js +139 -0
  83. package/dist/chunk-EKV4UBCM.js +652 -0
  84. package/dist/chunk-EOJPDNUP.js +1325 -0
  85. package/dist/chunk-EX57VVWW.js +4157 -0
  86. package/dist/chunk-EYTLV3W3.js +5937 -0
  87. package/dist/chunk-EZD2BXGP.js +475 -0
  88. package/dist/chunk-EZDCA34W.js +314 -0
  89. package/dist/chunk-FD2I4KBR.js +33 -0
  90. package/dist/chunk-FD3IAHQM.js +27 -0
  91. package/dist/chunk-FFYTC2KQ.js +416 -0
  92. package/dist/chunk-FGSQHUCK.js +110 -0
  93. package/dist/chunk-GCQFN7YI.js +32 -0
  94. package/dist/chunk-GGPF6LLE.js +38 -0
  95. package/dist/chunk-GGWI3OVM.js +215 -0
  96. package/dist/chunk-GLIQT7SU.js +172 -0
  97. package/dist/chunk-GN7QBEEI.js +95 -0
  98. package/dist/chunk-GRHOXDKB.js +1104 -0
  99. package/dist/chunk-HMN2C6YL.js +54 -0
  100. package/dist/chunk-HOEDA42N.js +310 -0
  101. package/dist/chunk-HOYZUKG7.js +192 -0
  102. package/dist/chunk-HQVN7G4F.js +1021 -0
  103. package/dist/chunk-HSQQFDB3.js +519 -0
  104. package/dist/chunk-I4ELN5BX.js +47 -0
  105. package/dist/chunk-I4Y4WKZR.js +386 -0
  106. package/dist/chunk-IFPDAD7R.js +797 -0
  107. package/dist/chunk-IN7DGBVS.js +582 -0
  108. package/dist/chunk-ISHUS7HC.js +396 -0
  109. package/dist/chunk-JPXLJSGR.js +191 -0
  110. package/dist/chunk-JQCLXSFI.js +69 -0
  111. package/dist/chunk-KBUTSJSR.js +61 -0
  112. package/dist/chunk-KW5HXKLJ.js +56 -0
  113. package/dist/chunk-L4APUGCT.js +139 -0
  114. package/dist/chunk-L7G7K4I2.js +505 -0
  115. package/dist/chunk-LAR7DX5E.js +1840 -0
  116. package/dist/chunk-LAVUQX3B.js +462 -0
  117. package/dist/chunk-LJRBX7QR.js +116 -0
  118. package/dist/chunk-LNOXCGN2.js +1864 -0
  119. package/dist/chunk-LTWH2ACR.js +23002 -0
  120. package/dist/chunk-LYJJ6546.js +661 -0
  121. package/dist/chunk-M2IPMWCN.js +457 -0
  122. package/dist/chunk-MGLRTOCK.js +101 -0
  123. package/dist/chunk-MZF5IKZT.js +160 -0
  124. package/dist/chunk-N24R6KWS.js +386 -0
  125. package/dist/chunk-NASYVWDB.js +604 -0
  126. package/dist/chunk-NBXFPI7U.js +195 -0
  127. package/dist/chunk-NDPF2N2L.js +400 -0
  128. package/dist/chunk-NFSK2VNU.js +446 -0
  129. package/dist/chunk-NG3QQSXY.js +43 -0
  130. package/dist/chunk-NOCSM22Y.js +63 -0
  131. package/dist/chunk-NVPXXW2H.js +1143 -0
  132. package/dist/chunk-O63U2I6I.js +30 -0
  133. package/dist/chunk-OJXOA6YU.js +98 -0
  134. package/dist/chunk-OPD7GL6F.js +1196 -0
  135. package/dist/chunk-OQ2EOAHA.js +14399 -0
  136. package/dist/chunk-OV62D6KO.js +688 -0
  137. package/dist/chunk-OZ76TLGU.js +740 -0
  138. package/dist/chunk-P4GNZPXO.js +1156 -0
  139. package/dist/chunk-PS6JAWJZ.js +78 -0
  140. package/dist/chunk-PXRCXGLK.js +1865 -0
  141. package/dist/chunk-QDUUOZ3S.js +108 -0
  142. package/dist/chunk-QG6I2T5E.js +1416 -0
  143. package/dist/chunk-QHSBROEW.js +308 -0
  144. package/dist/chunk-QNUQ7K7D.js +46 -0
  145. package/dist/chunk-QZTTRSJE.js +333 -0
  146. package/dist/chunk-R2UUNSNQ.js +1605 -0
  147. package/dist/chunk-R7FGRZNF.js +1794 -0
  148. package/dist/chunk-RNDCROSG.js +199 -0
  149. package/dist/chunk-S36CXHO2.js +302 -0
  150. package/dist/chunk-SJGS3GDI.js +575 -0
  151. package/dist/chunk-SQZHXUB3.js +510 -0
  152. package/dist/chunk-SUTLW6ND.js +686 -0
  153. package/dist/chunk-SYF7FVBL.js +179 -0
  154. package/dist/chunk-T2MDZES3.js +1577 -0
  155. package/dist/chunk-T33IYTZM.js +1146 -0
  156. package/dist/chunk-TDGYTWM6.js +49 -0
  157. package/dist/chunk-TGL5FZVD.js +132 -0
  158. package/dist/chunk-TGWZXJ7L.js +1205 -0
  159. package/dist/chunk-TKDRT2DF.js +114 -0
  160. package/dist/chunk-TV2EBCSQ.js +152 -0
  161. package/dist/chunk-U26XXPJS.js +367 -0
  162. package/dist/chunk-U5QU5ZOD.js +419 -0
  163. package/dist/chunk-U6YTUVOX.js +1011 -0
  164. package/dist/chunk-UCINIRHW.js +188 -0
  165. package/dist/chunk-UJD5MPP6.js +52 -0
  166. package/dist/chunk-URCXX7WJ.js +146 -0
  167. package/dist/chunk-UX2L5CUD.js +898 -0
  168. package/dist/chunk-UZVYEF57.js +114 -0
  169. package/dist/chunk-V35KZDUZ.js +218 -0
  170. package/dist/chunk-VESL6DQY.js +1058 -0
  171. package/dist/chunk-VKHLUZNO.js +986 -0
  172. package/dist/chunk-VOYUCAQF.js +584 -0
  173. package/dist/chunk-VYRQHORQ.js +414 -0
  174. package/dist/chunk-W53XSRQE.js +245 -0
  175. package/dist/chunk-X4CEFOSG.js +226 -0
  176. package/dist/chunk-XDHUDE5K.js +380 -0
  177. package/dist/chunk-XISLDHEL.js +1290 -0
  178. package/dist/chunk-XM34YQ2Y.js +169 -0
  179. package/dist/chunk-XMDBTYCH.js +661 -0
  180. package/dist/chunk-XS2QPZJE.js +449 -0
  181. package/dist/chunk-YBUECLAF.js +618 -0
  182. package/dist/chunk-YQ6XEFVK.js +332 -0
  183. package/dist/chunk-YYLCPDCC.js +990 -0
  184. package/dist/chunk-Z4GLJ6J4.js +1035 -0
  185. package/dist/chunk-ZARZ4POR.js +210 -0
  186. package/dist/chunk-ZJPORZTC.js +119 -0
  187. package/dist/chunk-ZNUZ3EXD.js +243 -0
  188. package/dist/chunk-ZPST2KQO.js +49 -0
  189. package/dist/chunk-ZR5YA6ZF.js +512 -0
  190. package/dist/chunk-ZU4JPCPR.js +319 -0
  191. package/dist/chunk-ZUKUCZYZ.js +39 -0
  192. package/dist/cli/index.js +56 -45
  193. package/dist/clio-K2PBVCEM.js +27 -0
  194. package/dist/clio-context-tools-GR4OHFSO.js +145 -0
  195. package/dist/code-nav-4X3OI6DK.js +715 -0
  196. package/dist/codewiki/build-worker.js +4 -4
  197. package/dist/compile-cache-YRB6QRO7.js +18 -0
  198. package/dist/components-RQOJ6NUR.js +675 -0
  199. package/dist/config-Q5J7UBAB.js +291 -0
  200. package/dist/config-XE7XYZLU.js +38 -0
  201. package/dist/config-graph-P3555574.js +175 -0
  202. package/dist/configure-KIJ32ZO6.js +104 -0
  203. package/dist/context-LFBQOSXT.js +344 -0
  204. package/dist/context-NNLBES2Y.js +82 -0
  205. package/dist/context-WBH3KSVR.js +302 -0
  206. package/dist/context-clear-YOHMQ6SQ.js +208 -0
  207. package/dist/context-index-X2N5UAIF.js +120 -0
  208. package/dist/context-map-HOSMGUG2.js +555 -0
  209. package/dist/context-working-set-MRAEVDNV.js +1564 -0
  210. package/dist/data-tool-JJPBGMQJ.js +2986 -0
  211. package/dist/detail-RHJOTGN4.js +139 -0
  212. package/dist/dispatch-runner-NC7PYNIO.js +2477 -0
  213. package/dist/docs-K4GBWRUX.js +342 -0
  214. package/dist/doctor-S5KZ2GTN.js +1138 -0
  215. package/dist/doctor-deep-2EJQSHIZ.js +130 -0
  216. package/dist/domain-loader-MB34FDPD.js +13 -0
  217. package/dist/eval-3D6M36N7.js +5220 -0
  218. package/dist/eval-inventory-SM3HNM47.js +260 -0
  219. package/dist/evals-FO6JEUCN.js +104 -0
  220. package/dist/evidence-6IYN52ET.js +262 -0
  221. package/dist/evidence-JVECPI3F.js +250 -0
  222. package/dist/evidence-XNVPPLVK.js +410 -0
  223. package/dist/evolve-TLPUDJDM.js +634 -0
  224. package/dist/extensions-ROZJ5X3J.js +311 -0
  225. package/dist/fleet-6RJWIOEO.js +284 -0
  226. package/dist/fleet-WKVBF5SZ.js +942 -0
  227. package/dist/fleet-commands-L6WFT7KZ.js +76 -0
  228. package/dist/fleet-decisions-BTQMWU5A.js +55 -0
  229. package/dist/fleet-graph-553DZ67Q.js +141 -0
  230. package/dist/fleet-inspect-236FZPRB.js +329 -0
  231. package/dist/fleet-new-CKUXP3CO.js +48 -0
  232. package/dist/fleet-preflight-NZQHABWO.js +95 -0
  233. package/dist/fleet-validate-7NLAE26R.js +96 -0
  234. package/dist/fleet-verify-E3RO6A5W.js +226 -0
  235. package/dist/fleet-view-KMZQY7YJ.js +144 -0
  236. package/dist/gui/client/assets/abnfDiagram-VCTEODGH-DPBWQwNn.js +1 -0
  237. package/dist/gui/client/assets/architecture-7GRP2DOG-D1w8FrFW.js +1 -0
  238. package/dist/gui/client/assets/architectureDiagram-5GKGNRK7-CVPgKd1-.js +36 -0
  239. package/dist/gui/client/assets/blockDiagram-I7D4REHJ-BLmnqkK5.js +129 -0
  240. package/dist/gui/client/assets/c4Diagram-7LVT6UL2-4AU9cfM7.js +38 -0
  241. package/dist/gui/client/assets/channel-DwFZ0m8S.js +1 -0
  242. package/dist/gui/client/assets/chunk-4HAMMTFA-EOWkKCav.js +62 -0
  243. package/dist/gui/client/assets/chunk-75Z2AOVW-CygeoIMl.js +2 -0
  244. package/dist/gui/client/assets/chunk-DU6HZSFF-s27fViLb.js +125 -0
  245. package/dist/gui/client/assets/chunk-F27PBJKO-BrHvwLsZ.js +1 -0
  246. package/dist/gui/client/assets/chunk-GMAD6QVW-DzPh-7jt.js +72 -0
  247. package/dist/gui/client/assets/chunk-GVQU2GXP-pIaQkIzm.js +1 -0
  248. package/dist/gui/client/assets/chunk-IMKFNOWR-BGJVE_Br.js +231 -0
  249. package/dist/gui/client/assets/chunk-L3NEJ4N5-B3YLuhww.js +1 -0
  250. package/dist/gui/client/assets/chunk-OSK3NFVY-BRj61HHU.js +10 -0
  251. package/dist/gui/client/assets/chunk-P2QGCYS3-Sno90KxP.js +1 -0
  252. package/dist/gui/client/assets/chunk-POPQ4Y6H-Cw8NTbxr.js +1 -0
  253. package/dist/gui/client/assets/chunk-PWAF6VOD-BIhHgz37.js +1 -0
  254. package/dist/gui/client/assets/chunk-SHT3W25Y-Cqv7npBj.js +168 -0
  255. package/dist/gui/client/assets/chunk-SVP7TREG-Hxzl6Dee.js +88 -0
  256. package/dist/gui/client/assets/chunk-TICWLB2K-CIFVyVP2.js +206 -0
  257. package/dist/gui/client/assets/classDiagram-ZZMXUADV-BJbAiI_w.js +1 -0
  258. package/dist/gui/client/assets/classDiagram-v2-VYDZK3BY-BJbAiI_w.js +1 -0
  259. package/dist/gui/client/assets/cynefin-OW5HDTMX-DecLWZ-y.js +1 -0
  260. package/dist/gui/client/assets/cynefinDiagram-5FMLGOSQ-CK-T2N-D.js +62 -0
  261. package/dist/gui/client/assets/dagre-GXQ25YYZ-C0dfg-OS.js +4 -0
  262. package/dist/gui/client/assets/diagram-S7CK7UJ4-EaJukVh-.js +30 -0
  263. package/dist/gui/client/assets/diagram-UQ7AKVKN-xcOucEtP.js +41 -0
  264. package/dist/gui/client/assets/diagram-VSXAHHWV-3AUJACMf.js +3 -0
  265. package/dist/gui/client/assets/diagram-VX7I27RA-TPknLqam.js +24 -0
  266. package/dist/gui/client/assets/diagram-Z3DM3KII-wa1q3YMF.js +24 -0
  267. package/dist/gui/client/assets/ebnfDiagram-PWID7BFC-JBCF2-s7.js +1 -0
  268. package/dist/gui/client/assets/erDiagram-RLTQ6QDP-CmXjXPc4.js +99 -0
  269. package/dist/gui/client/assets/eventmodeling-NTZA5JFV-D_1aJWYl.js +1 -0
  270. package/dist/gui/client/assets/flowDiagram-HODETNUW-BQtZlael.js +1 -0
  271. package/dist/gui/client/assets/framework-Bq-znqwW.js +9 -0
  272. package/dist/gui/client/assets/ganttDiagram-EL5Y4UJY-IPaL_kaa.js +292 -0
  273. package/dist/gui/client/assets/gitGraph-4MIJSDKK-Oy0Q3hoc.js +1 -0
  274. package/dist/gui/client/assets/gitGraphDiagram-WWUBYQGX-jtAuBmbc.js +106 -0
  275. package/dist/gui/client/assets/index-CuFuBEdL.css +1 -0
  276. package/dist/gui/client/assets/index-hMbEIsX0.js +87 -0
  277. package/dist/gui/client/assets/info-A6RAGUB7-UtEs1tv7.js +1 -0
  278. package/dist/gui/client/assets/infoDiagram-27XIBGKW-hlwR1pBW.js +2 -0
  279. package/dist/gui/client/assets/ishikawaDiagram-5VMMS53U-C6vMtfsd.js +70 -0
  280. package/dist/gui/client/assets/journeyDiagram-3NMN7TZE-EAwAl_PS.js +139 -0
  281. package/dist/gui/client/assets/kanban-definition-UXKFOSKX-CQOhRKHW.js +89 -0
  282. package/dist/gui/client/assets/line-DbcwGZTW.js +1 -0
  283. package/dist/gui/client/assets/mermaid-parser.core-C2QfVcHd.js +7 -0
  284. package/dist/gui/client/assets/mermaid.core-N9qUTre1.js +44 -0
  285. package/dist/gui/client/assets/mindmap-definition-YA3MSWOX-BR_FL9gK.js +96 -0
  286. package/dist/gui/client/assets/packet-AYTQ26CC-CbBJ2oAa.js +1 -0
  287. package/dist/gui/client/assets/pegDiagram-XKGWAZYB-BruU0IHM.js +1 -0
  288. package/dist/gui/client/assets/pie-WAS4IAKB-BWdSng4H.js +1 -0
  289. package/dist/gui/client/assets/pieDiagram-E7YTZNPT-CR3ljgdU.js +39 -0
  290. package/dist/gui/client/assets/quadrantDiagram-AXDQQJYC-C-boKslr.js +7 -0
  291. package/dist/gui/client/assets/radar-RG4KPBEZ-CGlOnAKG.js +1 -0
  292. package/dist/gui/client/assets/railroad-74A4TZTK-CDvuAlyC.js +1 -0
  293. package/dist/gui/client/assets/railroad-abnf-HS5TGJTU-CQUA9crC.js +1 -0
  294. package/dist/gui/client/assets/railroad-ebnf-LZEXJU2U-CD857gxq.js +1 -0
  295. package/dist/gui/client/assets/railroad-peg-WCYAUIDC-DUV4k35E.js +1 -0
  296. package/dist/gui/client/assets/railroadDiagram-O6MQD6OU-DMR4LXmA.js +1 -0
  297. package/dist/gui/client/assets/requirementDiagram-BXWQKSXE-DVltaF6c.js +84 -0
  298. package/dist/gui/client/assets/sankeyDiagram-P5KCCOFB-CHdNz472.js +40 -0
  299. package/dist/gui/client/assets/sequenceDiagram-WJ2MYXX4-DaMafIty.js +162 -0
  300. package/dist/gui/client/assets/stateDiagram-D77RDMKH-CEbBHqn3.js +1 -0
  301. package/dist/gui/client/assets/stateDiagram-v2-MP3YSRHH-B3JgDdFg.js +1 -0
  302. package/dist/gui/client/assets/swimlanes-42K2YHIH-BlPHndnJ.js +1 -0
  303. package/dist/gui/client/assets/swimlanesDiagram-VR7AAH4N-BPabHwsZ.js +8 -0
  304. package/dist/gui/client/assets/timeline-definition-24CTP7MA-E4Y1lPBI.js +120 -0
  305. package/dist/gui/client/assets/treeView-Q6P3EWNA-DrY0uhTN.js +1 -0
  306. package/dist/gui/client/assets/treemap-WGGIJYW6-CVotnLHf.js +1 -0
  307. package/dist/gui/client/assets/vennDiagram-4TSXK5OY-DJNrLIOF.js +34 -0
  308. package/dist/gui/client/assets/wardley-WFR3VGLG-ClOpAp5S.js +1 -0
  309. package/dist/gui/client/assets/wardleyDiagram-VM6X3IG4-qhMoKOXc.js +78 -0
  310. package/dist/gui/client/assets/xychartDiagram-S5SC5T6Z-CTuXoo9R.js +7 -0
  311. package/dist/gui/client/index.html +6 -0
  312. package/dist/gui/ops-worker.js +167 -0
  313. package/dist/gui/reads-worker.js +473 -0
  314. package/dist/gui/server.js +9780 -0
  315. package/dist/gui-QJS7XQMV.js +16 -0
  316. package/dist/init-DV5B6HQG.js +354 -0
  317. package/dist/install-6C45YXFP.js +19 -0
  318. package/dist/install-O7NSRU2W.js +13 -0
  319. package/dist/interactive-OXGYZYAS.js +22381 -0
  320. package/dist/interop-J7UOBOSF.js +254 -0
  321. package/dist/inventory-OEGIL6PY.js +144 -0
  322. package/dist/library-B3UPGY4V.js +83 -0
  323. package/dist/library-MXQA5DLT.js +309 -0
  324. package/dist/library-ROZAMUIL.js +496 -0
  325. package/dist/library-import-2LTWOVBD.js +190 -0
  326. package/dist/library-inventory-LJ3XHLWO.js +60 -0
  327. package/dist/library-validation-DARHHUNW.js +46 -0
  328. package/dist/mcp-2GSPYQ54.js +28 -0
  329. package/dist/memory-J3STUUIK.js +537 -0
  330. package/dist/models-Y3GMFJ2V.js +314 -0
  331. package/dist/monitor-LHNH577J.js +811 -0
  332. package/dist/orchestrator-DTAPXULA.js +12117 -0
  333. package/dist/panes-A743ONZ5.js +103 -0
  334. package/dist/panes-CTNO57ZY.js +76 -0
  335. package/dist/paths-3SBYJQDP.js +68 -0
  336. package/dist/preload-OJBMAIXF.js +140 -0
  337. package/dist/providers-CMETPZNS.js +232 -0
  338. package/dist/registry-37T4U6X2.js +15 -0
  339. package/dist/reset-O7EUCYWO.js +346 -0
  340. package/dist/resources-FY6XYFN2.js +189 -0
  341. package/dist/run-H64MEVTA.js +1067 -0
  342. package/dist/run-script-PQ5NRU3X.js +42 -0
  343. package/dist/settings-SNIQNXCW.js +73 -0
  344. package/dist/settings-controls-X6GMCPVG.js +202 -0
  345. package/dist/share-CAFMMQLM.js +299 -0
  346. package/dist/skills-ERKQUC7L.js +114 -0
  347. package/dist/skills-eval-CQ23MYQK.js +1099 -0
  348. package/dist/skills-inventory-TVUYJDVN.js +142 -0
  349. package/dist/slash-commands-ROG3KIFJ.js +107 -0
  350. package/dist/startup-background-KDWCQMWT.js +247 -0
  351. package/dist/steer-KKYXJSH4.js +77 -0
  352. package/dist/support-M3RCUUEL.js +40 -0
  353. package/dist/system-ZDW44ZGX.js +142 -0
  354. package/dist/target-runtimes-PWA22WVW.js +73 -0
  355. package/dist/targets-AJWA6E7Z.js +1207 -0
  356. package/dist/tasks-6L2JJRC5.js +39 -0
  357. package/dist/terminal-lease-YFUSDPAD.js +432 -0
  358. package/dist/tools-5XJUABRD.js +30 -0
  359. package/dist/trace-LA5MVR4Y.js +527 -0
  360. package/dist/tree-sitter-TQW3Y52T.js +4673 -0
  361. package/dist/tui-primitives-IUCVWLH5.js +19 -0
  362. package/dist/uninstall-SAWGGXAB.js +448 -0
  363. package/dist/upgrade-HSNSVTZG.js +300 -0
  364. package/dist/usage-XSILDHKF.js +1083 -0
  365. package/dist/verifiers-ECA5GIHL.js +633 -0
  366. package/dist/verify-R6QQCCEB.js +31 -0
  367. package/dist/version-PLZYB5KW.js +22 -0
  368. package/dist/web-fetch-PVZNMBOB.js +803 -0
  369. package/dist/wiki-generate-RP22WP5K.js +647 -0
  370. package/dist/with-panes-W3PAZPRF.js +629 -0
  371. package/dist/worker/entry.js +324 -284
  372. package/dist/workspace-check-3764ZKC2.js +83 -0
  373. package/docs/README.md +26 -10
  374. package/docs/architecture/acp.md +179 -12
  375. package/docs/architecture/artifact-placement.md +1 -1
  376. package/docs/architecture/capacity-and-scheduling.md +7 -8
  377. package/docs/architecture/context-engine.md +350 -95
  378. package/docs/architecture/model-catalog.md +18 -11
  379. package/docs/architecture/observability.md +1 -1
  380. package/docs/architecture/pi-boundary.md +59 -6
  381. package/docs/architecture/prompt-envelope-and-tools.md +147 -39
  382. package/docs/architecture/provider-adapter-cookbook.md +2 -2
  383. package/docs/architecture/safety-model.md +18 -4
  384. package/docs/architecture/trace-store.md +2 -2
  385. package/docs/architecture/tui-design.md +41 -81
  386. package/docs/architecture/worker-dispatch-mechanics.md +9 -1
  387. package/docs/gui/README.md +69 -0
  388. package/docs/gui/boundary-doctrine.md +104 -0
  389. package/docs/gui/chat-rendering-spec.md +1440 -0
  390. package/docs/gui/cli-surface-routing.md +148 -0
  391. package/docs/gui/delivery-order.md +53 -0
  392. package/docs/gui/event-bus-coverage.md +103 -0
  393. package/docs/gui/inspector-presentation.md +71 -0
  394. package/docs/gui/parity/01-cli-surface.md +74 -0
  395. package/docs/gui/parity/02-slash-and-surfaces.md +110 -0
  396. package/docs/gui/parity/03-domains-and-plan.md +69 -0
  397. package/docs/gui/performance-baseline.md +76 -0
  398. package/docs/gui/settings-write-surface.md +267 -0
  399. package/docs/gui/workflow-coverage.md +64 -0
  400. package/docs/guide/built-in-agents.md +1 -1
  401. package/docs/guide/commands-and-modes.md +256 -99
  402. package/docs/guide/configuration-and-targets.md +485 -124
  403. package/docs/guide/configuration-reference.md +165 -82
  404. package/docs/guide/doctor.md +127 -0
  405. package/docs/guide/environment-variables.md +1 -1
  406. package/docs/guide/exit-codes-and-output.md +3 -1
  407. package/docs/guide/extensions-and-sharing.md +3 -14
  408. package/docs/guide/fleet-dispatch.md +231 -45
  409. package/docs/guide/glossary.md +1 -1
  410. package/docs/guide/installation-and-lifecycle.md +27 -16
  411. package/docs/guide/interop.md +2 -2
  412. package/docs/guide/proactive-memory.md +154 -68
  413. package/docs/guide/resource-library.md +4 -0
  414. package/docs/guide/skills-marketplace.md +8 -4
  415. package/docs/guide/slurm.md +88 -0
  416. package/docs/guide/tool-usage.md +134 -11
  417. package/docs/guide/troubleshooting.md +4 -2
  418. package/docs/process/battletest-2026-09-20-fixes.md +161 -0
  419. package/docs/process/configure-tree-proposal.md +637 -0
  420. package/docs/process/documentation-coverage.md +8 -0
  421. package/docs/process/documentation-guide.md +18 -1
  422. package/docs/process/eval-runner.md +58 -14
  423. package/docs/process/performance-methodology.md +11 -3
  424. package/docs/process/release-cut-checklist.md +29 -3
  425. package/docs/process/tool-audit-v0.4.9.md +3 -0
  426. package/examples/extensions/README.md +1 -3
  427. package/examples/extensions/lab-status/clio-coder-extension.json +1 -1
  428. package/examples/extensions/measurements/clio-coder-extension.json +1 -1
  429. package/library/registry.yaml +30 -5
  430. package/library/skills/git/fix-issue/SKILL.md +2 -1
  431. package/library/skills/git/fix-issue/plugin.json +1 -1
  432. package/library/skills/git/ship/SKILL.md +2 -1
  433. package/library/skills/git/ship/plugin.json +1 -1
  434. package/library/skills/meta/clio-coder-test/SKILL.md +5 -6
  435. package/library/skills/meta/clio-coder-test/evals.md +2 -2
  436. package/library/skills/meta/clio-coder-test/references/test-map.md +2 -2
  437. package/library/skills/registry.yaml +9 -5
  438. package/library/skills/research/slurm-jobs/SKILL.md +110 -0
  439. package/library/skills/research/slurm-jobs/evals.md +39 -0
  440. package/library/skills/research/slurm-jobs/plugin.json +23 -0
  441. package/library/skills/skill-marketplace.json +18 -2
  442. package/package.json +15 -10
  443. package/src/cli/args.ts +59 -0
  444. package/src/cli/argv.ts +7 -0
  445. package/src/cli/clio.ts +9 -1
  446. package/src/cli/configure-controls.ts +136 -0
  447. package/src/cli/configure-onboarding.ts +24 -7
  448. package/src/cli/configure-quick.ts +32 -7
  449. package/src/cli/configure-target.ts +11 -1
  450. package/src/cli/configure.ts +253 -256
  451. package/src/cli/docs-server.ts +290 -0
  452. package/src/cli/docs.ts +60 -15
  453. package/src/cli/doctor-deep.ts +126 -0
  454. package/src/cli/doctor-hpc.ts +122 -0
  455. package/src/cli/doctor-slurm.ts +130 -0
  456. package/src/cli/doctor-task-worktrees.ts +88 -0
  457. package/src/cli/doctor.ts +165 -16
  458. package/src/cli/fleet-verify.ts +3 -2
  459. package/src/cli/gui.ts +111 -0
  460. package/src/cli/index.ts +14 -4
  461. package/src/cli/library.ts +2 -7
  462. package/src/cli/modes/json-stream.ts +4 -2
  463. package/src/cli/modes/print.ts +252 -25
  464. package/src/cli/run.ts +199 -71
  465. package/src/cli/skills.ts +25 -7
  466. package/src/cli/targets.ts +87 -9
  467. package/src/cli/uninstall.ts +28 -8
  468. package/src/cli/usage.ts +2 -1
  469. package/src/cli/workspace-check.ts +71 -0
  470. package/src/core/bash-exec.ts +8 -2
  471. package/src/core/bus-events.ts +32 -3
  472. package/src/core/cache-telemetry.ts +3 -2
  473. package/src/core/compile-cache.ts +11 -1
  474. package/src/core/config.ts +59 -6
  475. package/src/core/defaults.ts +27 -5
  476. package/src/core/diagnostics.ts +25 -0
  477. package/src/core/event-bus.ts +2 -1
  478. package/src/core/gateway-routing.ts +10 -3
  479. package/src/core/git-commit-attribution.ts +2 -1
  480. package/src/core/naming-compat.ts +6 -4
  481. package/src/core/package-root.ts +0 -9
  482. package/src/core/path-canonical.ts +143 -24
  483. package/src/core/residency-target-key.ts +2 -6
  484. package/src/core/run-overrides.ts +1 -1
  485. package/src/core/settings-awareness.ts +108 -0
  486. package/src/core/settings-controls.ts +673 -0
  487. package/src/core/settings-navigation.ts +116 -0
  488. package/src/core/theme-token-hex.ts +19 -9
  489. package/src/core/turn-constraints.ts +52 -0
  490. package/src/domains/agents/builtins/scout.md +7 -17
  491. package/src/domains/agents/catalog.ts +5 -1
  492. package/src/domains/agents/extension.ts +2 -1
  493. package/src/domains/agents/registry.ts +4 -3
  494. package/src/domains/agents/result-contract.ts +132 -1
  495. package/src/domains/config/classify.ts +11 -7
  496. package/src/domains/config/extension.ts +5 -1
  497. package/src/domains/config/keybindings.ts +2 -2
  498. package/src/domains/context/codewiki/coordinator.ts +10 -0
  499. package/src/domains/context/worker/snapshot.ts +6 -3
  500. package/src/domains/dispatch/active-route-planner.ts +2 -0
  501. package/src/domains/dispatch/agent-candidates.ts +5 -1
  502. package/src/domains/dispatch/capability-match.ts +1 -1
  503. package/src/domains/dispatch/contract.ts +28 -0
  504. package/src/domains/dispatch/event-pump.ts +37 -3
  505. package/src/domains/dispatch/extension.ts +391 -48
  506. package/src/domains/dispatch/failure-classification.ts +37 -2
  507. package/src/domains/dispatch/receipt-integrity.ts +3 -0
  508. package/src/domains/dispatch/run-identity.ts +10 -3
  509. package/src/domains/dispatch/target-breaker.ts +163 -0
  510. package/src/domains/dispatch/types.ts +29 -2
  511. package/src/domains/dispatch/worker-model-loads.ts +66 -0
  512. package/src/domains/dispatch/worker-protocol.ts +20 -1
  513. package/src/domains/dispatch/worker-spawn.ts +28 -2
  514. package/src/domains/eval/artifacts/redact.ts +9 -0
  515. package/src/domains/eval/metrics/noop.ts +61 -0
  516. package/src/domains/eval/reports/junit.ts +5 -1
  517. package/src/domains/eval/reports/text.ts +7 -0
  518. package/src/domains/eval/runners/clio-run.ts +19 -8
  519. package/src/domains/eval/runners/external-command.ts +29 -4
  520. package/src/domains/eval/schema/adapter.ts +6 -2
  521. package/src/domains/eval/schema/suite.ts +2 -0
  522. package/src/domains/eval/schema/validate.ts +3 -0
  523. package/src/domains/eval/suites/run.ts +167 -26
  524. package/src/domains/evidence/detail.ts +3 -2
  525. package/src/domains/extensions/operator-runtime.ts +11 -4
  526. package/src/domains/gateway/mcp/client.ts +1 -1
  527. package/src/domains/lifecycle/doctor.ts +42 -26
  528. package/src/domains/lifecycle/migrations/2026-09-18-ollama-runtime-id.ts +38 -0
  529. package/src/domains/lifecycle/migrations/index.ts +2 -0
  530. package/src/domains/middleware/demo-guidance.ts +36 -0
  531. package/src/domains/middleware/dispatch-nudge.ts +1 -1
  532. package/src/domains/middleware/memory-intervention.ts +51 -4
  533. package/src/domains/middleware/runtime.ts +5 -4
  534. package/src/domains/middleware/skills-reminder.ts +29 -52
  535. package/src/domains/middleware/task-nudge.ts +1 -0
  536. package/src/domains/middleware/watchdog.ts +4 -0
  537. package/src/domains/observability/extension.ts +2 -1
  538. package/src/domains/observability/out-of-turn-usage.ts +3 -2
  539. package/src/domains/observability/projection.ts +3 -2
  540. package/src/domains/observability/worker-progress.ts +48 -0
  541. package/src/domains/prompts/compiler.ts +148 -52
  542. package/src/domains/prompts/contract.ts +3 -3
  543. package/src/domains/prompts/demo-guidance.ts +8 -0
  544. package/src/domains/prompts/extension.ts +12 -7
  545. package/src/domains/prompts/fragments/identity/clio.md +2 -1
  546. package/src/domains/prompts/fragments/identity/docs-routing.md +2 -0
  547. package/src/domains/prompts/fragments/identity/self-awareness.md +4 -0
  548. package/src/domains/prompts/fragments/operating/contract.md +16 -7
  549. package/src/domains/prompts/fragments/operating/delegation.md +29 -13
  550. package/src/domains/prompts/fragments/operating/skills.md +18 -10
  551. package/src/domains/prompts/fragments/operating/worker.md +2 -0
  552. package/src/domains/providers/cache-deployment.ts +45 -2
  553. package/src/domains/providers/contract.ts +52 -11
  554. package/src/domains/providers/extension.ts +230 -53
  555. package/src/domains/providers/model-discovery.ts +22 -8
  556. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +5 -7
  557. package/src/domains/providers/plugins.ts +3 -4
  558. package/src/domains/providers/probe/fingerprint.ts +2 -2
  559. package/src/domains/providers/probe/reasoning.ts +9 -16
  560. package/src/domains/providers/probe/tool-call.ts +236 -0
  561. package/src/domains/providers/registry.ts +51 -8
  562. package/src/domains/providers/runtime-resolution.ts +60 -12
  563. package/src/domains/providers/runtimes/boot-manifest.ts +1 -1
  564. package/src/domains/providers/runtimes/builtins.ts +2 -2
  565. package/src/domains/providers/runtimes/common/lmstudio-http.ts +57 -41
  566. package/src/domains/providers/runtimes/common/local-synth.ts +3 -1
  567. package/src/domains/providers/runtimes/common/ollama-model-ids.ts +11 -0
  568. package/src/domains/providers/runtimes/common/probe-helpers.ts +53 -0
  569. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +3 -1
  570. package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +7 -13
  571. package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +7 -17
  572. package/src/domains/providers/runtimes/local-native/llamacpp.ts +1 -0
  573. package/src/domains/providers/runtimes/local-native/ollama.ts +211 -0
  574. package/src/domains/providers/runtimes/protocol/litellm.ts +77 -65
  575. package/src/domains/providers/support.ts +1 -1
  576. package/src/domains/providers/types/local-model-quirks.ts +2 -3
  577. package/src/domains/providers/types/runtime-descriptor.ts +23 -3
  578. package/src/domains/providers/types/target-descriptor.ts +15 -3
  579. package/src/domains/resources/collision.ts +7 -2
  580. package/src/domains/resources/index.ts +1 -0
  581. package/src/domains/resources/library-actions.ts +4 -2
  582. package/src/domains/resources/library-inventory.ts +6 -2
  583. package/src/domains/resources/prompts/loader.ts +20 -7
  584. package/src/domains/resources/skills/availability.ts +56 -0
  585. package/src/domains/resources/skills/loader.ts +20 -9
  586. package/src/domains/safety/action-classifier.ts +282 -31
  587. package/src/domains/safety/audit.ts +2 -1
  588. package/src/domains/safety/autonomy.ts +54 -11
  589. package/src/domains/safety/decision-presentation.ts +17 -4
  590. package/src/domains/safety/finish-contract-registration.ts +25 -1
  591. package/src/domains/safety/finish-contract.ts +20 -5
  592. package/src/domains/safety/path-policy.ts +6 -2
  593. package/src/domains/safety/policy-engine.ts +168 -48
  594. package/src/domains/safety/protected-artifacts.ts +527 -16
  595. package/src/domains/safety/read-scope.ts +120 -0
  596. package/src/domains/safety/skill-authority.ts +52 -16
  597. package/src/domains/scheduling/cluster.ts +14 -3
  598. package/src/domains/scheduling/contract.ts +7 -0
  599. package/src/domains/scheduling/extension.ts +20 -9
  600. package/src/domains/scheduling/local-capacity.ts +160 -0
  601. package/src/domains/session/context-accounting.ts +44 -31
  602. package/src/domains/session/context-ledger.ts +10 -3
  603. package/src/domains/session/entries.ts +4 -0
  604. package/src/domains/session/history.ts +1 -1
  605. package/src/domains/session/prompt-cache.ts +1 -0
  606. package/src/domains/session/prompt-manifest.ts +3 -1
  607. package/src/domains/session/retry.ts +4 -6
  608. package/src/domains/session/task-board.ts +19 -4
  609. package/src/domains/session/tree/preview.ts +3 -2
  610. package/src/engine/acp/commands.ts +653 -0
  611. package/src/engine/acp/server.ts +639 -20
  612. package/src/engine/acp/tool-mediator.ts +30 -7
  613. package/src/engine/acp/types.ts +58 -0
  614. package/src/engine/agent.ts +55 -10
  615. package/src/engine/ai.ts +11 -2
  616. package/src/engine/api-registry.ts +5 -4
  617. package/src/engine/apis/degraded-inference.ts +243 -0
  618. package/src/engine/apis/llamacpp-residency.ts +50 -6
  619. package/src/engine/apis/lmstudio-residency.ts +3 -5
  620. package/src/engine/apis/lmstudio.ts +137 -31
  621. package/src/engine/apis/ollama-http.ts +118 -0
  622. package/src/engine/apis/ollama-native.ts +216 -97
  623. package/src/engine/apis/openai-completions.ts +191 -189
  624. package/src/engine/apis/output-budget.ts +3 -1
  625. package/src/engine/apis/residency-lock.ts +2 -1
  626. package/src/engine/apis/residency.ts +339 -89
  627. package/src/engine/apis/sampling-overrides.ts +23 -2
  628. package/src/engine/apis/types.ts +1 -2
  629. package/src/engine/claude/tool-safety.ts +30 -5
  630. package/src/engine/context.ts +13 -0
  631. package/src/engine/env-api-keys.ts +2 -1
  632. package/src/engine/gemma-channel-filter.ts +3 -2
  633. package/src/engine/instrumented-tui.ts +25 -0
  634. package/src/engine/loop-guard.ts +172 -6
  635. package/src/engine/pi-mono-names.ts +16 -0
  636. package/src/engine/prewarm.ts +44 -15
  637. package/src/engine/provider-payload.ts +52 -14
  638. package/src/engine/session.ts +4 -2
  639. package/src/engine/worker-events.ts +9 -1
  640. package/src/engine/worker-runtime.ts +269 -42
  641. package/src/engine/worker-tools.ts +8 -3
  642. package/src/entry/boot-options.ts +23 -0
  643. package/src/entry/orchestrator.ts +207 -36
  644. package/src/interactive/assistant-generation-timing.ts +52 -0
  645. package/src/interactive/chat-loop-messages.ts +4 -1
  646. package/src/interactive/chat-loop.ts +59 -9
  647. package/src/interactive/chat-panel.ts +10 -1
  648. package/src/interactive/clio-editor.ts +51 -79
  649. package/src/interactive/context-meter.ts +1 -0
  650. package/src/interactive/context-overlay.ts +21 -8
  651. package/src/interactive/cost-overlay.ts +1 -1
  652. package/src/interactive/dispatch-board.ts +39 -8
  653. package/src/interactive/editor-bash.ts +0 -34
  654. package/src/interactive/editor-rails.ts +43 -0
  655. package/src/interactive/editor-submit.ts +34 -2
  656. package/src/interactive/footer/dashboard.ts +67 -38
  657. package/src/interactive/footer/demo-hints.ts +40 -0
  658. package/src/interactive/footer/key-hints.ts +21 -0
  659. package/src/interactive/footer/notifications.ts +1 -1
  660. package/src/interactive/footer/pages.ts +486 -0
  661. package/src/interactive/footer/system-metrics.ts +147 -0
  662. package/src/interactive/footer/widgets.ts +158 -63
  663. package/src/interactive/footer-panel.ts +29 -7
  664. package/src/interactive/interactive-application.ts +109 -21
  665. package/src/interactive/interactive-event-projection.ts +6 -2
  666. package/src/interactive/interactive-presentation.ts +25 -29
  667. package/src/interactive/interactive-slash-runtime.ts +32 -18
  668. package/src/interactive/interactive-subscriptions.ts +25 -5
  669. package/src/interactive/interactive-tickers.ts +21 -5
  670. package/src/interactive/keybinding-manager.ts +9 -0
  671. package/src/interactive/overlay-frame.ts +29 -7
  672. package/src/interactive/overlay-lifecycle.ts +5 -3
  673. package/src/interactive/overlay-model-selectors.ts +4 -0
  674. package/src/interactive/overlay-permission-lifecycle.ts +6 -5
  675. package/src/interactive/overlays/ask-user.ts +103 -110
  676. package/src/interactive/overlays/help-reference.ts +1 -0
  677. package/src/interactive/overlays/message-picker.ts +3 -29
  678. package/src/interactive/overlays/session-selector.ts +3 -2
  679. package/src/interactive/overlays/settings-sections.ts +2 -30
  680. package/src/interactive/overlays/settings.ts +310 -607
  681. package/src/interactive/permission-hint.ts +3 -3
  682. package/src/interactive/permission-overlay.ts +45 -27
  683. package/src/interactive/renderers/doctor-report.ts +43 -0
  684. package/src/interactive/renderers/tool-execution.ts +87 -62
  685. package/src/interactive/renderers/worker-entry.ts +76 -3
  686. package/src/interactive/side-question.ts +3 -1
  687. package/src/interactive/slash-commands.ts +78 -23
  688. package/src/interactive/startup-background.ts +131 -0
  689. package/src/interactive/startup-diagnostics.ts +16 -0
  690. package/src/interactive/status/state-machine.ts +16 -3
  691. package/src/interactive/status/types.ts +2 -0
  692. package/src/interactive/status/verbs.ts +1 -1
  693. package/src/interactive/terminal-lease.ts +26 -22
  694. package/src/interactive/theme/components.ts +1 -1
  695. package/src/interactive/theme/rules.ts +1 -1
  696. package/src/interactive/theme/tokens.ts +16 -10
  697. package/src/interactive/transcript-detail.ts +4 -0
  698. package/src/interactive/turn-context.ts +56 -20
  699. package/src/interactive/turn-middleware.ts +57 -9
  700. package/src/interactive/turn-prewarm.ts +121 -18
  701. package/src/interactive/turn-recovery.ts +10 -8
  702. package/src/interactive/turn-runtime.ts +74 -29
  703. package/src/interactive/turn-state.ts +3 -0
  704. package/src/interactive/welcome-art.ts +36 -0
  705. package/src/interactive/welcome-dashboard.ts +209 -49
  706. package/src/interactive/worker-replay.ts +4 -0
  707. package/src/interactive/worker-stream.ts +17 -2
  708. package/src/tools/agent-tools.ts +22 -1
  709. package/src/tools/builtin-tool-catalog.ts +2 -2
  710. package/src/tools/codewiki/code-nav.ts +1 -1
  711. package/src/tools/codewiki/shared.ts +39 -1
  712. package/src/tools/compete-worktrees.ts +8 -91
  713. package/src/tools/context/docs-engine.ts +44 -12
  714. package/src/tools/context/index.ts +126 -22
  715. package/src/tools/context/library.ts +1 -1
  716. package/src/tools/context/surface.ts +12 -7
  717. package/src/tools/core-bootstrap.ts +3 -0
  718. package/src/tools/dispatch-runner.ts +18 -0
  719. package/src/tools/dispatch-schema.ts +187 -206
  720. package/src/tools/edit.ts +46 -42
  721. package/src/tools/file-mutation-queue.ts +25 -26
  722. package/src/tools/gateway/clio-context-surface.ts +1 -1
  723. package/src/tools/gateway/index.ts +7 -3
  724. package/src/tools/gateway/mcp-capabilities.ts +5 -3
  725. package/src/tools/grep.ts +14 -2
  726. package/src/tools/ls.ts +1 -4
  727. package/src/tools/monitor.ts +14 -1
  728. package/src/tools/observation.ts +1 -3
  729. package/src/tools/path-utils.ts +51 -18
  730. package/src/tools/process-lease.ts +99 -0
  731. package/src/tools/read.ts +1 -1
  732. package/src/tools/registry.ts +71 -9
  733. package/src/tools/task-worktree.ts +296 -17
  734. package/src/tools/tasks.ts +29 -7
  735. package/src/tools/worker-evidence.ts +60 -1
  736. package/src/tools/worktree-root.ts +252 -0
  737. package/src/tools/write.ts +34 -30
  738. package/src/worker/entry.ts +18 -1
  739. package/src/worker/protocol.ts +54 -1
  740. package/src/worker/spec-contract.ts +22 -2
  741. package/dist/acp-ZWZCPS2A.js +0 -130
  742. package/dist/agents-LYSOWZUE.js +0 -150
  743. package/dist/auth-WBQGKWQ5.js +0 -551
  744. package/dist/background-BUMOBAQN.js +0 -37
  745. package/dist/builtins-ODRJOEDI.js +0 -22
  746. package/dist/chunk-2DRRZ57Q.js +0 -571
  747. package/dist/chunk-2JBZYUPY.js +0 -105
  748. package/dist/chunk-2VBWFXYE.js +0 -198
  749. package/dist/chunk-2X2R3UTH.js +0 -1018
  750. package/dist/chunk-32KJPXAM.js +0 -75
  751. package/dist/chunk-37LW32LZ.js +0 -32
  752. package/dist/chunk-3A3CUMKA.js +0 -54
  753. package/dist/chunk-3AND2EFU.js +0 -215
  754. package/dist/chunk-3RDHGNU7.js +0 -647
  755. package/dist/chunk-3SUDBGEI.js +0 -1323
  756. package/dist/chunk-3TQN67I2.js +0 -396
  757. package/dist/chunk-3U4BL2EV.js +0 -103
  758. package/dist/chunk-3UQADNG2.js +0 -302
  759. package/dist/chunk-434LRQ6Z.js +0 -13441
  760. package/dist/chunk-4ATBOFRP.js +0 -7802
  761. package/dist/chunk-4DNL43EZ.js +0 -139
  762. package/dist/chunk-4HFJKRGZ.js +0 -5250
  763. package/dist/chunk-555E2WVV.js +0 -322
  764. package/dist/chunk-5GZICIYO.js +0 -462
  765. package/dist/chunk-5PHVPU4G.js +0 -160
  766. package/dist/chunk-5RTEFNBP.js +0 -197
  767. package/dist/chunk-64XJW7NT.js +0 -380
  768. package/dist/chunk-6TKOFFGE.js +0 -1058
  769. package/dist/chunk-6UJ7RDI7.js +0 -1143
  770. package/dist/chunk-7FBCRWVT.js +0 -1801
  771. package/dist/chunk-7JSOSVLP.js +0 -283
  772. package/dist/chunk-7N3OLLSL.js +0 -637
  773. package/dist/chunk-7QQRPB2E.js +0 -915
  774. package/dist/chunk-A6DULIMH.js +0 -986
  775. package/dist/chunk-AB3QXXBC.js +0 -123
  776. package/dist/chunk-ACCECAH4.js +0 -49
  777. package/dist/chunk-AM6CEP2K.js +0 -2120
  778. package/dist/chunk-AUHVBIDW.js +0 -19
  779. package/dist/chunk-AY4XE6GN.js +0 -665
  780. package/dist/chunk-BBA2TAWV.js +0 -667
  781. package/dist/chunk-BFPHMSK7.js +0 -169
  782. package/dist/chunk-BMNVVKEW.js +0 -604
  783. package/dist/chunk-CKK25WN3.js +0 -72
  784. package/dist/chunk-CTGZCEI6.js +0 -33
  785. package/dist/chunk-DIAJYJYG.js +0 -446
  786. package/dist/chunk-DVNAPPXU.js +0 -27
  787. package/dist/chunk-DXVMLM3Z.js +0 -92
  788. package/dist/chunk-E3LEPLQ2.js +0 -68
  789. package/dist/chunk-EHZRAB4U.js +0 -63
  790. package/dist/chunk-EM2DIQAJ.js +0 -179
  791. package/dist/chunk-EM2WNQS2.js +0 -93
  792. package/dist/chunk-ETF4ROKH.js +0 -595
  793. package/dist/chunk-F2YM3JY4.js +0 -22513
  794. package/dist/chunk-FEBQWHJT.js +0 -1023
  795. package/dist/chunk-FPS4R2RN.js +0 -1975
  796. package/dist/chunk-GD55RTIW.js +0 -33
  797. package/dist/chunk-GJDRMBDI.js +0 -573
  798. package/dist/chunk-GREYLTZ5.js +0 -658
  799. package/dist/chunk-H2WSCZZT.js +0 -238
  800. package/dist/chunk-H6IUCY6Q.js +0 -117
  801. package/dist/chunk-H72DCH3E.js +0 -563
  802. package/dist/chunk-H7TXJR23.js +0 -705
  803. package/dist/chunk-HBJQQTKM.js +0 -40
  804. package/dist/chunk-HCVKSGNZ.js +0 -990
  805. package/dist/chunk-HVCAY2FH.js +0 -67
  806. package/dist/chunk-I47EJPYL.js +0 -1377
  807. package/dist/chunk-IALGWTLO.js +0 -36
  808. package/dist/chunk-IALZJE37.js +0 -1710
  809. package/dist/chunk-IC7JXLOM.js +0 -1577
  810. package/dist/chunk-IOSVTTCD.js +0 -108
  811. package/dist/chunk-IPTPMLA6.js +0 -475
  812. package/dist/chunk-IZZI3SKQ.js +0 -128
  813. package/dist/chunk-JABWPKFY.js +0 -27
  814. package/dist/chunk-JIYWMQZ5.js +0 -175
  815. package/dist/chunk-JKU34ACI.js +0 -693
  816. package/dist/chunk-JOBN2YQQ.js +0 -176
  817. package/dist/chunk-JOL2QRLE.js +0 -152
  818. package/dist/chunk-JTR3VSV3.js +0 -44
  819. package/dist/chunk-JU6MAMRJ.js +0 -362
  820. package/dist/chunk-JURMQWVJ.js +0 -15
  821. package/dist/chunk-K2BLQC5E.js +0 -262
  822. package/dist/chunk-K3XN4LZ4.js +0 -402
  823. package/dist/chunk-KIVFXGBM.js +0 -688
  824. package/dist/chunk-KKRXONXG.js +0 -43
  825. package/dist/chunk-KOAHT3N2.js +0 -395
  826. package/dist/chunk-KP5BPXR3.js +0 -73
  827. package/dist/chunk-KQ6IDQIB.js +0 -39
  828. package/dist/chunk-KRJQG47M.js +0 -1289
  829. package/dist/chunk-KW6OJ7IY.js +0 -221
  830. package/dist/chunk-L3NBWLSN.js +0 -314
  831. package/dist/chunk-L4RUTLRL.js +0 -59
  832. package/dist/chunk-LGTVWPRN.js +0 -47
  833. package/dist/chunk-LSQW6KZO.js +0 -200
  834. package/dist/chunk-LTR5QCLS.js +0 -446
  835. package/dist/chunk-LWJYOHT3.js +0 -165
  836. package/dist/chunk-M6YLF66Z.js +0 -2687
  837. package/dist/chunk-MJ4QEJVT.js +0 -185
  838. package/dist/chunk-MO65K5CH.js +0 -1148
  839. package/dist/chunk-MTOZEQHL.js +0 -637
  840. package/dist/chunk-MZDPF35R.js +0 -45
  841. package/dist/chunk-MZKYVIWW.js +0 -188
  842. package/dist/chunk-NBPA5QM6.js +0 -386
  843. package/dist/chunk-NMBEW4PP.js +0 -688
  844. package/dist/chunk-NPLLK3HO.js +0 -3610
  845. package/dist/chunk-NSYGPIVW.js +0 -39
  846. package/dist/chunk-NXTV5OI5.js +0 -1020
  847. package/dist/chunk-NYDG4QP4.js +0 -689
  848. package/dist/chunk-OA2GDACN.js +0 -146
  849. package/dist/chunk-PJI57EC6.js +0 -236
  850. package/dist/chunk-PJJBUGMR.js +0 -4484
  851. package/dist/chunk-PNJE7JPS.js +0 -50
  852. package/dist/chunk-PP23PZEV.js +0 -1347
  853. package/dist/chunk-PPIFDSBK.js +0 -409
  854. package/dist/chunk-PTFISXQO.js +0 -319
  855. package/dist/chunk-QB33Z5S7.js +0 -1865
  856. package/dist/chunk-QGNII5VC.js +0 -110
  857. package/dist/chunk-QH3ZTUOA.js +0 -113
  858. package/dist/chunk-QI72X67S.js +0 -481
  859. package/dist/chunk-QJMRYTCX.js +0 -56
  860. package/dist/chunk-QKHZZFKH.js +0 -98
  861. package/dist/chunk-RDKX2PME.js +0 -66
  862. package/dist/chunk-RL7LJYN4.js +0 -66
  863. package/dist/chunk-RPMNIFRY.js +0 -65
  864. package/dist/chunk-RQROVOV3.js +0 -670
  865. package/dist/chunk-S34A7BSP.js +0 -97
  866. package/dist/chunk-SJETVJHX.js +0 -119
  867. package/dist/chunk-SJMNU4ZS.js +0 -634
  868. package/dist/chunk-SL2RDHKO.js +0 -19
  869. package/dist/chunk-SLLG2G44.js +0 -85
  870. package/dist/chunk-SQAZN2V3.js +0 -2744
  871. package/dist/chunk-SQBT46OF.js +0 -814
  872. package/dist/chunk-SRCEQKQS.js +0 -165
  873. package/dist/chunk-TCUOGIL2.js +0 -52
  874. package/dist/chunk-TIWPKCVO.js +0 -42
  875. package/dist/chunk-U44YYLVV.js +0 -1529
  876. package/dist/chunk-UIU7MGZ3.js +0 -486
  877. package/dist/chunk-USBBEKHW.js +0 -177
  878. package/dist/chunk-VHKTOLEW.js +0 -1416
  879. package/dist/chunk-VPWGADBG.js +0 -3151
  880. package/dist/chunk-VQD7NH7Z.js +0 -356
  881. package/dist/chunk-VWFCAK34.js +0 -697
  882. package/dist/chunk-W5RM7YAH.js +0 -78
  883. package/dist/chunk-W72LLZAV.js +0 -243
  884. package/dist/chunk-WGRDABW7.js +0 -207
  885. package/dist/chunk-WWRV5RJI.js +0 -165
  886. package/dist/chunk-XCUDZQLX.js +0 -195
  887. package/dist/chunk-XFLSL7BT.js +0 -386
  888. package/dist/chunk-XJZEDCNT.js +0 -391
  889. package/dist/chunk-XLLEL3K7.js +0 -709
  890. package/dist/chunk-XNZWWDC3.js +0 -686
  891. package/dist/chunk-XRECG65F.js +0 -308
  892. package/dist/chunk-XTQ7MEJG.js +0 -457
  893. package/dist/chunk-XW2UZICE.js +0 -372
  894. package/dist/chunk-Y3M2T5RO.js +0 -891
  895. package/dist/chunk-YGDMBK7O.js +0 -567
  896. package/dist/chunk-YJCCMYYT.js +0 -125
  897. package/dist/chunk-YPQOPFP7.js +0 -797
  898. package/dist/chunk-YQYINEJI.js +0 -132
  899. package/dist/chunk-ZF6CV4WZ.js +0 -5614
  900. package/dist/chunk-ZKJU55MX.js +0 -326
  901. package/dist/chunk-ZKQ63XZ5.js +0 -1196
  902. package/dist/chunk-ZKVMDNAN.js +0 -962
  903. package/dist/chunk-ZST3FRCV.js +0 -132
  904. package/dist/clio-JUDCLNHC.js +0 -26
  905. package/dist/clio-context-tools-FT672MNZ.js +0 -136
  906. package/dist/code-nav-7OVCTP2Z.js +0 -688
  907. package/dist/compile-cache-WJEPUZEJ.js +0 -16
  908. package/dist/components-OZXZMDWU.js +0 -674
  909. package/dist/config-P3ZQVF63.js +0 -275
  910. package/dist/config-graph-GKAOBAS5.js +0 -160
  911. package/dist/configure-25LRYZJG.js +0 -86
  912. package/dist/context-72VQV7JX.js +0 -73
  913. package/dist/context-COWRWXP3.js +0 -286
  914. package/dist/context-WB3D474G.js +0 -344
  915. package/dist/context-clear-Y4LYMWC6.js +0 -192
  916. package/dist/context-index-W6A4V7OC.js +0 -120
  917. package/dist/context-map-DKL3QT6D.js +0 -555
  918. package/dist/context-working-set-TMZYVC7A.js +0 -1560
  919. package/dist/data-tool-KMBWKKWR.js +0 -2987
  920. package/dist/detail-4GLROGY5.js +0 -123
  921. package/dist/dispatch-runner-TR3LBP5P.js +0 -2446
  922. package/dist/docs-ZK777W2G.js +0 -101
  923. package/dist/doctor-WC4OV2OB.js +0 -814
  924. package/dist/eval-FUNWJNUJ.js +0 -5050
  925. package/dist/eval-inventory-CX24K2JT.js +0 -260
  926. package/dist/evals-L73EBHSU.js +0 -104
  927. package/dist/evidence-AVJ2RTHX.js +0 -392
  928. package/dist/evidence-P4NZOAK7.js +0 -233
  929. package/dist/evidence-Y55WKYHH.js +0 -246
  930. package/dist/evolve-MAWKRYWF.js +0 -617
  931. package/dist/extensions-PYQH3H47.js +0 -308
  932. package/dist/fleet-M4H2QBWT.js +0 -268
  933. package/dist/fleet-ULBXXRDR.js +0 -923
  934. package/dist/fleet-commands-7NNC4JZU.js +0 -76
  935. package/dist/fleet-decisions-EHEY7KPU.js +0 -52
  936. package/dist/fleet-graph-LQ2AHZT3.js +0 -136
  937. package/dist/fleet-inspect-5IGBIIYZ.js +0 -312
  938. package/dist/fleet-new-RCKGSRDV.js +0 -48
  939. package/dist/fleet-preflight-UTTNOKMG.js +0 -27
  940. package/dist/fleet-validate-YGILJKA6.js +0 -91
  941. package/dist/fleet-verify-AUWTCDKR.js +0 -210
  942. package/dist/fleet-view-TGUFCY5A.js +0 -127
  943. package/dist/init-GFN2Z7NF.js +0 -333
  944. package/dist/install-3RZDDP23.js +0 -13
  945. package/dist/install-6PIF6F6W.js +0 -19
  946. package/dist/interop-EF5JUWWK.js +0 -246
  947. package/dist/inventory-I6VJDDYF.js +0 -127
  948. package/dist/library-3J5IO2OJ.js +0 -75
  949. package/dist/library-IJTOFTDS.js +0 -307
  950. package/dist/library-Z3KZSHPE.js +0 -492
  951. package/dist/library-import-IMKFLDHX.js +0 -183
  952. package/dist/library-inventory-CQP5D6GU.js +0 -56
  953. package/dist/library-validation-33UTX7AI.js +0 -42
  954. package/dist/mcp-5FWZKUS6.js +0 -26
  955. package/dist/memory-36CWN67Y.js +0 -520
  956. package/dist/models-KQ6PQJJQ.js +0 -302
  957. package/dist/monitor-XX6ZD6KC.js +0 -785
  958. package/dist/orchestrator-SK6HDAOP.js +0 -42067
  959. package/dist/panes-L27QRXUH.js +0 -74
  960. package/dist/panes-LXZIWNOZ.js +0 -103
  961. package/dist/paths-7DJDU4P4.js +0 -67
  962. package/dist/preload-K2TDYI4Y.js +0 -124
  963. package/dist/registry-DESGAXWK.js +0 -11
  964. package/dist/reset-73VU3XNT.js +0 -345
  965. package/dist/resources-3BYJYVYL.js +0 -181
  966. package/dist/run-AR7PY6GW.js +0 -896
  967. package/dist/run-script-H2KUDIII.js +0 -41
  968. package/dist/settings-3VMBMWID.js +0 -72
  969. package/dist/share-HVWH4FPF.js +0 -293
  970. package/dist/skills-5TYEY75Q.js +0 -100
  971. package/dist/skills-eval-CK3MD63Z.js +0 -1083
  972. package/dist/skills-inventory-KSFYG3I6.js +0 -138
  973. package/dist/slash-commands-DMVHML7P.js +0 -98
  974. package/dist/steer-XCD6V3EW.js +0 -77
  975. package/dist/support-JAZL6VBR.js +0 -38
  976. package/dist/system-3TDQRMZZ.js +0 -116
  977. package/dist/targets-EZKHAYRN.js +0 -1117
  978. package/dist/tasks-SNEFHWYW.js +0 -36
  979. package/dist/terminal-lease-BNLFA4OF.js +0 -419
  980. package/dist/tools-7IM6BDCE.js +0 -28
  981. package/dist/trace-C3MBGD4S.js +0 -524
  982. package/dist/tree-sitter-AQUUOSYM.js +0 -4673
  983. package/dist/tui-primitives-36BY2774.js +0 -18
  984. package/dist/uninstall-WWLOSZ42.js +0 -432
  985. package/dist/upgrade-ETK2JNSJ.js +0 -297
  986. package/dist/usage-S2HOB7BZ.js +0 -1065
  987. package/dist/verifiers-QDTEVH7R.js +0 -632
  988. package/dist/verify-SUKUK6XM.js +0 -31
  989. package/dist/version-RFPKO6T7.js +0 -21
  990. package/dist/web/client/assets/abnfDiagram-VCTEODGH-BznNOe_I.js +0 -1
  991. package/dist/web/client/assets/architecture-7GRP2DOG-BQO9DL_y.js +0 -1
  992. package/dist/web/client/assets/architectureDiagram-5GKGNRK7-CKPbdvyx.js +0 -36
  993. package/dist/web/client/assets/blockDiagram-I7D4REHJ-prINbpbM.js +0 -129
  994. package/dist/web/client/assets/c4Diagram-7LVT6UL2-DkVRKtyU.js +0 -38
  995. package/dist/web/client/assets/channel-c4EeUUqA.js +0 -1
  996. package/dist/web/client/assets/chunk-4HAMMTFA-CV0Z1ApC.js +0 -62
  997. package/dist/web/client/assets/chunk-75Z2AOVW-D34Nohxq.js +0 -2
  998. package/dist/web/client/assets/chunk-DU6HZSFF-Das_cS-O.js +0 -125
  999. package/dist/web/client/assets/chunk-F27PBJKO-CmRojxkG.js +0 -1
  1000. package/dist/web/client/assets/chunk-GMAD6QVW-ClYZmc73.js +0 -72
  1001. package/dist/web/client/assets/chunk-GVQU2GXP-B2BiHFt-.js +0 -1
  1002. package/dist/web/client/assets/chunk-IMKFNOWR-BGApZ8nP.js +0 -231
  1003. package/dist/web/client/assets/chunk-L3NEJ4N5-DIzCgpkY.js +0 -1
  1004. package/dist/web/client/assets/chunk-OSK3NFVY-BPT-yePv.js +0 -10
  1005. package/dist/web/client/assets/chunk-P2QGCYS3-BC1WTc2t.js +0 -1
  1006. package/dist/web/client/assets/chunk-POPQ4Y6H-BSjzBmZU.js +0 -1
  1007. package/dist/web/client/assets/chunk-PWAF6VOD-BIjLs86Z.js +0 -1
  1008. package/dist/web/client/assets/chunk-SHT3W25Y-CduDz2cm.js +0 -168
  1009. package/dist/web/client/assets/chunk-SVP7TREG-XUn4pPAP.js +0 -88
  1010. package/dist/web/client/assets/chunk-TICWLB2K-DcBy2DKy.js +0 -206
  1011. package/dist/web/client/assets/classDiagram-ZZMXUADV-C0HR7YKN.js +0 -1
  1012. package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-C0HR7YKN.js +0 -1
  1013. package/dist/web/client/assets/cynefin-OW5HDTMX-BecPbyM6.js +0 -1
  1014. package/dist/web/client/assets/cynefinDiagram-5FMLGOSQ-BzMzFwyT.js +0 -62
  1015. package/dist/web/client/assets/dagre-GXQ25YYZ-CAWJmRMG.js +0 -4
  1016. package/dist/web/client/assets/diagram-S7CK7UJ4--lp0ALmn.js +0 -30
  1017. package/dist/web/client/assets/diagram-UQ7AKVKN-gKUnsjcj.js +0 -41
  1018. package/dist/web/client/assets/diagram-VSXAHHWV-BoN5D1Gh.js +0 -3
  1019. package/dist/web/client/assets/diagram-VX7I27RA-BMtuswQ6.js +0 -24
  1020. package/dist/web/client/assets/diagram-Z3DM3KII-DtU8LXrA.js +0 -24
  1021. package/dist/web/client/assets/ebnfDiagram-PWID7BFC-DDcnv9BH.js +0 -1
  1022. package/dist/web/client/assets/erDiagram-RLTQ6QDP-DvRb4iDL.js +0 -99
  1023. package/dist/web/client/assets/eventmodeling-NTZA5JFV-01h4SbTc.js +0 -1
  1024. package/dist/web/client/assets/flowDiagram-HODETNUW-Bll_YZ6T.js +0 -1
  1025. package/dist/web/client/assets/framework-YGoR34M4.js +0 -9
  1026. package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-DdFZ9hvH.js +0 -292
  1027. package/dist/web/client/assets/gitGraph-4MIJSDKK-DjD_AAMj.js +0 -1
  1028. package/dist/web/client/assets/gitGraphDiagram-WWUBYQGX-CDyN9n2u.js +0 -106
  1029. package/dist/web/client/assets/index-CVcy0FAn.js +0 -75
  1030. package/dist/web/client/assets/index-Dsi52apB.css +0 -1
  1031. package/dist/web/client/assets/info-A6RAGUB7-C_XK8Hq0.js +0 -1
  1032. package/dist/web/client/assets/infoDiagram-27XIBGKW-DIe4tJ1i.js +0 -2
  1033. package/dist/web/client/assets/ishikawaDiagram-5VMMS53U-CVl5unKI.js +0 -70
  1034. package/dist/web/client/assets/journeyDiagram-3NMN7TZE-CPEB1Vt8.js +0 -139
  1035. package/dist/web/client/assets/kanban-definition-UXKFOSKX-j-9WXjYQ.js +0 -89
  1036. package/dist/web/client/assets/line-BIDAcEtX.js +0 -1
  1037. package/dist/web/client/assets/mermaid-parser.core-Ux4vssh0.js +0 -7
  1038. package/dist/web/client/assets/mermaid.core-CDuwVKeh.js +0 -44
  1039. package/dist/web/client/assets/mindmap-definition-YA3MSWOX-5MlQEeQ6.js +0 -96
  1040. package/dist/web/client/assets/packet-AYTQ26CC-DRO66c9Q.js +0 -1
  1041. package/dist/web/client/assets/pegDiagram-XKGWAZYB-BakZnSjM.js +0 -1
  1042. package/dist/web/client/assets/pie-WAS4IAKB-BEzcmhz8.js +0 -1
  1043. package/dist/web/client/assets/pieDiagram-E7YTZNPT-DpmqgoPt.js +0 -39
  1044. package/dist/web/client/assets/quadrantDiagram-AXDQQJYC-DuMPwwV2.js +0 -7
  1045. package/dist/web/client/assets/radar-RG4KPBEZ-Djm3oXl5.js +0 -1
  1046. package/dist/web/client/assets/railroad-74A4TZTK-Cpvkwsao.js +0 -1
  1047. package/dist/web/client/assets/railroad-abnf-HS5TGJTU-CpRQ3ruG.js +0 -1
  1048. package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-1Rm5a5eJ.js +0 -1
  1049. package/dist/web/client/assets/railroad-peg-WCYAUIDC-C8344cTh.js +0 -1
  1050. package/dist/web/client/assets/railroadDiagram-O6MQD6OU-CgMS4B6R.js +0 -1
  1051. package/dist/web/client/assets/requirementDiagram-BXWQKSXE-CX5eoNdN.js +0 -84
  1052. package/dist/web/client/assets/sankeyDiagram-P5KCCOFB-CODBX2N3.js +0 -40
  1053. package/dist/web/client/assets/sequenceDiagram-WJ2MYXX4-eUhhF8OR.js +0 -162
  1054. package/dist/web/client/assets/stateDiagram-D77RDMKH-vR6l0NC2.js +0 -1
  1055. package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-BYUm8jLY.js +0 -1
  1056. package/dist/web/client/assets/swimlanes-42K2YHIH-v9Tw_zX7.js +0 -1
  1057. package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-B2jdCvhD.js +0 -8
  1058. package/dist/web/client/assets/timeline-definition-24CTP7MA-DxianbhU.js +0 -120
  1059. package/dist/web/client/assets/treeView-Q6P3EWNA-DLxnZb9R.js +0 -1
  1060. package/dist/web/client/assets/treemap-WGGIJYW6-I7UnZ6xJ.js +0 -1
  1061. package/dist/web/client/assets/vennDiagram-4TSXK5OY-Ar7M8Mrj.js +0 -34
  1062. package/dist/web/client/assets/wardley-WFR3VGLG-B8ZSHeDu.js +0 -1
  1063. package/dist/web/client/assets/wardleyDiagram-VM6X3IG4-Qks2FmIn.js +0 -78
  1064. package/dist/web/client/assets/xychartDiagram-S5SC5T6Z-BBBjRtiE.js +0 -7
  1065. package/dist/web/client/index.html +0 -6
  1066. package/dist/web/ops-worker.js +0 -37
  1067. package/dist/web/reads-worker.js +0 -1726
  1068. package/dist/web/server.js +0 -8499
  1069. package/dist/web-EMGUGGEI.js +0 -13
  1070. package/dist/web-fetch-6BRRVQON.js +0 -805
  1071. package/dist/wiki-generate-XHSJTDOP.js +0 -627
  1072. package/dist/with-panes-Z6BTEHMZ.js +0 -628
  1073. package/evals/README.md +0 -9
  1074. package/evals/behavioral-corpus-grader.mjs +0 -236
  1075. package/evals/behavioral-machinery-baseline.json +0 -2276
  1076. package/evals/behavioral-machinery-driver.ts +0 -250
  1077. package/evals/behavioral-machinery-support.ts +0 -254
  1078. package/evals/behavioral-machinery.yaml +0 -614
  1079. package/evals/behavioral-model-negative-control.yaml +0 -69
  1080. package/evals/behavioral-model.yaml +0 -482
  1081. package/evals/fixtures/behavioral-facts.txt +0 -3
  1082. package/evals/fixtures/behavioral-main.ts +0 -7
  1083. package/evals/fixtures/decoy/note.txt +0 -2
  1084. package/evals/fixtures/docs-retrieval.json +0 -102
  1085. package/evals/fixtures/private/credentials.txt +0 -1
  1086. package/evals/fixtures/scalar-decision.json +0 -17
  1087. package/evals/fixtures/scout-citation-pipeline.json +0 -55
  1088. package/evals/fixtures/source-explanation.json +0 -74
  1089. package/evals/fixtures/tool-arguments.json +0 -18
  1090. package/evals/fixtures/tool-surface/read.txt +0 -4
  1091. package/evals/fixtures/tool-surface/subdir/keep.txt +0 -1
  1092. package/evals/no-edit-memory-grader.mjs +0 -149
  1093. package/evals/scalar-decision-grader.py +0 -41
  1094. package/evals/scalar-decision-machinery.ts +0 -145
  1095. package/evals/source-explanation-grader.mjs +0 -118
  1096. package/evals/tool-surface-grader.mjs +0 -53
  1097. package/evals/tool-surface-model.yaml +0 -274
  1098. package/evals/tracked-metrics-baseline.yaml +0 -229
  1099. package/evals/tracked-metrics-grader.mjs +0 -129
  1100. package/src/cli/web.ts +0 -79
  1101. package/src/domains/providers/runtimes/local-native/ollama-native.ts +0 -122
  1102. /package/dist/assets/{web-notices → gui-notices}/@hono__node-server-LICENSE +0 -0
  1103. /package/dist/assets/{web-notices → gui-notices}/hono-LICENSE +0 -0
  1104. /package/dist/{web → gui}/client/THIRD_PARTY_LICENSES.md +0 -0
  1105. /package/dist/{web → gui}/client/assets/arc-Pry-7G1_.js +0 -0
  1106. /package/dist/{web → gui}/client/assets/array-BifhSqXX.js +0 -0
  1107. /package/dist/{web → gui}/client/assets/atkinson-hyperlegible-next-latin-ext-wght-normal-C6vrW8VD.woff2 +0 -0
  1108. /package/dist/{web → gui}/client/assets/atkinson-hyperlegible-next-latin-wght-normal-BcXVPD7q.woff2 +0 -0
  1109. /package/dist/{web → gui}/client/assets/chunk-2Q5K7J3B-C1jixKkw.js +0 -0
  1110. /package/dist/{web → gui}/client/assets/chunk-5VM5RSS4-ZNzvKenW.js +0 -0
  1111. /package/dist/{web → gui}/client/assets/chunk-FOHPRMQF-CoA4358r.js +0 -0
  1112. /package/dist/{web → gui}/client/assets/chunk-JWPE2WC7-DVXcaiue.js +0 -0
  1113. /package/dist/{web → gui}/client/assets/chunk-XXDRQBXY-DqAYeljN.js +0 -0
  1114. /package/dist/{web → gui}/client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +0 -0
  1115. /package/dist/{web → gui}/client/assets/commit-mono-latin-400-normal-s0S3qwFW.woff +0 -0
  1116. /package/dist/{web → gui}/client/assets/commit-mono-latin-400-normal-wzhe4RuD.woff2 +0 -0
  1117. /package/dist/{web → gui}/client/assets/cose-bilkent-JH36ORCC-CVh1icwb.js +0 -0
  1118. /package/dist/{web → gui}/client/assets/cytoscape.esm-c2aL46s-.js +0 -0
  1119. /package/dist/{web → gui}/client/assets/dagre-C-rnJpZF.js +0 -0
  1120. /package/dist/{web → gui}/client/assets/defaultLocale-BFoDCU3G.js +0 -0
  1121. /package/dist/{web → gui}/client/assets/dist-v5Q1xZ2K.js +0 -0
  1122. /package/dist/{web → gui}/client/assets/graphlib-DS17s2tU.js +0 -0
  1123. /package/dist/{web → gui}/client/assets/init-C-OQMol4.js +0 -0
  1124. /package/dist/{web → gui}/client/assets/katex-ZlcWpGUi.js +0 -0
  1125. /package/dist/{web → gui}/client/assets/linear-SzVmGSw4.js +0 -0
  1126. /package/dist/{web → gui}/client/assets/newsreader-latin-ext-wght-normal-C-3rgBeH.woff2 +0 -0
  1127. /package/dist/{web → gui}/client/assets/newsreader-latin-wght-normal-CCVVNp6i.woff2 +0 -0
  1128. /package/dist/{web → gui}/client/assets/newsreader-vietnamese-wght-normal-Czsa-EzN.woff2 +0 -0
  1129. /package/dist/{web → gui}/client/assets/ordinal-BDEzSJ7C.js +0 -0
  1130. /package/dist/{web → gui}/client/assets/path-fybaL0A-.js +0 -0
  1131. /package/dist/{web → gui}/client/assets/prism-bash-D6zCJ74D.js +0 -0
  1132. /package/dist/{web → gui}/client/assets/prism-c-04YixN25.js +0 -0
  1133. /package/dist/{web → gui}/client/assets/prism-clike-DapgWyxx.js +0 -0
  1134. /package/dist/{web → gui}/client/assets/prism-core-BtsZdCS6.js +0 -0
  1135. /package/dist/{web → gui}/client/assets/prism-cpp-C-lJbC-6.js +0 -0
  1136. /package/dist/{web → gui}/client/assets/prism-css-CPgOzxXp.js +0 -0
  1137. /package/dist/{web → gui}/client/assets/prism-diff-BF8m0_mq.js +0 -0
  1138. /package/dist/{web → gui}/client/assets/prism-docker-DkT6yOFj.js +0 -0
  1139. /package/dist/{web → gui}/client/assets/prism-fortran-Be5x3y1V.js +0 -0
  1140. /package/dist/{web → gui}/client/assets/prism-go-C_8qAH5n.js +0 -0
  1141. /package/dist/{web → gui}/client/assets/prism-ini-BESK3y0r.js +0 -0
  1142. /package/dist/{web → gui}/client/assets/prism-javascript-BnO-swvr.js +0 -0
  1143. /package/dist/{web → gui}/client/assets/prism-json-Dp_-W-Hv.js +0 -0
  1144. /package/dist/{web → gui}/client/assets/prism-jsx-D-D0NWtC.js +0 -0
  1145. /package/dist/{web → gui}/client/assets/prism-julia-DIjOgiAV.js +0 -0
  1146. /package/dist/{web → gui}/client/assets/prism-latex-DNMbqcH_.js +0 -0
  1147. /package/dist/{web → gui}/client/assets/prism-makefile-CRKWLQ8l.js +0 -0
  1148. /package/dist/{web → gui}/client/assets/prism-markdown-C0FPJ1Iz.js +0 -0
  1149. /package/dist/{web → gui}/client/assets/prism-markup-Cp04rIa1.js +0 -0
  1150. /package/dist/{web → gui}/client/assets/prism-matlab-D-nk08al.js +0 -0
  1151. /package/dist/{web → gui}/client/assets/prism-python-CfiSVtM6.js +0 -0
  1152. /package/dist/{web → gui}/client/assets/prism-r-QmNGR8LX.js +0 -0
  1153. /package/dist/{web → gui}/client/assets/prism-rust-Bu9N8X3N.js +0 -0
  1154. /package/dist/{web → gui}/client/assets/prism-shell-session-Be4UuYoM.js +0 -0
  1155. /package/dist/{web → gui}/client/assets/prism-sql-CYhVDMEE.js +0 -0
  1156. /package/dist/{web → gui}/client/assets/prism-toml-DKb54GAT.js +0 -0
  1157. /package/dist/{web → gui}/client/assets/prism-tsx-p6J2Kc_4.js +0 -0
  1158. /package/dist/{web → gui}/client/assets/prism-typescript-BMqONzxf.js +0 -0
  1159. /package/dist/{web → gui}/client/assets/prism-yaml-C0JHu8gr.js +0 -0
  1160. /package/dist/{web → gui}/client/assets/purify.es-ChwZkWde.js +0 -0
  1161. /package/dist/{web → gui}/client/assets/rolldown-runtime-hePW80VL.js +0 -0
  1162. /package/dist/{web → gui}/client/assets/rough.esm-Dy-Kn_BL.js +0 -0
  1163. /package/dist/{web → gui}/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +0 -0
  1164. /package/dist/{web → gui}/client/assets/src-B6xuSHsQ.js +0 -0
  1165. /package/dist/{web → gui}/client/clio-coder-logo.webp +0 -0
  1166. /package/dist/{web → gui}/client/icon-192.png +0 -0
  1167. /package/dist/{web → gui}/client/icon-512.png +0 -0
  1168. /package/dist/{web → gui}/client/manifest.webmanifest +0 -0
  1169. /package/dist/{web → gui}/client/offline.css +0 -0
  1170. /package/dist/{web → gui}/client/offline.html +0 -0
  1171. /package/dist/{web → gui}/client/offline.js +0 -0
  1172. /package/dist/{web → gui}/client/sw.js +0 -0
@@ -0,0 +1,1794 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ typedValidationSummary
4
+ } from "./chunk-DOUISWEE.js";
5
+ import {
6
+ assertValidResponseSchema,
7
+ runtimeSpeaksResponseSchemaDialect,
8
+ snapshotTurnConstraints
9
+ } from "./chunk-OQ2EOAHA.js";
10
+ import {
11
+ completeHistoryLength,
12
+ contextHash,
13
+ messageToolCalls,
14
+ parseWorkerContextSeed
15
+ } from "./chunk-T33IYTZM.js";
16
+ import {
17
+ describeCallAction
18
+ } from "./chunk-XNIZBOFV.js";
19
+ import {
20
+ assertToolProfileEnforceable
21
+ } from "./chunk-XZWSP67B.js";
22
+ import {
23
+ boundedExternalDiagnostic
24
+ } from "./chunk-77DCC6JZ.js";
25
+ import {
26
+ DEFAULT_AUTONOMY_LEVEL,
27
+ autonomyAskRejection,
28
+ autonomyDenyRejection,
29
+ mapAutonomy
30
+ } from "./chunk-UZVYEF57.js";
31
+ import {
32
+ INTERNAL_HELPER_RESULT_KINDS
33
+ } from "./chunk-LNOXCGN2.js";
34
+ import {
35
+ classify
36
+ } from "./chunk-VYRQHORQ.js";
37
+ import {
38
+ commandArgumentSegments,
39
+ detectValidationCommand,
40
+ extractCommandDeleteTargets,
41
+ extractCommandWriteTargets,
42
+ toolMutationPaths
43
+ } from "./chunk-P4GNZPXO.js";
44
+ import {
45
+ ToolNames
46
+ } from "./chunk-V4XJWDHR.js";
47
+ import {
48
+ THINKING_LEVELS
49
+ } from "./chunk-QZTTRSJE.js";
50
+ import {
51
+ buildSafeToolEnv,
52
+ resolveSafeCwd
53
+ } from "./chunk-M2IPMWCN.js";
54
+ import {
55
+ init_esm_shims
56
+ } from "./chunk-ECBHH7LU.js";
57
+
58
+ // src/worker/spec-contract.ts
59
+ init_esm_shims();
60
+ var WORKER_SPEC_VERSION = 4;
61
+ var WORKER_RUNTIME_DESCRIPTOR_VERSION = 2;
62
+ var WORKER_PROTECTED_ARTIFACT_STATE_VERSION = 1;
63
+ var WORKER_EXIT_PERMISSION_REQUIRED = 3;
64
+ var DEFAULT_ESCALATION_TIMEOUT_MS = 12e4;
65
+ var DEFAULT_ESCALATION_FALLBACK = "deny";
66
+ var RUNTIME_KINDS = ["http", "sdk", "subprocess"];
67
+ var RUNTIME_API_FAMILIES = [
68
+ "openai-completions",
69
+ "openai-responses",
70
+ "openai-codex-responses",
71
+ "azure-openai-responses",
72
+ "anthropic-messages",
73
+ "bedrock-converse-stream",
74
+ "google-generative-ai",
75
+ "google-vertex",
76
+ "mistral-conversations",
77
+ "ollama-native",
78
+ "rerank-http",
79
+ "embeddings-http",
80
+ "claude-agent-sdk",
81
+ "claude-code-subprocess",
82
+ "external-agent-subprocess"
83
+ ];
84
+ var RUNTIME_AUTHS = [
85
+ "api-key",
86
+ "oauth",
87
+ "aws-sdk",
88
+ "vertex-adc",
89
+ "claude-cli",
90
+ "none"
91
+ ];
92
+ var TOOL_PROFILE_NAMES = [
93
+ "minimal-local",
94
+ "science-local",
95
+ "full-agent",
96
+ "council-read-only"
97
+ ];
98
+ var WORKER_PRODUCTS = ["orientation"];
99
+ var TARGET_LIFECYCLES = ["user-managed", "clio-coder-managed"];
100
+ var RESIDENCY_ROLES = ["chat", "memory", "worker", "target-default"];
101
+ var MIDDLEWARE_HOOKS = ["before_tool", "after_tool", "turn_start", "turn_end", "on_compaction"];
102
+ var MIDDLEWARE_EFFECT_KINDS = [
103
+ "inject_reminder",
104
+ "annotate_tool_result",
105
+ "block_tool",
106
+ "protect_path",
107
+ "request_continuation",
108
+ "require_tool",
109
+ "lock_tools"
110
+ ];
111
+ var RUNTIME_RESOLUTION_SEVERITIES = ["info", "warning", "error"];
112
+ var SPEC_AUTONOMY_LEVELS = [
113
+ "read-only",
114
+ "suggest",
115
+ "auto-edit",
116
+ "full-auto"
117
+ ];
118
+ var THINKING_MECHANISMS = ["effort-levels", "budget-tokens", "on-off", "always-on", "none"];
119
+ var THINKING_BUDGET_ENFORCEMENTS = ["enforced", "informational", "none"];
120
+ var THINKING_NOTICE_KINDS = ["applied", "ignored-on-off", "always-on", "unsupported"];
121
+ function serializeWorkerRuntimeDescriptor(runtime) {
122
+ return {
123
+ version: WORKER_RUNTIME_DESCRIPTOR_VERSION,
124
+ id: runtime.id,
125
+ kind: runtime.kind,
126
+ apiFamily: runtime.apiFamily,
127
+ auth: runtime.auth,
128
+ // Carried so the target check can recognize a configured runtime id that
129
+ // resolves to this runtime through an alias. Without them the contract has
130
+ // no way to tell a legacy spelling from a genuinely wrong runtime.
131
+ ...runtime.aliases !== void 0 && runtime.aliases.length > 0 ? { aliases: [...runtime.aliases] } : {}
132
+ };
133
+ }
134
+ function readRecord(value, source) {
135
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
136
+ throw new Error(`${source} must be an object`);
137
+ }
138
+ return value;
139
+ }
140
+ function readWorkerPromptMessages(value, source) {
141
+ if (value === void 0) return;
142
+ if (!Array.isArray(value)) throw new Error(`${source} must be an array`);
143
+ for (let index = 0; index < value.length; index++) {
144
+ const entry = readRecord(value[index], `${source}[${index}]`);
145
+ readString(entry.id, `${source}[${index}].id`);
146
+ readString(entry.body, `${source}[${index}].body`);
147
+ readString(entry.contentHash, `${source}[${index}].contentHash`);
148
+ }
149
+ }
150
+ function readString(value, source, options) {
151
+ if (typeof value !== "string") throw new Error(`${source} must be a string`);
152
+ if (!options?.allowEmpty && value.length === 0) throw new Error(`${source} must be a non-empty string`);
153
+ return value;
154
+ }
155
+ function readOptionalString(record2, key, source) {
156
+ if (record2[key] !== void 0) readString(record2[key], `${source}.${key}`);
157
+ }
158
+ function readOptionalBoolean(record2, key, source) {
159
+ const value = record2[key];
160
+ if (value !== void 0 && typeof value !== "boolean") throw new Error(`${source}.${key} must be a boolean`);
161
+ }
162
+ function readOptionalNumber(record2, key, source) {
163
+ const value = record2[key];
164
+ if (value !== void 0 && (typeof value !== "number" || !Number.isFinite(value))) {
165
+ throw new Error(`${source}.${key} must be a finite number`);
166
+ }
167
+ }
168
+ function readEnum(value, source, allowed) {
169
+ if (typeof value !== "string" || !allowed.includes(value)) {
170
+ throw new Error(`${source} must be one of: ${allowed.join(", ")}`);
171
+ }
172
+ return value;
173
+ }
174
+ function readOptionalEnum(record2, key, source, allowed) {
175
+ if (record2[key] !== void 0) readEnum(record2[key], `${source}.${key}`, allowed);
176
+ }
177
+ function readStringArray(value, source) {
178
+ if (!Array.isArray(value)) throw new Error(`${source} must be an array`);
179
+ return value.map((item, index) => readString(item, `${source}[${index}]`));
180
+ }
181
+ function readOptionalStringArray(record2, key, source) {
182
+ if (record2[key] !== void 0) readStringArray(record2[key], `${source}.${key}`);
183
+ }
184
+ function validateProtectedModels(value) {
185
+ if (value === void 0) return;
186
+ if (!Array.isArray(value)) throw new Error("WorkerSpec.protectedModels must be an array");
187
+ value.forEach((item, index) => {
188
+ const source = `WorkerSpec.protectedModels[${index}]`;
189
+ if (typeof item === "string") {
190
+ readString(item, source);
191
+ return;
192
+ }
193
+ const ref = readRecord(item, source);
194
+ readString(ref.modelId, `${source}.modelId`);
195
+ readEnum(ref.role, `${source}.role`, RESIDENCY_ROLES);
196
+ });
197
+ }
198
+ function validateTarget(value, runtimeId, runtimeAliases) {
199
+ const target = readRecord(value, "WorkerSpec.target");
200
+ const targetId = readString(target.id, "WorkerSpec.target.id");
201
+ const targetRuntime = readString(target.runtime, "WorkerSpec.target.runtime");
202
+ if (targetRuntime !== runtimeId && !runtimeAliases.includes(targetRuntime)) {
203
+ throw new Error(
204
+ `WorkerSpec target runtime mismatch: target.runtime=${targetRuntime} runtimeId=${runtimeId}. Set the target's runtime to '${runtimeId}' in settings.yaml, or run 'clio-coder upgrade' to migrate a legacy runtime id.`
205
+ );
206
+ }
207
+ if (targetId.length === 0) throw new Error("WorkerSpec.target.id must be a non-empty string");
208
+ readOptionalString(target, "url", "WorkerSpec.target");
209
+ readOptionalString(target, "defaultModel", "WorkerSpec.target");
210
+ readOptionalStringArray(target, "wireModels", "WorkerSpec.target");
211
+ readOptionalBoolean(target, "gateway", "WorkerSpec.target");
212
+ readOptionalEnum(target, "lifecycle", "WorkerSpec.target", TARGET_LIFECYCLES);
213
+ if (target.auth !== void 0) validateTargetAuth(target.auth);
214
+ if (target.pricing !== void 0) validateTargetPricing(target.pricing);
215
+ if (target.cache !== void 0) {
216
+ const cache = readRecord(target.cache, "WorkerSpec.target.cache");
217
+ readOptionalEnum(cache, "retention", "WorkerSpec.target.cache", ["none", "short", "long"]);
218
+ if (cache.deployment !== void 0) {
219
+ const binding = readRecord(cache.deployment, "WorkerSpec.target.cache.deployment");
220
+ readString(binding.backend, "WorkerSpec.target.cache.deployment.backend");
221
+ readOptionalEnum(binding, "backend", "WorkerSpec.target.cache.deployment", [
222
+ "llamacpp",
223
+ "vllm",
224
+ "lmstudio"
225
+ ]);
226
+ for (const key of ["controlUrl", "model", "build"]) {
227
+ if (key === "build" && binding.backend === "lmstudio" && binding[key] === void 0) continue;
228
+ readString(binding[key], `WorkerSpec.target.cache.deployment.${key}`);
229
+ }
230
+ readOptionalString(binding, "gatewayDeploymentId", "WorkerSpec.target.cache.deployment");
231
+ const url = new URL(readString(binding.controlUrl, "WorkerSpec.target.cache.deployment.controlUrl"));
232
+ if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.search || url.hash)
233
+ throw new Error(
234
+ "WorkerSpec.target.cache.deployment.controlUrl must be HTTP(S) without credentials, query, or fragment"
235
+ );
236
+ }
237
+ if (cache.warm !== void 0) {
238
+ const warm = readRecord(cache.warm, "WorkerSpec.target.cache.warm");
239
+ readOptionalBoolean(warm, "startup", "WorkerSpec.target.cache.warm");
240
+ for (const key of ["maxInputTokens", "maxDurationMs", "cooldownMs"]) {
241
+ if (warm[key] !== void 0 && (typeof warm[key] !== "number" || !Number.isSafeInteger(warm[key]) || warm[key] < 1))
242
+ throw new Error(`WorkerSpec.target.cache.warm.${key} must be a positive safe integer`);
243
+ }
244
+ }
245
+ }
246
+ if (target.capabilities !== void 0) validateCapabilityPatch(target.capabilities, "WorkerSpec.target.capabilities");
247
+ }
248
+ function validateTargetAuth(value) {
249
+ const auth = readRecord(value, "WorkerSpec.target.auth");
250
+ readOptionalString(auth, "apiKeyEnvVar", "WorkerSpec.target.auth");
251
+ readOptionalString(auth, "apiKeyRef", "WorkerSpec.target.auth");
252
+ readOptionalString(auth, "oauthProfile", "WorkerSpec.target.auth");
253
+ if (auth.headers === void 0) return;
254
+ const headers = readRecord(auth.headers, "WorkerSpec.target.auth.headers");
255
+ for (const [key, value2] of Object.entries(headers)) {
256
+ readString(value2, `WorkerSpec.target.auth.headers.${key}`);
257
+ }
258
+ }
259
+ function validateTargetPricing(value) {
260
+ const pricing = readRecord(value, "WorkerSpec.target.pricing");
261
+ const input = pricing.input;
262
+ const output = pricing.output;
263
+ if (typeof input !== "number" || !Number.isFinite(input) || input < 0) {
264
+ throw new Error("WorkerSpec.target.pricing.input must be a non-negative finite number");
265
+ }
266
+ if (typeof output !== "number" || !Number.isFinite(output) || output < 0) {
267
+ throw new Error("WorkerSpec.target.pricing.output must be a non-negative finite number");
268
+ }
269
+ readOptionalNumber(pricing, "cacheRead", "WorkerSpec.target.pricing");
270
+ readOptionalNumber(pricing, "cacheWrite", "WorkerSpec.target.pricing");
271
+ }
272
+ function validateCapabilityPatch(value, source) {
273
+ const caps = readRecord(value, source);
274
+ for (const key of ["chat", "tools", "reasoning", "vision", "audio", "embeddings", "rerank", "fim"]) {
275
+ readOptionalBoolean(caps, key, source);
276
+ }
277
+ for (const key of ["contextWindow", "maxTokens"]) {
278
+ readOptionalNumber(caps, key, source);
279
+ }
280
+ if (caps.thinkingControlRuntime !== void 0) {
281
+ readEnum(caps.thinkingControlRuntime, `${source}.thinkingControlRuntime`, ["lmstudio", "llamacpp"]);
282
+ }
283
+ for (const key of ["toolCallFormat", "thinkingFormat", "structuredOutputs"]) {
284
+ readOptionalString(caps, key, source);
285
+ }
286
+ }
287
+ function validateAllowedTools(value) {
288
+ for (const name of readStringArray(value, "WorkerSpec.allowedTools")) {
289
+ if (name.trim().length === 0) throw new Error("WorkerSpec.allowedTools entries must be non-empty strings");
290
+ }
291
+ }
292
+ function validateWorkerBudget(value) {
293
+ const budget = readRecord(value, "WorkerSpec.budget");
294
+ const expected = ["mode", "hardCap", "readReserve", "revision", "synthesis", "toolCalls"];
295
+ const actual = Object.keys(budget).sort();
296
+ if (actual.some((key) => !expected.includes(key)) || actual.some((key) => key === "revision" && budget.revision === void 0)) {
297
+ throw new Error(`WorkerSpec.budget may contain only: ${expected.join(", ")}`);
298
+ }
299
+ if (budget.mode !== void 0 && budget.mode !== "advisory" && budget.mode !== "enforced")
300
+ throw new Error("WorkerSpec.budget.mode must be advisory or enforced");
301
+ for (const required of ["hardCap", "readReserve", "synthesis", "toolCalls"]) {
302
+ if (!Object.hasOwn(budget, required)) throw new Error(`WorkerSpec.budget.${required} is required`);
303
+ }
304
+ for (const key of ["toolCalls", "readReserve", "hardCap"]) {
305
+ const value2 = budget[key];
306
+ if (typeof value2 !== "number" || !Number.isSafeInteger(value2)) {
307
+ throw new Error(`WorkerSpec.budget.${key} must be a safe integer`);
308
+ }
309
+ }
310
+ if (budget.toolCalls <= 0) throw new Error("WorkerSpec.budget.toolCalls must be greater than zero");
311
+ if (budget.hardCap <= 0) throw new Error("WorkerSpec.budget.hardCap must be greater than zero");
312
+ if (budget.mode !== "advisory" && budget.toolCalls > budget.hardCap) {
313
+ throw new Error("WorkerSpec.budget.toolCalls must not exceed WorkerSpec.budget.hardCap");
314
+ }
315
+ if (budget.readReserve < 0 || budget.readReserve >= budget.toolCalls) {
316
+ throw new Error("WorkerSpec.budget.readReserve must be an integer in [0, toolCalls)");
317
+ }
318
+ if (typeof budget.synthesis !== "boolean") throw new Error("WorkerSpec.budget.synthesis must be a boolean");
319
+ if (budget.revision !== void 0) {
320
+ const revision = readRecord(budget.revision, "WorkerSpec.budget.revision");
321
+ const revisionKeys = Object.keys(revision).sort();
322
+ if (revisionKeys.length !== 2 || revisionKeys[0] !== "readReserve" || revisionKeys[1] !== "toolCalls") {
323
+ throw new Error("WorkerSpec.budget.revision must contain exactly: readReserve, toolCalls");
324
+ }
325
+ for (const key of ["toolCalls", "readReserve"]) {
326
+ if (typeof revision[key] !== "number" || !Number.isSafeInteger(revision[key])) {
327
+ throw new Error(`WorkerSpec.budget.revision.${key} must be a safe integer`);
328
+ }
329
+ }
330
+ if (revision.toolCalls < budget.toolCalls) {
331
+ throw new Error("WorkerSpec.budget.revision.toolCalls must not be smaller than WorkerSpec.budget.toolCalls");
332
+ }
333
+ if (revision.toolCalls === budget.toolCalls && revision.readReserve <= budget.readReserve) {
334
+ throw new Error("WorkerSpec.budget.revision must increase toolCalls or readReserve");
335
+ }
336
+ if (budget.mode !== "advisory" && revision.toolCalls > budget.hardCap) {
337
+ throw new Error("WorkerSpec.budget.revision.toolCalls must not exceed WorkerSpec.budget.hardCap");
338
+ }
339
+ if (revision.readReserve < 0 || revision.readReserve >= revision.toolCalls) {
340
+ throw new Error("WorkerSpec.budget.revision.readReserve must be an integer in [0, toolCalls)");
341
+ }
342
+ }
343
+ }
344
+ function validateRuntimeCapabilityDecision(value, source) {
345
+ const caps = readRecord(value, source);
346
+ for (const key of ["chat", "tools", "reasoning", "vision", "streaming"]) {
347
+ if (typeof caps[key] !== "boolean") throw new Error(`${source}.${key} must be a boolean`);
348
+ }
349
+ for (const key of ["contextWindow", "maxTokens"]) {
350
+ const n = caps[key];
351
+ if (typeof n !== "number" || !Number.isFinite(n) || n < 0)
352
+ throw new Error(`${source}.${key} must be a non-negative finite number`);
353
+ }
354
+ }
355
+ function validateRuntimeResolution(value) {
356
+ if (value === void 0) return;
357
+ const resolution = readRecord(value, "WorkerSpec.runtimeResolution");
358
+ readString(resolution.targetId, "WorkerSpec.runtimeResolution.targetId");
359
+ readString(resolution.runtimeId, "WorkerSpec.runtimeResolution.runtimeId");
360
+ readEnum(resolution.runtimeKind, "WorkerSpec.runtimeResolution.runtimeKind", RUNTIME_KINDS);
361
+ readEnum(resolution.apiFamily, "WorkerSpec.runtimeResolution.apiFamily", RUNTIME_API_FAMILIES);
362
+ readEnum(resolution.auth, "WorkerSpec.runtimeResolution.auth", RUNTIME_AUTHS);
363
+ if (typeof resolution.authRequired !== "boolean") {
364
+ throw new Error("WorkerSpec.runtimeResolution.authRequired must be a boolean");
365
+ }
366
+ readString(resolution.wireModelId, "WorkerSpec.runtimeResolution.wireModelId");
367
+ readEnum(resolution.requestedThinkingLevel, "WorkerSpec.runtimeResolution.requestedThinkingLevel", THINKING_LEVELS);
368
+ readEnum(resolution.effectiveThinkingLevel, "WorkerSpec.runtimeResolution.effectiveThinkingLevel", THINKING_LEVELS);
369
+ validateRuntimeCapabilityDecision(resolution.capabilities, "WorkerSpec.runtimeResolution.capabilities");
370
+ const thinking = readRecord(resolution.thinking, "WorkerSpec.runtimeResolution.thinking");
371
+ readEnum(thinking.mechanism, "WorkerSpec.runtimeResolution.thinking.mechanism", THINKING_MECHANISMS);
372
+ readString(thinking.display, "WorkerSpec.runtimeResolution.thinking.display", { allowEmpty: true });
373
+ for (const level of readStringArray(
374
+ thinking.supportedLevels,
375
+ "WorkerSpec.runtimeResolution.thinking.supportedLevels"
376
+ )) {
377
+ readEnum(level, "WorkerSpec.runtimeResolution.thinking.supportedLevels[]", THINKING_LEVELS);
378
+ }
379
+ readEnum(
380
+ thinking.budgetEnforcement,
381
+ "WorkerSpec.runtimeResolution.thinking.budgetEnforcement",
382
+ THINKING_BUDGET_ENFORCEMENTS
383
+ );
384
+ readEnum(thinking.noticeKind, "WorkerSpec.runtimeResolution.thinking.noticeKind", THINKING_NOTICE_KINDS);
385
+ readString(thinking.notice, "WorkerSpec.runtimeResolution.thinking.notice", { allowEmpty: true });
386
+ readRecord(resolution.request, "WorkerSpec.runtimeResolution.request");
387
+ readRecord(resolution.response, "WorkerSpec.runtimeResolution.response");
388
+ if (!Array.isArray(resolution.diagnostics)) {
389
+ throw new Error("WorkerSpec.runtimeResolution.diagnostics must be an array");
390
+ }
391
+ for (let index = 0; index < resolution.diagnostics.length; index += 1) {
392
+ const diag = readRecord(resolution.diagnostics[index], `WorkerSpec.runtimeResolution.diagnostics[${index}]`);
393
+ readEnum(diag.severity, `WorkerSpec.runtimeResolution.diagnostics[${index}].severity`, RUNTIME_RESOLUTION_SEVERITIES);
394
+ readString(diag.code, `WorkerSpec.runtimeResolution.diagnostics[${index}].code`);
395
+ readString(diag.message, `WorkerSpec.runtimeResolution.diagnostics[${index}].message`);
396
+ }
397
+ }
398
+ function validateMiddlewareSnapshot(value) {
399
+ const snapshot = readRecord(value, "WorkerSpec.middlewareSnapshot");
400
+ if (snapshot.version !== 1) throw new Error("WorkerSpec.middlewareSnapshot version must be 1");
401
+ if (!Array.isArray(snapshot.rules)) throw new Error("WorkerSpec.middlewareSnapshot.rules must be an array");
402
+ for (let index = 0; index < snapshot.rules.length; index += 1) {
403
+ const source = `WorkerSpec.middlewareSnapshot.rules[${index}]`;
404
+ const rule = readRecord(snapshot.rules[index], source);
405
+ readString(rule.id, `${source}.id`);
406
+ if (rule.source !== "builtin") throw new Error(`${source}.source must be builtin`);
407
+ readString(rule.description, `${source}.description`);
408
+ if (typeof rule.enabled !== "boolean") throw new Error(`${source}.enabled must be a boolean`);
409
+ for (const hook of readStringArray(rule.hooks, `${source}.hooks`)) {
410
+ readEnum(hook, `${source}.hooks[]`, MIDDLEWARE_HOOKS);
411
+ }
412
+ for (const kind of readStringArray(rule.effectKinds, `${source}.effectKinds`)) {
413
+ readEnum(kind, `${source}.effectKinds[]`, MIDDLEWARE_EFFECT_KINDS);
414
+ }
415
+ }
416
+ }
417
+ function validateProtectedArtifactState(value) {
418
+ const state = readRecord(value, "WorkerSpec.protectedArtifactState");
419
+ if (state.version !== WORKER_PROTECTED_ARTIFACT_STATE_VERSION) {
420
+ throw new Error(
421
+ `WorkerSpec.protectedArtifactState version ${String(state.version)} is unsupported; expected ${WORKER_PROTECTED_ARTIFACT_STATE_VERSION}`
422
+ );
423
+ }
424
+ if (!Array.isArray(state.artifacts)) {
425
+ throw new Error("WorkerSpec.protectedArtifactState.artifacts must be an array");
426
+ }
427
+ const sources = ["validation", "middleware", "user", "session"];
428
+ for (let index = 0; index < state.artifacts.length; index += 1) {
429
+ const source = `WorkerSpec.protectedArtifactState.artifacts[${index}]`;
430
+ const artifact = readRecord(state.artifacts[index], source);
431
+ readString(artifact.path, `${source}.path`);
432
+ readString(artifact.protectedAt, `${source}.protectedAt`);
433
+ readString(artifact.reason, `${source}.reason`);
434
+ readEnum(artifact.source, `${source}.source`, sources);
435
+ readOptionalString(artifact, "validationCommand", source);
436
+ readOptionalNumber(artifact, "validationExitCode", source);
437
+ }
438
+ }
439
+ function parseWorkerSpec(value) {
440
+ const spec = readRecord(value, "WorkerSpec");
441
+ if (spec.specVersion !== WORKER_SPEC_VERSION) {
442
+ throw new Error(
443
+ `WorkerSpec version ${String(spec.specVersion)} is unsupported (expected version ${WORKER_SPEC_VERSION}). Re-dispatch the request to generate a valid attested, budget-bearing worker specification.`
444
+ );
445
+ }
446
+ if (spec.budget === void 0) {
447
+ throw new Error(`WorkerSpec version ${WORKER_SPEC_VERSION} requires budget`);
448
+ }
449
+ if (typeof spec.settingsFingerprint !== "string" || !/^[0-9a-f]{64}$/.test(spec.settingsFingerprint)) {
450
+ throw new Error(`WorkerSpec version ${WORKER_SPEC_VERSION} requires settingsFingerprint as a sha256 hex digest`);
451
+ }
452
+ const runtime = readRecord(spec.runtime, "WorkerSpec.runtime");
453
+ if (runtime.version !== WORKER_RUNTIME_DESCRIPTOR_VERSION) {
454
+ throw new Error(
455
+ `WorkerSpec.runtime version ${String(runtime.version)} is unsupported; expected ${WORKER_RUNTIME_DESCRIPTOR_VERSION}`
456
+ );
457
+ }
458
+ const runtimeId = readString(spec.runtimeId, "WorkerSpec.runtimeId");
459
+ const runtimeRefId = readString(runtime.id, "WorkerSpec.runtime.id");
460
+ if (runtimeId !== runtimeRefId) {
461
+ throw new Error(`WorkerSpec runtime id mismatch: runtimeId=${runtimeId} runtime.id=${runtimeRefId}`);
462
+ }
463
+ const runtimeAliases = runtime.aliases === void 0 ? [] : readStringArray(runtime.aliases, "WorkerSpec.runtime.aliases");
464
+ const runtimeKind = readEnum(runtime.kind, "WorkerSpec.runtime.kind", RUNTIME_KINDS);
465
+ const runtimeApiFamily = readEnum(runtime.apiFamily, "WorkerSpec.runtime.apiFamily", RUNTIME_API_FAMILIES);
466
+ readEnum(runtime.auth, "WorkerSpec.runtime.auth", RUNTIME_AUTHS);
467
+ readString(spec.systemPrompt, "WorkerSpec.systemPrompt", { allowEmpty: true });
468
+ readWorkerPromptMessages(spec.dynamicPromptMessages, "WorkerSpec.dynamicPromptMessages");
469
+ if (spec.contextSeed !== void 0) {
470
+ parseWorkerContextSeed(spec.contextSeed);
471
+ if (runtimeKind !== "http") throw new Error("worker context: native history seeds require an HTTP/Pi runtime");
472
+ }
473
+ readOptionalString(spec, "promptSignature", "WorkerSpec");
474
+ readOptionalString(spec, "toolSignature", "WorkerSpec");
475
+ readOptionalString(spec, "dynamicHash", "WorkerSpec");
476
+ readString(spec.agentId, "WorkerSpec.agentId");
477
+ readString(spec.task, "WorkerSpec.task");
478
+ validateTarget(spec.target, runtimeId, runtimeAliases);
479
+ readString(spec.wireModelId, "WorkerSpec.wireModelId");
480
+ readOptionalString(spec, "sessionId", "WorkerSpec");
481
+ readOptionalString(spec, "apiKey", "WorkerSpec");
482
+ readOptionalEnum(spec, "thinkingLevel", "WorkerSpec", THINKING_LEVELS);
483
+ if (spec.modelCapabilities !== void 0)
484
+ validateCapabilityPatch(spec.modelCapabilities, "WorkerSpec.modelCapabilities");
485
+ if (spec.responseSchema !== void 0) {
486
+ assertValidResponseSchema(spec.responseSchema, "WorkerSpec.responseSchema");
487
+ if (!runtimeSpeaksResponseSchemaDialect({ id: runtimeId, kind: runtimeKind, apiFamily: runtimeApiFamily })) {
488
+ throw new Error("WorkerSpec.responseSchema is supported only by the native llamacpp runtime");
489
+ }
490
+ const structuredOutputs = spec.modelCapabilities === void 0 ? void 0 : readRecord(spec.modelCapabilities, "WorkerSpec.modelCapabilities").structuredOutputs;
491
+ if (structuredOutputs !== "json-schema") {
492
+ throw new Error("WorkerSpec.responseSchema requires resolved JSON-schema model capability");
493
+ }
494
+ }
495
+ validateAllowedTools(spec.allowedTools);
496
+ if (spec.helperResult !== void 0) {
497
+ if (spec.helperResult !== true) throw new Error("WorkerSpec.helperResult must be true when present");
498
+ const contract = readRecord(spec.resultContract, "WorkerSpec.resultContract");
499
+ if (!INTERNAL_HELPER_RESULT_KINDS.includes(contract.kind)) {
500
+ throw new Error("WorkerSpec.helperResult requires a supported internal JSON result contract");
501
+ }
502
+ }
503
+ validateWorkerBudget(spec.budget);
504
+ validateProtectedModels(spec.protectedModels);
505
+ validateRuntimeResolution(spec.runtimeResolution);
506
+ if (spec.middlewareSnapshot !== void 0) validateMiddlewareSnapshot(spec.middlewareSnapshot);
507
+ if (spec.protectedArtifactState !== void 0) validateProtectedArtifactState(spec.protectedArtifactState);
508
+ if (spec.noSkills !== void 0 && typeof spec.noSkills !== "boolean") {
509
+ throw new Error("WorkerSpec.noSkills must be a boolean");
510
+ }
511
+ if (spec.turnConstraints !== void 0) snapshotTurnConstraints(spec.turnConstraints);
512
+ if (spec.skillPaths !== void 0) {
513
+ readStringArray(spec.skillPaths, "WorkerSpec.skillPaths");
514
+ }
515
+ if (spec.agentSkills !== void 0) {
516
+ for (const name of readStringArray(spec.agentSkills, "WorkerSpec.agentSkills")) {
517
+ if (name.trim().length === 0) throw new Error("WorkerSpec.agentSkills entries must be non-empty strings");
518
+ }
519
+ }
520
+ if (spec.trustProjectCompatRoots !== void 0 && typeof spec.trustProjectCompatRoots !== "boolean") {
521
+ throw new Error("WorkerSpec.trustProjectCompatRoots must be a boolean");
522
+ }
523
+ if (spec.gitCommitAttribution !== void 0 && typeof spec.gitCommitAttribution !== "boolean") {
524
+ throw new Error("WorkerSpec.gitCommitAttribution must be a boolean");
525
+ }
526
+ readOptionalEnum(spec, "toolProfile", "WorkerSpec", TOOL_PROFILE_NAMES);
527
+ readOptionalEnum(spec, "product", "WorkerSpec", WORKER_PRODUCTS);
528
+ if (spec.onPermission !== void 0 && spec.onPermission !== "deny" && spec.onPermission !== "fail" && spec.onPermission !== "escalate") {
529
+ throw new Error('WorkerSpec.onPermission must be "deny", "fail", or "escalate"');
530
+ }
531
+ if (spec.escalation !== void 0) {
532
+ const escalation = readRecord(spec.escalation, "WorkerSpec.escalation");
533
+ const timeoutMs = escalation.timeoutMs;
534
+ if (typeof timeoutMs !== "number" || !Number.isFinite(timeoutMs) || timeoutMs <= 0) {
535
+ throw new Error("WorkerSpec.escalation.timeoutMs must be a positive finite number");
536
+ }
537
+ if (escalation.fallback !== "deny" && escalation.fallback !== "fail") {
538
+ throw new Error('WorkerSpec.escalation.fallback must be "deny" or "fail"');
539
+ }
540
+ }
541
+ if (spec.autonomy !== void 0) {
542
+ readEnum(spec.autonomy, "WorkerSpec.autonomy", SPEC_AUTONOMY_LEVELS);
543
+ }
544
+ if (spec.ledger !== void 0) {
545
+ const ledger = readRecord(spec.ledger, "WorkerSpec.ledger");
546
+ readString(ledger.id, "WorkerSpec.ledger.id");
547
+ if (typeof ledger.sequence !== "number" || !Number.isSafeInteger(ledger.sequence) || ledger.sequence < 0) {
548
+ throw new Error("WorkerSpec.ledger.sequence must be a non-negative safe integer");
549
+ }
550
+ }
551
+ if (spec.writeRoots !== void 0) {
552
+ const roots = readStringArray(spec.writeRoots, "WorkerSpec.writeRoots");
553
+ if (roots.length === 0) throw new Error("WorkerSpec.writeRoots must be a non-empty array when present");
554
+ for (const root of roots) {
555
+ if (root.trim().length === 0) throw new Error("WorkerSpec.writeRoots entries must be non-empty strings");
556
+ }
557
+ }
558
+ return spec;
559
+ }
560
+ function validateRehydratedWorkerRuntime(spec, runtime) {
561
+ const expected = spec.runtime;
562
+ if (runtime.id !== expected.id) {
563
+ throw new Error(`WorkerSpec runtime rehydration mismatch for id: expected ${expected.id}, got ${runtime.id}`);
564
+ }
565
+ if (runtime.kind !== expected.kind) {
566
+ throw new Error(`WorkerSpec runtime rehydration mismatch for kind: expected ${expected.kind}, got ${runtime.kind}`);
567
+ }
568
+ if (runtime.apiFamily !== expected.apiFamily) {
569
+ throw new Error(
570
+ `WorkerSpec runtime rehydration mismatch for apiFamily: expected ${expected.apiFamily}, got ${runtime.apiFamily}`
571
+ );
572
+ }
573
+ if (runtime.auth !== expected.auth) {
574
+ throw new Error(`WorkerSpec runtime rehydration mismatch for auth: expected ${expected.auth}, got ${runtime.auth}`);
575
+ }
576
+ }
577
+
578
+ // src/domains/context/worker/snapshot.ts
579
+ init_esm_shims();
580
+ function captureWorkerContext(source, messages) {
581
+ const conversation = messages.filter((message) => message.role !== "system");
582
+ const interrupted = (message) => message.role === "assistant" && (message.stopReason === "error" || message.stopReason === "aborted");
583
+ const interruptedIds = new Set(
584
+ conversation.filter(interrupted).flatMap(messageToolCalls).map((call) => call.id)
585
+ );
586
+ const visible = conversation.filter(
587
+ (message) => !interrupted(message) && !(message.role === "toolResult" && interruptedIds.has(message.toolCallId))
588
+ );
589
+ const end = completeHistoryLength(visible, true);
590
+ const snapshot = {
591
+ version: 1,
592
+ source: structuredClone(source),
593
+ messages: structuredClone(visible.slice(0, end)),
594
+ excludedTailMessages: visible.length - end,
595
+ excludedInterruptedMessages: conversation.length - visible.length
596
+ };
597
+ return { ...snapshot, contentHash: contextHash(snapshot) };
598
+ }
599
+
600
+ // src/engine/antigravity/subprocess-runtime.ts
601
+ init_esm_shims();
602
+ import { spawn as spawn2 } from "node:child_process";
603
+
604
+ // src/engine/external-subprocess.ts
605
+ init_esm_shims();
606
+ import { spawn } from "node:child_process";
607
+ async function* readBoundedLines(readable, options) {
608
+ let segments = [];
609
+ let lineBytes = 0;
610
+ let totalBytes = 0;
611
+ let discarding = false;
612
+ const finishLine = () => {
613
+ if (discarding) {
614
+ segments = [];
615
+ lineBytes = 0;
616
+ discarding = false;
617
+ return { kind: "oversized" };
618
+ }
619
+ if (lineBytes === 0) return { kind: "line", line: "" };
620
+ const joined = Buffer.concat(segments, lineBytes);
621
+ segments = [];
622
+ lineBytes = 0;
623
+ const end = joined.at(-1) === 13 ? joined.length - 1 : joined.length;
624
+ return { kind: "line", line: joined.subarray(0, end).toString("utf8") };
625
+ };
626
+ for await (const raw of readable) {
627
+ const chunk = Buffer.isBuffer(raw) ? raw : Buffer.from(String(raw));
628
+ totalBytes += chunk.byteLength;
629
+ if (totalBytes > options.maxTotalBytes) throw new Error("external stdout exceeded the cumulative output limit");
630
+ let offset = 0;
631
+ while (offset < chunk.length) {
632
+ const newline = chunk.indexOf(10, offset);
633
+ const end = newline === -1 ? chunk.length : newline;
634
+ const piece = chunk.subarray(offset, end);
635
+ if (!discarding && piece.length > 0) {
636
+ if (lineBytes + piece.length > options.maxLineBytes) {
637
+ segments = [];
638
+ lineBytes = 0;
639
+ discarding = true;
640
+ } else {
641
+ segments.push(piece);
642
+ lineBytes += piece.length;
643
+ }
644
+ }
645
+ if (newline === -1) break;
646
+ const line = finishLine();
647
+ if (line) yield line;
648
+ offset = newline + 1;
649
+ }
650
+ }
651
+ if (discarding || lineBytes > 0) {
652
+ const line = finishLine();
653
+ if (line) yield line;
654
+ }
655
+ }
656
+ async function readStderr(child) {
657
+ let tail = Buffer.alloc(0);
658
+ for await (const chunk of child.stderr) {
659
+ const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk));
660
+ tail = Buffer.concat([tail, bytes]);
661
+ if (tail.byteLength > 8192) tail = tail.subarray(tail.byteLength - 8192);
662
+ }
663
+ return boundedExternalDiagnostic(tail.toString("utf8"));
664
+ }
665
+ function createProcessTreeTerminator(child, graceMs = 1500, options = {}) {
666
+ const platform = options.platform ?? process.platform;
667
+ const spawnKiller = options.spawn ?? spawn;
668
+ let sent = false;
669
+ let timer = null;
670
+ const signal = (name) => {
671
+ if (child.pid && platform !== "win32") {
672
+ try {
673
+ process.kill(-child.pid, name);
674
+ return;
675
+ } catch {
676
+ }
677
+ }
678
+ if (platform === "win32" && child.pid !== void 0 && Number.isSafeInteger(child.pid) && child.pid > 0) {
679
+ const args = ["/PID", String(child.pid), "/T", ...name === "SIGKILL" ? ["/F"] : []];
680
+ const killer = spawnKiller("taskkill.exe", args, { stdio: "ignore", windowsHide: true });
681
+ killer.once("error", () => {
682
+ if (child.exitCode === null) child.kill(name);
683
+ });
684
+ return;
685
+ }
686
+ if (child.exitCode !== null) return;
687
+ child.kill(name);
688
+ };
689
+ return {
690
+ terminate() {
691
+ if (sent) return;
692
+ sent = true;
693
+ signal("SIGTERM");
694
+ timer = setTimeout(() => {
695
+ timer = null;
696
+ signal("SIGKILL");
697
+ }, graceMs);
698
+ },
699
+ cleanup() {
700
+ if (timer) {
701
+ clearTimeout(timer);
702
+ timer = null;
703
+ signal("SIGKILL");
704
+ }
705
+ }
706
+ };
707
+ }
708
+ function waitForClose(child) {
709
+ return new Promise((resolve) => {
710
+ let settled = false;
711
+ const finish = (code) => {
712
+ if (settled) return;
713
+ settled = true;
714
+ resolve(code);
715
+ };
716
+ child.once("error", () => finish(1));
717
+ child.once("close", (code) => finish(code ?? 1));
718
+ });
719
+ }
720
+
721
+ // src/engine/antigravity/subprocess-runtime.ts
722
+ var ANTIGRAVITY_BINARY = "agy";
723
+ var ANTIGRAVITY_MAX_STREAM_LINE_BYTES = 1024 * 1024;
724
+ var ANTIGRAVITY_MAX_STREAM_BYTES = 8 * 1024 * 1024;
725
+ var ANTIGRAVITY_MAX_RESPONSE_BYTES = 4 * 1024 * 1024;
726
+ var ANTIGRAVITY_MAX_PROMPT_BYTES = 4 * 1024 * 1024;
727
+ var MAX_PROTOCOL_DIAGNOSTICS = 32;
728
+ var MAX_CONVERSATION_ID_BYTES = 4096;
729
+ function antigravitySubprocessConfigForAutonomy(level, env = process.env) {
730
+ if (level === "full-auto" && env.CLIO_CODER_ALLOW_EXTERNAL_FULL_ACCESS === "1") {
731
+ return {
732
+ extraArgs: ["--dangerously-skip-permissions"],
733
+ dangerousBypass: true,
734
+ externalMode: "bypassPermissions"
735
+ };
736
+ }
737
+ if (level === "suggest") {
738
+ throw new Error(
739
+ "antigravity-code runtime cannot enforce autonomy 'suggest': it cannot park tool calls for approval. Dispatch to a native or claude-sdk worker, or use read-only or auto-edit."
740
+ );
741
+ }
742
+ if (level === "read-only") {
743
+ return { extraArgs: ["--mode", "plan", "--sandbox"], dangerousBypass: false, externalMode: "plan+sandbox" };
744
+ }
745
+ return { extraArgs: ["--mode", "accept-edits"], dangerousBypass: false, externalMode: "accept-edits" };
746
+ }
747
+ function buildAntigravityPrompt(input) {
748
+ const parts = [];
749
+ const systemPrompt = input.systemPrompt.trim();
750
+ if (systemPrompt.length > 0) parts.push(systemPrompt);
751
+ for (const message of input.dynamicPromptMessages ?? []) {
752
+ const body = message.body.trim();
753
+ if (body.length > 0) parts.push(body);
754
+ }
755
+ parts.push(input.task);
756
+ return parts.join("\n\n");
757
+ }
758
+ function buildAgyStdinLine(input) {
759
+ const content = buildAntigravityPrompt(input);
760
+ if (Buffer.byteLength(content, "utf8") > ANTIGRAVITY_MAX_PROMPT_BYTES) {
761
+ throw new Error(`Antigravity work order exceeded ${ANTIGRAVITY_MAX_PROMPT_BYTES} bytes`);
762
+ }
763
+ return `${JSON.stringify({ event: "user", message: { content } })}
764
+ `;
765
+ }
766
+ function buildAgyArgs(input, gateEnv = process.env) {
767
+ assertToolProfileEnforceable(input.toolProfile, "antigravity-code");
768
+ const permission = antigravitySubprocessConfigForAutonomy(input.autonomy, gateEnv);
769
+ const args = [
770
+ ...permission.extraArgs,
771
+ "--input-format",
772
+ "stream-json",
773
+ "--output-format",
774
+ "stream-json",
775
+ "--disable-slash-commands"
776
+ ];
777
+ if (input.wireModelId.trim().length > 0) args.push("--model", input.wireModelId.trim());
778
+ if (typeof input.sessionId === "string" && input.sessionId.length > 0) {
779
+ if (Buffer.byteLength(input.sessionId, "utf8") > MAX_CONVERSATION_ID_BYTES) {
780
+ throw new Error(`Antigravity sessionId exceeded ${MAX_CONVERSATION_ID_BYTES} bytes`);
781
+ }
782
+ if (new RegExp("\\p{Cc}", "u").test(input.sessionId)) {
783
+ throw new Error("Antigravity sessionId must not contain control characters");
784
+ }
785
+ args.push("--conversation", input.sessionId);
786
+ }
787
+ return args;
788
+ }
789
+ function record(value) {
790
+ return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
791
+ }
792
+ function parseAntigravityStreamLine(line) {
793
+ let decoded;
794
+ try {
795
+ decoded = JSON.parse(line);
796
+ } catch {
797
+ return null;
798
+ }
799
+ const envelope = record(decoded);
800
+ if (!envelope || typeof envelope.event !== "string") return null;
801
+ if (envelope.event === "init") {
802
+ return {
803
+ event: "init",
804
+ conversationId: typeof envelope.conversation_id === "string" ? envelope.conversation_id : null,
805
+ model: typeof envelope.model === "string" ? envelope.model : null
806
+ };
807
+ }
808
+ if (envelope.event === "step_update") {
809
+ const update = record(envelope.step_update);
810
+ if (!update) return null;
811
+ if (update.step_type !== "agent_response" || typeof update.text_delta !== "string") {
812
+ return { event: "other" };
813
+ }
814
+ return {
815
+ event: "text",
816
+ conversationId: typeof update.conversation_id === "string" ? update.conversation_id : null,
817
+ delta: update.text_delta
818
+ };
819
+ }
820
+ if (envelope.event === "result") {
821
+ const result = record(envelope.result);
822
+ return result ? { event: "result", result } : null;
823
+ }
824
+ return { event: "other" };
825
+ }
826
+ function finite(value) {
827
+ return typeof value === "number" && Number.isFinite(value) && value > 0 ? Math.min(value, Number.MAX_SAFE_INTEGER) : 0;
828
+ }
829
+ function normalizeUsage(raw) {
830
+ const source = record(raw) ?? {};
831
+ const input = finite(source.input_tokens);
832
+ const output = finite(source.output_tokens);
833
+ const cacheRead = finite(source.cache_read_tokens);
834
+ const reasoningTokens = finite(source.thinking_tokens);
835
+ const usage = {
836
+ input,
837
+ output,
838
+ cacheRead,
839
+ cacheWrite: 0,
840
+ totalTokens: finite(source.total_tokens) || input + output + reasoningTokens,
841
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 }
842
+ };
843
+ if (reasoningTokens > 0) usage.reasoningTokens = reasoningTokens;
844
+ return usage;
845
+ }
846
+ function appendBoundedText(current, delta) {
847
+ if (Buffer.byteLength(current, "utf8") + Buffer.byteLength(delta, "utf8") > ANTIGRAVITY_MAX_RESPONSE_BYTES) {
848
+ throw new Error(`Antigravity response exceeded ${ANTIGRAVITY_MAX_RESPONSE_BYTES} bytes`);
849
+ }
850
+ return current + delta;
851
+ }
852
+ function boundedProviderField(value, field) {
853
+ if (typeof value !== "string") return "";
854
+ if (Buffer.byteLength(value, "utf8") > ANTIGRAVITY_MAX_RESPONSE_BYTES) {
855
+ throw new Error(`Antigravity terminal ${field} exceeded ${ANTIGRAVITY_MAX_RESPONSE_BYTES} bytes`);
856
+ }
857
+ return value;
858
+ }
859
+ function boundedConversationId(value) {
860
+ if (typeof value !== "string" || value.length === 0) return null;
861
+ return Buffer.byteLength(value, "utf8") <= MAX_CONVERSATION_ID_BYTES ? value : null;
862
+ }
863
+ function protocolFailure(state, detail) {
864
+ if (state.protocolDiagnostics.length < MAX_PROTOCOL_DIAGNOSTICS) state.protocolDiagnostics.push(detail);
865
+ }
866
+ function emitTextDelta(emit, state, delta) {
867
+ if (delta.length === 0) return;
868
+ state.text = appendBoundedText(state.text, delta);
869
+ if (!state.started) {
870
+ state.started = true;
871
+ emit({
872
+ type: "message_start",
873
+ message: buildAssistantMessage({
874
+ model: state.model,
875
+ text: "",
876
+ result: null,
877
+ conversationId: null,
878
+ exitCode: 0,
879
+ aborted: false,
880
+ diagnostic: ""
881
+ })
882
+ });
883
+ }
884
+ emit({
885
+ type: "message_update",
886
+ assistantMessageEvent: { type: "text_delta", contentIndex: 0, delta }
887
+ });
888
+ }
889
+ async function readStream(child, emit, state, requestedConversationId) {
890
+ for await (const bounded of readBoundedLines(child.stdout, {
891
+ maxLineBytes: ANTIGRAVITY_MAX_STREAM_LINE_BYTES,
892
+ maxTotalBytes: ANTIGRAVITY_MAX_STREAM_BYTES
893
+ })) {
894
+ if (bounded.kind === "oversized") {
895
+ protocolFailure(state, "oversized structured output line");
896
+ continue;
897
+ }
898
+ const line = bounded.line;
899
+ if (!line.trim()) continue;
900
+ const event = parseAntigravityStreamLine(line);
901
+ if (!event) {
902
+ protocolFailure(state, "unreadable structured output line");
903
+ continue;
904
+ }
905
+ if (state.terminalSeen) {
906
+ protocolFailure(state, "event after terminal result");
907
+ continue;
908
+ }
909
+ switch (event.event) {
910
+ case "init":
911
+ if (state.initSeen) {
912
+ protocolFailure(state, "duplicate init event");
913
+ break;
914
+ }
915
+ state.initSeen = true;
916
+ if (requestedConversationId && event.conversationId !== requestedConversationId) {
917
+ protocolFailure(state, "requested conversation was not resumed");
918
+ }
919
+ state.conversationId = boundedConversationId(event.conversationId);
920
+ if (event.model?.trim()) state.model = event.model.trim();
921
+ break;
922
+ case "text":
923
+ if (!state.initSeen) {
924
+ protocolFailure(state, "text event before init");
925
+ break;
926
+ }
927
+ state.conversationId = boundedConversationId(event.conversationId) ?? state.conversationId;
928
+ emitTextDelta(emit, state, event.delta);
929
+ break;
930
+ case "result":
931
+ if (!state.initSeen) {
932
+ protocolFailure(state, "terminal result before init");
933
+ break;
934
+ }
935
+ state.terminalSeen = true;
936
+ state.result = event.result;
937
+ state.conversationId = boundedConversationId(event.result.conversation_id) ?? state.conversationId;
938
+ break;
939
+ case "other":
940
+ if (!state.initSeen) protocolFailure(state, "event before init");
941
+ break;
942
+ }
943
+ }
944
+ }
945
+ function resultDiagnostic(input) {
946
+ if (input.aborted) return "Antigravity run was cancelled";
947
+ if (input.spawnError) return input.spawnError;
948
+ if (input.streamError) return input.streamError;
949
+ if (input.protocolDiagnostics.length > 0) {
950
+ return `Antigravity structured output violated the protocol: ${input.protocolDiagnostics.join("; ")}`;
951
+ }
952
+ if (input.result === null) {
953
+ return "Antigravity CLI ended without a terminal stream result. Update `agy` and verify stream-json support.";
954
+ }
955
+ if (input.result.status !== "SUCCESS") {
956
+ const providerError = boundedProviderField(input.result.error, "error").trim();
957
+ return providerError || `Antigravity returned terminal status ${String(input.result.status ?? "missing")}`;
958
+ }
959
+ if (input.exitCode !== 0) return `Antigravity returned SUCCESS but exited with status ${input.exitCode}`;
960
+ if (typeof input.result.response !== "string") return "Antigravity SUCCESS result omitted its required response";
961
+ return "";
962
+ }
963
+ function buildAssistantMessage(input) {
964
+ const succeeded = !input.aborted && input.exitCode === 0 && input.result?.status === "SUCCESS" && typeof input.result.response === "string" && input.diagnostic.length === 0;
965
+ const message = {
966
+ role: "assistant",
967
+ content: [{ type: "text", text: input.text }],
968
+ api: "external-agent-subprocess",
969
+ provider: "antigravity",
970
+ model: input.model,
971
+ usage: normalizeUsage(input.result?.usage),
972
+ stopReason: input.aborted ? "aborted" : succeeded ? "stop" : "error",
973
+ timestamp: Date.now()
974
+ };
975
+ if (input.conversationId) message.responseId = input.conversationId;
976
+ if (input.diagnostic) message.errorMessage = boundedExternalDiagnostic(input.diagnostic);
977
+ return message;
978
+ }
979
+ function startAntigravityWorkerRun(input, emit, dependencies = {}) {
980
+ const sourceEnv = dependencies.environment ?? process.env;
981
+ const args = buildAgyArgs(input, sourceEnv);
982
+ const stdinLine = buildAgyStdinLine(input);
983
+ const workspaceRoot = dependencies.workspaceRoot ?? process.cwd();
984
+ const cwd = resolveSafeCwd(input.cwd, workspaceRoot);
985
+ const child = spawn2(dependencies.binary ?? ANTIGRAVITY_BINARY, args, {
986
+ cwd,
987
+ env: buildSafeToolEnv({}, sourceEnv),
988
+ detached: process.platform !== "win32",
989
+ stdio: ["pipe", "pipe", "pipe"]
990
+ });
991
+ const streamState = {
992
+ started: false,
993
+ text: "",
994
+ model: input.wireModelId,
995
+ result: null,
996
+ conversationId: null,
997
+ initSeen: false,
998
+ terminalSeen: false,
999
+ protocolDiagnostics: []
1000
+ };
1001
+ let aborted = false;
1002
+ let spawnError = "";
1003
+ let streamError = "";
1004
+ const terminator = createProcessTreeTerminator(child, dependencies.killGraceMs ?? 1500);
1005
+ const abort = () => {
1006
+ if (child.exitCode !== null) return;
1007
+ aborted = true;
1008
+ terminator.terminate();
1009
+ };
1010
+ const onAbort = () => abort();
1011
+ if (input.signal?.aborted) abort();
1012
+ else input.signal?.addEventListener("abort", onAbort, { once: true });
1013
+ child.once("error", (cause) => {
1014
+ spawnError = cause.code === "ENOENT" ? "Antigravity CLI (`agy`) is not installed or not on PATH." : boundedExternalDiagnostic(cause.message);
1015
+ });
1016
+ child.stdin.on("error", (cause) => {
1017
+ if (!aborted) spawnError ||= boundedExternalDiagnostic(`could not send work order to Antigravity: ${cause.message}`);
1018
+ });
1019
+ child.stdin.end(stdinLine);
1020
+ const promise = (async () => {
1021
+ emit({ type: "agent_start" });
1022
+ try {
1023
+ const stderrPromise = readStderr(child);
1024
+ const stdoutPromise = readStream(child, emit, streamState, input.sessionId).catch((cause) => {
1025
+ streamError = boundedExternalDiagnostic(cause instanceof Error ? cause.message : String(cause));
1026
+ terminator.terminate();
1027
+ });
1028
+ const exitCode = await waitForClose(child);
1029
+ await stdoutPromise;
1030
+ const stderr = await stderrPromise.catch(
1031
+ (cause) => boundedExternalDiagnostic(cause instanceof Error ? cause.message : String(cause))
1032
+ );
1033
+ let terminalResponse = "";
1034
+ try {
1035
+ terminalResponse = boundedProviderField(streamState.result?.response, "response");
1036
+ } catch (cause) {
1037
+ streamError ||= boundedExternalDiagnostic(cause instanceof Error ? cause.message : String(cause));
1038
+ }
1039
+ let diagnostic = "";
1040
+ try {
1041
+ diagnostic = resultDiagnostic({
1042
+ result: streamState.result,
1043
+ exitCode,
1044
+ spawnError,
1045
+ stderr,
1046
+ protocolDiagnostics: streamState.protocolDiagnostics,
1047
+ streamError,
1048
+ aborted
1049
+ });
1050
+ } catch (cause) {
1051
+ diagnostic = boundedExternalDiagnostic(cause instanceof Error ? cause.message : String(cause));
1052
+ }
1053
+ const finalText = terminalResponse || streamState.text;
1054
+ const finalMessage = buildAssistantMessage({
1055
+ model: streamState.model,
1056
+ text: finalText,
1057
+ result: streamState.result,
1058
+ conversationId: streamState.conversationId,
1059
+ exitCode,
1060
+ aborted,
1061
+ diagnostic
1062
+ });
1063
+ if (!streamState.started) emit({ type: "message_start", message: finalMessage });
1064
+ emit({ type: "message_end", message: finalMessage });
1065
+ const messages = [finalMessage];
1066
+ emit({ type: "agent_end", messages });
1067
+ if (finalMessage.stopReason === "error" && diagnostic && !aborted) {
1068
+ process.stderr.write(`[worker:antigravity-code] ${boundedExternalDiagnostic(diagnostic)}
1069
+ `);
1070
+ }
1071
+ return { messages, exitCode: finalMessage.stopReason === "stop" ? 0 : 1 };
1072
+ } finally {
1073
+ terminator.cleanup();
1074
+ input.signal?.removeEventListener("abort", onAbort);
1075
+ }
1076
+ })();
1077
+ return { promise, abort };
1078
+ }
1079
+
1080
+ // src/engine/claude/subprocess-runtime.ts
1081
+ init_esm_shims();
1082
+ import { spawn as spawn3 } from "node:child_process";
1083
+
1084
+ // src/engine/claude/session-id.ts
1085
+ init_esm_shims();
1086
+ var CLAUDE_CODE_SESSION_ID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
1087
+ function isClaudeCodeSessionId(value) {
1088
+ return typeof value === "string" && CLAUDE_CODE_SESSION_ID_PATTERN.test(value.trim());
1089
+ }
1090
+
1091
+ // src/engine/claude/subprocess-runtime.ts
1092
+ var READ_ONLY_CLAUDE_TOOLS = ["Read", "Grep", "Glob", "LS", "WebFetch", "WebSearch"];
1093
+ var CLAUDE_BINARY = "claude";
1094
+ var CLAUDE_MAX_STREAM_LINE_BYTES = 1024 * 1024;
1095
+ var CLAUDE_MAX_STREAM_BYTES = 8 * 1024 * 1024;
1096
+ function claudeSubprocessPermissionConfigForAutonomy(level, env = process.env) {
1097
+ if (level === "full-auto" && env.CLIO_CODER_ALLOW_EXTERNAL_FULL_ACCESS === "1") {
1098
+ return {
1099
+ permissionMode: "bypassPermissions",
1100
+ extraArgs: ["--allow-dangerously-skip-permissions"],
1101
+ dangerousBypass: true
1102
+ };
1103
+ }
1104
+ if (level === "read-only") {
1105
+ return {
1106
+ permissionMode: "plan",
1107
+ extraArgs: ["--tools", READ_ONLY_CLAUDE_TOOLS.join(",")],
1108
+ dangerousBypass: false
1109
+ };
1110
+ }
1111
+ if (level === "suggest") {
1112
+ throw new Error(
1113
+ "claude-code runtime cannot enforce autonomy 'suggest': it cannot park tool calls for approval. Dispatch to a native or claude-sdk worker, or use read-only or auto-edit."
1114
+ );
1115
+ }
1116
+ if (level === "auto-edit") {
1117
+ return { permissionMode: "acceptEdits", extraArgs: [], dangerousBypass: false };
1118
+ }
1119
+ return { permissionMode: "default", extraArgs: [], dangerousBypass: false };
1120
+ }
1121
+ function buildClaudeCodePrompt(input) {
1122
+ const parts = (input.dynamicPromptMessages ?? []).map((message) => message.body.trim()).filter(Boolean);
1123
+ parts.push(input.task);
1124
+ return parts.join("\n\n");
1125
+ }
1126
+ function buildClaudeCodeArgs(input, gateEnv = process.env) {
1127
+ assertToolProfileEnforceable(input.toolProfile, "claude-code");
1128
+ const permission = claudeSubprocessPermissionConfigForAutonomy(input.autonomy, gateEnv);
1129
+ const args = [
1130
+ "-p",
1131
+ "--output-format",
1132
+ "stream-json",
1133
+ "--include-partial-messages",
1134
+ "--no-session-persistence",
1135
+ "--permission-mode",
1136
+ permission.permissionMode,
1137
+ ...permission.extraArgs
1138
+ ];
1139
+ if (input.wireModelId.trim().length > 0) args.push("--model", input.wireModelId);
1140
+ const systemPrompt = input.systemPrompt.trim();
1141
+ if (systemPrompt.length > 0) args.push("--append-system-prompt", systemPrompt);
1142
+ if (isClaudeCodeSessionId(input.sessionId)) args.push("--session-id", input.sessionId.trim());
1143
+ return args;
1144
+ }
1145
+ function finite2(value) {
1146
+ return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : 0;
1147
+ }
1148
+ function normalizeUsage2(raw, totalCostUsd = 0) {
1149
+ const record2 = typeof raw === "object" && raw !== null ? raw : {};
1150
+ const input = finite2(record2.input_tokens) + finite2(record2.inputTokens) + finite2(record2.input) + finite2(record2.prompt_tokens) + finite2(record2.promptTokens);
1151
+ const output = finite2(record2.output_tokens) + finite2(record2.outputTokens) + finite2(record2.output) + finite2(record2.completion_tokens) + finite2(record2.completionTokens);
1152
+ const cacheRead = finite2(record2.cache_read_input_tokens) + finite2(record2.cacheReadInputTokens) + finite2(record2.cacheRead) + finite2(record2.cacheReadTokens);
1153
+ const cacheWrite = finite2(record2.cache_creation_input_tokens) + finite2(record2.cacheCreationInputTokens) + finite2(record2.cacheWrite) + finite2(record2.cacheWriteTokens);
1154
+ const totalTokens = input + output + cacheRead + cacheWrite;
1155
+ const total = finite2(totalCostUsd) + finite2(record2.costUSD) + finite2(record2.cost_usd);
1156
+ return {
1157
+ input,
1158
+ output,
1159
+ cacheRead,
1160
+ cacheWrite,
1161
+ totalTokens,
1162
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total }
1163
+ };
1164
+ }
1165
+ function nestedRecord(record2, key) {
1166
+ const value = record2[key];
1167
+ return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
1168
+ }
1169
+ function extractContentText(content) {
1170
+ if (!Array.isArray(content)) return "";
1171
+ let out = "";
1172
+ for (const block of content) {
1173
+ if (typeof block !== "object" || block === null) continue;
1174
+ const record2 = block;
1175
+ if (record2.type === "text" && typeof record2.text === "string") out += record2.text;
1176
+ }
1177
+ return out;
1178
+ }
1179
+ function extractDelta(record2) {
1180
+ const delta = nestedRecord(record2, "delta");
1181
+ if (delta && typeof delta.text === "string") return delta.text;
1182
+ if (delta && typeof delta.thinking === "string") return "";
1183
+ const contentBlock = nestedRecord(record2, "content_block");
1184
+ if (contentBlock && contentBlock.type === "text" && typeof contentBlock.text === "string") return contentBlock.text;
1185
+ if (typeof record2.delta === "string") return record2.delta;
1186
+ return "";
1187
+ }
1188
+ function assistantTextFromEvent(record2) {
1189
+ const message = nestedRecord(record2, "message");
1190
+ if (message) return extractContentText(message.content);
1191
+ return extractContentText(record2.content);
1192
+ }
1193
+ function resultText(record2) {
1194
+ if (!record2) return "";
1195
+ return typeof record2.result === "string" ? record2.result : "";
1196
+ }
1197
+ function resultError(record2, stderr) {
1198
+ if (record2) {
1199
+ if (typeof record2.error === "string") return record2.error;
1200
+ if (Array.isArray(record2.errors)) return record2.errors.map(String).join("; ");
1201
+ if (record2.subtype !== void 0 && record2.subtype !== "success") return String(record2.subtype);
1202
+ }
1203
+ return stderr.trim();
1204
+ }
1205
+ function buildAssistantMessage2(input) {
1206
+ const transportError = input.transportError ?? "";
1207
+ const failed = input.exitCode !== 0 || transportError.length > 0;
1208
+ const errorMessage = !failed ? "" : transportError || resultError(input.result, input.stderr);
1209
+ const message = {
1210
+ role: "assistant",
1211
+ content: [{ type: "text", text: input.text }],
1212
+ api: "claude-code-subprocess",
1213
+ provider: "anthropic",
1214
+ model: input.model,
1215
+ usage: normalizeUsage2(input.result?.usage, finite2(input.result?.total_cost_usd)),
1216
+ stopReason: input.aborted ? "aborted" : failed ? "error" : "stop",
1217
+ timestamp: Date.now()
1218
+ };
1219
+ if (typeof input.result?.request_id === "string") message.responseId = input.result.request_id;
1220
+ if (typeof input.result?.model === "string") message.responseModel = input.result.model;
1221
+ if (errorMessage.length > 0) message.errorMessage = boundedExternalDiagnostic(errorMessage);
1222
+ return message;
1223
+ }
1224
+ function emitTextDelta2(emit, state, delta) {
1225
+ if (delta.length === 0) return;
1226
+ state.text += delta;
1227
+ const message = buildAssistantMessage2({
1228
+ model: state.model,
1229
+ text: state.text,
1230
+ result: null,
1231
+ exitCode: 0,
1232
+ aborted: false,
1233
+ stderr: ""
1234
+ });
1235
+ if (!state.started) {
1236
+ state.started = true;
1237
+ emit({ type: "message_start", message });
1238
+ }
1239
+ emit({
1240
+ type: "message_update",
1241
+ message,
1242
+ assistantMessageEvent: {
1243
+ type: "text_delta",
1244
+ contentIndex: 0,
1245
+ delta,
1246
+ partial: message
1247
+ }
1248
+ });
1249
+ }
1250
+ async function readJsonLines(child, emit, state) {
1251
+ for await (const bounded of readBoundedLines(child.stdout, {
1252
+ maxLineBytes: CLAUDE_MAX_STREAM_LINE_BYTES,
1253
+ maxTotalBytes: CLAUDE_MAX_STREAM_BYTES
1254
+ })) {
1255
+ if (bounded.kind === "oversized") {
1256
+ throw new Error(`claude stream-json line exceeded ${CLAUDE_MAX_STREAM_LINE_BYTES} bytes`);
1257
+ }
1258
+ const trimmed = bounded.line.trim();
1259
+ if (trimmed.length === 0) continue;
1260
+ let parsed;
1261
+ try {
1262
+ parsed = JSON.parse(trimmed);
1263
+ } catch {
1264
+ continue;
1265
+ }
1266
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) continue;
1267
+ const record2 = parsed;
1268
+ if (record2.type === "system" && typeof record2.model === "string") state.model = record2.model;
1269
+ if (record2.type === "result") {
1270
+ state.result = record2;
1271
+ continue;
1272
+ }
1273
+ if (record2.type === "assistant") {
1274
+ const text = assistantTextFromEvent(record2);
1275
+ if (text.length > 0 && text.length >= state.text.length) state.text = text;
1276
+ continue;
1277
+ }
1278
+ emitTextDelta2(emit, state, extractDelta(record2));
1279
+ }
1280
+ }
1281
+ function startClaudeCodeWorkerRun(input, emit, dependencies = {}) {
1282
+ const sourceEnv = dependencies.environment ?? process.env;
1283
+ const args = buildClaudeCodeArgs(input, sourceEnv);
1284
+ const prompt = buildClaudeCodePrompt(input);
1285
+ const workspaceRoot = dependencies.workspaceRoot ?? process.cwd();
1286
+ const cwd = resolveSafeCwd(input.cwd, workspaceRoot);
1287
+ const child = spawn3(dependencies.binary ?? CLAUDE_BINARY, args, {
1288
+ cwd,
1289
+ env: buildSafeToolEnv({}, sourceEnv),
1290
+ detached: process.platform !== "win32",
1291
+ stdio: ["pipe", "pipe", "pipe"]
1292
+ });
1293
+ const streamState = {
1294
+ started: false,
1295
+ text: "",
1296
+ model: input.wireModelId,
1297
+ result: null
1298
+ };
1299
+ let aborted = false;
1300
+ let settled = false;
1301
+ let transportError = "";
1302
+ const terminator = createProcessTreeTerminator(child, dependencies.killGraceMs ?? 1500);
1303
+ const abort = () => {
1304
+ if (settled) return;
1305
+ aborted = true;
1306
+ terminator.terminate();
1307
+ };
1308
+ const onAbort = () => abort();
1309
+ if (input.signal?.aborted) abort();
1310
+ else input.signal?.addEventListener("abort", onAbort, { once: true });
1311
+ child.once("error", (cause) => {
1312
+ transportError ||= cause.code === "ENOENT" ? "Claude Code CLI (`claude`) is not installed or not on PATH." : cause.message;
1313
+ });
1314
+ child.stdin.on("error", (cause) => {
1315
+ if (!aborted) transportError ||= `could not send prompt to Claude Code CLI: ${cause.message}`;
1316
+ });
1317
+ child.stdin.end(prompt);
1318
+ const promise = (async () => {
1319
+ emit({ type: "agent_start" });
1320
+ try {
1321
+ const stderrPromise = readStderr(child);
1322
+ const stdoutPromise = readJsonLines(child, emit, streamState).catch((cause) => {
1323
+ transportError ||= cause instanceof Error ? cause.message : String(cause);
1324
+ terminator.terminate();
1325
+ });
1326
+ const exitCode = await waitForClose(child);
1327
+ await stdoutPromise;
1328
+ const stderr = await stderrPromise.catch(() => "");
1329
+ const finalText = streamState.text || resultText(streamState.result) || (exitCode === 0 ? "" : resultError(streamState.result, stderr));
1330
+ const finalMessage = buildAssistantMessage2({
1331
+ model: streamState.model,
1332
+ text: finalText,
1333
+ result: streamState.result,
1334
+ exitCode,
1335
+ aborted,
1336
+ stderr,
1337
+ transportError
1338
+ });
1339
+ if (!streamState.started) emit({ type: "message_start", message: finalMessage });
1340
+ emit({ type: "message_end", message: finalMessage });
1341
+ const messages = [finalMessage];
1342
+ emit({ type: "agent_end", messages });
1343
+ if (finalMessage.stopReason === "error" && finalMessage.errorMessage && !aborted) {
1344
+ process.stderr.write(`[worker:claude-code] ${finalMessage.errorMessage}
1345
+ `);
1346
+ }
1347
+ return { messages, exitCode: finalMessage.stopReason === "stop" ? 0 : 1 };
1348
+ } finally {
1349
+ settled = true;
1350
+ terminator.cleanup();
1351
+ input.signal?.removeEventListener("abort", onAbort);
1352
+ }
1353
+ })();
1354
+ return { promise, abort };
1355
+ }
1356
+
1357
+ // src/domains/agents/result-contract-filesystem.ts
1358
+ init_esm_shims();
1359
+ import { existsSync, readFileSync, statSync } from "node:fs";
1360
+ function nodeResultContractFilesystem() {
1361
+ return {
1362
+ readFile(filePath) {
1363
+ try {
1364
+ return readFileSync(filePath, "utf8");
1365
+ } catch {
1366
+ return null;
1367
+ }
1368
+ },
1369
+ pathExists(filePath) {
1370
+ return existsSync(filePath);
1371
+ },
1372
+ isDirectory(filePath) {
1373
+ return statSync(filePath, { throwIfNoEntry: false })?.isDirectory() === true;
1374
+ }
1375
+ };
1376
+ }
1377
+
1378
+ // src/domains/safety/run-effects.ts
1379
+ init_esm_shims();
1380
+ import path from "node:path";
1381
+ var ENUMERABLE_ACTION_CLASSES = /* @__PURE__ */ new Set(["read", "write"]);
1382
+ function toolWritesOpaquely(toolName) {
1383
+ return !ENUMERABLE_ACTION_CLASSES.has(classify({ tool: toolName }).actionClass);
1384
+ }
1385
+ var GIT_PATH_MUTATIONS = /* @__PURE__ */ new Set(["mv", "rm"]);
1386
+ function gitPathOperands(command) {
1387
+ const targets = [];
1388
+ for (const segment of commandArgumentSegments(command)) {
1389
+ if (segment[0] !== "git") continue;
1390
+ const subcommand = segment[1];
1391
+ if (subcommand === void 0 || !GIT_PATH_MUTATIONS.has(subcommand)) continue;
1392
+ for (const token of segment.slice(2)) {
1393
+ if (token.startsWith("-")) continue;
1394
+ targets.push(token);
1395
+ }
1396
+ }
1397
+ return targets;
1398
+ }
1399
+ function commandOf(args) {
1400
+ const command = args?.command;
1401
+ return typeof command === "string" && command.length > 0 ? command : null;
1402
+ }
1403
+ function mutationTargets(toolName, args) {
1404
+ if (toolName !== ToolNames.Bash) return toolMutationPaths(toolName, args);
1405
+ const command = commandOf(args);
1406
+ if (command === null) return [];
1407
+ return [...extractCommandWriteTargets(command), ...extractCommandDeleteTargets(command), ...gitPathOperands(command)];
1408
+ }
1409
+ function validationCommandOf(toolName, args, scope) {
1410
+ if (toolName === ToolNames.Bash) {
1411
+ const command = commandOf(args);
1412
+ if (command === null) return null;
1413
+ const detected = detectValidationCommand(command, scope);
1414
+ return detected.kind === "validation" ? detected.matched : null;
1415
+ }
1416
+ return typedValidationSummary(toolName, { args: args ?? {} });
1417
+ }
1418
+ function createRunEffectsRecorder(cwd, options = {}) {
1419
+ const pending = /* @__PURE__ */ new Map();
1420
+ const mutatedPaths = /* @__PURE__ */ new Set();
1421
+ const failedMutationPaths = /* @__PURE__ */ new Set();
1422
+ const validationCommands = /* @__PURE__ */ new Set();
1423
+ const verificationCommands = /* @__PURE__ */ new Set();
1424
+ const writeRecordDowngrades = /* @__PURE__ */ new Map();
1425
+ return {
1426
+ start(toolCallId, toolName, args) {
1427
+ const paths = mutationTargets(toolName, args);
1428
+ const validationCommand = validationCommandOf(toolName, args, "finish-contract");
1429
+ const verificationCommand = validationCommandOf(toolName, args, "grounding");
1430
+ const opaque = toolWritesOpaquely(toolName);
1431
+ if (!opaque && paths.length === 0 && validationCommand === null && verificationCommand === null) return;
1432
+ const base = typeof args?.cwd === "string" && args.cwd.length > 0 ? path.resolve(cwd, args.cwd) : cwd;
1433
+ pending.set(toolCallId, {
1434
+ tool: toolName,
1435
+ toolCallId,
1436
+ paths: paths.map((target) => path.resolve(base, target)),
1437
+ validationCommand,
1438
+ verificationCommand,
1439
+ opaque
1440
+ });
1441
+ },
1442
+ finish(toolCallId, failed) {
1443
+ const effects = pending.get(toolCallId);
1444
+ pending.delete(toolCallId);
1445
+ if (effects === void 0) return;
1446
+ if (failed) {
1447
+ for (const target of effects.paths) failedMutationPaths.add(target);
1448
+ return;
1449
+ }
1450
+ if (effects.opaque) {
1451
+ const downgrade = {
1452
+ reason: "opaque_tool_succeeded",
1453
+ tool: effects.tool,
1454
+ toolCallId: effects.toolCallId
1455
+ };
1456
+ const recordWasComplete = writeRecordDowngrades.size === 0;
1457
+ writeRecordDowngrades.set(effects.toolCallId, downgrade);
1458
+ if (recordWasComplete) options.onWriteRecordDowngraded?.({ ...downgrade });
1459
+ }
1460
+ for (const target of effects.paths) mutatedPaths.add(target);
1461
+ if (effects.validationCommand !== null) validationCommands.add(effects.validationCommand);
1462
+ if (effects.verificationCommand !== null) verificationCommands.add(effects.verificationCommand);
1463
+ },
1464
+ snapshot() {
1465
+ return {
1466
+ mutatedPaths: new Set(mutatedPaths),
1467
+ failedMutationPaths: new Set([...failedMutationPaths].filter((target) => !mutatedPaths.has(target))),
1468
+ validationCommands: new Set(validationCommands),
1469
+ verificationCommands: new Set(verificationCommands),
1470
+ writeRecordComplete: writeRecordDowngrades.size === 0,
1471
+ writeRecordDowngrades: [...writeRecordDowngrades.values()].map((entry) => ({ ...entry }))
1472
+ };
1473
+ }
1474
+ };
1475
+ }
1476
+
1477
+ // src/engine/claude/tool-safety.ts
1478
+ init_esm_shims();
1479
+ import nodePath from "node:path";
1480
+ import { performance } from "node:perf_hooks";
1481
+ function isRecord(value) {
1482
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1483
+ }
1484
+ function stringField(record2, ...keys) {
1485
+ for (const key of keys) {
1486
+ const value = record2[key];
1487
+ if (typeof value === "string" && value.trim().length > 0) return value.trim();
1488
+ }
1489
+ return void 0;
1490
+ }
1491
+ function pathArgs(input) {
1492
+ const path2 = stringField(input, "file_path", "filePath", "path", "notebook_path", "source", "target");
1493
+ return path2 ? { ...input, path: path2 } : { ...input };
1494
+ }
1495
+ function searchArgs(input, globKey) {
1496
+ const base = stringField(input, "path", "file_path", "filePath");
1497
+ const glob = globKey === null ? void 0 : stringField(input, globKey);
1498
+ if (glob !== void 0 && (nodePath.isAbsolute(glob) || glob.split("/").includes(".."))) {
1499
+ const literal = glob.split("/");
1500
+ const firstMagic = literal.findIndex((segment) => /[*?[\]{}]/u.test(segment));
1501
+ const prefix = (firstMagic === -1 ? literal.slice(0, -1) : literal.slice(0, firstMagic)).join("/") || "/";
1502
+ return { ...input, path: base === void 0 || nodePath.isAbsolute(prefix) ? prefix : nodePath.join(base, prefix) };
1503
+ }
1504
+ return base === void 0 ? { ...input } : { ...input, path: base };
1505
+ }
1506
+ function commandArgs(input, cwd) {
1507
+ const command = stringField(input, "command", "cmd", "shell", "input", "description") ?? JSON.stringify(input);
1508
+ return { ...input, command, cwd: stringField(input, "cwd") ?? cwd };
1509
+ }
1510
+ function dynamicToolName(name) {
1511
+ return name.trim().length > 0 ? `claude:${name}` : "claude:unknown";
1512
+ }
1513
+ var CLAUDE_TOOL_TO_CLIO = {
1514
+ Bash: ToolNames.Bash,
1515
+ Read: ToolNames.Read,
1516
+ NotebookRead: ToolNames.Read,
1517
+ Edit: ToolNames.Edit,
1518
+ MultiEdit: ToolNames.Edit,
1519
+ Write: ToolNames.Write,
1520
+ Grep: ToolNames.Grep,
1521
+ Glob: ToolNames.Find,
1522
+ LS: ToolNames.Ls,
1523
+ Ls: ToolNames.Ls,
1524
+ WebFetch: ToolNames.WebFetch,
1525
+ WebSearch: ToolNames.WebFetch,
1526
+ Task: ToolNames.Dispatch,
1527
+ // TodoWrite mediates as the tasks tool: both are session-scoped plan
1528
+ // bookkeeping that never mutates the workspace, so it classifies read and
1529
+ // is narrowed away exactly when the profile lacks tasks.
1530
+ TodoWrite: ToolNames.Tasks
1531
+ };
1532
+ var CLAUDE_CANONICAL_TOOLS = new Set(Object.values(CLAUDE_TOOL_TO_CLIO));
1533
+ function isClaudeCanonicalTool(name) {
1534
+ return CLAUDE_CANONICAL_TOOLS.has(name);
1535
+ }
1536
+ function claudeToolsOutsideProfile(allowedTools) {
1537
+ return Object.entries(CLAUDE_TOOL_TO_CLIO).filter(([, clioName]) => !allowedTools.has(clioName)).map(([claudeName]) => claudeName);
1538
+ }
1539
+ function mapClaudeToolCall(toolName, input, cwd) {
1540
+ switch (toolName) {
1541
+ case "Bash":
1542
+ return { claudeToolName: toolName, clioToolName: ToolNames.Bash, args: commandArgs(input, cwd), known: true };
1543
+ case "Read":
1544
+ case "NotebookRead":
1545
+ return { claudeToolName: toolName, clioToolName: ToolNames.Read, args: pathArgs(input), known: true };
1546
+ case "Edit":
1547
+ case "MultiEdit":
1548
+ return { claudeToolName: toolName, clioToolName: ToolNames.Edit, args: pathArgs(input), known: true };
1549
+ case "Write":
1550
+ return { claudeToolName: toolName, clioToolName: ToolNames.Write, args: pathArgs(input), known: true };
1551
+ case "Grep":
1552
+ return { claudeToolName: toolName, clioToolName: ToolNames.Grep, args: searchArgs(input, "glob"), known: true };
1553
+ case "Glob":
1554
+ return { claudeToolName: toolName, clioToolName: ToolNames.Find, args: searchArgs(input, "pattern"), known: true };
1555
+ case "LS":
1556
+ case "Ls":
1557
+ return { claudeToolName: toolName, clioToolName: ToolNames.Ls, args: searchArgs(input, null), known: true };
1558
+ case "WebFetch":
1559
+ case "WebSearch":
1560
+ return { claudeToolName: toolName, clioToolName: ToolNames.WebFetch, args: { ...input }, known: true };
1561
+ case "Task":
1562
+ return { claudeToolName: toolName, clioToolName: ToolNames.Dispatch, args: { ...input }, known: true };
1563
+ case "TodoWrite":
1564
+ return { claudeToolName: toolName, clioToolName: ToolNames.Tasks, args: { ...input }, known: true };
1565
+ default:
1566
+ return { claudeToolName: toolName, clioToolName: dynamicToolName(toolName), args: { ...input }, known: false };
1567
+ }
1568
+ }
1569
+ function readsOutsideWorkspace(decision) {
1570
+ return decision.policy?.readScope === "outside-workspace";
1571
+ }
1572
+ function toAutonomyBlock(decision, level, call) {
1573
+ const actionClass = decision.classification.actionClass;
1574
+ return {
1575
+ kind: "block",
1576
+ classification: decision.classification,
1577
+ rejection: autonomyDenyRejection(level, call.tool, actionClass, readsOutsideWorkspace(decision)),
1578
+ ...decision.policy !== void 0 ? { policy: decision.policy } : {}
1579
+ };
1580
+ }
1581
+ function toAutonomyAsk(decision, level, call) {
1582
+ const actionClass = decision.classification.actionClass;
1583
+ return {
1584
+ kind: "ask",
1585
+ classification: decision.classification,
1586
+ rejection: autonomyAskRejection(level, call.tool, actionClass, void 0, readsOutsideWorkspace(decision)),
1587
+ ...decision.policy !== void 0 ? { policy: decision.policy } : {}
1588
+ };
1589
+ }
1590
+ function rejectionText(decision) {
1591
+ if (decision.kind === "allow") return decision.policy?.reasonCode ?? "allowed";
1592
+ return decision.rejection.short;
1593
+ }
1594
+ function budgetDenial(input, mapped, call, reason) {
1595
+ const classification = input.safety.classify(call);
1596
+ const rejection = { short: reason, detail: reason, hints: [] };
1597
+ const blocked = { kind: "block", classification, rejection };
1598
+ input.safety.audit.recordToolCall?.({
1599
+ tool: mapped.clioToolName,
1600
+ classification,
1601
+ decision: "denied",
1602
+ args: mapped.args,
1603
+ reasons: [reason],
1604
+ reasonCode: "worker-budget"
1605
+ });
1606
+ return {
1607
+ kind: "deny",
1608
+ mapped,
1609
+ decision: blocked,
1610
+ reason,
1611
+ reasonCode: "worker-budget",
1612
+ permissionRequired: false
1613
+ };
1614
+ }
1615
+ function evaluateClaudeToolPermission(input) {
1616
+ const mapped = mapClaudeToolCall(input.toolName, input.input, input.cwd);
1617
+ const call = { tool: mapped.clioToolName, args: mapped.args };
1618
+ const attempt = input.budgetGate?.attempt(mapped.clioToolName);
1619
+ if (attempt?.kind === "deny") return budgetDenial(input, mapped, call, attempt.reason);
1620
+ if (input.allowedTools !== void 0 && mapped.known && !input.allowedTools.has(mapped.clioToolName)) {
1621
+ const classification = input.safety.classify(call);
1622
+ const rejection = {
1623
+ short: `${mapped.clioToolName} is not in this worker's tool profile`,
1624
+ detail: `Tool '${mapped.clioToolName}' is outside the dispatched worker's admitted tool surface, so the request is denied. Use only the tools granted to this run.`,
1625
+ hints: []
1626
+ };
1627
+ const blocked = { kind: "block", classification, rejection };
1628
+ input.safety.audit.recordToolCall?.({
1629
+ tool: mapped.clioToolName,
1630
+ classification,
1631
+ decision: "denied",
1632
+ args: mapped.args,
1633
+ reasons: [rejection.detail],
1634
+ reasonCode: "tool-profile"
1635
+ });
1636
+ return {
1637
+ kind: "deny",
1638
+ mapped,
1639
+ decision: blocked,
1640
+ reason: rejection.short,
1641
+ reasonCode: "tool-profile",
1642
+ permissionRequired: false
1643
+ };
1644
+ }
1645
+ const decision = input.safety.evaluate(call);
1646
+ const level = input.autonomy ?? DEFAULT_AUTONOMY_LEVEL;
1647
+ if (decision.kind === "block") {
1648
+ return { kind: "deny", mapped, decision, reason: rejectionText(decision), permissionRequired: false };
1649
+ }
1650
+ if (decision.kind === "ask") {
1651
+ if (level === "read-only") {
1652
+ const blocked = toAutonomyBlock(decision, level, call);
1653
+ return {
1654
+ kind: "deny",
1655
+ mapped,
1656
+ decision: blocked,
1657
+ reason: rejectionText(blocked),
1658
+ reasonCode: `autonomy:${level}`,
1659
+ permissionRequired: false
1660
+ };
1661
+ }
1662
+ return { kind: "deny", mapped, decision, reason: rejectionText(decision), permissionRequired: true };
1663
+ }
1664
+ const actionClass = decision.classification.actionClass;
1665
+ const disposition = mapAutonomy(level, actionClass, {
1666
+ executeRecognized: decision.policy?.execRecognition !== "unrecognized",
1667
+ ...readsOutsideWorkspace(decision) ? { readOutsideWorkspace: true } : {}
1668
+ });
1669
+ if (disposition === "allow") {
1670
+ const admission = input.budgetGate?.admit(mapped.clioToolName);
1671
+ if (admission?.kind === "deny") return budgetDenial(input, mapped, call, admission.reason);
1672
+ return { kind: "allow", mapped, decision, reason: decision.policy?.reasonCode ?? "allowed" };
1673
+ }
1674
+ if (disposition === "deny") {
1675
+ const blocked = toAutonomyBlock(decision, level, call);
1676
+ return {
1677
+ kind: "deny",
1678
+ mapped,
1679
+ decision: blocked,
1680
+ reason: rejectionText(blocked),
1681
+ reasonCode: `autonomy:${level}`,
1682
+ permissionRequired: false
1683
+ };
1684
+ }
1685
+ const ask = toAutonomyAsk(decision, level, call);
1686
+ return {
1687
+ kind: "deny",
1688
+ mapped,
1689
+ decision: ask,
1690
+ reason: rejectionText(ask),
1691
+ reasonCode: `autonomy:${level}`,
1692
+ permissionRequired: true
1693
+ };
1694
+ }
1695
+ function finishDecision(decision) {
1696
+ if (decision.kind === "allow") return "allowed";
1697
+ if (decision.kind === "ask") return "permission_requested";
1698
+ return "blocked";
1699
+ }
1700
+ function emitToolFinish(emit, mapped, startedAtClock, decision, outcome, reason, reasonCode, toolCallId) {
1701
+ const event = {
1702
+ tool: mapped.clioToolName,
1703
+ ...toolCallId !== void 0 ? { toolCallId } : {},
1704
+ posture: "operating",
1705
+ durationMs: Math.round(performance.now() - startedAtClock),
1706
+ outcome,
1707
+ actionClass: decision.classification.actionClass,
1708
+ decision: finishDecision(decision)
1709
+ };
1710
+ if (reason.length > 0 && outcome !== "ok") event.reason = reason;
1711
+ if (decision.policy?.ruleId !== void 0) event.ruleId = decision.policy.ruleId;
1712
+ const finalReasonCode = reasonCode ?? decision.policy?.reasonCode;
1713
+ if (finalReasonCode !== void 0) event.reasonCode = finalReasonCode;
1714
+ if (decision.policy?.policySource !== void 0) event.policySource = decision.policy.policySource;
1715
+ emit({ type: "clio_coder_tool_finish", payload: event });
1716
+ }
1717
+ function emitClaudeToolPermissionDecision(input) {
1718
+ const startedAt = Date.now();
1719
+ const startedAtClock = performance.now();
1720
+ const decision = evaluateClaudeToolPermission(input);
1721
+ const toolCallId = input.toolCallId?.trim() ? input.toolCallId : void 0;
1722
+ const action = describeCallAction(decision.mapped.clioToolName, decision.mapped.args);
1723
+ const start = {
1724
+ tool: decision.mapped.clioToolName,
1725
+ ...toolCallId !== void 0 ? { toolCallId } : {},
1726
+ posture: "operating",
1727
+ startedAt,
1728
+ ...action !== null ? { action } : {}
1729
+ };
1730
+ input.emit({ type: "clio_coder_tool_start", payload: start });
1731
+ if (decision.kind === "allow") {
1732
+ emitToolFinish(
1733
+ input.emit,
1734
+ decision.mapped,
1735
+ startedAtClock,
1736
+ decision.decision,
1737
+ "ok",
1738
+ decision.reason,
1739
+ decision.reasonCode,
1740
+ toolCallId
1741
+ );
1742
+ return decision;
1743
+ }
1744
+ if (decision.permissionRequired) {
1745
+ const mode = input.onPermission ?? "deny";
1746
+ input.emit({
1747
+ type: "clio_coder_permission_resolved",
1748
+ payload: {
1749
+ tool: decision.mapped.clioToolName,
1750
+ actionClass: decision.decision.classification.actionClass,
1751
+ mode,
1752
+ reason: mode === "fail" ? `permission required for ${decision.mapped.clioToolName}; workers.onPermission=fail ends this run` : `permission denied by policy: Claude SDK workers run non-interactively; ${decision.reason}`
1753
+ }
1754
+ });
1755
+ }
1756
+ emitToolFinish(
1757
+ input.emit,
1758
+ decision.mapped,
1759
+ startedAtClock,
1760
+ decision.decision,
1761
+ "blocked",
1762
+ decision.reason,
1763
+ decision.reasonCode,
1764
+ toolCallId
1765
+ );
1766
+ return decision;
1767
+ }
1768
+ function coerceToolInput(value) {
1769
+ return isRecord(value) ? value : {};
1770
+ }
1771
+
1772
+ export {
1773
+ captureWorkerContext,
1774
+ antigravitySubprocessConfigForAutonomy,
1775
+ startAntigravityWorkerRun,
1776
+ isClaudeCodeSessionId,
1777
+ claudeSubprocessPermissionConfigForAutonomy,
1778
+ startClaudeCodeWorkerRun,
1779
+ isClaudeCanonicalTool,
1780
+ claudeToolsOutsideProfile,
1781
+ emitClaudeToolPermissionDecision,
1782
+ coerceToolInput,
1783
+ WORKER_SPEC_VERSION,
1784
+ WORKER_PROTECTED_ARTIFACT_STATE_VERSION,
1785
+ WORKER_EXIT_PERMISSION_REQUIRED,
1786
+ DEFAULT_ESCALATION_TIMEOUT_MS,
1787
+ DEFAULT_ESCALATION_FALLBACK,
1788
+ serializeWorkerRuntimeDescriptor,
1789
+ parseWorkerSpec,
1790
+ validateRehydratedWorkerRuntime,
1791
+ nodeResultContractFilesystem,
1792
+ createRunEffectsRecorder
1793
+ };
1794
+ //# sourceMappingURL=chunk-R7FGRZNF.js.map