@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
@@ -1,3 +1,5 @@
1
+ import { writeDiagnostic } from "../../core/diagnostics.js";
2
+ import { readPiMonoVersion } from "../../engine/pi-mono-names.js";
1
3
  import { parseWorkerContextSeed } from "../../worker/context-seed.js";
2
4
  import { WORKER_STDIN_FRAME_MAX_BYTES } from "../../worker/protocol.js";
3
5
  import { WORKER_CONTEXT_PREAMBLE } from "../context/worker/select.js";
@@ -22,7 +24,7 @@ import { DEFAULT_SETTINGS, type DelegationToolGovernance } from "../../core/defa
22
24
  import type { DomainBundle, DomainContext, DomainExtension } from "../../core/domain-loader.js";
23
25
  import { gatewayRoutingObservationFromRecord } from "../../core/gateway-routing.js";
24
26
  import { GUARDRAIL_DEFAULTS, resolveGuardrail } from "../../core/guardrails.js";
25
- import { readClioVersion, readPiMonoVersion } from "../../core/package-root.js";
27
+ import { readClioVersion } from "../../core/package-root.js";
26
28
  import { canonicalizeExistingPath } from "../../core/path-canonical.js";
27
29
  import { protectedResidencyModels } from "../../core/residency-protection.js";
28
30
  import { responseModelIdObservationFromRecord } from "../../core/response-model-id.js";
