@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,1605 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ GLYPH,
4
+ InstrumentedTuiAltScreen,
5
+ InstrumentedTuiMainScreen,
6
+ brandMark,
7
+ clioTheme,
8
+ collapseHomePath,
9
+ editorTheme,
10
+ fitHintEntries,
11
+ formatTargetLabel,
12
+ padAnsi,
13
+ permissionHintEntries,
14
+ rule
15
+ } from "./chunk-3O5JWP4L.js";
16
+ import {
17
+ Editor,
18
+ ProcessTerminal,
19
+ getKeybindings,
20
+ stripTerminalSequences,
21
+ truncateToWidth,
22
+ visibleWidth
23
+ } from "./chunk-6OWUM2NC.js";
24
+ import {
25
+ sanitizeCallTargetText
26
+ } from "./chunk-XNIZBOFV.js";
27
+ import {
28
+ readClioVersion
29
+ } from "./chunk-ZPST2KQO.js";
30
+ import {
31
+ init_esm_shims
32
+ } from "./chunk-ECBHH7LU.js";
33
+
34
+ // src/interactive/clio-editor.ts
35
+ init_esm_shims();
36
+
37
+ // src/interactive/editor-bash.ts
38
+ init_esm_shims();
39
+ var PASTED_EDITOR_OPERATOR_GUARD = "\u2063";
40
+ function guardPastedEditorOperator(text) {
41
+ return `${PASTED_EDITOR_OPERATOR_GUARD}${text}`;
42
+ }
43
+ function unguardPastedEditorOperator(text) {
44
+ return text.startsWith(PASTED_EDITOR_OPERATOR_GUARD) ? text.slice(PASTED_EDITOR_OPERATOR_GUARD.length) : text;
45
+ }
46
+ function parseEditorBashCommand(text) {
47
+ if (text.startsWith(PASTED_EDITOR_OPERATOR_GUARD) || text.includes("\n") || text.includes("\r")) return null;
48
+ if (!text.startsWith("!")) return null;
49
+ const excludeFromContext = text.startsWith("!!");
50
+ const command = (excludeFromContext ? text.slice(2) : text.slice(1)).trim();
51
+ if (command.length === 0) return null;
52
+ return { command, excludeFromContext };
53
+ }
54
+
55
+ // src/interactive/editor-rails.ts
56
+ init_esm_shims();
57
+ function renderEditorRail(theme, width, options, state) {
58
+ const line = rule(theme, width, { ...options, fillToken: "editor" });
59
+ return line.replace(/─+/gu, (fill) => {
60
+ const tokens = ["editorAction", "editorAction", "action", "editor", "editor", "accent", "accent"];
61
+ const center = Math.floor(state.now % 3600 / 3600 * (fill.length + 14)) - 7;
62
+ let output = "";
63
+ let runToken = null;
64
+ let run = "";
65
+ for (let column = 0; column < fill.length; column += 1) {
66
+ let token = "editor";
67
+ if (state.phase === "attention") {
68
+ token = state.animate && Math.floor(state.now / 900) % 2 === 1 ? "action" : "editorAction";
69
+ } else if (state.phase === "working" && state.animate) {
70
+ const distance = Math.abs(column - center);
71
+ if (distance < tokens.length) token = tokens[distance] ?? "editor";
72
+ }
73
+ if (state.fullAuto && (column < 3 || column >= fill.length - 3)) token = "editorDanger";
74
+ if (runToken !== token && runToken !== null) {
75
+ output += theme.style(runToken, run, { bold: true });
76
+ run = "";
77
+ }
78
+ runToken = token;
79
+ run += "\u2501";
80
+ }
81
+ return output + (runToken ? theme.style(runToken, run, { bold: true }) : "");
82
+ });
83
+ }
84
+
85
+ // src/interactive/clio-editor.ts
86
+ var REVERSE_VIDEO_BLANK = `${String.fromCharCode(27)}[7m ${String.fromCharCode(27)}[0m`;
87
+ var EMPTY_PROMPT = "Ask Clio\u2026 / for commands";
88
+ var CONFIRM_PROMPT = "A parked call is waiting for your decision";
89
+ var PREPARING_PROMPT = "Clio has your prompt and is preparing the turn";
90
+ var COMPACTING_PROMPT = "Clio is compacting the session context";
91
+ function hasScrollIndicator(line) {
92
+ const stripped = stripTerminalSequences(line);
93
+ return stripped.includes(GLYPH.up) || stripped.includes(GLYPH.down);
94
+ }
95
+ function composerMode(chrome, text) {
96
+ if (chrome.isAwaitingApproval?.() ?? false) return "CONFIRM";
97
+ if (!(chrome.isStreaming?.() ?? false)) {
98
+ const preparation = chrome.getTurnPreparation?.() ?? "idle";
99
+ if (preparation === "compacting") return "COMPACTING";
100
+ if (preparation === "preparing") return "PREPARING";
101
+ return "MESSAGE";
102
+ }
103
+ const willSteer = chrome.willEnterSteer?.(text) ?? text.trim().length > 0;
104
+ return willSteer ? "STEER" : "FOLLOW-UP";
105
+ }
106
+ function confirmRailHint(theme, width, hasDraft, inspection) {
107
+ return theme.fg("warning", fitHintEntries(permissionHintEntries(hasDraft, inspection), Math.max(1, width - 3)));
108
+ }
109
+ function modeToken(mode) {
110
+ if (mode === "STEER" || mode === "PREPARING" || mode === "COMPACTING") return "action";
111
+ if (mode === "CONFIRM") return "warning";
112
+ return "accentDeep";
113
+ }
114
+ function emptyPromptFor(mode) {
115
+ if (mode === "CONFIRM") return CONFIRM_PROMPT;
116
+ if (mode === "PREPARING") return PREPARING_PROMPT;
117
+ if (mode === "COMPACTING") return COMPACTING_PROMPT;
118
+ return EMPTY_PROMPT;
119
+ }
120
+ function renderEmptyPrompt(line, width, theme, text = EMPTY_PROMPT) {
121
+ const cursorAt = line.indexOf(REVERSE_VIDEO_BLANK);
122
+ if (cursorAt < 0) return line;
123
+ const afterCursorAt = cursorAt + REVERSE_VIDEO_BLANK.length;
124
+ const available = Math.max(0, width - 1);
125
+ const prompt = truncateToWidth(theme.fg("dim", text), available, "\u2026", false);
126
+ const consumed = visibleWidth(prompt);
127
+ return `${line.slice(0, afterCursorAt)}${prompt}${line.slice(afterCursorAt + consumed)}`;
128
+ }
129
+ function findBottomRail(lines, width) {
130
+ const rail = "\u2500".repeat(Math.max(0, width));
131
+ for (let index = 1; index < lines.length; index += 1) {
132
+ if (stripTerminalSequences(lines[index] ?? "") === rail) return index;
133
+ }
134
+ return -1;
135
+ }
136
+ function cursorEndsDirectoryPath(editor) {
137
+ const cursor = editor.getCursor();
138
+ const line = editor.getLines()[cursor.line] ?? "";
139
+ return line.slice(0, cursor.col).endsWith("/");
140
+ }
141
+ function remapPastedBangOffsets(before, after, offsets, markInsertedAsPasted) {
142
+ let prefix = 0;
143
+ while (prefix < before.length && prefix < after.length && before[prefix] === after[prefix]) prefix += 1;
144
+ let beforeEnd = before.length;
145
+ let afterEnd = after.length;
146
+ while (beforeEnd > prefix && afterEnd > prefix && before[beforeEnd - 1] === after[afterEnd - 1]) {
147
+ beforeEnd -= 1;
148
+ afterEnd -= 1;
149
+ }
150
+ const next = /* @__PURE__ */ new Set();
151
+ const shift = afterEnd - prefix - (beforeEnd - prefix);
152
+ for (const offset of offsets) {
153
+ if (offset < prefix) next.add(offset);
154
+ else if (offset >= beforeEnd) next.add(offset + shift);
155
+ }
156
+ if (markInsertedAsPasted) {
157
+ for (let offset = prefix; offset < afterEnd; offset += 1) {
158
+ if (after[offset] === "!") next.add(offset);
159
+ }
160
+ }
161
+ return next;
162
+ }
163
+ function startsWithPastedOperator(text, pastedBangOffsets) {
164
+ const first = text.search(/\S/u);
165
+ return first >= 0 && text[first] === "!" && pastedBangOffsets.has(first);
166
+ }
167
+ var ClioEditor = class extends Editor {
168
+ constructor(tui, chrome) {
169
+ super(tui, editorTheme(clioTheme()));
170
+ this.chrome = chrome;
171
+ }
172
+ chrome;
173
+ pastedBangOffsets = /* @__PURE__ */ new Set();
174
+ bracketedPasteActive = false;
175
+ revision = 0;
176
+ pastedOperatorTokens = /* @__PURE__ */ new Set();
177
+ get draftRevision() {
178
+ return this.revision;
179
+ }
180
+ /** Restored queues and external buffers are literal editor content. */
181
+ setLiteralText(text) {
182
+ this.setText(text);
183
+ this.pastedBangOffsets = new Set([...text.matchAll(/!/gu)].map((match) => match.index));
184
+ }
185
+ applyEdit(operation) {
186
+ const before = this.getText();
187
+ super.applyEdit(operation);
188
+ this.revision += 1;
189
+ this.pastedBangOffsets = remapPastedBangOffsets(before, this.getText(), this.pastedBangOffsets, operation === "undo");
190
+ }
191
+ render(width) {
192
+ const lines = super.render(width);
193
+ if (lines.length === 0) return lines;
194
+ const theme = clioTheme();
195
+ const safeWidth = Math.max(0, width);
196
+ const text = this.getText();
197
+ const mode = composerMode(this.chrome, text);
198
+ const rail = {
199
+ phase: mode === "CONFIRM" ? "attention" : mode === "MESSAGE" ? "idle" : "working",
200
+ fullAuto: this.chrome.getAutonomy?.() === "full-auto",
201
+ animate: text.length === 0 && process.env.CLIO_CODER_REDUCE_MOTION !== "1" && process.env.CLIO_CODER_SCREEN_READER !== "1" && process.env.TERM !== "dumb" && process.env.NO_COLOR === void 0,
202
+ now: this.chrome.getAnimationTime?.() ?? performance.now()
203
+ };
204
+ if (!hasScrollIndicator(lines[0] ?? "")) {
205
+ const exceptional = mode === "CONFIRM" || mode === "PREPARING" || mode === "COMPACTING";
206
+ lines[0] = renderEditorRail(
207
+ theme,
208
+ safeWidth,
209
+ {
210
+ ...exceptional ? {
211
+ left: rail.fullAuto ? `${mode} \xB7 FULL-AUTO` : mode,
212
+ leftToken: rail.fullAuto ? "editorDanger" : modeToken(mode)
213
+ } : rail.fullAuto ? { left: "FULL-AUTO", leftToken: "editorDanger" } : {}
214
+ },
215
+ rail
216
+ );
217
+ }
218
+ if (text.length === 0 && lines[1]) {
219
+ lines[1] = renderEmptyPrompt(lines[1], safeWidth, theme, emptyPromptFor(mode));
220
+ }
221
+ const bottomRail = findBottomRail(lines, safeWidth);
222
+ if (bottomRail >= 0 && mode === "CONFIRM") {
223
+ lines[bottomRail] = renderEditorRail(
224
+ theme,
225
+ safeWidth,
226
+ {
227
+ right: confirmRailHint(theme, safeWidth, text.length > 0, this.chrome.getPermissionInspection?.() ?? "none"),
228
+ fillToken: "editor",
229
+ rightRaw: true,
230
+ rightTail: theme.style("editor", "\u2500", { bold: true })
231
+ },
232
+ rail
233
+ );
234
+ }
235
+ if (bottomRail >= 0 && mode !== "CONFIRM") lines[bottomRail] = renderEditorRail(theme, safeWidth, {}, rail);
236
+ return lines;
237
+ }
238
+ /**
239
+ * Preserve paste provenance for every immediate-send binding, including the
240
+ * alternate paths that invoke the submit controller without an Editor Enter.
241
+ */
242
+ getTextForSubmit() {
243
+ const text = this.getExpandedText();
244
+ return this.startsWithLiteralOperator() ? guardPastedEditorOperator(text) : text;
245
+ }
246
+ startsWithLiteralOperator() {
247
+ const visible = this.getText();
248
+ return startsWithPastedOperator(visible, this.pastedBangOffsets) || [...this.pastedOperatorTokens].some((token) => visible.trimStart().startsWith(token));
249
+ }
250
+ /** Paste is always literal; a later deliberate key submits it. */
251
+ handleInput(data) {
252
+ this.revision += 1;
253
+ const openedPaste = data.includes("\x1B[200~");
254
+ const closedPaste = data.includes("\x1B[201~");
255
+ const pasteMutation = this.bracketedPasteActive || openedPaste;
256
+ const textBeforeInput = this.getText();
257
+ const keybindings = getKeybindings();
258
+ if (this.startsWithLiteralOperator() && keybindings.matches(data, "tui.input.submit")) {
259
+ const pastedText = this.getTextForSubmit();
260
+ this.pastedBangOffsets.clear();
261
+ this.bracketedPasteActive = false;
262
+ super.setText(pastedText);
263
+ super.handleInput(data);
264
+ return;
265
+ }
266
+ const completingDirectory = this.isShowingAutocomplete() && (keybindings.matches(data, "tui.input.tab") || keybindings.matches(data, "tui.select.confirm"));
267
+ const textBeforeCompletion = completingDirectory ? this.getText() : "";
268
+ super.handleInput(data);
269
+ if (completingDirectory && this.getText() !== textBeforeCompletion && cursorEndsDirectoryPath(this)) {
270
+ super.handleInput(" ");
271
+ }
272
+ const textAfterInput = this.getText();
273
+ this.pastedBangOffsets = remapPastedBangOffsets(
274
+ textBeforeInput,
275
+ textAfterInput,
276
+ this.pastedBangOffsets,
277
+ pasteMutation
278
+ );
279
+ if (openedPaste) this.bracketedPasteActive = true;
280
+ if (closedPaste) this.bracketedPasteActive = false;
281
+ if (pasteMutation && textAfterInput !== this.getExpandedText()) {
282
+ let start = 0;
283
+ while (start < textBeforeInput.length && start < textAfterInput.length && textBeforeInput[start] === textAfterInput[start])
284
+ start++;
285
+ let oldEnd = textBeforeInput.length, end = textAfterInput.length;
286
+ while (oldEnd > start && end > start && textBeforeInput[oldEnd - 1] === textAfterInput[end - 1]) {
287
+ oldEnd--;
288
+ end--;
289
+ }
290
+ const token = textAfterInput.slice(start, end).trimStart();
291
+ if (token && !token.startsWith("!")) this.pastedOperatorTokens.add(token);
292
+ }
293
+ }
294
+ setText(text) {
295
+ this.revision += 1;
296
+ this.pastedOperatorTokens.clear();
297
+ this.pastedBangOffsets.clear();
298
+ this.bracketedPasteActive = false;
299
+ super.setText(text);
300
+ }
301
+ };
302
+
303
+ // src/interactive/interactive-shell.ts
304
+ init_esm_shims();
305
+
306
+ // src/interactive/render-trace.ts
307
+ init_esm_shims();
308
+ import { mkdirSync, readdirSync, rmSync, writeFileSync } from "node:fs";
309
+ import { appendFile } from "node:fs/promises";
310
+ import { dirname, join } from "node:path";
311
+ var RENDER_TRACE_VERSION = 2;
312
+ var INPUT_WEDGE_RING_CAPACITY = 256;
313
+ var INPUT_WEDGE_DUMP_DIRNAME = "input-wedge";
314
+ var INPUT_WEDGE_DUMP_RETAINED = 5;
315
+ function createRing(capacity) {
316
+ const slots = [];
317
+ let next = 0;
318
+ return {
319
+ push(value) {
320
+ if (slots.length < capacity) slots.push(value);
321
+ else slots[next] = value;
322
+ next = (next + 1) % capacity;
323
+ },
324
+ toArray() {
325
+ if (slots.length < capacity) return [...slots];
326
+ return [...slots.slice(next), ...slots.slice(0, next)];
327
+ }
328
+ };
329
+ }
330
+ function classifyInputWedge(inputIngress, frames) {
331
+ const newest = [...inputIngress].reverse().find((record) => record.visualExpected) ?? inputIngress.at(-1);
332
+ if (newest === void 0) return "no-input-recorded";
333
+ return frames.some((frame) => frame.inputHighWater >= newest.inputSeq) ? "input-committed" : "input-not-committed";
334
+ }
335
+ function writeInputWedgeDump(stateDir, snapshot) {
336
+ const directory = join(stateDir, INPUT_WEDGE_DUMP_DIRNAME);
337
+ mkdirSync(directory, { recursive: true });
338
+ const stamp = new Date(snapshot.atEpochMs).toISOString().replace(/[:.]/gu, "-");
339
+ const path = join(directory, `${stamp}-${snapshot.pid}.json`);
340
+ writeFileSync(path, `${JSON.stringify(snapshot, null, 2)}
341
+ `, "utf8");
342
+ try {
343
+ const existing = readdirSync(directory).filter((name) => name.endsWith(".json")).sort();
344
+ for (const name of existing.slice(0, Math.max(0, existing.length - INPUT_WEDGE_DUMP_RETAINED))) {
345
+ rmSync(join(directory, name), { force: true });
346
+ }
347
+ } catch {
348
+ }
349
+ return path;
350
+ }
351
+ function createAsyncTraceWriter(path, options = {}) {
352
+ const maxRecords = options.maxRecords ?? 4096;
353
+ const batchRecords = options.batchRecords ?? 128;
354
+ const append = options.append ?? ((target, payload) => appendFile(target, payload, "utf8"));
355
+ const recordTime = options.recordTime ?? (() => performance.now());
356
+ const appendTimeoutMs = options.appendTimeoutMs ?? 5e3;
357
+ const pending = [];
358
+ let dropped = 0;
359
+ let inFlight = false;
360
+ let scheduled = false;
361
+ let failed = false;
362
+ let closing = false;
363
+ let closePromise = null;
364
+ let resolveClose = null;
365
+ const settleClose = () => {
366
+ if (closing && !inFlight && pending.length === 0) resolveClose?.();
367
+ };
368
+ const pump = () => {
369
+ scheduled = false;
370
+ if (failed || inFlight || pending.length === 0) {
371
+ settleClose();
372
+ return;
373
+ }
374
+ inFlight = true;
375
+ const payload = pending.splice(0, batchRecords).join("");
376
+ let appendTimer = null;
377
+ const appendDeadline = new Promise((_resolve, reject) => {
378
+ appendTimer = setTimeout(() => reject(new Error("render trace append timed out")), appendTimeoutMs);
379
+ });
380
+ void Promise.race([append(path, payload), appendDeadline]).catch(() => {
381
+ failed = true;
382
+ pending.length = 0;
383
+ }).finally(() => {
384
+ if (appendTimer) clearTimeout(appendTimer);
385
+ inFlight = false;
386
+ if (pending.length > 0 && !failed) queueMicrotask(pump);
387
+ else settleClose();
388
+ });
389
+ };
390
+ const schedule = () => {
391
+ if (scheduled || inFlight || failed) return;
392
+ scheduled = true;
393
+ queueMicrotask(pump);
394
+ };
395
+ return {
396
+ enqueue(record) {
397
+ if (failed || closing) return;
398
+ if (pending.length >= maxRecords) {
399
+ pending.shift();
400
+ dropped += 1;
401
+ }
402
+ pending.push(`${JSON.stringify(record)}
403
+ `);
404
+ schedule();
405
+ },
406
+ close() {
407
+ if (closePromise) return closePromise;
408
+ if (dropped > 0 && !failed) {
409
+ pending.push(
410
+ `${JSON.stringify({ type: "trace_drop", version: RENDER_TRACE_VERSION, at: recordTime(), records: dropped })}
411
+ `
412
+ );
413
+ }
414
+ closing = true;
415
+ closePromise = new Promise((resolve) => {
416
+ resolveClose = resolve;
417
+ });
418
+ if (failed) {
419
+ pending.length = 0;
420
+ resolveClose?.();
421
+ } else {
422
+ schedule();
423
+ settleClose();
424
+ }
425
+ return closePromise;
426
+ }
427
+ };
428
+ }
429
+ function rounded(value) {
430
+ return Math.round(value * 1e3) / 1e3;
431
+ }
432
+ function graphemeCount(text) {
433
+ const segmenter = new Intl.Segmenter(void 0, { granularity: "grapheme" });
434
+ let count = 0;
435
+ for (const _part of segmenter.segment(text)) count += 1;
436
+ return count;
437
+ }
438
+ function renderTracePath(env = process.env) {
439
+ const raw = env.CLIO_CODER_RENDER_TRACE?.trim();
440
+ return raw && raw.length > 0 ? raw : null;
441
+ }
442
+ function createRenderTrace(path, now = () => performance.now(), writerOptions = {}) {
443
+ if (path !== null) {
444
+ mkdirSync(dirname(path), { recursive: true });
445
+ writeFileSync(path, "", "utf8");
446
+ }
447
+ const openedAt = now();
448
+ const openedAtEpochMs = Date.now();
449
+ const at = () => rounded(now() - openedAt);
450
+ const writer = path === null ? null : createAsyncTraceWriter(path, { ...writerOptions, recordTime: at });
451
+ const inputRing = createRing(INPUT_WEDGE_RING_CAPACITY);
452
+ const frameRing = createRing(INPUT_WEDGE_RING_CAPACITY);
453
+ let frameSeq = 0;
454
+ let writeSeq = 0;
455
+ let eventSeq = 0;
456
+ let inputSeq = 0;
457
+ let generation = 0;
458
+ let panelHighWater = 0;
459
+ let inputHighWater = 0;
460
+ let queueDepth = 0;
461
+ let currentFrame = null;
462
+ let pendingPanel = null;
463
+ let lastCommitAt = null;
464
+ let firstCommitListener = null;
465
+ let firstCommitDelivered = false;
466
+ const ranges = /* @__PURE__ */ new Map();
467
+ const pendingDrains = /* @__PURE__ */ new Map();
468
+ writer?.enqueue({ type: "trace_start", version: RENDER_TRACE_VERSION, at: 0 });
469
+ const trace = {
470
+ recordPanelRender(metrics) {
471
+ pendingPanel = metrics;
472
+ },
473
+ beginGeneration() {
474
+ generation += 1;
475
+ ranges.clear();
476
+ },
477
+ recordVisibleEvent(fields) {
478
+ eventSeq += 1;
479
+ if (writer === null) return eventSeq;
480
+ const key = `${generation}:${fields.kind}:${fields.contentIndex}`;
481
+ const previous = ranges.get(key) ?? { codeUnits: 0, graphemes: 0 };
482
+ const graphemes = graphemeCount(fields.delta);
483
+ const next = { codeUnits: previous.codeUnits + fields.delta.length, graphemes: previous.graphemes + graphemes };
484
+ ranges.set(key, next);
485
+ writer?.enqueue({
486
+ type: "event_ingress",
487
+ version: RENDER_TRACE_VERSION,
488
+ eventSeq,
489
+ generation,
490
+ kind: fields.kind,
491
+ contentIndex: fields.contentIndex,
492
+ at: at(),
493
+ codeUnitStart: previous.codeUnits,
494
+ codeUnitEnd: next.codeUnits,
495
+ graphemeStart: previous.graphemes,
496
+ graphemeEnd: next.graphemes,
497
+ bytes: Buffer.byteLength(fields.delta, "utf8")
498
+ });
499
+ return eventSeq;
500
+ },
501
+ recordQueue(sequence, action) {
502
+ queueDepth = Math.max(0, queueDepth + (action === "admit" ? 1 : -1));
503
+ writer?.enqueue({
504
+ type: "queue",
505
+ version: RENDER_TRACE_VERSION,
506
+ eventSeq: sequence,
507
+ action,
508
+ at: at(),
509
+ depth: queueDepth
510
+ });
511
+ },
512
+ recordPanelApplied(sequence) {
513
+ panelHighWater = Math.max(panelHighWater, sequence);
514
+ writer?.enqueue({
515
+ type: "panel",
516
+ version: RENDER_TRACE_VERSION,
517
+ eventSeq: sequence,
518
+ at: at(),
519
+ highWater: panelHighWater
520
+ });
521
+ },
522
+ recordInputIngress(action, bytes, visualExpected = action !== "no-visual-change") {
523
+ inputSeq += 1;
524
+ if (visualExpected) inputHighWater = inputSeq;
525
+ const record = {
526
+ type: "input_ingress",
527
+ version: RENDER_TRACE_VERSION,
528
+ inputSeq,
529
+ action,
530
+ at: at(),
531
+ bytes,
532
+ visualExpected
533
+ };
534
+ inputRing.push(record);
535
+ writer?.enqueue(record);
536
+ return inputSeq;
537
+ },
538
+ beginFrame(fields) {
539
+ frameSeq += 1;
540
+ const frame = {
541
+ frameId: frameSeq,
542
+ ...fields,
543
+ beginAt: at(),
544
+ panelHighWater,
545
+ inputHighWater,
546
+ panel: pendingPanel,
547
+ phases: { component: 0, overlay: 0, normalization: 0, cursor: 0 },
548
+ commits: []
549
+ };
550
+ pendingPanel = null;
551
+ currentFrame = frame;
552
+ return frame;
553
+ },
554
+ endFrame(frameToken) {
555
+ const frame = frameToken;
556
+ const endAt = at();
557
+ const terminalEnqueueMs = frame.commits.reduce((sum, commit) => sum + commit.enqueueMs, 0);
558
+ const measured = frame.phases.component + frame.phases.overlay + frame.phases.normalization + frame.phases.cursor + terminalEnqueueMs;
559
+ const record = {
560
+ type: "frame",
561
+ version: RENDER_TRACE_VERSION,
562
+ frameId: frame.frameId,
563
+ mode: frame.mode,
564
+ columns: frame.columns,
565
+ rows: frame.rows,
566
+ beginAt: frame.beginAt,
567
+ endAt,
568
+ durationMs: rounded(Math.max(0, endAt - frame.beginAt)),
569
+ sinceLastCommitMs: lastCommitAt === null || frame.commits.length === 0 ? null : rounded(Math.max(0, (frame.commits[0]?.at ?? endAt) - lastCommitAt)),
570
+ panelHighWater: frame.panelHighWater,
571
+ inputHighWater: frame.inputHighWater,
572
+ panel: frame.panel,
573
+ pipeline: {
574
+ componentMs: rounded(frame.phases.component),
575
+ overlayCompositionMs: rounded(frame.phases.overlay),
576
+ normalizationMs: rounded(frame.phases.normalization),
577
+ cursorExtractionMs: rounded(frame.phases.cursor),
578
+ viewportDiffAnsiCursorMs: rounded(Math.max(0, endAt - frame.beginAt - measured)),
579
+ terminalEnqueueMs: rounded(terminalEnqueueMs)
580
+ },
581
+ commits: frame.commits
582
+ };
583
+ writer?.enqueue(record);
584
+ if (frame.commits.length > 0) {
585
+ frameRing.push(record);
586
+ lastCommitAt = frame.commits.at(-1)?.at ?? endAt;
587
+ if (!firstCommitDelivered) {
588
+ firstCommitDelivered = true;
589
+ firstCommitListener?.(frame.frameId);
590
+ }
591
+ }
592
+ if (currentFrame === frame) currentFrame = null;
593
+ },
594
+ beginPhase(_frame, _phase) {
595
+ return now();
596
+ },
597
+ endPhase(frameToken, phase, phaseToken) {
598
+ const frame = frameToken;
599
+ frame.phases[phase] += Math.max(0, now() - phaseToken);
600
+ },
601
+ beginComponentRender() {
602
+ return currentFrame ? now() : null;
603
+ },
604
+ endComponentRender(token) {
605
+ if (currentFrame === null || token === null) return;
606
+ currentFrame.phases.component += Math.max(0, now() - token);
607
+ },
608
+ recordTerminalWrite(fields) {
609
+ writeSeq += 1;
610
+ const frameId = currentFrame?.frameId ?? null;
611
+ const commit = {
612
+ writeId: writeSeq,
613
+ at: at(),
614
+ bytes: fields.bytes,
615
+ enqueueMs: rounded(fields.enqueueMs),
616
+ returned: fields.returned,
617
+ backpressured: !fields.returned
618
+ };
619
+ currentFrame?.commits.push(commit);
620
+ if (writer === null) return writeSeq;
621
+ writer.enqueue({ type: "terminal_write", version: RENDER_TRACE_VERSION, frameId, ...commit });
622
+ if (!fields.returned) pendingDrains.set(writeSeq, { frameId, at: commit.at });
623
+ return writeSeq;
624
+ },
625
+ recordTerminalDrain(writeId) {
626
+ const pending = pendingDrains.get(writeId);
627
+ if (!pending) return;
628
+ pendingDrains.delete(writeId);
629
+ const drainAt = at();
630
+ writer?.enqueue({
631
+ type: "terminal_drain",
632
+ version: RENDER_TRACE_VERSION,
633
+ writeId,
634
+ frameId: pending.frameId,
635
+ at: drainAt,
636
+ waitMs: rounded(Math.max(0, drainAt - pending.at))
637
+ });
638
+ },
639
+ currentFrameId: () => currentFrame?.frameId ?? null,
640
+ onFirstFrameCommit(listener) {
641
+ firstCommitListener = listener;
642
+ },
643
+ snapshotInputWedge() {
644
+ const inputIngress = inputRing.toArray();
645
+ const frames = frameRing.toArray();
646
+ const nowAt = at();
647
+ const lastIngressAt = inputIngress.at(-1)?.at;
648
+ const lastFrame = frames.at(-1);
649
+ const lastFrameCommitAt = lastFrame?.commits.at(-1)?.at ?? lastFrame?.endAt;
650
+ return {
651
+ version: RENDER_TRACE_VERSION,
652
+ capacity: INPUT_WEDGE_RING_CAPACITY,
653
+ pid: process.pid,
654
+ openedAtEpochMs,
655
+ atEpochMs: Date.now(),
656
+ at: nowAt,
657
+ classification: classifyInputWedge(inputIngress, frames),
658
+ msSinceLastInputIngress: lastIngressAt === void 0 ? null : rounded(nowAt - lastIngressAt),
659
+ msSinceLastCommittedFrame: lastFrameCommitAt === void 0 ? null : rounded(nowAt - lastFrameCommitAt),
660
+ inputIngress,
661
+ frames
662
+ };
663
+ },
664
+ close: () => writer?.close() ?? Promise.resolve()
665
+ };
666
+ return trace;
667
+ }
668
+ function traceComponentRenders(component, trace) {
669
+ const original = component.render;
670
+ const wrapped = function(width) {
671
+ const token = trace.beginComponentRender();
672
+ try {
673
+ return original.call(this, width);
674
+ } finally {
675
+ trace.endComponentRender(token);
676
+ }
677
+ };
678
+ component.render = wrapped;
679
+ return () => {
680
+ if (component.render === wrapped) component.render = original;
681
+ };
682
+ }
683
+ function traceProcessStdout(trace, now = () => performance.now(), stdout = process.stdout) {
684
+ const original = stdout.write;
685
+ const pendingDrainWrites = [];
686
+ let drainListening = false;
687
+ const wrapped = function(...args) {
688
+ const chunk = args[0];
689
+ const start = now();
690
+ const returned = Reflect.apply(original, this, args);
691
+ const enqueueMs = Math.max(0, now() - start);
692
+ let bytes = 0;
693
+ try {
694
+ bytes = Buffer.isBuffer(chunk) ? chunk.byteLength : ArrayBuffer.isView(chunk) ? chunk.byteLength : Buffer.byteLength(String(chunk), typeof args[1] === "string" ? args[1] : "utf8");
695
+ } catch {
696
+ bytes = Buffer.byteLength(String(chunk), "utf8");
697
+ }
698
+ const writeId = trace.recordTerminalWrite({ bytes, enqueueMs, returned });
699
+ if (!returned) {
700
+ pendingDrainWrites.push(writeId);
701
+ if (!drainListening) {
702
+ drainListening = true;
703
+ stdout.once("drain", () => {
704
+ drainListening = false;
705
+ for (const pendingWriteId of pendingDrainWrites.splice(0)) trace.recordTerminalDrain(pendingWriteId);
706
+ });
707
+ }
708
+ }
709
+ return returned;
710
+ };
711
+ stdout.write = wrapped;
712
+ return () => {
713
+ if (stdout.write === wrapped) stdout.write = original;
714
+ };
715
+ }
716
+
717
+ // src/interactive/stdout-backpressure.ts
718
+ init_esm_shims();
719
+ function installStdoutBackpressureGate(stdout = process.stdout) {
720
+ const original = stdout.write;
721
+ const listeners = /* @__PURE__ */ new Set();
722
+ let blocked = false;
723
+ let observed = false;
724
+ let restored = false;
725
+ let drainListening = false;
726
+ const notifyWritable = () => {
727
+ drainListening = false;
728
+ if (!blocked) return;
729
+ blocked = false;
730
+ for (const listener of [...listeners]) listener();
731
+ };
732
+ const listenForDrain = () => {
733
+ if (drainListening || restored) return;
734
+ drainListening = true;
735
+ stdout.once("drain", notifyWritable);
736
+ };
737
+ const wrapped = function(...args) {
738
+ const returned = Reflect.apply(original, this, args);
739
+ if (!returned) {
740
+ observed = true;
741
+ blocked = true;
742
+ listenForDrain();
743
+ }
744
+ return returned;
745
+ };
746
+ stdout.write = wrapped;
747
+ return {
748
+ get blocked() {
749
+ return blocked;
750
+ },
751
+ get observed() {
752
+ return observed;
753
+ },
754
+ onWritable(listener) {
755
+ if (restored || !blocked) {
756
+ queueMicrotask(listener);
757
+ return () => {
758
+ };
759
+ }
760
+ listeners.add(listener);
761
+ return () => listeners.delete(listener);
762
+ },
763
+ whenWritable(timeoutMs) {
764
+ if (restored || !blocked) return Promise.resolve(true);
765
+ return new Promise((resolve) => {
766
+ let timer;
767
+ const release = this.onWritable(() => {
768
+ if (timer) clearTimeout(timer);
769
+ release();
770
+ resolve(true);
771
+ });
772
+ if (timeoutMs !== void 0 && Number.isFinite(timeoutMs) && timeoutMs >= 0) {
773
+ timer = setTimeout(() => {
774
+ release();
775
+ resolve(false);
776
+ }, timeoutMs);
777
+ }
778
+ });
779
+ },
780
+ restore() {
781
+ if (restored) return;
782
+ restored = true;
783
+ blocked = false;
784
+ if (drainListening) {
785
+ stdout.off("drain", notifyWritable);
786
+ drainListening = false;
787
+ }
788
+ if (stdout.write === wrapped) stdout.write = original;
789
+ for (const listener of [...listeners]) listener();
790
+ listeners.clear();
791
+ }
792
+ };
793
+ }
794
+
795
+ // src/interactive/interactive-shell.ts
796
+ var KEEP_ALIVE_INTERVAL_MS = 1 << 30;
797
+ function createInteractiveShell(deps) {
798
+ const terminal = deps.createTerminal();
799
+ const tui = deps.createTui(terminal);
800
+ const scheduleInterval = deps.scheduleInterval ?? ((callback, intervalMs) => setInterval(callback, intervalMs));
801
+ const clearScheduledInterval = deps.clearScheduledInterval ?? ((handle) => clearInterval(handle));
802
+ let mounted = false;
803
+ let keepAlive = null;
804
+ let resolveRun = null;
805
+ let run = null;
806
+ let completedCode = null;
807
+ let stopped = false;
808
+ let stopSettlement = null;
809
+ return {
810
+ terminal,
811
+ tui,
812
+ mount(root, focus) {
813
+ if (mounted) return;
814
+ mounted = true;
815
+ deps.prepareRoot?.(root);
816
+ tui.addChild(root);
817
+ if (tui.mode === "fullscreen") tui.setLayoutRoot?.(root);
818
+ tui.setFocus(focus);
819
+ tui.start();
820
+ },
821
+ anchor() {
822
+ if (run) return run;
823
+ run = new Promise((resolve) => {
824
+ resolveRun = resolve;
825
+ if (completedCode !== null) resolve(completedCode);
826
+ });
827
+ keepAlive = scheduleInterval(() => {
828
+ }, KEEP_ALIVE_INTERVAL_MS);
829
+ return run;
830
+ },
831
+ releaseAnchor() {
832
+ if (!keepAlive) return;
833
+ clearScheduledInterval(keepAlive);
834
+ keepAlive = null;
835
+ },
836
+ stop() {
837
+ if (stopped) return;
838
+ stopped = true;
839
+ try {
840
+ tui.stop();
841
+ } catch {
842
+ } finally {
843
+ try {
844
+ stopSettlement = Promise.resolve(deps.onStop?.()).then(() => void 0);
845
+ } catch {
846
+ stopSettlement = Promise.resolve();
847
+ }
848
+ }
849
+ },
850
+ async commitCurrentFrame() {
851
+ if (!tui.renderNow) {
852
+ tui.requestRender();
853
+ return null;
854
+ }
855
+ tui.renderNow(false);
856
+ return null;
857
+ },
858
+ hasObservedBackpressure: () => false,
859
+ setStreamPacingActive: () => {
860
+ },
861
+ settle() {
862
+ return stopSettlement ?? Promise.resolve();
863
+ },
864
+ nextCommittedFrame() {
865
+ return Promise.resolve(null);
866
+ },
867
+ complete(code) {
868
+ if (completedCode !== null) return;
869
+ completedCode = code;
870
+ resolveRun?.(code);
871
+ }
872
+ };
873
+ }
874
+ var activeRenderTrace = null;
875
+ function getActiveRenderTrace() {
876
+ return activeRenderTrace;
877
+ }
878
+ async function settleLatestInteractiveFrame(gate, timeoutMs, renderFrame) {
879
+ const writableBeforeRender = gate ? await gate.whenWritable(timeoutMs) : true;
880
+ const frameId = await renderFrame();
881
+ if (writableBeforeRender && gate) await gate.whenWritable(timeoutMs);
882
+ return frameId;
883
+ }
884
+ function createProcessInteractiveShell(options = {}) {
885
+ const tracePath = renderTracePath();
886
+ let restoreStdout = null;
887
+ let restoreFirstFrameStdout = null;
888
+ let restoreRoot = null;
889
+ let backpressure = null;
890
+ let observedBackpressure = false;
891
+ let candidate = null;
892
+ try {
893
+ candidate = createRenderTrace(tracePath);
894
+ restoreStdout = traceProcessStdout(candidate);
895
+ activeRenderTrace = candidate;
896
+ } catch {
897
+ restoreStdout?.();
898
+ restoreStdout = null;
899
+ void candidate?.close().catch(() => {
900
+ });
901
+ activeRenderTrace = null;
902
+ }
903
+ const trace = activeRenderTrace;
904
+ if (trace && options.onFirstFrameCommit) trace.onFirstFrameCommit(options.onFirstFrameCommit);
905
+ let firstFrameDelivered = false;
906
+ let firstFrameSeq = 0;
907
+ let firstFrameActive = false;
908
+ let firstFrameWrote = false;
909
+ if (!trace && options.onFirstFrameCommit) {
910
+ const stdout = process.stdout;
911
+ const original = stdout.write;
912
+ const wrapped = function(...args) {
913
+ const returned = Reflect.apply(original, this, args);
914
+ if (firstFrameActive) firstFrameWrote = true;
915
+ return returned;
916
+ };
917
+ stdout.write = wrapped;
918
+ restoreFirstFrameStdout = () => {
919
+ if (stdout.write === wrapped) stdout.write = original;
920
+ };
921
+ }
922
+ const firstFrameOnlyObserver = {
923
+ isEnabled: () => !firstFrameDelivered,
924
+ beginFrame: () => {
925
+ firstFrameSeq += 1;
926
+ firstFrameActive = true;
927
+ firstFrameWrote = false;
928
+ return firstFrameSeq;
929
+ },
930
+ endFrame: (frame) => {
931
+ firstFrameActive = false;
932
+ if (firstFrameDelivered || !firstFrameWrote) return;
933
+ firstFrameDelivered = true;
934
+ options.onFirstFrameCommit?.(frame);
935
+ restoreFirstFrameStdout?.();
936
+ restoreFirstFrameStdout = null;
937
+ },
938
+ beginPhase: () => null,
939
+ endPhase: () => {
940
+ }
941
+ };
942
+ const primaryObserver = trace ?? (options.onFirstFrameCommit ? firstFrameOnlyObserver : null);
943
+ let committedFrameSequence = 0;
944
+ const frameWaiters = [];
945
+ const renderObserver = {
946
+ isEnabled: () => frameWaiters.length > 0 || primaryObserver !== null && (primaryObserver.isEnabled?.() ?? true),
947
+ beginFrame: (fields) => ({
948
+ primary: primaryObserver?.beginFrame(fields),
949
+ primaryActive: primaryObserver !== null && (primaryObserver.isEnabled?.() ?? true),
950
+ frameId: ++committedFrameSequence
951
+ }),
952
+ endFrame: (token) => {
953
+ const frame = token;
954
+ if (frame.primaryActive) primaryObserver?.endFrame(frame.primary);
955
+ for (const waiter of frameWaiters.splice(0)) waiter.resolve(frame.frameId);
956
+ },
957
+ beginPhase: (token, phase) => {
958
+ const frame = token;
959
+ return frame.primaryActive ? primaryObserver?.beginPhase(frame.primary, phase) : null;
960
+ },
961
+ endPhase: (token, phase, phaseToken) => {
962
+ const frame = token;
963
+ if (frame.primaryActive) primaryObserver?.endPhase(frame.primary, phase, phaseToken);
964
+ }
965
+ };
966
+ const renderAdmission = {
967
+ get blocked() {
968
+ return backpressure?.blocked ?? false;
969
+ },
970
+ onWritable(listener) {
971
+ if (backpressure) return backpressure.onWritable(listener);
972
+ queueMicrotask(listener);
973
+ return () => {
974
+ };
975
+ }
976
+ };
977
+ const setStreamPacingActive = (active) => {
978
+ if (active) {
979
+ backpressure ??= installStdoutBackpressureGate();
980
+ return;
981
+ }
982
+ if (!backpressure) return;
983
+ observedBackpressure ||= backpressure.observed;
984
+ backpressure.restore();
985
+ backpressure = null;
986
+ };
987
+ let instrumentationCleanupStarted = false;
988
+ let instrumentationCleanupPromise = Promise.resolve();
989
+ const cleanupInstrumentation = () => {
990
+ if (instrumentationCleanupStarted) return instrumentationCleanupPromise;
991
+ instrumentationCleanupStarted = true;
992
+ const errors = [];
993
+ const attempt = (operation) => {
994
+ try {
995
+ operation();
996
+ } catch (error) {
997
+ errors.push(error);
998
+ }
999
+ };
1000
+ attempt(() => setStreamPacingActive(false));
1001
+ attempt(() => restoreRoot?.());
1002
+ restoreRoot = null;
1003
+ attempt(() => restoreStdout?.());
1004
+ restoreStdout = null;
1005
+ attempt(() => restoreFirstFrameStdout?.());
1006
+ restoreFirstFrameStdout = null;
1007
+ if (activeRenderTrace === trace) activeRenderTrace = null;
1008
+ instrumentationCleanupPromise = (async () => {
1009
+ if (trace) {
1010
+ try {
1011
+ await trace.close();
1012
+ } catch (error) {
1013
+ errors.push(error);
1014
+ }
1015
+ }
1016
+ if (errors.length > 0) throw new AggregateError(errors, "interactive shell instrumentation cleanup failed");
1017
+ })();
1018
+ return instrumentationCleanupPromise;
1019
+ };
1020
+ let shell;
1021
+ try {
1022
+ setStreamPacingActive(options.streamPacingActive === true);
1023
+ shell = createInteractiveShell({
1024
+ createTerminal: options.testing?.createTerminal ?? (() => new ProcessTerminal()),
1025
+ createTui: (terminal) => options.testing?.createTui?.(terminal) ?? (options.tuiMode === "fullscreen" ? new InstrumentedTuiAltScreen(terminal, renderObserver, void 0, void 0, void 0, renderAdmission) : new InstrumentedTuiMainScreen(terminal, renderObserver, void 0, void 0, renderAdmission)),
1026
+ prepareRoot: (root) => {
1027
+ if (trace) restoreRoot = traceComponentRenders(root, trace);
1028
+ },
1029
+ onStop: cleanupInstrumentation
1030
+ });
1031
+ } catch (error) {
1032
+ void cleanupInstrumentation().catch(() => {
1033
+ });
1034
+ throw error;
1035
+ }
1036
+ return {
1037
+ ...shell,
1038
+ nextCommittedFrame() {
1039
+ return new Promise((resolve) => {
1040
+ frameWaiters.push({ resolve });
1041
+ });
1042
+ },
1043
+ async commitCurrentFrame(timeoutMs = 3e4) {
1044
+ return await settleLatestInteractiveFrame(backpressure, timeoutMs, async () => {
1045
+ const tui = shell.tui;
1046
+ const waiter = { resolve: () => {
1047
+ } };
1048
+ const frame = new Promise((resolve) => {
1049
+ waiter.resolve = resolve;
1050
+ frameWaiters.push(waiter);
1051
+ });
1052
+ try {
1053
+ tui.renderNow(false);
1054
+ } catch (error) {
1055
+ const index = frameWaiters.indexOf(waiter);
1056
+ if (index >= 0) frameWaiters.splice(index, 1);
1057
+ throw error;
1058
+ }
1059
+ return await frame;
1060
+ });
1061
+ },
1062
+ hasObservedBackpressure: () => observedBackpressure || backpressure?.observed === true,
1063
+ setStreamPacingActive
1064
+ };
1065
+ }
1066
+
1067
+ // src/interactive/welcome-dashboard.ts
1068
+ init_esm_shims();
1069
+
1070
+ // src/interactive/welcome-art.ts
1071
+ init_esm_shims();
1072
+ var LETTERS = {
1073
+ C: [" \u2588\u2588\u2588\u2588", "\u2588\u2588 ", "\u2588\u2588 ", "\u2588\u2588 ", " \u2588\u2588\u2588\u2588"],
1074
+ L: ["\u2588\u2588 ", "\u2588\u2588 ", "\u2588\u2588 ", "\u2588\u2588 ", "\u2588\u2588\u2588\u2588\u2588"],
1075
+ I: ["\u2588\u2588\u2588", " \u2588 ", " \u2588 ", " \u2588 ", "\u2588\u2588\u2588"],
1076
+ O: [" \u2588\u2588\u2588 ", "\u2588\u2588 \u2588\u2588", "\u2588\u2588 \u2588\u2588", "\u2588\u2588 \u2588\u2588", " \u2588\u2588\u2588 "],
1077
+ D: ["\u2588\u2588\u2588\u2588 ", "\u2588\u2588 \u2588\u2588", "\u2588\u2588 \u2588\u2588", "\u2588\u2588 \u2588\u2588", "\u2588\u2588\u2588\u2588 "],
1078
+ E: ["\u2588\u2588\u2588\u2588\u2588", "\u2588\u2588 ", "\u2588\u2588\u2588\u2588 ", "\u2588\u2588 ", "\u2588\u2588\u2588\u2588\u2588"],
1079
+ R: ["\u2588\u2588\u2588\u2588 ", "\u2588\u2588 \u2588\u2588", "\u2588\u2588\u2588\u2588 ", "\u2588\u2588 \u2588\u2588", "\u2588\u2588 \u2588\u2588"]
1080
+ };
1081
+ var WIDE_LETTERS = {
1082
+ C: [" \u2588\u2588\u2588\u2588\u2588\u2588", "\u2588\u2588 ", "\u2588\u2588 ", "\u2588\u2588 ", " \u2588\u2588\u2588\u2588\u2588\u2588"],
1083
+ L: ["\u2588\u2588 ", "\u2588\u2588 ", "\u2588\u2588 ", "\u2588\u2588 ", "\u2588\u2588\u2588\u2588\u2588\u2588\u2588"],
1084
+ I: ["\u2588\u2588", "\u2588\u2588", "\u2588\u2588", "\u2588\u2588", "\u2588\u2588"],
1085
+ O: [" \u2588\u2588\u2588\u2588\u2588\u2588 ", "\u2588\u2588 \u2588\u2588", "\u2588\u2588 \u2588\u2588", "\u2588\u2588 \u2588\u2588", " \u2588\u2588\u2588\u2588\u2588\u2588 "],
1086
+ D: ["\u2588\u2588\u2588\u2588\u2588\u2588 ", "\u2588\u2588 \u2588\u2588", "\u2588\u2588 \u2588\u2588", "\u2588\u2588 \u2588\u2588", "\u2588\u2588\u2588\u2588\u2588\u2588 "],
1087
+ E: ["\u2588\u2588\u2588\u2588\u2588\u2588\u2588", "\u2588\u2588 ", "\u2588\u2588\u2588\u2588\u2588 ", "\u2588\u2588 ", "\u2588\u2588\u2588\u2588\u2588\u2588\u2588"],
1088
+ R: ["\u2588\u2588\u2588\u2588\u2588\u2588 ", "\u2588\u2588 \u2588\u2588", "\u2588\u2588\u2588\u2588\u2588\u2588 ", "\u2588\u2588 \u2588\u2588", "\u2588\u2588 \u2588\u2588"],
1089
+ " ": [" ", " ", " ", " ", " "]
1090
+ };
1091
+ function stacked(font) {
1092
+ const word = (text) => Array.from({ length: 5 }, (_, row) => [...text].map((letter) => font[letter]?.[row] ?? "").join(" "));
1093
+ const clio = word("CLIO");
1094
+ const coder = word("CODER");
1095
+ const width = coder[0]?.length ?? 0;
1096
+ return [
1097
+ ...clio.map((line) => line.padStart(line.length + Math.floor((width - line.length) / 2)).padEnd(width)),
1098
+ " ".repeat(width),
1099
+ ...coder
1100
+ ];
1101
+ }
1102
+ var WELCOME_WORDMARK = stacked(LETTERS);
1103
+ var WELCOME_WORDMARK_WIDE = stacked(WIDE_LETTERS);
1104
+
1105
+ // src/interactive/welcome-dashboard.ts
1106
+ var WELCOME_PROJECT_CONTEXT_TTL_MS = 1e4;
1107
+ var WELCOME_PROJECT_CONTEXT_RETRY_MS = 2e3;
1108
+ var ROUTE_REASON_MAX = 48;
1109
+ var ROUTE_TARGET_FLOOR = 12;
1110
+ var ROUTE_REASON_FLOOR = 8;
1111
+ function plainOneLine(value) {
1112
+ return sanitizeCallTargetText(value);
1113
+ }
1114
+ function findCurrentStatus(statuses, settings) {
1115
+ const targetId = settings?.chat?.target ?? null;
1116
+ if (!targetId) return null;
1117
+ return statuses.find((status) => status.target.id === targetId) ?? null;
1118
+ }
1119
+ function shortRouteReason(status) {
1120
+ const cleaned = plainOneLine(status.health.lastError ?? status.reason ?? "");
1121
+ if (cleaned.length === 0) return null;
1122
+ return visibleWidth(cleaned) > ROUTE_REASON_MAX ? truncateToWidth(cleaned, ROUTE_REASON_MAX, GLYPH.ellipsis, false) : cleaned;
1123
+ }
1124
+ function deriveRoute(current, targetLabel, modelLabel) {
1125
+ if (targetLabel === null || modelLabel === null) return { route: "unset", routeReason: null };
1126
+ if (current === null) return { route: "unavailable", routeReason: "no such target in settings" };
1127
+ if (!current.available || current.health.status === "down")
1128
+ return { route: "unavailable", routeReason: shortRouteReason(current) };
1129
+ if (current.health.status === "degraded") return { route: "degraded", routeReason: shortRouteReason(current) };
1130
+ if (current.health.status === "healthy") return { route: "ready", routeReason: null };
1131
+ return { route: "checking", routeReason: null };
1132
+ }
1133
+ function normalizeProjectContext(state) {
1134
+ const value = state?.clioMd;
1135
+ if (value === "ok" || value === "stale" || value === "none" || value === "malformed") return value;
1136
+ return null;
1137
+ }
1138
+ function fitPathTail(path, max) {
1139
+ if (max <= 0) return "";
1140
+ if (visibleWidth(path) <= max) return path;
1141
+ const segments = path.split("/").filter((segment) => segment.length > 0);
1142
+ const leaf = segments.at(-1) ?? path;
1143
+ let best = leaf;
1144
+ for (let index = segments.length - 2; index >= 0; index -= 1) {
1145
+ const candidate = `${segments[index]}/${best}`;
1146
+ if (visibleWidth(`${GLYPH.ellipsis}/${candidate}`) > max) break;
1147
+ best = candidate;
1148
+ }
1149
+ const marked = `${GLYPH.ellipsis}/${best}`;
1150
+ if (visibleWidth(marked) <= max) return marked;
1151
+ return truncateToWidth(leaf, max, GLYPH.ellipsis, false);
1152
+ }
1153
+ function fitByPriority(theme, units, maxWidth, protectRank = 0) {
1154
+ const separator = " \xB7 ";
1155
+ const sep = theme.fg("dim", separator);
1156
+ const sepWidth = visibleWidth(separator);
1157
+ const kept = units.map((unit) => ({ ...unit, dropped: false }));
1158
+ const total = () => {
1159
+ const live = kept.filter((unit) => !unit.dropped);
1160
+ if (live.length === 0) return 0;
1161
+ return live.reduce((sum, unit) => sum + visibleWidth(unit.text), 0) + sepWidth * (live.length - 1);
1162
+ };
1163
+ while (total() > maxWidth) {
1164
+ const droppable = kept.filter((unit) => !unit.dropped && unit.rank > protectRank);
1165
+ let worst = droppable[0];
1166
+ if (worst === void 0) break;
1167
+ for (const unit of droppable) if (unit.rank > worst.rank) worst = unit;
1168
+ worst.dropped = true;
1169
+ }
1170
+ const joined = kept.filter((unit) => !unit.dropped).map((unit) => unit.text).join(sep);
1171
+ return visibleWidth(joined) <= maxWidth ? joined : truncateToWidth(joined, maxWidth, GLYPH.ellipsis, false);
1172
+ }
1173
+ function workspacePath(stats) {
1174
+ return plainOneLine(collapseHomePath(stats.cwd));
1175
+ }
1176
+ function workspaceBranch(stats) {
1177
+ const workspace = stats.workspace;
1178
+ if (workspace?.isGit !== true || !workspace.branch) return null;
1179
+ const branch = plainOneLine(workspace.branch);
1180
+ return branch.length === 0 ? null : branch;
1181
+ }
1182
+ function workspaceLabel(theme, stats, room) {
1183
+ if (room <= 0) return "";
1184
+ const path = workspacePath(stats);
1185
+ const branch = workspaceBranch(stats);
1186
+ const paint = (text) => theme.fg("muted", text);
1187
+ if (branch === null) return paint(fitPathTail(path, room));
1188
+ const dirty = stats.workspace?.dirty === true;
1189
+ const branchText = `${theme.fg("info", branch)}${dirty ? theme.fg("warning", "*") : ""}`;
1190
+ const pathRoom = room - visibleWidth(branch) - (dirty ? 1 : 0) - 3;
1191
+ if (pathRoom > 0) {
1192
+ const fitted = fitPathTail(path, pathRoom);
1193
+ const leaf = path.split("/").filter((segment) => segment.length > 0).at(-1) ?? path;
1194
+ if (fitted.endsWith(leaf)) return `${paint(fitted)}${theme.fg("dim", " \xB7 ")}${branchText}`;
1195
+ }
1196
+ return paint(fitPathTail(path, room));
1197
+ }
1198
+ function routeToken(route) {
1199
+ if (route === "ready") return "success";
1200
+ if (route === "degraded") return "warning";
1201
+ if (route === "unavailable") return "error";
1202
+ return "dim";
1203
+ }
1204
+ function routeGlyph(route) {
1205
+ if (route === "ready") return GLYPH.ok;
1206
+ if (route === "degraded") return GLYPH.warnInline;
1207
+ if (route === "unavailable") return GLYPH.error;
1208
+ return GLYPH.queued;
1209
+ }
1210
+ function routeRow(theme, stats, room) {
1211
+ const target = plainOneLine(formatTargetLabel(stats.targetLabel, stats.modelLabel, { abbreviate: false }));
1212
+ if (stats.route === "unset") return theme.fg("warning", truncateToWidth(target, room, GLYPH.ellipsis, false));
1213
+ const token = routeToken(stats.route);
1214
+ const prefix = `${theme.fg(token, routeGlyph(stats.route))} `;
1215
+ const available = room - 2;
1216
+ if (available <= 0) return theme.fg(token, routeGlyph(stats.route));
1217
+ const muted = (text) => theme.fg("muted", text);
1218
+ const reason = stats.routeReason;
1219
+ if (reason === null) return `${prefix}${muted(truncateToWidth(target, available, GLYPH.ellipsis, false))}`;
1220
+ const reasonWidth = visibleWidth(reason);
1221
+ if (visibleWidth(target) + 1 + reasonWidth <= available) return `${prefix}${muted(target)} ${theme.fg(token, reason)}`;
1222
+ const targetRoom = available - reasonWidth - 1;
1223
+ if (targetRoom >= ROUTE_TARGET_FLOOR)
1224
+ return `${prefix}${muted(truncateToWidth(target, targetRoom, GLYPH.ellipsis, false))} ${theme.fg(token, reason)}`;
1225
+ const floor = Math.min(ROUTE_TARGET_FLOOR, available);
1226
+ const reasonRoom = available - floor - 1;
1227
+ if (reasonRoom >= ROUTE_REASON_FLOOR) {
1228
+ return `${prefix}${muted(truncateToWidth(target, floor, GLYPH.ellipsis, false))} ${theme.fg(token, truncateToWidth(reason, reasonRoom, GLYPH.ellipsis, false))}`;
1229
+ }
1230
+ return `${prefix}${muted(truncateToWidth(target, available, GLYPH.ellipsis, false))}`;
1231
+ }
1232
+ function actionRow(theme, stats, room) {
1233
+ const say = (token, text) => theme.fg(token, truncateToWidth(text, room, GLYPH.ellipsis, false));
1234
+ if (stats.route === "unset") {
1235
+ const detail = stats.targetLabel === null ? "no route selected" : "no model selected";
1236
+ return say("warning", `${detail} \xB7 /model`);
1237
+ }
1238
+ if (stats.route === "unavailable") return say("error", "route unavailable \xB7 /settings targets");
1239
+ if (stats.route === "degraded") return say("warning", "route degraded \xB7 /settings targets");
1240
+ if (stats.projectContext === "malformed") return say("warning", "CLIO-CODER.md malformed \xB7 /context to inspect");
1241
+ if (stats.projectContext === "none") return say("dim", "describe a task \xB7 /context init to index this repo");
1242
+ if (stats.projectContext === "stale") return say("dim", "describe a task \xB7 /context refresh to update it");
1243
+ const send = stats.submitKeyLabel === null ? null : `${stats.submitKeyLabel} to send`;
1244
+ return say("dim", ["describe a task", send, "/ for commands"].filter((part) => part !== null).join(" \xB7 "));
1245
+ }
1246
+ function sessionRow(theme, stats, version, width) {
1247
+ const mark = brandMark(theme);
1248
+ const markWidth = visibleWidth(mark);
1249
+ if (width <= markWidth + 1) return truncateToWidth(mark, width, "", false);
1250
+ const room = width - markWidth - 1;
1251
+ const branch = workspaceBranch(stats);
1252
+ const units = [
1253
+ { text: `${theme.style("title", "Clio Coder", { bold: true })} ${theme.fg("dim", `v${version}`)}`, rank: 3 },
1254
+ {
1255
+ text: theme.fg("muted", plainOneLine(formatTargetLabel(stats.targetLabel, stats.modelLabel, { abbreviate: false }))),
1256
+ rank: 0
1257
+ },
1258
+ { text: theme.fg("muted", fitPathTail(workspacePath(stats), Math.max(8, Math.floor(room * 0.5)))), rank: 1 },
1259
+ ...branch ? [
1260
+ {
1261
+ text: `${theme.fg("info", branch)}${stats.workspace?.dirty === true ? theme.fg("warning", "*") : ""}`,
1262
+ rank: 2
1263
+ }
1264
+ ] : []
1265
+ ];
1266
+ return `${mark} ${fitByPriority(theme, units, room)}`;
1267
+ }
1268
+ function shortNames(names) {
1269
+ return names.slice(0, 3).map(plainOneLine).join(", ") + (names.length > 3 ? ` +${names.length - 3}` : "");
1270
+ }
1271
+ function inventory(settings, statuses, agentCount) {
1272
+ const configured = settings?.targets ?? statuses?.map((status) => status.target) ?? [];
1273
+ const ready = statuses?.filter((status) => status.available && status.health.status === "healthy").length ?? 0;
1274
+ const down = statuses?.filter((status) => !status.available || status.health.status === "down").length ?? 0;
1275
+ const degraded = statuses?.filter((status) => status.available && status.health.status === "degraded").length ?? 0;
1276
+ const targets = configured.length === 0 ? "None configured \xB7 /settings targets" : [
1277
+ `${configured.length} configured`,
1278
+ ...ready ? [`${ready} ready`] : [],
1279
+ ...degraded ? [`${degraded} degraded`] : [],
1280
+ ...down ? [`${down} unavailable`] : [],
1281
+ shortNames(configured.map((target) => target.id))
1282
+ ].join(" \xB7 ");
1283
+ const profiles = Object.keys(settings?.fleet?.profiles ?? {});
1284
+ const rosters = Object.keys(settings?.fleet?.rosters ?? {});
1285
+ const fleet = [
1286
+ ...agentCount === void 0 ? [] : [`${agentCount} agent recipes`],
1287
+ ...rosters.length ? [`Rosters: ${shortNames(rosters)}`] : profiles.length ? [`${profiles.length} profiles`] : []
1288
+ ].join(" \xB7 ") || "Uses main model \xB7 /agents to explore";
1289
+ return { targets, fleet };
1290
+ }
1291
+ var WELCOME_HINT_INTERVAL_MS = 15e3;
1292
+ var WELCOME_HINT_MIN_WIDTH = 160;
1293
+ var WELCOME_HINTS = [
1294
+ {
1295
+ title: "Make Clio yours",
1296
+ commands: [
1297
+ ["/model", "Choose a model and target"],
1298
+ ["/library", "Browse skills and extensions"],
1299
+ ["/help", "Explore commands and shortcuts"]
1300
+ ],
1301
+ keys: [
1302
+ ["tui.input.newLine", "New line"],
1303
+ ["clio-coder.model.select", "Model picker"],
1304
+ ["clio-coder.editor.external", "Open your external editor"]
1305
+ ]
1306
+ },
1307
+ {
1308
+ title: "Know your workspace",
1309
+ commands: [
1310
+ ["/context", "Inspect the active context"],
1311
+ ["/fleet", "Explore your agent fleet"],
1312
+ ["/help", "Find a command by name"]
1313
+ ],
1314
+ keys: [
1315
+ ["clio-coder.files.toggle", "Browse files"],
1316
+ ["clio-coder.status.toggle", "Cycle dashboard pages"],
1317
+ ["clio-coder.session.tree", "Explore the session tree"]
1318
+ ]
1319
+ },
1320
+ {
1321
+ title: "Keep work moving",
1322
+ commands: [
1323
+ ["/skills", "See available skills"],
1324
+ ["/model", "Switch the active model"],
1325
+ ["/help", "Look up a shortcut"]
1326
+ ],
1327
+ keys: [
1328
+ ["clio-coder.dispatchBoard.toggle", "Open the worker board"],
1329
+ ["clio-coder.tasks.open", "Open tasks"],
1330
+ ["clio-coder.thinking.cycle", "Cycle thinking effort"]
1331
+ ]
1332
+ }
1333
+ ];
1334
+ function welcomeHints(theme, page, getKeyLabel) {
1335
+ const hint = WELCOME_HINTS[page % WELCOME_HINTS.length];
1336
+ if (!hint) return [];
1337
+ const keys = hint.keys.flatMap(([action, description]) => {
1338
+ const label = getKeyLabel?.(action);
1339
+ return label ? [`${theme.fg("accent", label)} ${theme.fg("muted", description)}`] : [];
1340
+ });
1341
+ return [
1342
+ theme.style("accent", hint.title, { bold: true }) + theme.fg("dim", ` ${page % WELCOME_HINTS.length + 1}/${WELCOME_HINTS.length}`),
1343
+ "",
1344
+ ...hint.commands.map(([command, description]) => `${theme.fg("accent", command)} ${theme.fg("muted", description)}`),
1345
+ "",
1346
+ ...keys.length ? [theme.fg("dim", "Keyboard shortcuts"), ...keys] : []
1347
+ ];
1348
+ }
1349
+ function buildWelcomeDashboardLines(stats, version, width, mode, hintPage = 0, getKeyLabel) {
1350
+ const theme = clioTheme();
1351
+ const safeWidth = Math.max(1, width);
1352
+ if (mode === "session") return [padAnsi(sessionRow(theme, stats, version, safeWidth), safeWidth)];
1353
+ const panelWidth = safeWidth;
1354
+ const room = Math.max(1, panelWidth - 4);
1355
+ const frame = (text) => theme.fg("frame", text);
1356
+ const row = (text) => `${frame("\u2502")} ${padAnsi(truncateToWidth(text, room, GLYPH.ellipsis, false), room)} ${frame("\u2502")}`;
1357
+ const rule2 = (left, right) => frame(`${left}${"\u2500".repeat(Math.max(0, panelWidth - 2))}${right}`);
1358
+ const title = ` Clio Coder v${version} `;
1359
+ const heading = `${frame("\u256D\u2500")}${theme.fg("muted", title)}${frame(`${"\u2500".repeat(Math.max(0, panelWidth - visibleWidth(title) - 3))}\u256E`)}`;
1360
+ const wordmark = panelWidth >= 100 ? WELCOME_WORDMARK_WIDE : WELCOME_WORDMARK;
1361
+ const sideBySide = panelWidth >= 76;
1362
+ const artWidth = sideBySide ? visibleWidth(wordmark[0] ?? "") : 0;
1363
+ const showHints = panelWidth >= WELCOME_HINT_MIN_WIDTH;
1364
+ const contentWidth = showHints ? Math.min(132, Math.floor((room - 3) * 0.58)) : room;
1365
+ const hintWidth = room - contentWidth - 3;
1366
+ const hints = showHints ? welcomeHints(theme, hintPage, getKeyLabel) : [];
1367
+ const detailWidth = sideBySide ? contentWidth - artWidth - 3 : contentWidth;
1368
+ const field = (label, value) => `${theme.fg("dim", `${label} `)}${value}`;
1369
+ const details = [
1370
+ sideBySide ? theme.fg("muted", "Built for the code behind science.") : theme.style("title", "CLIO CODER", { bold: true }),
1371
+ sideBySide ? "" : theme.fg("muted", "Built for the code behind science."),
1372
+ theme.fg("dim", "Model"),
1373
+ routeRow(theme, stats, detailWidth),
1374
+ field("Workspace", workspaceLabel(theme, stats, Math.max(1, detailWidth - 11))),
1375
+ field("Permissions", theme.fg(stats.autonomy === "full-auto" ? "warning" : "muted", stats.autonomy)),
1376
+ theme.fg("dim", "Ask Clio how to use or extend her."),
1377
+ theme.fg("dim", "Targets"),
1378
+ theme.fg("muted", stats.targets),
1379
+ theme.fg("dim", "Fleet"),
1380
+ theme.fg("muted", stats.fleet)
1381
+ ];
1382
+ return [
1383
+ heading,
1384
+ ...details.map((detail, index) => {
1385
+ const art = sideBySide ? `${theme.fg("accent", wordmark[index] ?? "")} ` : "";
1386
+ const content = `${art}${truncateToWidth(detail, detailWidth, GLYPH.ellipsis, false)}`;
1387
+ return row(
1388
+ showHints ? `${padAnsi(content, contentWidth)} ${frame("\u2502")} ${truncateToWidth(hints[index] ?? "", hintWidth, GLYPH.ellipsis, false)}` : content
1389
+ );
1390
+ }),
1391
+ rule2("\u251C", "\u2524"),
1392
+ row(actionRow(theme, stats, room)),
1393
+ rule2("\u2570", "\u256F")
1394
+ ].map((line) => padAnsi(truncateToWidth(line, safeWidth, GLYPH.ellipsis, false), safeWidth));
1395
+ }
1396
+ function statsSignature(stats) {
1397
+ const workspace = stats.workspace;
1398
+ return [
1399
+ stats.cwd,
1400
+ workspace && `${workspace.isGit}${workspace.branch}${workspace.dirty}`,
1401
+ stats.targetLabel,
1402
+ stats.modelLabel,
1403
+ stats.route,
1404
+ stats.routeReason,
1405
+ stats.projectContext,
1406
+ stats.submitKeyLabel,
1407
+ stats.autonomy,
1408
+ stats.targets,
1409
+ stats.fleet
1410
+ ].join("\0");
1411
+ }
1412
+ var WelcomeDashboard = class {
1413
+ constructor(deps) {
1414
+ this.deps = deps;
1415
+ this.now = deps.now ?? (() => Date.now());
1416
+ this.hintStartedAt = this.now();
1417
+ this.schedule = deps.scheduleRefresh ?? ((run) => {
1418
+ this.pendingTimer = setTimeout(() => {
1419
+ this.pendingTimer = null;
1420
+ run();
1421
+ }, 0);
1422
+ this.pendingTimer.unref?.();
1423
+ });
1424
+ this.version = readClioVersion();
1425
+ }
1426
+ deps;
1427
+ cachedRender = null;
1428
+ context = null;
1429
+ /** Single-flight latch: a read slower than the TTL must not stack refreshes. */
1430
+ contextRefreshing = false;
1431
+ pendingTimer = null;
1432
+ disposed = false;
1433
+ mode = "launchpad";
1434
+ now;
1435
+ hintStartedAt;
1436
+ schedule;
1437
+ /**
1438
+ * Read once, here, rather than inside a frame: resolving it walks up for
1439
+ * package.json and parses it, which is filesystem work the render path must
1440
+ * not do even once.
1441
+ */
1442
+ version;
1443
+ render(width) {
1444
+ const stats = this.stats();
1445
+ const hintPage = this.mode === "launchpad" && width >= WELCOME_HINT_MIN_WIDTH ? Math.floor(Math.max(0, this.now() - this.hintStartedAt) / WELCOME_HINT_INTERVAL_MS) % WELCOME_HINTS.length : 0;
1446
+ const shortcutSignature = this.mode === "launchpad" && width >= WELCOME_HINT_MIN_WIDTH ? WELCOME_HINTS[hintPage]?.keys.map(([action]) => this.deps.getKeyLabel?.(action)).join("|") : "";
1447
+ const signature = `${this.mode}\0${statsSignature(stats)}\0${hintPage}\0${shortcutSignature}`;
1448
+ const cached = this.cachedRender;
1449
+ if (cached !== null && cached.width === width && cached.signature === signature) return cached.lines;
1450
+ const lines = buildWelcomeDashboardLines(stats, this.version, width, this.mode, hintPage, this.deps.getKeyLabel);
1451
+ this.cachedRender = { width, signature, lines };
1452
+ return lines;
1453
+ }
1454
+ /** Collapse once, before first-submit dispatch can append transcript output. */
1455
+ collapseToSessionHeader() {
1456
+ if (this.mode === "session") return false;
1457
+ this.mode = "session";
1458
+ this.cachedRender = null;
1459
+ return true;
1460
+ }
1461
+ /** A genuinely new session gets a fresh launchpad and a fresh one-time transition. */
1462
+ resetToLaunchpad() {
1463
+ if (this.mode === "launchpad") return false;
1464
+ this.mode = "launchpad";
1465
+ this.hintStartedAt = this.now();
1466
+ this.cachedRender = null;
1467
+ return true;
1468
+ }
1469
+ /**
1470
+ * Drops the rendered lines only. The project-context reading is not
1471
+ * width-dependent, and pi cascades `invalidate` on terminal cell-dimension
1472
+ * reports; dropping the reading there would flash the header back to
1473
+ * `checking` for a fact that had not changed.
1474
+ */
1475
+ invalidate() {
1476
+ this.cachedRender = null;
1477
+ }
1478
+ /**
1479
+ * After this, a refresh already in flight lands on the floor: it neither
1480
+ * writes state nor asks for a frame from a presentation that is being torn
1481
+ * down.
1482
+ */
1483
+ dispose() {
1484
+ this.disposed = true;
1485
+ if (this.pendingTimer !== null) {
1486
+ clearTimeout(this.pendingTimer);
1487
+ this.pendingTimer = null;
1488
+ }
1489
+ }
1490
+ stats() {
1491
+ const settings = this.deps.getSettings?.();
1492
+ const statuses = this.deps.providers.list();
1493
+ const current = findCurrentStatus(statuses, settings);
1494
+ const targetLabel = current?.target.id ?? settings?.chat?.target ?? null;
1495
+ const modelLabel = settings?.chat?.model ?? current?.target.defaultModel ?? null;
1496
+ const workspace = this.deps.getWorkspaceSnapshot?.() ?? null;
1497
+ const cwd = workspace?.cwd ?? process.cwd();
1498
+ const { route, routeReason } = deriveRoute(current, targetLabel, modelLabel);
1499
+ const launchpad = this.mode === "launchpad";
1500
+ return {
1501
+ cwd,
1502
+ workspace,
1503
+ targetLabel,
1504
+ modelLabel,
1505
+ route,
1506
+ routeReason,
1507
+ projectContext: launchpad ? this.projectContext(cwd) : "checking",
1508
+ submitKeyLabel: launchpad ? this.deps.getSubmitKeyLabel?.() ?? null : null,
1509
+ autonomy: settings?.safety?.autonomy ?? "auto-edit",
1510
+ ...inventory(settings, statuses, this.deps.getAgentCount?.())
1511
+ };
1512
+ }
1513
+ /**
1514
+ * Returns immediately, always, and never touches the filesystem. On a miss it
1515
+ * reports `checking` and schedules the authoritative read off the frame. A
1516
+ * reading is only ever served for the cwd it was taken in, so a directory
1517
+ * change reports `checking` again rather than the previous repository's answer.
1518
+ */
1519
+ projectContext(cwd) {
1520
+ const cached = this.context;
1521
+ if (cached === null || cached.cwd !== cwd) {
1522
+ this.scheduleContextRefresh(cwd);
1523
+ return "checking";
1524
+ }
1525
+ const at = this.now();
1526
+ if (cached.failingSince !== null && at - cached.failingSince >= WELCOME_PROJECT_CONTEXT_TTL_MS) {
1527
+ if (at - cached.attemptedAt >= WELCOME_PROJECT_CONTEXT_RETRY_MS) this.scheduleContextRefresh(cwd);
1528
+ return "checking";
1529
+ }
1530
+ if (at - cached.readAt < WELCOME_PROJECT_CONTEXT_TTL_MS) return cached.state;
1531
+ const due = cached.failingSince === null ? cached.attemptedAt : cached.attemptedAt + WELCOME_PROJECT_CONTEXT_RETRY_MS;
1532
+ if (at >= due) this.scheduleContextRefresh(cwd);
1533
+ return cached.state;
1534
+ }
1535
+ scheduleContextRefresh(cwd) {
1536
+ const read = this.deps.getContextState;
1537
+ if (read === void 0 || this.contextRefreshing || this.disposed) return;
1538
+ this.contextRefreshing = true;
1539
+ this.schedule(() => {
1540
+ if (this.disposed) {
1541
+ this.contextRefreshing = false;
1542
+ return;
1543
+ }
1544
+ let resolved = null;
1545
+ try {
1546
+ resolved = normalizeProjectContext(read(cwd));
1547
+ } catch {
1548
+ resolved = null;
1549
+ } finally {
1550
+ this.contextRefreshing = false;
1551
+ }
1552
+ if (this.disposed) return;
1553
+ const at = this.now();
1554
+ const previous = this.context !== null && this.context.cwd === cwd ? this.context : null;
1555
+ this.context = resolved === null ? {
1556
+ cwd,
1557
+ state: previous?.state ?? "checking",
1558
+ // Deliberately not renewed: a failure must not extend the trust
1559
+ // window of the value it failed to confirm.
1560
+ readAt: previous?.readAt ?? 0,
1561
+ attemptedAt: at,
1562
+ failingSince: previous?.failingSince ?? at
1563
+ } : { cwd, state: resolved, readAt: at, attemptedAt: at, failingSince: null };
1564
+ this.cachedRender = null;
1565
+ this.deps.onFactsRefreshed?.();
1566
+ });
1567
+ }
1568
+ };
1569
+ function createWelcomeDashboard(deps) {
1570
+ return new WelcomeDashboard(deps);
1571
+ }
1572
+ function createBootWelcome(settings, submitKeyLabel, getKeyLabel) {
1573
+ const target = settings.targets.find((entry) => entry.id === settings.chat.target);
1574
+ const model = settings.chat.model ?? target?.defaultModel ?? null;
1575
+ const version = readClioVersion();
1576
+ const stats = {
1577
+ cwd: process.cwd(),
1578
+ workspace: null,
1579
+ targetLabel: settings.chat.target ?? null,
1580
+ modelLabel: model,
1581
+ route: target && model ? "checking" : "unset",
1582
+ routeReason: null,
1583
+ projectContext: "checking",
1584
+ submitKeyLabel,
1585
+ autonomy: settings.safety.autonomy,
1586
+ ...inventory(settings)
1587
+ };
1588
+ return {
1589
+ render: (width) => buildWelcomeDashboardLines(stats, version, width, "launchpad", 0, getKeyLabel),
1590
+ invalidate: () => {
1591
+ }
1592
+ };
1593
+ }
1594
+
1595
+ export {
1596
+ unguardPastedEditorOperator,
1597
+ parseEditorBashCommand,
1598
+ ClioEditor,
1599
+ writeInputWedgeDump,
1600
+ getActiveRenderTrace,
1601
+ createProcessInteractiveShell,
1602
+ createWelcomeDashboard,
1603
+ createBootWelcome
1604
+ };
1605
+ //# sourceMappingURL=chunk-R2UUNSNQ.js.map