@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,1865 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ ensureYaziProfile,
4
+ yaziProfileDir
5
+ } from "./chunk-U26XXPJS.js";
6
+ import {
7
+ namingCompatibilityEnvironment
8
+ } from "./chunk-O63U2I6I.js";
9
+ import {
10
+ describeResolution,
11
+ resolveToolBinary,
12
+ toolStatus
13
+ } from "./chunk-53OXPRI6.js";
14
+ import {
15
+ findPinnedTool
16
+ } from "./chunk-2EMLKSCX.js";
17
+ import {
18
+ clioCacheDir
19
+ } from "./chunk-CTTI7G3T.js";
20
+ import {
21
+ resolvePackageRoot
22
+ } from "./chunk-ZPST2KQO.js";
23
+ import {
24
+ init_esm_shims
25
+ } from "./chunk-ECBHH7LU.js";
26
+
27
+ // src/domains/mux/index.ts
28
+ init_esm_shims();
29
+
30
+ // src/domains/mux/extension.ts
31
+ init_esm_shims();
32
+
33
+ // src/domains/mux/contract.ts
34
+ init_esm_shims();
35
+
36
+ // src/domains/mux/dock-controller.ts
37
+ init_esm_shims();
38
+ var DOCK_SPECS = {
39
+ workers: { slot: "workers", direction: "right", defaultShare: 0.34, minCells: 48 },
40
+ files: { slot: "files", direction: "down", defaultShare: 0.3, minCells: 12 }
41
+ };
42
+ var DOCK_MAX_SHARE = 0.5;
43
+ var SHARE_EPSILON = 0.02;
44
+ function ratioForDockShare(share) {
45
+ return 1 - share;
46
+ }
47
+ function clampDockShare(share) {
48
+ if (!Number.isFinite(share) || share <= 0) return DOCK_SPECS.workers.defaultShare;
49
+ return Math.min(DOCK_MAX_SHARE, share);
50
+ }
51
+ function axisCells(rect, spec) {
52
+ return spec.direction === "right" ? rect.width : rect.height;
53
+ }
54
+ function deriveSplitPath(root, anchorPaneId, dockPaneId) {
55
+ const contains = (node, paneId) => {
56
+ if (node.type === "pane") return node.paneId === paneId;
57
+ return contains(node.first, paneId) || contains(node.second, paneId);
58
+ };
59
+ const walk = (node, path) => {
60
+ if (node.type !== "split") return null;
61
+ const dockFirst = contains(node.first, dockPaneId);
62
+ const dockSecond = contains(node.second, dockPaneId);
63
+ const anchorFirst = contains(node.first, anchorPaneId);
64
+ const anchorSecond = contains(node.second, anchorPaneId);
65
+ if (dockFirst && anchorSecond) return { path, dockIsSecond: false, direction: node.direction };
66
+ if (dockSecond && anchorFirst) return { path, dockIsSecond: true, direction: node.direction };
67
+ if (dockFirst && anchorFirst) return walk(node.first, [...path, false]);
68
+ if (dockSecond && anchorSecond) return walk(node.second, [...path, true]);
69
+ return null;
70
+ };
71
+ return walk(root, []);
72
+ }
73
+ function containsRect(outer, inner) {
74
+ return outer.x <= inner.x && outer.y <= inner.y && outer.x + outer.width >= inner.x + inner.width && outer.y + outer.height >= inner.y + inner.height;
75
+ }
76
+ function observedDockShare(geometry, spec, anchorPaneId, dockPaneId) {
77
+ const anchor = geometry.panes.find((pane) => pane.paneId === anchorPaneId);
78
+ const dock = geometry.panes.find((pane) => pane.paneId === dockPaneId);
79
+ if (!anchor || !dock) return null;
80
+ let separating = null;
81
+ for (const split of geometry.splits) {
82
+ if (!containsRect(split.rect, anchor.rect) || !containsRect(split.rect, dock.rect)) continue;
83
+ if (!separating || split.rect.width * split.rect.height < separating.rect.width * separating.rect.height) {
84
+ separating = split;
85
+ }
86
+ }
87
+ if (!separating || separating.direction !== spec.direction) return null;
88
+ const dockIsSecond = spec.direction === "right" ? dock.rect.x > anchor.rect.x : dock.rect.y > anchor.rect.y;
89
+ return dockIsSecond ? 1 - separating.ratio : separating.ratio;
90
+ }
91
+ function planDockOpen(anchorRect, spec, requestedShare) {
92
+ const axis = axisCells(anchorRect, spec);
93
+ if (axis * DOCK_MAX_SHARE < spec.minCells) {
94
+ return {
95
+ refused: `the ${spec.slot} dock needs ${spec.minCells} cells and at most half of ${axis} is available`
96
+ };
97
+ }
98
+ const share = Math.max(clampDockShare(requestedShare ?? spec.defaultShare), spec.minCells / axis);
99
+ return { direction: spec.direction, ratio: ratioForDockShare(share), share };
100
+ }
101
+ function createDockController(options) {
102
+ const { client, anchorPaneId } = options;
103
+ const log = options.log ?? (() => void 0);
104
+ const bySlot = /* @__PURE__ */ new Map();
105
+ const applyShare = async (state, share) => {
106
+ const tree = await client.layoutExport({ tabId: state.tabId });
107
+ const derived = deriveSplitPath(tree.root, anchorPaneId, state.paneId);
108
+ if (!derived) {
109
+ log("debug", `mux ${state.slot} dock split path is gone from ${state.tabId}; leaving layout alone`);
110
+ return false;
111
+ }
112
+ if (derived.direction !== DOCK_SPECS[state.slot].direction) {
113
+ log("debug", `mux ${state.slot} dock split runs ${derived.direction}; declining the wrong-axis resize`);
114
+ return false;
115
+ }
116
+ const ratio = derived.dockIsSecond ? ratioForDockShare(share) : share;
117
+ await client.layoutSetSplitRatio({ tabId: state.tabId, path: derived.path, ratio });
118
+ state.targetShare = share;
119
+ state.lastAppliedShare = share;
120
+ return true;
121
+ };
122
+ return {
123
+ states() {
124
+ return [...bySlot.values()].map((state) => ({ ...state }));
125
+ },
126
+ stateFor(slot) {
127
+ const state = bySlot.get(slot);
128
+ return state ? { ...state } : null;
129
+ },
130
+ async open(slot, openOptions = {}) {
131
+ const existing = bySlot.get(slot);
132
+ if (existing) {
133
+ return { paneId: existing.paneId, tabId: existing.tabId, workspaceId: "" };
134
+ }
135
+ const spec = DOCK_SPECS[slot];
136
+ const geometry = await client.paneLayout(anchorPaneId);
137
+ const anchorRect = geometry.panes.find((pane2) => pane2.paneId === anchorPaneId)?.rect;
138
+ if (!anchorRect) {
139
+ openOptions.onRefused?.(`no anchor geometry for ${anchorPaneId}; check the pane host layout before trying again`);
140
+ log("debug", `mux ${slot} dock open found no anchor rect for ${anchorPaneId}`);
141
+ return null;
142
+ }
143
+ const plan = planDockOpen(anchorRect, spec, openOptions.share);
144
+ if ("refused" in plan) {
145
+ openOptions.onRefused?.(`${plan.refused}; enlarge the anchor pane before trying again`);
146
+ log("info", `mux ${slot} dock refused: ${plan.refused}`);
147
+ return null;
148
+ }
149
+ const pane = await client.paneSplit({
150
+ direction: plan.direction,
151
+ targetPaneId: anchorPaneId,
152
+ ratio: plan.ratio,
153
+ focus: false,
154
+ ...openOptions.cwd !== void 0 ? { cwd: openOptions.cwd } : {},
155
+ ...openOptions.env ? { env: openOptions.env } : {}
156
+ });
157
+ const state = {
158
+ slot,
159
+ paneId: pane.paneId,
160
+ tabId: pane.tabId,
161
+ targetShare: plan.share,
162
+ lastAppliedShare: plan.share
163
+ };
164
+ bySlot.set(slot, state);
165
+ try {
166
+ const after = await client.paneLayout(anchorPaneId);
167
+ const dockRect = after.panes.find((entry) => entry.paneId === pane.paneId)?.rect;
168
+ if (dockRect && axisCells(dockRect, spec) < spec.minCells) {
169
+ const anchorAfter = after.panes.find((entry) => entry.paneId === anchorPaneId)?.rect;
170
+ const total = anchorAfter ? axisCells(anchorAfter, spec) + axisCells(dockRect, spec) : 0;
171
+ if (total > 0) await applyShare(state, Math.min(DOCK_MAX_SHARE, spec.minCells / total));
172
+ }
173
+ } catch (error) {
174
+ log("debug", `mux ${slot} dock converge skipped: ${error instanceof Error ? error.message : String(error)}`);
175
+ }
176
+ return { paneId: pane.paneId, tabId: pane.tabId, workspaceId: pane.workspaceId };
177
+ },
178
+ adopt(slot, ref) {
179
+ const spec = DOCK_SPECS[slot];
180
+ bySlot.set(slot, {
181
+ slot,
182
+ paneId: ref.paneId,
183
+ tabId: ref.tabId,
184
+ // The surviving pane's actual share is adopted lazily by the next
185
+ // layout observation; until then the default is the best guess.
186
+ targetShare: spec.defaultShare,
187
+ lastAppliedShare: spec.defaultShare
188
+ });
189
+ },
190
+ async resize(slot, share) {
191
+ const state = bySlot.get(slot);
192
+ if (!state) return false;
193
+ return await applyShare(state, Math.max(clampDockShare(share), 0.01));
194
+ },
195
+ noteLayoutUpdated(geometry) {
196
+ for (const state of bySlot.values()) {
197
+ if (state.tabId !== geometry.tabId) continue;
198
+ const observed = observedDockShare(geometry, DOCK_SPECS[state.slot], anchorPaneId, state.paneId);
199
+ if (observed === null) continue;
200
+ if (Math.abs(observed - state.targetShare) <= SHARE_EPSILON) continue;
201
+ if (Math.abs(observed - state.lastAppliedShare) <= SHARE_EPSILON) continue;
202
+ log("debug", `mux ${state.slot} dock resized by the user to ${(observed * 100).toFixed(0)}%`);
203
+ state.targetShare = observed;
204
+ state.lastAppliedShare = observed;
205
+ }
206
+ },
207
+ notePaneGone(paneId) {
208
+ for (const [slot, state] of bySlot) {
209
+ if (state.paneId === paneId) bySlot.delete(slot);
210
+ }
211
+ },
212
+ notePaneMoved(previousPaneId, paneId, tabId) {
213
+ for (const state of bySlot.values()) {
214
+ if (state.paneId !== previousPaneId) continue;
215
+ state.paneId = paneId;
216
+ state.tabId = tabId;
217
+ }
218
+ },
219
+ paneIds() {
220
+ return [...bySlot.values()].map((state) => state.paneId);
221
+ },
222
+ clear() {
223
+ bySlot.clear();
224
+ }
225
+ };
226
+ }
227
+
228
+ // src/domains/mux/pane-registry.ts
229
+ init_esm_shims();
230
+ function createPaneRegistry() {
231
+ const byPane = /* @__PURE__ */ new Map();
232
+ return {
233
+ record(entry) {
234
+ byPane.set(entry.ref.paneId, entry);
235
+ },
236
+ byPaneId(paneId) {
237
+ return byPane.get(paneId) ?? null;
238
+ },
239
+ byPurpose(purpose) {
240
+ let newest = null;
241
+ for (const entry of byPane.values()) {
242
+ if (entry.purpose === purpose) newest = entry;
243
+ }
244
+ return newest;
245
+ },
246
+ owns(paneId) {
247
+ return byPane.has(paneId);
248
+ },
249
+ forget(paneId) {
250
+ const entry = byPane.get(paneId);
251
+ if (!entry) return null;
252
+ byPane.delete(paneId);
253
+ return entry;
254
+ },
255
+ reconcile(livePaneIds) {
256
+ const live = new Set(livePaneIds);
257
+ const dropped = [];
258
+ for (const [paneId, entry] of byPane) {
259
+ if (!live.has(paneId)) dropped.push(entry);
260
+ }
261
+ for (const entry of dropped) byPane.delete(entry.ref.paneId);
262
+ return dropped;
263
+ },
264
+ list() {
265
+ return [...byPane.values()];
266
+ },
267
+ clear() {
268
+ byPane.clear();
269
+ }
270
+ };
271
+ }
272
+ function paneRecord(ref, fields) {
273
+ return {
274
+ ref,
275
+ purpose: fields.purpose,
276
+ label: fields.label,
277
+ openedAt: fields.openedAt,
278
+ ...fields.adopted === true ? { adopted: true } : {}
279
+ };
280
+ }
281
+
282
+ // src/domains/mux/protocol.ts
283
+ init_esm_shims();
284
+ var MUX_METHOD_MIN_PROTOCOL = {
285
+ "notification.show": 17,
286
+ "pane.rename": 17,
287
+ "pane.focus": 17,
288
+ "pane.zoom": 17,
289
+ "layout.export": 17,
290
+ "layout.set_split_ratio": 17,
291
+ "worktree.list": 10,
292
+ "worktree.create": 10,
293
+ "worktree.open": 10,
294
+ "worktree.remove": 10
295
+ };
296
+ function muxSupportsMethod(server, method) {
297
+ if (server === null) return false;
298
+ return server.protocol >= MUX_METHOD_MIN_PROTOCOL[method];
299
+ }
300
+
301
+ // src/domains/mux/types.ts
302
+ init_esm_shims();
303
+ var MuxError = class extends Error {
304
+ kind;
305
+ /** The server's raw error code, when the failure came back over the wire. */
306
+ wireCode;
307
+ method;
308
+ constructor(kind, message, options = {}) {
309
+ super(message);
310
+ this.name = "MuxError";
311
+ this.kind = kind;
312
+ this.wireCode = options.wireCode ?? null;
313
+ this.method = options.method ?? null;
314
+ }
315
+ };
316
+ var MuxRequestTimeout = class extends MuxError {
317
+ timeoutMs;
318
+ constructor(method, timeoutMs) {
319
+ super("timeout", `mux request ${method} timed out after ${timeoutMs}ms`, { method });
320
+ this.name = "MuxRequestTimeout";
321
+ this.timeoutMs = timeoutMs;
322
+ }
323
+ };
324
+ var ERROR_KIND_BY_WIRE_CODE = {
325
+ agent_blocked: "agent_blocked",
326
+ agent_prompt_stalled: "agent_prompt_stalled",
327
+ feature_disabled: "feature_disabled",
328
+ invalid_params: "invalid_params",
329
+ invalid_request: "invalid_params",
330
+ not_found: "not_found"
331
+ };
332
+ function muxErrorKind(wireCode) {
333
+ const mapped = ERROR_KIND_BY_WIRE_CODE[wireCode];
334
+ if (mapped) return mapped;
335
+ if (wireCode.endsWith("_not_found")) return "not_found";
336
+ if (wireCode.startsWith("invalid_")) return "invalid_params";
337
+ return "unknown";
338
+ }
339
+
340
+ // src/domains/mux/contract.ts
341
+ var METADATA_SOURCE = "clio-coder:mux";
342
+ var SELF_AGENT_SOURCE = "clio-coder:coder";
343
+ var OWNER_TOKEN_KEY = "clio_coder_owner";
344
+ var OWNER_TOKEN_VALUE = "clio-coder:mux";
345
+ var LEGACY_OWNER_TOKEN_KEY = "clio_owner";
346
+ var LEGACY_OWNER_TOKEN_VALUE = "clio:mux";
347
+ var TOKEN_VALUE_MAX = 80;
348
+ var DEGRADE_COOLDOWN_MS = 5e3;
349
+ function shellQuote(argv) {
350
+ return argv.map((arg) => `'${arg.replaceAll("'", `'\\''`)}'`).join(" ");
351
+ }
352
+ function token(value) {
353
+ if (typeof value !== "string" || value.length === 0) return null;
354
+ return value.length > TOKEN_VALUE_MAX ? value.slice(0, TOKEN_VALUE_MAX) : value;
355
+ }
356
+ function hasOwnedPaneToken(tokens) {
357
+ return tokens[OWNER_TOKEN_KEY] === OWNER_TOKEN_VALUE || tokens[LEGACY_OWNER_TOKEN_KEY] === LEGACY_OWNER_TOKEN_VALUE;
358
+ }
359
+ function createMuxRuntime(options) {
360
+ const { detection, client } = options;
361
+ const log = options.log ?? (() => void 0);
362
+ const now = options.now ?? Date.now;
363
+ const registry = createPaneRegistry();
364
+ const anchorPaneId = detection.self.paneId;
365
+ const docks = client !== null && anchorPaneId !== null && muxSupportsMethod(detection.server, "layout.export") ? createDockController({ client, anchorPaneId, log }) : null;
366
+ let healthy = client !== null;
367
+ let probeHealthAt = 0;
368
+ let stopped = false;
369
+ let subscription = null;
370
+ const paneGoneHandlers = /* @__PURE__ */ new Set();
371
+ const degrade = (what, error) => {
372
+ const message = error instanceof Error ? error.message : String(error);
373
+ const transport = error instanceof MuxError && (error.kind === "transport" || error.kind === "timeout");
374
+ if (transport) {
375
+ healthy = false;
376
+ probeHealthAt = now() + DEGRADE_COOLDOWN_MS;
377
+ }
378
+ log(transport ? "warning" : "debug", `mux ${what} failed: ${message}`);
379
+ };
380
+ const usable = () => {
381
+ if (stopped || client === null || detection.mode === "none") return false;
382
+ return healthy || now() >= probeHealthAt;
383
+ };
384
+ const attempt = async (what, run, fallback, onError) => {
385
+ if (!usable() || client === null) return fallback;
386
+ try {
387
+ const value = await run(client);
388
+ healthy = true;
389
+ return value;
390
+ } catch (error) {
391
+ degrade(what, error);
392
+ onError?.(error);
393
+ return fallback;
394
+ }
395
+ };
396
+ const tagOwner = async (live, paneId, tokens, title) => {
397
+ await live.paneReportMetadata({
398
+ paneId,
399
+ source: METADATA_SOURCE,
400
+ ...title === void 0 ? {} : { title },
401
+ tokens: {
402
+ [OWNER_TOKEN_KEY]: OWNER_TOKEN_VALUE,
403
+ [LEGACY_OWNER_TOKEN_KEY]: LEGACY_OWNER_TOKEN_VALUE,
404
+ ...tokens
405
+ }
406
+ });
407
+ };
408
+ const onEvent = (event) => {
409
+ if (event.kind === "layout.updated") {
410
+ docks?.noteLayoutUpdated(event.geometry);
411
+ return;
412
+ }
413
+ if (event.kind === "pane.moved") {
414
+ const held = registry.forget(event.previousPaneId);
415
+ if (held) {
416
+ registry.record({ ...held, ref: { paneId: event.paneId, tabId: event.tabId, workspaceId: event.workspaceId } });
417
+ docks?.notePaneMoved(event.previousPaneId, event.paneId, event.tabId);
418
+ }
419
+ return;
420
+ }
421
+ docks?.notePaneGone(event.paneId);
422
+ const dropped = registry.forget(event.paneId);
423
+ if (dropped) {
424
+ log("debug", `mux pane ${event.paneId} left on ${event.kind}; dropped from the registry`);
425
+ for (const handler of paneGoneHandlers) {
426
+ try {
427
+ handler(dropped);
428
+ } catch (error) {
429
+ log("debug", `mux pane-gone handler threw: ${error instanceof Error ? error.message : String(error)}`);
430
+ }
431
+ }
432
+ }
433
+ };
434
+ const contract = {
435
+ mode: detection.mode,
436
+ available() {
437
+ return usable();
438
+ },
439
+ detection() {
440
+ return detection;
441
+ },
442
+ async openUtilityPane(request) {
443
+ const report = (failure) => {
444
+ try {
445
+ request.onFailure?.(failure);
446
+ } catch {
447
+ }
448
+ };
449
+ const dockSlot = request.dock?.slot;
450
+ if (dockSlot && docks) {
451
+ const existing = docks.stateFor(dockSlot);
452
+ const held = existing ? registry.byPaneId(existing.paneId) : null;
453
+ if (held) return held.ref;
454
+ }
455
+ return await attempt(
456
+ "openUtilityPane",
457
+ async (live) => {
458
+ let ref;
459
+ if (request.dock && docks) {
460
+ const placed = await docks.open(request.dock.slot, {
461
+ onRefused: (message) => report({ source: "local", message }),
462
+ ...request.dock.share === void 0 ? {} : { share: request.dock.share },
463
+ cwd: request.cwd,
464
+ ...request.env ? { env: request.env } : {}
465
+ });
466
+ if (placed === null) return null;
467
+ ref = placed;
468
+ } else {
469
+ const anchor = anchorPaneId ?? (await live.paneCurrent()).paneId;
470
+ const pane = await live.paneSplit({
471
+ direction: request.direction ?? "right",
472
+ targetPaneId: anchor,
473
+ cwd: request.cwd,
474
+ focus: false,
475
+ ...request.env ? { env: request.env } : {}
476
+ });
477
+ ref = { paneId: pane.paneId, tabId: pane.tabId, workspaceId: pane.workspaceId };
478
+ }
479
+ const purpose = request.purpose ?? "utility";
480
+ registry.record(paneRecord(ref, { purpose, label: request.label, openedAt: now() }));
481
+ const title = request.title;
482
+ const titleSupported = title !== void 0 && muxSupportsMethod(detection.server, "pane.rename");
483
+ if (titleSupported) {
484
+ try {
485
+ await live.paneRename(ref.paneId, title);
486
+ } catch {
487
+ }
488
+ }
489
+ await tagOwner(live, ref.paneId, { role: token(purpose) }, titleSupported ? title : void 0);
490
+ if (request.argv.length > 0) {
491
+ const redirect = request.stdoutPath ? ` > ${shellQuote([request.stdoutPath])}` : "";
492
+ await live.paneSendText(ref.paneId, `exec ${shellQuote(request.argv)}${redirect}
493
+ `);
494
+ }
495
+ return ref;
496
+ },
497
+ null,
498
+ (error) => {
499
+ if (error instanceof MuxError) {
500
+ report({
501
+ source: "mux",
502
+ kind: error.kind,
503
+ wireCode: error.wireCode,
504
+ method: error.method,
505
+ message: error.message
506
+ });
507
+ } else {
508
+ report({ source: "local", message: error instanceof Error ? error.message : String(error) });
509
+ }
510
+ }
511
+ );
512
+ },
513
+ async closePane(paneId) {
514
+ if (!registry.owns(paneId)) return false;
515
+ return await attempt(
516
+ "closePane",
517
+ async (live) => {
518
+ await live.paneClose(paneId);
519
+ registry.forget(paneId);
520
+ docks?.notePaneGone(paneId);
521
+ return true;
522
+ },
523
+ false
524
+ );
525
+ },
526
+ async adoptPane(request) {
527
+ const existing = registry.byPurpose(request.purpose);
528
+ if (existing) return existing.ref;
529
+ return await attempt(
530
+ "adoptPane",
531
+ async (live) => {
532
+ const snapshot = await live.snapshot();
533
+ for (const pane of snapshot.panes) {
534
+ if (!hasOwnedPaneToken(pane.tokens)) continue;
535
+ if (pane.tokens.role !== request.purpose) continue;
536
+ if (registry.owns(pane.paneId)) continue;
537
+ if (detection.self.workspaceId !== null && pane.workspaceId !== detection.self.workspaceId) continue;
538
+ const ref = { paneId: pane.paneId, tabId: pane.tabId, workspaceId: pane.workspaceId };
539
+ registry.record(
540
+ paneRecord(ref, { purpose: request.purpose, label: request.label, openedAt: now(), adopted: true })
541
+ );
542
+ if (request.dock && docks) docks.adopt(request.dock, ref);
543
+ log("info", `mux adopted a ${request.purpose} pane left open by a previous session`);
544
+ return ref;
545
+ }
546
+ return null;
547
+ },
548
+ null
549
+ );
550
+ },
551
+ async focusPane(paneId) {
552
+ if (!registry.owns(paneId)) return false;
553
+ if (!muxSupportsMethod(detection.server, "pane.focus")) return false;
554
+ return await attempt(
555
+ "focusPane",
556
+ async (live) => {
557
+ await live.paneFocus(paneId);
558
+ return true;
559
+ },
560
+ false
561
+ );
562
+ },
563
+ async zoomPane(paneId, mode) {
564
+ if (!registry.owns(paneId)) return false;
565
+ if (!muxSupportsMethod(detection.server, "pane.zoom")) return false;
566
+ return await attempt(
567
+ "zoomPane",
568
+ async (live) => {
569
+ const result = await live.paneZoom(paneId, mode);
570
+ return result.changed;
571
+ },
572
+ false
573
+ );
574
+ },
575
+ async focusSelf() {
576
+ if (anchorPaneId === null || !muxSupportsMethod(detection.server, "pane.focus")) return false;
577
+ return await attempt(
578
+ "focusSelf",
579
+ async (live) => {
580
+ await live.paneFocus(anchorPaneId);
581
+ return true;
582
+ },
583
+ false
584
+ );
585
+ },
586
+ async unzoomSelf() {
587
+ if (anchorPaneId === null || !muxSupportsMethod(detection.server, "pane.zoom")) return false;
588
+ return await attempt(
589
+ "unzoomSelf",
590
+ async (live) => {
591
+ const result = await live.paneZoom(anchorPaneId, "off");
592
+ return result.changed;
593
+ },
594
+ false
595
+ );
596
+ },
597
+ async resizeDock(slot, share) {
598
+ if (!docks) return false;
599
+ return await attempt("resizeDock", () => docks.resize(slot, share), false);
600
+ },
601
+ docks() {
602
+ return docks?.states() ?? [];
603
+ },
604
+ async notify(request) {
605
+ if (!muxSupportsMethod(detection.server, "notification.show")) {
606
+ log("debug", `mux notify skipped, server protocol is below the notification.show floor: ${request.title}`);
607
+ return;
608
+ }
609
+ await attempt(
610
+ "notify",
611
+ async (live) => {
612
+ const result = await live.notificationShow({
613
+ title: request.title,
614
+ ...request.body ? { body: request.body } : {},
615
+ ...request.sound ? { sound: request.sound } : {}
616
+ });
617
+ if (!result.shown) log("debug", `mux notify not shown (${result.reason}): ${request.title}`);
618
+ return void 0;
619
+ },
620
+ void 0
621
+ );
622
+ },
623
+ async worktreeCreate(request) {
624
+ if (!muxSupportsMethod(detection.server, "worktree.create")) {
625
+ log("debug", "mux worktree.create skipped, server protocol is below the worktree floor");
626
+ return null;
627
+ }
628
+ return await attempt("worktreeCreate", (live) => live.worktreeCreate(request), null);
629
+ },
630
+ async worktreeRemove(workspaceId, removeOptions = {}) {
631
+ if (!muxSupportsMethod(detection.server, "worktree.remove")) {
632
+ log("debug", "mux worktree.remove skipped, server protocol is below the worktree floor");
633
+ return false;
634
+ }
635
+ return await attempt(
636
+ "worktreeRemove",
637
+ async (live) => {
638
+ await live.worktreeRemove(workspaceId, removeOptions);
639
+ return true;
640
+ },
641
+ false
642
+ );
643
+ },
644
+ onPaneGone(handler) {
645
+ paneGoneHandlers.add(handler);
646
+ return () => {
647
+ paneGoneHandlers.delete(handler);
648
+ };
649
+ },
650
+ list() {
651
+ return registry.list();
652
+ },
653
+ async reportSelf(report) {
654
+ const paneId = detection.self.paneId;
655
+ if (detection.mode !== "guest" || !paneId) return false;
656
+ return await attempt(
657
+ "reportSelf",
658
+ async (live) => {
659
+ await live.paneReportAgent({
660
+ paneId,
661
+ source: SELF_AGENT_SOURCE,
662
+ agent: "clio-coder",
663
+ state: report.state,
664
+ ...report.message ? { message: report.message } : {}
665
+ });
666
+ if (report.tokens || report.stateLabels || report.ttlMs !== void 0) {
667
+ await live.paneReportMetadata({
668
+ paneId,
669
+ source: METADATA_SOURCE,
670
+ ...report.tokens ? { tokens: report.tokens } : {},
671
+ ...report.stateLabels ? { stateLabels: report.stateLabels } : {},
672
+ ...report.ttlMs !== void 0 ? { ttlMs: report.ttlMs } : {}
673
+ });
674
+ }
675
+ return true;
676
+ },
677
+ false
678
+ );
679
+ },
680
+ async shutdown() {
681
+ if (stopped) return;
682
+ stopped = true;
683
+ subscription?.close();
684
+ subscription = null;
685
+ paneGoneHandlers.clear();
686
+ if (client && docks) {
687
+ for (const paneId of docks.paneIds()) {
688
+ await client.paneClose(paneId).catch(() => void 0);
689
+ registry.forget(paneId);
690
+ }
691
+ docks.clear();
692
+ }
693
+ if (client) await client.close().catch(() => void 0);
694
+ }
695
+ };
696
+ const start = async () => {
697
+ if (detection.mode === "none" || client === null) return;
698
+ try {
699
+ const kinds = ["pane.closed", "pane.exited"];
700
+ if (docks) kinds.push("pane.moved", "layout.updated");
701
+ subscription = await client.subscribe(kinds, onEvent, {
702
+ onResync: (snapshot) => {
703
+ const dropped = registry.reconcile(snapshot.panes.map((pane) => pane.paneId));
704
+ for (const record2 of dropped) docks?.notePaneGone(record2.ref.paneId);
705
+ if (dropped.length > 0) {
706
+ log("info", `mux reconciled ${dropped.length} pane(s) closed while the socket was down`);
707
+ }
708
+ }
709
+ });
710
+ } catch (error) {
711
+ degrade("event subscription", error);
712
+ }
713
+ };
714
+ return { contract, start, stop: contract.shutdown, registry };
715
+ }
716
+
717
+ // src/domains/mux/detect.ts
718
+ init_esm_shims();
719
+ import { homedir } from "node:os";
720
+ import { join } from "node:path";
721
+
722
+ // src/domains/mux/socket-client.ts
723
+ init_esm_shims();
724
+ import * as net from "node:net";
725
+ var DEFAULT_REQUEST_TIMEOUT_MS = 5e3;
726
+ var DEFAULT_CONNECT_TIMEOUT_MS = 2e3;
727
+ var DEFAULT_BACKOFF = { initialDelayMs: 250, maxDelayMs: 5e3, factor: 2 };
728
+ var MAX_LINE_BYTES = 8 * 1024 * 1024;
729
+ function connectSocket(socketPath, timeoutMs) {
730
+ return new Promise((resolve, reject) => {
731
+ const socket = net.connect({ path: socketPath });
732
+ socket.setNoDelay(true);
733
+ const timer = setTimeout(() => {
734
+ socket.destroy();
735
+ reject(new MuxError("transport", `mux socket connect to ${socketPath} timed out after ${timeoutMs}ms`));
736
+ }, timeoutMs);
737
+ timer.unref?.();
738
+ const settle = (error) => {
739
+ clearTimeout(timer);
740
+ socket.removeListener("connect", onConnect);
741
+ socket.removeListener("error", onError);
742
+ if (error) {
743
+ socket.destroy();
744
+ reject(new MuxError("transport", `mux socket connect to ${socketPath} failed: ${error.message}`));
745
+ return;
746
+ }
747
+ resolve(socket);
748
+ };
749
+ const onConnect = () => settle(null);
750
+ const onError = (error) => settle(error);
751
+ socket.once("connect", onConnect);
752
+ socket.once("error", onError);
753
+ });
754
+ }
755
+ function readJsonLines(socket, onValue, onOverflow) {
756
+ let buffer = "";
757
+ socket.setEncoding("utf8");
758
+ socket.on("data", (chunk) => {
759
+ buffer += chunk;
760
+ if (buffer.length > MAX_LINE_BYTES) {
761
+ buffer = "";
762
+ onOverflow();
763
+ return;
764
+ }
765
+ let newline = buffer.indexOf("\n");
766
+ while (newline >= 0) {
767
+ const line = buffer.slice(0, newline).trim();
768
+ buffer = buffer.slice(newline + 1);
769
+ if (line.length > 0) {
770
+ let parsed;
771
+ try {
772
+ parsed = JSON.parse(line);
773
+ } catch {
774
+ parsed = null;
775
+ }
776
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
777
+ onValue(parsed);
778
+ }
779
+ }
780
+ newline = buffer.indexOf("\n");
781
+ }
782
+ });
783
+ }
784
+ function asRecord(value) {
785
+ return value && typeof value === "object" && !Array.isArray(value) ? value : null;
786
+ }
787
+ function requireString(source, key, context) {
788
+ const value = source[key];
789
+ if (typeof value !== "string") {
790
+ throw new MuxError("protocol", `mux ${context} response is missing string field ${key}`);
791
+ }
792
+ return value;
793
+ }
794
+ function optionalString(source, key) {
795
+ const value = source[key];
796
+ return typeof value === "string" ? value : null;
797
+ }
798
+ function stringMap(value) {
799
+ const source = asRecord(value);
800
+ if (!source) return {};
801
+ const out = {};
802
+ for (const [key, entry] of Object.entries(source)) {
803
+ if (typeof entry === "string") out[key] = entry;
804
+ }
805
+ return out;
806
+ }
807
+ var AGENT_STATES = /* @__PURE__ */ new Set(["idle", "working", "blocked", "done", "unknown"]);
808
+ function readAgentState(value) {
809
+ return typeof value === "string" && AGENT_STATES.has(value) ? value : "unknown";
810
+ }
811
+ function readPane(value) {
812
+ const source = asRecord(value);
813
+ if (!source) throw new MuxError("protocol", "mux pane response is not an object");
814
+ const revision = source.revision;
815
+ return {
816
+ paneId: requireString(source, "pane_id", "pane"),
817
+ tabId: requireString(source, "tab_id", "pane"),
818
+ workspaceId: requireString(source, "workspace_id", "pane"),
819
+ focused: source.focused === true,
820
+ agentState: readAgentState(source.agent_status),
821
+ revision: typeof revision === "number" ? revision : 0,
822
+ label: optionalString(source, "label"),
823
+ title: optionalString(source, "title"),
824
+ cwd: optionalString(source, "cwd"),
825
+ agent: optionalString(source, "agent"),
826
+ tokens: stringMap(source.tokens)
827
+ };
828
+ }
829
+ function readTab(value) {
830
+ const source = asRecord(value);
831
+ if (!source) throw new MuxError("protocol", "mux tab response is not an object");
832
+ const number = source.number;
833
+ const paneCount = source.pane_count;
834
+ return {
835
+ tabId: requireString(source, "tab_id", "tab"),
836
+ workspaceId: requireString(source, "workspace_id", "tab"),
837
+ number: typeof number === "number" ? number : 0,
838
+ label: optionalString(source, "label") ?? "",
839
+ focused: source.focused === true,
840
+ paneCount: typeof paneCount === "number" ? paneCount : 0,
841
+ agentState: readAgentState(source.agent_status)
842
+ };
843
+ }
844
+ function readWorktree(value) {
845
+ const source = asRecord(value);
846
+ if (!source) throw new MuxError("protocol", "mux worktree response is not an object");
847
+ return {
848
+ path: requireString(source, "path", "worktree"),
849
+ branch: optionalString(source, "branch"),
850
+ isBare: source.is_bare === true,
851
+ isDetached: source.is_detached === true,
852
+ isPrunable: source.is_prunable === true,
853
+ isLinkedWorktree: source.is_linked_worktree === true,
854
+ openWorkspaceId: optionalString(source, "open_workspace_id"),
855
+ label: optionalString(source, "label") ?? ""
856
+ };
857
+ }
858
+ function readWorktreeSource(value) {
859
+ const source = asRecord(value);
860
+ if (!source) throw new MuxError("protocol", "mux worktree source response is not an object");
861
+ return {
862
+ repoKey: requireString(source, "repo_key", "worktree source"),
863
+ repoName: requireString(source, "repo_name", "worktree source"),
864
+ repoRoot: requireString(source, "repo_root", "worktree source"),
865
+ sourceCheckoutPath: requireString(source, "source_checkout_path", "worktree source"),
866
+ sourceWorkspaceId: optionalString(source, "source_workspace_id")
867
+ };
868
+ }
869
+ function readArray(source, key) {
870
+ const value = source[key];
871
+ return Array.isArray(value) ? value : [];
872
+ }
873
+ function readServerInfo(source) {
874
+ const protocol = source.protocol;
875
+ return {
876
+ version: optionalString(source, "version") ?? "",
877
+ protocol: typeof protocol === "number" ? protocol : 0
878
+ };
879
+ }
880
+ function readSnapshot(value) {
881
+ const source = asRecord(value);
882
+ if (!source) throw new MuxError("protocol", "mux snapshot response is not an object");
883
+ return {
884
+ server: readServerInfo(source),
885
+ focusedPaneId: optionalString(source, "focused_pane_id"),
886
+ focusedTabId: optionalString(source, "focused_tab_id"),
887
+ focusedWorkspaceId: optionalString(source, "focused_workspace_id"),
888
+ panes: readArray(source, "panes").map(readPane),
889
+ tabs: readArray(source, "tabs").map(readTab)
890
+ };
891
+ }
892
+ function requireNumber(source, key, context) {
893
+ const value = source[key];
894
+ if (typeof value !== "number") {
895
+ throw new MuxError("protocol", `mux ${context} response is missing number field ${key}`);
896
+ }
897
+ return value;
898
+ }
899
+ function readRect(value, context) {
900
+ const source = asRecord(value);
901
+ if (!source) throw new MuxError("protocol", `mux ${context} rect is not an object`);
902
+ return {
903
+ x: requireNumber(source, "x", context),
904
+ y: requireNumber(source, "y", context),
905
+ width: requireNumber(source, "width", context),
906
+ height: requireNumber(source, "height", context)
907
+ };
908
+ }
909
+ function readSplitDirection(value, context) {
910
+ if (value === "right" || value === "down") return value;
911
+ throw new MuxError("protocol", `mux ${context} split direction is not right/down`);
912
+ }
913
+ function readTabGeometry(value) {
914
+ const source = asRecord(value);
915
+ if (!source) throw new MuxError("protocol", "mux layout snapshot is not an object");
916
+ return {
917
+ workspaceId: requireString(source, "workspace_id", "layout"),
918
+ tabId: requireString(source, "tab_id", "layout"),
919
+ zoomed: source.zoomed === true,
920
+ area: readRect(source.area, "layout"),
921
+ focusedPaneId: optionalString(source, "focused_pane_id"),
922
+ panes: readArray(source, "panes").map((entry) => {
923
+ const pane = asRecord(entry);
924
+ if (!pane) throw new MuxError("protocol", "mux layout pane entry is not an object");
925
+ return {
926
+ paneId: requireString(pane, "pane_id", "layout pane"),
927
+ focused: pane.focused === true,
928
+ rect: readRect(pane.rect, "layout pane")
929
+ };
930
+ }),
931
+ splits: readArray(source, "splits").map((entry) => {
932
+ const split = asRecord(entry);
933
+ if (!split) throw new MuxError("protocol", "mux layout split entry is not an object");
934
+ return {
935
+ direction: readSplitDirection(split.direction, "layout"),
936
+ ratio: requireNumber(split, "ratio", "layout split"),
937
+ rect: readRect(split.rect, "layout split")
938
+ };
939
+ })
940
+ };
941
+ }
942
+ function readLayoutNode(value) {
943
+ const source = asRecord(value);
944
+ if (!source) throw new MuxError("protocol", "mux layout node is not an object");
945
+ if (source.type === "pane") {
946
+ return { type: "pane", paneId: optionalString(source, "pane_id"), label: optionalString(source, "label") };
947
+ }
948
+ if (source.type === "split") {
949
+ return {
950
+ type: "split",
951
+ direction: readSplitDirection(source.direction, "layout tree"),
952
+ ratio: requireNumber(source, "ratio", "layout tree split"),
953
+ first: readLayoutNode(source.first),
954
+ second: readLayoutNode(source.second)
955
+ };
956
+ }
957
+ throw new MuxError("protocol", "mux layout node has an unknown type");
958
+ }
959
+ function readLayoutTree(value) {
960
+ const source = asRecord(value);
961
+ if (!source) throw new MuxError("protocol", "mux layout tree is not an object");
962
+ return {
963
+ workspaceId: requireString(source, "workspace_id", "layout tree"),
964
+ tabId: requireString(source, "tab_id", "layout tree"),
965
+ zoomed: source.zoomed === true,
966
+ focusedPaneId: optionalString(source, "focused_pane_id"),
967
+ root: readLayoutNode(source.root)
968
+ };
969
+ }
970
+ var PANE_LEAVE_KIND_BY_WIRE = {
971
+ pane_closed: "pane.closed",
972
+ pane_exited: "pane.exited"
973
+ };
974
+ function readEvent(line) {
975
+ const wireKind = line.event;
976
+ if (typeof wireKind !== "string") return null;
977
+ const data = asRecord(line.data);
978
+ if (!data) return null;
979
+ const leaveKind = PANE_LEAVE_KIND_BY_WIRE[wireKind];
980
+ if (leaveKind) {
981
+ const paneId = data.pane_id;
982
+ const workspaceId = data.workspace_id;
983
+ if (typeof paneId !== "string" || typeof workspaceId !== "string") return null;
984
+ return { kind: leaveKind, paneId, workspaceId };
985
+ }
986
+ if (wireKind === "pane_moved") {
987
+ const pane = asRecord(data.pane);
988
+ const previousPaneId = data.previous_pane_id;
989
+ if (!pane || typeof previousPaneId !== "string") return null;
990
+ const paneId = pane.pane_id;
991
+ const tabId = pane.tab_id;
992
+ const workspaceId = pane.workspace_id;
993
+ if (typeof paneId !== "string" || typeof tabId !== "string" || typeof workspaceId !== "string") return null;
994
+ return { kind: "pane.moved", paneId, previousPaneId, tabId, workspaceId };
995
+ }
996
+ if (wireKind === "layout_updated") {
997
+ try {
998
+ return { kind: "layout.updated", geometry: readTabGeometry(data.layout) };
999
+ } catch {
1000
+ return null;
1001
+ }
1002
+ }
1003
+ return null;
1004
+ }
1005
+ function params(entries) {
1006
+ const out = {};
1007
+ for (const [key, value] of Object.entries(entries)) {
1008
+ if (value !== void 0) out[key] = value;
1009
+ }
1010
+ return out;
1011
+ }
1012
+ function createMuxClient(options) {
1013
+ const socketPath = options.socketPath;
1014
+ const requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
1015
+ const connectTimeoutMs = options.connectTimeoutMs ?? DEFAULT_CONNECT_TIMEOUT_MS;
1016
+ const backoff = options.backoff ?? DEFAULT_BACKOFF;
1017
+ const log = options.log ?? (() => void 0);
1018
+ let disposed = false;
1019
+ let nextId = 0;
1020
+ let reachable = false;
1021
+ let serverInfo = null;
1022
+ let snapshotCache = null;
1023
+ let connectFailures = 0;
1024
+ let retryAt = 0;
1025
+ const delayFor = (failures) => Math.min(backoff.maxDelayMs, backoff.initialDelayMs * backoff.factor ** Math.max(0, failures - 1));
1026
+ const call = async (method, callParams, timeoutMs) => {
1027
+ if (disposed) throw new MuxError("transport", "mux client is closed");
1028
+ const waitMs = retryAt - Date.now();
1029
+ if (waitMs > 0) {
1030
+ throw new MuxError("transport", `mux socket ${socketPath} is in backoff for another ${waitMs}ms`);
1031
+ }
1032
+ let socket;
1033
+ try {
1034
+ socket = await connectSocket(socketPath, connectTimeoutMs);
1035
+ } catch (error) {
1036
+ connectFailures += 1;
1037
+ retryAt = Date.now() + delayFor(connectFailures);
1038
+ reachable = false;
1039
+ throw error;
1040
+ }
1041
+ connectFailures = 0;
1042
+ retryAt = 0;
1043
+ nextId += 1;
1044
+ const id = `clio-${nextId}`;
1045
+ const budget = timeoutMs ?? requestTimeoutMs;
1046
+ try {
1047
+ const result = await new Promise((resolve, reject) => {
1048
+ let settled = false;
1049
+ const finish = (settle) => {
1050
+ if (settled) return;
1051
+ settled = true;
1052
+ clearTimeout(timer);
1053
+ socket.destroy();
1054
+ settle();
1055
+ };
1056
+ const timer = setTimeout(() => finish(() => reject(new MuxRequestTimeout(method, budget))), budget);
1057
+ timer.unref?.();
1058
+ readJsonLines(
1059
+ socket,
1060
+ (line) => {
1061
+ const responseId = line.id;
1062
+ if (typeof responseId !== "string") return;
1063
+ const error = asRecord(line.error);
1064
+ if (responseId !== id && !(responseId === "" && error)) return;
1065
+ if (error) {
1066
+ const code = typeof error.code === "string" ? error.code : void 0;
1067
+ const message = typeof error.message === "string" ? error.message : "no failure message was supplied by the pane host";
1068
+ finish(
1069
+ () => reject(
1070
+ new MuxError(muxErrorKind(code ?? "unknown"), message, {
1071
+ ...code === void 0 ? {} : { wireCode: code },
1072
+ method
1073
+ })
1074
+ )
1075
+ );
1076
+ return;
1077
+ }
1078
+ finish(() => resolve(line.result));
1079
+ },
1080
+ () => finish(() => reject(new MuxError("protocol", `mux ${method} response line was oversized`, { method })))
1081
+ );
1082
+ socket.on(
1083
+ "error",
1084
+ (error) => finish(() => reject(new MuxError("transport", `mux request ${method} failed: ${error.message}`, { method })))
1085
+ );
1086
+ socket.on(
1087
+ "close",
1088
+ () => finish(() => reject(new MuxError("transport", `mux request ${method} lost its connection`, { method })))
1089
+ );
1090
+ socket.write(`${JSON.stringify({ id, method, params: callParams })}
1091
+ `, (error) => {
1092
+ if (!error) return;
1093
+ finish(
1094
+ () => reject(new MuxError("transport", `mux request ${method} failed to write: ${error.message}`, { method }))
1095
+ );
1096
+ });
1097
+ });
1098
+ reachable = true;
1099
+ return result;
1100
+ } catch (error) {
1101
+ if (error instanceof MuxError && error.kind === "transport") reachable = false;
1102
+ throw error;
1103
+ }
1104
+ };
1105
+ const callObject = async (method, callParams, timeoutMs) => {
1106
+ const result = asRecord(await call(method, callParams, timeoutMs));
1107
+ if (!result) throw new MuxError("protocol", `mux ${method} returned a non-object result`, { method });
1108
+ return result;
1109
+ };
1110
+ const snapshot = async () => {
1111
+ const result = await callObject("session.snapshot", {});
1112
+ const parsed = readSnapshot(result.snapshot);
1113
+ snapshotCache = parsed;
1114
+ serverInfo = parsed.server;
1115
+ return parsed;
1116
+ };
1117
+ const subscribe = async (kinds, handler, subscribeOptions = {}) => {
1118
+ let closed = false;
1119
+ let socket = null;
1120
+ let retryTimer = null;
1121
+ let failures = 0;
1122
+ const scheduleReopen = () => {
1123
+ if (closed || disposed) return;
1124
+ failures += 1;
1125
+ const delay = delayFor(failures);
1126
+ retryTimer = setTimeout(() => {
1127
+ retryTimer = null;
1128
+ void open(true);
1129
+ }, delay);
1130
+ retryTimer.unref?.();
1131
+ };
1132
+ const open = async (isReconnect) => {
1133
+ if (closed || disposed) return;
1134
+ let stream;
1135
+ try {
1136
+ stream = await connectSocket(socketPath, connectTimeoutMs);
1137
+ } catch (error) {
1138
+ log("debug", `mux event stream connect failed: ${error instanceof Error ? error.message : String(error)}`);
1139
+ scheduleReopen();
1140
+ return;
1141
+ }
1142
+ if (closed || disposed) {
1143
+ stream.destroy();
1144
+ return;
1145
+ }
1146
+ socket = stream;
1147
+ let acknowledged = false;
1148
+ readJsonLines(
1149
+ stream,
1150
+ (line) => {
1151
+ if (!acknowledged && typeof line.id === "string") {
1152
+ acknowledged = true;
1153
+ failures = 0;
1154
+ if (isReconnect) {
1155
+ void snapshot().then(
1156
+ (fresh) => subscribeOptions.onResync?.(fresh),
1157
+ (error) => log("debug", `mux snapshot re-bootstrap failed: ${error instanceof Error ? error.message : String(error)}`)
1158
+ );
1159
+ }
1160
+ return;
1161
+ }
1162
+ const event = readEvent(line);
1163
+ if (event) handler(event);
1164
+ },
1165
+ () => stream.destroy()
1166
+ );
1167
+ const onGone = () => {
1168
+ if (socket !== stream) return;
1169
+ socket = null;
1170
+ stream.destroy();
1171
+ scheduleReopen();
1172
+ };
1173
+ stream.on("error", onGone);
1174
+ stream.on("close", onGone);
1175
+ stream.write(
1176
+ `${JSON.stringify({
1177
+ id: `clio-sub-${kinds.join("+")}`,
1178
+ method: "events.subscribe",
1179
+ params: { subscriptions: kinds.map((kind) => ({ type: kind })) }
1180
+ })}
1181
+ `
1182
+ );
1183
+ };
1184
+ await open(false);
1185
+ return {
1186
+ close() {
1187
+ closed = true;
1188
+ if (retryTimer) clearTimeout(retryTimer);
1189
+ retryTimer = null;
1190
+ socket?.destroy();
1191
+ socket = null;
1192
+ }
1193
+ };
1194
+ };
1195
+ return {
1196
+ socketPath,
1197
+ connected() {
1198
+ return reachable;
1199
+ },
1200
+ server() {
1201
+ return serverInfo;
1202
+ },
1203
+ cachedSnapshot() {
1204
+ return snapshotCache;
1205
+ },
1206
+ async ping(pingOptions = {}) {
1207
+ const result = await callObject("ping", {}, pingOptions.timeoutMs);
1208
+ const info = readServerInfo(result);
1209
+ serverInfo = info;
1210
+ return info;
1211
+ },
1212
+ snapshot,
1213
+ async paneCurrent(callerPaneId) {
1214
+ const result = await callObject("pane.current", params({ caller_pane_id: callerPaneId }));
1215
+ return readPane(result.pane);
1216
+ },
1217
+ async paneList(workspaceId) {
1218
+ const result = await callObject("pane.list", params({ workspace_id: workspaceId }));
1219
+ return readArray(result, "panes").map(readPane);
1220
+ },
1221
+ async paneSplit(request) {
1222
+ const result = await callObject(
1223
+ "pane.split",
1224
+ params({
1225
+ direction: request.direction,
1226
+ target_pane_id: request.targetPaneId,
1227
+ workspace_id: request.workspaceId,
1228
+ cwd: request.cwd,
1229
+ env: request.env,
1230
+ focus: request.focus ?? false,
1231
+ ratio: request.ratio
1232
+ })
1233
+ );
1234
+ return readPane(result.pane);
1235
+ },
1236
+ async paneRename(paneId, label) {
1237
+ await call("pane.rename", { pane_id: paneId, label });
1238
+ },
1239
+ async paneClose(paneId) {
1240
+ await call("pane.close", { pane_id: paneId });
1241
+ },
1242
+ async paneLayout(paneId) {
1243
+ const result = await callObject("pane.layout", params({ pane_id: paneId }));
1244
+ return readTabGeometry(result.layout);
1245
+ },
1246
+ async paneFocus(paneId) {
1247
+ await call("pane.focus", { pane_id: paneId });
1248
+ },
1249
+ async paneZoom(paneId, mode) {
1250
+ const result = await callObject("pane.zoom", { pane_id: paneId, mode });
1251
+ const zoom = asRecord(result.zoom);
1252
+ if (!zoom) throw new MuxError("protocol", "mux pane.zoom returned no zoom result");
1253
+ return { changed: zoom.changed === true, focusChanged: zoom.focus_changed === true };
1254
+ },
1255
+ async layoutExport(request = {}) {
1256
+ const result = await callObject("layout.export", params({ tab_id: request.tabId, pane_id: request.paneId }));
1257
+ return readLayoutTree(result.layout);
1258
+ },
1259
+ async layoutSetSplitRatio(request) {
1260
+ const result = await callObject(
1261
+ "layout.set_split_ratio",
1262
+ params({ tab_id: request.tabId, pane_id: request.paneId, path: [...request.path], ratio: request.ratio })
1263
+ );
1264
+ return readLayoutTree(result.layout);
1265
+ },
1266
+ async worktreeList(request = {}) {
1267
+ const result = await callObject("worktree.list", params({ workspace_id: request.workspaceId, cwd: request.cwd }));
1268
+ return { source: readWorktreeSource(result.source), worktrees: readArray(result, "worktrees").map(readWorktree) };
1269
+ },
1270
+ async worktreeCreate(request) {
1271
+ const result = await callObject(
1272
+ "worktree.create",
1273
+ params({
1274
+ workspace_id: request.workspaceId,
1275
+ cwd: request.cwd,
1276
+ branch: request.branch,
1277
+ base: request.base,
1278
+ path: request.path,
1279
+ label: request.label,
1280
+ focus: request.focus ?? false
1281
+ })
1282
+ );
1283
+ const workspace = asRecord(result.workspace);
1284
+ if (!workspace) throw new MuxError("protocol", "mux worktree.create returned no workspace");
1285
+ return {
1286
+ workspaceId: requireString(workspace, "workspace_id", "workspace"),
1287
+ tab: readTab(result.tab),
1288
+ rootPane: readPane(result.root_pane),
1289
+ worktree: readWorktree(result.worktree)
1290
+ };
1291
+ },
1292
+ async worktreeOpen(request) {
1293
+ const result = await callObject(
1294
+ "worktree.open",
1295
+ params({
1296
+ workspace_id: request.workspaceId,
1297
+ cwd: request.cwd,
1298
+ branch: request.branch,
1299
+ path: request.path,
1300
+ label: request.label,
1301
+ focus: request.focus ?? false
1302
+ })
1303
+ );
1304
+ const workspace = asRecord(result.workspace);
1305
+ if (!workspace) throw new MuxError("protocol", "mux worktree.open returned no workspace");
1306
+ return {
1307
+ workspaceId: requireString(workspace, "workspace_id", "workspace"),
1308
+ tab: readTab(result.tab),
1309
+ rootPane: readPane(result.root_pane),
1310
+ worktree: readWorktree(result.worktree),
1311
+ alreadyOpen: result.already_open === true
1312
+ };
1313
+ },
1314
+ async worktreeRemove(workspaceId, removeOptions = {}) {
1315
+ const result = await callObject("worktree.remove", {
1316
+ workspace_id: workspaceId,
1317
+ force: removeOptions.force ?? false
1318
+ });
1319
+ return {
1320
+ workspaceId: requireString(result, "workspace_id", "worktree.remove"),
1321
+ path: requireString(result, "path", "worktree.remove"),
1322
+ forced: result.forced === true
1323
+ };
1324
+ },
1325
+ async paneSendText(paneId, text) {
1326
+ await call("pane.send_text", { pane_id: paneId, text });
1327
+ },
1328
+ async paneReportAgent(request) {
1329
+ await call(
1330
+ "pane.report_agent",
1331
+ params({
1332
+ pane_id: request.paneId,
1333
+ source: request.source,
1334
+ agent: request.agent,
1335
+ state: request.state,
1336
+ message: request.message
1337
+ })
1338
+ );
1339
+ },
1340
+ async paneReportMetadata(request) {
1341
+ await call(
1342
+ "pane.report_metadata",
1343
+ params({
1344
+ pane_id: request.paneId,
1345
+ source: request.source,
1346
+ agent: request.agent,
1347
+ title: request.title,
1348
+ display_agent: request.displayAgent,
1349
+ tokens: request.tokens,
1350
+ state_labels: request.stateLabels,
1351
+ ttl_ms: request.ttlMs
1352
+ })
1353
+ );
1354
+ },
1355
+ async notificationShow(request) {
1356
+ const result = await callObject(
1357
+ "notification.show",
1358
+ params({ title: request.title, body: request.body, sound: request.sound })
1359
+ );
1360
+ return {
1361
+ shown: result.shown === true,
1362
+ reason: optionalString(result, "reason") ?? (result.shown === true ? "shown" : "unknown")
1363
+ };
1364
+ },
1365
+ subscribe,
1366
+ async close() {
1367
+ disposed = true;
1368
+ reachable = false;
1369
+ }
1370
+ };
1371
+ }
1372
+
1373
+ // src/domains/mux/detect.ts
1374
+ var PING_TIMEOUT_MS = 1e3;
1375
+ function herdrConfigDir(env) {
1376
+ const xdg = env.XDG_CONFIG_HOME;
1377
+ if (typeof xdg === "string" && xdg.length > 0) return join(xdg, "herdr");
1378
+ const home = typeof env.HOME === "string" && env.HOME.length > 0 ? env.HOME : homedir();
1379
+ return join(home, ".config", "herdr");
1380
+ }
1381
+ function resolveSocketCandidates(env) {
1382
+ const candidates = [];
1383
+ const explicit = env.HERDR_SOCKET_PATH;
1384
+ if (typeof explicit === "string" && explicit.length > 0) candidates.push(explicit);
1385
+ const configDir = herdrConfigDir(env);
1386
+ const session = env.HERDR_SESSION;
1387
+ if (typeof session === "string" && session.length > 0) {
1388
+ candidates.push(join(configDir, "sessions", session, "herdr.sock"));
1389
+ }
1390
+ candidates.push(join(configDir, "herdr.sock"));
1391
+ return [...new Set(candidates)];
1392
+ }
1393
+ function readSelfLocation(env) {
1394
+ const read = (key) => {
1395
+ const value = env[key];
1396
+ return typeof value === "string" && value.length > 0 ? value : null;
1397
+ };
1398
+ return {
1399
+ workspaceId: read("HERDR_WORKSPACE_ID"),
1400
+ tabId: read("HERDR_TAB_ID"),
1401
+ paneId: read("HERDR_PANE_ID")
1402
+ };
1403
+ }
1404
+ function none(reason, candidates = [], refused = false) {
1405
+ return {
1406
+ mode: "none",
1407
+ socketPath: null,
1408
+ server: null,
1409
+ self: { workspaceId: null, tabId: null, paneId: null },
1410
+ candidates,
1411
+ reason,
1412
+ refused
1413
+ };
1414
+ }
1415
+ async function detectMux(options = {}) {
1416
+ const env = options.env ?? process.env;
1417
+ const enabled = options.enabled ?? "auto";
1418
+ const log = options.log ?? (() => void 0);
1419
+ if (enabled === "off") {
1420
+ return { detection: none("panes are turned off"), client: null };
1421
+ }
1422
+ if (enabled === "embedded") {
1423
+ const reason = "embedded pane hosting is not implemented; use auto or guest";
1424
+ log("warning", reason);
1425
+ return { detection: none(reason, [], true), client: null };
1426
+ }
1427
+ if (env.HERDR_ENV !== "1") {
1428
+ return { detection: none("HERDR_ENV is not 1, so Clio is not running inside a pane host"), client: null };
1429
+ }
1430
+ const candidates = resolveSocketCandidates(env);
1431
+ const openClient = options.openClient ?? ((socketPath) => createMuxClient({ socketPath, log }));
1432
+ const pingTimeoutMs = options.pingTimeoutMs ?? PING_TIMEOUT_MS;
1433
+ for (const socketPath of candidates) {
1434
+ const client = openClient(socketPath);
1435
+ try {
1436
+ const server = await client.ping({ timeoutMs: pingTimeoutMs });
1437
+ return {
1438
+ detection: {
1439
+ mode: "guest",
1440
+ socketPath,
1441
+ server,
1442
+ self: readSelfLocation(env),
1443
+ candidates,
1444
+ reason: `guest mode on ${socketPath} (herdr ${server.version}, protocol ${server.protocol})`,
1445
+ refused: false
1446
+ },
1447
+ client
1448
+ };
1449
+ } catch (error) {
1450
+ log("debug", `mux ping ${socketPath} failed: ${error instanceof Error ? error.message : String(error)}`);
1451
+ await client.close().catch(() => void 0);
1452
+ }
1453
+ }
1454
+ return {
1455
+ detection: none(
1456
+ candidates.length > 0 ? `no herdr socket answered a ping: tried ${candidates.join(", ")}` : "no herdr socket candidates resolved",
1457
+ candidates
1458
+ ),
1459
+ client: null
1460
+ };
1461
+ }
1462
+
1463
+ // src/domains/mux/extension.ts
1464
+ async function createMuxBundle(_context, options = {}) {
1465
+ const log = options.log ?? (() => void 0);
1466
+ const { detection, client } = await detectMux({
1467
+ ...options.enabled ? { enabled: options.enabled } : {},
1468
+ ...options.env ? { env: options.env } : {},
1469
+ log
1470
+ });
1471
+ log(
1472
+ detection.refused ? "warning" : detection.mode === "none" ? "debug" : "info",
1473
+ detection.refused ? `panes refused: ${detection.reason}` : `mux mode ${detection.mode}: ${detection.reason}`
1474
+ );
1475
+ const runtime = createMuxRuntime({ detection, client, log });
1476
+ const extension = {
1477
+ async start() {
1478
+ await runtime.start();
1479
+ },
1480
+ async stop() {
1481
+ await runtime.stop();
1482
+ }
1483
+ };
1484
+ return { extension, contract: runtime.contract };
1485
+ }
1486
+
1487
+ // src/domains/mux/manifest.ts
1488
+ init_esm_shims();
1489
+ var MuxManifest = {
1490
+ name: "mux",
1491
+ dependsOn: []
1492
+ };
1493
+
1494
+ // src/domains/mux/viewer-command.ts
1495
+ init_esm_shims();
1496
+ import { join as join2 } from "node:path";
1497
+ function clioCliEntryPath() {
1498
+ return join2(resolvePackageRoot(), "dist/cli/index.js");
1499
+ }
1500
+ function watchViewerCommand(selectionPath, options = {}) {
1501
+ const layout = options.dirs === void 0 ? [] : [
1502
+ "--config-dir",
1503
+ options.dirs.config,
1504
+ "--data-dir",
1505
+ options.dirs.data,
1506
+ "--state-dir",
1507
+ options.dirs.state,
1508
+ "--cache-dir",
1509
+ options.dirs.cache
1510
+ ];
1511
+ return [
1512
+ options.execPath ?? process.execPath,
1513
+ options.entryPath ?? clioCliEntryPath(),
1514
+ "fleet",
1515
+ "view",
1516
+ ...layout,
1517
+ "--watch",
1518
+ selectionPath
1519
+ ];
1520
+ }
1521
+
1522
+ // src/domains/mux/yazi/event-stream.ts
1523
+ init_esm_shims();
1524
+ import { closeSync, openSync, readSync, statSync } from "node:fs";
1525
+ import { StringDecoder } from "node:string_decoder";
1526
+ var YAZI_STREAM_POLL_MS = 250;
1527
+ var YAZI_STREAM_MAX_BYTES = 1024 * 1024;
1528
+ var YAZI_PICK_EVENT = "clio-coder-pick";
1529
+ var LEGACY_YAZI_PICK_EVENT = "clio-pick";
1530
+ function record(value) {
1531
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1532
+ }
1533
+ function parseYaziEventLine(line) {
1534
+ const first = line.indexOf(",");
1535
+ const second = first < 0 ? -1 : line.indexOf(",", first + 1);
1536
+ const third = second < 0 ? -1 : line.indexOf(",", second + 1);
1537
+ if (first <= 0 || second <= first + 1 || third <= second + 1) return null;
1538
+ const kind = line.slice(0, first);
1539
+ if (kind !== "cd" && kind !== YAZI_PICK_EVENT && kind !== LEGACY_YAZI_PICK_EVENT) return null;
1540
+ const receiver = line.slice(first + 1, second);
1541
+ const sender = line.slice(second + 1, third);
1542
+ try {
1543
+ const body = JSON.parse(line.slice(third + 1));
1544
+ if (kind === "cd") {
1545
+ if (!record(body) || typeof body.url !== "string") return null;
1546
+ const tab = body.tab;
1547
+ if (typeof tab !== "number" && typeof tab !== "string") return null;
1548
+ return { kind, receiver, sender, tab: String(tab), cwd: body.url };
1549
+ }
1550
+ if (!Array.isArray(body) || !body.every((value) => typeof value === "string")) return null;
1551
+ return { kind: YAZI_PICK_EVENT, receiver, sender, values: body };
1552
+ } catch {
1553
+ return null;
1554
+ }
1555
+ }
1556
+ function createYaziEventStream(options) {
1557
+ const log = options.log ?? (() => void 0);
1558
+ const now = options.now ?? Date.now;
1559
+ const maxBytes = options.maxBytes ?? YAZI_STREAM_MAX_BYTES;
1560
+ let offset = 0;
1561
+ let carry = "";
1562
+ let decoder = new StringDecoder("utf8");
1563
+ let stopped = false;
1564
+ let polling = false;
1565
+ let interval = null;
1566
+ let settleDone = () => {
1567
+ };
1568
+ const done = new Promise((resolve) => {
1569
+ settleDone = resolve;
1570
+ });
1571
+ const state = {
1572
+ bytesRead: 0,
1573
+ linesRead: 0,
1574
+ malformedLines: 0,
1575
+ lastLineAt: null,
1576
+ stopReason: null
1577
+ };
1578
+ const stop = (reason = "stopped") => {
1579
+ if (stopped) return;
1580
+ stopped = true;
1581
+ state.stopReason = reason;
1582
+ if (interval) clearInterval(interval);
1583
+ interval = null;
1584
+ log(reason === "size-cap" ? "warning" : "debug", `yazi event stream stopped (${reason}): ${options.path}`);
1585
+ settleDone(reason);
1586
+ };
1587
+ const poll = async () => {
1588
+ if (stopped || polling) return;
1589
+ polling = true;
1590
+ try {
1591
+ if (!await options.isAlive()) {
1592
+ stop("pane-gone");
1593
+ return;
1594
+ }
1595
+ const stat = statSync(options.path, { throwIfNoEntry: false });
1596
+ if (!stat?.isFile()) {
1597
+ stop("file-missing");
1598
+ return;
1599
+ }
1600
+ if (stat.size > maxBytes) {
1601
+ stop("size-cap");
1602
+ return;
1603
+ }
1604
+ if (stat.size < offset) {
1605
+ offset = 0;
1606
+ carry = "";
1607
+ decoder = new StringDecoder("utf8");
1608
+ }
1609
+ const remaining = stat.size - offset;
1610
+ if (remaining <= 0) return;
1611
+ const bytes = Buffer.allocUnsafe(remaining);
1612
+ const fd = openSync(options.path, "r");
1613
+ let read = 0;
1614
+ try {
1615
+ read = readSync(fd, bytes, 0, remaining, offset);
1616
+ } finally {
1617
+ closeSync(fd);
1618
+ }
1619
+ offset += read;
1620
+ state.bytesRead += read;
1621
+ const complete = `${carry}${decoder.write(bytes.subarray(0, read))}`.split("\n");
1622
+ carry = complete.pop() ?? "";
1623
+ for (const raw of complete) {
1624
+ const line = raw.endsWith("\r") ? raw.slice(0, -1) : raw;
1625
+ if (line.length === 0) continue;
1626
+ const kind = line.slice(0, line.indexOf(","));
1627
+ if (kind !== "cd" && kind !== YAZI_PICK_EVENT && kind !== LEGACY_YAZI_PICK_EVENT) continue;
1628
+ const event = parseYaziEventLine(line);
1629
+ if (!event) {
1630
+ state.malformedLines += 1;
1631
+ continue;
1632
+ }
1633
+ state.linesRead += 1;
1634
+ state.lastLineAt = now();
1635
+ try {
1636
+ options.onEvent(event);
1637
+ } catch (error) {
1638
+ log("warning", `yazi event consumer failed: ${error instanceof Error ? error.message : String(error)}`);
1639
+ }
1640
+ }
1641
+ } finally {
1642
+ polling = false;
1643
+ }
1644
+ };
1645
+ if (options.autoStart !== false) {
1646
+ interval = setInterval(() => void poll(), options.pollMs ?? YAZI_STREAM_POLL_MS);
1647
+ interval.unref();
1648
+ void poll();
1649
+ }
1650
+ return { poll, stop, stats: () => ({ ...state }), done };
1651
+ }
1652
+
1653
+ // src/domains/mux/yazi/session.ts
1654
+ init_esm_shims();
1655
+ import { spawn } from "node:child_process";
1656
+ import { randomUUID } from "node:crypto";
1657
+ import { mkdirSync, readdirSync, readFileSync, rmSync, statSync as statSync2, writeFileSync } from "node:fs";
1658
+ import { join as join3 } from "node:path";
1659
+ function resolveYaziBinaries() {
1660
+ const entry = findPinnedTool("yazi");
1661
+ const status = entry ? toolStatus(entry) : null;
1662
+ return {
1663
+ yaziPath: status?.resolution.binaryPath ?? null,
1664
+ yaPath: resolveToolBinary("ya").binaryPath,
1665
+ missingYaziDetail: status ? describeResolution(status) : "yazi is not in the pinned tool registry"
1666
+ };
1667
+ }
1668
+ function runYa(file, args, env) {
1669
+ return new Promise((resolve) => {
1670
+ const child = spawn(file, args, { env: { ...env }, stdio: "ignore" });
1671
+ child.once("error", () => resolve(false));
1672
+ child.once("exit", (code) => resolve(code === 0));
1673
+ });
1674
+ }
1675
+ function readOptional(path) {
1676
+ try {
1677
+ return readFileSync(path, "utf8");
1678
+ } catch {
1679
+ return "";
1680
+ }
1681
+ }
1682
+ var YAZI_STALE_TRANSPORT_MS = 24 * 60 * 60 * 1e3;
1683
+ function sweepStaleTransportFiles(sessionsDir, now = Date.now()) {
1684
+ let removed = 0;
1685
+ let entries;
1686
+ try {
1687
+ entries = readdirSync(sessionsDir);
1688
+ } catch {
1689
+ return 0;
1690
+ }
1691
+ for (const name of entries) {
1692
+ if (!/\.(stream|chooser|cwd)$/u.test(name)) continue;
1693
+ const path = join3(sessionsDir, name);
1694
+ try {
1695
+ if (now - statSync2(path).mtimeMs > YAZI_STALE_TRANSPORT_MS) {
1696
+ rmSync(path, { force: true });
1697
+ removed += 1;
1698
+ }
1699
+ } catch {
1700
+ }
1701
+ }
1702
+ return removed;
1703
+ }
1704
+ async function createYaziSession(options) {
1705
+ const binaries = (options.resolveBinaries ?? resolveYaziBinaries)();
1706
+ if (!binaries.yaziPath) {
1707
+ return { status: "missing-binary", binary: "yazi", detail: binaries.missingYaziDetail };
1708
+ }
1709
+ if (options.profileMode === "managed" && !binaries.yaPath) {
1710
+ return {
1711
+ status: "missing-binary",
1712
+ binary: "ya",
1713
+ detail: "the Yazi helper `ya` is not available; install the complete pinned Yazi tool"
1714
+ };
1715
+ }
1716
+ const cacheDir = options.cacheDir ?? clioCacheDir();
1717
+ const sessionId = options.sessionId ?? randomUUID();
1718
+ const sessionsDir = join3(cacheDir, "yazi", "sessions");
1719
+ mkdirSync(sessionsDir, { recursive: true });
1720
+ sweepStaleTransportFiles(sessionsDir);
1721
+ const managedProfile = options.profileMode === "managed" ? (options.ensureProfile ?? ensureYaziProfile)({
1722
+ yaPath: binaries.yaPath,
1723
+ yaziPath: binaries.yaziPath,
1724
+ profileDir: yaziProfileDir(cacheDir)
1725
+ }) : null;
1726
+ if (options.profileMode === "managed" && !managedProfile) {
1727
+ return { status: "profile-error", reason: "Clio could not generate a valid managed Yazi profile" };
1728
+ }
1729
+ const streamPath = join3(sessionsDir, `${sessionId}.stream`);
1730
+ const chooserPath = join3(sessionsDir, `${sessionId}.chooser`);
1731
+ const cwdPath = join3(sessionsDir, `${sessionId}.cwd`);
1732
+ const token2 = options.mode === "companion" ? options.pickToken ?? randomUUID() : null;
1733
+ const env = {
1734
+ ...managedProfile ? { YAZI_CONFIG_HOME: managedProfile.dir } : {},
1735
+ ...token2 ? namingCompatibilityEnvironment("CLIO_CODER_YAZI_PICK_TOKEN", "CLIO_YAZI_PICK_TOKEN", token2) : {}
1736
+ };
1737
+ let argv;
1738
+ let stdoutPath;
1739
+ if (options.mode === "companion") {
1740
+ writeFileSync(streamPath, "");
1741
+ argv = [
1742
+ binaries.yaziPath,
1743
+ "--local-events",
1744
+ `cd,${YAZI_PICK_EVENT},${LEGACY_YAZI_PICK_EVENT}`,
1745
+ "--remote-events",
1746
+ `${YAZI_PICK_EVENT},${LEGACY_YAZI_PICK_EVENT}`
1747
+ ];
1748
+ stdoutPath = streamPath;
1749
+ } else {
1750
+ writeFileSync(chooserPath, "");
1751
+ writeFileSync(cwdPath, "");
1752
+ argv = [binaries.yaziPath, options.cwd, "--chooser-file", chooserPath, "--cwd-file", cwdPath];
1753
+ }
1754
+ const removeTransportFiles = () => {
1755
+ for (const path of [streamPath, chooserPath, cwdPath]) rmSync(path, { force: true });
1756
+ };
1757
+ const pane = await options.mux.openUtilityPane({
1758
+ argv,
1759
+ cwd: options.cwd,
1760
+ label: "files",
1761
+ title: "files",
1762
+ // The files dock: split down from the anchor at the configured share.
1763
+ // Degrades to a plain split inside the contract when the layout tier is
1764
+ // absent.
1765
+ dock: { slot: "files", ...options.dockShare === void 0 ? {} : { share: options.dockShare } },
1766
+ ...Object.keys(env).length > 0 ? { env } : {},
1767
+ ...stdoutPath ? { stdoutPath } : {}
1768
+ });
1769
+ if (!pane) {
1770
+ removeTransportFiles();
1771
+ return { status: "unavailable", reason: "the pane host refused to open the files pane" };
1772
+ }
1773
+ let paneCwd = options.cwd;
1774
+ let instanceId = null;
1775
+ let stream = null;
1776
+ let chooserTimer = null;
1777
+ let stopped = false;
1778
+ const alive = () => options.mux.list().some((record2) => record2.ref.paneId === pane.paneId);
1779
+ const stop = (reason) => {
1780
+ if (stopped) return;
1781
+ stopped = true;
1782
+ if (chooserTimer) clearInterval(chooserTimer);
1783
+ chooserTimer = null;
1784
+ options.onStopped?.(reason);
1785
+ removeTransportFiles();
1786
+ };
1787
+ if (options.mode === "companion") {
1788
+ stream = createYaziEventStream({
1789
+ path: streamPath,
1790
+ isAlive: alive,
1791
+ ...options.pollMs !== void 0 ? { pollMs: options.pollMs } : {},
1792
+ ...options.log ? { log: options.log } : {},
1793
+ onEvent: (event) => {
1794
+ if (event.kind === "cd") {
1795
+ paneCwd = event.cwd;
1796
+ instanceId = event.sender;
1797
+ }
1798
+ options.onEvent(event);
1799
+ }
1800
+ });
1801
+ void stream.done.then((reason) => {
1802
+ stop(reason);
1803
+ });
1804
+ } else {
1805
+ const pollChooser = () => {
1806
+ if (stopped || alive()) return;
1807
+ const raw = readOptional(chooserPath);
1808
+ const cwd = readOptional(cwdPath).trim() || paneCwd;
1809
+ paneCwd = cwd;
1810
+ const paths = raw.length === 0 ? [] : raw.split("\n").filter((path) => path.length > 0);
1811
+ options.onChooser({ paths, cwd });
1812
+ stop("pane-gone");
1813
+ };
1814
+ chooserTimer = setInterval(pollChooser, options.pollMs ?? YAZI_STREAM_POLL_MS);
1815
+ chooserTimer.unref();
1816
+ }
1817
+ const session = {
1818
+ mode: options.mode,
1819
+ pane,
1820
+ token: token2,
1821
+ profile: managedProfile,
1822
+ snapshot: () => ({
1823
+ mode: options.mode,
1824
+ paneId: pane.paneId,
1825
+ paneCwd,
1826
+ instanceId,
1827
+ lastLineAt: stream?.stats().lastLineAt ?? null,
1828
+ streamPath: options.mode === "companion" ? streamPath : null,
1829
+ chooserPath: options.mode === "chooser" ? chooserPath : null
1830
+ }),
1831
+ async pushCwd(cwd) {
1832
+ if (!instanceId || !binaries.yaPath) return false;
1833
+ const pushed = await (options.runYa ?? runYa)(binaries.yaPath, ["emit-to", instanceId, "cd", cwd], {
1834
+ ...process.env,
1835
+ ...managedProfile ? { YAZI_CONFIG_HOME: managedProfile.dir } : {}
1836
+ });
1837
+ return pushed;
1838
+ },
1839
+ async close() {
1840
+ stream?.stop();
1841
+ stop("stopped");
1842
+ await options.mux.closePane(pane.paneId);
1843
+ }
1844
+ };
1845
+ return { status: "opened", session };
1846
+ }
1847
+
1848
+ // src/domains/mux/index.ts
1849
+ function createMuxDomainModule(options) {
1850
+ return {
1851
+ manifest: MuxManifest,
1852
+ createExtension: (context) => createMuxBundle(context, options)
1853
+ };
1854
+ }
1855
+
1856
+ export {
1857
+ MUX_METHOD_MIN_PROTOCOL,
1858
+ resolveSocketCandidates,
1859
+ detectMux,
1860
+ watchViewerCommand,
1861
+ resolveYaziBinaries,
1862
+ createYaziSession,
1863
+ createMuxDomainModule
1864
+ };
1865
+ //# sourceMappingURL=chunk-PXRCXGLK.js.map