@@ -34,6 +36,7 @@ import {
34
36
  import { isSkillActivation, type SkillActivation } from "../../core/skill-activation.js";
35
37
  import { rawDurationMs } from "../../core/timers.js";
36
38
  import { isBuiltinToolName, isHarnessExtensionToolName, type ToolName, ToolNames } from "../../core/tool-names.js";
39
+ import { snapshotTurnConstraints, turnAllowsTool } from "../../core/turn-constraints.js";
37
40
  import {
38
41
  type AcpDelegationRunHandle,
39
42
  type AcpDelegationRunInput,
@@ -52,8 +55,10 @@ import {
52
55
  cleanupTaskWorktree,
53
56
  createTaskWorktree,
54
57
  gitCheckoutRoot,
58
+ settleTaskWorktree,
55
59
  } from "../../tools/task-worktree.js";
56
60
  import { truncateUtf8 } from "../../tools/truncate-utf8.js";
61
+ import { diskWorktreeParent, prepareWorktreeParent, resolveWorktreeRoot } from "../../tools/worktree-root.js";
57
62
  import {
58
63
  serializeWorkerRuntimeDescriptor,
59
64
  WORKER_PROTECTED_ARTIFACT_STATE_VERSION,
@@ -63,7 +68,11 @@ import {
63
68
  } from "../../worker/spec-contract.js";
64
69
  import type { AgentsContract } from "../agents/contract.js";
65
70
  import type { AgentRecipe } from "../agents/recipe.js";
66
- import { validateRecipeResult } from "../agents/result-contract.js";
71
+ import {
72
+ INTERNAL_HELPER_RESULT_KINDS,
73
+ validateRecipeResult,
74
+ validateStructuredHelperResult,
75
+ } from "../agents/result-contract.js";
67
76
  import { nodeResultContractFilesystem } from "../agents/result-contract-filesystem.js";
68
77
  import {
69
78
  type AgentAudience,
@@ -116,6 +125,7 @@ import { parseRigorOverride, type Rigor, resolveRigor } from "../safety/rigor.js
116
125
  import { createRunEffectsRecorder, type RunEffectsRecorder } from "../safety/run-effects.js";
117
126
  import type { ScopeSpec } from "../safety/scope.js";
118
127
  import type { SchedulingContract } from "../scheduling/contract.js";
128
+ import { resolveGlobalConcurrency } from "../scheduling/local-capacity.js";
119
129
  import {
120
130
  approvedRouteObservation,
121
131
  consumeActiveRouteApproval,
@@ -178,6 +188,7 @@ import {
178
188
  classifyFailure,
179
189
  decideRetry,
180
190
  type FailureClass,
191
+ isContextOverflowFailure,
181
192
  isInfrastructureFailure,
182
193
  type RetryDecision,
183
194
  } from "./failure-classification.js";
@@ -258,6 +269,7 @@ import { defaultRoutingIntent } from "./routing-intent.js";
258
269
  import { attachRunEventJournalBridge, type RunEventJournalBridge } from "./run-event-journal-bridge.js";
259
270
  import { detectRunIdentity } from "./run-identity.js";
260
271
  import { type Ledger, newRunId, openLedger } from "./state.js";
272
+ import { createTargetBreaker, type TargetBreakerBlock } from "./target-breaker.js";
261
273
  import {
262
274
  countToolCalls,
263
275
  hasPotentiallyMutatingAttempt,
@@ -305,12 +317,14 @@ import {
305
317
  validateJobSpec,
306
318
  } from "./validation.js";
307
319
  import { describeUngroundedValidations, groundClaimedValidations, invalidatesQuality } from "./validation-grounding.js";
320
+ import { adoptWorkerModelLoad } from "./worker-model-loads.js";
308
321
  import { prepareWorkerModelMetadata } from "./worker-model-metadata.js";
309
322
  import {
310
323
  type AgentLedgerBody,
311
324
  computeSettingsFingerprint,
312
325
  endpointIdentityHash,
313
326
  receiptAttestationFields,
327
+ type WorkerModelLoad,
314
328
  } from "./worker-protocol.js";
315
329
  import {
316
330
  type SpawnedWorker,
@@ -443,6 +457,12 @@ export interface DispatchBundleOptions {
443
457
 
444
458
  const DEFAULT_HEARTBEAT_INTERVAL_MS = 1000;
445
459
  const DEFAULT_RESILIENCE_COOLDOWN_MS = 15_000;
460
+
461
+ /** A half-open route this dispatch was admitted to probe, keyed by its run id. */
462
+ interface ProbeClaim {
463
+ key: string;
464
+ owner: string;
465
+ }
446
466
  /** ACP event-inactivity stall window (Symphony §5.3.6 semantics); <= 0 disables. */
447
467
  const DEFAULT_ACP_STALL_TIMEOUT_MS = 300_000;
448
468
  const ADMISSION_INPUT_TOKEN_ESTIMATE = 4096;
@@ -742,7 +762,7 @@ async function awaitEventDrain(drained: Promise<void>, graceMs = DISPATCH_DRAIN_
742
762
  function reportDispatchDiagnostic(scope: string, error: unknown): void {
743
763
  const message = error instanceof Error ? error.message : String(error);
744
764
  try {
745
- process.stderr.write(`[clio-coder:dispatch] ${scope}: ${message}\n`);
765
+ writeDiagnostic(`[clio-coder:dispatch] ${scope}: ${message}\n`);
746
766
  } catch {
747
767
  // stderr itself is best-effort
748
768
  }
@@ -1719,6 +1739,33 @@ function deniedToolNames(req: DispatchRequest): ReadonlySet<string> {
1719
1739
  return new Set(req.denyTools.map((tool) => tool.trim().toLowerCase()));
1720
1740
  }
1721
1741
 
1742
+ function assertTurnConstraintCompatibility(
1743
+ req: DispatchRequest,
1744
+ tools: ReadonlyArray<string>,
1745
+ mediated: boolean,
1746
+ ): void {
1747
+ const constraints = req.turnConstraints;
1748
+ if (!constraints) return;
1749
+ if (!turnAllowsTool(constraints, "dispatch"))
1750
+ throw new Error("dispatch: forbidden by the parent task's explicit scope");
1751
+ if (!mediated && (constraints.allowedTools !== undefined || constraints.skills === "disabled")) {
1752
+ throw new Error(
1753
+ "dispatch: this external runtime cannot enforce the parent task's tool/skill constraints; use a native worker",
1754
+ );
1755
+ }
1756
+ const outside = tools.filter((name) => !turnAllowsTool(constraints, name));
1757
+ if (outside.length > 0)
1758
+ throw new Error(
1759
+ `dispatch: worker tool surface exceeds the parent task's explicit scope: ${outside.join(", ")}. Select a narrower recipe or tool profile.`,
1760
+ );
1761
+ if ((req.resolvedVerification?.length ?? 0) > 0 && !turnAllowsTool(constraints, "verify")) {
1762
+ throw new Error("dispatch: host verification is outside the parent task's explicit tool scope");
1763
+ }
1764
+ if (req.worktree === true && !turnAllowsTool(constraints, "write")) {
1765
+ throw new Error("dispatch: worktree creation requires write in the parent task's explicit tool scope");
1766
+ }
1767
+ }
1768
+
1722
1769
  function assertPostRuntimeToolCompatibility(
1723
1770
  agentId: string,
1724
1771
  spec: ReturnType<typeof normalizeAgentSpec>,
@@ -2029,6 +2076,14 @@ function buildDispatchWorkerSpec(input: DispatchWorkerSpecInput, config?: Config
2029
2076
  // the same resolver the seal uses, so the two never disagree.
2030
2077
  const workerResultContract = dispatchResultContract(input.req, input.recipe);
2031
2078
  if (workerResultContract) spec.resultContract = workerResultContract;
2079
+ if (
2080
+ (input.recipe?.audience === "shadow" || input.recipe?.audience === "internal") &&
2081
+ input.target.runtime.kind === "http" &&
2082
+ targetToolCapability(input.target) === true &&
2083
+ workerResultContract &&
2084
+ (INTERNAL_HELPER_RESULT_KINDS as readonly string[]).includes(workerResultContract.kind)
2085
+ )
2086
+ spec.helperResult = true;
2032
2087
  const product = input.req.product ?? input.recipe?.product;
2033
2088
  if (product) spec.product = product;
2034
2089
  // The orchestrator's tool decision is the one the run was admitted under and
@@ -2052,6 +2107,7 @@ function buildDispatchWorkerSpec(input: DispatchWorkerSpecInput, config?: Config
2052
2107
  }
2053
2108
  if (input.apiKey) spec.apiKey = input.apiKey;
2054
2109
  if (input.req.noSkills !== undefined) spec.noSkills = input.req.noSkills;
2110
+ if (input.req.turnConstraints !== undefined) spec.turnConstraints = input.req.turnConstraints;
2055
2111
  const skillPaths = [...(input.req.skillPaths ?? []), ...(input.recipe?.boundSkillPaths ?? [])];
2056
2112
  if (skillPaths.length > 0) spec.skillPaths = [...new Set(skillPaths)];
2057
2113
  const recipeSkills = (input.recipe?.skills ?? []).map((name) => name.trim()).filter((name) => name.length > 0);
@@ -2582,6 +2638,11 @@ export function createDispatchBundle(
2582
2638
  };
2583
2639
  const now = options?.now ?? (() => Date.now());
2584
2640
  const monotonicNow = options?.monotonicNow ?? (() => performance.now());
2641
+ const targetBreaker = createTargetBreaker({
2642
+ monotonicNow,
2643
+ cooldownMs: getResilienceCooldownMs,
2644
+ threshold: () => getEffectiveSettings()?.fleet?.retry.breakerThreshold ?? 1,
2645
+ });
2585
2646
  // Durable evidence owner used by shadow observation and active readiness.
2586
2647
  const routeObserver: RouteObserver = options?.routeObserver ?? createRouteObserver({});
2587
2648
 
@@ -2589,7 +2650,6 @@ export function createDispatchBundle(
2589
2650
  let heartbeatTimer: ReturnType<typeof setInterval> | null = null;
2590
2651
  const active = new Map<string, ActiveRun>();
2591
2652
  const pendingCapacity = new Map<string, PendingCapacityAdmission>();
2592
- const targetCooldowns = new Map<string, { until: number; reason: string }>();
2593
2653
  const ownedReservations = new Set<string>();
2594
2654
  /**
2595
2655
  * Attribution from each finalized run's successful tool calls, newest last.
@@ -2614,7 +2674,7 @@ export function createDispatchBundle(
2614
2674
  const capacityAdmission = createCapacityAdmissionController({
2615
2675
  limits: () => {
2616
2676
  const settings = getEffectiveSettings();
2617
- const nodes: Record<string, number> = { local: configuredGlobalCapacity(settings) };
2677
+ const nodes: Record<string, number> = { local: configuredLocalCapacity(settings) };
2618
2678
  for (const node of settings?.fleet?.nodes ?? []) nodes[node.id] = node.maxWorkers;
2619
2679
  return { global: configuredGlobalCapacity(settings), nodes, endpoints: configuredEndpointLimits() };
2620
2680
  },
@@ -2697,7 +2757,7 @@ export function createDispatchBundle(
2697
2757
  // Read budget after the capacity lock wait too; concurrent callbacks may spend.
2698
2758
  const preflight = scheduling.preflight();
2699
2759
  const nodes: Record<string, { active: number; limit: number }> = {
2700
- local: { active: usage.nodes.local ?? 0, limit: configuredGlobalCapacity(settings) },
2760
+ local: { active: usage.nodes.local ?? 0, limit: configuredLocalCapacity(settings) },
2701
2761
  };
2702
2762
  for (const node of settings?.fleet?.nodes ?? [])
2703
2763
  nodes[node.id] = { active: usage.nodes[node.id] ?? 0, limit: node.maxWorkers };
@@ -2768,8 +2828,12 @@ export function createDispatchBundle(
2768
2828
  }
2769
2829
 
2770
2830
  function configuredGlobalCapacity(settings: EffectiveSettings): number {
2771
- const configured = settings?.fleet.concurrency;
2772
- return scheduling.maxWorkers?.() ?? (configured === "auto" || configured === undefined ? 4 : Math.max(1, configured));
2831
+ return scheduling.maxWorkers?.() ?? resolveGlobalConcurrency(settings?.fleet.concurrency);
2832
+ }
2833
+
2834
+ /** The local node alone follows host facts under `auto`; global and SSH limits do not. */
2835
+ function configuredLocalCapacity(settings: EffectiveSettings): number {
2836
+ return scheduling.localCapacity?.().limit ?? configuredGlobalCapacity(settings);
2773
2837
  }
2774
2838
 
2775
2839
  function publishCapacityQueued(
@@ -3048,6 +3112,8 @@ export function createDispatchBundle(
3048
3112
  detail: string | null,
3049
3113
  receipt: RunReceipt,
3050
3114
  failureClass: FailureClass,
3115
+ contextOverflow = false,
3116
+ currentRetryReason: string | null = null,
3051
3117
  ): RetryScheduleResult {
3052
3118
  if (draining) return { scheduled: false };
3053
3119
  const rootRunId = run.lineage.rootRunId;
@@ -3067,7 +3133,19 @@ export function createDispatchBundle(
3067
3133
  const maxRetries = assignments.get(rootRunId)?.policy.maxRetries ?? assignmentPolicyFor(run.req).maxRetries;
3068
3134
  const baseDecision = decideRetry(failureClass, run.lineage.attempt, maxRetries);
3069
3135
  // An exact manual route may be retried, but no route component may drift.
3070
- const decision = recovery.retryDecisionWithinFailover(baseDecision, failoverModeFor(run.req));
3136
+ let decision = recovery.retryDecisionWithinFailover(baseDecision, failoverModeFor(run.req));
3137
+ let overflowRoute: DispatchFailoverCandidate | null = null;
3138
+ let overflowReason: string | null = null;
3139
+ if (contextOverflow && !decision.retry) {
3140
+ const plan = planOverflowRetry(run, currentRetryReason, maxRetries);
3141
+ if ("settlementDetail" in plan) {
3142
+ retryBackoff.delete(rootRunId);
3143
+ return { scheduled: false, settlementDetail: plan.settlementDetail };
3144
+ }
3145
+ overflowRoute = plan.route;
3146
+ overflowReason = plan.reason;
3147
+ decision = { retry: true, excludedRouteParts: [], qualityEscalation: null, reasonCode: "retry-context-overflow" };
3148
+ }
3071
3149
  if (!decision.retry) {
3072
3150
  retryBackoff.delete(rootRunId);
3073
3151
  // Deterministic outcomes are intentionally not retried. This is a normal
@@ -3111,7 +3189,7 @@ export function createDispatchBundle(
3111
3189
  // target cooldown it just created protects new work, not this chain.
3112
3190
  const delayMs = Math.max(backoffDelayMs, decision.retryAfterMs ?? 0);
3113
3191
  const attempt = run.lineage.attempt + 1;
3114
- const reason = detail !== null ? `${outcome}: ${detail}` : outcome;
3192
+ const reason = overflowReason ?? (detail !== null ? `${outcome}: ${detail}` : outcome);
3115
3193
  const dueAt = now() + delayMs;
3116
3194
  let settleCanceled!: () => void;
3117
3195
  let rejectContinuation!: (error: unknown) => void;
@@ -3124,7 +3202,7 @@ export function createDispatchBundle(
3124
3202
  retryQueue.delete(run.runId);
3125
3203
  // Ownership starts at scheduling, covering admission before a handle
3126
3204
  // exists and terminal receipt work after the handle arrives.
3127
- executeRetry(run, attempt, reason, decision).then(settleCanceled, rejectContinuation);
3205
+ executeRetry(run, attempt, reason, decision, overflowRoute).then(settleCanceled, rejectContinuation);
3128
3206
  }, delayMs);
3129
3207
  retryQueue.set(run.runId, {
3130
3208
  runId: run.runId,
@@ -3154,6 +3232,8 @@ export function createDispatchBundle(
3154
3232
  return { scheduled: true };
3155
3233
  }
3156
3234
 
3235
+ const CONTEXT_OVERFLOW_RETRY = "context-overflow";
3236
+
3157
3237
  function retryReasonKey(rootRunId: string, attempt: number): string {
3158
3238
  return `${rootRunId}:${attempt}`;
3159
3239
  }
@@ -3164,6 +3244,7 @@ export function createDispatchBundle(
3164
3244
  outcome: RunOutcome,
3165
3245
  detail: string | null,
3166
3246
  failureClass: FailureClass,
3247
+ contextOverflow = false,
3167
3248
  ): void {
3168
3249
  const assignment = assignments.open(run.lineage.rootRunId, assignmentPolicyFor(run.req));
3169
3250
  persistAssignment(registerAssignment(assignment.id), `${assignment.id}:open`);
@@ -3179,7 +3260,7 @@ export function createDispatchBundle(
3179
3260
  retryReason,
3180
3261
  });
3181
3262
  persistAssignment(recordAssignmentAttempt(assignment.id, run.runId), `${assignment.id}:attempt:${run.runId}`);
3182
- const retry = maybeScheduleRetry(run, outcome, detail, receipt, failureClass);
3263
+ const retry = maybeScheduleRetry(run, outcome, detail, receipt, failureClass, contextOverflow, retryReason);
3183
3264
  if (retry.scheduled) return;
3184
3265
  const currentStatus = assignments.get(assignment.id)?.status;
3185
3266
  const terminalStatus =
@@ -3215,6 +3296,7 @@ export function createDispatchBundle(
3215
3296
  attempt: number,
3216
3297
  reason = "retry",
3217
3298
  decision: RetryDecision = decideRetry("internal", run.lineage.attempt, assignmentPolicyFor(run.req).maxRetries),
3299
+ overflowRoute: DispatchFailoverCandidate | null = null,
3218
3300
  ): Promise<void> {
3219
3301
  if (draining || !retryChainIsLive(run)) return;
3220
3302
  const excludesNode = decision.excludedRouteParts.includes("node");
@@ -3226,6 +3308,9 @@ export function createDispatchBundle(
3226
3308
  const retryReq: DispatchRequest = {
3227
3309
  ...run.req,
3228
3310
  ...(rerouteHops !== undefined ? { reroutes: rerouteHops } : {}),
3311
+ // A retry that moves the target names one, which would otherwise read
3312
+ // as an operator pin and freeze every later retry in the chain.
3313
+ failover: failoverModeFor(run.req),
3229
3314
  requestOrigin: "internal",
3230
3315
  lineage: {
3231
3316
  parentRunId: run.runId,
@@ -3243,7 +3328,7 @@ export function createDispatchBundle(
3243
3328
  retryReasons.set(reasonKey, reason);
3244
3329
  try {
3245
3330
  if (failoverModeFor(run.req) === "approved") {
3246
- const candidates = approvedRetryCandidates(run, decision);
3331
+ const candidates = overflowRoute !== null ? [overflowRoute] : approvedRetryCandidates(run, decision);
3247
3332
  if (run.req.routeApproval === undefined) {
3248
3333
  const candidate = candidates[0] as DispatchFailoverCandidate;
3249
3334
  retryReq.agentId = candidate.agentId;
@@ -3290,15 +3375,26 @@ export function createDispatchBundle(
3290
3375
  retryReq.model = run.wireModelId;
3291
3376
  retryReq.node = run.node?.id ?? "local";
3292
3377
  }
3378
+ if (overflowRoute !== null) {
3379
+ retryReq.target = overflowRoute.target;
3380
+ retryReq.model = overflowRoute.model;
3381
+ }
3293
3382
  // Automatic placement re-selects only the failed route component.
3294
3383
  if (excludesNode) {
3295
3384
  delete retryReq.node;
3296
3385
  delete retryReq.plannedNode;
3297
3386
  }
3298
3387
  if (decision.excludedRouteParts.includes("target")) {
3299
- const alternateTarget = getEffectiveSettings()?.targets.find((target) => target.id !== run.targetId);
3300
- if (alternateTarget) retryReq.target = alternateTarget.id;
3301
- else delete retryReq.target;
3388
+ const alternate = eligibleAlternateRoute(run, retryReq);
3389
+ if (alternate !== null) {
3390
+ retryReq.target = alternate.target;
3391
+ retryReq.model = alternate.model;
3392
+ } else {
3393
+ // No other route can serve the request, so placement picks again.
3394
+ // That is usually the failed route itself, which the chain may
3395
+ // retry after backoff because the breaker guards new work only.
3396
+ delete retryReq.target;
3397
+ }
3302
3398
  }
3303
3399
  if (decision.excludedRouteParts.includes("model")) delete retryReq.model;
3304
3400
  if (decision.excludedRouteParts.includes("runtime")) delete retryReq.workerRuntime;
@@ -3532,27 +3628,38 @@ export function createDispatchBundle(
3532
3628
  return `${targetId}\0${runtimeId}\0${wireModelId}`;
3533
3629
  }
3534
3630
 
3535
- function targetCooldownReason(targetId: string, runtimeId: string, wireModelId: string): string | null {
3536
- const key = cooldownKey(targetId, runtimeId, wireModelId);
3537
- const cooldown = targetCooldowns.get(key);
3538
- if (!cooldown) return null;
3539
- const remaining = cooldown.until - now();
3540
- if (remaining <= 0) {
3541
- targetCooldowns.delete(key);
3542
- return null;
3631
+ function describeTargetBlock(targetId: string, block: TargetBreakerBlock | null): string | null {
3632
+ if (block === null) return null;
3633
+ if (block.kind === "probing") {
3634
+ return `target '${targetId}' is cooling down while one probe run tests it after ${block.reason}`;
3543
3635
  }
3544
- return `target '${targetId}' is cooling down for ${Math.ceil(remaining / 1000)}s after ${cooldown.reason}`;
3636
+ return `target '${targetId}' is cooling down for ${Math.ceil(block.remainingMs / 1000)}s after ${block.reason}`;
3545
3637
  }
3546
3638
 
3639
+ /** Read-only cooldown view for route planning; it never claims a half-open probe. */
3640
+ function targetCooldownReason(targetId: string, runtimeId: string, wireModelId: string): string | null {
3641
+ return describeTargetBlock(targetId, targetBreaker.blocked(cooldownKey(targetId, runtimeId, wireModelId)));
3642
+ }
3643
+
3644
+ /**
3645
+ * Admission gate for a top-level run. A half-open route admits this run as
3646
+ * its probe; the claim goes into probeClaims so a dispatch that fails before
3647
+ * its run starts can hand the probe back.
3648
+ */
3547
3649
  function assertTargetNotCoolingDown(
3548
3650
  req: DispatchRequest,
3549
3651
  targetId: string,
3550
3652
  runtimeId: string,
3551
3653
  wireModelId: string,
3654
+ probeClaims: ProbeClaim[],
3552
3655
  ): void {
3553
3656
  if (req.lineage !== undefined) return;
3554
- const reason = targetCooldownReason(targetId, runtimeId, wireModelId);
3657
+ const key = cooldownKey(targetId, runtimeId, wireModelId);
3658
+ const owner = req.runIdHint;
3659
+ const block = owner === undefined ? targetBreaker.blocked(key) : targetBreaker.admit(key, owner);
3660
+ const reason = describeTargetBlock(targetId, block);
3555
3661
  if (reason !== null) throw new Error(`dispatch: ${reason}`);
3662
+ if (owner !== undefined) probeClaims.push({ key, owner });
3556
3663
  }
3557
3664
 
3558
3665
  /** The target identity a request resolves to, without composing a worker. */
@@ -3610,7 +3717,119 @@ export function createDispatchBundle(
3610
3717
  return rerouted;
3611
3718
  }
3612
3719
 
3720
+ /**
3721
+ * First configured route on another target that can serve a retry: it
3722
+ * resolves to that target, carries every required capability, and its
3723
+ * breaker is neither open nor probing. With minContextWindow the route may
3724
+ * also be another model on the failed target, and its effective context
3725
+ * window must be strictly larger than minContextWindow. allowed narrows the
3726
+ * routes further, as an approved envelope does.
3727
+ */
3728
+ function eligibleAlternateRoute(
3729
+ run: ActiveRun,
3730
+ req: DispatchRequest,
3731
+ minContextWindow?: number,
3732
+ allowed?: (candidate: DispatchFailoverCandidate) => boolean,
3733
+ ): (DispatchFailoverCandidate & { contextWindow: number }) | null {
3734
+ const settings = getEffectiveSettings();
3735
+ const failed = {
3736
+ targetId: run.targetId,
3737
+ modelId: run.wireModelId,
3738
+ runtimeId: run.runtimeId,
3739
+ endpointIdentityHash: "",
3740
+ };
3741
+ const routes = configuredJointTargets(settings?.targets ?? [], failed, endpointIdentityHash).filter((route) =>
3742
+ minContextWindow === undefined
3743
+ ? route.targetId !== run.targetId
3744
+ : route.targetId !== run.targetId || route.modelId !== run.wireModelId,
3745
+ );
3746
+ const windows = new Map<string, number>();
3747
+ const probes: RouteAvailability[] = routes.map((route) => {
3748
+ const candidate = { agentId: req.agentId, target: route.targetId, model: route.modelId, node: req.node ?? "local" };
3749
+ if (allowed !== undefined && !allowed(candidate)) {
3750
+ return { candidate, unavailable: "route is outside the approved failover envelope" };
3751
+ }
3752
+ try {
3753
+ const identity = resolveTargetIdentity({ ...req, target: route.targetId, model: route.modelId }, settings);
3754
+ if (identity.targetId !== route.targetId) {
3755
+ return { candidate, unavailable: `route resolved to target '${identity.targetId}'` };
3756
+ }
3757
+ if (identity.targetId === run.targetId && identity.wireModelId === run.wireModelId) {
3758
+ return { candidate, unavailable: "route resolved to the failed route" };
3759
+ }
3760
+ const capabilities = capabilityInfoForModel(providers, identity.targetId, identity.wireModelId);
3761
+ const contextWindow = capabilities?.contextWindow ?? 0;
3762
+ windows.set(`${route.targetId}\0${route.modelId}`, contextWindow);
3763
+ const tooSmall =
3764
+ minContextWindow !== undefined && contextWindow <= minContextWindow
3765
+ ? `context window ${contextWindow} is not larger than ${minContextWindow}`
3766
+ : null;
3767
+ return {
3768
+ candidate,
3769
+ unavailable:
3770
+ tooSmall ??
3771
+ requiredCapabilityFailureDetail(identity.targetId, capabilities, req.requiredCapabilities) ??
3772
+ targetCooldownReason(identity.targetId, identity.runtimeId, identity.wireModelId),
3773
+ };
3774
+ } catch (error) {
3775
+ return { candidate, unavailable: error instanceof Error ? error.message : String(error) };
3776
+ }
3777
+ });
3778
+ const chosen = firstAvailableRouteCandidate(probes);
3779
+ return chosen === null ? null : { ...chosen, contextWindow: windows.get(`${chosen.target}\0${chosen.model}`) ?? 0 };
3780
+ }
3781
+
3782
+ /**
3783
+ * A context overflow is a verdict on the prompt against one window, so it
3784
+ * earns one retry, and only onto a route whose window is strictly larger.
3785
+ * Exact failover never moves, an approved plan moves only inside its
3786
+ * envelope, and an overflow retry that overflows again is final.
3787
+ */
3788
+ function planOverflowRetry(
3789
+ run: ActiveRun,
3790
+ currentRetryReason: string | null,
3791
+ maxRetries: number,
3792
+ ): { route: DispatchFailoverCandidate; reason: string } | { settlementDetail: string } {
3793
+ const mode = failoverModeFor(run.req);
3794
+ if (mode === "none") {
3795
+ return { settlementDetail: "context overflow not retried because failover is none, which pins the route" };
3796
+ }
3797
+ if (currentRetryReason?.startsWith(`${CONTEXT_OVERFLOW_RETRY}:`) === true) {
3798
+ return { settlementDetail: "context overflow not retried again because this attempt was already an overflow retry" };
3799
+ }
3800
+ if (maxRetries <= 0 || run.lineage.attempt >= maxRetries) {
3801
+ return { settlementDetail: "context overflow not retried because the retry budget is spent" };
3802
+ }
3803
+ const failedWindow = capabilityInfoForModel(providers, run.targetId, run.wireModelId)?.contextWindow ?? 0;
3804
+ const failedRoute = `${run.targetId}/${run.wireModelId}`;
3805
+ if (failedWindow <= 0) {
3806
+ return {
3807
+ settlementDetail: `context overflow not retried because the context window of ${failedRoute} is unknown`,
3808
+ };
3809
+ }
3810
+ const node = run.node?.id ?? "local";
3811
+ const envelope = run.req.allowedCandidates ?? [];
3812
+ const route = eligibleAlternateRoute(
3813
+ run,
3814
+ run.req,
3815
+ failedWindow,
3816
+ mode === "approved"
3817
+ ? (candidate) => envelope.some((entry) => recovery.sameFailoverCandidate(entry, { ...candidate, node }))
3818
+ : undefined,
3819
+ );
3820
+ if (route === null) {
3821
+ return {
3822
+ settlementDetail: `context overflow not retried because no eligible route has a context window larger than ${failedWindow} on ${failedRoute}`,
3823
+ };
3824
+ }
3825
+ return {
3826
+ route: { agentId: route.agentId, target: route.target, model: route.model, node },
3827
+ reason: `${CONTEXT_OVERFLOW_RETRY}: ${failedWindow} -> ${route.contextWindow} on ${route.target}/${route.model}`,
3828
+ };
3829
+ }
3830
+
3613
3831
  function recordTargetOutcome(
3832
+ runId: string,
3614
3833
  targetId: string,
3615
3834
  runtimeId: string,
3616
3835
  wireModelId: string,
@@ -3618,15 +3837,9 @@ export function createDispatchBundle(
3618
3837
  exitCode: number,
3619
3838
  failureClass: FailureClass,
3620
3839
  ): void {
3621
- const key = cooldownKey(targetId, runtimeId, wireModelId);
3622
- if (status === "completed" && exitCode === 0) {
3623
- targetCooldowns.delete(key);
3624
- return;
3625
- }
3626
- if (!affectsTargetBreaker(failureClass)) return;
3627
- const cooldownMs = getResilienceCooldownMs();
3628
- if (cooldownMs <= 0) return;
3629
- targetCooldowns.set(key, { until: now() + cooldownMs, reason: failureClass });
3840
+ const outcome =
3841
+ status === "completed" && exitCode === 0 ? "success" : affectsTargetBreaker(failureClass) ? "failure" : "neutral";
3842
+ targetBreaker.record(cooldownKey(targetId, runtimeId, wireModelId), runId, outcome, failureClass);
3630
3843
  }
3631
3844
 
3632
3845
  function publishDispatchPathScope(req: DispatchRequest, pathScope: DispatchPathScope): void {
@@ -3754,6 +3967,7 @@ export function createDispatchBundle(
3754
3967
  req,
3755
3968
  );
3756
3969
  assertPostRuntimeToolCompatibility(req.agentId, spec, effectiveTools, target, pathScope.writeBoundaries.length > 0);
3970
+ assertTurnConstraintCompatibility(req, effectiveTools, target.runtime.kind === "http");
3757
3971
  const effectiveAdmission: DispatchAdmissionStage = {
3758
3972
  ...admission,
3759
3973
  allowedTools: effectiveTools,
@@ -3763,6 +3977,7 @@ export function createDispatchBundle(
3763
3977
  const hasBoundSkills =
3764
3978
  hasCanonicalContext && recipe.skills !== undefined && recipe.skills.length > 0 && req.noSkills !== true;
3765
3979
  const compiledWorkerPrompt = await prompts.compileWorkerPrompt({
3980
+ ...(req.turnConstraints ? { turnConstraints: req.turnConstraints } : {}),
3766
3981
  autonomy: effectiveAutonomy,
3767
3982
  providerSupportsTools: target.runtime.kind === "subprocess" ? null : targetToolCapability(target),
3768
3983
  toolNames: effectiveTools,
@@ -3970,6 +4185,7 @@ export function createDispatchBundle(
3970
4185
  settings: EffectiveSettings,
3971
4186
  timing: RunPhaseMarks,
3972
4187
  routeDecision: RouteDecisionV1,
4188
+ probeClaims: ProbeClaim[],
3973
4189
  observer?: DispatchAdmissionObserver,
3974
4190
  callerDeadlineAt?: number,
3975
4191
  hostRun?: DispatchPreparationOptions["hostRun"],
@@ -3995,7 +4211,7 @@ export function createDispatchBundle(
3995
4211
  const targetId = `delegation:${lifecycle.agentConfig.id}`;
3996
4212
  const runtimeId = "acp";
3997
4213
  const wireModelId = lifecycle.agentConfig.id;
3998
- assertTargetNotCoolingDown(req, targetId, runtimeId, wireModelId);
4214
+ assertTargetNotCoolingDown(req, targetId, runtimeId, wireModelId, probeClaims);
3999
4215
 
4000
4216
  if (req.contextSeed) persistWorkerContextSeed(req.contextSeed);
4001
4217
  assertBudgetAdmitsRoute(req, { rates: null, provenance: "unknown" }, settings);
@@ -4641,12 +4857,13 @@ export function createDispatchBundle(
4641
4857
  failureMessage = finalDetail;
4642
4858
  }
4643
4859
  const status = runStatusForOutcome(finalOutcome);
4644
- const failureClass = classifyFailure(
4645
- evidence,
4646
- { exitCode: result.exitCode, signal: null, ...(failureMessage ? { stderrTail: failureMessage } : {}) },
4647
- finalOutcome,
4648
- outcomeCode,
4649
- );
4860
+ const classifiedResult: SpawnedWorkerResult = {
4861
+ exitCode: result.exitCode,
4862
+ signal: null,
4863
+ ...(failureMessage ? { stderrTail: failureMessage } : {}),
4864
+ };
4865
+ const failureClass = classifyFailure(evidence, classifiedResult, finalOutcome, outcomeCode);
4866
+ const contextOverflow = isContextOverflowFailure(failureClass, classifiedResult, outcomeCode);
4650
4867
  const receiptDraft = buildReceiptDraft(result, endedAt, status, finalOutcome, finalDetail, capturedOutput);
4651
4868
  const ledgerPatch: Partial<RunEnvelope> = {
4652
4869
  status,
@@ -4676,10 +4893,17 @@ export function createDispatchBundle(
4676
4893
  const receipt = ledgerRef.recordReceipt(envelope.id, sealRouteDecision(receiptDraft, routeDecision));
4677
4894
  await ledgerRef.persist();
4678
4895
  active.delete(envelope.id);
4679
- recordTargetOutcome(targetId, runtimeId, wireModelId, status, receipt.exitCode, failureClass);
4896
+ recordTargetOutcome(envelope.id, targetId, runtimeId, wireModelId, status, receipt.exitCode, failureClass);
4680
4897
  accumulateFinalizedTotals(receipt);
4681
4898
  emitTerminalDispatchEvent(receipt, finalOutcome);
4682
- completeAssignmentAttempt(activeRun, receipt, finalOutcome, receipt.outcomeDetail ?? finalDetail, failureClass);
4899
+ completeAssignmentAttempt(
4900
+ activeRun,
4901
+ receipt,
4902
+ finalOutcome,
4903
+ receipt.outcomeDetail ?? finalDetail,
4904
+ failureClass,
4905
+ contextOverflow,
4906
+ );
4683
4907
  return receipt;
4684
4908
  } catch (error) {
4685
4909
  // Finalization itself failed (ACP promise rejection, ledger or
@@ -4704,7 +4928,7 @@ export function createDispatchBundle(
4704
4928
  }
4705
4929
  active.delete(envelope.id);
4706
4930
  settleAssignmentDurablyWithoutReceipt(lineage.rootRunId, envelope.id);
4707
- recordTargetOutcome(targetId, runtimeId, wireModelId, "failed", 1, "internal");
4931
+ recordTargetOutcome(envelope.id, targetId, runtimeId, wireModelId, "failed", 1, "internal");
4708
4932
  context.bus.emit(BusChannels.DispatchFailed, {
4709
4933
  runId: envelope.id,
4710
4934
  agentId: req.agentId,
@@ -4740,6 +4964,25 @@ export function createDispatchBundle(
4740
4964
  observer?: DispatchAdmissionObserver,
4741
4965
  preparation?: DispatchPreparationOptions,
4742
4966
  settlement?: BatchVerificationGate,
4967
+ ): ReturnType<typeof admitDispatchAttempt> {
4968
+ const probeClaims: ProbeClaim[] = [];
4969
+ try {
4970
+ return await admitDispatchAttempt(req, probeClaims, observer, preparation, settlement);
4971
+ } catch (error) {
4972
+ // A half-open route admitted this dispatch as its probe, but the run never
4973
+ // started. Without the release the route would wait on a probe outcome
4974
+ // that cannot arrive.
4975
+ for (const claim of probeClaims) targetBreaker.release(claim.key, claim.owner);
4976
+ throw error;
4977
+ }
4978
+ }
4979
+
4980
+ async function admitDispatchAttempt(
4981
+ req: DispatchRequest,
4982
+ probeClaims: ProbeClaim[],
4983
+ observer?: DispatchAdmissionObserver,
4984
+ preparation?: DispatchPreparationOptions,
4985
+ settlement?: BatchVerificationGate,
4743
4986
  ): Promise<{
4744
4987
  runId: string;
4745
4988
  events: AsyncIterableIterator<unknown>;
@@ -4817,6 +5060,7 @@ export function createDispatchBundle(
4817
5060
  };
4818
5061
  if (req.delegationAgentId) {
4819
5062
  assertPlannedNodeIdentity(req, { id: "local", kind: "local" });
5063
+ assertTurnConstraintCompatibility(req, [], false);
4820
5064
  assertProtectedArtifactsEnforceable("acp-delegation", false, protectedArtifactState);
4821
5065
  if (req.responseSchema !== undefined) {
4822
5066
  throw new UnsupportedResponseSchemaError(
@@ -4838,6 +5082,7 @@ export function createDispatchBundle(
4838
5082
  settings,
4839
5083
  timing,
4840
5084
  routeObservation.decision,
5085
+ probeClaims,
4841
5086
  observer,
4842
5087
  preparation?.deadlineAt,
4843
5088
  hostRun,
@@ -4866,6 +5111,7 @@ export function createDispatchBundle(
4866
5111
  lifecycle.target.target.id,
4867
5112
  lifecycle.target.runtime.id,
4868
5113
  lifecycle.target.wireModelId,
5114
+ probeClaims,
4869
5115
  );
4870
5116
 
4871
5117
  assertBudgetAdmitsRoute(req, lifecycle.target.effectivePricing, settings);
@@ -5022,6 +5268,19 @@ export function createDispatchBundle(
5022
5268
  }
5023
5269
  appendLedgerPost(attribution, body);
5024
5270
  };
5271
+ // A model this worker loaded is this process's to release at exit, and
5272
+ // stays out of mid-session eviction until then (#379). The report is
5273
+ // checked against the admitted route, and the endpoint comes from this
5274
+ // process's own target, so a worker can neither redirect the release nor
5275
+ // claim a model it was not dispatched to.
5276
+ const onModelLoaded = (load: WorkerModelLoad): void => {
5277
+ adoptWorkerModelLoad(load, {
5278
+ target: lifecycle.target.target,
5279
+ runtime: lifecycle.target.runtime,
5280
+ wireModelId: lifecycle.target.wireModelId,
5281
+ node: placed,
5282
+ });
5283
+ };
5025
5284
  let worker: SpawnedWorker;
5026
5285
  try {
5027
5286
  preparation?.signal?.throwIfAborted();
@@ -5029,6 +5288,7 @@ export function createDispatchBundle(
5029
5288
  cwd: lifecycle.cwd,
5030
5289
  now,
5031
5290
  monotonicNow,
5291
+ onModelLoaded,
5032
5292
  ...(agentLedgerId !== null ? { onLedgerPost } : {}),
5033
5293
  });
5034
5294
  } catch (error) {
@@ -5112,8 +5372,31 @@ export function createDispatchBundle(
5112
5372
  let workerPolicyPermissionCounter = 0;
5113
5373
  // The bound the receipt can seal follows the contract this run will be
5114
5374
  // validated against; a conforming result never arrives clipped.
5375
+ const helperContract = dispatchResultContract(req, lifecycle.recipe);
5115
5376
  const outputCapture = createWorkerOutputCapture({
5116
- maxBytes: workerOutputCaptureBytes(dispatchResultContract(req, lifecycle.recipe)),
5377
+ maxBytes: workerOutputCaptureBytes(helperContract),
5378
+ ...(spec.helperResult === true &&
5379
+ acceptsOutcomeCodeEvents &&
5380
+ (lifecycle.agentAudience === "shadow" || lifecycle.agentAudience === "internal") &&
5381
+ helperContract &&
5382
+ (INTERNAL_HELPER_RESULT_KINDS as readonly string[]).includes(helperContract.kind)
5383
+ ? {
5384
+ helperResult: {
5385
+ contract: helperContract,
5386
+ validate: (data: unknown) =>
5387
+ validateStructuredHelperResult({
5388
+ contract: helperContract,
5389
+ data,
5390
+ cwd: lifecycle.cwd,
5391
+ networkAllowed:
5392
+ lifecycle.admission.allowedTools.includes(ToolNames.WebFetch) ||
5393
+ lifecycle.admission.allowedTools.includes(ToolNames.WebRead),
5394
+ observedRunEffects: runEffects.snapshot(),
5395
+ filesystem: nodeResultContractFilesystem(),
5396
+ }).structured,
5397
+ },
5398
+ }
5399
+ : {}),
5117
5400
  });
5118
5401
  const markObservedPhase = (field: "firstModelTokenAt" | "firstToolAt"): void => {
5119
5402
  if (timing[field] !== undefined) return;
@@ -5984,6 +6267,7 @@ export function createDispatchBundle(
5984
6267
  }
5985
6268
  const status = runStatusForOutcome(finalOutcome);
5986
6269
  const failureClass = classifyFailure(evidence, result, finalOutcome, outcomeCode);
6270
+ const contextOverflow = isContextOverflowFailure(failureClass, result, outcomeCode);
5987
6271
  const receiptDraft = buildReceiptDraft(
5988
6272
  result,
5989
6273
  endedAt,
@@ -6074,9 +6358,19 @@ export function createDispatchBundle(
6074
6358
  } catch (cleanupError) {
6075
6359
  reportDispatchDiagnostic(`clean applied task worktree ${req.taskWorktree.runId}`, cleanupError);
6076
6360
  }
6361
+ } else if (req.taskWorktree !== undefined) {
6362
+ // The run is over and its worktree stays for the operator (preserve
6363
+ // mode, a failed run, a refused merge). Saying so on the claim keeps
6364
+ // restart recovery from reading it as a crash.
6365
+ try {
6366
+ settleTaskWorktree(req.taskWorktree);
6367
+ } catch (settleError) {
6368
+ reportDispatchDiagnostic(`settle task worktree ${req.taskWorktree.runId}`, settleError);
6369
+ }
6077
6370
  }
6078
6371
  active.delete(envelope.id);
6079
6372
  recordTargetOutcome(
6373
+ envelope.id,
6080
6374
  lifecycle.target.target.id,
6081
6375
  lifecycle.target.runtime.id,
6082
6376
  lifecycle.target.wireModelId,
@@ -6087,7 +6381,14 @@ export function createDispatchBundle(
6087
6381
  recordNodeChannelOutcome(activeRun, finalOutcome, failureClass, finalDetail);
6088
6382
  accumulateFinalizedTotals(receipt);
6089
6383
  emitTerminalDispatchEvent(receipt, finalOutcome);
6090
- completeAssignmentAttempt(activeRun, receipt, finalOutcome, receipt.outcomeDetail ?? finalDetail, failureClass);
6384
+ completeAssignmentAttempt(
6385
+ activeRun,
6386
+ receipt,
6387
+ finalOutcome,
6388
+ receipt.outcomeDetail ?? finalDetail,
6389
+ failureClass,
6390
+ contextOverflow,
6391
+ );
6091
6392
  return receipt;
6092
6393
  } catch (error) {
6093
6394
  // Finalization itself failed (worker promise rejection, ledger or
@@ -6113,6 +6414,7 @@ export function createDispatchBundle(
6113
6414
  active.delete(envelope.id);
6114
6415
  settleAssignmentDurablyWithoutReceipt(lineage.rootRunId, envelope.id);
6115
6416
  recordTargetOutcome(
6417
+ envelope.id,
6116
6418
  lifecycle.target.target.id,
6117
6419
  lifecycle.target.runtime.id,
6118
6420
  lifecycle.target.wireModelId,
@@ -6164,6 +6466,12 @@ export function createDispatchBundle(
6164
6466
  events: AsyncIterableIterator<unknown>;
6165
6467
  finalPromise: Promise<RunReceipt>;
6166
6468
  }> {
6469
+ const constraints = snapshotTurnConstraints(preparation?.turnConstraints ?? req.turnConstraints);
6470
+ if (constraints) {
6471
+ req = { ...req, turnConstraints: constraints, ...(constraints.skills === "disabled" ? { noSkills: true } : {}) };
6472
+ // Validate before creating worktrees or acquiring writer/capacity leases.
6473
+ previewFixed(req);
6474
+ }
6167
6475
  let prepared =
6168
6476
  preparation?.deadlineAt === undefined
6169
6477
  ? req
@@ -6189,7 +6497,27 @@ export function createDispatchBundle(
6189
6497
  const runId = newRunId();
6190
6498
  let taskWorktree: NonNullable<DispatchRequest["taskWorktree"]>;
6191
6499
  try {
6192
- taskWorktree = createTaskWorktree(root, runId);
6500
+ // fleet.worktrees.root moves the working tree for local placement
6501
+ // only: with fleet nodes the run may land on another host, which
6502
+ // reaches the worktree by the project-root path alone.
6503
+ const fleetSettings = getEffectiveSettings()?.fleet;
6504
+ let worktreeRoot = resolveWorktreeRoot({
6505
+ setting: fleetSettings?.worktrees?.root ?? "disk",
6506
+ projectRoot: root,
6507
+ remoteEligible: (fleetSettings?.nodes?.length ?? 0) > 0,
6508
+ });
6509
+ const untrusted = prepareWorktreeParent(worktreeRoot);
6510
+ if (untrusted !== null) {
6511
+ worktreeRoot = {
6512
+ parent: diskWorktreeParent(root),
6513
+ kind: "disk",
6514
+ notice: `${untrusted}; using the project root`,
6515
+ };
6516
+ }
6517
+ if (worktreeRoot.notice !== undefined) {
6518
+ reportDispatchDiagnostic(`task worktree root for ${runId}`, new Error(worktreeRoot.notice));
6519
+ }
6520
+ taskWorktree = createTaskWorktree(root, runId, undefined, req.apply ?? "merge", worktreeRoot.parent);
6193
6521
  } catch (error) {
6194
6522
  writerLease?.release();
6195
6523
  throw error;
@@ -6276,6 +6604,7 @@ export function createDispatchBundle(
6276
6604
 
6277
6605
  if (req.delegationAgentId) {
6278
6606
  const protectedArtifactState = getProtectedArtifactState();
6607
+ assertTurnConstraintCompatibility(req, [], false);
6279
6608
  assertProtectedArtifactsEnforceable("acp-delegation", false, protectedArtifactState);
6280
6609
  if (req.responseSchema !== undefined) {
6281
6610
  throw new UnsupportedResponseSchemaError(
@@ -6351,6 +6680,7 @@ export function createDispatchBundle(
6351
6680
  target,
6352
6681
  pathScope.writeBoundaries.length > 0,
6353
6682
  );
6683
+ assertTurnConstraintCompatibility(req, effectiveTools, target.runtime.kind === "http");
6354
6684
  assertRuntimeCanHonorWorkerPermissionMode(target.runtime, settings?.fleet.permissions.mode ?? "deny");
6355
6685
  assertResponseSchemaEnforceable(target.runtime, target.modelCapabilities, req.responseSchema, effectiveTools.length);
6356
6686
  assertWriteRootsEnforceable(target.runtime, pathScope.writeBoundaries);
@@ -7249,6 +7579,19 @@ export function createDispatchBundle(
7249
7579
  markCollected: markDetachedBatchCollected,
7250
7580
  },
7251
7581
  snapshot,
7582
+ routeBreakers: () =>
7583
+ targetBreaker.snapshot().map((route) => {
7584
+ const [targetId = "", runtimeId = "", wireModelId = ""] = route.key.split("\0");
7585
+ return {
7586
+ targetId,
7587
+ runtimeId,
7588
+ wireModelId,
7589
+ state: route.state,
7590
+ remainingMs: route.remainingMs,
7591
+ reason: route.reason,
7592
+ consecutiveFailures: route.consecutiveFailures,
7593
+ };
7594
+ }),
7252
7595
  drain,
7253
7596
  };
7254
7597