@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,1670 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ Box,
4
+ Editor,
5
+ Input,
6
+ KeybindingsManager,
7
+ SelectList,
8
+ TUI_KEYBINDINGS,
9
+ TuiAltScreen,
10
+ TuiMainScreen,
11
+ decodePrintableKey,
12
+ setKeybindings,
13
+ stripTerminalSequences,
14
+ truncateToWidth,
15
+ visibleWidth
16
+ } from "./chunk-6OWUM2NC.js";
17
+ import {
18
+ sanitizeCallTargetText
19
+ } from "./chunk-XNIZBOFV.js";
20
+ import {
21
+ init_esm_shims
22
+ } from "./chunk-ECBHH7LU.js";
23
+
24
+ // src/engine/tui.ts
25
+ init_esm_shims();
26
+
27
+ // src/engine/instrumented-tui.ts
28
+ init_esm_shims();
29
+ var DeferredRenderAdmission = class {
30
+ constructor(admission, render) {
31
+ this.admission = admission;
32
+ this.render = render;
33
+ }
34
+ admission;
35
+ render;
36
+ pending = false;
37
+ force = false;
38
+ release = null;
39
+ request(force) {
40
+ if (!this.admission?.blocked) return false;
41
+ this.pending = true;
42
+ this.force ||= force;
43
+ this.release ??= this.admission.onWritable(() => {
44
+ this.release?.();
45
+ this.release = null;
46
+ if (!this.pending) return;
47
+ const pendingForce = this.force;
48
+ this.pending = false;
49
+ this.force = false;
50
+ this.render(pendingForce);
51
+ });
52
+ return true;
53
+ }
54
+ /** A direct/final render supersedes any older request held behind the gate. */
55
+ settled() {
56
+ this.pending = false;
57
+ this.force = false;
58
+ this.release?.();
59
+ this.release = null;
60
+ }
61
+ };
62
+ var InstrumentedTuiMainScreen = class extends TuiMainScreen {
63
+ constructor(terminal, renderObserver, showHardwareCursor, logDirectory, renderAdmission) {
64
+ super(terminal, showHardwareCursor, logDirectory);
65
+ this.renderObserver = renderObserver;
66
+ this.deferredAdmission = new DeferredRenderAdmission(renderAdmission, (force) => super.requestRender(force));
67
+ }
68
+ renderObserver;
69
+ requestRender(force = false) {
70
+ if (!this.deferredAdmission.request(force)) super.requestRender(force);
71
+ }
72
+ doRender() {
73
+ this.deferredAdmission.settled();
74
+ if (this.renderObserver.isEnabled?.() === false) {
75
+ super.doRender();
76
+ return;
77
+ }
78
+ const frame2 = this.renderObserver.beginFrame({
79
+ mode: this.mode,
80
+ columns: this.terminal.columns,
81
+ rows: this.terminal.rows
82
+ });
83
+ this.currentFrame = frame2;
84
+ try {
85
+ super.doRender();
86
+ } finally {
87
+ this.currentFrame = void 0;
88
+ this.renderObserver.endFrame(frame2);
89
+ }
90
+ }
91
+ compositeOverlays(lines, termWidth, termHeight) {
92
+ return this.measure("overlay", () => super.compositeOverlays(lines, termWidth, termHeight));
93
+ }
94
+ applyLineResets(lines) {
95
+ return this.measure("normalization", () => super.applyLineResets(lines));
96
+ }
97
+ extractCursorPosition(lines, height) {
98
+ return this.measure("cursor", () => super.extractCursorPosition(lines, height));
99
+ }
100
+ measure(phase, operation) {
101
+ if (this.renderObserver.isEnabled?.() === false) return operation();
102
+ const frame2 = this.currentFrame;
103
+ if (frame2 === void 0) return operation();
104
+ const phaseToken = this.renderObserver.beginPhase(frame2, phase);
105
+ try {
106
+ return operation();
107
+ } finally {
108
+ this.renderObserver.endPhase(frame2, phase, phaseToken);
109
+ }
110
+ }
111
+ currentFrame;
112
+ deferredAdmission;
113
+ };
114
+ var InstrumentedTuiAltScreen = class extends TuiAltScreen {
115
+ constructor(terminal, renderObserver, showHardwareCursor, logDirectory, options, renderAdmission) {
116
+ super(terminal, showHardwareCursor, logDirectory, options);
117
+ this.renderObserver = renderObserver;
118
+ this.capturesMouse = options?.mouse ?? true;
119
+ this.deferredAdmission = new DeferredRenderAdmission(renderAdmission, (force) => super.requestRender(force));
120
+ }
121
+ renderObserver;
122
+ terminalSelectionUsers = 0;
123
+ capturesMouse;
124
+ /** pi-tui selects transcript text, but capturing overlays consume its mouse path.
125
+ * Let the terminal select the stable interview screen until it closes. */
126
+ useTerminalSelection() {
127
+ if (!this.capturesMouse) return () => {
128
+ };
129
+ if (this.terminalSelectionUsers++ === 0) this.terminal.write("\x1B[?1006l\x1B[?1003l\x1B[?1002l\x1B[?1000l");
130
+ let released = false;
131
+ return () => {
132
+ if (released) return;
133
+ released = true;
134
+ if (--this.terminalSelectionUsers !== 0) return;
135
+ const term = process.env.TERM?.toLowerCase() ?? "";
136
+ const multiplexed = process.env.TMUX !== void 0 || process.env.ZELLIJ !== void 0 || process.env.STY !== void 0 || term.startsWith("tmux") || term.startsWith("screen");
137
+ this.terminal.write(`\x1B[?1000h\x1B[?1002h${multiplexed ? "" : "\x1B[?1003h"}\x1B[?1006h`);
138
+ };
139
+ }
140
+ currentFrame;
141
+ requestRender(force = false) {
142
+ if (!this.deferredAdmission.request(force)) super.requestRender(force);
143
+ }
144
+ doRender() {
145
+ this.deferredAdmission.settled();
146
+ if (this.renderObserver.isEnabled?.() === false) {
147
+ super.doRender();
148
+ return;
149
+ }
150
+ const frame2 = this.renderObserver.beginFrame({
151
+ mode: this.mode,
152
+ columns: this.terminal.columns,
153
+ rows: this.terminal.rows
154
+ });
155
+ this.currentFrame = frame2;
156
+ try {
157
+ super.doRender();
158
+ } finally {
159
+ this.currentFrame = void 0;
160
+ this.renderObserver.endFrame(frame2);
161
+ }
162
+ }
163
+ compositeOverlays(lines, termWidth, termHeight) {
164
+ return this.measure("overlay", () => super.compositeOverlays(lines, termWidth, termHeight));
165
+ }
166
+ applyLineResets(lines) {
167
+ return this.measure("normalization", () => super.applyLineResets(lines));
168
+ }
169
+ extractCursorPosition(lines, height) {
170
+ return this.measure("cursor", () => super.extractCursorPosition(lines, height));
171
+ }
172
+ measure(phase, operation) {
173
+ if (this.renderObserver.isEnabled?.() === false) return operation();
174
+ const frame2 = this.currentFrame;
175
+ if (frame2 === void 0) return operation();
176
+ const phaseToken = this.renderObserver.beginPhase(frame2, phase);
177
+ try {
178
+ return operation();
179
+ } finally {
180
+ this.renderObserver.endPhase(frame2, phase, phaseToken);
181
+ }
182
+ }
183
+ deferredAdmission;
184
+ };
185
+
186
+ // src/engine/select-list.ts
187
+ init_esm_shims();
188
+ var PI_SELECT_CURSOR = "\u2192";
189
+ var ESC = String.fromCharCode(27);
190
+ var LEADING_CURSOR_PATTERN = new RegExp(`^((?:${ESC}\\[[0-9;]*m)*)${PI_SELECT_CURSOR} `);
191
+ var SelectList2 = class extends SelectList {
192
+ designCursor;
193
+ constructor(items, maxVisible, theme, layout) {
194
+ super(items, maxVisible, theme, layout);
195
+ this.designCursor = theme.cursor;
196
+ }
197
+ render(width) {
198
+ const lines = super.render(width);
199
+ const cursor = this.designCursor;
200
+ if (!cursor || cursor === PI_SELECT_CURSOR) return lines;
201
+ return lines.map((line) => line.replace(LEADING_CURSOR_PATTERN, `$1${cursor} `));
202
+ }
203
+ };
204
+
205
+ // src/engine/tui.ts
206
+ function createAgentProgress(terminal) {
207
+ let active = false;
208
+ return {
209
+ start() {
210
+ if (active) return;
211
+ active = true;
212
+ terminal.setProgress(true);
213
+ },
214
+ stop() {
215
+ if (!active) return;
216
+ active = false;
217
+ terminal.setProgress(false);
218
+ },
219
+ isActive() {
220
+ return active;
221
+ }
222
+ };
223
+ }
224
+
225
+ // src/interactive/theme/glyphs.ts
226
+ init_esm_shims();
227
+ var GLYPH = {
228
+ // Clio wordmark, shown in the welcome and dashboard headers only.
229
+ brand: ">C_",
230
+ // Agent voice glyph for the chat reply prefix. It renders in accent on a
231
+ // normal turn and error red on a failed one. The `>C_` wordmark is no longer
232
+ // the reply prefix; it survives only in the two headers above.
233
+ agent: "\u2726",
234
+ user: "\u203A",
235
+ // Selection focus marker for list overlays. It is deliberately distinct from
236
+ // the tool ledger's toolHeader so a focused row never reads as a tool line.
237
+ cursor: "\u276F",
238
+ toolHeader: "\u25B8",
239
+ running: "\u25CF",
240
+ queued: "\u25CC",
241
+ speed: "\u26A1",
242
+ ok: "\u2713",
243
+ error: "\u2717",
244
+ cancelled: "\u2298",
245
+ active: "\u25C6",
246
+ scoped: "\u25C7",
247
+ up: "\u2191",
248
+ down: "\u2193",
249
+ rail: "\u2502",
250
+ innerDivider: "\u254C",
251
+ barFull: "\u2588",
252
+ barEmpty: "\u2591",
253
+ contextFull: "\u25B0",
254
+ contextFree: "\u25B1",
255
+ // Autocompact reserve cells: held-back headroom is neither used nor free,
256
+ // so it carries its own glyph and never reads as filled when only color is
257
+ // lost. The medium-shade block is single-width in the same fonts that carry
258
+ // the barFull/barEmpty fallbacks.
259
+ contextReserve: "\u2592",
260
+ info: "\u2139",
261
+ warn: "\u26A0",
262
+ warnInline: "!",
263
+ phaseWaiting: "\u25D4",
264
+ phaseThinking: "\u25D0",
265
+ phaseWriting: "\u25D1",
266
+ phaseTool: "\u2699",
267
+ phaseBlocked: "\u23F8",
268
+ phaseRetry: "\u21BB",
269
+ phaseCompact: "\u267B",
270
+ phaseDispatch: "\u21F2",
271
+ // Marks a run that Clio started for itself (a shadow worker or an internal
272
+ // harness run) so internal activity reads as a sub-process of the current
273
+ // turn. It replaces the old `sh:`/`in:` agent-name prefixes; the two
274
+ // audiences are told apart by tone, not by a second glyph.
275
+ subProcess: "\u21B3",
276
+ // Who asked for a dispatched run. Hollow is the operator's own (/run,
277
+ // /delegate); filled is one the model started by calling a dispatch tool.
278
+ // The transcript block, the board row, and the footer count share the pair,
279
+ // so a running ◇ anywhere is work the operator started themselves.
280
+ workerHuman: "\u25C7",
281
+ workerAgent: "\u25C6",
282
+ // A run neither the operator nor the model asked for: wiki documenting, a
283
+ // bootstrap scout, a judge. It stays off the transcript entirely, so the
284
+ // board is the only surface that shows it and it gets the quietest mark
285
+ // that still holds the origin column.
286
+ workerInternal: "\xB7",
287
+ ellipsis: "\u2026",
288
+ favorite: "\u2605"
289
+ };
290
+ var SPINNER_FRAMES = ["\u28FE", "\u28FD", "\u28FB", "\u28BF", "\u287F", "\u28DF", "\u28EF", "\u28F7"];
291
+ function spinnerFrame(tick) {
292
+ const index = (tick % SPINNER_FRAMES.length + SPINNER_FRAMES.length) % SPINNER_FRAMES.length;
293
+ return SPINNER_FRAMES[index] ?? SPINNER_FRAMES[0];
294
+ }
295
+
296
+ // src/interactive/theme/index.ts
297
+ init_esm_shims();
298
+
299
+ // src/interactive/theme/tokens.ts
300
+ init_esm_shims();
301
+ var TOKENS = {
302
+ // The composer rails alone own the neon intensity tier.
303
+ editor: { rgb: [64, 255, 191], xterm: 85 },
304
+ editorDanger: { rgb: [255, 80, 88], xterm: 203 },
305
+ editorAction: { rgb: [255, 171, 69], xterm: 215 },
306
+ accent: { rgb: [83, 177, 150], xterm: 72 },
307
+ accentDeep: { rgb: [62, 147, 137], xterm: 66 },
308
+ tool: { rgb: [111, 173, 165], xterm: 109 },
309
+ agent: { rgb: [207, 144, 91], xterm: 173 },
310
+ // Secondary orange remains below the composer intensity tier. The token name teaches the rule: orange
311
+ // means Clio is acting. It fires only for Clio's signature actions
312
+ // (dispatching, queued and running fleet work, steering) and for the border
313
+ // of a prompt that has taken the keyboard and is waiting on a decision, never
314
+ // as decoration, and never a metric, at most one orange element per region of
315
+ // the screen. warning stays the soft amber for actual warnings.
316
+ action: { rgb: [217, 155, 98], xterm: 179 },
317
+ success: { rgb: [119, 184, 145], xterm: 108 },
318
+ warning: { rgb: [211, 176, 107], xterm: 179 },
319
+ error: { rgb: [219, 130, 137], xterm: 174 },
320
+ info: { rgb: [128, 167, 206], xterm: 110 },
321
+ reason: { rgb: [175, 155, 201], xterm: 146 },
322
+ dim: { rgb: [106, 122, 133], xterm: 59 },
323
+ muted: { rgb: [138, 153, 164], xterm: 102 },
324
+ title: { rgb: [114, 184, 173], xterm: 109 },
325
+ frame: { rgb: [47, 93, 90], xterm: 23 },
326
+ frameStrong: { rgb: [42, 171, 158], xterm: 37 }
327
+ };
328
+ var SGR_RESET = "\x1B[0m";
329
+ var SGR_DIM = "\x1B[2m";
330
+ function colorDisabled(env = process.env) {
331
+ const raw = env.NO_COLOR;
332
+ return typeof raw === "string" && raw.length > 0;
333
+ }
334
+ function detectTruecolor(env = process.env) {
335
+ const colorTerm = (env.COLORTERM ?? "").toLowerCase();
336
+ if (colorTerm.includes("truecolor") || colorTerm.includes("24bit")) return true;
337
+ const term = (env.TERM ?? "").toLowerCase();
338
+ return term.includes("truecolor") || term.includes("24bit");
339
+ }
340
+ function fgCode(color, truecolor) {
341
+ return truecolor ? `38;2;${color.rgb[0]};${color.rgb[1]};${color.rgb[2]}` : `38;5;${color.xterm}`;
342
+ }
343
+ function bgCode(color, truecolor) {
344
+ return truecolor ? `48;2;${color.rgb[0]};${color.rgb[1]};${color.rgb[2]}` : `48;5;${color.xterm}`;
345
+ }
346
+ function fgSequence(token, truecolor = detectTruecolor()) {
347
+ if (colorDisabled()) return "";
348
+ return `\x1B[${fgCode(TOKENS[token], truecolor)}m`;
349
+ }
350
+ function createClioTheme(options = {}) {
351
+ const truecolor = options.truecolor ?? detectTruecolor();
352
+ const color = options.color ?? !colorDisabled();
353
+ const paint = (text, mods) => {
354
+ const codes = [];
355
+ if (mods.bold) codes.push("1");
356
+ if (mods.dim) codes.push("2");
357
+ if (mods.italic) codes.push("3");
358
+ if (mods.underline) codes.push("4");
359
+ if (color && mods.fg) codes.push(fgCode(TOKENS[mods.fg], truecolor));
360
+ if (color && mods.bg) codes.push(bgCode(TOKENS[mods.bg], truecolor));
361
+ if (codes.length === 0) return text;
362
+ return `\x1B[${codes.join(";")}m${text}${SGR_RESET}`;
363
+ };
364
+ return {
365
+ truecolor,
366
+ paint,
367
+ fg: (token, text) => paint(text, { fg: token }),
368
+ bg: (token, text) => paint(text, { bg: token }),
369
+ style: (token, text, mods = {}) => paint(text, { ...mods, fg: token }),
370
+ fgSequence: (token) => color ? `\x1B[${fgCode(TOKENS[token], truecolor)}m` : ""
371
+ };
372
+ }
373
+ function isClioToken(value) {
374
+ return Object.hasOwn(TOKENS, value);
375
+ }
376
+ var HEX_COLOR = /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/u;
377
+ function paintHex(text, hex, options = {}) {
378
+ const match = HEX_COLOR.exec(hex);
379
+ if (match === null) return text;
380
+ if (!(options.color ?? !colorDisabled())) return text;
381
+ const truecolor = options.truecolor ?? detectTruecolor();
382
+ const red = Number.parseInt(match[1] ?? "0", 16);
383
+ const green = Number.parseInt(match[2] ?? "0", 16);
384
+ const blue = Number.parseInt(match[3] ?? "0", 16);
385
+ if (truecolor) return `\x1B[38;2;${red};${green};${blue}m${text}${SGR_RESET}`;
386
+ const cube = (channel) => Math.round(channel / 255 * 5);
387
+ return `\x1B[38;5;${16 + 36 * cube(red) + 6 * cube(green) + cube(blue)}m${text}${SGR_RESET}`;
388
+ }
389
+
390
+ // src/interactive/theme/components.ts
391
+ init_esm_shims();
392
+
393
+ // src/interactive/theme/segments.ts
394
+ init_esm_shims();
395
+ function present(parts) {
396
+ return parts.filter((part) => typeof part === "string" && part.length > 0);
397
+ }
398
+ function brandMark(theme) {
399
+ const prompt = GLYPH.brand.slice(0, 1);
400
+ const initial = GLYPH.brand.slice(1, 2);
401
+ const cursor = GLYPH.brand.slice(2, 3);
402
+ return `${theme.fg("dim", prompt)}${theme.style("accent", initial, { bold: true })}${theme.fg("dim", cursor)}`;
403
+ }
404
+ function dotSep(theme) {
405
+ return theme.fg("dim", " \xB7 ");
406
+ }
407
+ function barSep(theme) {
408
+ return theme.fg("frame", " \u2502 ");
409
+ }
410
+ function sectionTag(theme, token, label, pad = 0) {
411
+ const text = pad > 0 ? label.padEnd(pad) : label;
412
+ return theme.style(token, text, { bold: true });
413
+ }
414
+ function screenTitle(theme, label) {
415
+ return theme.style("title", label, { bold: true });
416
+ }
417
+ function listGroupHeader(theme, label) {
418
+ return theme.fg("dim", `\u2500\u2500 ${label}`);
419
+ }
420
+ function joinChips(theme, parts) {
421
+ return present(parts).join(dotSep(theme));
422
+ }
423
+
424
+ // src/interactive/theme/components.ts
425
+ var identity = (text) => text;
426
+ function markdownTheme(theme, highlightCode) {
427
+ return {
428
+ heading: (text) => screenTitle(theme, text),
429
+ link: (text) => theme.fg("info", text),
430
+ linkUrl: (text) => theme.fg("dim", text),
431
+ code: (text) => theme.fg("muted", text),
432
+ codeBlock: (text) => text,
433
+ codeBlockBorder: (text) => theme.fg("frame", text),
434
+ quote: (text) => theme.fg("muted", text),
435
+ quoteBorder: (text) => theme.fg("frame", text),
436
+ hr: (text) => theme.fg("frame", text),
437
+ listBullet: (text) => theme.fg("accent", text),
438
+ bold: (text) => theme.paint(text, { bold: true }),
439
+ italic: (text) => theme.paint(text, { italic: true }),
440
+ strikethrough: identity,
441
+ underline: (text) => theme.paint(text, { underline: true }),
442
+ ...highlightCode ? { highlightCode } : {}
443
+ };
444
+ }
445
+ function selectListTheme(theme) {
446
+ return {
447
+ // The design cursor the engine SelectList swaps in for pi-tui's arrow.
448
+ cursor: GLYPH.cursor,
449
+ selectedPrefix: (text) => theme.fg("accent", text),
450
+ selectedText: (text) => theme.style("accent", text, { bold: true }),
451
+ description: (text) => theme.fg("muted", text),
452
+ scrollInfo: (text) => theme.fg("dim", text),
453
+ noMatch: (text) => theme.fg("warning", text)
454
+ };
455
+ }
456
+ function settingsListTheme(theme) {
457
+ return {
458
+ label: (text, selected) => selected ? theme.style("accent", text, { bold: true }) : text,
459
+ value: (text, selected) => selected ? theme.fg("success", text) : theme.fg("muted", text),
460
+ description: (text) => theme.fg("muted", text),
461
+ cursor: GLYPH.cursor,
462
+ hint: (text) => theme.fg("dim", text)
463
+ };
464
+ }
465
+ function editorTheme(theme) {
466
+ return {
467
+ borderColor: (text) => theme.style("editor", text, { bold: true }),
468
+ selectList: selectListTheme(theme)
469
+ };
470
+ }
471
+
472
+ // src/interactive/theme/labels.ts
473
+ init_esm_shims();
474
+ var identitySegments = new Intl.Segmenter(void 0, { granularity: "grapheme" });
475
+ function fitIdentityLabel(value, width) {
476
+ value = sanitizeCallTargetText(value);
477
+ const room = Math.max(0, Math.floor(width));
478
+ if (visibleWidth(value) <= room) return value;
479
+ if (room <= 1) return room === 1 ? "\u2026" : "";
480
+ const tailBudget = Math.ceil((room - 1) / 2);
481
+ let tail = "";
482
+ for (const { segment } of [...identitySegments.segment(value)].reverse()) {
483
+ if (visibleWidth(segment + tail) > tailBudget) break;
484
+ tail = segment + tail;
485
+ }
486
+ const headBudget = room - 1 - visibleWidth(tail);
487
+ let head = "";
488
+ for (const { segment } of identitySegments.segment(value)) {
489
+ if (visibleWidth(head + segment) > headBudget) break;
490
+ head += segment;
491
+ }
492
+ return `${head}\u2026${tail}`;
493
+ }
494
+ function abbreviateModelId(modelId) {
495
+ const value = sanitizeCallTargetText(modelId ?? "");
496
+ if (value.length === 0) return "model";
497
+ if (visibleWidth(value) <= 24) return value;
498
+ const slash = value.lastIndexOf("/");
499
+ if (slash < 0) return fitIdentityLabel(value, 24);
500
+ const placement = value.slice(0, slash);
501
+ const model = value.slice(slash + 1);
502
+ const modelBudget = Math.min(18, visibleWidth(model));
503
+ return `${fitIdentityPrefix(placement, 23 - modelBudget)}/${fitIdentityLabel(model, modelBudget)}`;
504
+ }
505
+ function fitIdentityPrefix(value, width) {
506
+ return stripTerminalSequences(truncateToWidth(value, Math.max(0, width), "\u2026", false));
507
+ }
508
+ function formatTargetLabel(targetId, modelId, options = {}) {
509
+ const target = sanitizeCallTargetText(targetId ?? "");
510
+ const model = sanitizeCallTargetText(modelId ?? "");
511
+ const fit = (label) => options.width === void 0 ? label : fitIdentityLabel(label, options.width);
512
+ if (target.length === 0 && model.length === 0) return fit("not configured");
513
+ if (options.width !== void 0 && target.length > 0 && model.length > 0) {
514
+ const width = Math.max(0, Math.floor(options.width));
515
+ const separator = options.separator ?? " \xB7 ";
516
+ const full = `${target}${separator}${model}`;
517
+ if (visibleWidth(full) <= width) return full;
518
+ const leaf = model.slice(model.lastIndexOf("/") + 1);
519
+ const available = width - visibleWidth(separator);
520
+ if (available < 9) return fitIdentityLabel(leaf, width);
521
+ const modelBudget = Math.min(visibleWidth(leaf), Math.max(8, Math.ceil(available * 0.7)));
522
+ const targetBudget = Math.min(visibleWidth(target), available - modelBudget);
523
+ return `${fitIdentityPrefix(target, targetBudget)}${separator}${fitIdentityLabel(leaf, available - targetBudget)}`;
524
+ }
525
+ const shown = options.abbreviate === false ? model : abbreviateModelId(model);
526
+ if (target.length === 0) return fit(`no target \xB7 ${shown}`);
527
+ if (model.length === 0) return fit(`${target} \xB7 no model`);
528
+ return `${target}${options.separator ?? " \xB7 "}${shown}`;
529
+ }
530
+ function formatCompactMs(value) {
531
+ const ms = Math.max(0, Math.round(value));
532
+ if (ms < 1e3) return `${ms}ms`;
533
+ const seconds = ms / 1e3;
534
+ return seconds < 60 ? `${seconds.toFixed(seconds >= 10 ? 0 : 1)}s` : `${Math.floor(seconds / 60)}m${Math.round(seconds % 60)}s`;
535
+ }
536
+ function formatContextPercent(percent) {
537
+ return typeof percent === "number" && Number.isFinite(percent) ? `${percent.toFixed(1)}%` : "?%";
538
+ }
539
+ function collapseHomePath(path) {
540
+ const home = process.env.HOME;
541
+ if (!home || home.length === 0) return path;
542
+ if (path === home) return "~";
543
+ return path.startsWith(`${home}/`) ? `~/${path.slice(home.length + 1)}` : path;
544
+ }
545
+
546
+ // src/interactive/theme/rules.ts
547
+ init_esm_shims();
548
+ function padAnsi(text, width, ellipsis = "") {
549
+ return truncateToWidth(text, Math.max(0, width), ellipsis, true);
550
+ }
551
+ function fitUnits(theme, prefix, units, maxWidth) {
552
+ const sep = " \xB7 ";
553
+ let line = prefix;
554
+ for (let index = 0; index < units.length; index += 1) {
555
+ const candidate = index === 0 ? `${line}${units[index]}` : `${line}${sep}${units[index]}`;
556
+ const reserve = index < units.length - 1 ? 2 : 0;
557
+ if (visibleWidth(candidate) + reserve > maxWidth) {
558
+ if (index === 0) return truncateToWidth(candidate, Math.max(0, maxWidth), "\u2026", false);
559
+ return `${line} ${theme.fg("dim", "\u2026")}`;
560
+ }
561
+ line = candidate;
562
+ }
563
+ return line;
564
+ }
565
+ function rule(theme, width, options = {}) {
566
+ const safeWidth = Math.max(0, width);
567
+ if (safeWidth === 0) return "";
568
+ const left = options.left ? `${theme.style(options.leftToken ?? "accent", options.left, { bold: true })} ` : "";
569
+ const rightBody = options.rightRaw ? options.right : theme.fg(options.rightToken ?? "muted", options.right ?? "");
570
+ const right = options.right ? ` ${rightBody} ${options.rightTail ?? ""}` : "";
571
+ const labelsWidth = visibleWidth(left) + visibleWidth(right);
572
+ if (labelsWidth >= safeWidth) return truncateToWidth(`${left}${right}`.trim(), safeWidth, "", true);
573
+ const fill = theme.style(options.fillToken ?? "frame", "\u2500".repeat(safeWidth - labelsWidth), {
574
+ bold: options.fillToken === "frameStrong" || options.fillToken === "editor"
575
+ });
576
+ return `${left}${fill}${right}`;
577
+ }
578
+ function frame(theme, title, lines, width, opts = {}) {
579
+ const safeWidth = Math.max(4, width);
580
+ const contentWidth = Math.max(0, safeWidth - 4);
581
+ const frameFg = (text) => theme.fg("frame", text);
582
+ const hasTitle = title.length > 0;
583
+ const styledTitle = !hasTitle ? "" : title.includes("\x1B") ? title : theme.style("title", title, { bold: true });
584
+ const titleWidth = visibleWidth(title);
585
+ const meta = opts.rightMeta ?? "";
586
+ const hasMeta = meta.length > 0;
587
+ const metaWidth = hasMeta ? visibleWidth(meta) : 0;
588
+ const leftVisible = 2 + (hasTitle ? titleWidth + 2 : 0);
589
+ const rightVisible = hasMeta ? metaWidth + 4 : 1;
590
+ const fillWidth = Math.max(0, safeWidth - leftVisible - rightVisible);
591
+ const leftStr = hasTitle ? `${frameFg("\u250C\u2500")} ${styledTitle} ` : frameFg("\u250C\u2500");
592
+ const rightStr = hasMeta ? ` ${theme.fg("dim", meta)} ${frameFg("\u2500\u2510")}` : frameFg("\u2510");
593
+ const top = `${leftStr}${frameFg("\u2500".repeat(fillWidth))}${rightStr}`;
594
+ const body = lines.map((line) => `${frameFg("\u2502")} ${padAnsi(line, contentWidth)} ${frameFg("\u2502")}`);
595
+ const bottom = `${frameFg("\u2514")}${frameFg("\u2500".repeat(safeWidth - 2))}${frameFg("\u2518")}`;
596
+ return [top, ...body, bottom];
597
+ }
598
+ function innerDivider(theme, width) {
599
+ return theme.fg("frame", GLYPH.innerDivider.repeat(Math.max(0, width)));
600
+ }
601
+
602
+ // src/interactive/theme/index.ts
603
+ var sharedTheme = null;
604
+ function clioTheme() {
605
+ sharedTheme ??= createClioTheme();
606
+ return sharedTheme;
607
+ }
608
+
609
+ // src/interactive/keybinding-manager.ts
610
+ init_esm_shims();
611
+
612
+ // src/domains/config/keybindings.ts
613
+ init_esm_shims();
614
+ var CLIO_APP_KEYBINDINGS = {
615
+ "clio-coder.library.toggle": {
616
+ defaultKeys: "alt+l",
617
+ description: "Library",
618
+ scope: "composer",
619
+ kind: "toggle",
620
+ repeat: false,
621
+ leader: "l"
622
+ },
623
+ "clio-coder.model.select": {
624
+ defaultKeys: "alt+m",
625
+ description: "Model picker",
626
+ scope: "composer",
627
+ kind: "toggle",
628
+ repeat: false,
629
+ leader: "m"
630
+ },
631
+ "clio-coder.output.cycle": {
632
+ defaultKeys: "alt+o",
633
+ description: "Output style",
634
+ scope: "composer",
635
+ kind: "cycle",
636
+ repeat: false,
637
+ leader: "o"
638
+ },
639
+ "clio-coder.status.toggle": {
640
+ defaultKeys: "alt+u",
641
+ description: "Dashboard pages: Activity \u2192 Context \u2192 Status \u2192 closed",
642
+ scope: "composer",
643
+ kind: "cycle",
644
+ repeat: false,
645
+ leader: "u"
646
+ },
647
+ "clio-coder.dispatchBoard.toggle": {
648
+ defaultKeys: "alt+w",
649
+ description: "Workers",
650
+ scope: "composer",
651
+ kind: "toggle",
652
+ repeat: false,
653
+ leader: "w"
654
+ },
655
+ "clio-coder.files.toggle": {
656
+ defaultKeys: "alt+e",
657
+ description: "Files (from Clio focus)",
658
+ scope: "composer",
659
+ kind: "toggle",
660
+ repeat: false,
661
+ leader: "e"
662
+ },
663
+ "clio-coder.thinking.cycle": {
664
+ defaultKeys: "shift+tab",
665
+ description: "Thinking effort",
666
+ scope: "composer",
667
+ kind: "cycle",
668
+ repeat: false,
669
+ leader: "t"
670
+ },
671
+ "clio-coder.message.followUp": {
672
+ defaultKeys: "ctrl+q",
673
+ description: "Send after the active run",
674
+ scope: "composer",
675
+ kind: "send",
676
+ repeat: false,
677
+ leader: "f"
678
+ },
679
+ "clio-coder.message.dequeue": {
680
+ defaultKeys: "alt+q",
681
+ description: "Restore queued messages",
682
+ scope: "composer",
683
+ kind: "send",
684
+ repeat: false,
685
+ leader: "q"
686
+ },
687
+ "clio-coder.exit": {
688
+ defaultKeys: "ctrl+d",
689
+ description: "Exit empty idle composer with no queued messages",
690
+ scope: "composer",
691
+ kind: "exit",
692
+ repeat: false
693
+ },
694
+ "clio-coder.leader": {
695
+ defaultKeys: "ctrl+g",
696
+ description: "Open contextual action menu",
697
+ scope: "composer",
698
+ kind: "toggle",
699
+ repeat: false
700
+ },
701
+ "clio-coder.tasks.open": {
702
+ defaultKeys: [],
703
+ description: "Tasks (/tasks)",
704
+ scope: "composer",
705
+ kind: "toggle",
706
+ repeat: false
707
+ },
708
+ "clio-coder.decisions.open": {
709
+ defaultKeys: [],
710
+ description: "Decisions (/decisions)",
711
+ scope: "composer",
712
+ kind: "toggle",
713
+ repeat: false
714
+ },
715
+ "clio-coder.session.tree": {
716
+ defaultKeys: [],
717
+ description: "Session tree (/tree)",
718
+ scope: "composer",
719
+ kind: "toggle",
720
+ repeat: false
721
+ },
722
+ "clio-coder.model.cycleForward": {
723
+ defaultKeys: [],
724
+ description: "Next scoped model",
725
+ scope: "composer",
726
+ kind: "cycle",
727
+ repeat: false
728
+ },
729
+ "clio-coder.model.cycleBackward": {
730
+ defaultKeys: [],
731
+ description: "Previous scoped model",
732
+ scope: "composer",
733
+ kind: "cycle",
734
+ repeat: false
735
+ },
736
+ "clio-coder.dispatch.background": {
737
+ defaultKeys: [],
738
+ description: "Background attached dispatch",
739
+ scope: "composer",
740
+ kind: "send",
741
+ repeat: false,
742
+ leader: "s"
743
+ },
744
+ "clio-coder.message.interrupt": {
745
+ defaultKeys: [],
746
+ description: "Interrupt with draft",
747
+ scope: "composer",
748
+ kind: "send",
749
+ repeat: false,
750
+ leader: "i"
751
+ },
752
+ "clio-coder.editor.external": {
753
+ defaultKeys: [],
754
+ description: "Edit expanded draft externally",
755
+ scope: "composer",
756
+ kind: "edit",
757
+ repeat: false,
758
+ leader: "g"
759
+ },
760
+ "clio-coder.notifications.dismiss": {
761
+ defaultKeys: [],
762
+ description: "Dismiss oldest notification",
763
+ scope: "composer",
764
+ kind: "dismiss",
765
+ repeat: false,
766
+ leader: "x"
767
+ }
768
+ };
769
+ var CLIO_KEYBINDINGS = {
770
+ ...TUI_KEYBINDINGS,
771
+ "tui.editor.historyPrevious": { ...TUI_KEYBINDINGS["tui.editor.historyPrevious"], defaultKeys: "ctrl+p" },
772
+ "tui.editor.historyNext": { ...TUI_KEYBINDINGS["tui.editor.historyNext"], defaultKeys: "ctrl+n" },
773
+ "tui.editor.deleteWordBackward": {
774
+ ...TUI_KEYBINDINGS["tui.editor.deleteWordBackward"],
775
+ defaultKeys: ["ctrl+w", "alt+backspace", "ctrl+backspace"]
776
+ },
777
+ "tui.editor.undo": { ...TUI_KEYBINDINGS["tui.editor.undo"], defaultKeys: "ctrl+_" },
778
+ "tui.input.newLine": { ...TUI_KEYBINDINGS["tui.input.newLine"], defaultKeys: ["ctrl+j", "shift+enter"] },
779
+ "tui.altScreen.top": { ...TUI_KEYBINDINGS["tui.altScreen.top"], defaultKeys: [] },
780
+ "tui.altScreen.bottom": { ...TUI_KEYBINDINGS["tui.altScreen.bottom"], defaultKeys: [] },
781
+ "tui.altScreen.previousPrompt": { ...TUI_KEYBINDINGS["tui.altScreen.previousPrompt"], defaultKeys: "ctrl+up" },
782
+ "tui.altScreen.nextPrompt": { ...TUI_KEYBINDINGS["tui.altScreen.nextPrompt"], defaultKeys: "ctrl+down" },
783
+ "tui.altScreen.search": { ...TUI_KEYBINDINGS["tui.altScreen.search"], defaultKeys: "ctrl+r" },
784
+ "tui.altScreen.searchNext": { ...TUI_KEYBINDINGS["tui.altScreen.searchNext"], defaultKeys: "enter" },
785
+ "tui.altScreen.searchPrevious": { ...TUI_KEYBINDINGS["tui.altScreen.searchPrevious"], defaultKeys: "up" },
786
+ ...CLIO_APP_KEYBINDINGS
787
+ };
788
+ var CLIO_APP_KEYBINDING_IDS = Object.keys(CLIO_APP_KEYBINDINGS);
789
+
790
+ // src/interactive/keybinding-manager.ts
791
+ var BASE_SPECIAL_KEYS = /* @__PURE__ */ new Set([
792
+ "escape",
793
+ "esc",
794
+ "enter",
795
+ "return",
796
+ "tab",
797
+ "space",
798
+ "backspace",
799
+ "delete",
800
+ "insert",
801
+ "clear",
802
+ "home",
803
+ "end",
804
+ "pageup",
805
+ "pagedown",
806
+ "up",
807
+ "down",
808
+ "left",
809
+ "right",
810
+ "f1",
811
+ "f2",
812
+ "f3",
813
+ "f4",
814
+ "f5",
815
+ "f6",
816
+ "f7",
817
+ "f8",
818
+ "f9",
819
+ "f10",
820
+ "f11",
821
+ "f12"
822
+ ]);
823
+ var BASE_SYMBOL_KEYS = /* @__PURE__ */ new Set([
824
+ "`",
825
+ "-",
826
+ "=",
827
+ "[",
828
+ "]",
829
+ "\\",
830
+ ";",
831
+ "'",
832
+ ",",
833
+ ".",
834
+ "/",
835
+ "!",
836
+ "@",
837
+ "#",
838
+ "$",
839
+ "%",
840
+ "^",
841
+ "&",
842
+ "*",
843
+ "(",
844
+ ")",
845
+ "_",
846
+ "+",
847
+ "|",
848
+ "~",
849
+ "{",
850
+ "}",
851
+ ":",
852
+ "<",
853
+ ">",
854
+ "?"
855
+ ]);
856
+ var MODIFIERS = /* @__PURE__ */ new Set(["ctrl", "shift", "alt", "super"]);
857
+ function canonicalKey(key) {
858
+ const parts = key.toLowerCase().split("+");
859
+ let base = parts.pop() ?? "";
860
+ if (base === "esc") base = "escape";
861
+ if (base === "return") base = "enter";
862
+ const modifiers = ["ctrl", "alt", "shift", "super"].filter((mod) => parts.includes(mod));
863
+ return [...modifiers, base].join("+");
864
+ }
865
+ function isValidKeyId(keyId) {
866
+ if (typeof keyId !== "string" || keyId.length === 0) return false;
867
+ const parts = keyId.toLowerCase().split("+");
868
+ if (parts.length === 0) return false;
869
+ const base = parts[parts.length - 1];
870
+ if (!base) return false;
871
+ const mods = parts.slice(0, -1);
872
+ const seen = /* @__PURE__ */ new Set();
873
+ for (const mod of mods) {
874
+ if (!MODIFIERS.has(mod)) return false;
875
+ if (seen.has(mod)) return false;
876
+ seen.add(mod);
877
+ }
878
+ if (base.length === 1) {
879
+ const ch = base.charCodeAt(0);
880
+ const isLetter = ch >= 97 && ch <= 122;
881
+ const isDigit = ch >= 48 && ch <= 57;
882
+ return isLetter || isDigit || BASE_SYMBOL_KEYS.has(base);
883
+ }
884
+ return BASE_SPECIAL_KEYS.has(base);
885
+ }
886
+ function validateKeybindings(raw) {
887
+ const valid = {};
888
+ const invalid = [];
889
+ for (const [id, value] of Object.entries(raw)) {
890
+ if (!Object.hasOwn(CLIO_KEYBINDINGS, id)) {
891
+ invalid.push({ id, keys: ["unknown action ID; use /help"] });
892
+ continue;
893
+ }
894
+ if (typeof value === "string") {
895
+ if (isValidKeyId(value)) {
896
+ valid[id] = canonicalKey(value);
897
+ } else {
898
+ invalid.push({ id, keys: [value] });
899
+ }
900
+ continue;
901
+ }
902
+ if (Array.isArray(value)) {
903
+ const accepted = [];
904
+ const rejected = [];
905
+ for (const entry of value) {
906
+ if (typeof entry !== "string") {
907
+ rejected.push(String(entry));
908
+ continue;
909
+ }
910
+ if (isValidKeyId(entry)) {
911
+ accepted.push(canonicalKey(entry));
912
+ } else {
913
+ rejected.push(entry);
914
+ }
915
+ }
916
+ if (accepted.length > 0 || value.length === 0) valid[id] = accepted;
917
+ if (rejected.length > 0) invalid.push({ id, keys: rejected });
918
+ }
919
+ }
920
+ return { valid, invalid };
921
+ }
922
+ function formatInvalidKeybindingNotice(invalid) {
923
+ const count = invalid.reduce((sum, entry) => sum + entry.keys.length, 0);
924
+ const detail = invalid.flatMap((entry) => entry.keys.map((key) => `${entry.id}="${key}"`)).join(", ");
925
+ return `Clio Coder: ${count} invalid keybinding${count === 1 ? "" : "s"} in settings.yaml (defaults kept): ${detail}. Fix settings.yaml or run \`clio-coder doctor\`.
926
+ `;
927
+ }
928
+ function envValue(env, key) {
929
+ return env[key]?.trim() ?? "";
930
+ }
931
+ function detectTerminalKeySupport(env = process.env) {
932
+ const term = envValue(env, "TERM");
933
+ const termProgram = envValue(env, "TERM_PROGRAM");
934
+ const kittyWindow = envValue(env, "KITTY_WINDOW_ID");
935
+ const normalized = `${term} ${termProgram}`.toLowerCase();
936
+ if (kittyWindow.length > 0 || normalized.includes("xterm-kitty") || normalized.includes("kitty")) {
937
+ return { name: "kitty", supportsCsiU: true, reason: "Kitty keyboard protocol detected", altLetterMode: "meta" };
938
+ }
939
+ if (normalized.includes("wezterm") || normalized.includes("ghostty")) {
940
+ return {
941
+ name: termProgram || term || "modern terminal",
942
+ supportsCsiU: true,
943
+ reason: "CSI-u capable terminal",
944
+ altLetterMode: "meta"
945
+ };
946
+ }
947
+ if (termProgram === "Apple_Terminal") {
948
+ return {
949
+ name: termProgram,
950
+ supportsCsiU: false,
951
+ reason: "Terminal.app sends Option-letter as composed text unless Use Option as Meta key is enabled",
952
+ altLetterMode: "text"
953
+ };
954
+ }
955
+ if (termProgram === "iTerm.app") {
956
+ return {
957
+ name: termProgram,
958
+ supportsCsiU: true,
959
+ reason: "iTerm2 reports modified keys as Meta or CSI-u",
960
+ altLetterMode: "meta"
961
+ };
962
+ }
963
+ if (termProgram.toLowerCase() === "vscode") {
964
+ return {
965
+ name: "vscode",
966
+ supportsCsiU: false,
967
+ reason: "VS Code terminal does not reliably emit CSI-u",
968
+ altLetterMode: "meta",
969
+ ideReservedKeys: ["ctrl+p", "shift+ctrl+p", "ctrl+l"]
970
+ };
971
+ }
972
+ if (term.startsWith("screen") || term.startsWith("tmux")) {
973
+ return { name: term, supportsCsiU: false, reason: "terminal multiplexer may block CSI-u", altLetterMode: "meta" };
974
+ }
975
+ return {
976
+ name: termProgram || term || "legacy terminal",
977
+ supportsCsiU: false,
978
+ reason: "CSI-u support not detected",
979
+ altLetterMode: "meta"
980
+ };
981
+ }
982
+ function keyRequiresCsiU(keyId) {
983
+ const parts = keyId.toLowerCase().split("+");
984
+ if (parts.length < 3) return false;
985
+ const base = parts[parts.length - 1] ?? "";
986
+ const modifiers = new Set(parts.slice(0, -1));
987
+ if (!modifiers.has("shift") || !modifiers.has("ctrl")) return false;
988
+ if (base.length !== 1) return false;
989
+ const code = base.charCodeAt(0);
990
+ const isLetter = code >= 97 && code <= 122;
991
+ const isDigit = code >= 48 && code <= 57;
992
+ return isLetter || isDigit || BASE_SYMBOL_KEYS.has(base);
993
+ }
994
+ function normalizeBindingValue(value) {
995
+ if (value === void 0) return [];
996
+ return (Array.isArray(value) ? value : [value]).map(String);
997
+ }
998
+ function defaultBindingValue(id) {
999
+ const value = CLIO_APP_KEYBINDINGS[id].defaultKeys;
1000
+ return normalizeBindingValue(value);
1001
+ }
1002
+ function normalizeKeyForRisk(keyId) {
1003
+ return keyId.toLowerCase().replace(/^ctrl\+shift\+/, "shift+ctrl+");
1004
+ }
1005
+ function altLetterBase(keyId) {
1006
+ const parts = keyId.toLowerCase().split("+");
1007
+ if (parts.length !== 2 || parts[0] !== "alt") return null;
1008
+ const base = parts[1] ?? "";
1009
+ return base.length === 1 && base >= "a" && base <= "z" ? base : null;
1010
+ }
1011
+ function keyUsesAltLetter(keyId) {
1012
+ return altLetterBase(keyId) !== null;
1013
+ }
1014
+ function terminalReservedReason(keyId) {
1015
+ const key = normalizeKeyForRisk(keyId);
1016
+ if (key === "ctrl+s")
1017
+ return "an intermediary may intercept this chord; Node raw mode normally disables terminal flow control";
1018
+ if (key === "ctrl+z")
1019
+ return "an intermediary may intercept this chord; Node raw mode normally disables signal generation";
1020
+ return null;
1021
+ }
1022
+ function keyRiskReason(keyId, support) {
1023
+ const key = normalizeKeyForRisk(keyId);
1024
+ if (!support.supportsCsiU && keyRequiresCsiU(key)) return `needs CSI-u; ${support.reason}`;
1025
+ if (support.altLetterMode === "text" && keyUsesAltLetter(key)) return support.reason;
1026
+ if (support.ideReservedKeys?.map(normalizeKeyForRisk).includes(key)) return `${support.name} may reserve this chord`;
1027
+ return terminalReservedReason(key);
1028
+ }
1029
+ var MACOS_OPTION_DEFAULT_WARNING_ID = "clio-coder.macos.option-letter.defaults";
1030
+ function detectPlatformKeybindingWarnings(userBindings, support = detectTerminalKeySupport()) {
1031
+ const warnings = [];
1032
+ const macosDefaultAltKeys = [];
1033
+ for (const id of CLIO_APP_KEYBINDING_IDS) {
1034
+ const userValue = userBindings[id];
1035
+ const source = userValue === void 0 ? "default" : "user";
1036
+ const keys = userValue === void 0 ? defaultBindingValue(id) : normalizeBindingValue(userValue);
1037
+ const risky = keys.filter((key) => keyRiskReason(key, support) !== null);
1038
+ if (risky.length === 0) continue;
1039
+ const firstReason = keyRiskReason(risky[0] ?? "", support) ?? support.reason;
1040
+ if (source === "default" && support.name === "Apple_Terminal" && risky.every(keyUsesAltLetter)) {
1041
+ macosDefaultAltKeys.push(...risky);
1042
+ continue;
1043
+ }
1044
+ warnings.push({ id, keys: risky, terminal: support.name, reason: firstReason, source });
1045
+ }
1046
+ if (macosDefaultAltKeys.length > 0) {
1047
+ warnings.unshift({
1048
+ id: MACOS_OPTION_DEFAULT_WARNING_ID,
1049
+ keys: [...new Set(macosDefaultAltKeys)],
1050
+ terminal: support.name,
1051
+ reason: support.reason,
1052
+ source: "default"
1053
+ });
1054
+ }
1055
+ return warnings;
1056
+ }
1057
+ function isMacosOptionDefaultWarning(warning) {
1058
+ return warning.id === MACOS_OPTION_DEFAULT_WARNING_ID;
1059
+ }
1060
+ function formatPlatformKeybindingNotice(warnings) {
1061
+ const macosOption = warnings.find(isMacosOptionDefaultWarning);
1062
+ if (macosOption && warnings.length === 1) {
1063
+ const keys = macosOption.keys.map((key) => {
1064
+ const base = altLetterBase(key);
1065
+ return base ? `Alt+${base.toUpperCase()}` : key;
1066
+ }).join(", ");
1067
+ return `Clio keybinding notice: Terminal.app may not send Option-letter shortcuts by default (${keys}). Enable Use Option as Meta key in Settings \u25B8 Profiles \u25B8 Keyboard for native Alt, or use Ctrl+G then the shortcut letter, slash commands (/help lists commands), and /help.
1068
+ `;
1069
+ }
1070
+ const count = warnings.reduce((sum, entry) => sum + entry.keys.length, 0);
1071
+ const detail = warnings.flatMap((entry) => entry.keys.map((key) => `${entry.id}="${key}" (${entry.source}, ${entry.reason})`)).join(", ");
1072
+ return `Clio keybinding notice: ${count} keybinding${count === 1 ? "" : "s"} may not fire reliably in this terminal: ${detail}. Rebind in settings.yaml or inspect /help.
1073
+ `;
1074
+ }
1075
+ function joinKeys(keys) {
1076
+ if (keys.length === 0) return "(unbound)";
1077
+ if (keys.length === 1) return String(keys[0]);
1078
+ return keys.join(" / ");
1079
+ }
1080
+ var VIEWPORT_LEADER_TARGETS = [
1081
+ { key: "z", id: "tui.editor.undo" },
1082
+ { key: "r", id: "tui.altScreen.search" },
1083
+ { key: "p", id: "tui.altScreen.pageUp" },
1084
+ { key: "n", id: "tui.altScreen.pageDown" },
1085
+ { key: "home", id: "tui.altScreen.top" },
1086
+ { key: "end", id: "tui.altScreen.bottom" },
1087
+ { key: "", id: "tui.altScreen.previousPrompt" },
1088
+ { key: "", id: "tui.altScreen.nextPrompt" }
1089
+ ];
1090
+ function keybindingScope(id) {
1091
+ if (id.startsWith("clio-coder.")) return "composer";
1092
+ if (id.startsWith("tui.select.")) return "selection";
1093
+ if (/tui.altScreen.search(Next|Previous|Close)/u.test(id)) return "search";
1094
+ if (id.startsWith("tui.altScreen.")) return "fullscreen composer";
1095
+ return "editable field";
1096
+ }
1097
+ function legacyKey(key) {
1098
+ const canonical = canonicalKey(key);
1099
+ return { "ctrl+i": "tab", "ctrl+m": "enter", "ctrl+[": "escape", "ctrl+_": "ctrl+-" }[canonical] ?? canonical;
1100
+ }
1101
+ function scopesOverlap(a, b) {
1102
+ const left = keybindingScope(a), right = keybindingScope(b);
1103
+ if (left === "selection" || right === "selection") return left === right;
1104
+ if (left === "search" || right === "search") return left === right;
1105
+ if (a === "clio-coder.exit" && b === "tui.editor.deleteCharForward" || b === "clio-coder.exit" && a === "tui.editor.deleteCharForward")
1106
+ return false;
1107
+ return true;
1108
+ }
1109
+ function effectiveConflicts(inner) {
1110
+ const keys = /* @__PURE__ */ new Map();
1111
+ for (const id of Object.keys(CLIO_KEYBINDINGS)) {
1112
+ for (const key of inner.getKeys(id)) {
1113
+ const canonical = legacyKey(key);
1114
+ const ids = keys.get(canonical) ?? [];
1115
+ if (!ids.includes(id)) ids.push(id);
1116
+ keys.set(canonical, ids);
1117
+ }
1118
+ }
1119
+ return [...keys].filter(
1120
+ ([, ids]) => ids.length > 1 && ids.some((id, index) => ids.slice(index + 1).some((other) => scopesOverlap(id, other)))
1121
+ ).map(([key, keybindings]) => ({
1122
+ key,
1123
+ keybindings: keybindings.filter((id) => keybindings.some((other) => other !== id && scopesOverlap(id, other)))
1124
+ }));
1125
+ }
1126
+ function buildManager(overrides, env, install) {
1127
+ let validated = validateKeybindings(overrides);
1128
+ const inner = new KeybindingsManager(CLIO_KEYBINDINGS, validated.valid);
1129
+ if (install) setKeybindings(inner);
1130
+ let generation = 0;
1131
+ const listeners = /* @__PURE__ */ new Set();
1132
+ const isDisabled = (id) => {
1133
+ const value = inner.getUserBindings()[id];
1134
+ return Array.isArray(value) && value.length === 0;
1135
+ };
1136
+ const leaderTargets = () => {
1137
+ if (inner.getKeys("clio-coder.leader").length === 0) return [];
1138
+ const app = CLIO_APP_KEYBINDING_IDS.flatMap((id) => {
1139
+ const descriptor = CLIO_APP_KEYBINDINGS[id];
1140
+ return "leader" in descriptor ? [{ key: descriptor.leader, id }] : [];
1141
+ });
1142
+ return [...app, ...VIEWPORT_LEADER_TARGETS].filter(({ id }) => !isDisabled(id));
1143
+ };
1144
+ const actionLabel = (id) => {
1145
+ const keys = inner.getKeys(id);
1146
+ const suffix = leaderTargets().find((entry) => entry.id === id)?.key;
1147
+ return [keys.join(" / "), suffix ? `${inner.getKeys("clio-coder.leader")[0]} ${suffix}` : ""].filter(Boolean).join(" \xB7 ") || "unbound; see /help";
1148
+ };
1149
+ return {
1150
+ matches: (data, id) => inner.matches(data, id),
1151
+ getKeys: (id) => inner.getKeys(id),
1152
+ getDescription: (id) => inner.getDefinition(id).description ?? "",
1153
+ getConflicts: () => effectiveConflicts(inner),
1154
+ get generation() {
1155
+ return generation;
1156
+ },
1157
+ reload(next) {
1158
+ validated = validateKeybindings(next);
1159
+ inner.setUserBindings(validated.valid);
1160
+ if (install) setKeybindings(inner);
1161
+ generation += 1;
1162
+ for (const listener of listeners) listener();
1163
+ },
1164
+ onReload(listener) {
1165
+ listeners.add(listener);
1166
+ return () => {
1167
+ listeners.delete(listener);
1168
+ };
1169
+ },
1170
+ isDisabled,
1171
+ actionLabel,
1172
+ overrideCount: () => Object.keys(validated.valid).length,
1173
+ invalidCount: () => validated.invalid.reduce((sum, entry) => sum + entry.keys.length, 0),
1174
+ invalidBindings: () => validated.invalid,
1175
+ platformWarnings: () => detectPlatformKeybindingWarnings(validated.valid, detectTerminalKeySupport(env)),
1176
+ leaderTargets,
1177
+ hotkeyEntries: () => Object.keys(CLIO_KEYBINDINGS).map((id) => ({
1178
+ id,
1179
+ keys: joinKeys(inner.getKeys(id)),
1180
+ description: `${inner.getDefinition(id).description ?? ""} (${keybindingScope(id)}${isDisabled(id) ? "; disabled by user" : ""})${id === "tui.input.copy" ? "; composer Ctrl+C cancels; use native terminal clipboard" : ""}`,
1181
+ source: validated.valid[id] === void 0 ? "default" : "user"
1182
+ }))
1183
+ };
1184
+ }
1185
+ function createKeybindingManager(settings, env = process.env) {
1186
+ return buildManager(settings.interface.keybindings ?? {}, env, true);
1187
+ }
1188
+ function formatKeyLabel(keyId, fallback = "unbound") {
1189
+ if (!keyId || keyId.length === 0) return fallback;
1190
+ return keyId.split("+").map((segment) => segment.length === 0 ? segment : segment.charAt(0).toUpperCase() + segment.slice(1)).join("+");
1191
+ }
1192
+
1193
+ // src/interactive/permission-hint.ts
1194
+ init_esm_shims();
1195
+ var MUTATION_PREVIEW_KEY = "v";
1196
+ var PERMISSION_TERMS_KEY = "?";
1197
+ function permissionHintEntries(composerHasDraft = false, inspection = "none", terms) {
1198
+ return [
1199
+ composerHasDraft ? { key: "Backspace", verb: "clear the draft to allow", short: "clear draft", critical: true } : { key: "Enter", verb: "allow", short: "allow", critical: true },
1200
+ // The terms key is the card's own and the most droppable entry: the folded
1201
+ // card already states what the keys do in one row. It sits before the
1202
+ // inspect key so the narrowing drops it first.
1203
+ ...terms === void 0 ? [] : [{ key: PERMISSION_TERMS_KEY, verb: terms === "open" ? "hide terms" : "terms", short: "terms", critical: false }],
1204
+ ...inspection === "none" ? [] : inspection === "open" ? [
1205
+ { key: "\u2191\u2193", verb: "scroll", critical: false },
1206
+ { key: MUTATION_PREVIEW_KEY, verb: "hide details", short: "hide", critical: false }
1207
+ ] : [{ key: MUTATION_PREVIEW_KEY, verb: "inspect details", short: "inspect", critical: false }],
1208
+ { key: "s", verb: "stop turn", short: "stop", critical: true },
1209
+ // With a draft, deny and stop are the only immediate answers, so Esc
1210
+ // outranks the narrowing that would otherwise drop it first.
1211
+ { key: "Esc", verb: "deny", critical: composerHasDraft }
1212
+ ];
1213
+ }
1214
+
1215
+ // src/interactive/overlay-frame.ts
1216
+ init_esm_shims();
1217
+
1218
+ // src/interactive/keyboard-owner.ts
1219
+ init_esm_shims();
1220
+ function keyboardOwner(component) {
1221
+ if (component instanceof Editor || component instanceof Input) {
1222
+ return {
1223
+ keyboardScope: "edit",
1224
+ undoInput: () => {
1225
+ component.applyEdit("undo");
1226
+ return true;
1227
+ }
1228
+ };
1229
+ }
1230
+ return component ?? {};
1231
+ }
1232
+ function focusedComponent(tui) {
1233
+ return tui instanceof TuiAltScreen || tui instanceof TuiMainScreen ? tui.getFocusedComponent() : null;
1234
+ }
1235
+ function localKey(data) {
1236
+ return data.includes("\x1B[200~") ? data : decodePrintableKey(data) ?? data;
1237
+ }
1238
+
1239
+ // src/interactive/modal-marker.ts
1240
+ init_esm_shims();
1241
+ var MODAL_MARKER_BASE_TITLE = "clio";
1242
+ function formatModalMarkerTitle(stack) {
1243
+ const top = stack.at(-1);
1244
+ if (top === void 0) return MODAL_MARKER_BASE_TITLE;
1245
+ const beneath = stack.length - 1;
1246
+ return `${MODAL_MARKER_BASE_TITLE} [modal:${top}${beneath > 0 ? `+${beneath}` : ""}]`;
1247
+ }
1248
+ function createModalMarkerRegistry() {
1249
+ const entries = [];
1250
+ let sink = null;
1251
+ let published = null;
1252
+ function activeIds() {
1253
+ return entries.filter((entry) => entry.active).map((entry) => entry.id);
1254
+ }
1255
+ function publish() {
1256
+ if (sink === null) return;
1257
+ const title = formatModalMarkerTitle(activeIds());
1258
+ if (published === null && title === MODAL_MARKER_BASE_TITLE) return;
1259
+ if (title === published) return;
1260
+ published = title;
1261
+ sink.setTitle(title);
1262
+ }
1263
+ function enter(id, nextSink) {
1264
+ if (nextSink) sink = nextSink;
1265
+ const entry = { id, active: true };
1266
+ entries.push(entry);
1267
+ publish();
1268
+ let released = false;
1269
+ return {
1270
+ release() {
1271
+ if (released) return;
1272
+ released = true;
1273
+ const index = entries.indexOf(entry);
1274
+ if (index !== -1) entries.splice(index, 1);
1275
+ publish();
1276
+ },
1277
+ setActive(active) {
1278
+ if (released || entry.active === active) return;
1279
+ entry.active = active;
1280
+ publish();
1281
+ },
1282
+ raise() {
1283
+ if (released) return;
1284
+ entry.active = true;
1285
+ const index = entries.indexOf(entry);
1286
+ if (index !== -1 && index !== entries.length - 1) {
1287
+ entries.splice(index, 1);
1288
+ entries.push(entry);
1289
+ }
1290
+ publish();
1291
+ }
1292
+ };
1293
+ }
1294
+ return { enter, stack: () => activeIds() };
1295
+ }
1296
+ var registry = createModalMarkerRegistry();
1297
+ function enterModal(id, sink) {
1298
+ return registry.enter(id, sink);
1299
+ }
1300
+
1301
+ // src/interactive/overlay-frame.ts
1302
+ var DEFAULT_SELECT_THEME = selectListTheme(clioTheme());
1303
+ var DEFAULT_SETTINGS_THEME = settingsListTheme(clioTheme());
1304
+ var FocusBox = class extends Box {
1305
+ inputTarget;
1306
+ onInput;
1307
+ constructor(children, options) {
1308
+ super(options?.x ?? 1, options?.y ?? 0);
1309
+ const childList = Array.isArray(children) ? children : [children];
1310
+ for (const child of childList) this.addChild(child);
1311
+ this.inputTarget = options?.inputTarget === void 0 ? childList[0] ?? null : options.inputTarget;
1312
+ this.onInput = options?.onInput;
1313
+ }
1314
+ get keyboardScope() {
1315
+ return keyboardOwner(this.inputTarget).keyboardScope;
1316
+ }
1317
+ undoInput() {
1318
+ return keyboardOwner(this.inputTarget).undoInput?.() ?? false;
1319
+ }
1320
+ handleInput(data) {
1321
+ if (this.onInput) {
1322
+ this.onInput(data);
1323
+ return;
1324
+ }
1325
+ this.inputTarget?.handleInput?.(data);
1326
+ }
1327
+ };
1328
+ function resolveTone(tone) {
1329
+ return typeof tone === "function" ? tone() : tone;
1330
+ }
1331
+ function clioFrame(text, token = "frame") {
1332
+ return clioTheme().fg(token, text);
1333
+ }
1334
+ function clioTitle(text, token) {
1335
+ return token === void 0 ? screenTitle(clioTheme(), text) : clioTheme().style(token, text, { bold: true });
1336
+ }
1337
+ function clioError(text) {
1338
+ return clioTheme().fg("error", text);
1339
+ }
1340
+ function brandedTopBorder(label, innerWidth, tone) {
1341
+ const frame2 = (text) => clioFrame(text, tone ?? "frame");
1342
+ const clean = label.replace(/^[┌┐└┘├┤─│\s]+/, "").replace(/[┌┐└┘├┤─│\s]+$/, "");
1343
+ const formatted = clean.length > 0 ? `\u2500 ${clean} ` : "\u2500";
1344
+ const clipped = visibleWidth(formatted) > innerWidth ? truncateToWidth(formatted, innerWidth, "\u2026", true) : formatted;
1345
+ const fill = "\u2500".repeat(Math.max(0, innerWidth - visibleWidth(clipped)));
1346
+ const cleanIndex = clipped.indexOf(clean);
1347
+ if (cleanIndex !== -1) {
1348
+ const prefix = clipped.slice(0, cleanIndex);
1349
+ const suffix = clipped.slice(cleanIndex + clean.length);
1350
+ return `${frame2("\u250C")}${frame2(prefix)}${clioTitle(clean, tone)}${frame2(suffix)}${frame2(fill)}${frame2("\u2510")}`;
1351
+ }
1352
+ return `${frame2("\u250C")}${frame2(clipped)}${frame2(fill)}${frame2("\u2510")}`;
1353
+ }
1354
+ function isCriticalHintKey(key) {
1355
+ const canonical = canonicalizeKey(key);
1356
+ return canonical === "Esc" || canonical === "Enter" || canonical === "Enter/Space" || canonical === "type";
1357
+ }
1358
+ function isCriticalEntry(entry) {
1359
+ return entry.critical ?? isCriticalHintKey(entry.key);
1360
+ }
1361
+ function renderHintEntries(entries, short) {
1362
+ return entries.map((entry) => `[${canonicalizeKey(entry.key)}] ${short ? entry.short ?? entry.verb : entry.verb}`).join(" \xB7 ");
1363
+ }
1364
+ function fitHintEntries(entries, maxWidth) {
1365
+ if (entries.length === 0) return "";
1366
+ for (const short of [false, true]) {
1367
+ const rendered = renderHintEntries(entries, short);
1368
+ if (visibleWidth(rendered) <= maxWidth) return rendered;
1369
+ }
1370
+ const kept = [...entries];
1371
+ for (const criticalPass of [false, true]) {
1372
+ while (kept.length > 1) {
1373
+ const index = kept.findIndex((entry) => criticalPass || !isCriticalEntry(entry));
1374
+ if (index === -1) break;
1375
+ kept.splice(index, 1);
1376
+ const rendered = renderHintEntries(kept, true);
1377
+ if (visibleWidth(rendered) <= maxWidth) return rendered;
1378
+ }
1379
+ }
1380
+ return renderHintEntries(kept, true);
1381
+ }
1382
+ var FILTER_HINT = { key: "type", verb: "filter" };
1383
+ function canonicalizeKey(key) {
1384
+ const trimmed = key.trim();
1385
+ if (trimmed === "R") return "R";
1386
+ const lower = trimmed.toLowerCase();
1387
+ if (lower === "up/down" || lower === "updown" || lower === "\u2191/\u2193" || lower === "up/down/j/k" || lower === "\u2191\u2193")
1388
+ return "\u2191\u2193";
1389
+ if (lower === "enter/space") return "Enter/Space";
1390
+ if (lower === "enter") return "Enter";
1391
+ if (lower === "esc" || lower === "escape") return "Esc";
1392
+ if (lower === "space") return "Space";
1393
+ if (lower === "tab") return "Tab";
1394
+ if (lower === "r") return "r";
1395
+ if (lower === "type") return "type";
1396
+ return trimmed;
1397
+ }
1398
+ function buildHint(entries, esc = "close") {
1399
+ const finalEntries = [
1400
+ ...entries.map((e) => ({ key: canonicalizeKey(e.key), verb: e.verb })),
1401
+ { key: "Esc", verb: esc }
1402
+ ];
1403
+ return finalEntries.map((e) => `[${e.key}] ${e.verb}`).join(" \xB7 ");
1404
+ }
1405
+ function buildResponsiveHint(entries, esc = "close") {
1406
+ const escEntry = esc === null ? null : typeof esc === "string" ? { key: "Esc", verb: esc } : esc;
1407
+ const all = escEntry ? [...entries, escEntry] : [...entries];
1408
+ return (innerWidth) => fitHintEntries(all, innerWidth - 3);
1409
+ }
1410
+ function elideHint(hint, maxCleanWidth) {
1411
+ const parts = hint.split(" \xB7 ");
1412
+ if (parts.length <= 2) return hint;
1413
+ const entries = parts.map((part) => {
1414
+ const match = /^\[([^\]]+)\] ([\s\S]+)$/u.exec(part);
1415
+ if (!match) return { key: "", verb: part, critical: false };
1416
+ return { key: match[1] ?? "", verb: match[2] ?? "" };
1417
+ });
1418
+ const rendered = fitHintEntries(entries, maxCleanWidth);
1419
+ return rendered.replace(/\[\] /gu, "");
1420
+ }
1421
+ function brandedBottomBorder(innerWidth, hint, tone) {
1422
+ const frame2 = (text) => clioFrame(text, tone ?? "frame");
1423
+ if (!hint || hint.trim().length === 0) {
1424
+ return `${frame2("\u2514")}${frame2("\u2500".repeat(innerWidth))}${frame2("\u2518")}`;
1425
+ }
1426
+ let clean = hint.trim();
1427
+ const maxCleanWidth = innerWidth - 3;
1428
+ if (clean.includes(" \xB7 ") && visibleWidth(`\u2500 ${clean} `) > innerWidth) {
1429
+ clean = elideHint(clean, maxCleanWidth);
1430
+ }
1431
+ const formatted = `\u2500 ${clean} `;
1432
+ const clipped = visibleWidth(formatted) > innerWidth ? truncateToWidth(formatted, innerWidth, "\u2026", true) : formatted;
1433
+ const fill = "\u2500".repeat(Math.max(0, innerWidth - visibleWidth(clipped)));
1434
+ const cleanIndex = clipped.indexOf(clean);
1435
+ if (cleanIndex !== -1) {
1436
+ const prefix = clipped.slice(0, cleanIndex);
1437
+ const suffix = clipped.slice(cleanIndex + clean.length);
1438
+ return `${frame2("\u2514")}${frame2(prefix)}${clioTheme().fg("dim", clean)}${frame2(suffix)}${frame2(fill)}${frame2("\u2518")}`;
1439
+ }
1440
+ return `${frame2("\u2514")}${frame2(clipped)}${frame2(fill)}${frame2("\u2518")}`;
1441
+ }
1442
+ function formatRuntimeResolutionDiagnostic(diagnostic) {
1443
+ return `${diagnostic.severity}: ${diagnostic.code}: ${diagnostic.message}`;
1444
+ }
1445
+ function diagnosticSeverityToken(severity) {
1446
+ return severity === "error" ? "error" : severity === "warning" ? "warning" : "muted";
1447
+ }
1448
+ function frameAlignForAnchor(anchor) {
1449
+ if (anchor === void 0) return "center";
1450
+ if (anchor === "left-center" || anchor.endsWith("-left")) return "left";
1451
+ if (anchor === "right-center" || anchor.endsWith("-right")) return "right";
1452
+ return "center";
1453
+ }
1454
+ function fitBody(lines, rowBudget, contentWidth) {
1455
+ if (rowBudget <= 0) return lines;
1456
+ const bodyBudget = Math.max(1, rowBudget - 2);
1457
+ if (lines.length <= bodyBudget) return lines;
1458
+ const kept = lines.slice(0, bodyBudget - 1);
1459
+ const hidden = lines.length - kept.length;
1460
+ return [...kept, clioTheme().fg("dim", truncateToWidth(`\u2026 ${hidden} more rows`, contentWidth, "", true))];
1461
+ }
1462
+ var ClioOverlayFrame = class {
1463
+ constructor(child, title, footerHint, boxWidth = 0, align = "center", tone, fullscreen = false) {
1464
+ this.child = child;
1465
+ this.title = title;
1466
+ this.footerHint = footerHint;
1467
+ this.boxWidth = boxWidth;
1468
+ this.align = align;
1469
+ this.tone = tone;
1470
+ this.fullscreen = fullscreen;
1471
+ }
1472
+ child;
1473
+ title;
1474
+ footerHint;
1475
+ boxWidth;
1476
+ align;
1477
+ tone;
1478
+ fullscreen;
1479
+ /**
1480
+ * Rows the box may occupy, or zero while unknown.
1481
+ *
1482
+ * `Component.render` is handed a width and nothing else, so the frame learns
1483
+ * its height budget from the engine's `visible` predicate, which is called
1484
+ * with the live terminal size immediately before the render pass that
1485
+ * composites this overlay.
1486
+ */
1487
+ rowBudget = 0;
1488
+ /**
1489
+ * Last rendered box, keyed by everything that shapes it. `childLines` is
1490
+ * compared by array identity: a child that rebuilds its rows returns a fresh
1491
+ * array and correctly misses, and one that serves a cache returns the same
1492
+ * array and correctly hits.
1493
+ */
1494
+ cachedRender;
1495
+ setRowBudget(rows) {
1496
+ this.rowBudget = Math.max(0, Math.floor(rows));
1497
+ }
1498
+ render(width) {
1499
+ const boxWidth = Math.max(5, Math.min(this.boxWidth > 0 ? this.boxWidth : width, width));
1500
+ const contentWidth = Math.max(1, boxWidth - 4);
1501
+ const childLines = this.child.render(contentWidth);
1502
+ const titleText = typeof this.title === "function" ? this.title() : this.title;
1503
+ const hint = typeof this.footerHint === "function" ? this.footerHint(contentWidth + 2) : this.footerHint;
1504
+ const tone = resolveTone(this.tone);
1505
+ const cached = this.cachedRender;
1506
+ if (cached !== void 0 && cached.width === width && cached.rowBudget === this.rowBudget && cached.childLines === childLines && cached.title === titleText && cached.hint === hint && cached.tone === tone) {
1507
+ return cached.lines;
1508
+ }
1509
+ const label = titleText.length > 0 ? `\u2500 ${titleText} ` : "\u2500 ";
1510
+ const side = clioFrame("\u2502", tone ?? "frame");
1511
+ const body = [...fitBody(childLines, this.rowBudget, contentWidth)];
1512
+ if (this.fullscreen) {
1513
+ while (body.length < Math.max(0, this.rowBudget - 2)) body.push("");
1514
+ }
1515
+ const boxLines = this.fullscreen ? [
1516
+ padAnsi(` ${clioTitle(titleText, tone)}`, boxWidth),
1517
+ ...body.map((line) => ` ${padAnsi(line, contentWidth)} `),
1518
+ padAnsi(` ${clioTheme().fg("muted", hint ?? "")}`, boxWidth)
1519
+ ] : [
1520
+ brandedTopBorder(label, contentWidth + 2, tone),
1521
+ ...body.map((line) => `${side} ${padAnsi(line, contentWidth)} ${side}`),
1522
+ brandedBottomBorder(contentWidth + 2, hint, tone)
1523
+ ];
1524
+ const slack = Math.max(0, width - boxWidth);
1525
+ const lines = (() => {
1526
+ if (slack === 0) return boxLines;
1527
+ const leading = this.align === "left" ? 0 : this.align === "right" ? slack : Math.floor(slack / 2);
1528
+ const lead = " ".repeat(leading);
1529
+ const trail = " ".repeat(slack - leading);
1530
+ return boxLines.map((line) => `${lead}${line}${trail}`);
1531
+ })();
1532
+ this.cachedRender = { width, rowBudget: this.rowBudget, childLines, title: titleText, hint, tone, lines };
1533
+ return lines;
1534
+ }
1535
+ get keyboardScope() {
1536
+ return keyboardOwner(this.child).keyboardScope;
1537
+ }
1538
+ undoInput() {
1539
+ return keyboardOwner(this.child).undoInput?.() ?? false;
1540
+ }
1541
+ handleInput(data) {
1542
+ this.child.handleInput?.(data);
1543
+ }
1544
+ invalidate() {
1545
+ this.cachedRender = void 0;
1546
+ this.child.invalidate?.();
1547
+ }
1548
+ };
1549
+ function showClioOverlayFrame(tui, child, options) {
1550
+ const { title, footerHint, tone, width, visible, maxHeight, margin, markerId, fullscreen, ...overlayOptions } = options;
1551
+ const boxWidth = typeof width === "number" ? width : 0;
1552
+ const frame2 = new ClioOverlayFrame(
1553
+ child,
1554
+ title,
1555
+ footerHint,
1556
+ boxWidth,
1557
+ frameAlignForAnchor(options.anchor),
1558
+ tone,
1559
+ fullscreen
1560
+ );
1561
+ const handle = tui.showOverlay(frame2, {
1562
+ ...overlayOptions,
1563
+ ...margin !== void 0 ? { margin } : {},
1564
+ width: "100%",
1565
+ visible: (termWidth, termHeight) => {
1566
+ const shown = visible ? visible(termWidth, termHeight) : true;
1567
+ const marginRows = typeof margin === "number" ? margin * 2 : (margin?.top ?? 0) + (margin?.bottom ?? 0);
1568
+ const available = Math.max(1, termHeight - marginRows);
1569
+ const requested = resolveRowSize(maxHeight, termHeight);
1570
+ frame2.setRowBudget(requested === null ? available : Math.min(requested, available));
1571
+ return shown;
1572
+ }
1573
+ });
1574
+ const marker = enterModal(markerId, modalMarkerSink(tui));
1575
+ return {
1576
+ hide() {
1577
+ marker.release();
1578
+ handle.hide();
1579
+ },
1580
+ setHidden(hidden) {
1581
+ marker.setActive(!hidden);
1582
+ handle.setHidden(hidden);
1583
+ },
1584
+ isHidden: () => handle.isHidden(),
1585
+ focus() {
1586
+ marker.raise();
1587
+ handle.focus();
1588
+ },
1589
+ // A pure passthrough on purpose. The engine hands focus to the next
1590
+ // visible capturing overlay, which is another modal, so the stack is
1591
+ // unchanged; the surface that gives the keyboard back to the composer
1592
+ // does it by hiding, which `setHidden` already reports.
1593
+ unfocus: (unfocusOptions) => unfocusOptions ? handle.unfocus(unfocusOptions) : handle.unfocus(),
1594
+ isFocused: () => handle.isFocused(),
1595
+ getBounds: () => handle.getBounds()
1596
+ };
1597
+ }
1598
+ function modalMarkerSink(tui) {
1599
+ const terminal = tui.terminal;
1600
+ return typeof terminal?.setTitle === "function" ? terminal : null;
1601
+ }
1602
+ function resolveRowSize(value, termHeight) {
1603
+ if (typeof value === "number") return Math.max(1, Math.floor(value));
1604
+ if (typeof value !== "string") return null;
1605
+ const percent = /^(\d+(?:\.\d+)?)%$/u.exec(value.trim());
1606
+ if (!percent?.[1]) return null;
1607
+ return Math.max(1, Math.floor(termHeight * Number.parseFloat(percent[1]) / 100));
1608
+ }
1609
+
1610
+ export {
1611
+ InstrumentedTuiMainScreen,
1612
+ InstrumentedTuiAltScreen,
1613
+ SelectList2 as SelectList,
1614
+ createAgentProgress,
1615
+ SGR_RESET,
1616
+ SGR_DIM,
1617
+ fgSequence,
1618
+ isClioToken,
1619
+ paintHex,
1620
+ GLYPH,
1621
+ spinnerFrame,
1622
+ brandMark,
1623
+ dotSep,
1624
+ barSep,
1625
+ sectionTag,
1626
+ screenTitle,
1627
+ listGroupHeader,
1628
+ joinChips,
1629
+ markdownTheme,
1630
+ selectListTheme,
1631
+ editorTheme,
1632
+ fitIdentityLabel,
1633
+ abbreviateModelId,
1634
+ formatTargetLabel,
1635
+ formatCompactMs,
1636
+ formatContextPercent,
1637
+ collapseHomePath,
1638
+ padAnsi,
1639
+ fitUnits,
1640
+ rule,
1641
+ frame,
1642
+ innerDivider,
1643
+ clioTheme,
1644
+ MUTATION_PREVIEW_KEY,
1645
+ PERMISSION_TERMS_KEY,
1646
+ permissionHintEntries,
1647
+ CLIO_APP_KEYBINDINGS,
1648
+ CLIO_APP_KEYBINDING_IDS,
1649
+ validateKeybindings,
1650
+ formatInvalidKeybindingNotice,
1651
+ detectTerminalKeySupport,
1652
+ detectPlatformKeybindingWarnings,
1653
+ formatPlatformKeybindingNotice,
1654
+ createKeybindingManager,
1655
+ formatKeyLabel,
1656
+ keyboardOwner,
1657
+ focusedComponent,
1658
+ localKey,
1659
+ DEFAULT_SELECT_THEME,
1660
+ FocusBox,
1661
+ clioError,
1662
+ fitHintEntries,
1663
+ FILTER_HINT,
1664
+ buildHint,
1665
+ buildResponsiveHint,
1666
+ formatRuntimeResolutionDiagnostic,
1667
+ diagnosticSeverityToken,
1668
+ showClioOverlayFrame
1669
+ };
1670
+ //# sourceMappingURL=chunk-3O5JWP4L.js.map