@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,2796 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ CONTEXT_INIT_FLAG_TABLE,
4
+ applyInitImplications,
5
+ validateInitOptions
6
+ } from "./chunk-DGC6X6XR.js";
7
+ import {
8
+ isExtensionCommandToken
9
+ } from "./chunk-RFCKPS2V.js";
10
+ import {
11
+ PANES_PRESETS,
12
+ PANES_PRESET_IDS,
13
+ resolvePanesPresetId
14
+ } from "./chunk-QUIJZSDW.js";
15
+ import {
16
+ mcpCommandOutput
17
+ } from "./chunk-OJXOA6YU.js";
18
+ import {
19
+ acceptanceFromTaskFlags,
20
+ formatUserTaskHandoff
21
+ } from "./chunk-ISHUS7HC.js";
22
+ import {
23
+ createWorkerProgressFold
24
+ } from "./chunk-HOEDA42N.js";
25
+ import {
26
+ SETTINGS_SECTIONS,
27
+ resolveSettingsSection
28
+ } from "./chunk-LJRBX7QR.js";
29
+ import {
30
+ AdmissionCanceledError,
31
+ WORKER_OUTPUT_MAX_BYTES,
32
+ activeDecisionRefs,
33
+ decisionRationale
34
+ } from "./chunk-U5QU5ZOD.js";
35
+ import {
36
+ SKILL_SURFACE_CLEAR_ARG,
37
+ parseSkillCommand
38
+ } from "./chunk-LAR7DX5E.js";
39
+ import {
40
+ isLibraryKind
41
+ } from "./chunk-NVPXXW2H.js";
42
+ import {
43
+ TOOL_PROFILE_NAMES,
44
+ isToolProfileName
45
+ } from "./chunk-XZWSP67B.js";
46
+ import {
47
+ requestExecutionRole
48
+ } from "./chunk-BRCOSE7O.js";
49
+ import {
50
+ truncateUtf8
51
+ } from "./chunk-MYI32N4R.js";
52
+ import {
53
+ resolveModelReference
54
+ } from "./chunk-EYTLV3W3.js";
55
+ import {
56
+ parseCouncilReport,
57
+ parseOracleResult
58
+ } from "./chunk-LNOXCGN2.js";
59
+ import {
60
+ THINKING_LEVELS
61
+ } from "./chunk-QZTTRSJE.js";
62
+ import {
63
+ BusChannels
64
+ } from "./chunk-PS6JAWJZ.js";
65
+ import {
66
+ init_esm_shims
67
+ } from "./chunk-ECBHH7LU.js";
68
+
69
+ // src/interactive/slash-commands.ts
70
+ init_esm_shims();
71
+
72
+ // src/interactive/council.ts
73
+ init_esm_shims();
74
+ var COUNCIL_DEFAULT_ROSTER = "default";
75
+ var COUNCIL_SYNTHESIS_MODES = ["judge", "vote", "none"];
76
+ var COUNCIL_MAX_ROUNDS = 3;
77
+ var COUNCIL_SYNTHESIS_LABEL = "synthesis";
78
+ function isCouncilSynthesisMode(value) {
79
+ return COUNCIL_SYNTHESIS_MODES.some((mode) => mode === value);
80
+ }
81
+ var COUNCIL_NO_ROSTER_NOTICE = `/council needs a roster. Declare one under workers.rosters in settings.yaml, for example workers.rosters.${COUNCIL_DEFAULT_ROSTER} with two to five members, each with a label and a target, then run /council <task> or name another roster with --roster <name>.`;
82
+ function knownRosterNames(rosters) {
83
+ return Object.keys(rosters).sort();
84
+ }
85
+ function resolveCouncilRoster(requested, rosters) {
86
+ const known = knownRosterNames(rosters);
87
+ const wanted = requested?.trim();
88
+ if (wanted !== void 0 && wanted.length > 0) {
89
+ if (Object.hasOwn(rosters, wanted)) return { ok: true, roster: wanted };
90
+ const names = known.length === 0 ? "none are configured" : `configured rosters: ${known.join(", ")}`;
91
+ return { ok: false, reason: `no roster named "${wanted}" in workers.rosters (${names})` };
92
+ }
93
+ if (Object.hasOwn(rosters, COUNCIL_DEFAULT_ROSTER)) return { ok: true, roster: COUNCIL_DEFAULT_ROSTER };
94
+ return { ok: false, reason: COUNCIL_NO_ROSTER_NOTICE };
95
+ }
96
+ function buildCouncilDispatchArgs(task, roster, options = {}) {
97
+ return {
98
+ mode: "council",
99
+ task,
100
+ roster,
101
+ ...options.rounds !== void 0 ? { rounds: options.rounds } : {},
102
+ ...options.synthesis !== void 0 ? { synthesis: options.synthesis } : {}
103
+ };
104
+ }
105
+
106
+ // src/interactive/oracle.ts
107
+ init_esm_shims();
108
+ var ORACLE_AGENT_ID = "oracle";
109
+ var ORACLE_DIGEST_MAX_BYTES = 12 * 1024;
110
+ var ORACLE_DECISIONS_MAX_BYTES = 5120;
111
+ var ORACLE_TASKS_MAX_BYTES = 3072;
112
+ var ORACLE_COMPACTION_MAX_BYTES = 2048;
113
+ var ORACLE_QUESTION_MAX_BYTES = 1536;
114
+ var ORACLE_DECISIONS_MAX_ROWS = 24;
115
+ var ORACLE_TASKS_MAX_ROWS = 24;
116
+ var ORACLE_TRUNCATION_MARKER = "\n[truncated]";
117
+ var ORACLE_NO_DECISIONS = "(no settled decisions on this branch)";
118
+ var ORACLE_NO_TASKS = "(no open tasks on the board)";
119
+ function byteLength(text) {
120
+ return Buffer.byteLength(text, "utf8");
121
+ }
122
+ function clamp(text, maxBytes) {
123
+ if (byteLength(text) <= maxBytes) return { text, truncated: false };
124
+ const room = Math.max(0, maxBytes - byteLength(ORACLE_TRUNCATION_MARKER));
125
+ const buffer = Buffer.from(text, "utf8");
126
+ let cut = Math.min(room, buffer.byteLength);
127
+ while (cut > 0) {
128
+ const next = buffer[cut];
129
+ if (next === void 0 || (next & 192) !== 128) break;
130
+ cut -= 1;
131
+ }
132
+ return { text: `${buffer.subarray(0, cut).toString("utf8")}${ORACLE_TRUNCATION_MARKER}`, truncated: true };
133
+ }
134
+ function decisionLine(decision) {
135
+ const argument = decisionRationale(decision);
136
+ const details = argument ? `
137
+ ${argument}` : "";
138
+ const label = decision.label ? ` (${decision.label})` : "";
139
+ if (decision.status === "superseded") {
140
+ const correction = decision.correction ? `; corrected to ${decision.correction}` : "";
141
+ return `- ${decision.key}${label}: ${decision.value} [superseded${correction}]${details}`;
142
+ }
143
+ return `- ${decision.key}${label}: ${decision.value}${details}`;
144
+ }
145
+ function taskLine(task) {
146
+ return `- ${task.id} [${task.status}] ${task.title}`;
147
+ }
148
+ function isOpenTask(task) {
149
+ return task.status === "pending" || task.status === "active";
150
+ }
151
+ function packOracleDigest(sources) {
152
+ let truncated = false;
153
+ const decisionRows = sources.decisions.flatMap((entry) => entry.decisions.map(decisionLine)).slice(0, ORACLE_DECISIONS_MAX_ROWS);
154
+ if (decisionRows.length < sources.decisions.reduce((total, entry) => total + entry.decisions.length, 0)) {
155
+ truncated = true;
156
+ }
157
+ const decisions = clamp(decisionRows.join("\n") || ORACLE_NO_DECISIONS, ORACLE_DECISIONS_MAX_BYTES);
158
+ truncated = truncated || decisions.truncated;
159
+ const openTasks = sources.tasks.filter(isOpenTask);
160
+ const taskRows = openTasks.map(taskLine).slice(0, ORACLE_TASKS_MAX_ROWS);
161
+ if (taskRows.length < openTasks.length) truncated = true;
162
+ const tasks = clamp(taskRows.join("\n") || ORACLE_NO_TASKS, ORACLE_TASKS_MAX_BYTES);
163
+ truncated = truncated || tasks.truncated;
164
+ const summaryText = sources.compactionSummary?.trim() ?? "";
165
+ const summary = clamp(summaryText, ORACLE_COMPACTION_MAX_BYTES);
166
+ truncated = truncated || summary.truncated;
167
+ const question = clamp(sources.question.trim(), ORACLE_QUESTION_MAX_BYTES);
168
+ truncated = truncated || question.truncated;
169
+ const sections = [
170
+ "## Settled decisions",
171
+ decisions.text,
172
+ "",
173
+ "## Open tasks",
174
+ tasks.text,
175
+ "",
176
+ "## Last compaction summary",
177
+ summary.text.length > 0 ? summary.text : "(this session has not compacted)",
178
+ "",
179
+ "## Question",
180
+ question.text
181
+ ];
182
+ const whole = clamp(sections.join("\n"), ORACLE_DIGEST_MAX_BYTES);
183
+ return { text: whole.text, truncated: truncated || whole.truncated };
184
+ }
185
+ var ORACLE_TASK = "Answer the question in the briefing's Question section. Check it against the settled decisions first, then return the strongest challenge you can support and the evidence that would change your mind.";
186
+ function formatOracleAnswer(result) {
187
+ const cited = result.citedDecisions.length === 0 ? "Cited decisions: none bear on this question." : `Cited decisions: ${result.citedDecisions.join(", ")}`;
188
+ return [
189
+ `Verdict: ${result.verdict}`,
190
+ "",
191
+ `Strongest challenge: ${result.challenge}`,
192
+ "",
193
+ `What would change its mind: ${result.changesMyMind}`,
194
+ "",
195
+ cited
196
+ ].join("\n");
197
+ }
198
+
199
+ // src/interactive/prompt-source-label.ts
200
+ init_esm_shims();
201
+ function promptSourceLabel(sourceInfo) {
202
+ const source = sourceInfo.source;
203
+ if (source === void 0) return `${sourceInfo.scope} prompts`;
204
+ const plugin = /^plugin:(?:[^:]+):(.+)$/u.exec(source);
205
+ if (plugin?.[1]) return `plugin ${plugin[1]}`;
206
+ if (source === "config") return "user prompts";
207
+ if (source === "project") return "project prompts";
208
+ if (source === "library") return "library";
209
+ const foreign = /^([a-z0-9-]+)-(user|project)$/u.exec(source);
210
+ if (foreign?.[1] && foreign[2]) return `${foreign[1]} ${foreign[2]} prompts`;
211
+ return source;
212
+ }
213
+
214
+ // src/interactive/slash-spec.ts
215
+ init_esm_shims();
216
+ var COMPLETION_SLOT_NAMES = [
217
+ "agents",
218
+ "agent-profiles",
219
+ "worker-runtimes",
220
+ "targets",
221
+ "models",
222
+ "capabilities",
223
+ "external-agents",
224
+ "rosters",
225
+ "shareable-runs",
226
+ "skills",
227
+ "fleet-contracts",
228
+ "fleet-vars",
229
+ "fleet-var-values",
230
+ "tasks",
231
+ "context-refs",
232
+ "receipts",
233
+ "pane-runs-agents",
234
+ "pane-presets",
235
+ "pane-targets",
236
+ "thinking-levels",
237
+ "settings-areas",
238
+ "settings-groups",
239
+ "help-queries",
240
+ "paths"
241
+ ];
242
+ function getFlagValuePlaceholder(flag) {
243
+ if (flag.valueName) return flag.valueName;
244
+ if (flag.values && flag.values.length > 0) {
245
+ return flag.values.join("|");
246
+ }
247
+ return flag.name.replace(/^--/, "");
248
+ }
249
+ function renderArgsSpec(spec) {
250
+ const parts = [];
251
+ if (spec.flags) {
252
+ for (const flag of spec.flags) {
253
+ if (flag.takesValue) {
254
+ const placeholder = getFlagValuePlaceholder(flag);
255
+ parts.push(`[${flag.name} <${placeholder}>]`);
256
+ } else {
257
+ parts.push(`[${flag.name}]`);
258
+ }
259
+ }
260
+ }
261
+ if (spec.positionals) {
262
+ for (const pos of spec.positionals) {
263
+ if (pos.required) {
264
+ parts.push(`<${pos.name}>`);
265
+ } else {
266
+ parts.push(`[${pos.name}]`);
267
+ }
268
+ }
269
+ }
270
+ return parts.join(" ");
271
+ }
272
+ function usageLine(entry, subcommand) {
273
+ const prefix = `/${entry.name}`;
274
+ const argsSpec = entry.args ?? {};
275
+ if (subcommand && argsSpec.subcommands?.[subcommand]) {
276
+ const subSpec = argsSpec.subcommands[subcommand];
277
+ const subStr = renderArgsSpec(subSpec);
278
+ return `
279
+ usage: ${prefix} ${subcommand}${subStr ? ` ${subStr}` : ""}
280
+ `;
281
+ }
282
+ if (argsSpec.subcommands) {
283
+ const subParts = [];
284
+ const rootSpec = {
285
+ ...argsSpec.flags ? { flags: argsSpec.flags } : {},
286
+ ...argsSpec.positionals ? { positionals: argsSpec.positionals } : {}
287
+ };
288
+ const rootStr = renderArgsSpec(rootSpec);
289
+ if (rootStr.length > 0) subParts.push(`${prefix} ${rootStr}`);
290
+ for (const [subName, subSpec] of Object.entries(argsSpec.subcommands)) {
291
+ const subStr = renderArgsSpec(subSpec);
292
+ subParts.push(`${prefix} ${subName}${subStr ? ` ${subStr}` : ""}`);
293
+ }
294
+ return `
295
+ usage: ${subParts.join(" | ")}
296
+ `;
297
+ }
298
+ const argsStr = renderArgsSpec(argsSpec);
299
+ return `
300
+ usage: ${prefix}${argsStr ? ` ${argsStr}` : ""}
301
+ `;
302
+ }
303
+ function parseArgs(spec, argsLine) {
304
+ const flags = /* @__PURE__ */ new Map();
305
+ const flagValues = /* @__PURE__ */ new Map();
306
+ const positionals = [];
307
+ let subcommand;
308
+ let rest;
309
+ let currentSpec = spec;
310
+ let index = 0;
311
+ const skipWhitespace = () => {
312
+ while (index < argsLine.length) {
313
+ const char = argsLine[index];
314
+ if (char && /\s/.test(char)) {
315
+ index++;
316
+ } else {
317
+ break;
318
+ }
319
+ }
320
+ };
321
+ skipWhitespace();
322
+ if (currentSpec.subcommands && index < argsLine.length) {
323
+ const start = index;
324
+ while (index < argsLine.length) {
325
+ const char = argsLine[index];
326
+ if (char && !/\s/.test(char)) {
327
+ index++;
328
+ } else {
329
+ break;
330
+ }
331
+ }
332
+ const sub = argsLine.slice(start, index);
333
+ if (currentSpec.subcommands[sub]) {
334
+ subcommand = sub;
335
+ currentSpec = currentSpec.subcommands[sub];
336
+ skipWhitespace();
337
+ } else {
338
+ index = start;
339
+ }
340
+ }
341
+ const flagSpecs = currentSpec.flags ?? [];
342
+ const positionalSpecs = currentSpec.positionals ?? [];
343
+ let positionalIndex = 0;
344
+ const readToken = () => {
345
+ const tokenStart = index;
346
+ let token = "";
347
+ let quote = null;
348
+ while (index < argsLine.length) {
349
+ const char = argsLine[index] ?? "";
350
+ if (quote !== null) {
351
+ if (char === quote) quote = null;
352
+ else token += char;
353
+ index++;
354
+ continue;
355
+ }
356
+ if (char === '"' || char === "'") {
357
+ quote = char;
358
+ index++;
359
+ continue;
360
+ }
361
+ if (/\s/.test(char)) break;
362
+ token += char;
363
+ index++;
364
+ }
365
+ if (index === tokenStart) return null;
366
+ return { token };
367
+ };
368
+ const consumeFlag = (matchedFlagSpec, token) => {
369
+ const flagName = matchedFlagSpec.name;
370
+ if (matchedFlagSpec.takesValue) {
371
+ skipWhitespace();
372
+ if (index >= argsLine.length) return `Flag ${token} requires a value`;
373
+ const value = readToken();
374
+ if (value === null) return `Flag ${token} requires a value`;
375
+ const val = value.token;
376
+ if (matchedFlagSpec.values && !matchedFlagSpec.values.includes(val)) {
377
+ return `Invalid value for ${flagName}: ${val}`;
378
+ }
379
+ if (matchedFlagSpec.repeatable) {
380
+ const next = [...flagValues.get(flagName) ?? [], val];
381
+ flagValues.set(flagName, next);
382
+ flags.set(flagName, next.join(" "));
383
+ } else {
384
+ flagValues.set(flagName, [val]);
385
+ flags.set(flagName, val);
386
+ }
387
+ return null;
388
+ }
389
+ flags.set(flagName, true);
390
+ return null;
391
+ };
392
+ const errorResult = (error) => ({
393
+ flags,
394
+ flagValues,
395
+ positionals,
396
+ ...subcommand !== void 0 ? { subcommand } : {},
397
+ error
398
+ });
399
+ while (index < argsLine.length) {
400
+ const currentPositionalSpec = positionalSpecs[positionalIndex];
401
+ if (currentPositionalSpec?.rest) {
402
+ if (currentSpec.parseFlagsInRest) {
403
+ const text = [];
404
+ while (index < argsLine.length) {
405
+ const start = index;
406
+ const read2 = readToken();
407
+ if (!read2) break;
408
+ if (read2.token === "--") {
409
+ text.push(argsLine.slice(index).trim());
410
+ index = argsLine.length;
411
+ break;
412
+ }
413
+ const flag = flagSpecs.find((item) => item.name === read2.token);
414
+ if (flag) {
415
+ const error = consumeFlag(flag, read2.token);
416
+ if (error) return errorResult(error);
417
+ } else if (read2.token.startsWith("--")) return errorResult(`Unknown flag: ${read2.token}`);
418
+ else text.push(argsLine.slice(start, index));
419
+ skipWhitespace();
420
+ }
421
+ const restVal2 = text.join(" ").trim();
422
+ if (!restVal2) return errorResult(`Missing required argument: ${currentPositionalSpec.name}`);
423
+ positionals.push(restVal2);
424
+ rest = restVal2;
425
+ positionalIndex++;
426
+ break;
427
+ }
428
+ if (currentSpec.parseFlagsBeforeRest) {
429
+ while (index < argsLine.length) {
430
+ const tokenStart = index;
431
+ const read2 = readToken();
432
+ if (read2 === null) break;
433
+ const matchedFlagSpec2 = flagSpecs.find((f) => f.name === read2.token);
434
+ if (!matchedFlagSpec2) {
435
+ index = tokenStart;
436
+ break;
437
+ }
438
+ const error = consumeFlag(matchedFlagSpec2, read2.token);
439
+ if (error) return errorResult(error);
440
+ skipWhitespace();
441
+ }
442
+ }
443
+ const restVal = argsLine.slice(index).trim();
444
+ if (restVal.length > 0) {
445
+ positionals.push(restVal);
446
+ rest = restVal;
447
+ }
448
+ positionalIndex++;
449
+ index = argsLine.length;
450
+ break;
451
+ }
452
+ const read = readToken();
453
+ if (read === null) break;
454
+ const token = read.token;
455
+ let isFlag = false;
456
+ let matchedFlagSpec;
457
+ if (token.startsWith("--")) {
458
+ matchedFlagSpec = flagSpecs.find((f) => f.name === token);
459
+ if (matchedFlagSpec) {
460
+ isFlag = true;
461
+ } else {
462
+ return errorResult(`Unknown flag: ${token}`);
463
+ }
464
+ }
465
+ if (isFlag && matchedFlagSpec) {
466
+ const error = consumeFlag(matchedFlagSpec, token);
467
+ if (error) return errorResult(error);
468
+ } else {
469
+ if (positionalIndex < positionalSpecs.length) {
470
+ positionals.push(token);
471
+ positionalIndex++;
472
+ } else {
473
+ return errorResult(`Unexpected argument: ${token}`);
474
+ }
475
+ }
476
+ skipWhitespace();
477
+ }
478
+ for (let idx = positionalIndex; idx < positionalSpecs.length; idx++) {
479
+ const spec2 = positionalSpecs[idx];
480
+ if (spec2?.required) {
481
+ return {
482
+ flags,
483
+ flagValues,
484
+ positionals,
485
+ ...subcommand !== void 0 ? { subcommand } : {},
486
+ error: `Missing required argument: ${spec2.name}`
487
+ };
488
+ }
489
+ }
490
+ return {
491
+ flags,
492
+ flagValues,
493
+ positionals,
494
+ ...subcommand !== void 0 ? { subcommand } : {},
495
+ ...rest !== void 0 ? { rest } : {}
496
+ };
497
+ }
498
+ function completionTokens(text) {
499
+ const tokens = [];
500
+ let index = 0;
501
+ while (index < text.length) {
502
+ while (index < text.length && /\s/.test(text[index] ?? "")) index++;
503
+ if (index >= text.length) break;
504
+ const start = index;
505
+ let quote;
506
+ if (text[index] === '"' || text[index] === "'") {
507
+ quote = text[index];
508
+ index++;
509
+ }
510
+ const contentStart = index;
511
+ let value = "";
512
+ while (index < text.length) {
513
+ const char = text[index] ?? "";
514
+ if (quote) {
515
+ if (char === quote) break;
516
+ } else if (/\s/.test(char)) {
517
+ break;
518
+ } else if (char === '"' || char === "'") {
519
+ const embedded = char;
520
+ index++;
521
+ while (index < text.length && text[index] !== embedded) value += text[index++] ?? "";
522
+ if (text[index] === embedded) index++;
523
+ continue;
524
+ }
525
+ value += char;
526
+ index++;
527
+ }
528
+ const contentEnd = index;
529
+ if (quote && text[index] === quote) index++;
530
+ tokens.push({ value, start, end: index, contentStart, contentEnd, ...quote ? { quote } : {} });
531
+ }
532
+ return tokens;
533
+ }
534
+ function tokenAtCursor(text, cursor) {
535
+ const safeCursor = Math.max(0, Math.min(cursor, text.length));
536
+ const tokens = completionTokens(text);
537
+ const containing = tokens.find((token) => safeCursor >= token.start && safeCursor <= token.end);
538
+ if (containing) {
539
+ return { current: containing, completed: tokens.filter((token) => token.end <= containing.start) };
540
+ }
541
+ return {
542
+ current: { value: "", start: safeCursor, end: safeCursor, contentStart: safeCursor, contentEnd: safeCursor },
543
+ completed: tokens.filter((token) => token.end <= safeCursor)
544
+ };
545
+ }
546
+ function walkCompletedTokens(spec, tokens) {
547
+ const flagSpecs = spec.flags ?? [];
548
+ const positionalSpecs = spec.positionals ?? [];
549
+ const walk = { usedFlags: /* @__PURE__ */ new Set(), awaitingValue: null, positionalIndex: 0, restBegun: false };
550
+ for (const token of tokens) {
551
+ if (walk.awaitingValue) {
552
+ walk.awaitingValue = null;
553
+ continue;
554
+ }
555
+ const atRest = positionalSpecs[walk.positionalIndex]?.rest === true;
556
+ const flagsParseable = !atRest || spec.parseFlagsBeforeRest === true;
557
+ const matched = flagsParseable && token.startsWith("--") ? flagSpecs.find((flag) => flag.name === token) : void 0;
558
+ if (matched) {
559
+ walk.usedFlags.add(matched.name);
560
+ if (matched.takesValue) walk.awaitingValue = matched;
561
+ continue;
562
+ }
563
+ if (atRest) {
564
+ walk.restBegun = true;
565
+ break;
566
+ }
567
+ walk.positionalIndex += 1;
568
+ }
569
+ return walk;
570
+ }
571
+ function flagCompletions(spec, walk, current) {
572
+ const available = (spec.flags ?? []).filter((flag) => flag.repeatable === true || !walk.usedFlags.has(flag.name));
573
+ const lower = current.toLowerCase();
574
+ const rows = available.filter((flag) => flag.name.toLowerCase().startsWith(lower)).map((flag) => ({ flag, name: flag.name }));
575
+ return rows.map(({ flag, name }) => ({
576
+ token: name,
577
+ ...flag.takesValue ? { hint: `<${getFlagValuePlaceholder(flag)}>` } : {},
578
+ hasNextSlot: flag.takesValue === true
579
+ }));
580
+ }
581
+ function completeArgs(spec, argumentText, cursor = argumentText.length) {
582
+ const { current: currentToken, completed: completedTokens } = tokenAtCursor(argumentText, cursor);
583
+ const current = currentToken.value.slice(0, Math.max(0, cursor - currentToken.contentStart));
584
+ const completed = completedTokens.map((token) => token.value);
585
+ const range = {
586
+ tokenStart: currentToken.contentStart,
587
+ tokenEnd: currentToken.contentEnd,
588
+ ...currentToken.quote ? { quote: currentToken.quote } : {}
589
+ };
590
+ const completions = [];
591
+ let active = spec;
592
+ let walkTokens = completed;
593
+ let submenu;
594
+ if (spec.subcommands) {
595
+ const first = completed[0];
596
+ if (first === void 0) {
597
+ for (const [name, subSpec] of Object.entries(spec.subcommands)) {
598
+ if (!name.toLowerCase().startsWith(current.toLowerCase())) continue;
599
+ const hint = renderArgsSpec(subSpec);
600
+ completions.push({
601
+ token: name,
602
+ ...hint.length > 0 ? { hint } : {},
603
+ hasNextSlot: hint.length > 0
604
+ });
605
+ }
606
+ submenu = { parent: "", canGoBack: true };
607
+ } else if (spec.subcommands[first]) {
608
+ active = spec.subcommands[first];
609
+ walkTokens = completed.slice(1);
610
+ }
611
+ }
612
+ const walk = walkCompletedTokens(active, walkTokens);
613
+ if (walk.restBegun) {
614
+ return completions.length > 0 ? { completions, ...range, ...submenu ? { submenu } : {} } : null;
615
+ }
616
+ if (walk.awaitingValue) {
617
+ for (const value of walk.awaitingValue.values ?? []) {
618
+ if (value.toLowerCase().startsWith(current.toLowerCase())) completions.push({ token: value, hasNextSlot: true });
619
+ }
620
+ if (walk.awaitingValue.completionSlot) {
621
+ completions.push({ token: current, completionSlot: walk.awaitingValue.completionSlot, hasNextSlot: true });
622
+ }
623
+ return completions.length > 0 ? { completions, ...range, ...submenu ? { submenu } : {} } : null;
624
+ }
625
+ const atRest = (active.positionals ?? [])[walk.positionalIndex]?.rest === true;
626
+ const positional = (active.positionals ?? [])[walk.positionalIndex];
627
+ for (const value of positional?.values ?? []) {
628
+ if (value.toLowerCase().startsWith(current.toLowerCase())) {
629
+ completions.push({ token: value, hasNextSlot: walk.positionalIndex + 1 < (active.positionals?.length ?? 0) });
630
+ }
631
+ }
632
+ if (positional?.completionSlot && !current.startsWith("-")) {
633
+ completions.push({
634
+ token: current,
635
+ completionSlot: positional.completionSlot,
636
+ hasNextSlot: walk.positionalIndex + 1 < (active.positionals?.length ?? 0)
637
+ });
638
+ }
639
+ const flagsParseable = !atRest || active.parseFlagsBeforeRest === true;
640
+ if (flagsParseable && (current.length === 0 || current.startsWith("-"))) {
641
+ completions.push(...flagCompletions(active, walk, current));
642
+ }
643
+ return completions.length > 0 ? { completions, ...range, ...submenu ? { submenu } : {} } : null;
644
+ }
645
+ function matchFromSpec(entry, trimmed) {
646
+ const matchedPrefix = `/${entry.name}`;
647
+ if (trimmed !== matchedPrefix && !trimmed.startsWith(`${matchedPrefix} `)) return null;
648
+ const argsLine = trimmed.slice(matchedPrefix.length);
649
+ const parsed = parseArgs(entry.args ?? {}, argsLine);
650
+ if (entry.fromArgs) {
651
+ return entry.fromArgs(parsed, trimmed);
652
+ }
653
+ return null;
654
+ }
655
+
656
+ // src/interactive/worker-share.ts
657
+ init_esm_shims();
658
+
659
+ // src/interactive/worker-stream.ts
660
+ init_esm_shims();
661
+ function isHelperRun(run) {
662
+ return run.agentAudience === "shadow" || run.agentAudience === "internal";
663
+ }
664
+ function workerAskedByModel(state) {
665
+ return state.parentToolCallId !== void 0 || state.origin === "agent";
666
+ }
667
+ function nonEmptyString(value) {
668
+ return typeof value === "string" && value.trim().length > 0 ? value : void 0;
669
+ }
670
+ function finiteNumber(value) {
671
+ return typeof value === "number" && Number.isFinite(value) ? value : void 0;
672
+ }
673
+ function workerRuntimeKind(runtimeKind, runtimeId) {
674
+ if (runtimeKind === "acp-delegation") return "acp";
675
+ if (runtimeId === "claude-code") return "claude-code";
676
+ if (runtimeId === "claude-sdk") return "claude-sdk";
677
+ return "clio";
678
+ }
679
+ function runtimeIdentity(payload) {
680
+ const kind = workerRuntimeKind(payload.runtimeKind, payload.runtimeId);
681
+ if (kind === "acp") {
682
+ const peerId = nonEmptyString(payload.agentId);
683
+ return { kind, ...peerId !== void 0 ? { peerId } : {} };
684
+ }
685
+ const targetId = nonEmptyString(payload.targetId);
686
+ const wireModelId = nonEmptyString(payload.wireModelId);
687
+ return {
688
+ kind,
689
+ ...targetId !== void 0 ? { targetId } : {},
690
+ ...wireModelId !== void 0 ? { wireModelId } : {}
691
+ };
692
+ }
693
+ function workerTargetLabel(runtime) {
694
+ if (runtime.kind === "acp") return runtime.peerId ?? "acp";
695
+ if (runtime.targetId !== void 0 && runtime.wireModelId !== void 0) {
696
+ return `${runtime.targetId}/${runtime.wireModelId}`;
697
+ }
698
+ return runtime.targetId ?? runtime.wireModelId ?? "unknown";
699
+ }
700
+ function terminalFacts(payload) {
701
+ const detail = nonEmptyString(payload.outcomeDetail);
702
+ const tokenCount = finiteNumber(payload.tokenCount);
703
+ const durationMs = finiteNumber(payload.durationMs);
704
+ const exitCode = finiteNumber(payload.exitCode);
705
+ return {
706
+ outcome: payload.outcome,
707
+ ...payload.outcomeCode !== null && payload.outcomeCode !== void 0 ? { outcomeCode: payload.outcomeCode } : {},
708
+ ...detail !== void 0 ? { failureMessage: detail } : {},
709
+ ...exitCode !== void 0 ? { exitCode } : {},
710
+ ...tokenCount !== void 0 ? { tokenCount } : {},
711
+ ...durationMs !== void 0 ? { durationMs } : {},
712
+ ...payload.toolActivity ? { toolCalls: payload.toolActivity.calls } : {}
713
+ };
714
+ }
715
+ function workerReceiptSummary(facts) {
716
+ if (facts === null) return { outcome: "unknown", receiptUnavailable: true };
717
+ const { text: _text, ...summary } = facts;
718
+ return summary;
719
+ }
720
+ function createWorkerStream(options = {}) {
721
+ const byAssignment = /* @__PURE__ */ new Map();
722
+ const attemptByAssignment = /* @__PURE__ */ new Map();
723
+ const assignmentByRun = /* @__PURE__ */ new Map();
724
+ const progressByAssignment = /* @__PURE__ */ new Map();
725
+ const applyProgress = (entry, fold) => {
726
+ const snapshot = fold.snapshot();
727
+ entry.text = snapshot.tailText;
728
+ entry.droppedLines = snapshot.droppedLines;
729
+ entry.tools = [...snapshot.toolNames];
730
+ entry.progress = snapshot;
731
+ };
732
+ const currentEntryForRun = (runId) => {
733
+ const id = nonEmptyString(runId);
734
+ if (id === void 0) return void 0;
735
+ const assignmentId = assignmentByRun.get(id);
736
+ const entry = assignmentId === void 0 ? void 0 : byAssignment.get(assignmentId);
737
+ return entry?.runId === id ? entry : void 0;
738
+ };
739
+ const settle = (entry, payloadFacts) => {
740
+ const facts = options.readReceipt?.(entry.runId) ?? { ...payloadFacts, receiptUnavailable: true };
741
+ entry.receipt = workerReceiptSummary(facts);
742
+ entry.pending = false;
743
+ const attempt = entry.attempts[entry.attempts.length - 1];
744
+ if (attempt !== void 0) attempt.outcome = facts.outcome;
745
+ const fold = progressByAssignment.get(entry.assignmentId);
746
+ if (fold !== void 0) {
747
+ fold.settle(nonEmptyString(facts.text));
748
+ applyProgress(entry, fold);
749
+ }
750
+ return { kind: "updated", entry };
751
+ };
752
+ return {
753
+ started(payload) {
754
+ const runId = nonEmptyString(payload.runId);
755
+ const assignmentId = nonEmptyString(payload.assignmentId) ?? runId;
756
+ if (runId === void 0 || assignmentId === void 0) return null;
757
+ const runtime = runtimeIdentity(payload);
758
+ const existing = byAssignment.get(assignmentId);
759
+ if (existing !== void 0) {
760
+ if (payload.attempt <= (attemptByAssignment.get(assignmentId) ?? -1)) return null;
761
+ attemptByAssignment.set(assignmentId, payload.attempt);
762
+ existing.runId = runId;
763
+ existing.runtime = runtime;
764
+ existing.pending = true;
765
+ existing.startedAtMs = Date.now();
766
+ delete existing.receipt;
767
+ existing.attempts.push({ runId, targetLabel: workerTargetLabel(runtime) });
768
+ assignmentByRun.set(runId, assignmentId);
769
+ const progress2 = progressByAssignment.get(assignmentId);
770
+ if (progress2 !== void 0) {
771
+ progress2.restart();
772
+ applyProgress(existing, progress2);
773
+ }
774
+ return { kind: "updated", entry: existing };
775
+ }
776
+ const helper = isHelperRun(payload);
777
+ if (!helper && payload.requestOrigin !== "user" && payload.requestOrigin !== "agent") return null;
778
+ attemptByAssignment.set(assignmentId, payload.attempt);
779
+ const progress = createWorkerProgressFold();
780
+ const entry = {
781
+ assignmentId,
782
+ runId,
783
+ origin: payload.requestOrigin === "user" ? "user" : "agent",
784
+ ...helper ? { helper: true } : {},
785
+ ...payload.task ? { task: payload.task } : {},
786
+ agentId: payload.agentId,
787
+ runtime,
788
+ text: "",
789
+ droppedLines: 0,
790
+ tools: [],
791
+ progress: progress.snapshot(),
792
+ startedAtMs: Date.now(),
793
+ attempts: [{ runId, targetLabel: workerTargetLabel(runtime) }],
794
+ pending: true,
795
+ ...payload.council !== void 0 ? { council: { ...payload.council } } : {},
796
+ ...payload.parentToolCallId !== void 0 ? { parentToolCallId: payload.parentToolCallId } : {}
797
+ };
798
+ byAssignment.set(assignmentId, entry);
799
+ assignmentByRun.set(runId, assignmentId);
800
+ progressByAssignment.set(assignmentId, progress);
801
+ return { kind: "created", entry };
802
+ },
803
+ progress(payload) {
804
+ const entry = currentEntryForRun(payload.runId);
805
+ if (entry === void 0 || !entry.pending) return null;
806
+ const fold = progressByAssignment.get(entry.assignmentId);
807
+ if (fold === void 0 || !fold.observe(payload.event)) return null;
808
+ applyProgress(entry, fold);
809
+ return { kind: "updated", entry };
810
+ },
811
+ completed(payload) {
812
+ const entry = currentEntryForRun(payload.runId);
813
+ if (entry === void 0) return null;
814
+ return settle(entry, terminalFacts(payload));
815
+ },
816
+ failed(payload) {
817
+ const entry = currentEntryForRun(payload.runId);
818
+ if (entry === void 0) return null;
819
+ return settle(entry, terminalFacts(payload));
820
+ },
821
+ aborted(payload) {
822
+ const entry = currentEntryForRun(payload.runId);
823
+ if (entry === void 0 || !entry.pending) return null;
824
+ const durationMs = finiteNumber(payload.elapsedMs);
825
+ const failureMessage = nonEmptyString(payload.reason);
826
+ entry.pending = false;
827
+ entry.receipt = {
828
+ outcome: "canceled",
829
+ ...durationMs !== void 0 ? { durationMs } : {},
830
+ ...failureMessage !== void 0 ? { failureMessage } : {},
831
+ provisional: true
832
+ };
833
+ const attempt = entry.attempts[entry.attempts.length - 1];
834
+ if (attempt !== void 0) attempt.outcome = "canceled";
835
+ return { kind: "updated", entry };
836
+ },
837
+ get(assignmentId) {
838
+ return byAssignment.get(assignmentId);
839
+ },
840
+ reset() {
841
+ byAssignment.clear();
842
+ attemptByAssignment.clear();
843
+ assignmentByRun.clear();
844
+ progressByAssignment.clear();
845
+ }
846
+ };
847
+ }
848
+
849
+ // src/interactive/worker-share.ts
850
+ var WORKER_SHARE_MAX_BYTES = WORKER_OUTPUT_MAX_BYTES;
851
+ var SHARE_TRUNCATION_MARKER = "\n[worker output truncated]";
852
+ function outcomeWord(outcome) {
853
+ return outcome === "succeeded" ? "ok" : outcome;
854
+ }
855
+ var WORKER_SHARE_NOTE_PREFIX = "[worker result]";
856
+ var WORKER_SHARE_ORIGIN = "shared by the operator";
857
+ function formatWorkerShareNote(facts) {
858
+ return shareNote(facts, facts.text);
859
+ }
860
+ function shareNote(facts, body) {
861
+ const text = body.trim();
862
+ if (text.length === 0) return null;
863
+ const header = `${WORKER_SHARE_NOTE_PREFIX} ${facts.agentId} \xB7 run ${facts.runId} \xB7 ${outcomeWord(facts.outcome)} \xB7 ${WORKER_SHARE_ORIGIN}`;
864
+ return `${header}
865
+ ${truncateUtf8(text, WORKER_SHARE_MAX_BYTES, SHARE_TRUNCATION_MARKER)}`;
866
+ }
867
+ function councilMemberLine(member) {
868
+ if (member.failed !== void 0) return `[${member.label}] failed: ${member.failed.reason}`;
869
+ const verdict = member.verdict === void 0 ? "" : ` (verdict ${member.verdict})`;
870
+ return `[${member.label}]${verdict} ${member.answer.trim()}`;
871
+ }
872
+ function councilSynthesisLines(synthesis) {
873
+ if (synthesis.kind === "none") return ["[synthesis none] the members answered separately; no synthesis was run."];
874
+ const facts = [
875
+ ...synthesis.verdict !== void 0 ? [`verdict ${synthesis.verdict}`] : [],
876
+ ...synthesis.tally !== void 0 ? [
877
+ `tally ${Object.entries(synthesis.tally).map(([key, count]) => `${key}=${count}`).join(" ")}`
878
+ ] : [],
879
+ ...synthesis.judgeRunId !== void 0 ? [`judge run ${synthesis.judgeRunId}`] : []
880
+ ];
881
+ const head = `[synthesis ${synthesis.kind}]${facts.length > 0 ? ` ${facts.join(" \xB7 ")}` : ""}`;
882
+ const text = synthesis.text?.trim() ?? "";
883
+ return text.length > 0 ? [head, text] : [head];
884
+ }
885
+ function formatCouncilShareNote(facts, report) {
886
+ const finalRound = report.members.reduce((highest, member) => Math.max(highest, member.round), 1);
887
+ const body = [
888
+ ...report.members.filter((member) => member.round === finalRound).map(councilMemberLine),
889
+ ...councilSynthesisLines(report.synthesis)
890
+ ].join("\n\n");
891
+ return shareNote(facts, body);
892
+ }
893
+ function formatCouncilMemberShareNote(facts, label) {
894
+ const text = facts.text.trim();
895
+ if (text.length === 0) return null;
896
+ return shareNote(facts, `[${label}] ${text}`);
897
+ }
898
+ function isWorkerShareNote(text) {
899
+ return text.trimStart().startsWith(`${WORKER_SHARE_NOTE_PREFIX} `);
900
+ }
901
+ function workerShareFactsFromEntry(entry) {
902
+ if (entry.pending || entry.receipt === void 0) return null;
903
+ return { agentId: entry.agentId, runId: entry.runId, outcome: entry.receipt.outcome, text: entry.text };
904
+ }
905
+ function selectWorkerRunToShare(entries, id) {
906
+ const wanted = id?.trim();
907
+ for (let index = entries.length - 1; index >= 0; index -= 1) {
908
+ const entry = entries[index];
909
+ if (entry === void 0 || entry.pending || entry.receipt === void 0) continue;
910
+ if (wanted === void 0 || wanted.length === 0) {
911
+ if (!workerAskedByModel(entry)) return entry;
912
+ continue;
913
+ }
914
+ if (entry.assignmentId === wanted || entry.attempts.some((attempt) => attempt.runId === wanted)) return entry;
915
+ }
916
+ return null;
917
+ }
918
+
919
+ // src/interactive/slash-commands.ts
920
+ var SETTINGS_AREA_IDS = SETTINGS_SECTIONS.map((section) => section.id);
921
+ function shareReceipt(agentId, receipt, deps) {
922
+ if (!deps.submitOperatorNote) {
923
+ deps.notice("error", "--share is not wired in this session; the result stayed local");
924
+ return;
925
+ }
926
+ const note = formatWorkerShareNote({
927
+ agentId,
928
+ runId: receipt.runId,
929
+ outcome: receipt.outcome,
930
+ text: receipt.output?.text ?? ""
931
+ });
932
+ if (note === null) {
933
+ deps.notice("warn", `--share: run ${receipt.runId} produced no text to share`);
934
+ return;
935
+ }
936
+ deps.submitOperatorNote(note);
937
+ }
938
+ async function runAttributed(command, request, deps, share) {
939
+ const { dispatch, notice, bus } = deps;
940
+ const progressBus = dispatch.ownsProgressBus?.(bus) === true ? void 0 : bus;
941
+ try {
942
+ const handle = await dispatch.dispatch(request);
943
+ for await (const event of handle.events) {
944
+ const e = event;
945
+ if (!e.type || e.type === "heartbeat") continue;
946
+ progressBus?.emit(BusChannels.DispatchProgress, { runId: handle.runId, agentId: request.agentId, event });
947
+ }
948
+ const receipt = await handle.finalPromise;
949
+ if (receipt.outcome === "canceled") {
950
+ notice("warn", `${command} aborted: ${receipt.outcomeDetail ?? "operator abort"}`);
951
+ } else if (receipt.exitCode !== 0 || receipt.failureMessage) {
952
+ const failure = receipt.failureMessage ? ` ${receipt.failureMessage}` : "";
953
+ notice("error", `${command} failed: exit=${receipt.exitCode}${failure}`);
954
+ }
955
+ if (share) shareReceipt(request.agentId, receipt, deps);
956
+ } catch (err) {
957
+ const msg = err instanceof Error ? err.message : String(err);
958
+ if (err instanceof AdmissionCanceledError) {
959
+ notice("warn", `${command} aborted: ${msg.replace(/^dispatch:\s*/u, "")}`);
960
+ } else {
961
+ notice("error", `${command} failed: ${msg}`);
962
+ }
963
+ }
964
+ }
965
+ async function handleRun(agentId, task, deps, options = {}) {
966
+ const decisionRefs = activeDecisionRefs(deps.getDecisionBoard?.() ?? []);
967
+ if (options.target && options.workerProfile) {
968
+ deps.notice(
969
+ "warn",
970
+ `--target ${options.target} takes precedence; --agent-profile ${options.workerProfile} will be ignored`
971
+ );
972
+ }
973
+ if (options.target && options.workerRuntime) {
974
+ deps.notice(
975
+ "warn",
976
+ `--target ${options.target} takes precedence; --runtime ${options.workerRuntime} will be ignored`
977
+ );
978
+ }
979
+ await runAttributed(
980
+ "run",
981
+ {
982
+ agentId,
983
+ task,
984
+ executionRole: requestExecutionRole({
985
+ agentId,
986
+ ...deps.getAgentRoleFacts ? { resolveFacts: deps.getAgentRoleFacts } : {}
987
+ }),
988
+ requestOrigin: "user",
989
+ ...decisionRefs.length > 0 ? { decisionRefs } : {},
990
+ ...options.workerProfile ? { workerProfile: options.workerProfile } : {},
991
+ ...options.workerRuntime ? { workerRuntime: options.workerRuntime } : {},
992
+ ...options.target ? { target: options.target } : {},
993
+ ...options.model ? { model: options.model } : {},
994
+ ...options.thinkingLevel ? { thinkingLevel: options.thinkingLevel } : {},
995
+ ...options.toolProfile ? { toolProfile: options.toolProfile } : {},
996
+ ...options.requiredCapabilities && options.requiredCapabilities.length > 0 ? { requiredCapabilities: options.requiredCapabilities } : {}
997
+ },
998
+ deps,
999
+ options.share === true
1000
+ );
1001
+ }
1002
+ async function handleDelegate(agentId, task, deps, options = {}) {
1003
+ await runAttributed(
1004
+ "delegate",
1005
+ { agentId, delegationAgentId: agentId, executionRole: "builder", requestOrigin: "user", task },
1006
+ deps,
1007
+ options.share === true
1008
+ );
1009
+ }
1010
+ async function handleOracle(question, ctx) {
1011
+ if (!ctx.submitOperatorNote) {
1012
+ ctx.notice("error", "/oracle is not wired in this session; there is nowhere to put the answer");
1013
+ return;
1014
+ }
1015
+ if (ctx.isTurnInFlight?.() === true) {
1016
+ ctx.notice("warn", "a turn is in flight; /oracle is refused rather than queued");
1017
+ return;
1018
+ }
1019
+ const sources = ctx.oracleBriefing?.();
1020
+ if (!sources) {
1021
+ ctx.notice("error", "/oracle needs the session record, which is not wired in this session");
1022
+ return;
1023
+ }
1024
+ const digest = packOracleDigest({ ...sources, question });
1025
+ const request = {
1026
+ agentId: ORACLE_AGENT_ID,
1027
+ task: ORACLE_TASK,
1028
+ briefing: digest.text,
1029
+ executionRole: requestExecutionRole({
1030
+ agentId: ORACLE_AGENT_ID,
1031
+ ...ctx.getAgentRoleFacts ? { resolveFacts: ctx.getAgentRoleFacts } : {}
1032
+ }),
1033
+ requestOrigin: "internal",
1034
+ autonomy: "read-only"
1035
+ };
1036
+ const progressBus = ctx.dispatch.ownsProgressBus?.(ctx.bus) === true ? void 0 : ctx.bus;
1037
+ try {
1038
+ const handle = await ctx.dispatch.dispatch(request);
1039
+ for await (const event of handle.events) {
1040
+ const typed = event;
1041
+ if (!typed.type || typed.type === "heartbeat") continue;
1042
+ progressBus?.emit(BusChannels.DispatchProgress, { runId: handle.runId, agentId: ORACLE_AGENT_ID, event });
1043
+ }
1044
+ const receipt = await handle.finalPromise;
1045
+ const parsed = parseOracleResult(receipt.output?.text ?? null);
1046
+ if (parsed === null) {
1047
+ ctx.notice("error", `/oracle run ${receipt.runId} returned no usable answer (${receipt.outcome})`);
1048
+ return;
1049
+ }
1050
+ const note = formatWorkerShareNote({
1051
+ agentId: ORACLE_AGENT_ID,
1052
+ runId: receipt.runId,
1053
+ outcome: receipt.outcome,
1054
+ text: formatOracleAnswer(parsed)
1055
+ });
1056
+ if (note === null) {
1057
+ ctx.notice("error", `/oracle run ${receipt.runId} produced no text to share`);
1058
+ return;
1059
+ }
1060
+ ctx.submitOperatorNote(note);
1061
+ } catch (err) {
1062
+ ctx.notice("error", `/oracle failed: ${err instanceof Error ? err.message : String(err)}`);
1063
+ }
1064
+ }
1065
+ async function handleCouncil(task, options, ctx) {
1066
+ if (ctx.isTurnInFlight?.() === true) {
1067
+ ctx.notice("warn", "a turn is in flight; /council is refused rather than queued");
1068
+ return;
1069
+ }
1070
+ if (!ctx.runCouncilDispatch) {
1071
+ ctx.notice("error", "/council is not wired in this session");
1072
+ return;
1073
+ }
1074
+ const rosters = ctx.getWorkerRosters?.();
1075
+ if (rosters === void 0) {
1076
+ ctx.notice("error", "/council needs workers.rosters, which is not wired in this session");
1077
+ return;
1078
+ }
1079
+ const resolved = resolveCouncilRoster(options.roster, rosters);
1080
+ if (!resolved.ok) {
1081
+ ctx.notice("error", resolved.reason);
1082
+ return;
1083
+ }
1084
+ try {
1085
+ const outcome = await ctx.runCouncilDispatch(buildCouncilDispatchArgs(task, resolved.roster, options));
1086
+ if (outcome.status === "blocked") ctx.notice("warn", `/council was not admitted: ${outcome.reason}`);
1087
+ else if (outcome.status === "error") ctx.notice("error", `/council failed: ${outcome.message}`);
1088
+ } catch (err) {
1089
+ ctx.notice("error", `/council failed: ${err instanceof Error ? err.message : String(err)}`);
1090
+ }
1091
+ }
1092
+ function councilAwareShareNote(facts, entry) {
1093
+ const council = entry.council;
1094
+ if (council === void 0) return formatWorkerShareNote(facts);
1095
+ if (council.label !== COUNCIL_SYNTHESIS_LABEL) return formatCouncilMemberShareNote(facts, council.label);
1096
+ const report = parseCouncilReport(facts.text);
1097
+ return report === null ? formatWorkerShareNote(facts) : formatCouncilShareNote(facts, report);
1098
+ }
1099
+ function shareWorkerRun(runId, ctx) {
1100
+ if (!ctx.submitOperatorNote) {
1101
+ ctx.notice("error", "share is not wired; the worker transcript is unavailable in this session");
1102
+ return;
1103
+ }
1104
+ const entry = selectWorkerRunToShare(ctx.listWorkerRuns?.() ?? [], runId);
1105
+ if (!entry) {
1106
+ ctx.notice(
1107
+ "error",
1108
+ runId === void 0 ? "no finished /run or /delegate result to share yet" : `no finished run ${runId} in this session`
1109
+ );
1110
+ return;
1111
+ }
1112
+ const facts = workerShareFactsFromEntry(entry);
1113
+ const note = facts === null ? null : councilAwareShareNote(facts, entry);
1114
+ if (note === null) {
1115
+ ctx.notice("error", `run ${entry.runId} produced no text to share`);
1116
+ return;
1117
+ }
1118
+ ctx.submitOperatorNote(note);
1119
+ }
1120
+ function formatReceiptVerificationBlock(runId, result) {
1121
+ const status = result.ok ? result.compromised ? "compromised" : "ok" : result.retired ? "retired" : "fail";
1122
+ const lines = [
1123
+ `verify ${status} ${runId}`,
1124
+ `receipt ${result.receiptPath ?? "unavailable"}`,
1125
+ `digest ${result.sealedDigest ?? "unavailable"}`,
1126
+ `evidence ${result.trustSummary ?? (!result.ok ? result.reason : "trust status unavailable")}`
1127
+ ];
1128
+ if (result.checks && result.checks.length > 0) {
1129
+ lines.push("checks");
1130
+ for (const check of result.checks) lines.push(` ${check.ok ? "\u2713" : "\u2717"} ${check.name}: ${check.evidence}`);
1131
+ }
1132
+ return lines.join("\n");
1133
+ }
1134
+ var SLASH_COMMAND_GROUPS = ["Work", "Inspect", "Configure", "Session"];
1135
+ var RUN_THINKING_LEVELS = THINKING_LEVELS;
1136
+ function isRunThinkingLevel(value) {
1137
+ return RUN_THINKING_LEVELS.some((level) => level === value);
1138
+ }
1139
+ var COMPACT_POSITIONALS = [
1140
+ { name: "instructions", required: false, rest: true }
1141
+ ];
1142
+ var RECALL_POSITIONALS = [{ name: "ref", required: true }];
1143
+ function fromArgsOrUsage(name, command) {
1144
+ return (parsed) => parsed.error ? { kind: "usage-error", command: name, reason: parsed.error } : command;
1145
+ }
1146
+ function usageNotice(entry, subcommand) {
1147
+ return usageLine(entry, subcommand).trim();
1148
+ }
1149
+ function formatPanesStatus(status) {
1150
+ const server = status.server ? `pane host ${status.server.version}, protocol ${status.server.protocol}` : "no server";
1151
+ const lines = [
1152
+ `panes: mode=${status.mode} ${status.available ? "available" : "unavailable"} (${server})`,
1153
+ ` ${status.reason}`,
1154
+ ...status.socketPath ? [` socket ${status.socketPath}`] : [],
1155
+ ` settings: enabled=${status.settings.enabled} notifications=${status.settings.notifications} layout=${status.settings.layout} journal=${status.settings.journal}`,
1156
+ ` files: enabled=${status.settings.yazi.enabled} mode=${status.settings.yazi.mode} profile=${status.settings.yazi.profile} followCwd=${status.settings.yazi.followCwd}`,
1157
+ ` file pane: mode=${status.yazi.mode} pane=${status.yazi.paneId ?? "none"} cwd=${status.yazi.paneCwd ?? "unknown"} lastLine=${status.yazi.lastLineAt === null ? "never" : new Date(status.yazi.lastLineAt).toISOString()} dropped=${status.yazi.droppedLines}`
1158
+ ];
1159
+ if (status.docks.length > 0) {
1160
+ lines.push(
1161
+ ` docks: ${status.docks.map((dock) => `${dock.slot}=${dock.paneId} @${(dock.targetShare * 100).toFixed(0)}%`).join(", ")}`
1162
+ );
1163
+ }
1164
+ if (status.panes.length === 0) {
1165
+ lines.push(" no Clio-owned panes");
1166
+ } else {
1167
+ lines.push(` ${status.panes.length} Clio-owned pane(s):`);
1168
+ for (const pane of status.panes) {
1169
+ const adopted = pane.adopted ? " adopted" : "";
1170
+ const pending = pane.pending ? " opening" : "";
1171
+ lines.push(` ${pane.paneId} ${pane.purpose} ${pane.label}${adopted}${pending}`);
1172
+ }
1173
+ }
1174
+ lines.push(` presets: ${PANES_PRESETS.map((preset) => `${preset.id} (${preset.summary})`).join(", ")}`);
1175
+ return lines;
1176
+ }
1177
+ var BUILTIN_SLASH_COMMANDS = [
1178
+ {
1179
+ name: "background",
1180
+ description: "Detach the newest eligible attached dispatch",
1181
+ group: "Work",
1182
+ kinds: ["background"],
1183
+ args: {},
1184
+ fromArgs: fromArgsOrUsage("background", { kind: "background" }),
1185
+ handle(_command, ctx) {
1186
+ if (!ctx.keyboardActions) {
1187
+ ctx.notice("warn", "Background action requires an interactive session");
1188
+ return "rejected";
1189
+ }
1190
+ ctx.keyboardActions.background();
1191
+ }
1192
+ },
1193
+ {
1194
+ name: "editor",
1195
+ description: "Edit explicit text (or an empty buffer) externally",
1196
+ group: "Work",
1197
+ kinds: ["editor"],
1198
+ args: { positionals: [{ name: "text", required: false, rest: true }] },
1199
+ match(text) {
1200
+ const match = /^\/editor(?:\s+([\s\S]*))?$/u.exec(text);
1201
+ return match ? { kind: "editor", text: match[1] ?? "" } : null;
1202
+ },
1203
+ handle(command, ctx) {
1204
+ if (command.kind !== "editor") return;
1205
+ if (!ctx.keyboardActions) {
1206
+ ctx.notice("warn", "External editing requires an interactive session");
1207
+ return "rejected";
1208
+ }
1209
+ if (!ctx.keyboardActions.editor(command.text)) return "rejected";
1210
+ }
1211
+ },
1212
+ {
1213
+ name: "interrupt",
1214
+ description: "Interrupt the active run and send this text",
1215
+ group: "Work",
1216
+ kinds: ["interrupt"],
1217
+ args: { positionals: [{ name: "text", required: true, rest: true }] },
1218
+ match(text) {
1219
+ const match = /^\/interrupt(?:\s+([\s\S]*))?$/u.exec(text);
1220
+ return match ? match[1]?.trim() ? { kind: "interrupt", text: match[1] } : { kind: "usage-error", command: "interrupt", reason: "Text is required" } : null;
1221
+ },
1222
+ handle(command, ctx) {
1223
+ if (command.kind !== "interrupt") return;
1224
+ if (!ctx.keyboardActions) {
1225
+ ctx.notice("warn", "Interrupt requires an interactive session");
1226
+ return "rejected";
1227
+ }
1228
+ ctx.keyboardActions.interrupt(command.text);
1229
+ }
1230
+ },
1231
+ {
1232
+ name: "notifications",
1233
+ description: "Dismiss the oldest notification or explicitly dismiss all",
1234
+ group: "Inspect",
1235
+ kinds: ["notifications-dismiss"],
1236
+ args: { subcommands: { dismiss: { positionals: [{ name: "all", required: false }] } } },
1237
+ match(text) {
1238
+ if (!/^\/notifications(?:\s|$)/u.test(text)) return null;
1239
+ const match = /^\/notifications\s+dismiss(?:\s+(all))?$/u.exec(text);
1240
+ return match ? { kind: "notifications-dismiss", all: match[1] === "all" } : { kind: "usage-error", command: "notifications", reason: "Use /notifications dismiss [all]" };
1241
+ },
1242
+ handle(command, ctx) {
1243
+ if (command.kind !== "notifications-dismiss") return;
1244
+ if (!ctx.keyboardActions) {
1245
+ ctx.notice("warn", "Notifications require an interactive session");
1246
+ return "rejected";
1247
+ }
1248
+ ctx.keyboardActions.dismiss(command.all);
1249
+ }
1250
+ },
1251
+ {
1252
+ name: "quit",
1253
+ description: "Exit Clio Coder",
1254
+ group: "Session",
1255
+ kinds: ["quit"],
1256
+ args: {},
1257
+ fromArgs: fromArgsOrUsage("quit", { kind: "quit" }),
1258
+ handle(_command, ctx) {
1259
+ ctx.shutdown();
1260
+ }
1261
+ },
1262
+ {
1263
+ name: "help",
1264
+ description: "Open the interactive help center showing commands and keys",
1265
+ group: "Inspect",
1266
+ kinds: ["help"],
1267
+ args: {
1268
+ positionals: [{ name: "query", required: false, rest: true }]
1269
+ },
1270
+ fromArgs(parsed) {
1271
+ return { kind: "help", ...parsed.rest ? { query: parsed.rest } : {} };
1272
+ },
1273
+ handle(command, ctx) {
1274
+ ctx.openHelp(command.kind === "help" ? command.query : void 0);
1275
+ }
1276
+ },
1277
+ {
1278
+ name: "skill",
1279
+ description: "Invoke a skill, or use `off` to clear its tool surface",
1280
+ group: "Work",
1281
+ kinds: ["skill-invocation", "skill-surface-clear"],
1282
+ args: {
1283
+ positionals: [
1284
+ { name: "name", required: true },
1285
+ { name: "task", required: false, rest: true }
1286
+ ]
1287
+ },
1288
+ match(trimmed) {
1289
+ if (trimmed === "/skill") {
1290
+ return {
1291
+ kind: "usage-error",
1292
+ command: "skill",
1293
+ reason: "Choose /skills to browse, /skill <name> to invoke, or /skill off to clear the active tool surface"
1294
+ };
1295
+ }
1296
+ const command = parseSkillCommand(trimmed);
1297
+ if (!command) return null;
1298
+ if (command.name === SKILL_SURFACE_CLEAR_ARG && command.args.length === 0) {
1299
+ return { kind: "skill-surface-clear" };
1300
+ }
1301
+ return { kind: "skill-invocation", text: trimmed };
1302
+ },
1303
+ handle(command, ctx) {
1304
+ if (command.kind === "skill-invocation") {
1305
+ ctx.submitChat(command.text);
1306
+ } else if (command.kind === "skill-surface-clear") {
1307
+ const cleared = ctx.clearSkillSurface?.() ?? [];
1308
+ ctx.notice(
1309
+ "info",
1310
+ cleared.length > 0 ? `Skill tool surface cleared: ${cleared.join(", ")}.` : "No skill tool surface is active."
1311
+ );
1312
+ }
1313
+ }
1314
+ },
1315
+ {
1316
+ name: "library",
1317
+ description: "Open the full-screen recipe library, review a package operation, or reload installed recipes",
1318
+ group: "Inspect",
1319
+ kinds: ["resources"],
1320
+ subcommandDescriptions: {
1321
+ inspect: "Open the Library on one package or recipe",
1322
+ install: "Review installing one package, then apply it",
1323
+ remove: "Review removing one package, then apply it",
1324
+ import: "Review a plugin source from a path or URL",
1325
+ reload: "Refresh installed recipe resources in this session"
1326
+ },
1327
+ args: {
1328
+ subcommands: {
1329
+ inspect: {
1330
+ positionals: [{ name: "ref", required: true }],
1331
+ flags: [{ name: "--user" }, { name: "--project" }]
1332
+ },
1333
+ install: {
1334
+ positionals: [{ name: "ref", required: true }],
1335
+ flags: [{ name: "--user" }, { name: "--project" }]
1336
+ },
1337
+ remove: {
1338
+ positionals: [{ name: "ref", required: true }],
1339
+ flags: [{ name: "--user" }, { name: "--project" }]
1340
+ },
1341
+ import: {
1342
+ positionals: [{ name: "path-or-url", required: true }],
1343
+ flags: [{ name: "--user" }, { name: "--project" }]
1344
+ },
1345
+ reload: {}
1346
+ }
1347
+ },
1348
+ fromArgs(parsed) {
1349
+ if (parsed.error) return { kind: "usage-error", command: "library", reason: parsed.error };
1350
+ if (parsed.flags.has("--user") && parsed.flags.has("--project"))
1351
+ return { kind: "usage-error", command: "library", reason: "Choose one destination: --user or --project" };
1352
+ const scope = parsed.flags.has("--project") ? "project" : parsed.flags.has("--user") ? "user" : void 0;
1353
+ const subcommand = parsed.subcommand;
1354
+ if (subcommand === "reload") return { kind: "resources", family: "plugins", action: "reload" };
1355
+ if (subcommand === "import") {
1356
+ const source = parsed.rest ?? parsed.positionals[0];
1357
+ if (!source)
1358
+ return {
1359
+ kind: "usage-error",
1360
+ command: "library",
1361
+ reason: "/library import needs a directory path or a source URL to review"
1362
+ };
1363
+ return { kind: "resources", tab: "plugin", importSource: source, ...scope ? { scope } : {} };
1364
+ }
1365
+ if (subcommand === "inspect" || subcommand === "install" || subcommand === "remove") {
1366
+ const ref = parsed.positionals[0];
1367
+ if (!ref)
1368
+ return {
1369
+ kind: "usage-error",
1370
+ command: "library",
1371
+ reason: `/library ${subcommand} needs a kind:name reference, such as plugin:materio, or a recipe name`
1372
+ };
1373
+ const prefix = ref.split(":", 1)[0] ?? "";
1374
+ return {
1375
+ kind: "resources",
1376
+ tab: isLibraryKind(prefix) && ref.includes(":") ? prefix : "plugin",
1377
+ focus: ref,
1378
+ ...subcommand === "inspect" ? {} : { intent: subcommand },
1379
+ ...scope ? { scope } : {}
1380
+ };
1381
+ }
1382
+ if (parsed.error || parsed.positionals.length > 0)
1383
+ return {
1384
+ kind: "usage-error",
1385
+ command: "library",
1386
+ reason: "Use /library to browse, /library inspect|install|remove <ref>, /library import <path-or-url>, or /library reload; /skills, /agents and /prompts open the same browser on their category"
1387
+ };
1388
+ return { kind: "resources", tab: "plugin" };
1389
+ },
1390
+ handle(command, ctx) {
1391
+ if (command.kind !== "resources") return;
1392
+ if (command.family === "plugins") {
1393
+ if (!ctx.reloadPlugins)
1394
+ ctx.notice("warn", "library: reload is unavailable in this session; restart to refresh resources");
1395
+ else {
1396
+ try {
1397
+ const snapshot = ctx.reloadPlugins();
1398
+ ctx.notice("success", `library: generation ${snapshot.generation} committed`);
1399
+ } catch (error) {
1400
+ ctx.notice("error", `library: reload failed: ${error instanceof Error ? error.message : String(error)}`);
1401
+ }
1402
+ }
1403
+ return;
1404
+ }
1405
+ if (command.family === "extensions") {
1406
+ if (command.action === "reload") reloadExtensionsCommand(ctx);
1407
+ else ctx.openExtensions();
1408
+ return;
1409
+ }
1410
+ ctx.openSkillsHub?.({
1411
+ ...command.tab ? { tab: command.tab } : {},
1412
+ ...command.focus ? { focus: command.focus } : {},
1413
+ ...command.intent ? { intent: command.intent } : {},
1414
+ ...command.importSource ? { importSource: command.importSource } : {},
1415
+ ...command.scope ? { scope: command.scope } : {}
1416
+ });
1417
+ }
1418
+ },
1419
+ {
1420
+ name: "skills",
1421
+ description: "Open the Library on Skills",
1422
+ group: "Inspect",
1423
+ kinds: [],
1424
+ args: {},
1425
+ fromArgs: fromArgsOrUsage("skills", { kind: "resources", tab: "skill" }),
1426
+ handle(_command, ctx) {
1427
+ ctx.openSkillsHub?.({ tab: "skill" });
1428
+ }
1429
+ },
1430
+ {
1431
+ name: "prompts",
1432
+ description: "Open the Library on Prompts",
1433
+ group: "Inspect",
1434
+ kinds: [],
1435
+ args: {},
1436
+ fromArgs: fromArgsOrUsage("prompts", { kind: "resources", tab: "prompt" }),
1437
+ handle(_command, ctx) {
1438
+ ctx.openSkillsHub?.({ tab: "prompt" });
1439
+ }
1440
+ },
1441
+ {
1442
+ name: "mcp",
1443
+ description: "List MCP servers or manage explicit trust with trust <id> [class] and untrust <id>",
1444
+ group: "Inspect",
1445
+ kinds: ["mcp"],
1446
+ args: {
1447
+ positionals: [
1448
+ { name: "action", required: false, values: ["list", "trust", "untrust"] },
1449
+ { name: "id", required: false },
1450
+ { name: "class", required: false }
1451
+ ]
1452
+ },
1453
+ fromArgs(parsed) {
1454
+ if (parsed.error) return { kind: "usage-error", command: "mcp", reason: parsed.error };
1455
+ const [action = "list", id, actionClass] = parsed.positionals;
1456
+ return { kind: "mcp", argv: [action, ...id ? [id] : [], ...actionClass ? ["--action-class", actionClass] : []] };
1457
+ },
1458
+ handle(command, ctx) {
1459
+ if (command.kind !== "mcp") return;
1460
+ const result = mcpCommandOutput(command.argv);
1461
+ ctx.notice(result.code ? "error" : "info", result.text);
1462
+ }
1463
+ },
1464
+ {
1465
+ name: "doctor",
1466
+ description: "Diagnose this install in-session; /doctor deep adds live tool probes and a contract dry run",
1467
+ group: "Inspect",
1468
+ kinds: ["doctor"],
1469
+ args: { positionals: [{ name: "deep", required: false, values: ["deep"] }] },
1470
+ fromArgs(parsed) {
1471
+ if (parsed.error) return { kind: "usage-error", command: "doctor", reason: parsed.error };
1472
+ if (parsed.positionals[0] && parsed.positionals[0] !== "deep")
1473
+ return { kind: "usage-error", command: "doctor", reason: "doctor accepts only deep" };
1474
+ return { kind: "doctor", deep: parsed.positionals[0] === "deep" };
1475
+ },
1476
+ handle(command, ctx) {
1477
+ if (command.kind !== "doctor") return;
1478
+ const runDoctor = ctx.runDoctor;
1479
+ if (!runDoctor) {
1480
+ ctx.notice("error", "doctor is not wired in this session; run clio-coder doctor from a shell");
1481
+ return;
1482
+ }
1483
+ ctx.notice(
1484
+ "info",
1485
+ command.deep ? "doctor: running deep checks; the tool probe can load a cold local model and releases only that one" : "doctor: running checks"
1486
+ );
1487
+ void (async () => {
1488
+ try {
1489
+ const report = await runDoctor({ deep: command.deep });
1490
+ if (ctx.showDoctor && report.findings) ctx.showDoctor(report.findings);
1491
+ else ctx.notice(report.level, report.text);
1492
+ } catch (error) {
1493
+ ctx.notice("error", `doctor failed: ${error instanceof Error ? error.message : String(error)}`);
1494
+ }
1495
+ ctx.render();
1496
+ })();
1497
+ }
1498
+ },
1499
+ {
1500
+ name: "extensions",
1501
+ description: "Inspect harness extensions or reload their commands, hooks and operator UI",
1502
+ group: "Inspect",
1503
+ // Harness navigation uses the shared overlay dispatcher, independently of recipe reload.
1504
+ kinds: [],
1505
+ args: { positionals: [{ name: "action", required: false, values: ["reload"] }] },
1506
+ fromArgs(parsed) {
1507
+ if (parsed.error) return { kind: "usage-error", command: "extensions", reason: parsed.error };
1508
+ if (parsed.positionals[0] && parsed.positionals[0] !== "reload")
1509
+ return { kind: "usage-error", command: "extensions", reason: "extensions accepts only reload" };
1510
+ return { kind: "resources", family: "extensions", ...parsed.positionals[0] ? { action: "reload" } : {} };
1511
+ },
1512
+ handle(command, ctx) {
1513
+ if (command.kind !== "resources" || command.family !== "extensions") return;
1514
+ if (command.action === "reload") reloadExtensionsCommand(ctx);
1515
+ else ctx.openExtensions();
1516
+ }
1517
+ },
1518
+ {
1519
+ name: "share",
1520
+ description: "Share a worker result with the main agent",
1521
+ group: "Work",
1522
+ kinds: ["share"],
1523
+ args: { positionals: [{ name: "run-id", required: false }] },
1524
+ fromArgs(parsed) {
1525
+ const retiredArchiveVerb = parsed.positionals[0];
1526
+ if (retiredArchiveVerb === "export" || retiredArchiveVerb === "import") {
1527
+ return {
1528
+ kind: "usage-error",
1529
+ command: "share",
1530
+ reason: `/share ${retiredArchiveVerb} is retired and did not run; use /archive ${retiredArchiveVerb}`
1531
+ };
1532
+ }
1533
+ if (parsed.error) return { kind: "usage-error", command: "share", reason: parsed.error };
1534
+ return { kind: "share", ...parsed.positionals[0] ? { runId: parsed.positionals[0] } : {} };
1535
+ },
1536
+ handle(command, ctx) {
1537
+ if (command.kind === "share") shareWorkerRun(command.runId, ctx);
1538
+ }
1539
+ },
1540
+ {
1541
+ name: "archive",
1542
+ description: "Export or import a full Clio archive",
1543
+ group: "Session",
1544
+ kinds: ["archive-export", "archive-import", "archive-usage"],
1545
+ subcommandDescriptions: { export: "Export a full Clio archive", import: "Import a full Clio archive" },
1546
+ args: {
1547
+ subcommands: {
1548
+ export: {
1549
+ positionals: [{ name: "path", required: true }]
1550
+ },
1551
+ import: {
1552
+ flags: [{ name: "--dry-run" }, { name: "--force" }],
1553
+ positionals: [{ name: "path", required: true }]
1554
+ }
1555
+ }
1556
+ },
1557
+ fromArgs(parsed) {
1558
+ const subcommand = parsed.subcommand === "export" || parsed.subcommand === "import" ? parsed.subcommand : void 0;
1559
+ if (parsed.error) {
1560
+ return {
1561
+ kind: "archive-usage",
1562
+ ...subcommand !== void 0 ? { subcommand } : {},
1563
+ error: parsed.error
1564
+ };
1565
+ }
1566
+ const path = parsed.positionals[0];
1567
+ if (subcommand === "export" && path !== void 0) return { kind: "archive-export", path };
1568
+ if (subcommand === "import" && path !== void 0) {
1569
+ return {
1570
+ kind: "archive-import",
1571
+ path,
1572
+ dryRun: parsed.flags.has("--dry-run"),
1573
+ force: parsed.flags.has("--force")
1574
+ };
1575
+ }
1576
+ return { kind: "archive-usage", ...subcommand !== void 0 ? { subcommand } : {} };
1577
+ },
1578
+ handle(command, ctx) {
1579
+ if (command.kind === "archive-usage") {
1580
+ const entry = BUILTIN_SLASH_COMMANDS.find((candidate) => candidate.name === "archive");
1581
+ if (!entry) return;
1582
+ const usage = usageNotice(entry, command.subcommand);
1583
+ ctx.notice("info", command.error ? `${command.error}
1584
+ ${usage}` : usage);
1585
+ return;
1586
+ }
1587
+ if (command.kind === "archive-export") {
1588
+ if (!ctx.exportShareArchive) {
1589
+ ctx.notice("error", "archive export is not wired");
1590
+ return;
1591
+ }
1592
+ const result = ctx.exportShareArchive(command.path);
1593
+ ctx.notice("success", `exported ${result.fileCount} item(s) to ${result.path}`);
1594
+ return;
1595
+ }
1596
+ if (command.kind === "archive-import") {
1597
+ if (!ctx.importShareArchive) {
1598
+ ctx.notice("error", "archive import is not wired");
1599
+ return;
1600
+ }
1601
+ const plan = ctx.importShareArchive(command.path, { dryRun: command.dryRun, force: command.force });
1602
+ for (const diag of plan.diagnostics) {
1603
+ const detail = diag.path ? `${diag.message}: ${diag.path}` : diag.message;
1604
+ ctx.notice("warn", `${diag.type}: ${detail}`);
1605
+ }
1606
+ const write = plan.actions.filter((action) => action.action === "write").length;
1607
+ const overwrite = plan.actions.filter((action) => action.action === "overwrite").length;
1608
+ const skip = plan.actions.filter((action) => action.action === "skip").length;
1609
+ ctx.notice(
1610
+ command.dryRun ? "info" : "success",
1611
+ `${command.dryRun ? "dry-run" : "import"} write=${write} overwrite=${overwrite} skip=${skip} settings=${plan.actions.filter((action) => action.action === "settings").length}`
1612
+ );
1613
+ }
1614
+ }
1615
+ },
1616
+ {
1617
+ name: "run",
1618
+ description: "Run a fleet agent",
1619
+ group: "Work",
1620
+ kinds: ["run", "run-usage"],
1621
+ args: {
1622
+ parseFlagsBeforeRest: true,
1623
+ flags: [
1624
+ { name: "--agent-profile", takesValue: true, valueName: "profile" },
1625
+ { name: "--runtime", takesValue: true, valueName: "runtimeId" },
1626
+ { name: "--target", takesValue: true, valueName: "id" },
1627
+ { name: "--model", takesValue: true, valueName: "id" },
1628
+ { name: "--thinking", takesValue: true, values: RUN_THINKING_LEVELS, valueName: "level" },
1629
+ { name: "--tool-profile", takesValue: true, values: TOOL_PROFILE_NAMES },
1630
+ { name: "--require", takesValue: true, repeatable: true, valueName: "cap" },
1631
+ { name: "--share" }
1632
+ ],
1633
+ positionals: [
1634
+ { name: "agent", required: true },
1635
+ { name: "task", required: true, rest: true }
1636
+ ]
1637
+ },
1638
+ fromArgs(parsed, trimmed) {
1639
+ if (parsed.error) return { kind: "run-usage" };
1640
+ const options = {};
1641
+ const workerProfile = parsed.flags.get("--agent-profile");
1642
+ if (typeof workerProfile === "string") options.workerProfile = workerProfile;
1643
+ const workerRuntime = parsed.flags.get("--runtime");
1644
+ if (typeof workerRuntime === "string") options.workerRuntime = workerRuntime;
1645
+ const target = parsed.flags.get("--target");
1646
+ if (typeof target === "string") options.target = target;
1647
+ const model = parsed.flags.get("--model");
1648
+ if (typeof model === "string") options.model = model;
1649
+ const thinking = parsed.flags.get("--thinking");
1650
+ if (typeof thinking === "string") {
1651
+ if (!isRunThinkingLevel(thinking)) return { kind: "run-usage" };
1652
+ options.thinkingLevel = thinking;
1653
+ }
1654
+ const toolProfile = parsed.flags.get("--tool-profile");
1655
+ if (typeof toolProfile === "string") {
1656
+ if (!isToolProfileName(toolProfile)) return { kind: "run-usage" };
1657
+ options.toolProfile = toolProfile;
1658
+ }
1659
+ const requiredCapabilities = parsed.flagValues.get("--require");
1660
+ if (requiredCapabilities && requiredCapabilities.length > 0) {
1661
+ options.requiredCapabilities = [...requiredCapabilities];
1662
+ }
1663
+ if (parsed.flags.has("--share")) options.share = true;
1664
+ const agentId = parsed.positionals[0] ?? "";
1665
+ const task = parsed.positionals[1] ?? "";
1666
+ return { kind: "run", agentId, task, options, source: trimmed };
1667
+ },
1668
+ handle(command, ctx) {
1669
+ if (command.kind === "run-usage") {
1670
+ const entry = BUILTIN_SLASH_COMMANDS.find((e) => e.name === "run");
1671
+ if (entry) {
1672
+ ctx.notice("info", usageNotice(entry));
1673
+ }
1674
+ return;
1675
+ }
1676
+ if (command.kind !== "run") return;
1677
+ const { agentId, task, options } = command;
1678
+ ctx.echoOperatorCommand?.(command.source);
1679
+ void (async () => {
1680
+ await handleRun(
1681
+ agentId,
1682
+ task,
1683
+ {
1684
+ dispatch: ctx.dispatch,
1685
+ ...ctx.getDecisionBoard ? { getDecisionBoard: ctx.getDecisionBoard } : {},
1686
+ ...ctx.getAgentRoleFacts ? { getAgentRoleFacts: ctx.getAgentRoleFacts } : {},
1687
+ io: ctx.io,
1688
+ notice: ctx.notice,
1689
+ bus: ctx.bus,
1690
+ ...ctx.submitOperatorNote ? { submitOperatorNote: ctx.submitOperatorNote } : {}
1691
+ },
1692
+ options
1693
+ );
1694
+ ctx.render();
1695
+ })();
1696
+ }
1697
+ },
1698
+ {
1699
+ name: "delegate",
1700
+ description: "Run an ACP delegation agent",
1701
+ group: "Work",
1702
+ kinds: ["delegate", "delegate-usage"],
1703
+ args: {
1704
+ parseFlagsBeforeRest: true,
1705
+ flags: [{ name: "--share" }],
1706
+ positionals: [
1707
+ { name: "agent-id", required: true },
1708
+ { name: "task", required: true, rest: true }
1709
+ ]
1710
+ },
1711
+ fromArgs(parsed, trimmed) {
1712
+ if (parsed.error) return { kind: "delegate-usage" };
1713
+ const agentId = parsed.positionals[0] ?? "";
1714
+ const task = parsed.positionals[1] ?? "";
1715
+ return { kind: "delegate", agentId, task, source: trimmed, ...parsed.flags.has("--share") ? { share: true } : {} };
1716
+ },
1717
+ handle(command, ctx) {
1718
+ if (command.kind === "delegate-usage") {
1719
+ const entry = BUILTIN_SLASH_COMMANDS.find((e) => e.name === "delegate");
1720
+ if (entry) {
1721
+ ctx.notice("info", usageNotice(entry));
1722
+ }
1723
+ return;
1724
+ }
1725
+ if (command.kind !== "delegate") return;
1726
+ ctx.echoOperatorCommand?.(command.source);
1727
+ const share = command.share === true;
1728
+ void (async () => {
1729
+ await handleDelegate(
1730
+ command.agentId,
1731
+ command.task,
1732
+ {
1733
+ dispatch: ctx.dispatch,
1734
+ io: ctx.io,
1735
+ notice: ctx.notice,
1736
+ bus: ctx.bus,
1737
+ ...ctx.submitOperatorNote ? { submitOperatorNote: ctx.submitOperatorNote } : {}
1738
+ },
1739
+ { share }
1740
+ );
1741
+ ctx.render();
1742
+ })();
1743
+ }
1744
+ },
1745
+ {
1746
+ name: "btw",
1747
+ description: "Ask a side question that never enters the session transcript",
1748
+ group: "Work",
1749
+ kinds: ["btw", "btw-usage"],
1750
+ args: {
1751
+ positionals: [{ name: "question", required: true, rest: true }]
1752
+ },
1753
+ fromArgs(parsed) {
1754
+ const question = parsed.rest?.trim() ?? "";
1755
+ if (parsed.error || question.length === 0) return { kind: "btw-usage" };
1756
+ return { kind: "btw", question };
1757
+ },
1758
+ handle(command, ctx) {
1759
+ if (command.kind === "btw-usage") {
1760
+ const entry = BUILTIN_SLASH_COMMANDS.find((candidate) => candidate.name === "btw");
1761
+ if (entry) ctx.notice("info", usageNotice(entry));
1762
+ return;
1763
+ }
1764
+ if (command.kind !== "btw") return;
1765
+ ctx.openSideQuestion(command.question);
1766
+ }
1767
+ },
1768
+ {
1769
+ name: "oracle",
1770
+ description: "Ask a read-only advisor to challenge a question against this session's settled decisions",
1771
+ group: "Work",
1772
+ kinds: ["oracle", "oracle-usage"],
1773
+ args: {
1774
+ positionals: [{ name: "question", required: true, rest: true }]
1775
+ },
1776
+ fromArgs(parsed) {
1777
+ const question = parsed.rest?.trim() ?? "";
1778
+ if (parsed.error || question.length === 0) return { kind: "oracle-usage" };
1779
+ return { kind: "oracle", question };
1780
+ },
1781
+ handle(command, ctx) {
1782
+ if (command.kind === "oracle-usage") {
1783
+ const entry = BUILTIN_SLASH_COMMANDS.find((candidate) => candidate.name === "oracle");
1784
+ if (entry) ctx.notice("info", usageNotice(entry));
1785
+ return;
1786
+ }
1787
+ if (command.kind !== "oracle") return;
1788
+ void (async () => {
1789
+ await handleOracle(command.question, ctx);
1790
+ ctx.render();
1791
+ })();
1792
+ }
1793
+ },
1794
+ {
1795
+ name: "council",
1796
+ description: "Ask a roster of read-only members the same task, with an optional vote or judge synthesis",
1797
+ group: "Work",
1798
+ kinds: ["council", "council-usage"],
1799
+ args: {
1800
+ parseFlagsBeforeRest: true,
1801
+ flags: [
1802
+ { name: "--roster", takesValue: true, valueName: "name" },
1803
+ { name: "--rounds", takesValue: true, valueName: "n" },
1804
+ { name: "--synthesis", takesValue: true, values: COUNCIL_SYNTHESIS_MODES }
1805
+ ],
1806
+ positionals: [{ name: "task", required: true, rest: true }]
1807
+ },
1808
+ fromArgs(parsed) {
1809
+ const task = parsed.rest?.trim() ?? "";
1810
+ if (parsed.error) return { kind: "council-usage", reason: parsed.error };
1811
+ if (task.length === 0) return { kind: "council-usage" };
1812
+ const options = {};
1813
+ const roster = parsed.flags.get("--roster");
1814
+ if (typeof roster === "string") options.roster = roster;
1815
+ const rounds = parsed.flags.get("--rounds");
1816
+ if (typeof rounds === "string") {
1817
+ const parsedRounds = Number(rounds);
1818
+ if (!Number.isInteger(parsedRounds) || parsedRounds < 1 || parsedRounds > COUNCIL_MAX_ROUNDS) {
1819
+ return { kind: "council-usage", reason: `--rounds must be an integer 1..${COUNCIL_MAX_ROUNDS}` };
1820
+ }
1821
+ options.rounds = parsedRounds;
1822
+ }
1823
+ const synthesis = parsed.flags.get("--synthesis");
1824
+ if (typeof synthesis === "string") {
1825
+ if (!isCouncilSynthesisMode(synthesis)) return { kind: "council-usage" };
1826
+ options.synthesis = synthesis;
1827
+ }
1828
+ return { kind: "council", task, options };
1829
+ },
1830
+ handle(command, ctx) {
1831
+ if (command.kind === "council-usage") {
1832
+ const entry = BUILTIN_SLASH_COMMANDS.find((candidate) => candidate.name === "council");
1833
+ const usage = entry ? usageNotice(entry) : "usage: /council <task>";
1834
+ ctx.notice("info", command.reason ? `${command.reason}
1835
+ ${usage}` : usage);
1836
+ return;
1837
+ }
1838
+ if (command.kind !== "council") return;
1839
+ void (async () => {
1840
+ await handleCouncil(command.task, command.options, ctx);
1841
+ ctx.render();
1842
+ })();
1843
+ }
1844
+ },
1845
+ {
1846
+ name: "interop",
1847
+ description: "Inspect coding agents and adopt safe resources",
1848
+ group: "Inspect",
1849
+ kinds: ["agents"],
1850
+ args: {},
1851
+ fromArgs(parsed) {
1852
+ if (parsed.error) return { kind: "usage-error", command: "interop", reason: parsed.error };
1853
+ return { kind: "agents", connect: true };
1854
+ },
1855
+ handle(_command, ctx) {
1856
+ ctx.openInterop?.();
1857
+ }
1858
+ },
1859
+ {
1860
+ name: "agents",
1861
+ description: "Open the Library on Agents",
1862
+ group: "Inspect",
1863
+ kinds: [],
1864
+ args: {},
1865
+ fromArgs(parsed) {
1866
+ if (parsed.error)
1867
+ return {
1868
+ kind: "usage-error",
1869
+ command: "agents",
1870
+ reason: "Use /agents to browse recipes, or /interop to inspect another local agent's resources"
1871
+ };
1872
+ return { kind: "resources", tab: "agent" };
1873
+ },
1874
+ handle(_command, ctx) {
1875
+ ctx.openSkillsHub?.({ tab: "agent" });
1876
+ }
1877
+ },
1878
+ {
1879
+ name: "cost",
1880
+ description: "Show session token and cost totals",
1881
+ group: "Inspect",
1882
+ kinds: ["cost"],
1883
+ args: {},
1884
+ fromArgs: fromArgsOrUsage("cost", { kind: "cost" }),
1885
+ handle(_command, ctx) {
1886
+ ctx.openCost();
1887
+ }
1888
+ },
1889
+ {
1890
+ name: "context",
1891
+ description: "Context hub: window overlay plus compact, recall, init, refresh, and reset",
1892
+ group: "Inspect",
1893
+ kinds: ["context-view", "compact", "context-recall", "init", "context-clear", "context-refresh"],
1894
+ subcommandDescriptions: {
1895
+ compact: "Compact session context",
1896
+ recall: "Recall an evicted result",
1897
+ init: "Initialize project context",
1898
+ refresh: "Refresh project context",
1899
+ reset: "Reset project context"
1900
+ },
1901
+ args: {
1902
+ subcommands: {
1903
+ compact: { positionals: [...COMPACT_POSITIONALS] },
1904
+ recall: { positionals: [...RECALL_POSITIONALS] },
1905
+ init: {
1906
+ flags: CONTEXT_INIT_FLAG_TABLE.flatMap(({ flag, aliases = [] }) => [flag, ...aliases].map((name) => ({ name })))
1907
+ },
1908
+ refresh: {},
1909
+ reset: {}
1910
+ }
1911
+ },
1912
+ fromArgs(parsed) {
1913
+ if (parsed.error) return { kind: "usage-error", command: "context", reason: parsed.error };
1914
+ switch (parsed.subcommand) {
1915
+ case "compact":
1916
+ return { kind: "compact", instructions: parsed.rest };
1917
+ case "recall":
1918
+ return { kind: "context-recall", ref: parsed.positionals[0] ?? "" };
1919
+ case "init": {
1920
+ const options = {};
1921
+ for (const { flag, aliases = [], field } of CONTEXT_INIT_FLAG_TABLE) {
1922
+ if ([flag, ...aliases].some((name) => parsed.flags.has(name))) options[field] = true;
1923
+ }
1924
+ const reason = validateInitOptions(options);
1925
+ return reason ? { kind: "usage-error", command: "context", reason } : { kind: "init", options: applyInitImplications(options) };
1926
+ }
1927
+ case "refresh":
1928
+ return { kind: "context-refresh" };
1929
+ case "reset":
1930
+ return { kind: "context-clear", options: {} };
1931
+ default:
1932
+ return { kind: "context-view" };
1933
+ }
1934
+ },
1935
+ handle(command, ctx) {
1936
+ switch (command.kind) {
1937
+ case "context-view":
1938
+ ctx.openContextView();
1939
+ return;
1940
+ case "compact":
1941
+ ctx.runCompact(command.instructions);
1942
+ return;
1943
+ case "context-recall":
1944
+ if (ctx.runContextRecall) {
1945
+ ctx.runContextRecall(command.ref);
1946
+ } else {
1947
+ ctx.notice("error", "context recall is not wired; no session is bound to this process");
1948
+ }
1949
+ return;
1950
+ case "init":
1951
+ ctx.runInit(command.options);
1952
+ return;
1953
+ case "context-clear":
1954
+ ctx.runContextClear(command.options);
1955
+ return;
1956
+ case "context-refresh":
1957
+ if (ctx.runContextRefresh) {
1958
+ ctx.runContextRefresh();
1959
+ } else {
1960
+ ctx.notice("error", "context refresh is not wired; pass onContextRefresh to startInteractive");
1961
+ }
1962
+ return;
1963
+ default:
1964
+ return;
1965
+ }
1966
+ }
1967
+ },
1968
+ {
1969
+ name: "fleet",
1970
+ description: "Open Fleet Runs or run a fleet contract with an approval preview",
1971
+ group: "Work",
1972
+ kinds: ["fleet", "fleet-run", "fleet-run-usage"],
1973
+ subcommandDescriptions: { run: "Preview and run a repo-owned fleet contract" },
1974
+ args: {
1975
+ subcommands: {
1976
+ run: {
1977
+ flags: [{ name: "--var", takesValue: true, repeatable: true, valueName: "key=value" }],
1978
+ positionals: [{ name: "name", required: true }]
1979
+ }
1980
+ }
1981
+ },
1982
+ fromArgs(parsed) {
1983
+ if (parsed.subcommand !== "run") {
1984
+ return parsed.error ? { kind: "usage-error", command: "fleet", reason: parsed.error } : { kind: "fleet" };
1985
+ }
1986
+ if (parsed.error) return { kind: "fleet-run-usage", reason: parsed.error };
1987
+ const name = parsed.positionals[0] ?? "";
1988
+ if (name.length === 0) return { kind: "fleet-run-usage" };
1989
+ const vars = {};
1990
+ for (const pair of parsed.flagValues.get("--var") ?? []) {
1991
+ const eq = pair.indexOf("=");
1992
+ const key = eq < 0 ? "" : pair.slice(0, eq).trim();
1993
+ if (key.length === 0) return { kind: "fleet-run-usage", reason: "--var requires key=value" };
1994
+ vars[key] = pair.slice(eq + 1);
1995
+ }
1996
+ return { kind: "fleet-run", name, vars };
1997
+ },
1998
+ handle(command, ctx) {
1999
+ if (command.kind === "fleet") {
2000
+ if (ctx.openFleetRuns) ctx.openFleetRuns();
2001
+ else ctx.notice("error", "Fleet Runs is not wired in this session");
2002
+ return;
2003
+ }
2004
+ if (command.kind === "fleet-run-usage") {
2005
+ const entry = BUILTIN_SLASH_COMMANDS.find((candidate) => candidate.name === "fleet");
2006
+ const usage = entry ? usageNotice(entry, "run") : "usage: /fleet run <name> [--var key=value ...]";
2007
+ ctx.notice("info", command.reason ? `${command.reason}
2008
+ ${usage}` : usage);
2009
+ return;
2010
+ }
2011
+ if (command.kind !== "fleet-run") return;
2012
+ if (!ctx.startFleetRun) {
2013
+ ctx.notice("error", "/fleet run is not wired in this session");
2014
+ return;
2015
+ }
2016
+ ctx.startFleetRun(command.name, command.vars);
2017
+ }
2018
+ },
2019
+ {
2020
+ name: "decisions",
2021
+ description: "Show settled interview decisions and operator revisions",
2022
+ group: "Inspect",
2023
+ kinds: ["decisions"],
2024
+ fromArgs(parsed) {
2025
+ if (parsed.error) return { kind: "usage-error", command: "decisions", reason: parsed.error };
2026
+ return { kind: "decisions" };
2027
+ },
2028
+ handle(_command, ctx) {
2029
+ ctx.openDecisions();
2030
+ }
2031
+ },
2032
+ {
2033
+ name: "tasks",
2034
+ description: "Show the session board or manage project operator tasks",
2035
+ group: "Inspect",
2036
+ kinds: ["tasks", "tasks-add", "tasks-hand", "tasks-done", "tasks-drop"],
2037
+ subcommandDescriptions: {
2038
+ add: "Log a project task without notifying the agent",
2039
+ hand: "Hand an operator task to the agent",
2040
+ done: "Mark an operator task done",
2041
+ drop: "Drop an operator task"
2042
+ },
2043
+ args: {
2044
+ subcommands: {
2045
+ add: {
2046
+ parseFlagsInRest: true,
2047
+ flags: [
2048
+ { name: "--expect", takesValue: true, repeatable: true, valueName: "path" },
2049
+ { name: "--verify", takesValue: true, repeatable: true, valueName: "checkId[:timeoutMs]" }
2050
+ ],
2051
+ positionals: [{ name: "text", required: true, rest: true }]
2052
+ },
2053
+ hand: { positionals: [{ name: "id", required: true }] },
2054
+ done: { positionals: [{ name: "id", required: true }] },
2055
+ drop: { positionals: [{ name: "id", required: true }] }
2056
+ }
2057
+ },
2058
+ fromArgs(parsed) {
2059
+ if (parsed.error) return { kind: "usage-error", command: "tasks", reason: parsed.error };
2060
+ switch (parsed.subcommand) {
2061
+ case "add":
2062
+ return parsed.rest ? {
2063
+ kind: "tasks-add",
2064
+ text: parsed.rest,
2065
+ ...parsed.flagValues.has("--expect") ? { expectedOutputs: parsed.flagValues.get("--expect") ?? [] } : {},
2066
+ ...parsed.flagValues.has("--verify") ? { verification: parsed.flagValues.get("--verify") ?? [] } : {}
2067
+ } : { kind: "usage-error", command: "tasks", reason: "add requires task text" };
2068
+ case "hand":
2069
+ case "done":
2070
+ case "drop": {
2071
+ const id = parsed.positionals[0];
2072
+ if (!id || !/^u[1-9]\d*$/.test(id)) {
2073
+ return { kind: "usage-error", command: "tasks", reason: `${parsed.subcommand} requires a uN id` };
2074
+ }
2075
+ if (parsed.subcommand === "hand") return { kind: "tasks-hand", id };
2076
+ if (parsed.subcommand === "done") return { kind: "tasks-done", id };
2077
+ return { kind: "tasks-drop", id };
2078
+ }
2079
+ default:
2080
+ return { kind: "tasks" };
2081
+ }
2082
+ },
2083
+ handle(command, ctx) {
2084
+ if (command.kind === "tasks") {
2085
+ ctx.openTasks();
2086
+ return;
2087
+ }
2088
+ if (!ctx.userTasks) {
2089
+ ctx.notice("error", "operator task inbox is not wired in this session");
2090
+ return;
2091
+ }
2092
+ try {
2093
+ if (command.kind === "tasks-add") {
2094
+ const task = ctx.userTasks.add(
2095
+ command.text,
2096
+ acceptanceFromTaskFlags(process.cwd(), command.expectedOutputs ?? [], command.verification ?? [])
2097
+ );
2098
+ ctx.notice("success", `logged operator task ${task.id}: ${task.title}`);
2099
+ return;
2100
+ }
2101
+ if (command.kind === "tasks-hand") {
2102
+ const task = ctx.userTasks.hand(command.id);
2103
+ ctx.submitChat(formatUserTaskHandoff(task));
2104
+ return;
2105
+ }
2106
+ if (command.kind === "tasks-done") {
2107
+ const task = ctx.userTasks.done(command.id);
2108
+ ctx.notice("success", `marked operator task ${task.id} done`);
2109
+ return;
2110
+ }
2111
+ if (command.kind === "tasks-drop") {
2112
+ const task = ctx.userTasks.drop(command.id);
2113
+ ctx.notice("success", `dropped operator task ${task.id}`);
2114
+ }
2115
+ } catch (error) {
2116
+ const message = error instanceof Error ? error.message : String(error);
2117
+ ctx.notice("error", message);
2118
+ }
2119
+ }
2120
+ },
2121
+ {
2122
+ name: "memory",
2123
+ description: "Inspect, promote, or seed task memory",
2124
+ group: "Inspect",
2125
+ kinds: ["memory", "memory-seed"],
2126
+ subcommandDescriptions: { seed: "Seed the task bank from the newest handoff" },
2127
+ args: { subcommands: { seed: {} } },
2128
+ fromArgs(parsed) {
2129
+ if (parsed.error) return { kind: "usage-error", command: "memory", reason: parsed.error };
2130
+ return parsed.subcommand === "seed" ? { kind: "memory-seed" } : { kind: "memory" };
2131
+ },
2132
+ handle(command, ctx) {
2133
+ if (command.kind === "memory") {
2134
+ ctx.openMemory();
2135
+ return;
2136
+ }
2137
+ if (command.kind !== "memory-seed") return;
2138
+ const result = ctx.seedTaskMemory?.() ?? { status: "not-found" };
2139
+ switch (result.status) {
2140
+ case "seeded":
2141
+ ctx.notice(
2142
+ "success",
2143
+ `task memory seeded ${result.seeded} entr${result.seeded === 1 ? "y" : "ies"} from ${result.source}${result.skipped > 0 ? `; skipped ${result.skipped} duplicate${result.skipped === 1 ? "" : "s"}` : ""}`
2144
+ );
2145
+ return;
2146
+ case "disabled":
2147
+ ctx.notice("warn", "task memory is disabled; enable context.memory.enabled before seeding");
2148
+ return;
2149
+ case "not-found":
2150
+ ctx.notice("info", "no structured task-memory snapshot found in the newest handoff");
2151
+ }
2152
+ }
2153
+ },
2154
+ {
2155
+ name: "view",
2156
+ description: "Browse session artifacts and verify receipts",
2157
+ group: "Inspect",
2158
+ kinds: ["view", "view-verify", "view-usage"],
2159
+ args: {
2160
+ positionals: [{ name: "filter", required: false, rest: true }],
2161
+ subcommands: {
2162
+ verify: {
2163
+ positionals: [{ name: "runId", required: true }]
2164
+ }
2165
+ }
2166
+ },
2167
+ fromArgs(parsed) {
2168
+ if (parsed.error) return { kind: "view-usage" };
2169
+ if (parsed.subcommand === "verify") {
2170
+ const runId = parsed.positionals[0] ?? "";
2171
+ return { kind: "view-verify", runId };
2172
+ }
2173
+ return parsed.rest ? { kind: "view", filter: parsed.rest } : { kind: "view" };
2174
+ },
2175
+ handle(command, ctx) {
2176
+ const entry = BUILTIN_SLASH_COMMANDS.find((e) => e.name === "view");
2177
+ if (!entry) return;
2178
+ if (command.kind === "view") {
2179
+ ctx.openView(command.filter);
2180
+ return;
2181
+ }
2182
+ if (command.kind === "view-usage") {
2183
+ ctx.notice("info", usageNotice(entry, "verify"));
2184
+ return;
2185
+ }
2186
+ if (command.kind !== "view-verify") return;
2187
+ const result = ctx.verifyReceipt(command.runId);
2188
+ const block = formatReceiptVerificationBlock(command.runId, result);
2189
+ if (result.ok) {
2190
+ ctx.notice(result.compromised ? "warn" : "success", block);
2191
+ } else if (result.retired !== void 0) {
2192
+ ctx.notice("warn", block);
2193
+ } else {
2194
+ ctx.notice("error", block);
2195
+ }
2196
+ }
2197
+ },
2198
+ {
2199
+ name: "panes",
2200
+ description: "Inspect the pane layer, watch a live run in a pane, or open a utility pane",
2201
+ group: "Inspect",
2202
+ kinds: ["panes", "panes-show", "panes-open", "panes-zoom", "panes-close", "panes-usage"],
2203
+ args: {
2204
+ subcommands: {
2205
+ show: { positionals: [{ name: "run-or-agent", required: true }] },
2206
+ // A rest positional, so an argv pane keeps its own flags: the parser
2207
+ // would otherwise refuse `--follow` as an unknown flag of `/panes`.
2208
+ open: { positionals: [{ name: "preset-or-argv", required: true, rest: true }] },
2209
+ zoom: { positionals: [{ name: "target", required: false }] },
2210
+ close: { positionals: [{ name: "target", required: false }] }
2211
+ }
2212
+ },
2213
+ subcommandDescriptions: {
2214
+ show: "watch a live run or agent in the watch pane",
2215
+ open: `open a utility pane (${PANES_PRESET_IDS.join(", ")}, \`files --once\` for one pick, or a command)`,
2216
+ zoom: "toggle zoom on a Clio-owned pane (default: the watch pane)",
2217
+ close: "close a Clio-owned pane, or all of them"
2218
+ },
2219
+ fromArgs(parsed) {
2220
+ if (parsed.error) return { kind: "panes-usage", reason: parsed.error };
2221
+ if (parsed.subcommand === "show") {
2222
+ return { kind: "panes-show", target: parsed.positionals[0] ?? "" };
2223
+ }
2224
+ if (parsed.subcommand === "open") {
2225
+ const rest = (parsed.rest ?? "").trim();
2226
+ if (rest.length === 0) return { kind: "panes-usage", reason: "Missing required argument: preset-or-argv" };
2227
+ const argv = rest.split(/\s+/).filter((token) => token.length > 0);
2228
+ const first = argv[0] ?? "";
2229
+ const preset = resolvePanesPresetId(first);
2230
+ if (argv.length === 1 && preset !== null) return { kind: "panes-open", preset };
2231
+ if (argv.length === 2 && preset === "files" && argv[1] === "--once") {
2232
+ return { kind: "panes-open", preset: "files", once: true };
2233
+ }
2234
+ return { kind: "panes-open", argv };
2235
+ }
2236
+ if (parsed.subcommand === "zoom") {
2237
+ return { kind: "panes-zoom", target: parsed.positionals[0] ?? "" };
2238
+ }
2239
+ if (parsed.subcommand === "close") {
2240
+ return { kind: "panes-close", target: parsed.positionals[0] ?? "all" };
2241
+ }
2242
+ if (parsed.positionals.length > 0) {
2243
+ return { kind: "panes-usage", reason: `Unexpected argument: ${parsed.positionals[0]}` };
2244
+ }
2245
+ return { kind: "panes" };
2246
+ },
2247
+ handle(command, ctx) {
2248
+ const entry = BUILTIN_SLASH_COMMANDS.find((candidate) => candidate.name === "panes");
2249
+ if (command.kind === "panes-usage") {
2250
+ if (entry) ctx.notice("info", command.reason ? `${command.reason}
2251
+ ${usageNotice(entry)}` : usageNotice(entry));
2252
+ return;
2253
+ }
2254
+ const panes = ctx.panes;
2255
+ if (!panes) {
2256
+ ctx.notice(
2257
+ "info",
2258
+ "panes are inactive: this session started without them. Restart with `clio-coder --with-panes`, or set interface.panes.enabled=auto"
2259
+ );
2260
+ return;
2261
+ }
2262
+ const runLocal = ctx.runLocalOperation ?? ((operation) => void operation());
2263
+ if (command.kind === "panes") {
2264
+ runLocal(async () => {
2265
+ for (const line of formatPanesStatus(panes.status())) ctx.io.stdout(`${line}
2266
+ `);
2267
+ ctx.render();
2268
+ });
2269
+ return;
2270
+ }
2271
+ if (command.kind === "panes-show") {
2272
+ runLocal(async () => {
2273
+ const result = await panes.show(command.target);
2274
+ if (result.status === "watching") {
2275
+ ctx.notice("success", `watching ${result.agentId} (${result.runId})${result.opened ? " in a new pane" : ""}`);
2276
+ } else if (result.status === "not-found") {
2277
+ const known = result.candidates.length > 0 ? `; live runs: ${result.candidates.join(", ")}` : "";
2278
+ ctx.notice("warn", `no live run matches ${result.target}${known}`);
2279
+ } else {
2280
+ ctx.notice("warn", result.reason);
2281
+ }
2282
+ });
2283
+ return;
2284
+ }
2285
+ if (command.kind === "panes-open") {
2286
+ runLocal(async () => {
2287
+ const result = await panes.open({
2288
+ ...command.preset ? { preset: command.preset } : {},
2289
+ ...command.argv ? { argv: command.argv } : {},
2290
+ ...command.once ? { once: true } : {}
2291
+ });
2292
+ if (result.status === "opened") {
2293
+ if (result.paneId !== null) {
2294
+ ctx.notice(
2295
+ "success",
2296
+ result.existing ? `focused pane ${result.label} (${result.paneId})` : `opened pane ${result.label} (${result.paneId})`
2297
+ );
2298
+ }
2299
+ } else if (result.status === "missing-binary") {
2300
+ ctx.io.stdout(`${result.detail}
2301
+ `);
2302
+ ctx.render();
2303
+ } else {
2304
+ ctx.notice("warn", result.reason);
2305
+ }
2306
+ });
2307
+ return;
2308
+ }
2309
+ if (command.kind === "panes-zoom") {
2310
+ runLocal(async () => {
2311
+ const result = await panes.zoom(command.target);
2312
+ if (result.status === "zoomed") {
2313
+ ctx.notice("success", `toggled zoom on ${result.label} (${result.paneId})`);
2314
+ } else if (result.status === "not-found") {
2315
+ ctx.notice("warn", `no Clio-owned pane matches ${result.target}`);
2316
+ } else {
2317
+ ctx.notice("warn", result.reason);
2318
+ }
2319
+ });
2320
+ return;
2321
+ }
2322
+ if (command.kind !== "panes-close") return;
2323
+ runLocal(async () => {
2324
+ const result = await panes.close(command.target);
2325
+ if (result.status === "closed") {
2326
+ const what = result.labels.length > 0 ? `: ${result.labels.join(", ")}` : "";
2327
+ ctx.notice(result.closed > 0 ? "success" : "info", `closed ${result.closed} pane(s)${what}`);
2328
+ } else if (result.status === "not-found") {
2329
+ ctx.notice("warn", `no Clio-owned pane matches ${result.target}`);
2330
+ } else {
2331
+ ctx.notice("warn", result.reason);
2332
+ }
2333
+ });
2334
+ }
2335
+ },
2336
+ {
2337
+ name: "files",
2338
+ description: "Toggle the files pane; picks land in the composer as @ mentions",
2339
+ group: "Inspect",
2340
+ kinds: ["files", "files-usage"],
2341
+ args: { positionals: [{ name: "action", required: false }] },
2342
+ subcommandDescriptions: {
2343
+ open: "open the files pane, or focus it when it is already open",
2344
+ close: "close the files pane",
2345
+ pick: "borrow the files pane for one selection, then close it"
2346
+ },
2347
+ fromArgs(parsed) {
2348
+ if (parsed.error) return { kind: "files-usage", reason: parsed.error };
2349
+ const action = parsed.positionals[0];
2350
+ if (action === void 0) return { kind: "files", action: "toggle" };
2351
+ if (action === "open" || action === "close" || action === "pick" || action === "toggle") {
2352
+ return { kind: "files", action };
2353
+ }
2354
+ return { kind: "files-usage", reason: `Unexpected argument: ${action}` };
2355
+ },
2356
+ handle(command, ctx) {
2357
+ if (command.kind === "files-usage") {
2358
+ ctx.notice("info", `${command.reason}
2359
+ usage: /files [open|close|pick]`);
2360
+ return;
2361
+ }
2362
+ if (command.kind !== "files") return;
2363
+ const panes = ctx.panes;
2364
+ if (!panes) {
2365
+ ctx.notice(
2366
+ "info",
2367
+ "the files pane is inactive: this session started without panes. Restart with `clio-coder --with-panes`, or set interface.panes.enabled=auto"
2368
+ );
2369
+ return;
2370
+ }
2371
+ const runLocal = ctx.runLocalOperation ?? ((operation) => void operation());
2372
+ runLocal(async () => {
2373
+ const result = await panes.files(command.action);
2374
+ if (result.status === "opened") {
2375
+ if (result.paneId !== null) {
2376
+ ctx.notice(
2377
+ "success",
2378
+ result.existing ? `files pane focused (${result.paneId})` : `files pane opened (${result.paneId})`
2379
+ );
2380
+ }
2381
+ } else if (result.status === "closed") {
2382
+ ctx.notice("info", "files pane closed");
2383
+ } else if (result.status === "missing-binary") {
2384
+ ctx.io.stdout(`${result.detail}
2385
+ `);
2386
+ ctx.render();
2387
+ } else {
2388
+ ctx.notice("warn", result.reason);
2389
+ }
2390
+ });
2391
+ }
2392
+ },
2393
+ {
2394
+ name: "thinking",
2395
+ description: "Set the chat thinking level",
2396
+ group: "Configure",
2397
+ kinds: ["thinking-set", "thinking-picker"],
2398
+ args: { positionals: [{ name: "level", required: false }] },
2399
+ fromArgs(parsed) {
2400
+ if (parsed.error) return { kind: "usage-error", command: "thinking", reason: parsed.error };
2401
+ const level = parsed.positionals[0];
2402
+ return level ? { kind: "thinking-set", level } : { kind: "thinking-picker" };
2403
+ },
2404
+ handle(command, ctx) {
2405
+ if (command.kind === "thinking-picker") {
2406
+ if (ctx.openThinkingPicker) ctx.openThinkingPicker();
2407
+ else ctx.notice("error", "thinking picker is not wired in this session");
2408
+ return;
2409
+ }
2410
+ if (command.kind !== "thinking-set") return;
2411
+ const result = ctx.setThinkingLevel?.(command.level) ?? { status: "unavailable" };
2412
+ if (result.status === "applied") {
2413
+ ctx.notice("success", `thinking: ${result.display}`);
2414
+ } else if (result.status === "unsupported") {
2415
+ ctx.notice("error", `thinking level "${result.level}" is not available here; try ${result.supported.join(", ")}`);
2416
+ } else {
2417
+ ctx.notice("error", "thinking level cannot be set right now");
2418
+ }
2419
+ ctx.render();
2420
+ }
2421
+ },
2422
+ {
2423
+ name: "model",
2424
+ description: "Open model selector or set a model",
2425
+ group: "Configure",
2426
+ kinds: ["model", "model-set"],
2427
+ args: {
2428
+ positionals: [{ name: "pattern", required: false, rest: true }]
2429
+ },
2430
+ fromArgs(parsed) {
2431
+ const pattern = parsed.positionals[0];
2432
+ if (pattern) {
2433
+ return { kind: "model-set", pattern };
2434
+ }
2435
+ return { kind: "model" };
2436
+ },
2437
+ handle(command, ctx) {
2438
+ if (command.kind === "model") {
2439
+ ctx.openModel();
2440
+ return;
2441
+ }
2442
+ if (command.kind !== "model-set") return;
2443
+ void (async () => {
2444
+ try {
2445
+ await ctx.providers.probeAllLive();
2446
+ } catch (err) {
2447
+ const msg = err instanceof Error ? err.message : String(err);
2448
+ ctx.notice("warn", `model refresh failed; resolving cached catalog: ${msg}`);
2449
+ }
2450
+ const result = resolveModelReference(command.pattern, ctx.providers);
2451
+ if (!result.ref) {
2452
+ ctx.notice("error", result.error ?? `no match for "${command.pattern}"`);
2453
+ ctx.render();
2454
+ return;
2455
+ }
2456
+ if (result.warning) ctx.notice("warn", result.warning);
2457
+ if (ctx.applyModelRef(result.ref) === "applied") {
2458
+ const suffix = result.ref.thinkingLevel ? ` thinking=${result.ref.thinkingLevel}` : "";
2459
+ ctx.notice("success", `active this session: ${result.ref.target}/${result.ref.model}${suffix}`);
2460
+ }
2461
+ ctx.render();
2462
+ })();
2463
+ }
2464
+ },
2465
+ {
2466
+ name: "settings",
2467
+ description: "Open interactive settings",
2468
+ group: "Configure",
2469
+ kinds: ["settings"],
2470
+ args: {
2471
+ positionals: [
2472
+ { name: "area", required: false },
2473
+ { name: "group", required: false }
2474
+ ]
2475
+ },
2476
+ fromArgs(parsed) {
2477
+ if (parsed.error) return { kind: "usage-error", command: "settings", reason: parsed.error };
2478
+ const name = parsed.positionals[0];
2479
+ if (name === void 0) return { kind: "settings" };
2480
+ const area = resolveSettingsSection(name);
2481
+ if (!area) {
2482
+ return {
2483
+ kind: "usage-error",
2484
+ command: "settings",
2485
+ reason: `Unknown area: ${name} (one of ${SETTINGS_AREA_IDS.join(", ")})`
2486
+ };
2487
+ }
2488
+ return { kind: "settings", area, ...parsed.positionals[1] ? { group: parsed.positionals[1] } : {} };
2489
+ },
2490
+ handle(command, ctx) {
2491
+ if (command.kind === "settings") ctx.openSettings(command.area, command.group);
2492
+ }
2493
+ },
2494
+ {
2495
+ name: "resume",
2496
+ description: "Resume a past session",
2497
+ group: "Session",
2498
+ kinds: ["resume"],
2499
+ args: {},
2500
+ fromArgs: fromArgsOrUsage("resume", { kind: "resume" }),
2501
+ handle(_command, ctx) {
2502
+ ctx.openResume();
2503
+ }
2504
+ },
2505
+ {
2506
+ name: "new",
2507
+ description: "Start a fresh session",
2508
+ group: "Session",
2509
+ kinds: ["new"],
2510
+ args: {},
2511
+ fromArgs: fromArgsOrUsage("new", { kind: "new" }),
2512
+ handle(_command, ctx) {
2513
+ ctx.startNewSession();
2514
+ }
2515
+ },
2516
+ {
2517
+ name: "handoff",
2518
+ description: "Hand this session's working state to a fresh session for a stated goal",
2519
+ group: "Session",
2520
+ kinds: ["handoff", "handoff-usage"],
2521
+ args: {
2522
+ positionals: [{ name: "goal", required: true, rest: true }]
2523
+ },
2524
+ fromArgs(parsed) {
2525
+ const goal = parsed.rest?.trim() ?? "";
2526
+ if (parsed.error || goal.length === 0) return { kind: "handoff-usage" };
2527
+ return { kind: "handoff", goal };
2528
+ },
2529
+ handle(command, ctx) {
2530
+ if (command.kind === "handoff-usage") {
2531
+ const entry = BUILTIN_SLASH_COMMANDS.find((candidate) => candidate.name === "handoff");
2532
+ if (entry) ctx.notice("info", usageNotice(entry));
2533
+ return;
2534
+ }
2535
+ if (command.kind !== "handoff") return;
2536
+ ctx.startHandoff(command.goal);
2537
+ }
2538
+ },
2539
+ {
2540
+ name: "tree",
2541
+ description: "Open session tree navigator",
2542
+ group: "Session",
2543
+ kinds: ["tree"],
2544
+ args: {},
2545
+ fromArgs: fromArgsOrUsage("tree", { kind: "tree" }),
2546
+ handle(_command, ctx) {
2547
+ ctx.openTree();
2548
+ }
2549
+ },
2550
+ {
2551
+ name: "fork",
2552
+ description: "Fork from an assistant turn",
2553
+ group: "Session",
2554
+ kinds: ["fork"],
2555
+ args: {},
2556
+ fromArgs: fromArgsOrUsage("fork", { kind: "fork" }),
2557
+ handle(_command, ctx) {
2558
+ ctx.openMessagePicker();
2559
+ }
2560
+ },
2561
+ {
2562
+ name: "export",
2563
+ description: "Export a self-contained HTML transcript by default; a .md path writes Markdown",
2564
+ group: "Session",
2565
+ kinds: ["export"],
2566
+ args: {
2567
+ positionals: [{ name: "path", required: false }]
2568
+ },
2569
+ fromArgs(parsed) {
2570
+ if (parsed.error) return { kind: "usage-error", command: "export", reason: parsed.error };
2571
+ return { kind: "export", path: parsed.positionals[0] };
2572
+ },
2573
+ handle(command, ctx) {
2574
+ if (command.kind !== "export") return;
2575
+ ctx.exportTranscript(command.path);
2576
+ }
2577
+ }
2578
+ ];
2579
+ var HANDLER_BY_KIND = /* @__PURE__ */ new Map();
2580
+ var COMMAND_NAMES = /* @__PURE__ */ new Set();
2581
+ for (const entry of BUILTIN_SLASH_COMMANDS) {
2582
+ if (COMMAND_NAMES.has(entry.name)) {
2583
+ throw new Error(`BUILTIN_SLASH_COMMANDS: command name "${entry.name}" is registered more than once`);
2584
+ }
2585
+ COMMAND_NAMES.add(entry.name);
2586
+ for (const kind of entry.kinds) {
2587
+ if (HANDLER_BY_KIND.has(kind)) {
2588
+ throw new Error(`BUILTIN_SLASH_COMMANDS: kind "${kind}" is owned by multiple entries`);
2589
+ }
2590
+ HANDLER_BY_KIND.set(kind, entry);
2591
+ }
2592
+ }
2593
+ var COMMAND_SHAPED_TOKEN = /^[A-Za-z][A-Za-z0-9:-]*$/u;
2594
+ var COMMAND_ESCAPE = "\\/";
2595
+ function formatExtensionReloadNotice(outcome) {
2596
+ if (outcome.status !== "committed") {
2597
+ return ["error", `extensions: reload rejected (${outcome.reason}); generation ${outcome.generation} stays active`];
2598
+ }
2599
+ const delta = outcome.changed ? `changed: +${outcome.added.length} -${outcome.removed.length} ~${outcome.modified.length}` : "unchanged";
2600
+ const issueCount = outcome.hooks.fileIssues + outcome.hooks.issues;
2601
+ const hookParts = [`${outcome.hooks.registered} registered`];
2602
+ if (outcome.hooks.dropped > 0) hookParts.push(`${outcome.hooks.dropped} dropped`);
2603
+ if (issueCount > 0) hookParts.push(`${issueCount} issue${issueCount === 1 ? "" : "s"}`);
2604
+ if (outcome.hooks.overridden > 0) hookParts.push(`${outcome.hooks.overridden} overridden`);
2605
+ const level = outcome.hooks.dropped > 0 || issueCount > 0 ? "warn" : "success";
2606
+ return [level, `extensions: generation ${outcome.generation} committed (${delta}); hooks: ${hookParts.join(", ")}`];
2607
+ }
2608
+ function reloadExtensionsCommand(ctx) {
2609
+ if (ctx.operatorExtensions) {
2610
+ void ctx.operatorExtensions.reload().then((result) => {
2611
+ if (result.status === "deferred") ctx.notice("info", result.message);
2612
+ });
2613
+ return;
2614
+ }
2615
+ if (!ctx.reloadExtensions) {
2616
+ ctx.notice("warn", "extensions: reload is unavailable in this session; restart to pick up installed changes");
2617
+ return;
2618
+ }
2619
+ const outcome = ctx.reloadExtensions();
2620
+ const [level, text] = formatExtensionReloadNotice(outcome);
2621
+ ctx.notice(level, text);
2622
+ for (const line of outcome.lines) ctx.notice("warn", line);
2623
+ if (outcome.status === "committed") ctx.openExtensions();
2624
+ }
2625
+ function parseSlashCommand(input) {
2626
+ const trimmed = input.trim();
2627
+ if (trimmed.length === 0) return { kind: "empty" };
2628
+ const retiredLibrary = /^\/(resources|plugins)(?:\s|$)/u.exec(trimmed);
2629
+ if (retiredLibrary) {
2630
+ return {
2631
+ kind: "usage-error",
2632
+ command: retiredLibrary[1] ?? "library",
2633
+ reason: "Use /library to browse and manage recipes; use /extensions for harness extensions"
2634
+ };
2635
+ }
2636
+ if (/^\/output(?:\s|$)/u.test(trimmed)) {
2637
+ return {
2638
+ kind: "usage-error",
2639
+ command: "output",
2640
+ reason: "Use /help for the effective Output cycle keys, or /settings interface to save a default. Use /view for full details"
2641
+ };
2642
+ }
2643
+ if (trimmed.startsWith(COMMAND_ESCAPE)) return { kind: "unknown", text: trimmed.slice(1) };
2644
+ for (const entry of BUILTIN_SLASH_COMMANDS) {
2645
+ const match = entry.match ? entry.match(trimmed) : matchFromSpec(entry, trimmed);
2646
+ if (match) return match;
2647
+ }
2648
+ if (trimmed.startsWith("/")) {
2649
+ const token = trimmed.slice(1).split(/\s+/u)[0] ?? "";
2650
+ if (COMMAND_SHAPED_TOKEN.test(token) || isExtensionCommandToken(token))
2651
+ return { kind: "unknown-command", token, text: trimmed };
2652
+ }
2653
+ return { kind: "unknown", text: trimmed };
2654
+ }
2655
+ function dispatchSlashCommand(command, ctx) {
2656
+ if (command.kind === "empty") return "rejected";
2657
+ if (command.kind === "unknown") {
2658
+ ctx.submitChat(command.text);
2659
+ return "accepted";
2660
+ }
2661
+ if (command.kind === "unknown-command") {
2662
+ const expansion = ctx.expandPromptTemplate?.(command.text);
2663
+ if (expansion?.expanded === true) {
2664
+ ctx.submitChat(command.text);
2665
+ return "accepted";
2666
+ }
2667
+ if (expansion?.expanded === false && expansion.display) {
2668
+ const { template, text } = expansion.display;
2669
+ const card = {
2670
+ command: template.name,
2671
+ source: promptSourceLabel(template.sourceInfo),
2672
+ text
2673
+ };
2674
+ if (ctx.showReference) ctx.showReference(card);
2675
+ else ctx.io.stdout(`/${card.command} (${card.source})
2676
+ ${card.text}
2677
+ `);
2678
+ ctx.render();
2679
+ return "accepted";
2680
+ }
2681
+ const refusal = expansion?.expanded === false ? expansion.refusal : void 0;
2682
+ if (!refusal && isExtensionCommandToken(command.token) && ctx.operatorExtensions) {
2683
+ const runtime = ctx.operatorExtensions;
2684
+ const promptNames = ctx.listPrompts().items.map((prompt) => prompt.name);
2685
+ const row = runtime.commands(promptNames).find((row2) => row2.invocation === command.token);
2686
+ if (!row?.available) {
2687
+ ctx.notice("error", row?.reason ?? `/${command.token} is not an available extension command`);
2688
+ ctx.render();
2689
+ return "rejected";
2690
+ }
2691
+ const args = command.text.slice(command.token.length + 1).trim();
2692
+ const runLocal = ctx.runLocalOperation ?? ((operation) => void operation());
2693
+ runLocal(async () => {
2694
+ try {
2695
+ const output = await runtime.invoke(
2696
+ command.token,
2697
+ args,
2698
+ ctx.listPrompts().items.map((prompt) => prompt.name)
2699
+ );
2700
+ if (ctx.showExtensionOutput) ctx.showExtensionOutput(command.token, output);
2701
+ else ctx.io.stdout(`${output.text}
2702
+ `);
2703
+ } catch (error) {
2704
+ ctx.notice("error", `${command.token}: ${error instanceof Error ? error.message : String(error)}`);
2705
+ }
2706
+ });
2707
+ return "accepted";
2708
+ }
2709
+ ctx.notice("error", refusal ? refusal.message : `/${command.token} is not a command. Type /help for the list.`);
2710
+ ctx.render();
2711
+ return "rejected";
2712
+ }
2713
+ if (command.kind === "usage-error") {
2714
+ const entry2 = BUILTIN_SLASH_COMMANDS.find((candidate) => candidate.name === command.command);
2715
+ const usage = entry2 ? ` ${usageNotice(entry2)}` : "";
2716
+ const reason = command.command === "output" && ctx.keyboardActions ? `Use ${ctx.keyboardActions.outputLabel()} to cycle Output style, or /settings interface to save a default` : command.reason;
2717
+ ctx.notice("error", `${reason}.${usage}`);
2718
+ ctx.render();
2719
+ return "rejected";
2720
+ }
2721
+ const entry = HANDLER_BY_KIND.get(command.kind);
2722
+ if (!entry) return "rejected";
2723
+ return entry.handle(command, ctx) === "rejected" ? "rejected" : "accepted";
2724
+ }
2725
+ var COMMAND_ORDER = [
2726
+ "run",
2727
+ "fleet",
2728
+ "delegate",
2729
+ "council",
2730
+ "oracle",
2731
+ "btw",
2732
+ "share",
2733
+ "skill",
2734
+ "agents",
2735
+ "interop",
2736
+ "tasks",
2737
+ "context",
2738
+ "memory",
2739
+ "view",
2740
+ "panes",
2741
+ "cost",
2742
+ "doctor",
2743
+ "decisions",
2744
+ "library",
2745
+ "skills",
2746
+ "prompts",
2747
+ "extensions",
2748
+ "help",
2749
+ "model",
2750
+ "thinking",
2751
+ "settings",
2752
+ "new",
2753
+ "resume",
2754
+ "handoff",
2755
+ "fork",
2756
+ "tree",
2757
+ "export",
2758
+ "archive",
2759
+ "quit"
2760
+ ];
2761
+ var COMMAND_ORDER_INDEX = new Map(COMMAND_ORDER.map((name, index) => [name, index]));
2762
+ function commandReference() {
2763
+ return BUILTIN_SLASH_COMMANDS.filter((entry) => entry.hidden !== true).slice().sort((a, b) => (COMMAND_ORDER_INDEX.get(a.name) ?? 99) - (COMMAND_ORDER_INDEX.get(b.name) ?? 99)).map((entry) => {
2764
+ const usage = usageLine(entry).replace(/^\nusage:\s*/, "").replace(/\n$/, "");
2765
+ return {
2766
+ name: entry.name,
2767
+ usage,
2768
+ description: entry.description,
2769
+ group: entry.group,
2770
+ ...entry.args ? { args: entry.args } : {},
2771
+ ...entry.subcommandDescriptions ? { subcommandDescriptions: entry.subcommandDescriptions } : {}
2772
+ };
2773
+ });
2774
+ }
2775
+
2776
+ export {
2777
+ COUNCIL_SYNTHESIS_LABEL,
2778
+ COMPLETION_SLOT_NAMES,
2779
+ renderArgsSpec,
2780
+ completeArgs,
2781
+ isHelperRun,
2782
+ workerAskedByModel,
2783
+ workerTargetLabel,
2784
+ workerReceiptSummary,
2785
+ createWorkerStream,
2786
+ isWorkerShareNote,
2787
+ SETTINGS_AREA_IDS,
2788
+ handleRun,
2789
+ SLASH_COMMAND_GROUPS,
2790
+ BUILTIN_SLASH_COMMANDS,
2791
+ formatExtensionReloadNotice,
2792
+ parseSlashCommand,
2793
+ dispatchSlashCommand,
2794
+ commandReference
2795
+ };
2796
+ //# sourceMappingURL=chunk-3LT34CAM.js.map