@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,1058 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ evaluateClioCompatibility,
4
+ extensionContentDigest,
5
+ extensionContentDigestWithCapture
6
+ } from "./chunk-BJH6WFIB.js";
7
+ import {
8
+ require_dist
9
+ } from "./chunk-B5GGDIHT.js";
10
+ import {
11
+ clioConfigDir
12
+ } from "./chunk-CTTI7G3T.js";
13
+ import {
14
+ safeResourceWrite
15
+ } from "./chunk-ZZFWWYLX.js";
16
+ import {
17
+ __toESM,
18
+ init_esm_shims
19
+ } from "./chunk-ECBHH7LU.js";
20
+
21
+ // src/domains/extensions/discovery.ts
22
+ init_esm_shims();
23
+ var import_yaml = __toESM(require_dist(), 1);
24
+ import { existsSync, readdirSync, readFileSync, realpathSync as realpathSync2, statSync } from "node:fs";
25
+ import path2 from "node:path";
26
+
27
+ // src/domains/extensions/command-schema.ts
28
+ init_esm_shims();
29
+ import { lstatSync, realpathSync } from "node:fs";
30
+ import path from "node:path";
31
+ var TOOL_KEYS = /* @__PURE__ */ new Set([
32
+ "name",
33
+ "description",
34
+ "runtime",
35
+ "entrypoint",
36
+ "inputSchema",
37
+ "timeoutMs",
38
+ "maxOutputBytes"
39
+ ]);
40
+ var SCHEMA_KEYS = /* @__PURE__ */ new Set([
41
+ "type",
42
+ "description",
43
+ "properties",
44
+ "required",
45
+ "additionalProperties",
46
+ "items",
47
+ "enum",
48
+ "minimum",
49
+ "maximum",
50
+ "minLength",
51
+ "maxLength",
52
+ "minItems",
53
+ "maxItems"
54
+ ]);
55
+ var TYPES = /* @__PURE__ */ new Set(["object", "array", "string", "number", "integer", "boolean", "null"]);
56
+ function record(value) {
57
+ return value !== null && typeof value === "object" && !Array.isArray(value);
58
+ }
59
+ function extensionToolName(id, name) {
60
+ return `extension_${id}__${name}`;
61
+ }
62
+ function validateSchema(value, depth = 0) {
63
+ if (depth > 12 || !record(value))
64
+ throw new Error("inputSchema must be a JSON schema object with at most 12 nesting levels");
65
+ for (const key of Object.keys(value)) {
66
+ if (!SCHEMA_KEYS.has(key)) throw new Error(`unsupported inputSchema keyword '${key}'`);
67
+ }
68
+ if (typeof value.type !== "string" || !TYPES.has(value.type))
69
+ throw new Error("inputSchema.type must be a supported JSON type");
70
+ if (value.description !== void 0 && typeof value.description !== "string")
71
+ throw new Error("inputSchema.description must be a string");
72
+ if (value.enum !== void 0 && (!Array.isArray(value.enum) || value.enum.length === 0 || value.enum.some((item) => item !== null && typeof item === "object"))) {
73
+ throw new Error("inputSchema.enum must contain JSON scalar values");
74
+ }
75
+ for (const key of ["minimum", "maximum", "minLength", "maxLength", "minItems", "maxItems"]) {
76
+ if (value[key] !== void 0 && (typeof value[key] !== "number" || !Number.isFinite(value[key])))
77
+ throw new Error(`inputSchema.${key} must be finite`);
78
+ }
79
+ if (value.type === "object") {
80
+ if (!record(value.properties) || value.additionalProperties !== false)
81
+ throw new Error("object inputSchema requires properties and additionalProperties: false");
82
+ for (const [key, child] of Object.entries(value.properties)) {
83
+ if (["__proto__", "constructor", "prototype"].includes(key)) throw new Error("unsafe inputSchema property name");
84
+ validateSchema(child, depth + 1);
85
+ }
86
+ if (value.required !== void 0 && (!Array.isArray(value.required) || value.required.some((key) => typeof key !== "string" || !Object.hasOwn(value.properties, key)))) {
87
+ throw new Error("inputSchema.required must name declared properties");
88
+ }
89
+ } else if (value.type === "array") {
90
+ validateSchema(value.items, depth + 1);
91
+ }
92
+ }
93
+ function parseExtensionCapabilities(value, id) {
94
+ if (!record(value) || Object.keys(value).some((key) => key !== "tools") || !Array.isArray(value.tools) || value.tools.length === 0 || value.tools.length > 32) {
95
+ throw new Error("capabilities must contain tools with between 1 and 32 command declarations");
96
+ }
97
+ if (id.includes("__")) throw new Error("v2 extension id cannot contain double underscores");
98
+ const names = /* @__PURE__ */ new Set();
99
+ const tools = value.tools.map((tool) => {
100
+ if (!record(tool)) throw new Error("capabilities.tools entries must be objects");
101
+ for (const key of Object.keys(tool)) if (!TOOL_KEYS.has(key)) throw new Error(`unknown command tool key '${key}'`);
102
+ if (typeof tool.name !== "string" || !/^[a-z][a-z0-9_]*$/.test(tool.name) || tool.name.includes("__"))
103
+ throw new Error("command tool name must use lowercase letters, digits, and single underscores");
104
+ const name = extensionToolName(id, tool.name);
105
+ if (name.length > 64 || !/^[a-zA-Z0-9_-]+$/.test(name))
106
+ throw new Error("qualified command tool name must use provider-safe characters and fit 64 characters");
107
+ if (names.has(name)) throw new Error(`duplicate command tool name '${name}'`);
108
+ names.add(name);
109
+ if (typeof tool.description !== "string" || tool.description.trim().length === 0 || tool.description.length > 2e3)
110
+ throw new Error("command tool description must contain 1 to 2000 characters");
111
+ if (tool.runtime !== "node" && tool.runtime !== "python3")
112
+ throw new Error("command tool runtime must be node or python3");
113
+ if (typeof tool.entrypoint !== "string" || tool.entrypoint.includes("\0") || tool.entrypoint.includes("\\") || path.isAbsolute(tool.entrypoint) || tool.entrypoint.split("/").some((part) => part === ".." || part === "." || part === ""))
114
+ throw new Error("command tool entrypoint must be a contained relative file path");
115
+ validateSchema(tool.inputSchema);
116
+ if (tool.inputSchema.type !== "object") throw new Error("command tool inputSchema root must be object");
117
+ for (const [key, maximum] of [
118
+ ["timeoutMs", 3e5],
119
+ ["maxOutputBytes", 1048576]
120
+ ]) {
121
+ const limit = tool[key];
122
+ if (limit !== void 0 && (typeof limit !== "number" || !Number.isInteger(limit) || limit < 1 || limit > maximum))
123
+ throw new Error(`command tool ${key} must be between 1 and ${maximum}`);
124
+ }
125
+ return structuredClone(tool);
126
+ });
127
+ return { tools };
128
+ }
129
+ function resolveExtensionEntrypoint(root, entrypoint) {
130
+ const canonicalRoot = realpathSync(root);
131
+ let cursor = canonicalRoot;
132
+ for (const segment of entrypoint.split("/")) {
133
+ if (segment === ".." || segment === "." || segment.length === 0)
134
+ throw new Error("invalid command entrypoint segment");
135
+ cursor = path.join(cursor, segment);
136
+ if (lstatSync(cursor).isSymbolicLink()) throw new Error("command entrypoint cannot contain symbolic links");
137
+ }
138
+ const stat = lstatSync(cursor);
139
+ if (!stat.isFile() || stat.nlink !== 1) throw new Error("command entrypoint must be an ordinary file with one link");
140
+ const relative = path.relative(canonicalRoot, realpathSync(cursor));
141
+ if (relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative))
142
+ throw new Error("command entrypoint escapes extension root");
143
+ return cursor;
144
+ }
145
+
146
+ // src/domains/extensions/runtime-schema.ts
147
+ init_esm_shims();
148
+ import { stripVTControlCharacters } from "node:util";
149
+ var RUNTIME_LIMITS = {
150
+ processes: 4,
151
+ messageBytes: 96 * 1024,
152
+ outputBytes: 64 * 1024,
153
+ argumentBytes: 16 * 1024,
154
+ startupMs: 5e3,
155
+ commandMs: 3e4,
156
+ observationMs: 2e3,
157
+ disposeMs: 250,
158
+ diagnosticsBytes: 64 * 1024
159
+ };
160
+ function record2(value) {
161
+ if (value === null || typeof value !== "object" || Array.isArray(value)) throw new Error("expected an object");
162
+ return value;
163
+ }
164
+ function keys(value, allowed) {
165
+ for (const key of Object.keys(value)) if (!allowed.includes(key)) throw new Error(`unknown runtime field '${key}'`);
166
+ }
167
+ function string(value, max) {
168
+ if (typeof value !== "string" || value.length === 0 || value.length > max)
169
+ throw new Error(`expected text of 1-${max} characters`);
170
+ return value;
171
+ }
172
+ function array(value, max) {
173
+ if (!Array.isArray(value) || value.length > max) throw new Error(`expected an array of at most ${max} entries`);
174
+ return value;
175
+ }
176
+ function choices(value, allowed) {
177
+ const entries = array(value ?? [], allowed.length).map((item) => {
178
+ if (!allowed.includes(item)) throw new Error(`unsupported runtime capability '${String(item)}'`);
179
+ return item;
180
+ });
181
+ if (new Set(entries).size !== entries.length) throw new Error("duplicate runtime capability");
182
+ return entries;
183
+ }
184
+ function parseExtensionRuntime(value) {
185
+ const raw = record2(value);
186
+ keys(raw, ["api", "entrypoint", "commands", "events", "ui"]);
187
+ if (raw.api !== 1) throw new Error("runtime.api must be 1");
188
+ const entrypoint = string(raw.entrypoint, 240);
189
+ if (!entrypoint.endsWith(".mjs")) throw new Error("runtime.entrypoint must be a shipped .mjs file");
190
+ const names = /* @__PURE__ */ new Set();
191
+ const commands = array(raw.commands ?? [], 32).map((value2) => {
192
+ const command = record2(value2);
193
+ keys(command, ["name", "description", "timeoutMs"]);
194
+ const name = string(command.name, 40);
195
+ if (!/^[a-z][a-z0-9_]*$/.test(name) || names.has(name))
196
+ throw new Error(`invalid or duplicate runtime command '${name}'`);
197
+ names.add(name);
198
+ const description = string(command.description, 240);
199
+ const timeoutMs = command.timeoutMs ?? RUNTIME_LIMITS.commandMs;
200
+ if (!Number.isInteger(timeoutMs) || Number(timeoutMs) < 100 || Number(timeoutMs) > 3e5)
201
+ throw new Error("runtime command timeoutMs must be 100-300000");
202
+ return { name, description, timeoutMs: Number(timeoutMs) };
203
+ });
204
+ return {
205
+ api: 1,
206
+ entrypoint,
207
+ commands,
208
+ events: choices(raw.events, ["session_open", "turn_end"]),
209
+ ui: choices(raw.ui, ["status", "panel"])
210
+ };
211
+ }
212
+ function extensionPlainText(value) {
213
+ return stripVTControlCharacters(value).replace(
214
+ /[\p{Cc}\p{Cf}]/gu,
215
+ (char) => char === "\n" || char === " " ? char : ""
216
+ );
217
+ }
218
+ function text(value, max) {
219
+ if (value === "") return "";
220
+ return extensionPlainText(string(value, max));
221
+ }
222
+ function parseExtensionOutput(value, declaration) {
223
+ if (Buffer.byteLength(JSON.stringify(value) ?? "") > RUNTIME_LIMITS.outputBytes)
224
+ throw new Error("runtime output exceeds 64 KiB");
225
+ const raw = record2(value);
226
+ keys(raw, ["text", "status", "panel"]);
227
+ const output = { text: text(raw.text, 32768) };
228
+ if (raw.status !== void 0) {
229
+ if (!declaration.ui.includes("status")) throw new Error("runtime did not declare status UI");
230
+ if (raw.status === null) output.status = null;
231
+ else {
232
+ const status = record2(raw.status);
233
+ keys(status, ["text", "tone"]);
234
+ const parsed = { text: text(status.text, 160).replaceAll("\n", " ").replaceAll(" ", " ") };
235
+ if (status.tone !== void 0) {
236
+ const [tone] = choices([status.tone], ["neutral", "positive", "warning", "error"]);
237
+ if (tone) parsed.tone = tone;
238
+ }
239
+ output.status = parsed;
240
+ }
241
+ }
242
+ if (raw.panel !== void 0) {
243
+ if (!declaration.ui.includes("panel")) throw new Error("runtime did not declare panel UI");
244
+ const panel = record2(raw.panel);
245
+ keys(panel, ["title", "sections"]);
246
+ const parsed = { title: text(panel.title, 120), sections: [] };
247
+ for (const value2 of array(panel.sections, 16)) {
248
+ const section = record2(value2);
249
+ if (section.kind === "text") {
250
+ keys(section, ["kind", "text"]);
251
+ parsed.sections.push({ kind: "text", text: text(section.text, 8192) });
252
+ } else if (section.kind === "metrics") {
253
+ keys(section, ["kind", "items"]);
254
+ parsed.sections.push({
255
+ kind: "metrics",
256
+ items: array(section.items, 32).map((value3) => {
257
+ const item = record2(value3);
258
+ keys(item, ["label", "value"]);
259
+ return { label: text(item.label, 120), value: text(item.value, 240) };
260
+ })
261
+ });
262
+ } else if (section.kind === "table") {
263
+ keys(section, ["kind", "columns", "rows"]);
264
+ const columns = array(section.columns, 8).map((value3) => text(value3, 80));
265
+ if (columns.length === 0) throw new Error("table needs columns");
266
+ const rows = array(section.rows, 100).map((row) => {
267
+ const cells = array(row, columns.length);
268
+ if (cells.length !== columns.length) throw new Error("table row width differs from columns");
269
+ return cells.map((value3) => text(value3, 240));
270
+ });
271
+ parsed.sections.push({ kind: "table", columns, rows });
272
+ } else throw new Error("unsupported panel section");
273
+ }
274
+ output.panel = parsed;
275
+ }
276
+ return output;
277
+ }
278
+ function extensionPanelText(panel) {
279
+ return [
280
+ panel.title,
281
+ ...panel.sections.flatMap((section) => {
282
+ if (section.kind === "text") return [section.text];
283
+ if (section.kind === "metrics") return section.items.map((item) => `${item.label}: ${item.value}`);
284
+ return [section.columns.join(" | "), ...section.rows.map((row) => row.join(" | "))];
285
+ })
286
+ ].join("\n\n");
287
+ }
288
+
289
+ // src/domains/extensions/discovery.ts
290
+ var MANIFEST_NAMES = ["clio-coder-extension.yaml", "clio-coder-extension.yml", "clio-coder-extension.json"];
291
+ var MANIFEST_KEYS = /* @__PURE__ */ new Set(["id", "name", "version", "description", "compatibility", "capabilities", "runtime"]);
292
+ var COMPATIBILITY_KEYS = /* @__PURE__ */ new Set(["clio"]);
293
+ var PLUGIN_OWNED_KEYS = /* @__PURE__ */ new Set(["resources", "skills", "prompts", "agents", "fleets", "themes"]);
294
+ var PLUGIN_GUIDANCE = "domain resources belong in a plugin: clio-coder library install <path>";
295
+ function compareNames(a, b) {
296
+ return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;
297
+ }
298
+ function isRecord(value) {
299
+ return typeof value === "object" && value !== null && !Array.isArray(value);
300
+ }
301
+ function trimString(value) {
302
+ if (typeof value !== "string") return void 0;
303
+ const trimmed = value.trim();
304
+ return trimmed.length > 0 ? trimmed : void 0;
305
+ }
306
+ function validateId(id) {
307
+ if (id.length > 80) return "id exceeds 80 characters";
308
+ if (!/^[a-z0-9][a-z0-9._-]*[a-z0-9]$/.test(id)) {
309
+ return "id must use lowercase letters, numbers, dots, underscores, or hyphens and start/end alphanumeric";
310
+ }
311
+ return null;
312
+ }
313
+ function readJsonOrYaml(filePath) {
314
+ const raw = readFileSync(filePath, "utf8");
315
+ if (filePath.endsWith(".json")) return JSON.parse(raw);
316
+ return (0, import_yaml.parse)(raw);
317
+ }
318
+ function rejectUnknownKeys(value, allowed, label, manifestPath, diagnostics) {
319
+ for (const key of Object.keys(value).sort()) {
320
+ if (!allowed.has(key)) {
321
+ diagnostics.push({ type: "error", message: `unknown ${label} key '${key}'`, path: manifestPath });
322
+ }
323
+ }
324
+ }
325
+ function rejectManifestKeys(value, manifestPath, diagnostics) {
326
+ for (const key of Object.keys(value).sort()) {
327
+ if (MANIFEST_KEYS.has(key)) continue;
328
+ diagnostics.push({
329
+ type: "error",
330
+ message: PLUGIN_OWNED_KEYS.has(key) ? `harness extensions cannot declare '${key}'; ${PLUGIN_GUIDANCE}` : `unknown manifest key '${key}'`,
331
+ path: manifestPath
332
+ });
333
+ }
334
+ }
335
+ function parseExtensionManifest(value, manifestPath) {
336
+ const diagnostics = [];
337
+ if (!isRecord(value)) {
338
+ return { diagnostics: [{ type: "error", message: "extension manifest must be an object", path: manifestPath }] };
339
+ }
340
+ rejectManifestKeys(value, manifestPath, diagnostics);
341
+ const id = trimString(value.id);
342
+ const name = trimString(value.name) ?? id;
343
+ const version = trimString(value.version);
344
+ const description = trimString(value.description);
345
+ if (!id) diagnostics.push({ type: "error", message: "id is required", path: manifestPath });
346
+ else {
347
+ const idError = validateId(id);
348
+ if (idError) diagnostics.push({ type: "error", message: idError, path: manifestPath });
349
+ }
350
+ if (!version) diagnostics.push({ type: "error", message: "version is required", path: manifestPath });
351
+ if (!description) diagnostics.push({ type: "error", message: "description is required", path: manifestPath });
352
+ let capabilities;
353
+ let runtime;
354
+ if (value.runtime !== void 0) {
355
+ try {
356
+ runtime = parseExtensionRuntime(value.runtime);
357
+ } catch (error) {
358
+ diagnostics.push({
359
+ type: "error",
360
+ message: error instanceof Error ? error.message : String(error),
361
+ path: manifestPath
362
+ });
363
+ }
364
+ }
365
+ if (value.capabilities !== void 0) {
366
+ try {
367
+ capabilities = parseExtensionCapabilities(value.capabilities, id ?? "");
368
+ } catch (error) {
369
+ diagnostics.push({
370
+ type: "error",
371
+ message: error instanceof Error ? error.message : String(error),
372
+ path: manifestPath
373
+ });
374
+ }
375
+ }
376
+ let compatibility;
377
+ if (value.compatibility !== void 0) {
378
+ if (!isRecord(value.compatibility)) {
379
+ diagnostics.push({ type: "error", message: "compatibility must be an object", path: manifestPath });
380
+ } else {
381
+ rejectUnknownKeys(value.compatibility, COMPATIBILITY_KEYS, "compatibility", manifestPath, diagnostics);
382
+ if (!("clio" in value.compatibility)) {
383
+ compatibility = {};
384
+ } else {
385
+ const range = trimString(value.compatibility.clio);
386
+ if (range === void 0) {
387
+ diagnostics.push({
388
+ type: "error",
389
+ message: "compatibility.clio must be a non-empty semver range",
390
+ path: manifestPath
391
+ });
392
+ } else {
393
+ const evaluation = evaluateClioCompatibility(range);
394
+ if (!evaluation.rangeValid) {
395
+ diagnostics.push({
396
+ type: "error",
397
+ message: `extension ${id ?? "<unknown>"} declares malformed compatibility.clio range '${range}'`,
398
+ path: manifestPath
399
+ });
400
+ } else {
401
+ compatibility = { clio: range };
402
+ }
403
+ }
404
+ }
405
+ }
406
+ }
407
+ if (!id || !name || !version || !description || diagnostics.some((diag) => diag.type === "error")) {
408
+ return { diagnostics };
409
+ }
410
+ const manifest = { id, name, version, description };
411
+ if (runtime) manifest.runtime = runtime;
412
+ if (capabilities) manifest.capabilities = capabilities;
413
+ if (compatibility && Object.keys(compatibility).length > 0) manifest.compatibility = compatibility;
414
+ const clioRange = manifest.compatibility?.clio;
415
+ if (clioRange !== void 0) {
416
+ const evaluation = evaluateClioCompatibility(clioRange);
417
+ if (!evaluation.satisfied) {
418
+ diagnostics.push({
419
+ type: "error",
420
+ message: `extension ${manifest.id} requires Clio '${clioRange}', but running Clio version is '${evaluation.runningVersion}'`,
421
+ path: manifestPath
422
+ });
423
+ }
424
+ }
425
+ return { manifest, diagnostics };
426
+ }
427
+ function findExtensionManifestPath(root) {
428
+ for (const name of MANIFEST_NAMES) {
429
+ const candidate = path2.join(root, name);
430
+ try {
431
+ if (statSync(candidate).isFile()) return candidate;
432
+ } catch {
433
+ }
434
+ }
435
+ return null;
436
+ }
437
+ function loadManifestFromRoot(root) {
438
+ const manifestPath = findExtensionManifestPath(root);
439
+ if (!manifestPath) {
440
+ return {
441
+ path: root,
442
+ valid: false,
443
+ diagnostics: [{ type: "error", message: "extension manifest not found", path: root }]
444
+ };
445
+ }
446
+ try {
447
+ const parsed = parseExtensionManifest(readJsonOrYaml(manifestPath), manifestPath);
448
+ if (parsed.manifest?.runtime) {
449
+ try {
450
+ resolveExtensionEntrypoint(root, parsed.manifest.runtime.entrypoint);
451
+ } catch (error) {
452
+ parsed.diagnostics.push({
453
+ type: "error",
454
+ message: `runtime: ${error instanceof Error ? error.message : String(error)}`,
455
+ path: manifestPath
456
+ });
457
+ }
458
+ }
459
+ for (const tool of parsed.manifest?.capabilities?.tools ?? []) {
460
+ try {
461
+ resolveExtensionEntrypoint(root, tool.entrypoint);
462
+ } catch (error) {
463
+ parsed.diagnostics.push({
464
+ type: "error",
465
+ message: `command tool ${tool.name}: ${error instanceof Error ? error.message : String(error)}`,
466
+ path: manifestPath
467
+ });
468
+ }
469
+ }
470
+ return {
471
+ path: root,
472
+ manifestPath,
473
+ ...parsed.manifest ? { manifest: parsed.manifest } : {},
474
+ valid: parsed.manifest !== void 0 && !parsed.diagnostics.some((diag) => diag.type === "error"),
475
+ diagnostics: parsed.diagnostics
476
+ };
477
+ } catch (err) {
478
+ const reason = err instanceof Error ? err.message : String(err);
479
+ return {
480
+ path: root,
481
+ manifestPath,
482
+ valid: false,
483
+ diagnostics: [{ type: "error", message: `extension manifest could not be read: ${reason}`, path: manifestPath }]
484
+ };
485
+ }
486
+ }
487
+ function discoverExtensionPackages(root) {
488
+ const full = path2.resolve(root);
489
+ if (!existsSync(full)) {
490
+ return [{ path: full, valid: false, diagnostics: [{ type: "error", message: "path does not exist", path: full }] }];
491
+ }
492
+ let stat;
493
+ try {
494
+ stat = statSync(full);
495
+ } catch (error) {
496
+ return [
497
+ {
498
+ path: full,
499
+ valid: false,
500
+ diagnostics: [
501
+ {
502
+ type: "error",
503
+ message: `extension path could not be inspected: ${error instanceof Error ? error.message : String(error)}`,
504
+ path: full
505
+ }
506
+ ]
507
+ }
508
+ ];
509
+ }
510
+ if (!stat.isDirectory()) {
511
+ return [
512
+ {
513
+ path: full,
514
+ valid: false,
515
+ diagnostics: [{ type: "error", message: "extension path is not a directory", path: full }]
516
+ }
517
+ ];
518
+ }
519
+ let canonicalFull;
520
+ try {
521
+ canonicalFull = realpathSync2(full);
522
+ } catch (error) {
523
+ return [
524
+ {
525
+ path: full,
526
+ valid: false,
527
+ diagnostics: [
528
+ {
529
+ type: "error",
530
+ message: `extension path could not be canonicalized: ${error instanceof Error ? error.message : String(error)}`,
531
+ path: full
532
+ }
533
+ ]
534
+ }
535
+ ];
536
+ }
537
+ const direct = loadManifestFromRoot(canonicalFull);
538
+ if (direct.valid || direct.manifestPath) return [direct];
539
+ const candidates = [];
540
+ const discoveryFailures = [];
541
+ const spellingsByCanonicalRoot = /* @__PURE__ */ new Map();
542
+ let entries;
543
+ try {
544
+ entries = readdirSync(canonicalFull, { withFileTypes: true, encoding: "utf8" });
545
+ } catch (error) {
546
+ return [
547
+ {
548
+ path: canonicalFull,
549
+ valid: false,
550
+ diagnostics: [
551
+ {
552
+ type: "error",
553
+ message: `extension directory could not be read: ${error instanceof Error ? error.message : String(error)}`,
554
+ path: canonicalFull
555
+ }
556
+ ]
557
+ }
558
+ ];
559
+ }
560
+ for (const entry of entries.sort(compareNames)) {
561
+ if (entry.name.startsWith(".")) continue;
562
+ const child = path2.join(canonicalFull, entry.name);
563
+ try {
564
+ if (!entry.isDirectory() && !(entry.isSymbolicLink() && statSync(child).isDirectory())) continue;
565
+ const canonicalChild = realpathSync2(child);
566
+ const spellings = spellingsByCanonicalRoot.get(canonicalChild) ?? [];
567
+ spellings.push(child);
568
+ spellingsByCanonicalRoot.set(canonicalChild, spellings);
569
+ } catch (error) {
570
+ discoveryFailures.push({
571
+ path: child,
572
+ valid: false,
573
+ diagnostics: [
574
+ {
575
+ type: "error",
576
+ message: `extension child could not be canonicalized: ${error instanceof Error ? error.message : String(error)}`,
577
+ path: child
578
+ }
579
+ ]
580
+ });
581
+ }
582
+ }
583
+ for (const canonicalChild of [...spellingsByCanonicalRoot.keys()].sort()) {
584
+ const loaded = loadManifestFromRoot(canonicalChild);
585
+ const spellings = spellingsByCanonicalRoot.get(canonicalChild) ?? [];
586
+ if (spellings.length > 1) {
587
+ loaded.diagnostics.push({
588
+ type: "warning",
589
+ message: `duplicate canonical extension root loaded once; discovered as ${spellings.sort().join(", ")}`,
590
+ path: canonicalChild
591
+ });
592
+ }
593
+ if (loaded.valid || loaded.manifestPath) candidates.push(loaded);
594
+ }
595
+ const discovered = [...candidates, ...discoveryFailures].sort(
596
+ (a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0
597
+ );
598
+ if (discovered.length === 0) discovered.push(direct);
599
+ const ids = /* @__PURE__ */ new Map();
600
+ for (const candidate of discovered) {
601
+ const id = candidate.manifest?.id;
602
+ if (!id) continue;
603
+ const group = ids.get(id) ?? [];
604
+ group.push(candidate);
605
+ ids.set(id, group);
606
+ }
607
+ for (const [id, group] of ids) {
608
+ if (group.length < 2) continue;
609
+ for (const candidate of group) {
610
+ candidate.valid = false;
611
+ candidate.diagnostics.push({
612
+ type: "error",
613
+ message: `duplicate extension id ${id}`,
614
+ path: candidate.manifestPath ?? candidate.path
615
+ });
616
+ }
617
+ }
618
+ return discovered;
619
+ }
620
+
621
+ // src/domains/extensions/state.ts
622
+ init_esm_shims();
623
+ import { createHash } from "node:crypto";
624
+ import { cpSync, existsSync as existsSync2, mkdirSync, readdirSync as readdirSync2, readFileSync as readFileSync2, realpathSync as realpathSync3, renameSync, rmSync } from "node:fs";
625
+ import path3 from "node:path";
626
+ var DEFAULT_STATE = { version: 1, disabled: [], installed: {} };
627
+ function extensionBaseDir(scope, cwd = process.cwd()) {
628
+ return scope === "user" ? path3.join(clioConfigDir(), "extensions") : path3.join(path3.resolve(cwd), ".clio-coder", "extensions");
629
+ }
630
+ function statePath(scope, cwd = process.cwd()) {
631
+ return path3.join(extensionBaseDir(scope, cwd), "state.json");
632
+ }
633
+ function recoveryPath(filePath, label) {
634
+ return `${filePath}.${label}-${process.pid}-${Date.now()}.bak`;
635
+ }
636
+ function packageRecoveryPath(root, label) {
637
+ return path3.join(path3.dirname(root), `.${path3.basename(root)}.${label}-${process.pid}-${Date.now()}.bak`);
638
+ }
639
+ function preserveFile(filePath, label) {
640
+ if (!existsSync2(filePath)) return void 0;
641
+ const backupPath = recoveryPath(filePath, label);
642
+ safeResourceWrite(backupPath, readFileSync2(filePath));
643
+ return backupPath;
644
+ }
645
+ function scopeRank(scope) {
646
+ return scope === "project" ? 2 : 1;
647
+ }
648
+ function readState(scope, cwd = process.cwd()) {
649
+ const filePath = statePath(scope, cwd);
650
+ if (!existsSync2(filePath)) return { status: "absent", state: structuredClone(DEFAULT_STATE) };
651
+ try {
652
+ const parsed = JSON.parse(readFileSync2(filePath, "utf8"));
653
+ if (!isRecord(parsed) || parsed.version !== 1) throw new Error("state must be a version 1 object");
654
+ if (!Array.isArray(parsed.disabled) || !parsed.disabled.every((entry) => typeof entry === "string")) {
655
+ throw new Error("state.disabled must be an array of strings");
656
+ }
657
+ if (!isRecord(parsed.installed)) throw new Error("state.installed must be an object");
658
+ const installed = {};
659
+ for (const [id, raw] of Object.entries(parsed.installed)) {
660
+ if (!isRecord(raw)) throw new Error(`state.installed.${id} must be an object`);
661
+ const installedAt = trimString(raw.installedAt);
662
+ if (!installedAt) throw new Error(`state.installed.${id}.installedAt must be a non-empty string`);
663
+ const source = raw.source === void 0 ? void 0 : trimString(raw.source);
664
+ if (raw.source !== void 0 && !source) {
665
+ throw new Error(`state.installed.${id}.source must be a non-empty string`);
666
+ }
667
+ const contentDigest = raw.contentDigest === void 0 ? void 0 : trimString(raw.contentDigest);
668
+ if (raw.contentDigest !== void 0 && (!contentDigest || !/^[a-f0-9]{64}$/u.test(contentDigest))) {
669
+ throw new Error(`state.installed.${id}.contentDigest must be a SHA-256 digest`);
670
+ }
671
+ installed[id] = {
672
+ installedAt,
673
+ ...source ? { source } : {},
674
+ ...contentDigest ? { contentDigest } : {}
675
+ };
676
+ }
677
+ return { status: "valid", state: { version: 1, disabled: [...parsed.disabled], installed } };
678
+ } catch (error) {
679
+ return {
680
+ status: "corrupt",
681
+ state: structuredClone(DEFAULT_STATE),
682
+ message: error instanceof Error ? error.message : String(error)
683
+ };
684
+ }
685
+ }
686
+ function writeState(scope, state, cwd = process.cwd()) {
687
+ const filePath = statePath(scope, cwd);
688
+ safeResourceWrite(filePath, `${JSON.stringify(state, null, 2)}
689
+ `, { encoding: "utf8" });
690
+ }
691
+ function installedFromRoot(root, scope, stateResult, cwd, fallbackId) {
692
+ const candidate = loadManifestFromRoot(root);
693
+ const manifest = candidate.manifest;
694
+ const diagnostics = [...candidate.diagnostics];
695
+ const id = manifest?.id ?? fallbackId;
696
+ const provenance = stateResult.state.installed[id];
697
+ const expectedDigest = provenance?.contentDigest;
698
+ let observedDigest;
699
+ let captured;
700
+ let contentVerified = false;
701
+ if (stateResult.status === "corrupt") {
702
+ diagnostics.push({
703
+ type: "error",
704
+ message: `extension install state is corrupt: ${stateResult.message}; reinstall with --force or remove the package to preserve the corrupt bytes and recover`,
705
+ path: statePath(scope, cwd)
706
+ });
707
+ } else if (stateResult.status === "absent") {
708
+ diagnostics.push({
709
+ type: "error",
710
+ message: "extension install state is absent; installed content cannot be verified; reinstall with --force",
711
+ path: statePath(scope, cwd)
712
+ });
713
+ } else if (!provenance) {
714
+ diagnostics.push({
715
+ type: "error",
716
+ message: `extension ${id} is not recorded in install state; reinstall with --force`,
717
+ path: statePath(scope, cwd)
718
+ });
719
+ } else if (!expectedDigest) {
720
+ diagnostics.push({
721
+ type: "error",
722
+ message: `extension ${id} install provenance has no content digest; reinstall with --force`,
723
+ path: statePath(scope, cwd)
724
+ });
725
+ } else {
726
+ try {
727
+ const manifestName2 = candidate.manifestPath ? path3.basename(candidate.manifestPath) : void 0;
728
+ const digestResult = extensionContentDigestWithCapture(root, {
729
+ capture: [...manifestName2 ? [manifestName2] : [], "hooks.yaml"]
730
+ });
731
+ observedDigest = digestResult.digest;
732
+ contentVerified = observedDigest === expectedDigest;
733
+ if (contentVerified) captured = digestResult.captured;
734
+ if (!contentVerified) {
735
+ diagnostics.push({
736
+ type: "error",
737
+ message: `installed extension content drift detected (expected ${expectedDigest}, observed ${observedDigest})`,
738
+ path: root
739
+ });
740
+ }
741
+ } catch (error) {
742
+ diagnostics.push({
743
+ type: "error",
744
+ message: `installed extension content could not be verified: ${error instanceof Error ? error.message : String(error)}`,
745
+ path: root
746
+ });
747
+ }
748
+ }
749
+ const clioRange = manifest?.compatibility?.clio;
750
+ const compatible = clioRange === void 0 || evaluateClioCompatibility(clioRange).satisfied;
751
+ const manifestName = candidate.manifestPath ? path3.basename(candidate.manifestPath) : void 0;
752
+ const manifestBytes = manifestName ? captured?.get(manifestName) : void 0;
753
+ const extensionProvenance = contentVerified && expectedDigest && manifestBytes ? {
754
+ id,
755
+ scope,
756
+ ...provenance?.source ? { sourcePath: provenance.source } : {},
757
+ canonicalRoot: realpathSync3(root),
758
+ manifestDigest: createHash("sha256").update(manifestBytes).digest("hex"),
759
+ contentDigest: expectedDigest
760
+ } : void 0;
761
+ const entry = {
762
+ id,
763
+ name: manifest?.name ?? id,
764
+ version: manifest?.version ?? "unknown",
765
+ description: manifest?.description ?? "Installed extension has an invalid manifest.",
766
+ ...manifest?.capabilities ? { capabilities: manifest.capabilities } : {},
767
+ ...manifest?.runtime ? { runtime: manifest.runtime } : {},
768
+ scope,
769
+ rootPath: root,
770
+ manifestPath: candidate.manifestPath ?? root,
771
+ enabled: !stateResult.state.disabled.includes(id),
772
+ valid: manifest !== void 0 && candidate.valid && contentVerified,
773
+ compatible,
774
+ effective: false,
775
+ loadable: false,
776
+ ...extensionProvenance ? { provenance: extensionProvenance } : {},
777
+ ...observedDigest ? { observedContentDigest: observedDigest } : {},
778
+ diagnostics
779
+ };
780
+ return { entry, ...extensionProvenance && captured ? { captured } : {} };
781
+ }
782
+ function listScope(scope, cwd = process.cwd()) {
783
+ const base = extensionBaseDir(scope, cwd);
784
+ if (!existsSync2(base)) return [];
785
+ const state = readState(scope, cwd);
786
+ const out = [];
787
+ for (const entry of readdirSync2(base, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {
788
+ if (!entry.isDirectory() || entry.name.startsWith(".")) continue;
789
+ const root = path3.join(base, entry.name);
790
+ const installed = installedFromRoot(root, scope, state, cwd, entry.name);
791
+ if (installed) out.push(installed);
792
+ }
793
+ return out;
794
+ }
795
+ function listInstalledExtensions(cwd = process.cwd(), options = {}) {
796
+ return listInstalledExtensionRecords(cwd, options).map((record3) => record3.entry);
797
+ }
798
+ function listInstalledExtensionRecords(cwd = process.cwd(), options = {}) {
799
+ const scopes = options.scope ? [options.scope] : ["user", "project"];
800
+ const records = scopes.flatMap((scope) => listScope(scope, cwd));
801
+ const byId = /* @__PURE__ */ new Map();
802
+ for (const record3 of records) {
803
+ const entry = record3.entry;
804
+ const list = byId.get(entry.id) ?? [];
805
+ list.push(record3);
806
+ byId.set(entry.id, list);
807
+ }
808
+ for (const group of byId.values()) {
809
+ const winner = group.filter((record3) => record3.entry.valid && record3.entry.compatible).sort((a, b) => scopeRank(a.entry.scope) - scopeRank(b.entry.scope)).at(-1);
810
+ for (const record3 of group) {
811
+ const entry = record3.entry;
812
+ entry.effective = record3 === winner;
813
+ entry.loadable = entry.valid && entry.compatible && entry.enabled && entry.effective;
814
+ if (entry.valid && entry.compatible && !entry.effective && winner) entry.overriddenBy = winner.entry.scope;
815
+ }
816
+ }
817
+ const all = options.all === true ? records : records.filter(({ entry }) => entry.effective || !entry.valid || !entry.compatible);
818
+ return all.sort((a, b) => {
819
+ const id = a.entry.id.localeCompare(b.entry.id);
820
+ if (id !== 0) return id;
821
+ return scopeRank(a.entry.scope) - scopeRank(b.entry.scope);
822
+ });
823
+ }
824
+ function findInstalled(id, cwd, scope) {
825
+ const entries = listInstalledExtensions(cwd, { ...scope ? { scope } : {}, all: true }).filter(
826
+ (entry) => entry.id === id
827
+ );
828
+ if (entries.length === 0) return null;
829
+ return [...entries].sort((a, b) => scopeRank(a.scope) - scopeRank(b.scope)).at(-1) ?? null;
830
+ }
831
+ function installExtension(sourcePath, options = {}) {
832
+ const scope = options.scope ?? "user";
833
+ const cwd = options.cwd ?? process.cwd();
834
+ const source = path3.resolve(sourcePath);
835
+ const candidate = loadManifestFromRoot(source);
836
+ if (!candidate.manifest || !candidate.valid) return { diagnostics: candidate.diagnostics };
837
+ const targetRoot = path3.join(extensionBaseDir(scope, cwd), candidate.manifest.id);
838
+ if (existsSync2(targetRoot)) {
839
+ if (!options.force) {
840
+ return {
841
+ diagnostics: [
842
+ {
843
+ type: "error",
844
+ message: `extension ${candidate.manifest.id} is already installed; retry with --force to replace it`,
845
+ path: targetRoot
846
+ }
847
+ ]
848
+ };
849
+ }
850
+ }
851
+ const parent = path3.dirname(targetRoot);
852
+ const stagingRoot = path3.join(parent, `.${candidate.manifest.id}.install-${process.pid}-${Date.now()}`);
853
+ const backupRoot = path3.join(parent, `.${candidate.manifest.id}.backup-${process.pid}-${Date.now()}`);
854
+ let installedReplacement = false;
855
+ let movedExisting = false;
856
+ const stateResult = readState(scope, cwd);
857
+ if (stateResult.status === "corrupt" && !options.force) {
858
+ return {
859
+ diagnostics: [
860
+ {
861
+ type: "error",
862
+ message: `extension install state is corrupt: ${stateResult.message}; retry with --force to back it up and reinstall safely`,
863
+ path: statePath(scope, cwd)
864
+ }
865
+ ]
866
+ };
867
+ }
868
+ const state = stateResult.status === "corrupt" ? structuredClone(DEFAULT_STATE) : stateResult.state;
869
+ let stateBackup;
870
+ let packageBackup;
871
+ try {
872
+ mkdirSync(parent, { recursive: true });
873
+ if (stateResult.status === "corrupt") stateBackup = preserveFile(statePath(scope, cwd), "corrupt");
874
+ rmSync(stagingRoot, { recursive: true, force: true });
875
+ rmSync(backupRoot, { recursive: true, force: true });
876
+ cpSync(source, stagingRoot, {
877
+ recursive: true,
878
+ // `state.json` beside the installed extension directories belongs to
879
+ // Clio's extension manager. An extension may legitimately ship nested
880
+ // resources with the same basename (for example a project-state JSON
881
+ // template), so exclude only a bookkeeping file at the package root.
882
+ filter: (src) => path3.relative(source, src) !== "state.json"
883
+ });
884
+ const stagedCandidate = loadManifestFromRoot(stagingRoot);
885
+ if (!stagedCandidate.valid || !stagedCandidate.manifest) {
886
+ const reasons = stagedCandidate.diagnostics.map((diagnostic) => diagnostic.message).join("; ");
887
+ throw new Error(`staged extension content is invalid${reasons ? `: ${reasons}` : ""}`);
888
+ }
889
+ if (stagedCandidate.manifest.id !== candidate.manifest.id) {
890
+ throw new Error(`staged extension id changed from ${candidate.manifest.id} to ${stagedCandidate.manifest.id}`);
891
+ }
892
+ const contentDigest = extensionContentDigest(stagingRoot);
893
+ if (existsSync2(targetRoot)) {
894
+ renameSync(targetRoot, backupRoot);
895
+ movedExisting = true;
896
+ packageBackup = backupRoot;
897
+ }
898
+ renameSync(stagingRoot, targetRoot);
899
+ installedReplacement = true;
900
+ state.installed[candidate.manifest.id] = {
901
+ installedAt: (/* @__PURE__ */ new Date()).toISOString(),
902
+ source,
903
+ contentDigest
904
+ };
905
+ state.disabled = state.disabled.filter((entry) => entry !== candidate.manifest?.id);
906
+ writeState(scope, state, cwd);
907
+ } catch (error) {
908
+ rmSync(stagingRoot, { recursive: true, force: true });
909
+ if (installedReplacement) rmSync(targetRoot, { recursive: true, force: true });
910
+ if (movedExisting && existsSync2(backupRoot) && !existsSync2(targetRoot)) {
911
+ renameSync(backupRoot, targetRoot);
912
+ packageBackup = void 0;
913
+ }
914
+ return {
915
+ ...stateBackup || packageBackup ? { recovery: { ...stateBackup ? { stateBackup } : {}, ...packageBackup ? { packageBackup } : {} } } : {},
916
+ diagnostics: [
917
+ {
918
+ type: "error",
919
+ message: `extension ${candidate.manifest.id} install failed: ${error instanceof Error ? error.message : String(error)}`,
920
+ path: targetRoot
921
+ }
922
+ ]
923
+ };
924
+ }
925
+ const diagnostics = [...candidate.diagnostics];
926
+ if (movedExisting && stateResult.status !== "valid") {
927
+ diagnostics.push({
928
+ type: "warning",
929
+ message: "previous unverifiable extension bytes were preserved during forced reinstall",
930
+ path: backupRoot
931
+ });
932
+ } else {
933
+ try {
934
+ rmSync(backupRoot, { recursive: true, force: true });
935
+ packageBackup = void 0;
936
+ } catch (error) {
937
+ diagnostics.push({
938
+ type: "warning",
939
+ message: `extension installed, but its backup could not be removed: ${error instanceof Error ? error.message : String(error)}`,
940
+ path: backupRoot
941
+ });
942
+ }
943
+ }
944
+ if (stateBackup) {
945
+ diagnostics.push({ type: "warning", message: "corrupt extension install state was preserved", path: stateBackup });
946
+ }
947
+ const installed = findInstalled(candidate.manifest.id, cwd, scope);
948
+ return {
949
+ ...installed ? { extension: installed } : {},
950
+ ...stateBackup || packageBackup ? { recovery: { ...stateBackup ? { stateBackup } : {}, ...packageBackup ? { packageBackup } : {} } } : {},
951
+ diagnostics
952
+ };
953
+ }
954
+ function mutateEnabled(id, enabled, options = {}) {
955
+ const cwd = options.cwd ?? process.cwd();
956
+ const target = findInstalled(id, cwd, options.scope);
957
+ if (!target) {
958
+ return { diagnostics: [{ type: "error", message: `extension ${id} is not installed` }] };
959
+ }
960
+ const stateResult = readState(target.scope, cwd);
961
+ if (stateResult.status !== "valid") {
962
+ return {
963
+ diagnostics: [
964
+ {
965
+ type: "error",
966
+ message: stateResult.status === "corrupt" ? `extension install state is corrupt: ${stateResult.message}` : "extension install state is absent",
967
+ path: statePath(target.scope, cwd)
968
+ }
969
+ ]
970
+ };
971
+ }
972
+ const state = stateResult.state;
973
+ if (enabled) state.disabled = state.disabled.filter((entry) => entry !== id);
974
+ else if (!state.disabled.includes(id)) state.disabled.push(id);
975
+ writeState(target.scope, state, cwd);
976
+ const extension = findInstalled(id, cwd, target.scope) ?? void 0;
977
+ return { ...extension ? { extension } : {}, diagnostics: [] };
978
+ }
979
+ function enableExtension(id, options = {}) {
980
+ return mutateEnabled(id, true, options);
981
+ }
982
+ function disableExtension(id, options = {}) {
983
+ return mutateEnabled(id, false, options);
984
+ }
985
+ function removeExtension(id, options = {}) {
986
+ const cwd = options.cwd ?? process.cwd();
987
+ const target = findInstalled(id, cwd, options.scope);
988
+ if (!target) {
989
+ return { diagnostics: [{ type: "error", message: `extension ${id} is not installed` }] };
990
+ }
991
+ const stateResult = readState(target.scope, cwd);
992
+ if (stateResult.status !== "valid") {
993
+ const filePath = statePath(target.scope, cwd);
994
+ const packageBackup = packageRecoveryPath(target.rootPath, "removed-unverifiable");
995
+ let stateBackup;
996
+ try {
997
+ if (stateResult.status === "corrupt") stateBackup = preserveFile(filePath, "corrupt");
998
+ renameSync(target.rootPath, packageBackup);
999
+ try {
1000
+ writeState(target.scope, structuredClone(DEFAULT_STATE), cwd);
1001
+ } catch (error) {
1002
+ renameSync(packageBackup, target.rootPath);
1003
+ throw error;
1004
+ }
1005
+ const diagnostics = [
1006
+ {
1007
+ type: "warning",
1008
+ message: "unverifiable extension bytes were preserved while removing the package from the load path",
1009
+ path: packageBackup
1010
+ }
1011
+ ];
1012
+ if (stateBackup) {
1013
+ diagnostics.push({ type: "warning", message: "corrupt extension install state was preserved", path: stateBackup });
1014
+ }
1015
+ return {
1016
+ removed: { id, scope: target.scope, path: target.rootPath },
1017
+ recovery: { ...stateBackup ? { stateBackup } : {}, packageBackup },
1018
+ diagnostics
1019
+ };
1020
+ } catch (error) {
1021
+ return {
1022
+ diagnostics: [
1023
+ {
1024
+ type: "error",
1025
+ message: `extension ${id} could not be removed safely: ${error instanceof Error ? error.message : String(error)}`,
1026
+ path: target.rootPath
1027
+ }
1028
+ ]
1029
+ };
1030
+ }
1031
+ }
1032
+ const state = stateResult.state;
1033
+ rmSync(target.rootPath, { recursive: true, force: true });
1034
+ Reflect.deleteProperty(state.installed, id);
1035
+ state.disabled = state.disabled.filter((entry) => entry !== id);
1036
+ writeState(target.scope, state, cwd);
1037
+ return { removed: { id, scope: target.scope, path: target.rootPath }, diagnostics: [] };
1038
+ }
1039
+
1040
+ export {
1041
+ extensionToolName,
1042
+ resolveExtensionEntrypoint,
1043
+ RUNTIME_LIMITS,
1044
+ extensionPlainText,
1045
+ parseExtensionOutput,
1046
+ extensionPanelText,
1047
+ parseExtensionManifest,
1048
+ loadManifestFromRoot,
1049
+ discoverExtensionPackages,
1050
+ extensionBaseDir,
1051
+ listInstalledExtensions,
1052
+ listInstalledExtensionRecords,
1053
+ installExtension,
1054
+ enableExtension,
1055
+ disableExtension,
1056
+ removeExtension
1057
+ };
1058
+ //# sourceMappingURL=chunk-VESL6DQY.js.map