@iowarp/clio-coder 0.4.9 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1172) hide show
  1. package/.claude-plugin/marketplace.json +11 -3
  2. package/CHANGELOG.md +153 -0
  3. package/CODE_OF_CONDUCT.md +10 -0
  4. package/CONTRIBUTING.md +208 -382
  5. package/NOTICE +8 -2
  6. package/README.md +199 -418
  7. package/ROADMAP.md +82 -0
  8. package/SECURITY.md +14 -11
  9. package/dist/acp-KS7ARGV6.js +132 -0
  10. package/dist/agents-YOGJ2YEJ.js +163 -0
  11. package/dist/assets/codewiki.json +1 -1
  12. package/dist/auth-CEDCO6O6.js +557 -0
  13. package/dist/background-YWTBPSQU.js +39 -0
  14. package/dist/builtins-GDYO4RTR.js +23 -0
  15. package/dist/chunk-27YTM2CV.js +175 -0
  16. package/dist/chunk-2AF6YC7Q.js +75 -0
  17. package/dist/chunk-2DTIWSAW.js +381 -0
  18. package/dist/chunk-2EMLKSCX.js +262 -0
  19. package/dist/chunk-2OJ3YZQP.js +665 -0
  20. package/dist/chunk-2VLYHHFT.js +35 -0
  21. package/dist/chunk-2WVPJF3Z.js +204 -0
  22. package/dist/chunk-33OASOS6.js +176 -0
  23. package/dist/chunk-3BD2LXYJ.js +19 -0
  24. package/dist/chunk-3JHUFKG7.js +30 -0
  25. package/dist/chunk-3JLTRPN7.js +711 -0
  26. package/dist/chunk-3LT34CAM.js +2796 -0
  27. package/dist/chunk-3O5JWP4L.js +1670 -0
  28. package/dist/chunk-3UW3KU4A.js +21 -0
  29. package/dist/chunk-4A6YRGV4.js +569 -0
  30. package/dist/chunk-4D2BRCZ3.js +67 -0
  31. package/dist/chunk-4SYHGVDE.js +668 -0
  32. package/dist/chunk-4VDHLCF5.js +66 -0
  33. package/dist/chunk-4WOOTKFD.js +637 -0
  34. package/dist/chunk-4WV4PI66.js +80 -0
  35. package/dist/chunk-53OXPRI6.js +195 -0
  36. package/dist/chunk-55RMDDFM.js +1347 -0
  37. package/dist/chunk-56XP4FJU.js +2025 -0
  38. package/dist/chunk-5B3RTYAK.js +123 -0
  39. package/dist/chunk-5CD243WE.js +45 -0
  40. package/dist/chunk-5JQR5B4D.js +709 -0
  41. package/dist/chunk-5KQEUIWM.js +597 -0
  42. package/dist/chunk-5LP5FNNR.js +915 -0
  43. package/dist/chunk-62UK7AGW.js +9344 -0
  44. package/dist/chunk-6CTHLZFB.js +563 -0
  45. package/dist/chunk-6EJYVCTN.js +23 -0
  46. package/dist/chunk-6OWUM2NC.js +12289 -0
  47. package/dist/chunk-6RJMYYIE.js +1023 -0
  48. package/dist/chunk-6W75D37F.js +643 -0
  49. package/dist/chunk-733ZBT5P.js +1721 -0
  50. package/dist/chunk-77DCC6JZ.js +3710 -0
  51. package/dist/chunk-7QXCO3AF.js +156 -0
  52. package/dist/chunk-7RET77VB.js +481 -0
  53. package/dist/chunk-A4MVRV4C.js +65 -0
  54. package/dist/chunk-ALJWT6O6.js +93 -0
  55. package/dist/chunk-AVSR2HKI.js +232 -0
  56. package/dist/chunk-B7GY6QER.js +42 -0
  57. package/dist/chunk-BFOSV5EZ.js +178 -0
  58. package/dist/chunk-BGOIM7NB.js +103 -0
  59. package/dist/chunk-BJH6WFIB.js +372 -0
  60. package/dist/chunk-BOBCCDJ6.js +1533 -0
  61. package/dist/chunk-BRCOSE7O.js +117 -0
  62. package/dist/chunk-BYFHHCFV.js +601 -0
  63. package/dist/chunk-C2CPOIH2.js +83 -0
  64. package/dist/chunk-C7AQTPCE.js +694 -0
  65. package/dist/chunk-CBAQPTDU.js +165 -0
  66. package/dist/chunk-CDQ2UC6W.js +125 -0
  67. package/dist/chunk-CN6SW5DC.js +177 -0
  68. package/dist/chunk-CRHPCPZP.js +132 -0
  69. package/dist/chunk-CTFPFW3H.js +44 -0
  70. package/dist/chunk-D3KWFOUT.js +103 -0
  71. package/dist/chunk-D65E25JG.js +185 -0
  72. package/dist/chunk-DCGHJQ2U.js +236 -0
  73. package/dist/chunk-DE2LU267.js +106 -0
  74. package/dist/chunk-DF6PI6GN.js +97 -0
  75. package/dist/chunk-DGC6X6XR.js +53 -0
  76. package/dist/chunk-DOUISWEE.js +526 -0
  77. package/dist/chunk-DR3TAEUA.js +188 -0
  78. package/dist/chunk-DVTBERFY.js +33 -0
  79. package/dist/chunk-DXSETN72.js +1051 -0
  80. package/dist/chunk-DZLR4UEH.js +128 -0
  81. package/dist/chunk-E6IPKW2E.js +77 -0
  82. package/dist/chunk-EG4ARXPC.js +139 -0
  83. package/dist/chunk-EKV4UBCM.js +652 -0
  84. package/dist/chunk-EOJPDNUP.js +1325 -0
  85. package/dist/chunk-EX57VVWW.js +4157 -0
  86. package/dist/chunk-EYTLV3W3.js +5937 -0
  87. package/dist/chunk-EZD2BXGP.js +475 -0
  88. package/dist/chunk-EZDCA34W.js +314 -0
  89. package/dist/chunk-FD2I4KBR.js +33 -0
  90. package/dist/chunk-FD3IAHQM.js +27 -0
  91. package/dist/chunk-FFYTC2KQ.js +416 -0
  92. package/dist/chunk-FGSQHUCK.js +110 -0
  93. package/dist/chunk-GCQFN7YI.js +32 -0
  94. package/dist/chunk-GGPF6LLE.js +38 -0
  95. package/dist/chunk-GGWI3OVM.js +215 -0
  96. package/dist/chunk-GLIQT7SU.js +172 -0
  97. package/dist/chunk-GN7QBEEI.js +95 -0
  98. package/dist/chunk-GRHOXDKB.js +1104 -0
  99. package/dist/chunk-HMN2C6YL.js +54 -0
  100. package/dist/chunk-HOEDA42N.js +310 -0
  101. package/dist/chunk-HOYZUKG7.js +192 -0
  102. package/dist/chunk-HQVN7G4F.js +1021 -0
  103. package/dist/chunk-HSQQFDB3.js +519 -0
  104. package/dist/chunk-I4ELN5BX.js +47 -0
  105. package/dist/chunk-I4Y4WKZR.js +386 -0
  106. package/dist/chunk-IFPDAD7R.js +797 -0
  107. package/dist/chunk-IN7DGBVS.js +582 -0
  108. package/dist/chunk-ISHUS7HC.js +396 -0
  109. package/dist/chunk-JPXLJSGR.js +191 -0
  110. package/dist/chunk-JQCLXSFI.js +69 -0
  111. package/dist/chunk-KBUTSJSR.js +61 -0
  112. package/dist/chunk-KW5HXKLJ.js +56 -0
  113. package/dist/chunk-L4APUGCT.js +139 -0
  114. package/dist/chunk-L7G7K4I2.js +505 -0
  115. package/dist/chunk-LAR7DX5E.js +1840 -0
  116. package/dist/chunk-LAVUQX3B.js +462 -0
  117. package/dist/chunk-LJRBX7QR.js +116 -0
  118. package/dist/chunk-LNOXCGN2.js +1864 -0
  119. package/dist/chunk-LTWH2ACR.js +23002 -0
  120. package/dist/chunk-LYJJ6546.js +661 -0
  121. package/dist/chunk-M2IPMWCN.js +457 -0
  122. package/dist/chunk-MGLRTOCK.js +101 -0
  123. package/dist/chunk-MZF5IKZT.js +160 -0
  124. package/dist/chunk-N24R6KWS.js +386 -0
  125. package/dist/chunk-NASYVWDB.js +604 -0
  126. package/dist/chunk-NBXFPI7U.js +195 -0
  127. package/dist/chunk-NDPF2N2L.js +400 -0
  128. package/dist/chunk-NFSK2VNU.js +446 -0
  129. package/dist/chunk-NG3QQSXY.js +43 -0
  130. package/dist/chunk-NOCSM22Y.js +63 -0
  131. package/dist/chunk-NVPXXW2H.js +1143 -0
  132. package/dist/chunk-O63U2I6I.js +30 -0
  133. package/dist/chunk-OJXOA6YU.js +98 -0
  134. package/dist/chunk-OPD7GL6F.js +1196 -0
  135. package/dist/chunk-OQ2EOAHA.js +14399 -0
  136. package/dist/chunk-OV62D6KO.js +688 -0
  137. package/dist/chunk-OZ76TLGU.js +740 -0
  138. package/dist/chunk-P4GNZPXO.js +1156 -0
  139. package/dist/chunk-PS6JAWJZ.js +78 -0
  140. package/dist/chunk-PXRCXGLK.js +1865 -0
  141. package/dist/chunk-QDUUOZ3S.js +108 -0
  142. package/dist/chunk-QG6I2T5E.js +1416 -0
  143. package/dist/chunk-QHSBROEW.js +308 -0
  144. package/dist/chunk-QNUQ7K7D.js +46 -0
  145. package/dist/chunk-QZTTRSJE.js +333 -0
  146. package/dist/chunk-R2UUNSNQ.js +1605 -0
  147. package/dist/chunk-R7FGRZNF.js +1794 -0
  148. package/dist/chunk-RNDCROSG.js +199 -0
  149. package/dist/chunk-S36CXHO2.js +302 -0
  150. package/dist/chunk-SJGS3GDI.js +575 -0
  151. package/dist/chunk-SQZHXUB3.js +510 -0
  152. package/dist/chunk-SUTLW6ND.js +686 -0
  153. package/dist/chunk-SYF7FVBL.js +179 -0
  154. package/dist/chunk-T2MDZES3.js +1577 -0
  155. package/dist/chunk-T33IYTZM.js +1146 -0
  156. package/dist/chunk-TDGYTWM6.js +49 -0
  157. package/dist/chunk-TGL5FZVD.js +132 -0
  158. package/dist/chunk-TGWZXJ7L.js +1205 -0
  159. package/dist/chunk-TKDRT2DF.js +114 -0
  160. package/dist/chunk-TV2EBCSQ.js +152 -0
  161. package/dist/chunk-U26XXPJS.js +367 -0
  162. package/dist/chunk-U5QU5ZOD.js +419 -0
  163. package/dist/chunk-U6YTUVOX.js +1011 -0
  164. package/dist/chunk-UCINIRHW.js +188 -0
  165. package/dist/chunk-UJD5MPP6.js +52 -0
  166. package/dist/chunk-URCXX7WJ.js +146 -0
  167. package/dist/chunk-UX2L5CUD.js +898 -0
  168. package/dist/chunk-UZVYEF57.js +114 -0
  169. package/dist/chunk-V35KZDUZ.js +218 -0
  170. package/dist/chunk-VESL6DQY.js +1058 -0
  171. package/dist/chunk-VKHLUZNO.js +986 -0
  172. package/dist/chunk-VOYUCAQF.js +584 -0
  173. package/dist/chunk-VYRQHORQ.js +414 -0
  174. package/dist/chunk-W53XSRQE.js +245 -0
  175. package/dist/chunk-X4CEFOSG.js +226 -0
  176. package/dist/chunk-XDHUDE5K.js +380 -0
  177. package/dist/chunk-XISLDHEL.js +1290 -0
  178. package/dist/chunk-XM34YQ2Y.js +169 -0
  179. package/dist/chunk-XMDBTYCH.js +661 -0
  180. package/dist/chunk-XS2QPZJE.js +449 -0
  181. package/dist/chunk-YBUECLAF.js +618 -0
  182. package/dist/chunk-YQ6XEFVK.js +332 -0
  183. package/dist/chunk-YYLCPDCC.js +990 -0
  184. package/dist/chunk-Z4GLJ6J4.js +1035 -0
  185. package/dist/chunk-ZARZ4POR.js +210 -0
  186. package/dist/chunk-ZJPORZTC.js +119 -0
  187. package/dist/chunk-ZNUZ3EXD.js +243 -0
  188. package/dist/chunk-ZPST2KQO.js +49 -0
  189. package/dist/chunk-ZR5YA6ZF.js +512 -0
  190. package/dist/chunk-ZU4JPCPR.js +319 -0
  191. package/dist/chunk-ZUKUCZYZ.js +39 -0
  192. package/dist/cli/index.js +56 -45
  193. package/dist/clio-K2PBVCEM.js +27 -0
  194. package/dist/clio-context-tools-GR4OHFSO.js +145 -0
  195. package/dist/code-nav-4X3OI6DK.js +715 -0
  196. package/dist/codewiki/build-worker.js +4 -4
  197. package/dist/compile-cache-YRB6QRO7.js +18 -0
  198. package/dist/components-RQOJ6NUR.js +675 -0
  199. package/dist/config-Q5J7UBAB.js +291 -0
  200. package/dist/config-XE7XYZLU.js +38 -0
  201. package/dist/config-graph-P3555574.js +175 -0
  202. package/dist/configure-KIJ32ZO6.js +104 -0
  203. package/dist/context-LFBQOSXT.js +344 -0
  204. package/dist/context-NNLBES2Y.js +82 -0
  205. package/dist/context-WBH3KSVR.js +302 -0
  206. package/dist/context-clear-YOHMQ6SQ.js +208 -0
  207. package/dist/context-index-X2N5UAIF.js +120 -0
  208. package/dist/context-map-HOSMGUG2.js +555 -0
  209. package/dist/context-working-set-MRAEVDNV.js +1564 -0
  210. package/dist/data-tool-JJPBGMQJ.js +2986 -0
  211. package/dist/detail-RHJOTGN4.js +139 -0
  212. package/dist/dispatch-runner-NC7PYNIO.js +2477 -0
  213. package/dist/docs-K4GBWRUX.js +342 -0
  214. package/dist/doctor-S5KZ2GTN.js +1138 -0
  215. package/dist/doctor-deep-2EJQSHIZ.js +130 -0
  216. package/dist/domain-loader-MB34FDPD.js +13 -0
  217. package/dist/eval-3D6M36N7.js +5220 -0
  218. package/dist/eval-inventory-SM3HNM47.js +260 -0
  219. package/dist/evals-FO6JEUCN.js +104 -0
  220. package/dist/evidence-6IYN52ET.js +262 -0
  221. package/dist/evidence-JVECPI3F.js +250 -0
  222. package/dist/evidence-XNVPPLVK.js +410 -0
  223. package/dist/evolve-TLPUDJDM.js +634 -0
  224. package/dist/extensions-ROZJ5X3J.js +311 -0
  225. package/dist/fleet-6RJWIOEO.js +284 -0
  226. package/dist/fleet-WKVBF5SZ.js +942 -0
  227. package/dist/fleet-commands-L6WFT7KZ.js +76 -0
  228. package/dist/fleet-decisions-BTQMWU5A.js +55 -0
  229. package/dist/fleet-graph-553DZ67Q.js +141 -0
  230. package/dist/fleet-inspect-236FZPRB.js +329 -0
  231. package/dist/fleet-new-CKUXP3CO.js +48 -0
  232. package/dist/fleet-preflight-NZQHABWO.js +95 -0
  233. package/dist/fleet-validate-7NLAE26R.js +96 -0
  234. package/dist/fleet-verify-E3RO6A5W.js +226 -0
  235. package/dist/fleet-view-KMZQY7YJ.js +144 -0
  236. package/dist/gui/client/assets/abnfDiagram-VCTEODGH-DPBWQwNn.js +1 -0
  237. package/dist/gui/client/assets/architecture-7GRP2DOG-D1w8FrFW.js +1 -0
  238. package/dist/gui/client/assets/architectureDiagram-5GKGNRK7-CVPgKd1-.js +36 -0
  239. package/dist/gui/client/assets/blockDiagram-I7D4REHJ-BLmnqkK5.js +129 -0
  240. package/dist/gui/client/assets/c4Diagram-7LVT6UL2-4AU9cfM7.js +38 -0
  241. package/dist/gui/client/assets/channel-DwFZ0m8S.js +1 -0
  242. package/dist/gui/client/assets/chunk-4HAMMTFA-EOWkKCav.js +62 -0
  243. package/dist/gui/client/assets/chunk-75Z2AOVW-CygeoIMl.js +2 -0
  244. package/dist/gui/client/assets/chunk-DU6HZSFF-s27fViLb.js +125 -0
  245. package/dist/gui/client/assets/chunk-F27PBJKO-BrHvwLsZ.js +1 -0
  246. package/dist/gui/client/assets/chunk-GMAD6QVW-DzPh-7jt.js +72 -0
  247. package/dist/gui/client/assets/chunk-GVQU2GXP-pIaQkIzm.js +1 -0
  248. package/dist/gui/client/assets/chunk-IMKFNOWR-BGJVE_Br.js +231 -0
  249. package/dist/gui/client/assets/chunk-L3NEJ4N5-B3YLuhww.js +1 -0
  250. package/dist/gui/client/assets/chunk-OSK3NFVY-BRj61HHU.js +10 -0
  251. package/dist/gui/client/assets/chunk-P2QGCYS3-Sno90KxP.js +1 -0
  252. package/dist/gui/client/assets/chunk-POPQ4Y6H-Cw8NTbxr.js +1 -0
  253. package/dist/gui/client/assets/chunk-PWAF6VOD-BIhHgz37.js +1 -0
  254. package/dist/gui/client/assets/chunk-SHT3W25Y-Cqv7npBj.js +168 -0
  255. package/dist/gui/client/assets/chunk-SVP7TREG-Hxzl6Dee.js +88 -0
  256. package/dist/gui/client/assets/chunk-TICWLB2K-CIFVyVP2.js +206 -0
  257. package/dist/gui/client/assets/classDiagram-ZZMXUADV-BJbAiI_w.js +1 -0
  258. package/dist/gui/client/assets/classDiagram-v2-VYDZK3BY-BJbAiI_w.js +1 -0
  259. package/dist/gui/client/assets/cynefin-OW5HDTMX-DecLWZ-y.js +1 -0
  260. package/dist/gui/client/assets/cynefinDiagram-5FMLGOSQ-CK-T2N-D.js +62 -0
  261. package/dist/gui/client/assets/dagre-GXQ25YYZ-C0dfg-OS.js +4 -0
  262. package/dist/gui/client/assets/diagram-S7CK7UJ4-EaJukVh-.js +30 -0
  263. package/dist/gui/client/assets/diagram-UQ7AKVKN-xcOucEtP.js +41 -0
  264. package/dist/gui/client/assets/diagram-VSXAHHWV-3AUJACMf.js +3 -0
  265. package/dist/gui/client/assets/diagram-VX7I27RA-TPknLqam.js +24 -0
  266. package/dist/gui/client/assets/diagram-Z3DM3KII-wa1q3YMF.js +24 -0
  267. package/dist/gui/client/assets/ebnfDiagram-PWID7BFC-JBCF2-s7.js +1 -0
  268. package/dist/gui/client/assets/erDiagram-RLTQ6QDP-CmXjXPc4.js +99 -0
  269. package/dist/gui/client/assets/eventmodeling-NTZA5JFV-D_1aJWYl.js +1 -0
  270. package/dist/gui/client/assets/flowDiagram-HODETNUW-BQtZlael.js +1 -0
  271. package/dist/gui/client/assets/framework-Bq-znqwW.js +9 -0
  272. package/dist/gui/client/assets/ganttDiagram-EL5Y4UJY-IPaL_kaa.js +292 -0
  273. package/dist/gui/client/assets/gitGraph-4MIJSDKK-Oy0Q3hoc.js +1 -0
  274. package/dist/gui/client/assets/gitGraphDiagram-WWUBYQGX-jtAuBmbc.js +106 -0
  275. package/dist/gui/client/assets/index-CuFuBEdL.css +1 -0
  276. package/dist/gui/client/assets/index-hMbEIsX0.js +87 -0
  277. package/dist/gui/client/assets/info-A6RAGUB7-UtEs1tv7.js +1 -0
  278. package/dist/gui/client/assets/infoDiagram-27XIBGKW-hlwR1pBW.js +2 -0
  279. package/dist/gui/client/assets/ishikawaDiagram-5VMMS53U-C6vMtfsd.js +70 -0
  280. package/dist/gui/client/assets/journeyDiagram-3NMN7TZE-EAwAl_PS.js +139 -0
  281. package/dist/gui/client/assets/kanban-definition-UXKFOSKX-CQOhRKHW.js +89 -0
  282. package/dist/gui/client/assets/line-DbcwGZTW.js +1 -0
  283. package/dist/gui/client/assets/mermaid-parser.core-C2QfVcHd.js +7 -0
  284. package/dist/gui/client/assets/mermaid.core-N9qUTre1.js +44 -0
  285. package/dist/gui/client/assets/mindmap-definition-YA3MSWOX-BR_FL9gK.js +96 -0
  286. package/dist/gui/client/assets/packet-AYTQ26CC-CbBJ2oAa.js +1 -0
  287. package/dist/gui/client/assets/pegDiagram-XKGWAZYB-BruU0IHM.js +1 -0
  288. package/dist/gui/client/assets/pie-WAS4IAKB-BWdSng4H.js +1 -0
  289. package/dist/gui/client/assets/pieDiagram-E7YTZNPT-CR3ljgdU.js +39 -0
  290. package/dist/gui/client/assets/quadrantDiagram-AXDQQJYC-C-boKslr.js +7 -0
  291. package/dist/gui/client/assets/radar-RG4KPBEZ-CGlOnAKG.js +1 -0
  292. package/dist/gui/client/assets/railroad-74A4TZTK-CDvuAlyC.js +1 -0
  293. package/dist/gui/client/assets/railroad-abnf-HS5TGJTU-CQUA9crC.js +1 -0
  294. package/dist/gui/client/assets/railroad-ebnf-LZEXJU2U-CD857gxq.js +1 -0
  295. package/dist/gui/client/assets/railroad-peg-WCYAUIDC-DUV4k35E.js +1 -0
  296. package/dist/gui/client/assets/railroadDiagram-O6MQD6OU-DMR4LXmA.js +1 -0
  297. package/dist/gui/client/assets/requirementDiagram-BXWQKSXE-DVltaF6c.js +84 -0
  298. package/dist/gui/client/assets/sankeyDiagram-P5KCCOFB-CHdNz472.js +40 -0
  299. package/dist/gui/client/assets/sequenceDiagram-WJ2MYXX4-DaMafIty.js +162 -0
  300. package/dist/gui/client/assets/stateDiagram-D77RDMKH-CEbBHqn3.js +1 -0
  301. package/dist/gui/client/assets/stateDiagram-v2-MP3YSRHH-B3JgDdFg.js +1 -0
  302. package/dist/gui/client/assets/swimlanes-42K2YHIH-BlPHndnJ.js +1 -0
  303. package/dist/gui/client/assets/swimlanesDiagram-VR7AAH4N-BPabHwsZ.js +8 -0
  304. package/dist/gui/client/assets/timeline-definition-24CTP7MA-E4Y1lPBI.js +120 -0
  305. package/dist/gui/client/assets/treeView-Q6P3EWNA-DrY0uhTN.js +1 -0
  306. package/dist/gui/client/assets/treemap-WGGIJYW6-CVotnLHf.js +1 -0
  307. package/dist/gui/client/assets/vennDiagram-4TSXK5OY-DJNrLIOF.js +34 -0
  308. package/dist/gui/client/assets/wardley-WFR3VGLG-ClOpAp5S.js +1 -0
  309. package/dist/gui/client/assets/wardleyDiagram-VM6X3IG4-qhMoKOXc.js +78 -0
  310. package/dist/gui/client/assets/xychartDiagram-S5SC5T6Z-CTuXoo9R.js +7 -0
  311. package/dist/gui/client/index.html +6 -0
  312. package/dist/gui/ops-worker.js +167 -0
  313. package/dist/gui/reads-worker.js +473 -0
  314. package/dist/gui/server.js +9780 -0
  315. package/dist/gui-QJS7XQMV.js +16 -0
  316. package/dist/init-DV5B6HQG.js +354 -0
  317. package/dist/install-6C45YXFP.js +19 -0
  318. package/dist/install-O7NSRU2W.js +13 -0
  319. package/dist/interactive-OXGYZYAS.js +22381 -0
  320. package/dist/interop-J7UOBOSF.js +254 -0
  321. package/dist/inventory-OEGIL6PY.js +144 -0
  322. package/dist/library-B3UPGY4V.js +83 -0
  323. package/dist/library-MXQA5DLT.js +309 -0
  324. package/dist/library-ROZAMUIL.js +496 -0
  325. package/dist/library-import-2LTWOVBD.js +190 -0
  326. package/dist/library-inventory-LJ3XHLWO.js +60 -0
  327. package/dist/library-validation-DARHHUNW.js +46 -0
  328. package/dist/mcp-2GSPYQ54.js +28 -0
  329. package/dist/memory-J3STUUIK.js +537 -0
  330. package/dist/models-Y3GMFJ2V.js +314 -0
  331. package/dist/monitor-LHNH577J.js +811 -0
  332. package/dist/orchestrator-DTAPXULA.js +12117 -0
  333. package/dist/panes-A743ONZ5.js +103 -0
  334. package/dist/panes-CTNO57ZY.js +76 -0
  335. package/dist/paths-3SBYJQDP.js +68 -0
  336. package/dist/preload-OJBMAIXF.js +140 -0
  337. package/dist/providers-CMETPZNS.js +232 -0
  338. package/dist/registry-37T4U6X2.js +15 -0
  339. package/dist/reset-O7EUCYWO.js +346 -0
  340. package/dist/resources-FY6XYFN2.js +189 -0
  341. package/dist/run-H64MEVTA.js +1067 -0
  342. package/dist/run-script-PQ5NRU3X.js +42 -0
  343. package/dist/settings-SNIQNXCW.js +73 -0
  344. package/dist/settings-controls-X6GMCPVG.js +202 -0
  345. package/dist/share-CAFMMQLM.js +299 -0
  346. package/dist/skills-ERKQUC7L.js +114 -0
  347. package/dist/skills-eval-CQ23MYQK.js +1099 -0
  348. package/dist/skills-inventory-TVUYJDVN.js +142 -0
  349. package/dist/slash-commands-ROG3KIFJ.js +107 -0
  350. package/dist/startup-background-KDWCQMWT.js +247 -0
  351. package/dist/steer-KKYXJSH4.js +77 -0
  352. package/dist/support-M3RCUUEL.js +40 -0
  353. package/dist/system-ZDW44ZGX.js +142 -0
  354. package/dist/target-runtimes-PWA22WVW.js +73 -0
  355. package/dist/targets-AJWA6E7Z.js +1207 -0
  356. package/dist/tasks-6L2JJRC5.js +39 -0
  357. package/dist/terminal-lease-YFUSDPAD.js +432 -0
  358. package/dist/tools-5XJUABRD.js +30 -0
  359. package/dist/trace-LA5MVR4Y.js +527 -0
  360. package/dist/tree-sitter-TQW3Y52T.js +4673 -0
  361. package/dist/tui-primitives-IUCVWLH5.js +19 -0
  362. package/dist/uninstall-SAWGGXAB.js +448 -0
  363. package/dist/upgrade-HSNSVTZG.js +300 -0
  364. package/dist/usage-XSILDHKF.js +1083 -0
  365. package/dist/verifiers-ECA5GIHL.js +633 -0
  366. package/dist/verify-R6QQCCEB.js +31 -0
  367. package/dist/version-PLZYB5KW.js +22 -0
  368. package/dist/web-fetch-PVZNMBOB.js +803 -0
  369. package/dist/wiki-generate-RP22WP5K.js +647 -0
  370. package/dist/with-panes-W3PAZPRF.js +629 -0
  371. package/dist/worker/entry.js +324 -284
  372. package/dist/workspace-check-3764ZKC2.js +83 -0
  373. package/docs/README.md +26 -10
  374. package/docs/architecture/acp.md +179 -12
  375. package/docs/architecture/artifact-placement.md +1 -1
  376. package/docs/architecture/capacity-and-scheduling.md +7 -8
  377. package/docs/architecture/context-engine.md +350 -95
  378. package/docs/architecture/model-catalog.md +18 -11
  379. package/docs/architecture/observability.md +1 -1
  380. package/docs/architecture/pi-boundary.md +59 -6
  381. package/docs/architecture/prompt-envelope-and-tools.md +147 -39
  382. package/docs/architecture/provider-adapter-cookbook.md +2 -2
  383. package/docs/architecture/safety-model.md +18 -4
  384. package/docs/architecture/trace-store.md +2 -2
  385. package/docs/architecture/tui-design.md +41 -81
  386. package/docs/architecture/worker-dispatch-mechanics.md +9 -1
  387. package/docs/gui/README.md +69 -0
  388. package/docs/gui/boundary-doctrine.md +104 -0
  389. package/docs/gui/chat-rendering-spec.md +1440 -0
  390. package/docs/gui/cli-surface-routing.md +148 -0
  391. package/docs/gui/delivery-order.md +53 -0
  392. package/docs/gui/event-bus-coverage.md +103 -0
  393. package/docs/gui/inspector-presentation.md +71 -0
  394. package/docs/gui/parity/01-cli-surface.md +74 -0
  395. package/docs/gui/parity/02-slash-and-surfaces.md +110 -0
  396. package/docs/gui/parity/03-domains-and-plan.md +69 -0
  397. package/docs/gui/performance-baseline.md +76 -0
  398. package/docs/gui/settings-write-surface.md +267 -0
  399. package/docs/gui/workflow-coverage.md +64 -0
  400. package/docs/guide/built-in-agents.md +1 -1
  401. package/docs/guide/commands-and-modes.md +256 -99
  402. package/docs/guide/configuration-and-targets.md +485 -124
  403. package/docs/guide/configuration-reference.md +165 -82
  404. package/docs/guide/doctor.md +127 -0
  405. package/docs/guide/environment-variables.md +1 -1
  406. package/docs/guide/exit-codes-and-output.md +3 -1
  407. package/docs/guide/extensions-and-sharing.md +3 -14
  408. package/docs/guide/fleet-dispatch.md +231 -45
  409. package/docs/guide/glossary.md +1 -1
  410. package/docs/guide/installation-and-lifecycle.md +27 -16
  411. package/docs/guide/interop.md +2 -2
  412. package/docs/guide/proactive-memory.md +154 -68
  413. package/docs/guide/resource-library.md +4 -0
  414. package/docs/guide/skills-marketplace.md +8 -4
  415. package/docs/guide/slurm.md +88 -0
  416. package/docs/guide/tool-usage.md +134 -11
  417. package/docs/guide/troubleshooting.md +4 -2
  418. package/docs/process/battletest-2026-09-20-fixes.md +161 -0
  419. package/docs/process/configure-tree-proposal.md +637 -0
  420. package/docs/process/documentation-coverage.md +8 -0
  421. package/docs/process/documentation-guide.md +18 -1
  422. package/docs/process/eval-runner.md +58 -14
  423. package/docs/process/performance-methodology.md +11 -3
  424. package/docs/process/release-cut-checklist.md +29 -3
  425. package/docs/process/tool-audit-v0.4.9.md +3 -0
  426. package/examples/extensions/README.md +1 -3
  427. package/examples/extensions/lab-status/clio-coder-extension.json +1 -1
  428. package/examples/extensions/measurements/clio-coder-extension.json +1 -1
  429. package/library/registry.yaml +30 -5
  430. package/library/skills/git/fix-issue/SKILL.md +2 -1
  431. package/library/skills/git/fix-issue/plugin.json +1 -1
  432. package/library/skills/git/ship/SKILL.md +2 -1
  433. package/library/skills/git/ship/plugin.json +1 -1
  434. package/library/skills/meta/clio-coder-test/SKILL.md +5 -6
  435. package/library/skills/meta/clio-coder-test/evals.md +2 -2
  436. package/library/skills/meta/clio-coder-test/references/test-map.md +2 -2
  437. package/library/skills/registry.yaml +9 -5
  438. package/library/skills/research/slurm-jobs/SKILL.md +110 -0
  439. package/library/skills/research/slurm-jobs/evals.md +39 -0
  440. package/library/skills/research/slurm-jobs/plugin.json +23 -0
  441. package/library/skills/skill-marketplace.json +18 -2
  442. package/package.json +15 -10
  443. package/src/cli/args.ts +59 -0
  444. package/src/cli/argv.ts +7 -0
  445. package/src/cli/clio.ts +9 -1
  446. package/src/cli/configure-controls.ts +136 -0
  447. package/src/cli/configure-onboarding.ts +24 -7
  448. package/src/cli/configure-quick.ts +32 -7
  449. package/src/cli/configure-target.ts +11 -1
  450. package/src/cli/configure.ts +253 -256
  451. package/src/cli/docs-server.ts +290 -0
  452. package/src/cli/docs.ts +60 -15
  453. package/src/cli/doctor-deep.ts +126 -0
  454. package/src/cli/doctor-hpc.ts +122 -0
  455. package/src/cli/doctor-slurm.ts +130 -0
  456. package/src/cli/doctor-task-worktrees.ts +88 -0
  457. package/src/cli/doctor.ts +165 -16
  458. package/src/cli/fleet-verify.ts +3 -2
  459. package/src/cli/gui.ts +111 -0
  460. package/src/cli/index.ts +14 -4
  461. package/src/cli/library.ts +2 -7
  462. package/src/cli/modes/json-stream.ts +4 -2
  463. package/src/cli/modes/print.ts +252 -25
  464. package/src/cli/run.ts +199 -71
  465. package/src/cli/skills.ts +25 -7
  466. package/src/cli/targets.ts +87 -9
  467. package/src/cli/uninstall.ts +28 -8
  468. package/src/cli/usage.ts +2 -1
  469. package/src/cli/workspace-check.ts +71 -0
  470. package/src/core/bash-exec.ts +8 -2
  471. package/src/core/bus-events.ts +32 -3
  472. package/src/core/cache-telemetry.ts +3 -2
  473. package/src/core/compile-cache.ts +11 -1
  474. package/src/core/config.ts +59 -6
  475. package/src/core/defaults.ts +27 -5
  476. package/src/core/diagnostics.ts +25 -0
  477. package/src/core/event-bus.ts +2 -1
  478. package/src/core/gateway-routing.ts +10 -3
  479. package/src/core/git-commit-attribution.ts +2 -1
  480. package/src/core/naming-compat.ts +6 -4
  481. package/src/core/package-root.ts +0 -9
  482. package/src/core/path-canonical.ts +143 -24
  483. package/src/core/residency-target-key.ts +2 -6
  484. package/src/core/run-overrides.ts +1 -1
  485. package/src/core/settings-awareness.ts +108 -0
  486. package/src/core/settings-controls.ts +673 -0
  487. package/src/core/settings-navigation.ts +116 -0
  488. package/src/core/theme-token-hex.ts +19 -9
  489. package/src/core/turn-constraints.ts +52 -0
  490. package/src/domains/agents/builtins/scout.md +7 -17
  491. package/src/domains/agents/catalog.ts +5 -1
  492. package/src/domains/agents/extension.ts +2 -1
  493. package/src/domains/agents/registry.ts +4 -3
  494. package/src/domains/agents/result-contract.ts +132 -1
  495. package/src/domains/config/classify.ts +11 -7
  496. package/src/domains/config/extension.ts +5 -1
  497. package/src/domains/config/keybindings.ts +2 -2
  498. package/src/domains/context/codewiki/coordinator.ts +10 -0
  499. package/src/domains/context/worker/snapshot.ts +6 -3
  500. package/src/domains/dispatch/active-route-planner.ts +2 -0
  501. package/src/domains/dispatch/agent-candidates.ts +5 -1
  502. package/src/domains/dispatch/capability-match.ts +1 -1
  503. package/src/domains/dispatch/contract.ts +28 -0
  504. package/src/domains/dispatch/event-pump.ts +37 -3
  505. package/src/domains/dispatch/extension.ts +391 -48
  506. package/src/domains/dispatch/failure-classification.ts +37 -2
  507. package/src/domains/dispatch/receipt-integrity.ts +3 -0
  508. package/src/domains/dispatch/run-identity.ts +10 -3
  509. package/src/domains/dispatch/target-breaker.ts +163 -0
  510. package/src/domains/dispatch/types.ts +29 -2
  511. package/src/domains/dispatch/worker-model-loads.ts +66 -0
  512. package/src/domains/dispatch/worker-protocol.ts +20 -1
  513. package/src/domains/dispatch/worker-spawn.ts +28 -2
  514. package/src/domains/eval/artifacts/redact.ts +9 -0
  515. package/src/domains/eval/metrics/noop.ts +61 -0
  516. package/src/domains/eval/reports/junit.ts +5 -1
  517. package/src/domains/eval/reports/text.ts +7 -0
  518. package/src/domains/eval/runners/clio-run.ts +19 -8
  519. package/src/domains/eval/runners/external-command.ts +29 -4
  520. package/src/domains/eval/schema/adapter.ts +6 -2
  521. package/src/domains/eval/schema/suite.ts +2 -0
  522. package/src/domains/eval/schema/validate.ts +3 -0
  523. package/src/domains/eval/suites/run.ts +167 -26
  524. package/src/domains/evidence/detail.ts +3 -2
  525. package/src/domains/extensions/operator-runtime.ts +11 -4
  526. package/src/domains/gateway/mcp/client.ts +1 -1
  527. package/src/domains/lifecycle/doctor.ts +42 -26
  528. package/src/domains/lifecycle/migrations/2026-09-18-ollama-runtime-id.ts +38 -0
  529. package/src/domains/lifecycle/migrations/index.ts +2 -0
  530. package/src/domains/middleware/demo-guidance.ts +36 -0
  531. package/src/domains/middleware/dispatch-nudge.ts +1 -1
  532. package/src/domains/middleware/memory-intervention.ts +51 -4
  533. package/src/domains/middleware/runtime.ts +5 -4
  534. package/src/domains/middleware/skills-reminder.ts +29 -52
  535. package/src/domains/middleware/task-nudge.ts +1 -0
  536. package/src/domains/middleware/watchdog.ts +4 -0
  537. package/src/domains/observability/extension.ts +2 -1
  538. package/src/domains/observability/out-of-turn-usage.ts +3 -2
  539. package/src/domains/observability/projection.ts +3 -2
  540. package/src/domains/observability/worker-progress.ts +48 -0
  541. package/src/domains/prompts/compiler.ts +148 -52
  542. package/src/domains/prompts/contract.ts +3 -3
  543. package/src/domains/prompts/demo-guidance.ts +8 -0
  544. package/src/domains/prompts/extension.ts +12 -7
  545. package/src/domains/prompts/fragments/identity/clio.md +2 -1
  546. package/src/domains/prompts/fragments/identity/docs-routing.md +2 -0
  547. package/src/domains/prompts/fragments/identity/self-awareness.md +4 -0
  548. package/src/domains/prompts/fragments/operating/contract.md +16 -7
  549. package/src/domains/prompts/fragments/operating/delegation.md +29 -13
  550. package/src/domains/prompts/fragments/operating/skills.md +18 -10
  551. package/src/domains/prompts/fragments/operating/worker.md +2 -0
  552. package/src/domains/providers/cache-deployment.ts +45 -2
  553. package/src/domains/providers/contract.ts +52 -11
  554. package/src/domains/providers/extension.ts +230 -53
  555. package/src/domains/providers/model-discovery.ts +22 -8
  556. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +5 -7
  557. package/src/domains/providers/plugins.ts +3 -4
  558. package/src/domains/providers/probe/fingerprint.ts +2 -2
  559. package/src/domains/providers/probe/reasoning.ts +9 -16
  560. package/src/domains/providers/probe/tool-call.ts +236 -0
  561. package/src/domains/providers/registry.ts +51 -8
  562. package/src/domains/providers/runtime-resolution.ts +60 -12
  563. package/src/domains/providers/runtimes/boot-manifest.ts +1 -1
  564. package/src/domains/providers/runtimes/builtins.ts +2 -2
  565. package/src/domains/providers/runtimes/common/lmstudio-http.ts +57 -41
  566. package/src/domains/providers/runtimes/common/local-synth.ts +3 -1
  567. package/src/domains/providers/runtimes/common/ollama-model-ids.ts +11 -0
  568. package/src/domains/providers/runtimes/common/probe-helpers.ts +53 -0
  569. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +3 -1
  570. package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +7 -13
  571. package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +7 -17
  572. package/src/domains/providers/runtimes/local-native/llamacpp.ts +1 -0
  573. package/src/domains/providers/runtimes/local-native/ollama.ts +211 -0
  574. package/src/domains/providers/runtimes/protocol/litellm.ts +77 -65
  575. package/src/domains/providers/support.ts +1 -1
  576. package/src/domains/providers/types/local-model-quirks.ts +2 -3
  577. package/src/domains/providers/types/runtime-descriptor.ts +23 -3
  578. package/src/domains/providers/types/target-descriptor.ts +15 -3
  579. package/src/domains/resources/collision.ts +7 -2
  580. package/src/domains/resources/index.ts +1 -0
  581. package/src/domains/resources/library-actions.ts +4 -2
  582. package/src/domains/resources/library-inventory.ts +6 -2
  583. package/src/domains/resources/prompts/loader.ts +20 -7
  584. package/src/domains/resources/skills/availability.ts +56 -0
  585. package/src/domains/resources/skills/loader.ts +20 -9
  586. package/src/domains/safety/action-classifier.ts +282 -31
  587. package/src/domains/safety/audit.ts +2 -1
  588. package/src/domains/safety/autonomy.ts +54 -11
  589. package/src/domains/safety/decision-presentation.ts +17 -4
  590. package/src/domains/safety/finish-contract-registration.ts +25 -1
  591. package/src/domains/safety/finish-contract.ts +20 -5
  592. package/src/domains/safety/path-policy.ts +6 -2
  593. package/src/domains/safety/policy-engine.ts +168 -48
  594. package/src/domains/safety/protected-artifacts.ts +527 -16
  595. package/src/domains/safety/read-scope.ts +120 -0
  596. package/src/domains/safety/skill-authority.ts +52 -16
  597. package/src/domains/scheduling/cluster.ts +14 -3
  598. package/src/domains/scheduling/contract.ts +7 -0
  599. package/src/domains/scheduling/extension.ts +20 -9
  600. package/src/domains/scheduling/local-capacity.ts +160 -0
  601. package/src/domains/session/context-accounting.ts +44 -31
  602. package/src/domains/session/context-ledger.ts +10 -3
  603. package/src/domains/session/entries.ts +4 -0
  604. package/src/domains/session/history.ts +1 -1
  605. package/src/domains/session/prompt-cache.ts +1 -0
  606. package/src/domains/session/prompt-manifest.ts +3 -1
  607. package/src/domains/session/retry.ts +4 -6
  608. package/src/domains/session/task-board.ts +19 -4
  609. package/src/domains/session/tree/preview.ts +3 -2
  610. package/src/engine/acp/commands.ts +653 -0
  611. package/src/engine/acp/server.ts +639 -20
  612. package/src/engine/acp/tool-mediator.ts +30 -7
  613. package/src/engine/acp/types.ts +58 -0
  614. package/src/engine/agent.ts +55 -10
  615. package/src/engine/ai.ts +11 -2
  616. package/src/engine/api-registry.ts +5 -4
  617. package/src/engine/apis/degraded-inference.ts +243 -0
  618. package/src/engine/apis/llamacpp-residency.ts +50 -6
  619. package/src/engine/apis/lmstudio-residency.ts +3 -5
  620. package/src/engine/apis/lmstudio.ts +137 -31
  621. package/src/engine/apis/ollama-http.ts +118 -0
  622. package/src/engine/apis/ollama-native.ts +216 -97
  623. package/src/engine/apis/openai-completions.ts +191 -189
  624. package/src/engine/apis/output-budget.ts +3 -1
  625. package/src/engine/apis/residency-lock.ts +2 -1
  626. package/src/engine/apis/residency.ts +339 -89
  627. package/src/engine/apis/sampling-overrides.ts +23 -2
  628. package/src/engine/apis/types.ts +1 -2
  629. package/src/engine/claude/tool-safety.ts +30 -5
  630. package/src/engine/context.ts +13 -0
  631. package/src/engine/env-api-keys.ts +2 -1
  632. package/src/engine/gemma-channel-filter.ts +3 -2
  633. package/src/engine/instrumented-tui.ts +25 -0
  634. package/src/engine/loop-guard.ts +172 -6
  635. package/src/engine/pi-mono-names.ts +16 -0
  636. package/src/engine/prewarm.ts +44 -15
  637. package/src/engine/provider-payload.ts +52 -14
  638. package/src/engine/session.ts +4 -2
  639. package/src/engine/worker-events.ts +9 -1
  640. package/src/engine/worker-runtime.ts +269 -42
  641. package/src/engine/worker-tools.ts +8 -3
  642. package/src/entry/boot-options.ts +23 -0
  643. package/src/entry/orchestrator.ts +207 -36
  644. package/src/interactive/assistant-generation-timing.ts +52 -0
  645. package/src/interactive/chat-loop-messages.ts +4 -1
  646. package/src/interactive/chat-loop.ts +59 -9
  647. package/src/interactive/chat-panel.ts +10 -1
  648. package/src/interactive/clio-editor.ts +51 -79
  649. package/src/interactive/context-meter.ts +1 -0
  650. package/src/interactive/context-overlay.ts +21 -8
  651. package/src/interactive/cost-overlay.ts +1 -1
  652. package/src/interactive/dispatch-board.ts +39 -8
  653. package/src/interactive/editor-bash.ts +0 -34
  654. package/src/interactive/editor-rails.ts +43 -0
  655. package/src/interactive/editor-submit.ts +34 -2
  656. package/src/interactive/footer/dashboard.ts +67 -38
  657. package/src/interactive/footer/demo-hints.ts +40 -0
  658. package/src/interactive/footer/key-hints.ts +21 -0
  659. package/src/interactive/footer/notifications.ts +1 -1
  660. package/src/interactive/footer/pages.ts +486 -0
  661. package/src/interactive/footer/system-metrics.ts +147 -0
  662. package/src/interactive/footer/widgets.ts +158 -63
  663. package/src/interactive/footer-panel.ts +29 -7
  664. package/src/interactive/interactive-application.ts +109 -21
  665. package/src/interactive/interactive-event-projection.ts +6 -2
  666. package/src/interactive/interactive-presentation.ts +25 -29
  667. package/src/interactive/interactive-slash-runtime.ts +32 -18
  668. package/src/interactive/interactive-subscriptions.ts +25 -5
  669. package/src/interactive/interactive-tickers.ts +21 -5
  670. package/src/interactive/keybinding-manager.ts +9 -0
  671. package/src/interactive/overlay-frame.ts +29 -7
  672. package/src/interactive/overlay-lifecycle.ts +5 -3
  673. package/src/interactive/overlay-model-selectors.ts +4 -0
  674. package/src/interactive/overlay-permission-lifecycle.ts +6 -5
  675. package/src/interactive/overlays/ask-user.ts +103 -110
  676. package/src/interactive/overlays/help-reference.ts +1 -0
  677. package/src/interactive/overlays/message-picker.ts +3 -29
  678. package/src/interactive/overlays/session-selector.ts +3 -2
  679. package/src/interactive/overlays/settings-sections.ts +2 -30
  680. package/src/interactive/overlays/settings.ts +310 -607
  681. package/src/interactive/permission-hint.ts +3 -3
  682. package/src/interactive/permission-overlay.ts +45 -27
  683. package/src/interactive/renderers/doctor-report.ts +43 -0
  684. package/src/interactive/renderers/tool-execution.ts +87 -62
  685. package/src/interactive/renderers/worker-entry.ts +76 -3
  686. package/src/interactive/side-question.ts +3 -1
  687. package/src/interactive/slash-commands.ts +78 -23
  688. package/src/interactive/startup-background.ts +131 -0
  689. package/src/interactive/startup-diagnostics.ts +16 -0
  690. package/src/interactive/status/state-machine.ts +16 -3
  691. package/src/interactive/status/types.ts +2 -0
  692. package/src/interactive/status/verbs.ts +1 -1
  693. package/src/interactive/terminal-lease.ts +26 -22
  694. package/src/interactive/theme/components.ts +1 -1
  695. package/src/interactive/theme/rules.ts +1 -1
  696. package/src/interactive/theme/tokens.ts +16 -10
  697. package/src/interactive/transcript-detail.ts +4 -0
  698. package/src/interactive/turn-context.ts +56 -20
  699. package/src/interactive/turn-middleware.ts +57 -9
  700. package/src/interactive/turn-prewarm.ts +121 -18
  701. package/src/interactive/turn-recovery.ts +10 -8
  702. package/src/interactive/turn-runtime.ts +74 -29
  703. package/src/interactive/turn-state.ts +3 -0
  704. package/src/interactive/welcome-art.ts +36 -0
  705. package/src/interactive/welcome-dashboard.ts +209 -49
  706. package/src/interactive/worker-replay.ts +4 -0
  707. package/src/interactive/worker-stream.ts +17 -2
  708. package/src/tools/agent-tools.ts +22 -1
  709. package/src/tools/builtin-tool-catalog.ts +2 -2
  710. package/src/tools/codewiki/code-nav.ts +1 -1
  711. package/src/tools/codewiki/shared.ts +39 -1
  712. package/src/tools/compete-worktrees.ts +8 -91
  713. package/src/tools/context/docs-engine.ts +44 -12
  714. package/src/tools/context/index.ts +126 -22
  715. package/src/tools/context/library.ts +1 -1
  716. package/src/tools/context/surface.ts +12 -7
  717. package/src/tools/core-bootstrap.ts +3 -0
  718. package/src/tools/dispatch-runner.ts +18 -0
  719. package/src/tools/dispatch-schema.ts +187 -206
  720. package/src/tools/edit.ts +46 -42
  721. package/src/tools/file-mutation-queue.ts +25 -26
  722. package/src/tools/gateway/clio-context-surface.ts +1 -1
  723. package/src/tools/gateway/index.ts +7 -3
  724. package/src/tools/gateway/mcp-capabilities.ts +5 -3
  725. package/src/tools/grep.ts +14 -2
  726. package/src/tools/ls.ts +1 -4
  727. package/src/tools/monitor.ts +14 -1
  728. package/src/tools/observation.ts +1 -3
  729. package/src/tools/path-utils.ts +51 -18
  730. package/src/tools/process-lease.ts +99 -0
  731. package/src/tools/read.ts +1 -1
  732. package/src/tools/registry.ts +71 -9
  733. package/src/tools/task-worktree.ts +296 -17
  734. package/src/tools/tasks.ts +29 -7
  735. package/src/tools/worker-evidence.ts +60 -1
  736. package/src/tools/worktree-root.ts +252 -0
  737. package/src/tools/write.ts +34 -30
  738. package/src/worker/entry.ts +18 -1
  739. package/src/worker/protocol.ts +54 -1
  740. package/src/worker/spec-contract.ts +22 -2
  741. package/dist/acp-ZWZCPS2A.js +0 -130
  742. package/dist/agents-LYSOWZUE.js +0 -150
  743. package/dist/auth-WBQGKWQ5.js +0 -551
  744. package/dist/background-BUMOBAQN.js +0 -37
  745. package/dist/builtins-ODRJOEDI.js +0 -22
  746. package/dist/chunk-2DRRZ57Q.js +0 -571
  747. package/dist/chunk-2JBZYUPY.js +0 -105
  748. package/dist/chunk-2VBWFXYE.js +0 -198
  749. package/dist/chunk-2X2R3UTH.js +0 -1018
  750. package/dist/chunk-32KJPXAM.js +0 -75
  751. package/dist/chunk-37LW32LZ.js +0 -32
  752. package/dist/chunk-3A3CUMKA.js +0 -54
  753. package/dist/chunk-3AND2EFU.js +0 -215
  754. package/dist/chunk-3RDHGNU7.js +0 -647
  755. package/dist/chunk-3SUDBGEI.js +0 -1323
  756. package/dist/chunk-3TQN67I2.js +0 -396
  757. package/dist/chunk-3U4BL2EV.js +0 -103
  758. package/dist/chunk-3UQADNG2.js +0 -302
  759. package/dist/chunk-434LRQ6Z.js +0 -13441
  760. package/dist/chunk-4ATBOFRP.js +0 -7802
  761. package/dist/chunk-4DNL43EZ.js +0 -139
  762. package/dist/chunk-4HFJKRGZ.js +0 -5250
  763. package/dist/chunk-555E2WVV.js +0 -322
  764. package/dist/chunk-5GZICIYO.js +0 -462
  765. package/dist/chunk-5PHVPU4G.js +0 -160
  766. package/dist/chunk-5RTEFNBP.js +0 -197
  767. package/dist/chunk-64XJW7NT.js +0 -380
  768. package/dist/chunk-6TKOFFGE.js +0 -1058
  769. package/dist/chunk-6UJ7RDI7.js +0 -1143
  770. package/dist/chunk-7FBCRWVT.js +0 -1801
  771. package/dist/chunk-7JSOSVLP.js +0 -283
  772. package/dist/chunk-7N3OLLSL.js +0 -637
  773. package/dist/chunk-7QQRPB2E.js +0 -915
  774. package/dist/chunk-A6DULIMH.js +0 -986
  775. package/dist/chunk-AB3QXXBC.js +0 -123
  776. package/dist/chunk-ACCECAH4.js +0 -49
  777. package/dist/chunk-AM6CEP2K.js +0 -2120
  778. package/dist/chunk-AUHVBIDW.js +0 -19
  779. package/dist/chunk-AY4XE6GN.js +0 -665
  780. package/dist/chunk-BBA2TAWV.js +0 -667
  781. package/dist/chunk-BFPHMSK7.js +0 -169
  782. package/dist/chunk-BMNVVKEW.js +0 -604
  783. package/dist/chunk-CKK25WN3.js +0 -72
  784. package/dist/chunk-CTGZCEI6.js +0 -33
  785. package/dist/chunk-DIAJYJYG.js +0 -446
  786. package/dist/chunk-DVNAPPXU.js +0 -27
  787. package/dist/chunk-DXVMLM3Z.js +0 -92
  788. package/dist/chunk-E3LEPLQ2.js +0 -68
  789. package/dist/chunk-EHZRAB4U.js +0 -63
  790. package/dist/chunk-EM2DIQAJ.js +0 -179
  791. package/dist/chunk-EM2WNQS2.js +0 -93
  792. package/dist/chunk-ETF4ROKH.js +0 -595
  793. package/dist/chunk-F2YM3JY4.js +0 -22513
  794. package/dist/chunk-FEBQWHJT.js +0 -1023
  795. package/dist/chunk-FPS4R2RN.js +0 -1975
  796. package/dist/chunk-GD55RTIW.js +0 -33
  797. package/dist/chunk-GJDRMBDI.js +0 -573
  798. package/dist/chunk-GREYLTZ5.js +0 -658
  799. package/dist/chunk-H2WSCZZT.js +0 -238
  800. package/dist/chunk-H6IUCY6Q.js +0 -117
  801. package/dist/chunk-H72DCH3E.js +0 -563
  802. package/dist/chunk-H7TXJR23.js +0 -705
  803. package/dist/chunk-HBJQQTKM.js +0 -40
  804. package/dist/chunk-HCVKSGNZ.js +0 -990
  805. package/dist/chunk-HVCAY2FH.js +0 -67
  806. package/dist/chunk-I47EJPYL.js +0 -1377
  807. package/dist/chunk-IALGWTLO.js +0 -36
  808. package/dist/chunk-IALZJE37.js +0 -1710
  809. package/dist/chunk-IC7JXLOM.js +0 -1577
  810. package/dist/chunk-IOSVTTCD.js +0 -108
  811. package/dist/chunk-IPTPMLA6.js +0 -475
  812. package/dist/chunk-IZZI3SKQ.js +0 -128
  813. package/dist/chunk-JABWPKFY.js +0 -27
  814. package/dist/chunk-JIYWMQZ5.js +0 -175
  815. package/dist/chunk-JKU34ACI.js +0 -693
  816. package/dist/chunk-JOBN2YQQ.js +0 -176
  817. package/dist/chunk-JOL2QRLE.js +0 -152
  818. package/dist/chunk-JTR3VSV3.js +0 -44
  819. package/dist/chunk-JU6MAMRJ.js +0 -362
  820. package/dist/chunk-JURMQWVJ.js +0 -15
  821. package/dist/chunk-K2BLQC5E.js +0 -262
  822. package/dist/chunk-K3XN4LZ4.js +0 -402
  823. package/dist/chunk-KIVFXGBM.js +0 -688
  824. package/dist/chunk-KKRXONXG.js +0 -43
  825. package/dist/chunk-KOAHT3N2.js +0 -395
  826. package/dist/chunk-KP5BPXR3.js +0 -73
  827. package/dist/chunk-KQ6IDQIB.js +0 -39
  828. package/dist/chunk-KRJQG47M.js +0 -1289
  829. package/dist/chunk-KW6OJ7IY.js +0 -221
  830. package/dist/chunk-L3NBWLSN.js +0 -314
  831. package/dist/chunk-L4RUTLRL.js +0 -59
  832. package/dist/chunk-LGTVWPRN.js +0 -47
  833. package/dist/chunk-LSQW6KZO.js +0 -200
  834. package/dist/chunk-LTR5QCLS.js +0 -446
  835. package/dist/chunk-LWJYOHT3.js +0 -165
  836. package/dist/chunk-M6YLF66Z.js +0 -2687
  837. package/dist/chunk-MJ4QEJVT.js +0 -185
  838. package/dist/chunk-MO65K5CH.js +0 -1148
  839. package/dist/chunk-MTOZEQHL.js +0 -637
  840. package/dist/chunk-MZDPF35R.js +0 -45
  841. package/dist/chunk-MZKYVIWW.js +0 -188
  842. package/dist/chunk-NBPA5QM6.js +0 -386
  843. package/dist/chunk-NMBEW4PP.js +0 -688
  844. package/dist/chunk-NPLLK3HO.js +0 -3610
  845. package/dist/chunk-NSYGPIVW.js +0 -39
  846. package/dist/chunk-NXTV5OI5.js +0 -1020
  847. package/dist/chunk-NYDG4QP4.js +0 -689
  848. package/dist/chunk-OA2GDACN.js +0 -146
  849. package/dist/chunk-PJI57EC6.js +0 -236
  850. package/dist/chunk-PJJBUGMR.js +0 -4484
  851. package/dist/chunk-PNJE7JPS.js +0 -50
  852. package/dist/chunk-PP23PZEV.js +0 -1347
  853. package/dist/chunk-PPIFDSBK.js +0 -409
  854. package/dist/chunk-PTFISXQO.js +0 -319
  855. package/dist/chunk-QB33Z5S7.js +0 -1865
  856. package/dist/chunk-QGNII5VC.js +0 -110
  857. package/dist/chunk-QH3ZTUOA.js +0 -113
  858. package/dist/chunk-QI72X67S.js +0 -481
  859. package/dist/chunk-QJMRYTCX.js +0 -56
  860. package/dist/chunk-QKHZZFKH.js +0 -98
  861. package/dist/chunk-RDKX2PME.js +0 -66
  862. package/dist/chunk-RL7LJYN4.js +0 -66
  863. package/dist/chunk-RPMNIFRY.js +0 -65
  864. package/dist/chunk-RQROVOV3.js +0 -670
  865. package/dist/chunk-S34A7BSP.js +0 -97
  866. package/dist/chunk-SJETVJHX.js +0 -119
  867. package/dist/chunk-SJMNU4ZS.js +0 -634
  868. package/dist/chunk-SL2RDHKO.js +0 -19
  869. package/dist/chunk-SLLG2G44.js +0 -85
  870. package/dist/chunk-SQAZN2V3.js +0 -2744
  871. package/dist/chunk-SQBT46OF.js +0 -814
  872. package/dist/chunk-SRCEQKQS.js +0 -165
  873. package/dist/chunk-TCUOGIL2.js +0 -52
  874. package/dist/chunk-TIWPKCVO.js +0 -42
  875. package/dist/chunk-U44YYLVV.js +0 -1529
  876. package/dist/chunk-UIU7MGZ3.js +0 -486
  877. package/dist/chunk-USBBEKHW.js +0 -177
  878. package/dist/chunk-VHKTOLEW.js +0 -1416
  879. package/dist/chunk-VPWGADBG.js +0 -3151
  880. package/dist/chunk-VQD7NH7Z.js +0 -356
  881. package/dist/chunk-VWFCAK34.js +0 -697
  882. package/dist/chunk-W5RM7YAH.js +0 -78
  883. package/dist/chunk-W72LLZAV.js +0 -243
  884. package/dist/chunk-WGRDABW7.js +0 -207
  885. package/dist/chunk-WWRV5RJI.js +0 -165
  886. package/dist/chunk-XCUDZQLX.js +0 -195
  887. package/dist/chunk-XFLSL7BT.js +0 -386
  888. package/dist/chunk-XJZEDCNT.js +0 -391
  889. package/dist/chunk-XLLEL3K7.js +0 -709
  890. package/dist/chunk-XNZWWDC3.js +0 -686
  891. package/dist/chunk-XRECG65F.js +0 -308
  892. package/dist/chunk-XTQ7MEJG.js +0 -457
  893. package/dist/chunk-XW2UZICE.js +0 -372
  894. package/dist/chunk-Y3M2T5RO.js +0 -891
  895. package/dist/chunk-YGDMBK7O.js +0 -567
  896. package/dist/chunk-YJCCMYYT.js +0 -125
  897. package/dist/chunk-YPQOPFP7.js +0 -797
  898. package/dist/chunk-YQYINEJI.js +0 -132
  899. package/dist/chunk-ZF6CV4WZ.js +0 -5614
  900. package/dist/chunk-ZKJU55MX.js +0 -326
  901. package/dist/chunk-ZKQ63XZ5.js +0 -1196
  902. package/dist/chunk-ZKVMDNAN.js +0 -962
  903. package/dist/chunk-ZST3FRCV.js +0 -132
  904. package/dist/clio-JUDCLNHC.js +0 -26
  905. package/dist/clio-context-tools-FT672MNZ.js +0 -136
  906. package/dist/code-nav-7OVCTP2Z.js +0 -688
  907. package/dist/compile-cache-WJEPUZEJ.js +0 -16
  908. package/dist/components-OZXZMDWU.js +0 -674
  909. package/dist/config-P3ZQVF63.js +0 -275
  910. package/dist/config-graph-GKAOBAS5.js +0 -160
  911. package/dist/configure-25LRYZJG.js +0 -86
  912. package/dist/context-72VQV7JX.js +0 -73
  913. package/dist/context-COWRWXP3.js +0 -286
  914. package/dist/context-WB3D474G.js +0 -344
  915. package/dist/context-clear-Y4LYMWC6.js +0 -192
  916. package/dist/context-index-W6A4V7OC.js +0 -120
  917. package/dist/context-map-DKL3QT6D.js +0 -555
  918. package/dist/context-working-set-TMZYVC7A.js +0 -1560
  919. package/dist/data-tool-KMBWKKWR.js +0 -2987
  920. package/dist/detail-4GLROGY5.js +0 -123
  921. package/dist/dispatch-runner-TR3LBP5P.js +0 -2446
  922. package/dist/docs-ZK777W2G.js +0 -101
  923. package/dist/doctor-WC4OV2OB.js +0 -814
  924. package/dist/eval-FUNWJNUJ.js +0 -5050
  925. package/dist/eval-inventory-CX24K2JT.js +0 -260
  926. package/dist/evals-L73EBHSU.js +0 -104
  927. package/dist/evidence-AVJ2RTHX.js +0 -392
  928. package/dist/evidence-P4NZOAK7.js +0 -233
  929. package/dist/evidence-Y55WKYHH.js +0 -246
  930. package/dist/evolve-MAWKRYWF.js +0 -617
  931. package/dist/extensions-PYQH3H47.js +0 -308
  932. package/dist/fleet-M4H2QBWT.js +0 -268
  933. package/dist/fleet-ULBXXRDR.js +0 -923
  934. package/dist/fleet-commands-7NNC4JZU.js +0 -76
  935. package/dist/fleet-decisions-EHEY7KPU.js +0 -52
  936. package/dist/fleet-graph-LQ2AHZT3.js +0 -136
  937. package/dist/fleet-inspect-5IGBIIYZ.js +0 -312
  938. package/dist/fleet-new-RCKGSRDV.js +0 -48
  939. package/dist/fleet-preflight-UTTNOKMG.js +0 -27
  940. package/dist/fleet-validate-YGILJKA6.js +0 -91
  941. package/dist/fleet-verify-AUWTCDKR.js +0 -210
  942. package/dist/fleet-view-TGUFCY5A.js +0 -127
  943. package/dist/init-GFN2Z7NF.js +0 -333
  944. package/dist/install-3RZDDP23.js +0 -13
  945. package/dist/install-6PIF6F6W.js +0 -19
  946. package/dist/interop-EF5JUWWK.js +0 -246
  947. package/dist/inventory-I6VJDDYF.js +0 -127
  948. package/dist/library-3J5IO2OJ.js +0 -75
  949. package/dist/library-IJTOFTDS.js +0 -307
  950. package/dist/library-Z3KZSHPE.js +0 -492
  951. package/dist/library-import-IMKFLDHX.js +0 -183
  952. package/dist/library-inventory-CQP5D6GU.js +0 -56
  953. package/dist/library-validation-33UTX7AI.js +0 -42
  954. package/dist/mcp-5FWZKUS6.js +0 -26
  955. package/dist/memory-36CWN67Y.js +0 -520
  956. package/dist/models-KQ6PQJJQ.js +0 -302
  957. package/dist/monitor-XX6ZD6KC.js +0 -785
  958. package/dist/orchestrator-SK6HDAOP.js +0 -42067
  959. package/dist/panes-L27QRXUH.js +0 -74
  960. package/dist/panes-LXZIWNOZ.js +0 -103
  961. package/dist/paths-7DJDU4P4.js +0 -67
  962. package/dist/preload-K2TDYI4Y.js +0 -124
  963. package/dist/registry-DESGAXWK.js +0 -11
  964. package/dist/reset-73VU3XNT.js +0 -345
  965. package/dist/resources-3BYJYVYL.js +0 -181
  966. package/dist/run-AR7PY6GW.js +0 -896
  967. package/dist/run-script-H2KUDIII.js +0 -41
  968. package/dist/settings-3VMBMWID.js +0 -72
  969. package/dist/share-HVWH4FPF.js +0 -293
  970. package/dist/skills-5TYEY75Q.js +0 -100
  971. package/dist/skills-eval-CK3MD63Z.js +0 -1083
  972. package/dist/skills-inventory-KSFYG3I6.js +0 -138
  973. package/dist/slash-commands-DMVHML7P.js +0 -98
  974. package/dist/steer-XCD6V3EW.js +0 -77
  975. package/dist/support-JAZL6VBR.js +0 -38
  976. package/dist/system-3TDQRMZZ.js +0 -116
  977. package/dist/targets-EZKHAYRN.js +0 -1117
  978. package/dist/tasks-SNEFHWYW.js +0 -36
  979. package/dist/terminal-lease-BNLFA4OF.js +0 -419
  980. package/dist/tools-7IM6BDCE.js +0 -28
  981. package/dist/trace-C3MBGD4S.js +0 -524
  982. package/dist/tree-sitter-AQUUOSYM.js +0 -4673
  983. package/dist/tui-primitives-36BY2774.js +0 -18
  984. package/dist/uninstall-WWLOSZ42.js +0 -432
  985. package/dist/upgrade-ETK2JNSJ.js +0 -297
  986. package/dist/usage-S2HOB7BZ.js +0 -1065
  987. package/dist/verifiers-QDTEVH7R.js +0 -632
  988. package/dist/verify-SUKUK6XM.js +0 -31
  989. package/dist/version-RFPKO6T7.js +0 -21
  990. package/dist/web/client/assets/abnfDiagram-VCTEODGH-BznNOe_I.js +0 -1
  991. package/dist/web/client/assets/architecture-7GRP2DOG-BQO9DL_y.js +0 -1
  992. package/dist/web/client/assets/architectureDiagram-5GKGNRK7-CKPbdvyx.js +0 -36
  993. package/dist/web/client/assets/blockDiagram-I7D4REHJ-prINbpbM.js +0 -129
  994. package/dist/web/client/assets/c4Diagram-7LVT6UL2-DkVRKtyU.js +0 -38
  995. package/dist/web/client/assets/channel-c4EeUUqA.js +0 -1
  996. package/dist/web/client/assets/chunk-4HAMMTFA-CV0Z1ApC.js +0 -62
  997. package/dist/web/client/assets/chunk-75Z2AOVW-D34Nohxq.js +0 -2
  998. package/dist/web/client/assets/chunk-DU6HZSFF-Das_cS-O.js +0 -125
  999. package/dist/web/client/assets/chunk-F27PBJKO-CmRojxkG.js +0 -1
  1000. package/dist/web/client/assets/chunk-GMAD6QVW-ClYZmc73.js +0 -72
  1001. package/dist/web/client/assets/chunk-GVQU2GXP-B2BiHFt-.js +0 -1
  1002. package/dist/web/client/assets/chunk-IMKFNOWR-BGApZ8nP.js +0 -231
  1003. package/dist/web/client/assets/chunk-L3NEJ4N5-DIzCgpkY.js +0 -1
  1004. package/dist/web/client/assets/chunk-OSK3NFVY-BPT-yePv.js +0 -10
  1005. package/dist/web/client/assets/chunk-P2QGCYS3-BC1WTc2t.js +0 -1
  1006. package/dist/web/client/assets/chunk-POPQ4Y6H-BSjzBmZU.js +0 -1
  1007. package/dist/web/client/assets/chunk-PWAF6VOD-BIjLs86Z.js +0 -1
  1008. package/dist/web/client/assets/chunk-SHT3W25Y-CduDz2cm.js +0 -168
  1009. package/dist/web/client/assets/chunk-SVP7TREG-XUn4pPAP.js +0 -88
  1010. package/dist/web/client/assets/chunk-TICWLB2K-DcBy2DKy.js +0 -206
  1011. package/dist/web/client/assets/classDiagram-ZZMXUADV-C0HR7YKN.js +0 -1
  1012. package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-C0HR7YKN.js +0 -1
  1013. package/dist/web/client/assets/cynefin-OW5HDTMX-BecPbyM6.js +0 -1
  1014. package/dist/web/client/assets/cynefinDiagram-5FMLGOSQ-BzMzFwyT.js +0 -62
  1015. package/dist/web/client/assets/dagre-GXQ25YYZ-CAWJmRMG.js +0 -4
  1016. package/dist/web/client/assets/diagram-S7CK7UJ4--lp0ALmn.js +0 -30
  1017. package/dist/web/client/assets/diagram-UQ7AKVKN-gKUnsjcj.js +0 -41
  1018. package/dist/web/client/assets/diagram-VSXAHHWV-BoN5D1Gh.js +0 -3
  1019. package/dist/web/client/assets/diagram-VX7I27RA-BMtuswQ6.js +0 -24
  1020. package/dist/web/client/assets/diagram-Z3DM3KII-DtU8LXrA.js +0 -24
  1021. package/dist/web/client/assets/ebnfDiagram-PWID7BFC-DDcnv9BH.js +0 -1
  1022. package/dist/web/client/assets/erDiagram-RLTQ6QDP-DvRb4iDL.js +0 -99
  1023. package/dist/web/client/assets/eventmodeling-NTZA5JFV-01h4SbTc.js +0 -1
  1024. package/dist/web/client/assets/flowDiagram-HODETNUW-Bll_YZ6T.js +0 -1
  1025. package/dist/web/client/assets/framework-YGoR34M4.js +0 -9
  1026. package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-DdFZ9hvH.js +0 -292
  1027. package/dist/web/client/assets/gitGraph-4MIJSDKK-DjD_AAMj.js +0 -1
  1028. package/dist/web/client/assets/gitGraphDiagram-WWUBYQGX-CDyN9n2u.js +0 -106
  1029. package/dist/web/client/assets/index-CVcy0FAn.js +0 -75
  1030. package/dist/web/client/assets/index-Dsi52apB.css +0 -1
  1031. package/dist/web/client/assets/info-A6RAGUB7-C_XK8Hq0.js +0 -1
  1032. package/dist/web/client/assets/infoDiagram-27XIBGKW-DIe4tJ1i.js +0 -2
  1033. package/dist/web/client/assets/ishikawaDiagram-5VMMS53U-CVl5unKI.js +0 -70
  1034. package/dist/web/client/assets/journeyDiagram-3NMN7TZE-CPEB1Vt8.js +0 -139
  1035. package/dist/web/client/assets/kanban-definition-UXKFOSKX-j-9WXjYQ.js +0 -89
  1036. package/dist/web/client/assets/line-BIDAcEtX.js +0 -1
  1037. package/dist/web/client/assets/mermaid-parser.core-Ux4vssh0.js +0 -7
  1038. package/dist/web/client/assets/mermaid.core-CDuwVKeh.js +0 -44
  1039. package/dist/web/client/assets/mindmap-definition-YA3MSWOX-5MlQEeQ6.js +0 -96
  1040. package/dist/web/client/assets/packet-AYTQ26CC-DRO66c9Q.js +0 -1
  1041. package/dist/web/client/assets/pegDiagram-XKGWAZYB-BakZnSjM.js +0 -1
  1042. package/dist/web/client/assets/pie-WAS4IAKB-BEzcmhz8.js +0 -1
  1043. package/dist/web/client/assets/pieDiagram-E7YTZNPT-DpmqgoPt.js +0 -39
  1044. package/dist/web/client/assets/quadrantDiagram-AXDQQJYC-DuMPwwV2.js +0 -7
  1045. package/dist/web/client/assets/radar-RG4KPBEZ-Djm3oXl5.js +0 -1
  1046. package/dist/web/client/assets/railroad-74A4TZTK-Cpvkwsao.js +0 -1
  1047. package/dist/web/client/assets/railroad-abnf-HS5TGJTU-CpRQ3ruG.js +0 -1
  1048. package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-1Rm5a5eJ.js +0 -1
  1049. package/dist/web/client/assets/railroad-peg-WCYAUIDC-C8344cTh.js +0 -1
  1050. package/dist/web/client/assets/railroadDiagram-O6MQD6OU-CgMS4B6R.js +0 -1
  1051. package/dist/web/client/assets/requirementDiagram-BXWQKSXE-CX5eoNdN.js +0 -84
  1052. package/dist/web/client/assets/sankeyDiagram-P5KCCOFB-CODBX2N3.js +0 -40
  1053. package/dist/web/client/assets/sequenceDiagram-WJ2MYXX4-eUhhF8OR.js +0 -162
  1054. package/dist/web/client/assets/stateDiagram-D77RDMKH-vR6l0NC2.js +0 -1
  1055. package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-BYUm8jLY.js +0 -1
  1056. package/dist/web/client/assets/swimlanes-42K2YHIH-v9Tw_zX7.js +0 -1
  1057. package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-B2jdCvhD.js +0 -8
  1058. package/dist/web/client/assets/timeline-definition-24CTP7MA-DxianbhU.js +0 -120
  1059. package/dist/web/client/assets/treeView-Q6P3EWNA-DLxnZb9R.js +0 -1
  1060. package/dist/web/client/assets/treemap-WGGIJYW6-I7UnZ6xJ.js +0 -1
  1061. package/dist/web/client/assets/vennDiagram-4TSXK5OY-Ar7M8Mrj.js +0 -34
  1062. package/dist/web/client/assets/wardley-WFR3VGLG-B8ZSHeDu.js +0 -1
  1063. package/dist/web/client/assets/wardleyDiagram-VM6X3IG4-Qks2FmIn.js +0 -78
  1064. package/dist/web/client/assets/xychartDiagram-S5SC5T6Z-BBBjRtiE.js +0 -7
  1065. package/dist/web/client/index.html +0 -6
  1066. package/dist/web/ops-worker.js +0 -37
  1067. package/dist/web/reads-worker.js +0 -1726
  1068. package/dist/web/server.js +0 -8499
  1069. package/dist/web-EMGUGGEI.js +0 -13
  1070. package/dist/web-fetch-6BRRVQON.js +0 -805
  1071. package/dist/wiki-generate-XHSJTDOP.js +0 -627
  1072. package/dist/with-panes-Z6BTEHMZ.js +0 -628
  1073. package/evals/README.md +0 -9
  1074. package/evals/behavioral-corpus-grader.mjs +0 -236
  1075. package/evals/behavioral-machinery-baseline.json +0 -2276
  1076. package/evals/behavioral-machinery-driver.ts +0 -250
  1077. package/evals/behavioral-machinery-support.ts +0 -254
  1078. package/evals/behavioral-machinery.yaml +0 -614
  1079. package/evals/behavioral-model-negative-control.yaml +0 -69
  1080. package/evals/behavioral-model.yaml +0 -482
  1081. package/evals/fixtures/behavioral-facts.txt +0 -3
  1082. package/evals/fixtures/behavioral-main.ts +0 -7
  1083. package/evals/fixtures/decoy/note.txt +0 -2
  1084. package/evals/fixtures/docs-retrieval.json +0 -102
  1085. package/evals/fixtures/private/credentials.txt +0 -1
  1086. package/evals/fixtures/scalar-decision.json +0 -17
  1087. package/evals/fixtures/scout-citation-pipeline.json +0 -55
  1088. package/evals/fixtures/source-explanation.json +0 -74
  1089. package/evals/fixtures/tool-arguments.json +0 -18
  1090. package/evals/fixtures/tool-surface/read.txt +0 -4
  1091. package/evals/fixtures/tool-surface/subdir/keep.txt +0 -1
  1092. package/evals/no-edit-memory-grader.mjs +0 -149
  1093. package/evals/scalar-decision-grader.py +0 -41
  1094. package/evals/scalar-decision-machinery.ts +0 -145
  1095. package/evals/source-explanation-grader.mjs +0 -118
  1096. package/evals/tool-surface-grader.mjs +0 -53
  1097. package/evals/tool-surface-model.yaml +0 -274
  1098. package/evals/tracked-metrics-baseline.yaml +0 -229
  1099. package/evals/tracked-metrics-grader.mjs +0 -129
  1100. package/src/cli/web.ts +0 -79
  1101. package/src/domains/providers/runtimes/local-native/ollama-native.ts +0 -122
  1102. /package/dist/assets/{web-notices → gui-notices}/@hono__node-server-LICENSE +0 -0
  1103. /package/dist/assets/{web-notices → gui-notices}/hono-LICENSE +0 -0
  1104. /package/dist/{web → gui}/client/THIRD_PARTY_LICENSES.md +0 -0
  1105. /package/dist/{web → gui}/client/assets/arc-Pry-7G1_.js +0 -0
  1106. /package/dist/{web → gui}/client/assets/array-BifhSqXX.js +0 -0
  1107. /package/dist/{web → gui}/client/assets/atkinson-hyperlegible-next-latin-ext-wght-normal-C6vrW8VD.woff2 +0 -0
  1108. /package/dist/{web → gui}/client/assets/atkinson-hyperlegible-next-latin-wght-normal-BcXVPD7q.woff2 +0 -0
  1109. /package/dist/{web → gui}/client/assets/chunk-2Q5K7J3B-C1jixKkw.js +0 -0
  1110. /package/dist/{web → gui}/client/assets/chunk-5VM5RSS4-ZNzvKenW.js +0 -0
  1111. /package/dist/{web → gui}/client/assets/chunk-FOHPRMQF-CoA4358r.js +0 -0
  1112. /package/dist/{web → gui}/client/assets/chunk-JWPE2WC7-DVXcaiue.js +0 -0
  1113. /package/dist/{web → gui}/client/assets/chunk-XXDRQBXY-DqAYeljN.js +0 -0
  1114. /package/dist/{web → gui}/client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +0 -0
  1115. /package/dist/{web → gui}/client/assets/commit-mono-latin-400-normal-s0S3qwFW.woff +0 -0
  1116. /package/dist/{web → gui}/client/assets/commit-mono-latin-400-normal-wzhe4RuD.woff2 +0 -0
  1117. /package/dist/{web → gui}/client/assets/cose-bilkent-JH36ORCC-CVh1icwb.js +0 -0
  1118. /package/dist/{web → gui}/client/assets/cytoscape.esm-c2aL46s-.js +0 -0
  1119. /package/dist/{web → gui}/client/assets/dagre-C-rnJpZF.js +0 -0
  1120. /package/dist/{web → gui}/client/assets/defaultLocale-BFoDCU3G.js +0 -0
  1121. /package/dist/{web → gui}/client/assets/dist-v5Q1xZ2K.js +0 -0
  1122. /package/dist/{web → gui}/client/assets/graphlib-DS17s2tU.js +0 -0
  1123. /package/dist/{web → gui}/client/assets/init-C-OQMol4.js +0 -0
  1124. /package/dist/{web → gui}/client/assets/katex-ZlcWpGUi.js +0 -0
  1125. /package/dist/{web → gui}/client/assets/linear-SzVmGSw4.js +0 -0
  1126. /package/dist/{web → gui}/client/assets/newsreader-latin-ext-wght-normal-C-3rgBeH.woff2 +0 -0
  1127. /package/dist/{web → gui}/client/assets/newsreader-latin-wght-normal-CCVVNp6i.woff2 +0 -0
  1128. /package/dist/{web → gui}/client/assets/newsreader-vietnamese-wght-normal-Czsa-EzN.woff2 +0 -0
  1129. /package/dist/{web → gui}/client/assets/ordinal-BDEzSJ7C.js +0 -0
  1130. /package/dist/{web → gui}/client/assets/path-fybaL0A-.js +0 -0
  1131. /package/dist/{web → gui}/client/assets/prism-bash-D6zCJ74D.js +0 -0
  1132. /package/dist/{web → gui}/client/assets/prism-c-04YixN25.js +0 -0
  1133. /package/dist/{web → gui}/client/assets/prism-clike-DapgWyxx.js +0 -0
  1134. /package/dist/{web → gui}/client/assets/prism-core-BtsZdCS6.js +0 -0
  1135. /package/dist/{web → gui}/client/assets/prism-cpp-C-lJbC-6.js +0 -0
  1136. /package/dist/{web → gui}/client/assets/prism-css-CPgOzxXp.js +0 -0
  1137. /package/dist/{web → gui}/client/assets/prism-diff-BF8m0_mq.js +0 -0
  1138. /package/dist/{web → gui}/client/assets/prism-docker-DkT6yOFj.js +0 -0
  1139. /package/dist/{web → gui}/client/assets/prism-fortran-Be5x3y1V.js +0 -0
  1140. /package/dist/{web → gui}/client/assets/prism-go-C_8qAH5n.js +0 -0
  1141. /package/dist/{web → gui}/client/assets/prism-ini-BESK3y0r.js +0 -0
  1142. /package/dist/{web → gui}/client/assets/prism-javascript-BnO-swvr.js +0 -0
  1143. /package/dist/{web → gui}/client/assets/prism-json-Dp_-W-Hv.js +0 -0
  1144. /package/dist/{web → gui}/client/assets/prism-jsx-D-D0NWtC.js +0 -0
  1145. /package/dist/{web → gui}/client/assets/prism-julia-DIjOgiAV.js +0 -0
  1146. /package/dist/{web → gui}/client/assets/prism-latex-DNMbqcH_.js +0 -0
  1147. /package/dist/{web → gui}/client/assets/prism-makefile-CRKWLQ8l.js +0 -0
  1148. /package/dist/{web → gui}/client/assets/prism-markdown-C0FPJ1Iz.js +0 -0
  1149. /package/dist/{web → gui}/client/assets/prism-markup-Cp04rIa1.js +0 -0
  1150. /package/dist/{web → gui}/client/assets/prism-matlab-D-nk08al.js +0 -0
  1151. /package/dist/{web → gui}/client/assets/prism-python-CfiSVtM6.js +0 -0
  1152. /package/dist/{web → gui}/client/assets/prism-r-QmNGR8LX.js +0 -0
  1153. /package/dist/{web → gui}/client/assets/prism-rust-Bu9N8X3N.js +0 -0
  1154. /package/dist/{web → gui}/client/assets/prism-shell-session-Be4UuYoM.js +0 -0
  1155. /package/dist/{web → gui}/client/assets/prism-sql-CYhVDMEE.js +0 -0
  1156. /package/dist/{web → gui}/client/assets/prism-toml-DKb54GAT.js +0 -0
  1157. /package/dist/{web → gui}/client/assets/prism-tsx-p6J2Kc_4.js +0 -0
  1158. /package/dist/{web → gui}/client/assets/prism-typescript-BMqONzxf.js +0 -0
  1159. /package/dist/{web → gui}/client/assets/prism-yaml-C0JHu8gr.js +0 -0
  1160. /package/dist/{web → gui}/client/assets/purify.es-ChwZkWde.js +0 -0
  1161. /package/dist/{web → gui}/client/assets/rolldown-runtime-hePW80VL.js +0 -0
  1162. /package/dist/{web → gui}/client/assets/rough.esm-Dy-Kn_BL.js +0 -0
  1163. /package/dist/{web → gui}/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +0 -0
  1164. /package/dist/{web → gui}/client/assets/src-B6xuSHsQ.js +0 -0
  1165. /package/dist/{web → gui}/client/clio-coder-logo.webp +0 -0
  1166. /package/dist/{web → gui}/client/icon-192.png +0 -0
  1167. /package/dist/{web → gui}/client/icon-512.png +0 -0
  1168. /package/dist/{web → gui}/client/manifest.webmanifest +0 -0
  1169. /package/dist/{web → gui}/client/offline.css +0 -0
  1170. /package/dist/{web → gui}/client/offline.html +0 -0
  1171. /package/dist/{web → gui}/client/offline.js +0 -0
  1172. /package/dist/{web → gui}/client/sw.js +0 -0
@@ -0,0 +1,1104 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ GATEWAY_SCHEMA_RUNTIME_ID,
4
+ RESPONSE_SCHEMA_RUNTIME_ID,
5
+ responseSchemaDialectFor
6
+ } from "./chunk-OQ2EOAHA.js";
7
+ import {
8
+ hashToolCall
9
+ } from "./chunk-7QXCO3AF.js";
10
+ import {
11
+ isDispositionedToolResultError
12
+ } from "./chunk-OPD7GL6F.js";
13
+ import {
14
+ engineStreamSimple,
15
+ resolvedRequestContext
16
+ } from "./chunk-L7G7K4I2.js";
17
+ import {
18
+ classify
19
+ } from "./chunk-VYRQHORQ.js";
20
+ import {
21
+ protectArtifact,
22
+ protectedArtifactMutationBlockReason
23
+ } from "./chunk-P4GNZPXO.js";
24
+ import {
25
+ resolveReadPath
26
+ } from "./chunk-C2CPOIH2.js";
27
+ import {
28
+ ToolNames
29
+ } from "./chunk-V4XJWDHR.js";
30
+ import {
31
+ GUARDRAIL_DEFAULTS,
32
+ resolveGuardrail,
33
+ workerSynthesisReserveBlockReason,
34
+ workerSynthesisReserveDirective,
35
+ workerToolCallCapExceededReason,
36
+ workerToolCallCapSynthesisReason
37
+ } from "./chunk-C27U2TYG.js";
38
+ import {
39
+ BusChannels
40
+ } from "./chunk-PS6JAWJZ.js";
41
+ import {
42
+ init_esm_shims
43
+ } from "./chunk-ECBHH7LU.js";
44
+
45
+ // src/domains/safety/protected-artifacts-registration.ts
46
+ init_esm_shims();
47
+ var PROTECTED_ARTIFACTS_REGISTRATION_ID = "guard.protected-artifacts";
48
+ function createProtectedArtifactsRegistration(options = {}) {
49
+ let state = cloneState(options.initialState ?? { artifacts: [] });
50
+ let health = { kind: "healthy" };
51
+ const markDegraded = (reason) => {
52
+ if (health.kind === "degraded") return;
53
+ const degraded = {
54
+ kind: "degraded",
55
+ reason,
56
+ since: (/* @__PURE__ */ new Date()).toISOString()
57
+ };
58
+ health = degraded;
59
+ try {
60
+ options.onDurabilityFailure?.({ ...degraded });
61
+ } catch {
62
+ }
63
+ };
64
+ const absorb = (input, context) => {
65
+ for (const effect of context?.priorEffects ?? []) {
66
+ if (effect.kind !== "protect_path") continue;
67
+ const artifact = artifactFromEffect(effect, input);
68
+ state = protectArtifact(state, artifact);
69
+ try {
70
+ emitProtect(options.onProtect, artifact, input);
71
+ } catch (error) {
72
+ markDegraded(`protected artifact persistence failed: ${error instanceof Error ? error.message : String(error)}`);
73
+ }
74
+ }
75
+ };
76
+ const blockReason = (input) => {
77
+ const toolName = input.toolName ?? "";
78
+ const args = input.toolArgs !== void 0 ? { ...input.toolArgs } : void 0;
79
+ if (health.kind === "degraded") {
80
+ const actionClass = classify({ tool: toolName, ...args !== void 0 ? { args } : {} }).actionClass;
81
+ if (actionClass !== "read") {
82
+ return `protected artifact durability degraded: ${health.reason}; non-read tool '${toolName}' is blocked until protection state is trustworthy`;
83
+ }
84
+ }
85
+ return protectedArtifactMutationBlockReason(state, toolName, args);
86
+ };
87
+ return {
88
+ id: PROTECTED_ARTIFACTS_REGISTRATION_ID,
89
+ description: "blocks mutations of protected paths and absorbs protect_path effects",
90
+ hooks: ["before_tool", "after_tool"],
91
+ state: () => cloneState(state),
92
+ health: () => ({ ...health }),
93
+ replaceState(next) {
94
+ state = cloneState(next);
95
+ health = { kind: "healthy" };
96
+ },
97
+ markDegraded,
98
+ evaluate(input, context) {
99
+ absorb(input, context);
100
+ if (input.hook !== "before_tool") return [];
101
+ const reason = blockReason(input);
102
+ if (reason === null) return [];
103
+ return [{ kind: "block_tool", reason, severity: "hard-block" }];
104
+ }
105
+ };
106
+ }
107
+ function artifactFromEffect(effect, input) {
108
+ const artifact = {
109
+ path: effect.path,
110
+ protectedAt: (/* @__PURE__ */ new Date()).toISOString(),
111
+ reason: effect.reason,
112
+ source: "middleware"
113
+ };
114
+ const validationCommand = input.metadata?.validationCommand;
115
+ if (typeof validationCommand === "string" && validationCommand.length > 0) {
116
+ artifact.validationCommand = validationCommand;
117
+ if (input.metadata?.validationExitCode === 0) artifact.validationExitCode = 0;
118
+ }
119
+ return artifact;
120
+ }
121
+ function emitProtect(sink, artifact, input) {
122
+ if (!sink) return;
123
+ const event = {
124
+ kind: "protect",
125
+ artifact: cloneArtifact(artifact),
126
+ toolName: input.toolName ?? ""
127
+ };
128
+ if (input.runId !== void 0) event.runId = input.runId;
129
+ if (input.sessionId !== void 0) event.sessionId = input.sessionId;
130
+ if (input.turnId !== void 0) event.turnId = input.turnId;
131
+ if (input.toolCallId !== void 0) event.toolCallId = input.toolCallId;
132
+ if (input.correlationId !== void 0) event.correlationId = input.correlationId;
133
+ sink(event);
134
+ }
135
+ function cloneState(state) {
136
+ let next = { artifacts: [] };
137
+ for (const artifact of state.artifacts) {
138
+ next = protectArtifact(next, artifact);
139
+ }
140
+ return next;
141
+ }
142
+ function cloneArtifact(artifact) {
143
+ const clone = {
144
+ path: artifact.path,
145
+ protectedAt: artifact.protectedAt,
146
+ reason: artifact.reason,
147
+ source: artifact.source
148
+ };
149
+ if (artifact.validationCommand !== void 0) clone.validationCommand = artifact.validationCommand;
150
+ if (artifact.validationExitCode !== void 0) clone.validationExitCode = artifact.validationExitCode;
151
+ return clone;
152
+ }
153
+
154
+ // src/engine/loop-guard.ts
155
+ init_esm_shims();
156
+ var LOOP_GUARD_REGISTRATION_ID = "guard.loop";
157
+ var INTERACTIVE_LOOP_BLOCK_BUDGET = 2;
158
+ var WORKER_LOOP_BLOCK_CALLS_PER_BLOCK = 10;
159
+ function workerLoopBlockBudget(toolCalls) {
160
+ if (!Number.isSafeInteger(toolCalls) || toolCalls <= 0) return INTERACTIVE_LOOP_BLOCK_BUDGET;
161
+ return Math.max(INTERACTIVE_LOOP_BLOCK_BUDGET, Math.ceil(toolCalls / WORKER_LOOP_BLOCK_CALLS_PER_BLOCK));
162
+ }
163
+ var LOOP_SYNTHESIS_BACKSTOP_DENIALS = 2;
164
+ var WIDE_BATCH_DENIAL_FLOOR = 32;
165
+ var DEFAULT_WORKER_TOOL_CALL_CAP = GUARDRAIL_DEFAULTS.workerToolCallCap;
166
+ var DEFAULT_ORCH_TURN_TOOL_CALL_BUDGET = GUARDRAIL_DEFAULTS.turnToolCallBudget;
167
+ var ORCH_TURN_TOOL_CALL_HARD_MARGIN = 15;
168
+ var LOOP_GUARD_TURN_LIMIT = 32;
169
+ var SUCCEEDED_FINGERPRINT_LIMIT = 128;
170
+ var NO_TURN_BUCKET = "no-turn";
171
+ var SIZE_ONLY_ARG_KEYS = /* @__PURE__ */ new Set(["limit", "offset", "max_bytes", "context"]);
172
+ var RESULT_STAGNATION_THRESHOLD = 3;
173
+ var CROSS_ARGUMENT_RESULT_MIN_BYTES = 64;
174
+ function stagnationFingerprint(tool, args) {
175
+ const reduced = {};
176
+ for (const [key, value] of Object.entries(args ?? {})) {
177
+ if (!SIZE_ONLY_ARG_KEYS.has(key)) reduced[key] = value;
178
+ }
179
+ return hashToolCall(tool, reduced);
180
+ }
181
+ function stagnationBlockReason(tool, identicalResults) {
182
+ return `loop detected: the last ${identicalResults} ${tool} calls returned byte-identical results even though size arguments (limit/offset) changed. Raising them is not producing new information. Re-read the result above, change the query or tool, or answer from what you have.`;
183
+ }
184
+ function crossArgumentResultMessage(tool, distinctArguments) {
185
+ return `loop guard: ${distinctArguments} distinct ${tool} arguments returned the same substantial result this turn. The tool may be ignoring an argument; re-read the result, change tools, or answer from what you have.`;
186
+ }
187
+ function loopBlockBaseReason(tool, repeatCount, priorSuccesses) {
188
+ const evidence = priorSuccesses > 0 ? `This exact call already succeeded ${priorSuccesses} ${priorSuccesses === 1 ? "time" : "times"} this run; its result is already in the conversation above \u2014 re-read that result before calling tools again. ` : "";
189
+ return `loop detected: ${tool} was called ${repeatCount} times with identical arguments among this turn's recent tool calls. Repeating the exact call is blocked. ${evidence}Change strategy: vary the arguments, use a different tool, or explain what new information you expect before retrying.`;
190
+ }
191
+ function isLockedSynthesisFallbackOnly(message) {
192
+ if (!message || typeof message !== "object" || message.role !== "assistant") return false;
193
+ const content = message.content;
194
+ if (!Array.isArray(content)) return false;
195
+ const text = content.filter((block) => block?.type === "text" && typeof block.text === "string").map((block) => block.text).join("").trim();
196
+ return text === lockedSynthesisFallbackText();
197
+ }
198
+ var LOCKED_SYNTHESIS_REPROMPT_TOOL = "clio_synthesis_reprompt";
199
+ function lockedSynthesisSystemPrompt(systemPrompt, requiredResult) {
200
+ return [
201
+ systemPrompt,
202
+ "# Current execution phase: final synthesis",
203
+ "Tools are disabled for the rest of this run. Earlier instructions to use tools apply only to the completed tool phase. Do not emit tool calls or tool-call markup. Return the final result now using the evidence already observed; preserve all safety rules and the required result format. Do not invent missing evidence.",
204
+ ...requiredResult ? [`Required terminal result: ${requiredResult}`] : []
205
+ ].join("\n\n");
206
+ }
207
+ function lockedSynthesisRepromptMessages(attempt, origin, requiredResult) {
208
+ const id = `clio-synthesis-reprompt-${attempt}`;
209
+ const timestamp = Date.now();
210
+ return [
211
+ {
212
+ role: "assistant",
213
+ content: [{ type: "toolCall", id, name: LOCKED_SYNTHESIS_REPROMPT_TOOL, arguments: {} }],
214
+ stopReason: "toolUse",
215
+ usage: {
216
+ input: 0,
217
+ output: 0,
218
+ cacheRead: 0,
219
+ cacheWrite: 0,
220
+ totalTokens: 0,
221
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 }
222
+ },
223
+ ...origin,
224
+ timestamp
225
+ },
226
+ {
227
+ role: "toolResult",
228
+ toolCallId: id,
229
+ toolName: LOCKED_SYNTHESIS_REPROMPT_TOOL,
230
+ content: [
231
+ {
232
+ type: "text",
233
+ text: "Your previous reply contained only tool-call markup, which cannot run: tool calls are disabled for the rest of this run. Everything you gathered is already in the conversation above. Write the final answer now in the required result format (JSON when a result contract requires it; otherwise prose), with no tool-call markup of any kind." + (requiredResult ? `
234
+ Required terminal result: ${requiredResult}` : "")
235
+ }
236
+ ],
237
+ isError: true,
238
+ timestamp
239
+ }
240
+ ];
241
+ }
242
+ function synthesisLockoutDirective() {
243
+ return "loop guard: this turn reached its tool-call limit after repeated identical calls, so tool calls are now disabled for the rest of this turn. Everything you retrieved is already in the conversation above. Answer now from what you have gathered, preserving the required result format (JSON for a JSON result contract; otherwise prose). Do not write tool-call markup such as <tool_call> blocks; tool calls are disabled and will not run.";
244
+ }
245
+ function synthesisBackstopReason(tool) {
246
+ return `loop guard: tool calls stayed disabled and ${tool} was called again instead of answering, so the turn is being stopped. Summarize what you found for the operator.`;
247
+ }
248
+ function workerExplorationSynthesisDirective(limit) {
249
+ return `worker exploration budget reached (${limit}); exploration tools are now disabled for this run. Return the required result format from the evidence already gathered: keep JSON when the result contract requires JSON, and keep citations grounded in actual reads. Do not retry or substitute another tool call.`;
250
+ }
251
+ function disallowedToolsText(deliveryTools) {
252
+ const candidates = ["code_nav", "ls", "grep", "find", "context", "git", "shell commands"];
253
+ const excluded = candidates.filter((tool) => !deliveryTools.includes(tool));
254
+ return excluded.join(", ");
255
+ }
256
+ function workerLiveReadReserveDirective(remaining, deliveryTools) {
257
+ const admitted = deliveryTools.length > 0 ? `read and ${deliveryTools.join("/")}` : "the read tool";
258
+ const finish = deliveryTools.length > 0 ? `Finish the work: re-read what you will cite and write it with ${deliveryTools.join(" or ")}.` : "Read a specific live file needed for the handoff.";
259
+ return `worker live-read reserve: broad orientation is complete and ${remaining} ${remaining === 1 ? "call remains" : "calls remain"}. Only ${admitted} ${deliveryTools.length > 0 ? "are" : "is"} admitted now. ${finish} Do not substitute ${disallowedToolsText(deliveryTools)}.`;
260
+ }
261
+ function workerDeliveryOnlyDirective(limit, deliveryTools) {
262
+ return `worker discovery budget reached (${limit}); exploration tools are disabled for the rest of this run. Only read and ${deliveryTools.join("/")} are admitted now. Write what you have with ${deliveryTools.join(" or ")} and finish. Do not substitute ${disallowedToolsText(deliveryTools)}.`;
263
+ }
264
+ var DEAD_TOOL_CALL_MARKUP_PATTERNS = [
265
+ /<tool_call>[\s\S]*?<\/tool_call>/gi,
266
+ /<function=[\w.-]+>[\s\S]*?<\/function>/gi,
267
+ /<tool_call>\s*(?:<function=|[{[])[\s\S]*$/i,
268
+ /<function=[\w.-]+>[\s\S]*$/i
269
+ ];
270
+ function stripDeadToolCallMarkup(text) {
271
+ let out = text;
272
+ for (const pattern of DEAD_TOOL_CALL_MARKUP_PATTERNS) {
273
+ out = out.replace(pattern, "");
274
+ }
275
+ return out === text ? text : out.trim();
276
+ }
277
+ function lockedSynthesisFallbackText() {
278
+ return "[Clio Coder] loop guard: tool calls were disabled for the rest of this turn, but the reply contained only tool-call markup, which cannot run and was removed. Ask me to continue with a different approach, or narrow the request.";
279
+ }
280
+ function sanitizeLockedSynthesisMessage(message) {
281
+ if (!message || typeof message !== "object" || message.role !== "assistant") return false;
282
+ const record = message;
283
+ const stopReason = record.stopReason;
284
+ if (stopReason !== void 0 && stopReason !== "stop" && stopReason !== "length") return false;
285
+ if (!Array.isArray(record.content)) return false;
286
+ const blocks = record.content;
287
+ if (blocks.some((block) => block?.type === "toolCall")) return false;
288
+ let changed = false;
289
+ for (const block of blocks) {
290
+ if (block?.type !== "text" || typeof block.text !== "string") continue;
291
+ const stripped = stripDeadToolCallMarkup(block.text);
292
+ if (stripped !== block.text) {
293
+ block.text = stripped;
294
+ changed = true;
295
+ }
296
+ }
297
+ if (!changed) return false;
298
+ const remaining = blocks.filter((block) => block?.type === "text" && typeof block.text === "string").map((block) => block.text).join("").trim();
299
+ if (remaining.length === 0) {
300
+ const firstText = blocks.find(
301
+ (block) => block?.type === "text" && typeof block.text === "string"
302
+ );
303
+ if (firstText) firstText.text = lockedSynthesisFallbackText();
304
+ else blocks.push({ type: "text", text: lockedSynthesisFallbackText() });
305
+ }
306
+ return true;
307
+ }
308
+ function isLoopGuardSynthesisBackstopReason(reason) {
309
+ return /^loop guard: tool calls stayed disabled and .+ was called again instead of answering/.test(reason);
310
+ }
311
+ function readOrchTurnToolCallBudget() {
312
+ const soft = resolveGuardrail("turnToolCallBudget");
313
+ return { soft, hard: soft + ORCH_TURN_TOOL_CALL_HARD_MARGIN };
314
+ }
315
+ function createLoopGuardRegistration(options) {
316
+ const budget = options.turnBlockBudget ?? INTERACTIVE_LOOP_BLOCK_BUDGET;
317
+ const cap = options.toolBudgetAdvisory ? void 0 : options.toolCallCap;
318
+ let advisoryEmitted = false;
319
+ let softLimit = !options.toolBudgetAdvisory && options.toolCallSoftLimit !== void 0 && Number.isSafeInteger(options.toolCallSoftLimit) && options.toolCallSoftLimit > 0 && (cap === void 0 || options.toolCallSoftLimit <= cap) ? options.toolCallSoftLimit : void 0;
320
+ const synthesisLockout = options.turnSynthesisLockout === true;
321
+ let softReadReserve = options.toolCallSoftReadReserve ?? 0;
322
+ let softReadReserveThreshold = softLimit !== void 0 && softReadReserve > 0 && softLimit > softReadReserve ? softLimit - softReadReserve : null;
323
+ const deliveryTools = [...new Set(options.deliveryTools ?? [])];
324
+ const reserveAdmits = (tool) => isReserveAdmittedTool(tool, deliveryTools);
325
+ let softAdmittedCount = 0;
326
+ let softReadReserveEntered = false;
327
+ let reserveDenials = { denials: 0 };
328
+ let deniedAttempts = 0;
329
+ const denialBudget = options.toolCallCap === void 0 ? void 0 : Math.max(options.toolCallCap, WIDE_BATCH_DENIAL_FLOOR);
330
+ const boundRunDenials = (effects, input) => {
331
+ if (denialBudget === void 0 || !effects.some((effect) => effect.kind === "block_tool")) return effects;
332
+ deniedAttempts += 1;
333
+ if (deniedAttempts <= denialBudget) return effects;
334
+ return [{ kind: "block_tool", reason: synthesisBackstopReason(input.toolName ?? "unknown"), severity: "hard-block" }];
335
+ };
336
+ const reserve = options.toolCallReserve ?? 0;
337
+ const reserveThreshold = cap !== void 0 && reserve > 0 && cap > reserve ? cap - reserve : null;
338
+ let reserveDirectiveEmitted = false;
339
+ const blocksByTurn = /* @__PURE__ */ new Map();
340
+ const callsByTurn = /* @__PURE__ */ new Map();
341
+ const mutationEpochByTurn = /* @__PURE__ */ new Map();
342
+ const lockoutByTurn = /* @__PURE__ */ new Map();
343
+ let capLockout = null;
344
+ let softLockout = null;
345
+ const succeededFingerprints = /* @__PURE__ */ new Map();
346
+ const stagnationByTurn = /* @__PURE__ */ new Map();
347
+ const eofByTurn = /* @__PURE__ */ new Map();
348
+ const readCoverage = /* @__PURE__ */ new Map();
349
+ const redundantReadsByTurn = /* @__PURE__ */ new Map();
350
+ const crossArgumentResultsByTurn = /* @__PURE__ */ new Map();
351
+ let count = 0;
352
+ const enterSoftReadReserve = () => {
353
+ if (softReadReserveEntered) return;
354
+ softReadReserveEntered = true;
355
+ options.onSoftReadReserve?.();
356
+ };
357
+ const bumpBoundedCounter = (store, key, limit = LOOP_GUARD_TURN_LIMIT) => {
358
+ if (!store.has(key)) {
359
+ while (store.size >= limit) {
360
+ const oldest = store.keys().next().value;
361
+ if (typeof oldest !== "string") break;
362
+ store.delete(oldest);
363
+ }
364
+ }
365
+ const next = (store.get(key) ?? 0) + 1;
366
+ store.set(key, next);
367
+ return next;
368
+ };
369
+ const resultCarriesEvidence = (details) => {
370
+ const observation = details?.observation;
371
+ if (observation === null || typeof observation !== "object" || Array.isArray(observation)) return true;
372
+ const record = observation;
373
+ return !(record.truncated === true && record.shownCount === 0);
374
+ };
375
+ const recordSuccessfulResult = (input) => {
376
+ if (input.metadata?.resultKind !== "ok") return;
377
+ if (input.toolName === ToolNames.Write || input.toolName === ToolNames.Edit) {
378
+ bumpBoundedCounter(mutationEpochByTurn, input.turnId ?? NO_TURN_BUCKET);
379
+ readCoverage.clear();
380
+ redundantReadsByTurn.clear();
381
+ }
382
+ if (!resultCarriesEvidence(input.toolResultDetails)) return;
383
+ const tool = input.toolName;
384
+ if (typeof tool !== "string" || tool.length === 0) return;
385
+ bumpBoundedCounter(succeededFingerprints, hashToolCall(tool, input.toolArgs ?? {}), SUCCEEDED_FINGERPRINT_LIMIT);
386
+ };
387
+ const recordResultForStagnation = (input) => {
388
+ const turnKey = input.turnId ?? NO_TURN_BUCKET;
389
+ const tool = input.toolName;
390
+ const resultFingerprint = input.metadata?.resultFingerprint;
391
+ if (typeof tool !== "string" || tool.length === 0 || input.metadata?.resultKind !== "ok" || typeof resultFingerprint !== "string") {
392
+ stagnationByTurn.delete(turnKey);
393
+ return;
394
+ }
395
+ const reducedFingerprint = stagnationFingerprint(tool, input.toolArgs);
396
+ const previous = stagnationByTurn.get(turnKey);
397
+ if (previous !== void 0 && previous.reducedFingerprint === reducedFingerprint && previous.resultFingerprint === resultFingerprint) {
398
+ previous.streak += 1;
399
+ return;
400
+ }
401
+ if (!stagnationByTurn.has(turnKey)) {
402
+ while (stagnationByTurn.size >= LOOP_GUARD_TURN_LIMIT) {
403
+ const oldest = stagnationByTurn.keys().next().value;
404
+ if (typeof oldest !== "string") break;
405
+ stagnationByTurn.delete(oldest);
406
+ }
407
+ }
408
+ stagnationByTurn.set(turnKey, { reducedFingerprint, resultFingerprint, streak: 1 });
409
+ };
410
+ const crossArgumentResultEffects = (input) => {
411
+ const turnKey = input.turnId ?? NO_TURN_BUCKET;
412
+ const tool = input.toolName;
413
+ const resultFingerprint = input.metadata?.resultFingerprint;
414
+ const resultBytes = input.metadata?.resultBytes;
415
+ if (typeof tool !== "string" || tool.length === 0 || input.metadata?.actionClass !== "read" || input.metadata?.resultKind !== "ok" || typeof resultFingerprint !== "string" || typeof resultBytes !== "number" || resultBytes < CROSS_ARGUMENT_RESULT_MIN_BYTES || !resultCarriesEvidence(input.toolResultDetails)) {
416
+ crossArgumentResultsByTurn.delete(turnKey);
417
+ return [];
418
+ }
419
+ const argumentFingerprint = stagnationFingerprint(tool, input.toolArgs);
420
+ const previous = crossArgumentResultsByTurn.get(turnKey);
421
+ if (previous?.tool === tool && previous.resultFingerprint === resultFingerprint) {
422
+ if (previous.warned) return [];
423
+ previous.argumentFingerprints.add(argumentFingerprint);
424
+ if (previous.argumentFingerprints.size >= RESULT_STAGNATION_THRESHOLD) {
425
+ previous.warned = true;
426
+ return [
427
+ {
428
+ kind: "annotate_tool_result",
429
+ message: crossArgumentResultMessage(tool, previous.argumentFingerprints.size),
430
+ severity: "warn"
431
+ }
432
+ ];
433
+ }
434
+ return [];
435
+ }
436
+ if (!crossArgumentResultsByTurn.has(turnKey)) {
437
+ while (crossArgumentResultsByTurn.size >= LOOP_GUARD_TURN_LIMIT) {
438
+ const oldest = crossArgumentResultsByTurn.keys().next().value;
439
+ if (typeof oldest !== "string") break;
440
+ crossArgumentResultsByTurn.delete(oldest);
441
+ }
442
+ }
443
+ crossArgumentResultsByTurn.set(turnKey, {
444
+ tool,
445
+ resultFingerprint,
446
+ argumentFingerprints: /* @__PURE__ */ new Set([argumentFingerprint]),
447
+ warned: false
448
+ });
449
+ return [];
450
+ };
451
+ const bumpTurnBlocks = (turnId) => bumpBoundedCounter(blocksByTurn, turnId);
452
+ const enterLockout = (input, turnKey, state) => {
453
+ if (!lockoutByTurn.has(turnKey)) {
454
+ while (lockoutByTurn.size >= LOOP_GUARD_TURN_LIMIT) {
455
+ const oldest = lockoutByTurn.keys().next().value;
456
+ if (typeof oldest !== "string") break;
457
+ lockoutByTurn.delete(oldest);
458
+ }
459
+ }
460
+ lockoutByTurn.set(turnKey, {
461
+ ...state,
462
+ denials: 0,
463
+ ...input.correlationId !== void 0 ? { correlationId: input.correlationId } : {}
464
+ });
465
+ };
466
+ const reachesLockoutBackstop = (state, input) => {
467
+ if (input.correlationId !== void 0 && state.correlationId === input.correlationId) return false;
468
+ state.denials += 1;
469
+ if (input.correlationId !== void 0) state.correlationId = input.correlationId;
470
+ else delete state.correlationId;
471
+ return state.denials > LOOP_SYNTHESIS_BACKSTOP_DENIALS;
472
+ };
473
+ const emitLoopBlocked = (input, info, at) => {
474
+ const payload = {
475
+ tool: info.tool,
476
+ repeatCount: info.repeatCount,
477
+ blocksThisTurn: info.blocksThisTurn,
478
+ budget,
479
+ interrupted: info.disposition === "stop",
480
+ disposition: info.disposition,
481
+ at,
482
+ ...input.turnId !== void 0 ? { turnId: input.turnId } : {}
483
+ };
484
+ options.bus?.emit(BusChannels.LoopBlocked, payload);
485
+ };
486
+ const emitBudgetEvent = (input, turnBudget, callsThisTurn, interrupted, at) => {
487
+ const payload = {
488
+ tool: input.toolName ?? "unknown",
489
+ callsThisTurn,
490
+ softBudget: turnBudget.soft,
491
+ hardCeiling: turnBudget.hard,
492
+ interrupted,
493
+ at,
494
+ ...input.turnId !== void 0 ? { turnId: input.turnId } : {}
495
+ };
496
+ options.bus?.emit(BusChannels.ToolBudgetExceeded, payload);
497
+ };
498
+ const evaluateTurnBudget = (input, now) => {
499
+ const budgetSource = options.turnToolCallBudget;
500
+ const turnBudget = typeof budgetSource === "function" ? budgetSource() : budgetSource;
501
+ if (turnBudget === void 0) return null;
502
+ const turnKey = input.turnId ?? NO_TURN_BUCKET;
503
+ const callsThisTurn = bumpBoundedCounter(callsByTurn, turnKey);
504
+ if (callsThisTurn >= turnBudget.hard) {
505
+ if (callsThisTurn === turnBudget.hard) emitBudgetEvent(input, turnBudget, callsThisTurn, true, now);
506
+ return [
507
+ {
508
+ kind: "block_tool",
509
+ reason: `tool-call budget exhausted: ${callsThisTurn} tool calls in this turn reached the hard ceiling (${turnBudget.hard}); the turn is being stopped. Summarize what you found and wait for the operator.`,
510
+ severity: "hard-block"
511
+ }
512
+ ];
513
+ }
514
+ if (callsThisTurn >= turnBudget.soft) {
515
+ if (callsThisTurn === turnBudget.soft) emitBudgetEvent(input, turnBudget, callsThisTurn, false, now);
516
+ return [
517
+ {
518
+ kind: "block_tool",
519
+ reason: `tool-call budget: you have made ${callsThisTurn} tool calls in this turn (soft budget ${turnBudget.soft}). Every further tool call this turn will be blocked, so do not retry this call and do not substitute another one. Summarize what you have found so far in the required result format, state the single next step you propose, and wait for the operator.`,
520
+ severity: "hard-block"
521
+ }
522
+ ];
523
+ }
524
+ return null;
525
+ };
526
+ const blockAsLoop = (input, turnKey, tool, repeatCount, baseReason, now) => {
527
+ const blocksThisTurn = bumpTurnBlocks(turnKey);
528
+ const reachedBudget = blocksThisTurn >= budget;
529
+ if (synthesisLockout && reachedBudget) {
530
+ enterLockout(input, turnKey, { tool, repeatCount, blocksThisTurn });
531
+ options.onSynthesisLockout?.();
532
+ emitLoopBlocked(input, { tool, repeatCount, blocksThisTurn, disposition: "lockout" }, now);
533
+ return [{ kind: "block_tool", reason: synthesisLockoutDirective(), severity: "hard-block" }];
534
+ }
535
+ emitLoopBlocked(input, { tool, repeatCount, blocksThisTurn, disposition: reachedBudget ? "stop" : "block" }, now);
536
+ const reason = reachedBudget ? `${baseReason} Loop budget exhausted (${blocksThisTurn} blocks this turn); the agent is being stopped.` : baseReason;
537
+ return [{ kind: "block_tool", reason, severity: "hard-block" }];
538
+ };
539
+ const readCoverageEffects = (input) => {
540
+ const turnKey = input.turnId ?? NO_TURN_BUCKET;
541
+ const reset = () => {
542
+ redundantReadsByTurn.delete(turnKey);
543
+ return [];
544
+ };
545
+ const details = input.toolResultDetails;
546
+ const file = details?.file;
547
+ const observation = details?.observation;
548
+ const path = input.toolArgs?.path;
549
+ const offset = input.toolArgs?.offset ?? 1;
550
+ const resultBytes = input.metadata?.resultBytes;
551
+ const deliveredCap = Math.min(options.readResultMaxBytes ?? 0, resolveGuardrail("readMaxBytes"));
552
+ if (!Number.isFinite(deliveredCap) || deliveredCap <= 0 || typeof resultBytes !== "number" || !Number.isFinite(resultBytes) || resultBytes > deliveredCap || input.toolName !== ToolNames.Read || input.metadata?.resultKind !== "ok" || typeof path !== "string" || input.toolArgs?.tail !== void 0 || typeof offset !== "number" || !Number.isSafeInteger(offset) || offset < 1 || typeof file?.bytes !== "number" || !Number.isFinite(file.bytes) || typeof file.mtimeMs !== "number" || !Number.isFinite(file.mtimeMs) || details?.fileChange !== void 0 || observation?.tool !== ToolNames.Read || observation.unit !== "lines" || observation.format !== "text" || typeof observation.shownCount !== "number" || !Number.isSafeInteger(observation.shownCount) || observation.shownCount <= 0)
553
+ return reset();
554
+ const end = offset + observation.shownCount - 1;
555
+ const coveredEnd = end - (observation.truncated === true ? 1 : 0);
556
+ if (!Number.isSafeInteger(end)) return reset();
557
+ let canonicalPath;
558
+ try {
559
+ canonicalPath = resolveReadPath(path);
560
+ } catch {
561
+ return reset();
562
+ }
563
+ const key = `${turnKey}\0${canonicalPath}\0${input.toolArgs?.line_numbers === true}`;
564
+ let entry = readCoverage.get(key);
565
+ if (!entry || entry.bytes !== file.bytes || entry.mtimeMs !== file.mtimeMs) {
566
+ entry = { bytes: file.bytes, mtimeMs: file.mtimeMs, ranges: [] };
567
+ }
568
+ const redundant = entry.ranges.some(([start, stop]) => start <= offset && stop >= end);
569
+ const ranges = [...entry.ranges];
570
+ if (coveredEnd >= offset) ranges.push([offset, coveredEnd]);
571
+ ranges.sort((a, b) => a[0] - b[0]);
572
+ entry.ranges = [];
573
+ for (const range of ranges) {
574
+ const last = entry.ranges.at(-1);
575
+ if (last && range[0] <= last[1] + 1) last[1] = Math.max(last[1], range[1]);
576
+ else entry.ranges.push(range);
577
+ }
578
+ entry.ranges = entry.ranges.slice(-SUCCEEDED_FINGERPRINT_LIMIT);
579
+ readCoverage.delete(key);
580
+ if (readCoverage.size >= SUCCEEDED_FINGERPRINT_LIMIT) {
581
+ const oldest = readCoverage.keys().next().value;
582
+ if (oldest !== void 0) readCoverage.delete(oldest);
583
+ }
584
+ readCoverage.set(key, entry);
585
+ if (!redundant) return reset();
586
+ const streak = bumpBoundedCounter(redundantReadsByTurn, turnKey);
587
+ if (streak < RESULT_STAGNATION_THRESHOLD || lockoutByTurn.has(turnKey)) return [];
588
+ const reason = `loop detected: ${streak} consecutive read calls returned only source lines already observed from unchanged files. Reuse the evidence above and return the required result format; do not page through it again.`;
589
+ return blockAsLoop(input, turnKey, ToolNames.Read, streak, reason, options.now?.() ?? Date.now()).map(
590
+ (effect) => effect.kind === "block_tool" ? { kind: "annotate_tool_result", message: effect.reason, severity: "warn" } : effect
591
+ );
592
+ };
593
+ const readEofEffects = (input) => {
594
+ const turnKey = input.turnId ?? NO_TURN_BUCKET;
595
+ const details = input.toolResultDetails;
596
+ const file = details?.file;
597
+ if (input.toolName !== ToolNames.Read || input.metadata?.resultKind !== "error" || details?.code !== "read_past_eof" || typeof input.toolArgs?.path !== "string" || typeof file?.bytes !== "number" || !Number.isFinite(file.bytes) || typeof file.mtimeMs !== "number" || !Number.isFinite(file.mtimeMs) || typeof details.totalLines !== "number" || !Number.isSafeInteger(details.totalLines) || details.totalLines < 0) {
598
+ eofByTurn.delete(turnKey);
599
+ return [];
600
+ }
601
+ let path;
602
+ try {
603
+ path = resolveReadPath(input.toolArgs.path);
604
+ } catch {
605
+ eofByTurn.delete(turnKey);
606
+ return [];
607
+ }
608
+ const identity = JSON.stringify([path, file.bytes, file.mtimeMs, details.totalLines]);
609
+ const previous = eofByTurn.get(turnKey);
610
+ const streak = previous?.identity === identity ? previous.streak + 1 : 1;
611
+ if (!eofByTurn.has(turnKey) && eofByTurn.size >= LOOP_GUARD_TURN_LIMIT) {
612
+ const oldest = eofByTurn.keys().next().value;
613
+ if (oldest !== void 0) eofByTurn.delete(oldest);
614
+ }
615
+ eofByTurn.set(turnKey, { identity, streak });
616
+ if (streak < 2 || lockoutByTurn.has(turnKey)) return [];
617
+ const reason = `loop detected: ${streak} consecutive reads went past the end of the same unchanged file. Changing offset or limit cannot reveal more content. Reuse the evidence already returned and synthesize the answer.`;
618
+ return blockAsLoop(input, turnKey, ToolNames.Read, streak, reason, options.now?.() ?? Date.now()).map(
619
+ (effect) => effect.kind === "block_tool" ? { kind: "annotate_tool_result", message: effect.reason, severity: "warn" } : effect
620
+ );
621
+ };
622
+ return {
623
+ id: LOOP_GUARD_REGISTRATION_ID,
624
+ description: "blocks repeated tool calls, enforces tool-call caps, and annotates substantial identical read results across distinct arguments",
625
+ hooks: ["before_tool", "after_tool"],
626
+ callCount: () => count,
627
+ extendWorkerToolCallPhase(phase) {
628
+ if (lockoutByTurn.size > 0 || capLockout !== null || softLimit === void 0 || !Number.isSafeInteger(phase.toolCalls) || !Number.isSafeInteger(phase.readReserve) || phase.toolCalls <= 0 || phase.readReserve < 0 || phase.readReserve >= phase.toolCalls || cap !== void 0 && phase.toolCalls > cap || phase.toolCalls < softLimit || phase.toolCalls === softLimit && phase.readReserve <= softReadReserve) {
629
+ return false;
630
+ }
631
+ softLimit = phase.toolCalls;
632
+ softReadReserve = phase.readReserve;
633
+ softReadReserveThreshold = softReadReserve > 0 && softLimit > softReadReserve ? softLimit - softReadReserve : null;
634
+ softReadReserveEntered = false;
635
+ softLockout = null;
636
+ reserveDenials = { denials: 0 };
637
+ return true;
638
+ },
639
+ evaluate(input) {
640
+ if (input.metadata?.nested === true) return [];
641
+ if (input.hook === "after_tool") {
642
+ recordSuccessfulResult(input);
643
+ recordResultForStagnation(input);
644
+ const effects = [...crossArgumentResultEffects(input), ...readCoverageEffects(input), ...readEofEffects(input)];
645
+ if (options.toolBudgetAdvisory && !advisoryEmitted && count >= (options.toolCallSoftLimit ?? options.toolCallCap ?? Infinity)) {
646
+ advisoryEmitted = true;
647
+ effects.push({
648
+ kind: "annotate_tool_result",
649
+ message: `Advisory tool estimate reached (${count} calls). Reassess remaining work and finish the assignment; tools remain available. Explicit task requirements still apply.`,
650
+ severity: "warn"
651
+ });
652
+ }
653
+ if (softReadReserveEntered && softLockout === null && deliveryTools.length === 0 && input.toolName === ToolNames.Read) {
654
+ effects.push({ kind: "require_tool", toolName: ToolNames.Read });
655
+ }
656
+ if (reserveThreshold !== null && cap !== void 0 && !reserveDirectiveEmitted && count > reserveThreshold && count <= cap) {
657
+ reserveDirectiveEmitted = true;
658
+ effects.push({
659
+ kind: "annotate_tool_result",
660
+ message: workerSynthesisReserveDirective(Math.max(0, cap - count), cap),
661
+ severity: "warn"
662
+ });
663
+ }
664
+ return effects;
665
+ }
666
+ const now = options.now?.() ?? Date.now();
667
+ const turnKey = input.turnId ?? NO_TURN_BUCKET;
668
+ const decide = () => {
669
+ if (capLockout !== null && cap !== void 0) {
670
+ if (reachesLockoutBackstop(capLockout, input)) {
671
+ return [
672
+ { kind: "block_tool", reason: synthesisBackstopReason(input.toolName ?? "unknown"), severity: "hard-block" }
673
+ ];
674
+ }
675
+ return [{ kind: "block_tool", reason: workerToolCallCapSynthesisReason(cap), severity: "hard-block" }];
676
+ }
677
+ if (softLockout !== null && softLimit !== void 0) {
678
+ if (reachesLockoutBackstop(softLockout, input)) {
679
+ return [
680
+ { kind: "block_tool", reason: synthesisBackstopReason(input.toolName ?? "unknown"), severity: "hard-block" }
681
+ ];
682
+ }
683
+ return [{ kind: "block_tool", reason: workerExplorationSynthesisDirective(softLimit), severity: "hard-block" }];
684
+ }
685
+ const lockout = synthesisLockout ? lockoutByTurn.get(turnKey) : void 0;
686
+ if (lockout !== void 0) {
687
+ if (reachesLockoutBackstop(lockout, input)) {
688
+ emitLoopBlocked(
689
+ input,
690
+ {
691
+ tool: lockout.tool,
692
+ repeatCount: lockout.repeatCount,
693
+ blocksThisTurn: lockout.blocksThisTurn,
694
+ disposition: "stop"
695
+ },
696
+ now
697
+ );
698
+ return [{ kind: "block_tool", reason: synthesisBackstopReason(lockout.tool), severity: "hard-block" }];
699
+ }
700
+ return [{ kind: "block_tool", reason: synthesisLockoutDirective(), severity: "hard-block" }];
701
+ }
702
+ if (softLimit !== void 0) {
703
+ const spentSoftLimit = softAdmittedCount >= softLimit;
704
+ if (spentSoftLimit && deliveryTools.length === 0) {
705
+ softLockout = {
706
+ denials: 0,
707
+ ...input.correlationId !== void 0 ? { correlationId: input.correlationId } : {}
708
+ };
709
+ options.onSynthesisLockout?.();
710
+ return [{ kind: "block_tool", reason: workerExplorationSynthesisDirective(softLimit), severity: "hard-block" }];
711
+ }
712
+ const inReserve = softReadReserveThreshold !== null && softAdmittedCount >= softReadReserveThreshold;
713
+ if (spentSoftLimit || inReserve) {
714
+ enterSoftReadReserve();
715
+ if (!reserveAdmits(input.toolName)) {
716
+ if (reachesLockoutBackstop(reserveDenials, input)) {
717
+ softLockout = {
718
+ denials: 0,
719
+ ...input.correlationId !== void 0 ? { correlationId: input.correlationId } : {}
720
+ };
721
+ options.onSynthesisLockout?.();
722
+ return [{ kind: "block_tool", reason: workerExplorationSynthesisDirective(softLimit), severity: "hard-block" }];
723
+ }
724
+ return [
725
+ {
726
+ kind: "block_tool",
727
+ reason: spentSoftLimit ? workerDeliveryOnlyDirective(softLimit, deliveryTools) : workerLiveReadReserveDirective(softLimit - softAdmittedCount, deliveryTools),
728
+ severity: "hard-block"
729
+ }
730
+ ];
731
+ }
732
+ }
733
+ }
734
+ if (reserveThreshold !== null && cap !== void 0 && count >= reserveThreshold && !reserveAdmits(input.toolName)) {
735
+ if (reachesLockoutBackstop(reserveDenials, input)) {
736
+ if (synthesisLockout) {
737
+ capLockout = {
738
+ denials: 0,
739
+ ...input.correlationId !== void 0 ? { correlationId: input.correlationId } : {}
740
+ };
741
+ options.onSynthesisLockout?.();
742
+ }
743
+ return [{ kind: "block_tool", reason: workerToolCallCapSynthesisReason(cap), severity: "hard-block" }];
744
+ }
745
+ return [
746
+ {
747
+ kind: "block_tool",
748
+ reason: workerSynthesisReserveBlockReason(input.toolName ?? "unknown", Math.max(1, cap - count), cap),
749
+ severity: "hard-block"
750
+ }
751
+ ];
752
+ }
753
+ count += 1;
754
+ reserveDenials = { denials: 0 };
755
+ if (softLimit !== void 0) {
756
+ softAdmittedCount += 1;
757
+ if (softReadReserveThreshold !== null && softAdmittedCount >= softReadReserveThreshold) enterSoftReadReserve();
758
+ if (softAdmittedCount >= softLimit) {
759
+ if (deliveryTools.length === 0) {
760
+ softLockout = {
761
+ denials: 0,
762
+ ...input.correlationId !== void 0 ? { correlationId: input.correlationId } : {}
763
+ };
764
+ options.onSynthesisLockout?.();
765
+ }
766
+ options.onSoftLimitFinalCallAdmitted?.(input.toolCallId);
767
+ }
768
+ }
769
+ if (cap !== void 0 && count > cap) {
770
+ if (!synthesisLockout) {
771
+ return [{ kind: "block_tool", reason: workerToolCallCapExceededReason(cap), severity: "hard-block" }];
772
+ }
773
+ capLockout = {
774
+ denials: 0,
775
+ ...input.correlationId !== void 0 ? { correlationId: input.correlationId } : {}
776
+ };
777
+ options.onSynthesisLockout?.();
778
+ return [{ kind: "block_tool", reason: workerToolCallCapSynthesisReason(cap), severity: "hard-block" }];
779
+ }
780
+ const fingerprint = input.metadata?.callFingerprint;
781
+ if (typeof fingerprint !== "string" || fingerprint.length === 0) {
782
+ return evaluateTurnBudget(input, now) ?? [];
783
+ }
784
+ const epoch = mutationEpochByTurn.get(turnKey) ?? 0;
785
+ const verdict = options.safety.observeLoop(`${turnKey}|${epoch}|${fingerprint}`, now);
786
+ if (verdict.looping) {
787
+ const tool = input.toolName ?? "unknown";
788
+ const priorSuccesses = succeededFingerprints.get(fingerprint) ?? 0;
789
+ return blockAsLoop(
790
+ input,
791
+ turnKey,
792
+ tool,
793
+ verdict.count,
794
+ loopBlockBaseReason(tool, verdict.count, priorSuccesses),
795
+ now
796
+ );
797
+ }
798
+ const toolName = input.toolName;
799
+ if (typeof toolName === "string" && toolName.length > 0) {
800
+ const entry = stagnationByTurn.get(turnKey);
801
+ if (entry !== void 0 && entry.streak >= RESULT_STAGNATION_THRESHOLD - 1 && entry.reducedFingerprint === stagnationFingerprint(toolName, input.toolArgs)) {
802
+ return blockAsLoop(
803
+ input,
804
+ turnKey,
805
+ toolName,
806
+ entry.streak + 1,
807
+ stagnationBlockReason(toolName, entry.streak),
808
+ now
809
+ );
810
+ }
811
+ }
812
+ return evaluateTurnBudget(input, now) ?? [];
813
+ };
814
+ return boundRunDenials(decide(), input);
815
+ }
816
+ };
817
+ }
818
+ function isReserveAdmittedTool(tool, deliveryTools) {
819
+ return tool === ToolNames.Read || tool !== void 0 && deliveryTools.includes(tool);
820
+ }
821
+ function resolveDeliveryTools(allowedTools, product) {
822
+ const candidates = product === "orientation" ? [ToolNames.Write, ToolNames.Edit, ToolNames.CodeNav] : [ToolNames.Write, ToolNames.Edit];
823
+ if (allowedTools instanceof Set) {
824
+ return candidates.filter((tool) => allowedTools.has(tool));
825
+ }
826
+ return candidates.filter((tool) => allowedTools.includes(tool));
827
+ }
828
+
829
+ // src/engine/agent.ts
830
+ init_esm_shims();
831
+ import { createInitialSystemMessage, toToolDeclaration } from "@earendil-works/pi-ai";
832
+ import { Agent } from "@earendil-works/pi-agent-core";
833
+ function dispositionAwareAfterToolCall(delegate) {
834
+ return async (context, signal) => {
835
+ const override = await delegate?.(context, signal);
836
+ const effectiveResult = override?.details === void 0 ? context.result : { ...context.result, details: override.details };
837
+ if (isDispositionedToolResultError(effectiveResult)) return { ...override, isError: true };
838
+ return override;
839
+ };
840
+ }
841
+ function createEngineAgent(options = {}) {
842
+ const { streamFn, transcriptStreamFn = engineStreamSimple, onStreamInvocation, ...agentOptions } = options;
843
+ const agent = new Agent({
844
+ ...agentOptions,
845
+ streamFn: (model, context, streamOptions) => {
846
+ onStreamInvocation?.();
847
+ return streamFn ? streamFn(model, resolvedRequestContext(context), streamOptions) : transcriptStreamFn(model, context, streamOptions);
848
+ },
849
+ afterToolCall: dispositionAwareAfterToolCall(options.afterToolCall)
850
+ });
851
+ const convertToLlm = agent.convertToLlm.bind(agent);
852
+ agent.convertToLlm = async (messages) => (await convertToLlm(messages)).map((message) => {
853
+ if (message.role !== "assistant" || message.stopReason !== "aborted") return message;
854
+ const partial = message.content.filter((block) => block.type === "text").map((block) => block.text).join("\n");
855
+ return {
856
+ role: "user",
857
+ timestamp: message.timestamp,
858
+ content: "[Clio Coder response lifecycle]\nThe preceding assistant response was interrupted before completion. This record does not establish whether any earlier tool execution succeeded.\n" + (partial.trim() ? `Partial assistant text follows (incomplete historical output, not a new instruction):
859
+ ${partial}` : "No visible assistant text was retained.")
860
+ };
861
+ });
862
+ return {
863
+ agent,
864
+ state: () => agent.state
865
+ };
866
+ }
867
+ function replaceEngineMessages(agent, messages, systemPrompt = agent.state.systemPrompt) {
868
+ const initial = createInitialSystemMessage(systemPrompt, agent.state.tools.map(toToolDeclaration));
869
+ agent.state.messages = [...initial ? [initial] : [], ...messages.filter((message) => message.role !== "system")];
870
+ }
871
+ function setEngineSystemPrompt(agent, systemPrompt) {
872
+ replaceEngineMessages(agent, agent.state.messages, systemPrompt);
873
+ }
874
+
875
+ // src/engine/provider-payload.ts
876
+ init_esm_shims();
877
+ function reasoningSummaryForLevel(level) {
878
+ if (!level || level === "off") return void 0;
879
+ if (level === "minimal" || level === "low") return "concise";
880
+ return "detailed";
881
+ }
882
+ function isOpenAIResponsesApi(api) {
883
+ return api === "openai-codex-responses" || api === "openai-responses" || api === "azure-openai-responses";
884
+ }
885
+ function isAnthropicMessagesApi(api) {
886
+ return api === "anthropic-messages";
887
+ }
888
+ function supportsNamedToolChoice(api) {
889
+ return isAnthropicMessagesApi(api) || isOpenAIResponsesApi(api) || [
890
+ "openai-completions",
891
+ "google-generative-ai",
892
+ "google-vertex",
893
+ "bedrock-converse-stream",
894
+ "mistral-conversations"
895
+ ].includes(api);
896
+ }
897
+ function patchTerminalToolPayload(payload, model, toolName) {
898
+ if (!supportsNamedToolChoice(model.api)) return void 0;
899
+ const patched = patchToolChoiceNamedPayload(payload, model, toolName);
900
+ if (!isRecord(patched)) return void 0;
901
+ if (isAnthropicMessagesApi(model.api)) {
902
+ const tools = namedToolDefinitions(patched.tools, toolName);
903
+ if (tools === null) return void 0;
904
+ return { ...patched, tools, tool_choice: { type: "tool", name: toolName, disable_parallel_tool_use: true } };
905
+ }
906
+ if (model.api === "openai-completions" || isOpenAIResponsesApi(model.api)) {
907
+ return { ...patched, parallel_tool_calls: false };
908
+ }
909
+ return patched;
910
+ }
911
+ function isRecord(value) {
912
+ return typeof value === "object" && value !== null && !Array.isArray(value);
913
+ }
914
+ function namedToolDefinitions(tools, toolName) {
915
+ if (!Array.isArray(tools)) return null;
916
+ const narrowed = [];
917
+ for (const tool of tools) {
918
+ if (!isRecord(tool)) continue;
919
+ const directName = typeof tool.name === "string" ? tool.name : void 0;
920
+ const functionName = isRecord(tool.function) && typeof tool.function.name === "string" ? tool.function.name : void 0;
921
+ const toolSpecName = isRecord(tool.toolSpec) && typeof tool.toolSpec.name === "string" ? tool.toolSpec.name : void 0;
922
+ if (directName === toolName || functionName === toolName || toolSpecName === toolName) {
923
+ narrowed.push(tool);
924
+ continue;
925
+ }
926
+ if (Array.isArray(tool.functionDeclarations)) {
927
+ const declarations = tool.functionDeclarations.filter(
928
+ (declaration) => isRecord(declaration) && declaration.name === toolName
929
+ );
930
+ if (declarations.length > 0) narrowed.push({ ...tool, functionDeclarations: declarations });
931
+ }
932
+ }
933
+ return narrowed.length > 0 ? narrowed : null;
934
+ }
935
+ function patchOpenAIReasoningSummaryPayload(payload, model, thinkingLevel) {
936
+ if (!isOpenAIResponsesApi(model.api)) return void 0;
937
+ const summary = reasoningSummaryForLevel(thinkingLevel);
938
+ if (!summary || !isRecord(payload)) return void 0;
939
+ const record = payload;
940
+ const reasoning = record.reasoning;
941
+ if (!isRecord(reasoning)) return void 0;
942
+ return {
943
+ ...record,
944
+ reasoning: {
945
+ ...reasoning,
946
+ summary
947
+ }
948
+ };
949
+ }
950
+ function patchProviderThinkingPayload(payload, model, thinkingLevel) {
951
+ return patchOpenAIReasoningSummaryPayload(payload, model, thinkingLevel);
952
+ }
953
+ function patchToolChoiceNonePayload(payload, model) {
954
+ if (!isRecord(payload)) return void 0;
955
+ if (!("tools" in payload) || payload.tools === void 0 || payload.tools === null) return void 0;
956
+ if (isAnthropicMessagesApi(model.api)) return { ...payload, tool_choice: { type: "none" } };
957
+ return { ...payload, tool_choice: "none" };
958
+ }
959
+ function patchToolSurfaceLockedPayload(payload, model) {
960
+ if (!isRecord(payload)) return void 0;
961
+ if (!("tools" in payload) || payload.tools === void 0 || payload.tools === null) return void 0;
962
+ if (isAnthropicMessagesApi(model.api)) return patchToolChoiceNonePayload(payload, model);
963
+ const stripped = { ...payload };
964
+ delete stripped.tools;
965
+ delete stripped.tool_choice;
966
+ return stripped;
967
+ }
968
+ function patchToolChoiceNamedPayload(payload, model, toolName) {
969
+ if (!isRecord(payload) || toolName.trim().length === 0) return void 0;
970
+ if (isAnthropicMessagesApi(model.api)) {
971
+ const tools2 = namedToolDefinitions(payload.tools, toolName);
972
+ if (tools2 === null) return void 0;
973
+ const patched = { ...payload };
974
+ delete patched.thinking;
975
+ if (isRecord(patched.output_config) && "effort" in patched.output_config) {
976
+ const outputConfig = { ...patched.output_config };
977
+ delete outputConfig.effort;
978
+ if (Object.keys(outputConfig).length > 0) patched.output_config = outputConfig;
979
+ else delete patched.output_config;
980
+ }
981
+ return { ...patched, tool_choice: { type: "tool", name: toolName } };
982
+ }
983
+ if (model.api === "google-generative-ai" || model.api === "google-vertex") {
984
+ if (!isRecord(payload.config) || payload.config.tools === void 0 || payload.config.tools === null)
985
+ return void 0;
986
+ const tools2 = namedToolDefinitions(payload.config.tools, toolName);
987
+ if (tools2 === null) return void 0;
988
+ const toolConfig = isRecord(payload.config.toolConfig) ? payload.config.toolConfig : {};
989
+ return {
990
+ ...payload,
991
+ config: {
992
+ ...payload.config,
993
+ tools: tools2,
994
+ toolConfig: {
995
+ ...toolConfig,
996
+ functionCallingConfig: { mode: "ANY", allowedFunctionNames: [toolName] }
997
+ }
998
+ }
999
+ };
1000
+ }
1001
+ if (model.api === "bedrock-converse-stream") {
1002
+ if (!isRecord(payload.toolConfig) || payload.toolConfig.tools === void 0 || payload.toolConfig.tools === null) {
1003
+ return void 0;
1004
+ }
1005
+ const tools2 = namedToolDefinitions(payload.toolConfig.tools, toolName);
1006
+ if (tools2 === null) return void 0;
1007
+ return { ...payload, toolConfig: { ...payload.toolConfig, tools: tools2, toolChoice: { tool: { name: toolName } } } };
1008
+ }
1009
+ const tools = namedToolDefinitions(payload.tools, toolName);
1010
+ if (tools === null) return void 0;
1011
+ if (isOpenAIResponsesApi(model.api)) {
1012
+ return { ...payload, tools, tool_choice: { type: "function", name: toolName } };
1013
+ }
1014
+ if (model.api === "mistral-conversations") {
1015
+ return { ...payload, tools, toolChoice: { type: "function", function: { name: toolName } } };
1016
+ }
1017
+ return { ...payload, tools, tool_choice: "required" };
1018
+ }
1019
+ function patchLlamaCppResponseSchemaPayload(payload, runtimeId, responseSchema) {
1020
+ if (responseSchema === void 0) return void 0;
1021
+ if (runtimeId !== RESPONSE_SCHEMA_RUNTIME_ID && runtimeId !== GATEWAY_SCHEMA_RUNTIME_ID) {
1022
+ throw new Error(`responseSchema requires the native llamacpp or litellm runtime; received '${runtimeId}'`);
1023
+ }
1024
+ if (!isRecord(payload)) throw new Error("cannot apply responseSchema to a non-object provider payload");
1025
+ const dialect = responseSchemaDialectFor(runtimeId);
1026
+ return dialect === null ? void 0 : patchResponseSchemaPayloadForDialect(payload, dialect, responseSchema, "clio_result");
1027
+ }
1028
+ function patchResponseSchemaPayloadForDialect(payload, dialect, responseSchema, schemaName) {
1029
+ if (!isRecord(payload)) return void 0;
1030
+ if (dialect === "llamacpp-json-object") {
1031
+ return { ...payload, response_format: { type: "json_object", schema: responseSchema } };
1032
+ }
1033
+ return {
1034
+ ...payload,
1035
+ response_format: {
1036
+ type: "json_schema",
1037
+ json_schema: { name: schemaName, strict: true, schema: responseSchema }
1038
+ }
1039
+ };
1040
+ }
1041
+ function patchWorkerRequestPayload(payload, model, options) {
1042
+ let patched = payload;
1043
+ let changed = false;
1044
+ const thinkingPatched = patchProviderThinkingPayload(patched, model, options.thinkingLevel);
1045
+ if (thinkingPatched !== void 0) {
1046
+ patched = thinkingPatched;
1047
+ changed = true;
1048
+ }
1049
+ const schemaPatched = patchLlamaCppResponseSchemaPayload(patched, options.runtimeId, options.responseSchema);
1050
+ if (schemaPatched !== void 0) {
1051
+ patched = schemaPatched;
1052
+ changed = true;
1053
+ }
1054
+ if (options.terminalToolName !== void 0) {
1055
+ const terminal = patchTerminalToolPayload(patched, model, options.terminalToolName);
1056
+ if (terminal !== void 0) return terminal;
1057
+ }
1058
+ if (options.toolSurfaceLocked === true) {
1059
+ const lockedPatched = patchToolSurfaceLockedPayload(patched, model);
1060
+ if (lockedPatched !== void 0) {
1061
+ patched = lockedPatched;
1062
+ changed = true;
1063
+ }
1064
+ } else if (options.toolChoiceNone === true) {
1065
+ const toolChoicePatched = patchToolChoiceNonePayload(patched, model);
1066
+ if (toolChoicePatched !== void 0) {
1067
+ patched = toolChoicePatched;
1068
+ changed = true;
1069
+ }
1070
+ } else if (options.toolChoiceName !== void 0) {
1071
+ const toolChoicePatched = patchToolChoiceNamedPayload(patched, model, options.toolChoiceName);
1072
+ if (toolChoicePatched !== void 0) {
1073
+ patched = toolChoicePatched;
1074
+ changed = true;
1075
+ }
1076
+ }
1077
+ return changed ? patched : void 0;
1078
+ }
1079
+
1080
+ export {
1081
+ createProtectedArtifactsRegistration,
1082
+ INTERACTIVE_LOOP_BLOCK_BUDGET,
1083
+ workerLoopBlockBudget,
1084
+ isLockedSynthesisFallbackOnly,
1085
+ lockedSynthesisSystemPrompt,
1086
+ lockedSynthesisRepromptMessages,
1087
+ lockedSynthesisFallbackText,
1088
+ sanitizeLockedSynthesisMessage,
1089
+ isLoopGuardSynthesisBackstopReason,
1090
+ readOrchTurnToolCallBudget,
1091
+ createLoopGuardRegistration,
1092
+ isReserveAdmittedTool,
1093
+ resolveDeliveryTools,
1094
+ createEngineAgent,
1095
+ replaceEngineMessages,
1096
+ setEngineSystemPrompt,
1097
+ supportsNamedToolChoice,
1098
+ patchProviderThinkingPayload,
1099
+ patchToolChoiceNonePayload,
1100
+ patchToolChoiceNamedPayload,
1101
+ patchResponseSchemaPayloadForDialect,
1102
+ patchWorkerRequestPayload
1103
+ };
1104
+ //# sourceMappingURL=chunk-GRHOXDKB.js.map