@iowarp/clio-coder 0.4.0 → 0.4.2

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 (751) hide show
  1. package/CHANGELOG.md +131 -0
  2. package/CONTRIBUTING.md +59 -36
  3. package/README.md +407 -375
  4. package/SECURITY.md +2 -1
  5. package/dist/{acp-G5WJBNCT.js → acp-TMDQZDIG.js} +14 -14
  6. package/dist/{agents-FMV2Q5G4.js → agents-5N5NG3XG.js} +45 -34
  7. package/dist/assets/codewiki.json +1 -1
  8. package/dist/{auth-3IDSJEIK.js → auth-Z5CCBXKQ.js} +22 -21
  9. package/dist/{builtins-XCZWXSC7.js → builtins-K6TNDT24.js} +6 -6
  10. package/dist/{chunk-GR5G2PVF.js → chunk-2HFQNRV3.js} +15 -10
  11. package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
  12. package/dist/{chunk-HJJTYUHX.js → chunk-2NHR3NAY.js} +168 -1406
  13. package/dist/chunk-2X4RYJTJ.js +39 -0
  14. package/dist/{chunk-UXMFQ54G.js → chunk-2Z2IKEXI.js} +39 -43
  15. package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
  16. package/dist/chunk-34BHNEE3.js +1846 -0
  17. package/dist/{chunk-YJX4SHTD.js → chunk-35MSIRKH.js} +9 -4
  18. package/dist/chunk-3EBYEESD.js +314 -0
  19. package/dist/{chunk-CTJ4RNAA.js → chunk-3F7VUY77.js} +2 -2
  20. package/dist/chunk-3KIPBMUA.js +308 -0
  21. package/dist/chunk-3M6DQK6S.js +362 -0
  22. package/dist/{chunk-BPKCPIL7.js → chunk-462T4EGZ.js} +3 -3
  23. package/dist/{chunk-QLFS5GO2.js → chunk-4JDLP6ZS.js} +44 -37
  24. package/dist/{chunk-LDQ2ZF2M.js → chunk-4O6MANBS.js} +6 -6
  25. package/dist/{chunk-O6TL7WWY.js → chunk-54ODD65L.js} +6 -6
  26. package/dist/{chunk-JDG2WCRO.js → chunk-5KW52TEP.js} +5 -5
  27. package/dist/{chunk-NHLBIGRH.js → chunk-5PFYMY2V.js} +41 -18
  28. package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
  29. package/dist/chunk-77QIVUZB.js +1334 -0
  30. package/dist/{chunk-HWHKMHUA.js → chunk-7BHIY2MW.js} +9 -15
  31. package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
  32. package/dist/{chunk-VAZSBTKF.js → chunk-AZ4WMN4W.js} +2 -2
  33. package/dist/{chunk-B7OBL7PK.js → chunk-B74PXLU7.js} +21 -11
  34. package/dist/{chunk-CY6FY24N.js → chunk-B7HM5Z7T.js} +15 -15
  35. package/dist/{chunk-ULC6OTWO.js → chunk-BO7Y52RY.js} +88 -27
  36. package/dist/chunk-BTK3SSSK.js +67 -0
  37. package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
  38. package/dist/{chunk-DQITNCXG.js → chunk-BYMNWQ7O.js} +149 -159
  39. package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
  40. package/dist/{chunk-Z4TXYIEG.js → chunk-CRFOIAX3.js} +10 -10
  41. package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
  42. package/dist/{chunk-3BT2XMV4.js → chunk-CYZW7JHJ.js} +53 -60
  43. package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
  44. package/dist/chunk-D7E7WCDF.js +27 -0
  45. package/dist/{chunk-X3YGUTOB.js → chunk-DYHAXKHD.js} +90 -62
  46. package/dist/{chunk-QBJA7R7N.js → chunk-DZAW46HP.js} +3 -3
  47. package/dist/{chunk-MLKNTWH2.js → chunk-DZEK6CJN.js} +22 -22
  48. package/dist/{chunk-K5C3NCBD.js → chunk-E7GT7O5N.js} +5 -5
  49. package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
  50. package/dist/chunk-F2I26BDK.js +66 -0
  51. package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
  52. package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
  53. package/dist/{chunk-32KWKNSF.js → chunk-FVDGR2ZL.js} +4 -4
  54. package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
  55. package/dist/{chunk-SJ5ZKQ4S.js → chunk-HIICAHCJ.js} +2 -2
  56. package/dist/chunk-HJWWJ6IL.js +184 -0
  57. package/dist/{chunk-WZR7K7ZX.js → chunk-HKMD33FO.js} +32 -83
  58. package/dist/chunk-HLAFFSEK.js +360 -0
  59. package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
  60. package/dist/{chunk-KFZI4NIL.js → chunk-I64IFBLB.js} +152 -31
  61. package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
  62. package/dist/{chunk-BUMFYQFY.js → chunk-I66ZTYNP.js} +543 -267
  63. package/dist/{chunk-2OQE55CK.js → chunk-I7XBWTYH.js} +2 -2
  64. package/dist/{chunk-GKF55TAZ.js → chunk-IDNA72AH.js} +104 -3
  65. package/dist/{chunk-GCSMB2KY.js → chunk-IKOZFYBN.js} +1 -1
  66. package/dist/{chunk-J4W7KFM7.js → chunk-IKSLQ4XV.js} +5439 -3475
  67. package/dist/{chunk-6DB53AJS.js → chunk-IMXMHHMQ.js} +171 -30
  68. package/dist/{chunk-AB44T6BB.js → chunk-JBCS7CRR.js} +8 -7
  69. package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
  70. package/dist/{chunk-SP2RXXYO.js → chunk-JWJGP5DQ.js} +10 -10
  71. package/dist/{chunk-HZHHCK24.js → chunk-KKOJXO6R.js} +527 -325
  72. package/dist/chunk-KPXDY6QF.js +47 -0
  73. package/dist/{chunk-LQ3DZAMX.js → chunk-LJID3DYZ.js} +8 -2
  74. package/dist/{chunk-7MCTRUCE.js → chunk-M2DAX4F6.js} +2 -2
  75. package/dist/{chunk-VEO4AP2K.js → chunk-M2WXEHER.js} +4 -3
  76. package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
  77. package/dist/{chunk-YDFRH54B.js → chunk-MCMZMDAC.js} +4 -4
  78. package/dist/{chunk-J5Q24KAG.js → chunk-MNJGS2IN.js} +5 -6
  79. package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
  80. package/dist/chunk-NDDGJUXD.js +81 -0
  81. package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
  82. package/dist/chunk-NMJXSHBJ.js +283 -0
  83. package/dist/{chunk-VYMXRQI6.js → chunk-O3YUNJZ2.js} +88 -100
  84. package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
  85. package/dist/{chunk-Z2RR6MAK.js → chunk-P75RZCJW.js} +28 -6
  86. package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
  87. package/dist/{chunk-DYJP44XW.js → chunk-PGF63K6I.js} +2 -2
  88. package/dist/chunk-PJX3WQUQ.js +42 -0
  89. package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
  90. package/dist/{chunk-2JDWVJND.js → chunk-Q4XWMHX6.js} +5 -7
  91. package/dist/{chunk-W5VSYASO.js → chunk-QQLGQY2A.js} +46 -87
  92. package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
  93. package/dist/{chunk-C2LTL2W6.js → chunk-RLYRBIYQ.js} +463 -180
  94. package/dist/{chunk-4ZG3XFUR.js → chunk-S66XZJOF.js} +14 -23
  95. package/dist/{chunk-I5VEOC6I.js → chunk-SSEYRH53.js} +13 -14
  96. package/dist/chunk-SZAA6XDG.js +30 -0
  97. package/dist/{chunk-CODPRO7Q.js → chunk-TPEQIQIE.js} +7 -7
  98. package/dist/{chunk-QLL7ILRG.js → chunk-UBRFI4HS.js} +1151 -614
  99. package/dist/{chunk-O4XIVISU.js → chunk-UH347SHR.js} +227 -47
  100. package/dist/{chunk-OQBA45DZ.js → chunk-UH632ZYL.js} +2 -2
  101. package/dist/chunk-UXCU4E3T.js +303 -0
  102. package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
  103. package/dist/{chunk-IQ7KR472.js → chunk-VIA6RFQZ.js} +8 -13
  104. package/dist/{chunk-V5DHCITQ.js → chunk-VKPAQYEB.js} +49 -19
  105. package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
  106. package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
  107. package/dist/{chunk-3XML7CDN.js → chunk-W4YEMFBX.js} +3 -3
  108. package/dist/{chunk-U77AMWDL.js → chunk-W6NIE6OW.js} +44 -23
  109. package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
  110. package/dist/{chunk-QREDIESB.js → chunk-X7IARSHT.js} +15 -9
  111. package/dist/{chunk-3URVFKWK.js → chunk-XE3PCIXH.js} +5 -5
  112. package/dist/{chunk-FEFIFZTL.js → chunk-XGDPUNND.js} +2 -2
  113. package/dist/{chunk-F4CKPOEQ.js → chunk-XOXV5GKE.js} +119 -38
  114. package/dist/chunk-XQRY4DTA.js +657 -0
  115. package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
  116. package/dist/{chunk-NQQH3YT7.js → chunk-YJISEZKC.js} +3 -3
  117. package/dist/{chunk-X75E3D2N.js → chunk-ZGNYYXQ6.js} +18 -16
  118. package/dist/{chunk-LY4S7GJC.js → chunk-ZNT2M6TG.js} +20 -18
  119. package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
  120. package/dist/{chunk-IBEBSCYA.js → chunk-ZW4HH5JJ.js} +43 -34
  121. package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
  122. package/dist/cli/index.js +38 -37
  123. package/dist/{clio-2JXHBBY5.js → clio-7VB377CC.js} +12 -13
  124. package/dist/{code-nav-3YYRMYNF.js → code-nav-YVLCYA7V.js} +86 -18
  125. package/dist/codewiki/build-worker.js +1 -1
  126. package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
  127. package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
  128. package/dist/{config-QZPCMYSO.js → config-4HVOS65E.js} +112 -63
  129. package/dist/{configure-TEGEBYCA.js → configure-PIWO7B24.js} +25 -22
  130. package/dist/{context-E6H5RNMC.js → context-IYEHL3WQ.js} +53 -47
  131. package/dist/{context-GSXUE4CT.js → context-KQYIWPWT.js} +68 -42
  132. package/dist/{context-AV7OEZ4D.js → context-N6ZE3LGJ.js} +11 -11
  133. package/dist/{context-clear-SHIBYK6T.js → context-clear-G4OGZJDS.js} +53 -47
  134. package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-BWLF6LJP.js} +12 -11
  135. package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-2QQAITS3.js} +67 -58
  136. package/dist/{docs-23KQS3XK.js → docs-PD3EXDKU.js} +20 -25
  137. package/dist/doctor-LHBD36VU.js +773 -0
  138. package/dist/{eval-TFBYQH4H.js → eval-C45FYRJ6.js} +68 -49
  139. package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-6DEJPLBF.js} +7 -8
  140. package/dist/{evidence-ERGESKGN.js → evidence-6SHONYAF.js} +50 -44
  141. package/dist/{evolve-VDXTSYCJ.js → evolve-KRKMV72X.js} +49 -43
  142. package/dist/{extensions-7BGBHN57.js → extensions-KPZ2UHBB.js} +8 -6
  143. package/dist/{fleet-2RRVDF2V.js → fleet-IVTCKDHT.js} +93 -79
  144. package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EDWL3IT7.js} +10 -9
  145. package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-YP3YEFGK.js} +6 -6
  146. package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-ZFWKHY2M.js} +19 -15
  147. package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-FVUNCBML.js} +50 -45
  148. package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-UN5XED4R.js} +5 -9
  149. package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-XOWC4HSX.js} +22 -17
  150. package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-UN3SODEL.js} +48 -43
  151. package/dist/fleet-view-TWHJKCN6.js +96 -0
  152. package/dist/{init-DN2WWLFE.js → init-T2QORQ3Y.js} +72 -66
  153. package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
  154. package/dist/{interop-OZBKXAYL.js → interop-IN5I2A66.js} +13 -11
  155. package/dist/{library-YWZG7IMW.js → library-LSCATDLZ.js} +23 -18
  156. package/dist/{memory-I4C4HMLW.js → memory-HYOKAGGJ.js} +51 -45
  157. package/dist/{models-CEYXJBO6.js → models-2GPMFYCM.js} +42 -33
  158. package/dist/{monitor-NZ6GCI3P.js → monitor-E4ASVUJH.js} +56 -50
  159. package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-DDMPR3PY.js} +2676 -1507
  160. package/dist/{panes-KY6W3V2E.js → panes-E3RUXOW5.js} +5 -5
  161. package/dist/panes-IXKLOKA2.js +75 -0
  162. package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
  163. package/dist/{reset-DQ6FGCSH.js → reset-OAQP3W4O.js} +7 -8
  164. package/dist/{resources-BB3MVJMD.js → resources-OTRSN34L.js} +23 -17
  165. package/dist/{run-H2GQDUER.js → run-5DEYH5QK.js} +95 -84
  166. package/dist/{share-GTJN6A5O.js → share-IHWTLO3M.js} +26 -19
  167. package/dist/{skills-L55TEW6R.js → skills-IYMXMKW4.js} +25 -20
  168. package/dist/{skills-eval-XVXPH2JI.js → skills-eval-DROHSJAR.js} +63 -65
  169. package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-D7X4L4ZX.js} +21 -16
  170. package/dist/{slash-commands-ZSGASKJC.js → slash-commands-QBM7UZ3B.js} +38 -33
  171. package/dist/{steer-RZGSCY4R.js → steer-Z5DO23FJ.js} +3 -3
  172. package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
  173. package/dist/{targets-NCPZ644J.js → targets-P2FUC4IL.js} +64 -61
  174. package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-YREJ3JX2.js} +15 -10
  175. package/dist/{tools-DAF3DI3C.js → tools-5B7RO6MV.js} +10 -8
  176. package/dist/{trace-FYVW2MQA.js → trace-YMGMUM6A.js} +101 -8
  177. package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
  178. package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
  179. package/dist/{upgrade-3XPP6OQL.js → upgrade-PXK3S2YM.js} +36 -61
  180. package/dist/{usage-3NLHGTU2.js → usage-ME5MPXGX.js} +58 -53
  181. package/dist/{verifiers-SSQONKRT.js → verifiers-BVZ7IWOO.js} +10 -9
  182. package/dist/{verify-3U6J7FZI.js → verify-5K7ZKQFC.js} +9 -8
  183. package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPARV2K7.js} +2 -3
  184. package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-F5W5QTYY.js} +74 -70
  185. package/dist/{with-panes-MKB46MPQ.js → with-panes-BYOJCLAM.js} +78 -246
  186. package/dist/worker/entry.js +83 -63
  187. package/docs/README.md +176 -81
  188. package/docs/{acp.md → architecture/acp.md} +36 -20
  189. package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
  190. package/docs/{architecture.md → architecture/architecture.md} +43 -22
  191. package/docs/{artifact-placement.md → architecture/artifact-placement.md} +26 -23
  192. package/docs/architecture/artifact-versions.md +90 -0
  193. package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
  194. package/docs/{context-engine.md → architecture/context-engine.md} +25 -25
  195. package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
  196. package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
  197. package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
  198. package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
  199. package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
  200. package/docs/{model-catalog.md → architecture/model-catalog.md} +40 -17
  201. package/docs/{observability.md → architecture/observability.md} +26 -13
  202. package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
  203. package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +55 -20
  204. package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +35 -24
  205. package/docs/{safety-model.md → architecture/safety-model.md} +20 -15
  206. package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
  207. package/docs/architecture/time-conventions.md +125 -0
  208. package/docs/{trace-store.md → architecture/trace-store.md} +26 -13
  209. package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
  210. package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
  211. package/docs/{built-in-agents.md → guide/built-in-agents.md} +70 -46
  212. package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +73 -62
  213. package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -444
  214. package/docs/guide/configuration-reference.md +1158 -0
  215. package/docs/{environment-variables.md → guide/environment-variables.md} +31 -27
  216. package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +8 -3
  217. package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
  218. package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +47 -49
  219. package/docs/{glossary.md → guide/glossary.md} +14 -11
  220. package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +45 -14
  221. package/docs/guide/panes-and-files.md +290 -0
  222. package/docs/{proactive-memory.md → guide/proactive-memory.md} +79 -66
  223. package/docs/{resource-library.md → guide/resource-library.md} +13 -4
  224. package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +7 -3
  225. package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
  226. package/docs/{troubleshooting.md → guide/troubleshooting.md} +10 -5
  227. package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +13 -10
  228. package/docs/history/release-cut-checklist.md +207 -0
  229. package/docs/{development-pipeline.md → process/development-pipeline.md} +24 -26
  230. package/docs/process/documentation-coverage.md +100 -0
  231. package/docs/process/documentation-guide.md +187 -0
  232. package/docs/{eval-runner.md → process/eval-runner.md} +41 -50
  233. package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
  234. package/docs/{evolution.md → process/evolution.md} +2 -2
  235. package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +17 -10
  236. package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
  237. package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
  238. package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
  239. package/evals/README.md +5 -0
  240. package/evals/behavioral-corpus-grader.mjs +103 -0
  241. package/evals/behavioral-machinery-baseline.json +2276 -0
  242. package/evals/behavioral-machinery-driver.ts +250 -0
  243. package/evals/behavioral-machinery-support.ts +253 -0
  244. package/evals/behavioral-machinery.yaml +614 -0
  245. package/evals/behavioral-model-negative-control.yaml +68 -0
  246. package/evals/behavioral-model.yaml +216 -0
  247. package/evals/fixtures/behavioral-facts.txt +3 -0
  248. package/evals/fixtures/behavioral-main.ts +7 -0
  249. package/evals/fixtures/decoy/note.txt +2 -0
  250. package/evals/fixtures/private/credentials.txt +1 -0
  251. package/evals/tracked-metrics-baseline.yaml +229 -0
  252. package/evals/tracked-metrics-grader.mjs +129 -0
  253. package/package.json +13 -21
  254. package/skills/README.md +51 -42
  255. package/skills/coding/ast-grep/SKILL.md +9 -3
  256. package/skills/coding/coding-standards/SKILL.md +9 -3
  257. package/skills/coding/prototype/SKILL.md +9 -3
  258. package/skills/coding/tdd/SKILL.md +9 -3
  259. package/skills/context/context-handoff/SKILL.md +13 -4
  260. package/skills/context/context-handoff/evals.md +3 -3
  261. package/skills/context/context-prime/SKILL.md +9 -3
  262. package/skills/context/context-prime/evals.md +2 -2
  263. package/skills/git/file-ticket/SKILL.md +10 -5
  264. package/skills/git/file-ticket/evals.md +2 -2
  265. package/skills/git/fix-issue/SKILL.md +12 -5
  266. package/skills/git/fix-issue/evals.md +4 -4
  267. package/skills/git/resolve-merge-conflicts/SKILL.md +9 -3
  268. package/skills/git/resolve-merge-conflicts/evals.md +2 -2
  269. package/skills/git/ship/SKILL.md +10 -4
  270. package/skills/git/ship/evals.md +4 -4
  271. package/skills/git/worktree-create/SKILL.md +8 -3
  272. package/skills/git/worktree-create/evals.md +6 -6
  273. package/skills/git/worktree-merge/SKILL.md +8 -3
  274. package/skills/git/worktree-merge/evals.md +6 -6
  275. package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +22 -12
  276. package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +5 -4
  277. package/skills/meta/clio-coder-test/SKILL.md +146 -0
  278. package/skills/meta/{clio-test → clio-coder-test}/evals.md +10 -5
  279. package/skills/meta/clio-coder-test/references/harness.md +102 -0
  280. package/skills/meta/clio-coder-test/references/test-map.md +96 -0
  281. package/skills/meta/credentials/SKILL.md +10 -3
  282. package/skills/meta/find-skills/SKILL.md +9 -3
  283. package/skills/meta/herdr/SKILL.md +9 -3
  284. package/skills/meta/skill-craft/SKILL.md +39 -16
  285. package/skills/planning/architecture/SKILL.md +9 -3
  286. package/skills/planning/backlog/SKILL.md +9 -3
  287. package/skills/planning/prd/SKILL.md +9 -3
  288. package/skills/planning/product-intent/SKILL.md +9 -3
  289. package/skills/planning/tech-spec/SKILL.md +9 -3
  290. package/skills/registry.yaml +66 -66
  291. package/skills/research/arxiv-literature/SKILL.md +9 -3
  292. package/skills/research/experiment-protocol/SKILL.md +10 -3
  293. package/skills/research/scientific-debugging/SKILL.md +10 -3
  294. package/skills/research/scientific-debugging/evals.md +2 -2
  295. package/skills/research/scientific-modernization/SKILL.md +10 -3
  296. package/skills/skill-marketplace.json +285 -66
  297. package/skills/workflow/cut-it/SKILL.md +11 -3
  298. package/skills/workflow/design-council/SKILL.md +12 -3
  299. package/skills/workflow/grill-me/SKILL.md +9 -3
  300. package/skills/workflow/workflow-distiller/SKILL.md +9 -3
  301. package/src/cli/acp.ts +2 -2
  302. package/src/cli/args.ts +2 -2
  303. package/src/cli/auth.ts +2 -2
  304. package/src/cli/bootstrap-generate.ts +6 -6
  305. package/src/cli/clio.ts +6 -1
  306. package/src/cli/config-inspect.ts +68 -15
  307. package/src/cli/configure-interop.ts +1 -1
  308. package/src/cli/configure.ts +27 -31
  309. package/src/cli/default-target.ts +1 -1
  310. package/src/cli/docs.ts +28 -20
  311. package/src/cli/doctor-naming.ts +323 -0
  312. package/src/cli/doctor-panes.ts +46 -14
  313. package/src/cli/doctor-toolchain.ts +31 -10
  314. package/src/cli/doctor.ts +15 -1
  315. package/src/cli/eval-inventory.ts +8 -8
  316. package/src/cli/eval.ts +1 -2
  317. package/src/cli/evidence-detail.ts +1 -1
  318. package/src/cli/evidence-inventory.ts +1 -1
  319. package/src/cli/extensions.ts +2 -1
  320. package/src/cli/fleet-decisions.ts +1 -1
  321. package/src/cli/fleet-inspect.ts +1 -1
  322. package/src/cli/fleet-preflight.ts +1 -1
  323. package/src/cli/fleet-verify.ts +1 -1
  324. package/src/cli/fleet-view.ts +40 -23
  325. package/src/cli/fleet.ts +9 -6
  326. package/src/cli/index.ts +2 -1
  327. package/src/cli/internal-dispatch.ts +3 -4
  328. package/src/cli/interop-inspect.ts +2 -2
  329. package/src/cli/models.ts +3 -3
  330. package/src/cli/modes/print.ts +1 -1
  331. package/src/cli/panes.ts +19 -5
  332. package/src/cli/reset.ts +1 -1
  333. package/src/cli/run.ts +13 -17
  334. package/src/cli/share.ts +6 -2
  335. package/src/cli/skills-eval.ts +14 -14
  336. package/src/cli/targets.ts +25 -30
  337. package/src/cli/trace-inspect.ts +1 -1
  338. package/src/cli/trace.ts +96 -4
  339. package/src/cli/uninstall.ts +2 -2
  340. package/src/cli/upgrade.ts +29 -34
  341. package/src/cli/usage.ts +2 -2
  342. package/src/cli/validate-model.ts +1 -1
  343. package/src/cli/verifiers-inspect.ts +1 -1
  344. package/src/cli/wiki-generate.ts +6 -6
  345. package/src/core/artifact-paths.ts +1 -1
  346. package/src/core/bash-exec.ts +132 -87
  347. package/src/core/boot-trace.ts +3 -3
  348. package/src/core/bus-events.ts +51 -6
  349. package/src/core/bus-trace.ts +2 -2
  350. package/src/core/compile-cache.ts +1 -1
  351. package/src/core/config.ts +1066 -886
  352. package/src/core/defaults.ts +326 -530
  353. package/src/core/dispatch-outcome.ts +16 -0
  354. package/src/core/domain-loader.ts +6 -4
  355. package/src/core/event-bus.ts +1 -1
  356. package/src/core/file-references.ts +78 -88
  357. package/src/core/git-commit-attribution.ts +3 -9
  358. package/src/core/guardrails.ts +33 -52
  359. package/src/core/naming-compat.ts +45 -0
  360. package/src/core/naming-events.ts +62 -0
  361. package/src/core/prompt-hint.ts +9 -0
  362. package/src/core/recent-models.ts +1 -7
  363. package/src/core/residency-protection.ts +4 -8
  364. package/src/core/resolve-config-value.ts +1 -1
  365. package/src/core/response-model-id.ts +0 -14
  366. package/src/core/session-routing.ts +84 -74
  367. package/src/core/skill-activation.ts +18 -0
  368. package/src/core/termination.ts +4 -4
  369. package/src/core/timers.ts +2 -12
  370. package/src/domains/agents/builtins/architect.md +2 -3
  371. package/src/domains/agents/builtins/coder.md +3 -2
  372. package/src/domains/agents/builtins/debugger.md +2 -2
  373. package/src/domains/agents/builtins/documenter.md +2 -2
  374. package/src/domains/agents/builtins/git-master.md +1 -1
  375. package/src/domains/agents/builtins/oracle.md +1 -1
  376. package/src/domains/agents/builtins/provenance.md +1 -1
  377. package/src/domains/agents/builtins/researcher.md +1 -1
  378. package/src/domains/agents/builtins/scout.md +1 -1
  379. package/src/domains/agents/builtins/tester.md +2 -2
  380. package/src/domains/agents/builtins/verifier.md +2 -2
  381. package/src/domains/agents/builtins/wiki-writer.md +1 -1
  382. package/src/domains/agents/catalog.ts +14 -26
  383. package/src/domains/agents/contract.ts +2 -0
  384. package/src/domains/agents/extension.ts +26 -4
  385. package/src/domains/agents/registry.ts +7 -7
  386. package/src/domains/agents/result-contract.ts +1 -1
  387. package/src/domains/agents/spec.ts +0 -11
  388. package/src/domains/config/classify.ts +35 -47
  389. package/src/domains/config/extension.ts +5 -5
  390. package/src/domains/config/keybindings.ts +56 -47
  391. package/src/domains/config/watcher.ts +1 -1
  392. package/src/domains/context/codewiki/indexer.ts +1 -1
  393. package/src/domains/context/extension.ts +3 -6
  394. package/src/domains/context/prompt-context.ts +1 -1
  395. package/src/domains/context/wiki/assemble.ts +2 -2
  396. package/src/domains/context/working-set/path-index.ts +1 -0
  397. package/src/domains/context/working-set/replay/metrics.ts +0 -4
  398. package/src/domains/context/working-set/replay/report.ts +1 -1
  399. package/src/domains/context/working-set/replay/synthetic.ts +2 -2
  400. package/src/domains/dispatch/active-route-planner.ts +2 -2
  401. package/src/domains/dispatch/agent-candidates.ts +1 -1
  402. package/src/domains/dispatch/agent-ledger-store.ts +1 -1
  403. package/src/domains/dispatch/agent-ledger.ts +1 -1
  404. package/src/domains/dispatch/assignment.ts +5 -5
  405. package/src/domains/dispatch/capability-match.ts +10 -0
  406. package/src/domains/dispatch/capacity-lease.ts +2 -5
  407. package/src/domains/dispatch/code-step.ts +1 -1
  408. package/src/domains/dispatch/contract.ts +2 -2
  409. package/src/domains/dispatch/extension.ts +169 -82
  410. package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
  411. package/src/domains/dispatch/fleet-preflight.ts +8 -17
  412. package/src/domains/dispatch/fleet-run.ts +0 -7
  413. package/src/domains/dispatch/gate-decisions.ts +25 -14
  414. package/src/domains/dispatch/host-verification.ts +435 -39
  415. package/src/domains/dispatch/intent-requirements.ts +10 -0
  416. package/src/domains/dispatch/intent.ts +18 -1
  417. package/src/domains/dispatch/joint-route-resolver.ts +1 -1
  418. package/src/domains/dispatch/path-scope.ts +220 -70
  419. package/src/domains/dispatch/placement.ts +2 -2
  420. package/src/domains/dispatch/receipt-findings.ts +1 -1
  421. package/src/domains/dispatch/receipt-integrity.ts +20 -8
  422. package/src/domains/dispatch/reservation-store.ts +0 -23
  423. package/src/domains/dispatch/route-decision.ts +1 -1
  424. package/src/domains/dispatch/route-history.ts +1 -1
  425. package/src/domains/dispatch/route-policy.ts +1 -1
  426. package/src/domains/dispatch/route-readiness.ts +0 -28
  427. package/src/domains/dispatch/run-event-journal.ts +9 -19
  428. package/src/domains/dispatch/state.ts +2 -3
  429. package/src/domains/dispatch/tool-stats.ts +1 -1
  430. package/src/domains/dispatch/transport.ts +47 -40
  431. package/src/domains/dispatch/types.ts +58 -6
  432. package/src/domains/dispatch/worker-protocol.ts +2 -2
  433. package/src/domains/eval/artifacts/store.ts +10 -4
  434. package/src/domains/eval/compare/thresholds.ts +0 -8
  435. package/src/domains/eval/execution-provenance.ts +1 -1
  436. package/src/domains/eval/metrics/token-stream.ts +0 -7
  437. package/src/domains/eval/report.ts +1 -1
  438. package/src/domains/eval/runner.ts +1 -1
  439. package/src/domains/eval/runners/clio-run.ts +7 -6
  440. package/src/domains/eval/runners/external-command.ts +4 -3
  441. package/src/domains/eval/schema/artifact.ts +1 -1
  442. package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
  443. package/src/domains/eval/schema/behavioral.ts +7 -6
  444. package/src/domains/eval/schema/execution-envelope.ts +4 -2
  445. package/src/domains/eval/schema/naming.ts +10 -0
  446. package/src/domains/eval/schema/suite.ts +2 -2
  447. package/src/domains/eval/schema/validate.ts +9 -5
  448. package/src/domains/eval/schema/verdict.ts +4 -2
  449. package/src/domains/eval/store.ts +20 -3
  450. package/src/domains/eval/suites/run.ts +12 -6
  451. package/src/domains/eval/types.ts +1 -1
  452. package/src/domains/eval/workspaces/git.ts +1 -1
  453. package/src/domains/eval/workspaces/temp-copy.ts +1 -1
  454. package/src/domains/evidence/build.ts +13 -5
  455. package/src/domains/evidence/trust-status.ts +10 -1
  456. package/src/domains/extensions/contract.ts +15 -1
  457. package/src/domains/extensions/discovery.ts +238 -41
  458. package/src/domains/extensions/extension.ts +105 -6
  459. package/src/domains/extensions/index.ts +24 -0
  460. package/src/domains/extensions/integrity.ts +189 -0
  461. package/src/domains/extensions/manager.ts +17 -1
  462. package/src/domains/extensions/resource-path.ts +27 -0
  463. package/src/domains/extensions/resources.ts +18 -38
  464. package/src/domains/extensions/snapshot-store.ts +39 -0
  465. package/src/domains/extensions/snapshot.ts +180 -0
  466. package/src/domains/extensions/state.ts +385 -57
  467. package/src/domains/extensions/types.ts +118 -1
  468. package/src/domains/interop/consent.ts +7 -7
  469. package/src/domains/interop/extension.ts +1 -1
  470. package/src/domains/lifecycle/doctor.ts +27 -21
  471. package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
  472. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
  473. package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
  474. package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
  475. package/src/domains/lifecycle/migrations/index.ts +22 -1
  476. package/src/domains/lifecycle/naming-history.ts +153 -0
  477. package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
  478. package/src/domains/lifecycle/naming-resources.ts +276 -0
  479. package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
  480. package/src/domains/lifecycle/naming-yazi.ts +86 -0
  481. package/src/domains/lifecycle/upgrade-notice.ts +1 -1
  482. package/src/domains/memory/task-memory-handoff.ts +6 -3
  483. package/src/domains/middleware/contract.ts +26 -0
  484. package/src/domains/middleware/extension.ts +24 -24
  485. package/src/domains/middleware/hook-receipts.ts +27 -4
  486. package/src/domains/middleware/hooks-io.ts +65 -32
  487. package/src/domains/middleware/hooks.ts +64 -0
  488. package/src/domains/middleware/index.ts +35 -4
  489. package/src/domains/middleware/marketplace-offer.ts +339 -0
  490. package/src/domains/middleware/registrations.ts +326 -0
  491. package/src/domains/middleware/runtime.ts +30 -2
  492. package/src/domains/middleware/snapshot.ts +20 -7
  493. package/src/domains/mux/contract.ts +195 -25
  494. package/src/domains/mux/detect.ts +23 -6
  495. package/src/domains/mux/dock-controller.ts +365 -0
  496. package/src/domains/mux/extension.ts +7 -1
  497. package/src/domains/mux/index.ts +21 -1
  498. package/src/domains/mux/operations.ts +72 -5
  499. package/src/domains/mux/protocol.ts +19 -6
  500. package/src/domains/mux/socket-client.ts +167 -19
  501. package/src/domains/mux/types.ts +49 -6
  502. package/src/domains/mux/yazi/assets/yazi.toml +2 -2
  503. package/src/domains/mux/yazi/event-stream.ts +6 -4
  504. package/src/domains/mux/yazi/profile.ts +1 -1
  505. package/src/domains/mux/yazi/session.ts +79 -7
  506. package/src/domains/mux/yazi/theme.ts +117 -17
  507. package/src/domains/observability/contract.ts +10 -11
  508. package/src/domains/observability/extension.ts +12 -4
  509. package/src/domains/observability/out-of-turn-usage.ts +2 -2
  510. package/src/domains/observability/projection.ts +15 -91
  511. package/src/domains/observability/trace-store.ts +65 -19
  512. package/src/domains/prompts/compiler.ts +75 -55
  513. package/src/domains/prompts/contract.ts +15 -3
  514. package/src/domains/prompts/extension.ts +100 -12
  515. package/src/domains/prompts/fragments/identity/clio-worker.md +2 -4
  516. package/src/domains/prompts/fragments/identity/clio.md +6 -12
  517. package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
  518. package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
  519. package/src/domains/prompts/fragments/operating/contract.md +7 -15
  520. package/src/domains/prompts/fragments/operating/delegation.md +32 -34
  521. package/src/domains/prompts/fragments/operating/skills.md +11 -18
  522. package/src/domains/prompts/fragments/operating/worker.md +1 -8
  523. package/src/domains/providers/extension.ts +5 -5
  524. package/src/domains/providers/index.ts +1 -1
  525. package/src/domains/providers/knowledge-base-path.ts +1 -1
  526. package/src/domains/providers/model-runtime-capabilities.ts +99 -23
  527. package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
  528. package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +671 -106
  529. package/src/domains/providers/plugins.ts +1 -1
  530. package/src/domains/providers/resolver.ts +1 -1
  531. package/src/domains/providers/runtime-resolution.ts +31 -0
  532. package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
  533. package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
  534. package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
  535. package/src/domains/providers/runtimes/common/probe-helpers.ts +9 -4
  536. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  537. package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
  538. package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
  539. package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
  540. package/src/domains/providers/types/cost-provenance.ts +19 -0
  541. package/src/domains/providers/types/knowledge-base.ts +13 -0
  542. package/src/domains/providers/types/local-model-quirks.ts +87 -39
  543. package/src/domains/providers/types/target-descriptor.ts +3 -3
  544. package/src/domains/resources/extension.ts +1 -1
  545. package/src/domains/resources/library.ts +6 -6
  546. package/src/domains/resources/prompts/loader.ts +1 -1
  547. package/src/domains/resources/skills/content-hash.ts +7 -6
  548. package/src/domains/resources/skills/evals.ts +1 -1
  549. package/src/domains/resources/skills/install.ts +36 -12
  550. package/src/domains/resources/skills/loader.ts +41 -18
  551. package/src/domains/resources/skills/marketplace.ts +21 -2
  552. package/src/domains/resources/skills/promotion.ts +214 -0
  553. package/src/domains/safety/audit.ts +2 -2
  554. package/src/domains/safety/call-target.ts +1 -1
  555. package/src/domains/safety/finish-contract.ts +2 -1
  556. package/src/domains/safety/loop-detector.ts +7 -4
  557. package/src/domains/safety/run-effects.ts +1 -1
  558. package/src/domains/scheduling/extension.ts +4 -4
  559. package/src/domains/session/archive-readers.ts +9 -1
  560. package/src/domains/session/compaction/branch-summary.ts +4 -0
  561. package/src/domains/session/compaction/compact.ts +1 -1
  562. package/src/domains/session/compaction/tokens.ts +4 -0
  563. package/src/domains/session/context-accounting.ts +1 -1
  564. package/src/domains/session/decision-board.ts +1 -1
  565. package/src/domains/session/extension.ts +1 -1
  566. package/src/domains/session/handoff.ts +2 -2
  567. package/src/domains/session/prompt-manifest.ts +0 -5
  568. package/src/domains/session/protected-artifact-journal.ts +12 -6
  569. package/src/domains/session/retry.ts +1 -1
  570. package/src/domains/session/task-board.ts +10 -9
  571. package/src/domains/share/archive.ts +249 -43
  572. package/src/domains/toolchain/install.ts +1 -1
  573. package/src/engine/acp/adapter.ts +3 -3
  574. package/src/engine/acp/event-mapper.ts +3 -3
  575. package/src/engine/acp/server.ts +89 -35
  576. package/src/engine/acp/tool-mediator.ts +2 -2
  577. package/src/engine/acp/types.ts +1 -1
  578. package/src/engine/alcf-oauth.ts +5 -5
  579. package/src/engine/antigravity/subprocess-runtime.ts +2 -2
  580. package/src/engine/api-registry.ts +1 -1
  581. package/src/engine/apis/llamacpp-residency.ts +4 -23
  582. package/src/engine/apis/lmstudio.ts +4 -9
  583. package/src/engine/apis/ollama-native.ts +9 -9
  584. package/src/engine/apis/openai-completions.ts +30 -27
  585. package/src/engine/apis/output-budget.ts +8 -18
  586. package/src/engine/apis/residency.ts +10 -35
  587. package/src/engine/claude/sdk-module.ts +1 -12
  588. package/src/engine/claude/sdk-runtime.ts +6 -6
  589. package/src/engine/claude/subprocess-runtime.ts +1 -1
  590. package/src/engine/claude/tool-safety.ts +4 -4
  591. package/src/engine/gemma-channel-filter.ts +19 -0
  592. package/src/engine/loop-guard.ts +92 -17
  593. package/src/engine/session.ts +14 -7
  594. package/src/engine/tui-primitives.ts +1 -1
  595. package/src/engine/worker-events.ts +6 -6
  596. package/src/engine/worker-runtime.ts +54 -24
  597. package/src/engine/worker-tools.ts +3 -1
  598. package/src/entry/extension-hook-sources.ts +28 -0
  599. package/src/entry/extension-reload.ts +309 -0
  600. package/src/entry/orchestrator.ts +163 -120
  601. package/src/interactive/application-controller.ts +23 -22
  602. package/src/interactive/bus-notices.ts +10 -3
  603. package/src/interactive/chat-loop-messages.ts +3 -13
  604. package/src/interactive/chat-loop.ts +18 -9
  605. package/src/interactive/chat-panel.ts +37 -14
  606. package/src/interactive/chat-renderer.ts +71 -7
  607. package/src/interactive/clio-editor.ts +105 -1
  608. package/src/interactive/context-activity.ts +8 -6
  609. package/src/interactive/context-meter.ts +3 -6
  610. package/src/interactive/context-overlay.ts +1 -1
  611. package/src/interactive/cost-overlay.ts +1 -1
  612. package/src/interactive/council-grid.ts +2 -2
  613. package/src/interactive/dispatch-board.ts +36 -44
  614. package/src/interactive/editor-bash.ts +21 -0
  615. package/src/interactive/editor-steer.ts +9 -4
  616. package/src/interactive/editor-submit.ts +24 -18
  617. package/src/interactive/external-editor.ts +1 -1
  618. package/src/interactive/file-reference-completion.ts +360 -0
  619. package/src/interactive/footer/dashboard.ts +15 -17
  620. package/src/interactive/footer/notifications.ts +14 -8
  621. package/src/interactive/footer/widgets.ts +15 -44
  622. package/src/interactive/interactive-application.ts +116 -61
  623. package/src/interactive/interactive-event-projection.ts +1 -1
  624. package/src/interactive/interactive-input-runtime.ts +6 -2
  625. package/src/interactive/interactive-presentation.ts +22 -17
  626. package/src/interactive/interactive-shell.ts +2 -2
  627. package/src/interactive/interactive-slash-runtime.ts +65 -17
  628. package/src/interactive/interactive-subscriptions.ts +1 -1
  629. package/src/interactive/interactive-tickers.ts +1 -1
  630. package/src/interactive/keybinding-manager.ts +4 -4
  631. package/src/interactive/layout.ts +1 -1
  632. package/src/interactive/memory-overlay.ts +2 -2
  633. package/src/interactive/modal-marker.ts +2 -21
  634. package/src/interactive/mutation-preview.ts +1 -1
  635. package/src/interactive/overlay-frame.ts +4 -12
  636. package/src/interactive/overlay-general-openers.ts +6 -2
  637. package/src/interactive/overlay-key-routing.ts +7 -7
  638. package/src/interactive/overlay-lifecycle.ts +1 -1
  639. package/src/interactive/overlay-model-selectors.ts +3 -3
  640. package/src/interactive/overlays/agents.ts +2 -2
  641. package/src/interactive/overlays/ask-user.ts +25 -11
  642. package/src/interactive/overlays/context-reset.ts +28 -4
  643. package/src/interactive/overlays/cwd-fallback.ts +28 -4
  644. package/src/interactive/overlays/decisions.ts +4 -2
  645. package/src/interactive/overlays/extensions.ts +9 -1
  646. package/src/interactive/overlays/fleet-run-approval.ts +3 -3
  647. package/src/interactive/overlays/handoff-review.ts +2 -2
  648. package/src/interactive/overlays/help-reference.ts +13 -0
  649. package/src/interactive/overlays/interop.ts +1 -1
  650. package/src/interactive/overlays/library-install-confirm.ts +1 -1
  651. package/src/interactive/overlays/message-picker.ts +1 -1
  652. package/src/interactive/overlays/model-selector.ts +39 -31
  653. package/src/interactive/overlays/prompts.ts +10 -4
  654. package/src/interactive/overlays/session-selector.ts +2 -2
  655. package/src/interactive/overlays/settings.ts +360 -303
  656. package/src/interactive/overlays/side-question.ts +2 -2
  657. package/src/interactive/overlays/skills-hub.ts +8 -8
  658. package/src/interactive/overlays/tree-selector.ts +2 -2
  659. package/src/interactive/panes-runtime.ts +145 -43
  660. package/src/interactive/permission-overlay.ts +2 -2
  661. package/src/interactive/prompt-cache-identity.ts +88 -0
  662. package/src/interactive/renderers/retry-status.ts +12 -4
  663. package/src/interactive/renderers/tool-execution.ts +4 -4
  664. package/src/interactive/session-transcript.ts +3 -3
  665. package/src/interactive/slash-autocomplete.ts +454 -165
  666. package/src/interactive/slash-commands.ts +401 -190
  667. package/src/interactive/slash-spec.ts +160 -17
  668. package/src/interactive/status/controller.ts +2 -2
  669. package/src/interactive/stream-pacing-policy.ts +1 -24
  670. package/src/interactive/tasks-overlay.ts +20 -13
  671. package/src/interactive/terminal-lease.ts +6 -7
  672. package/src/interactive/turn-context.ts +41 -26
  673. package/src/interactive/turn-persistence.ts +2 -2
  674. package/src/interactive/turn-prewarm.ts +2 -2
  675. package/src/interactive/turn-runtime.ts +8 -8
  676. package/src/interactive/turn-state.ts +1 -1
  677. package/src/interactive/view/artifacts.ts +12 -9
  678. package/src/interactive/view/view-overlay.ts +13 -10
  679. package/src/interactive/watch-pane.ts +38 -10
  680. package/src/interactive/welcome-dashboard.ts +15 -15
  681. package/src/interactive/worker-progress.ts +4 -4
  682. package/src/interactive/worker-receipts.ts +1 -1
  683. package/src/interactive/worker-stream.ts +1 -4
  684. package/src/interactive/yazi-bridge.ts +72 -11
  685. package/src/tools/agent-tools.ts +30 -1
  686. package/src/tools/artifact.ts +2 -2
  687. package/src/tools/ask-user.ts +6 -6
  688. package/src/tools/bash.ts +2 -2
  689. package/src/tools/bootstrap.ts +4 -0
  690. package/src/tools/builtin-tool-catalog.ts +52 -22
  691. package/src/tools/codewiki/code-nav-surface.ts +6 -0
  692. package/src/tools/codewiki/code-nav.ts +99 -13
  693. package/src/tools/compete-worktrees.ts +27 -17
  694. package/src/tools/context/docs-engine.ts +20 -7
  695. package/src/tools/context/index.ts +44 -13
  696. package/src/tools/core-bootstrap.ts +28 -6
  697. package/src/tools/credential-present.ts +1 -2
  698. package/src/tools/dispatch-admission.ts +4 -2
  699. package/src/tools/dispatch-arguments.ts +6 -2
  700. package/src/tools/dispatch-plan.ts +48 -15
  701. package/src/tools/dispatch-run-events.ts +13 -11
  702. package/src/tools/dispatch-runner.ts +11 -6
  703. package/src/tools/dispatch-schema.ts +338 -0
  704. package/src/tools/dispatch-types.ts +3 -0
  705. package/src/tools/dispatch.ts +9 -254
  706. package/src/tools/find.ts +1 -6
  707. package/src/tools/ledger.ts +3 -5
  708. package/src/tools/monitor-surface.ts +5 -13
  709. package/src/tools/monitor.ts +4 -4
  710. package/src/tools/observation.ts +4 -5
  711. package/src/tools/observers.ts +0 -33
  712. package/src/tools/panes-surface.ts +4 -11
  713. package/src/tools/panes.ts +4 -2
  714. package/src/tools/policy.ts +15 -2
  715. package/src/tools/read.ts +5 -6
  716. package/src/tools/registry.ts +30 -7
  717. package/src/tools/result-shaping.ts +18 -14
  718. package/src/tools/steer-surface.ts +1 -1
  719. package/src/tools/task-worktree.ts +28 -7
  720. package/src/tools/tasks.ts +1 -1
  721. package/src/tools/truncate.ts +6 -5
  722. package/src/tools/verify/authoring.ts +3 -6
  723. package/src/tools/verify/frontend.ts +1 -1
  724. package/src/tools/verify/surface.ts +6 -12
  725. package/src/tools/web-fetch-surface.ts +1 -3
  726. package/src/tools/web-fetch.ts +1 -1
  727. package/src/worker/entry.ts +4 -3
  728. package/src/worker/protocol.ts +16 -14
  729. package/src/worker/spec-contract.ts +2 -2
  730. package/src/worker/stdin-demux.ts +2 -2
  731. package/dist/chunk-36EJLSQQ.js +0 -814
  732. package/dist/chunk-GXNLGKAB.js +0 -571
  733. package/dist/chunk-K7VKOLQQ.js +0 -15
  734. package/dist/chunk-PMZCIOCJ.js +0 -25
  735. package/dist/chunk-SUCTJL45.js +0 -45
  736. package/dist/chunk-SUW5DORT.js +0 -819
  737. package/dist/chunk-TZ3SGWZZ.js +0 -48
  738. package/dist/chunk-UOV2BYIW.js +0 -107
  739. package/dist/chunk-VFA6GDY5.js +0 -1625
  740. package/dist/doctor-QOA5FNY5.js +0 -313
  741. package/dist/fleet-view-ZCON35AG.js +0 -102
  742. package/dist/panes-HMABYVO4.js +0 -58
  743. package/docs/artifact-versions.md +0 -67
  744. package/docs/documentation-coverage.md +0 -46
  745. package/docs/documentation-guide.md +0 -167
  746. package/docs/release-cut-checklist.md +0 -193
  747. package/docs/time-conventions.md +0 -101
  748. package/skills/meta/clio-test/SKILL.md +0 -133
  749. package/skills/meta/clio-test/references/harness.md +0 -126
  750. package/skills/meta/clio-test/references/test-map.md +0 -69
  751. package/src/engine/apis/degraded-inference.ts +0 -95
@@ -13,12 +13,12 @@ import type { ReceiptIntegrityOutcome } from "../domains/evidence/trust-status.j
13
13
  import type { InstalledExtension } from "../domains/extensions/index.js";
14
14
  import type { InteropAgentId, InteropProposal, InteropReport } from "../domains/interop/index.js";
15
15
  import {
16
- isPanesPresetId,
17
16
  PANES_PRESET_IDS,
18
17
  PANES_PRESETS,
19
18
  type PanesOperations,
20
19
  type PanesPresetId,
21
20
  type PanesStatus,
21
+ resolvePanesPresetId,
22
22
  } from "../domains/mux/operations.js";
23
23
  import type { ProvidersContract, ResolvedModelRef } from "../domains/providers/index.js";
24
24
  import { resolveModelReference } from "../domains/providers/index.js";
@@ -31,6 +31,7 @@ import type {
31
31
  import { parseSkillCommand } from "../domains/resources/index.js";
32
32
  import type { ShareImportPlan } from "../domains/share/index.js";
33
33
  import type { UserTask } from "../domains/user-tasks/store.js";
34
+ import type { ExtensionReloadOutcome } from "../entry/extension-reload.js";
34
35
  import { isToolProfileName, TOOL_PROFILE_NAMES, type ToolProfileName } from "../tools/profiles.js";
35
36
  import type { NoticeLevel } from "./command-output.js";
36
37
  import {
@@ -51,8 +52,6 @@ import {
51
52
  packOracleDigest,
52
53
  } from "./oracle.js";
53
54
  import { isLibraryTab, LIBRARY_TABS } from "./overlays/library-tabs.js";
54
- import type { SettingsCenterRowId } from "./overlays/settings.js";
55
- import { SETTINGS_SECTIONS, type SettingsSectionId } from "./overlays/settings-sections.js";
56
55
  import type { CommandArgsSpec, CommandPositionalSpec, ParsedArgs } from "./slash-spec.js";
57
56
  import { matchFromSpec, usageLine } from "./slash-spec.js";
58
57
  import {
@@ -82,21 +81,31 @@ import type { WorkerEntryState } from "./worker-stream.js";
82
81
  * shell's Stage 0 closure, and a second, disjoint reacher makes esbuild split
83
82
  * it, which is a startup-latency regression rather than a style problem. The
84
83
  * parse-time data tables the registry needs live in leaves for that reason:
85
- * `./overlays/settings-sections.js`, `./overlays/library-tabs.js`, and
86
- * `COUNCIL_SYNTHESIS_LABEL` in `./council.js`. Import from those, not from the
87
- * overlays that re-export them.
84
+ * `./overlays/library-tabs.js` and `COUNCIL_SYNTHESIS_LABEL` in
85
+ * `./council.js`. Import from those, not from overlays that re-export them.
88
86
  *
89
87
  * Boundaries rule6 in `tests/boundaries/check-boundaries.ts` refuses a violation
90
88
  * at lint time; `tests/contracts/instant-shell-import-graph.test.ts` is the
91
89
  * measurement it protects.
92
90
  */
93
91
 
94
- type ShareCommandVariant =
95
- | { kind: "share"; action: "export"; path: string }
96
- | { kind: "share"; action: "import"; path: string; dryRun: boolean; force: boolean }
97
- /** Put a finished worker run's answer into the main agent's context. Bare `/share` takes the newest one. */
98
- | { kind: "share"; action: "worker-run"; runId?: string }
99
- | { kind: "share"; action: "usage"; subcommand?: "export" | "import"; error?: string };
92
+ /** Put a finished worker run's answer into the main agent's context. Bare `/share` takes the newest one. */
93
+ type ShareCommandVariant = { kind: "share"; runId?: string };
94
+ type ArchiveCommandVariant =
95
+ | { kind: "archive-export"; path: string }
96
+ | { kind: "archive-import"; path: string; dryRun: boolean; force: boolean }
97
+ | { kind: "archive-usage"; subcommand?: "export" | "import"; error?: string };
98
+
99
+ export const SETTINGS_AREA_IDS = [
100
+ "chat",
101
+ "fleet",
102
+ "targets",
103
+ "context",
104
+ "safety",
105
+ "interface",
106
+ "integrations",
107
+ ] as const;
108
+ export type SettingsAreaId = (typeof SETTINGS_AREA_IDS)[number];
100
109
 
101
110
  type SlashCommandVariant =
102
111
  | { kind: "quit" }
@@ -107,12 +116,10 @@ type SlashCommandVariant =
107
116
  /** `ref` is the turnId an `[evicted ...]` marker names. */
108
117
  | { kind: "context-recall"; ref: string }
109
118
  | { kind: "skill-selector" }
110
- | { kind: "library"; tab?: LibraryEntryKind }
119
+ | { kind: "resources"; family?: "skills" | "prompts" | "extensions"; tab?: LibraryEntryKind; action?: "reload" }
111
120
  | { kind: "skill-invocation"; text: string }
112
- | { kind: "prompts" }
113
- | { kind: "extensions" }
114
- | { kind: "interop" }
115
121
  | ShareCommandVariant
122
+ | ArchiveCommandVariant
116
123
  /** `source` is the line the operator typed, echoed above the run's transcript block. */
117
124
  | { kind: "run"; agentId: string; task: string; options: RunCommandOptions; source: string }
118
125
  | { kind: "run-usage" }
@@ -131,7 +138,8 @@ type SlashCommandVariant =
131
138
  /** `/fleet run <name>`: compile the plan, show it for approval, dispatch on accept. */
132
139
  | { kind: "fleet-run"; name: string; vars: Record<string, string> }
133
140
  | { kind: "fleet-run-usage"; reason?: string }
134
- | { kind: "agents" }
141
+ | { kind: "fleet" }
142
+ | { kind: "agents"; connect?: boolean }
135
143
  | { kind: "cost" }
136
144
  | { kind: "context-view" }
137
145
  | { kind: "tasks" }
@@ -150,13 +158,20 @@ type SlashCommandVariant =
150
158
  | { kind: "panes-show"; target: string }
151
159
  /** A preset the model may also ask for, or operator-only argv. Never both. */
152
160
  | { kind: "panes-open"; preset?: PanesPresetId; argv?: ReadonlyArray<string>; once?: boolean }
161
+ /** Toggle zoom on a Clio-owned pane; the bare form targets the watch pane. */
162
+ | { kind: "panes-zoom"; target: string }
153
163
  | { kind: "panes-close"; target: string }
154
164
  | { kind: "panes-usage"; reason?: string }
165
+ /** `/files`: toggle the files pane; `pick` borrows it for one selection; `close` closes it. */
166
+ | { kind: "files"; action: "toggle" | "open" | "close" | "pick" }
167
+ | { kind: "files-usage"; reason: string }
155
168
  | { kind: "thinking-set"; level: string }
169
+ | { kind: "thinking-picker" }
156
170
  | { kind: "output-set"; verbosity: string }
171
+ | { kind: "output-picker" }
157
172
  | { kind: "model" }
158
173
  | { kind: "model-set"; pattern: string }
159
- | { kind: "settings"; section?: SettingsSectionId; rowId?: SettingsCenterRowId }
174
+ | { kind: "settings"; area?: SettingsAreaId; group?: string }
160
175
  | { kind: "resume" }
161
176
  | { kind: "new" }
162
177
  | { kind: "tree" }
@@ -314,7 +329,7 @@ async function runAttributed(
314
329
  /**
315
330
  * Dispatches /run through the dispatch contract and streams events to stdout.
316
331
  * Target + model are resolved by the dispatch domain from request overrides,
317
- * worker profiles, recipe hints, and `settings.workers.default`.
332
+ * worker profiles, recipe hints, and `settings.fleet.default`.
318
333
  */
319
334
  export async function handleRun(
320
335
  agentId: string,
@@ -588,6 +603,13 @@ export interface SlashCommandContext {
588
603
  */
589
604
  expandPromptTemplate?: (text: string) => PromptTemplateExpansion;
590
605
  listExtensions?: () => ReadonlyArray<InstalledExtension>;
606
+ /**
607
+ * `/resources extensions reload`: build, validate, and commit the next
608
+ * extension generation together with its user hooks, or report why it was
609
+ * refused. Absent on a host without the reload coordinator, in which case
610
+ * the command says so instead of pretending.
611
+ */
612
+ reloadExtensions?: () => ExtensionReloadOutcome;
591
613
  /** Detection report, pending proposals, and the two consent actions `/interop` drives. */
592
614
  interop?: {
593
615
  report: () => InteropReport | null;
@@ -685,8 +707,11 @@ export interface SlashCommandContext {
685
707
  * not be one the active target supports.
686
708
  */
687
709
  setThinkingLevel?: (level: string) => SetThinkingLevelResult;
710
+ thinkingLevelChoices?: () => ReadonlyArray<{ value: string; label: string }>;
711
+ openThinkingPicker?: () => void;
688
712
  /** Apply a transcript verbosity named on the command line; refused values are reported by the caller. */
689
713
  setOutputVerbosity?: (verbosity: string) => SetOutputVerbosityResult;
714
+ openOutputPicker?: () => void;
690
715
  openModel: () => void;
691
716
  /** Live providers contract used by `/model <pattern>` to resolve directly. */
692
717
  providers: ProvidersContract;
@@ -696,7 +721,8 @@ export interface SlashCommandContext {
696
721
  * changed; the dialog reports the outcome itself.
697
722
  */
698
723
  applyModelRef: (ref: ResolvedModelRef) => "applied" | "pending";
699
- openSettings: (section?: SettingsSectionId, rowId?: SettingsCenterRowId) => void;
724
+ openSettings: (area?: SettingsAreaId, group?: string) => void;
725
+ openFleetRuns?: () => void;
700
726
  openResume: () => void;
701
727
  startNewSession: () => void;
702
728
  openTree: () => void;
@@ -740,7 +766,7 @@ export interface SlashCommandContext {
740
766
  type SlashReceiptVerification = ReturnType<SlashCommandContext["verifyReceipt"]>;
741
767
 
742
768
  /** Compact multiline receipt verification for the composer notice surface. */
743
- export function formatReceiptVerificationBlock(runId: string, result: SlashReceiptVerification): string {
769
+ function formatReceiptVerificationBlock(runId: string, result: SlashReceiptVerification): string {
744
770
  const status = result.ok ? (result.compromised ? "compromised" : "ok") : result.retired ? "retired" : "fail";
745
771
  const lines = [
746
772
  `verify ${status} ${runId}`,
@@ -762,7 +788,7 @@ export function formatUserTaskHandoff(task: Pick<UserTask, "id" | "title" | "not
762
788
  }
763
789
 
764
790
  /** The verb a command performs, in the order /help lists the groups. */
765
- export const SLASH_COMMAND_GROUPS = ["Run", "Inspect", "Configure", "Sessions"] as const;
791
+ export const SLASH_COMMAND_GROUPS = ["Work", "Inspect", "Configure", "Session"] as const;
766
792
  export type SlashCommandGroup = (typeof SLASH_COMMAND_GROUPS)[number];
767
793
 
768
794
  export interface BuiltinSlashCommand {
@@ -789,8 +815,8 @@ function isRunThinkingLevel(value: string): value is JobThinkingLevel {
789
815
  return RUN_THINKING_LEVELS.some((level) => level === value);
790
816
  }
791
817
 
792
- function isSettingsSectionId(value: string): value is SettingsSectionId {
793
- return SETTINGS_SECTIONS.some((section) => section.id === value);
818
+ function isSettingsAreaId(value: string): value is SettingsAreaId {
819
+ return SETTINGS_AREA_IDS.some((area) => area === value);
794
820
  }
795
821
 
796
822
  /** `/context compact` alone keeps a free-form optional instruction tail. */
@@ -817,28 +843,6 @@ function fromArgsOrUsage(name: string, command: SlashCommand): (parsed: ParsedAr
817
843
  return (parsed) => (parsed.error ? { kind: "usage-error", command: name, reason: parsed.error } : command);
818
844
  }
819
845
 
820
- /**
821
- * A configuration-shaped command that is a shortcut into one settings section.
822
- * It parses to the same `settings` command `/settings <section>` produces, so
823
- * the settings entry dispatches it and this entry owns no kind of its own.
824
- */
825
- function settingsDeepLink(
826
- name: string,
827
- section: SettingsSectionId,
828
- description: string,
829
- rowId?: SettingsCenterRowId,
830
- ): BuiltinSlashCommand {
831
- return {
832
- name,
833
- description,
834
- group: "Configure",
835
- kinds: [],
836
- args: {},
837
- fromArgs: fromArgsOrUsage(name, { kind: "settings", section, ...(rowId ? { rowId } : {}) }),
838
- handle: () => undefined,
839
- };
840
- }
841
-
842
846
  function usageNotice(entry: BuiltinSlashCommand, subcommand?: string): string {
843
847
  return usageLine(entry, subcommand).trim();
844
848
  }
@@ -848,16 +852,23 @@ function usageNotice(entry: BuiltinSlashCommand, subcommand?: string): string {
848
852
  * an operator reads rather than the object behind it, and so the registry keeps
849
853
  * its promise not to reach a renderer.
850
854
  */
851
- export function formatPanesStatus(status: PanesStatus): ReadonlyArray<string> {
855
+ function formatPanesStatus(status: PanesStatus): ReadonlyArray<string> {
852
856
  const server = status.server ? `pane host ${status.server.version}, protocol ${status.server.protocol}` : "no server";
853
857
  const lines = [
854
858
  `panes: mode=${status.mode} ${status.available ? "available" : "unavailable"} (${server})`,
855
859
  ` ${status.reason}`,
856
860
  ...(status.socketPath ? [` socket ${status.socketPath}`] : []),
857
- ` settings: enabled=${status.settings.enabled} notifications=${status.settings.notifications} journal=${status.settings.journal}`,
861
+ ` settings: enabled=${status.settings.enabled} notifications=${status.settings.notifications} layout=${status.settings.layout} journal=${status.settings.journal}`,
858
862
  ` files: enabled=${status.settings.yazi.enabled} mode=${status.settings.yazi.mode} profile=${status.settings.yazi.profile} followCwd=${status.settings.yazi.followCwd}`,
859
863
  ` 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}`,
860
864
  ];
865
+ if (status.docks.length > 0) {
866
+ lines.push(
867
+ ` docks: ${status.docks
868
+ .map((dock) => `${dock.slot}=${dock.paneId} @${(dock.targetShare * 100).toFixed(0)}%`)
869
+ .join(", ")}`,
870
+ );
871
+ }
861
872
  if (status.panes.length === 0) {
862
873
  lines.push(" no Clio-owned panes");
863
874
  } else {
@@ -876,7 +887,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
876
887
  {
877
888
  name: "quit",
878
889
  description: "Exit Clio Coder",
879
- group: "Sessions",
890
+ group: "Session",
880
891
  kinds: ["quit"],
881
892
  args: {},
882
893
  fromArgs: fromArgsOrUsage("quit", { kind: "quit" }),
@@ -902,7 +913,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
902
913
  {
903
914
  name: "skill",
904
915
  description: "Open the Skills Hub or invoke a skill",
905
- group: "Run",
916
+ group: "Work",
906
917
  kinds: ["skill-selector", "skill-invocation"],
907
918
  args: {
908
919
  positionals: [
@@ -929,65 +940,81 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
929
940
  },
930
941
  },
931
942
  {
932
- name: "library",
933
- description: "Open the Skills Hub on a resource library tab",
934
- group: "Run",
935
- kinds: ["library"],
936
- args: { positionals: [{ name: "kind", required: false }] },
943
+ name: "resources",
944
+ description: "Browse skills, prompts, libraries, and extensions",
945
+ group: "Inspect",
946
+ kinds: ["resources"],
947
+ subcommandDescriptions: {
948
+ skills: "Browse installed skills",
949
+ prompts: "Browse prompt templates",
950
+ library: "Browse resource libraries",
951
+ extensions: "Browse installed extensions; `reload` commits a new extension generation",
952
+ },
953
+ args: {
954
+ subcommands: {
955
+ skills: {},
956
+ prompts: {},
957
+ library: { positionals: [{ name: "kind", required: false }] },
958
+ extensions: { positionals: [{ name: "action", required: false, values: ["reload"] }] },
959
+ },
960
+ },
937
961
  fromArgs(parsed) {
938
- if (parsed.error) return { kind: "usage-error", command: "library", reason: parsed.error };
962
+ if (parsed.error) return { kind: "usage-error", command: "resources", reason: parsed.error };
963
+ if (parsed.subcommand === undefined || parsed.subcommand === "skills")
964
+ return { kind: "resources", family: "skills" };
965
+ if (parsed.subcommand === "prompts") return { kind: "resources", family: "prompts" };
966
+ if (parsed.subcommand === "extensions") {
967
+ const action = parsed.positionals[0];
968
+ if (action === undefined) return { kind: "resources", family: "extensions" };
969
+ if (action === "reload") return { kind: "resources", family: "extensions", action: "reload" };
970
+ return { kind: "usage-error", command: "resources", reason: `Unknown action: ${action} (one of reload)` };
971
+ }
939
972
  const tab = parsed.positionals[0];
940
- if (tab === undefined) return { kind: "library" };
973
+ if (tab === undefined) return { kind: "resources" };
941
974
  if (!isLibraryTab(tab)) {
942
975
  const known = LIBRARY_TABS.map((entry) => entry.id).join(", ");
943
- return { kind: "usage-error", command: "library", reason: `Unknown kind: ${tab} (one of ${known})` };
976
+ return { kind: "usage-error", command: "resources", reason: `Unknown kind: ${tab} (one of ${known})` };
944
977
  }
945
- return { kind: "library", tab };
978
+ return { kind: "resources", tab };
946
979
  },
947
980
  handle(command, ctx) {
948
- if (command.kind === "library") ctx.openSkillsHub?.(command.tab);
981
+ if (command.kind !== "resources") return;
982
+ if (command.family === "prompts") ctx.openPrompts();
983
+ else if (command.family === "extensions") {
984
+ if (command.action === "reload") reloadExtensionsCommand(ctx);
985
+ else ctx.openExtensions();
986
+ } else ctx.openSkillsHub?.(command.tab);
949
987
  },
950
988
  },
951
989
  {
952
- name: "prompts",
953
- description: "List prompt templates",
954
- group: "Inspect",
955
- kinds: ["prompts"],
956
- args: {},
957
- fromArgs: fromArgsOrUsage("prompts", { kind: "prompts" }),
958
- handle(_command, ctx) {
959
- ctx.openPrompts();
960
- },
961
- },
962
- {
963
- name: "extensions",
964
- description: "List installed extensions",
965
- group: "Inspect",
966
- kinds: ["extensions"],
967
- args: {},
968
- fromArgs: fromArgsOrUsage("extensions", { kind: "extensions" }),
969
- handle(_command, ctx) {
970
- ctx.openExtensions?.();
990
+ name: "share",
991
+ description: "Share a worker result with the main agent",
992
+ group: "Work",
993
+ kinds: ["share"],
994
+ args: { positionals: [{ name: "run-id", required: false }] },
995
+ fromArgs(parsed) {
996
+ const retiredArchiveVerb = parsed.positionals[0];
997
+ if (retiredArchiveVerb === "export" || retiredArchiveVerb === "import") {
998
+ return {
999
+ kind: "usage-error",
1000
+ command: "share",
1001
+ reason: `/share ${retiredArchiveVerb} is retired and did not run; use /archive ${retiredArchiveVerb}`,
1002
+ };
1003
+ }
1004
+ if (parsed.error) return { kind: "usage-error", command: "share", reason: parsed.error };
1005
+ return { kind: "share", ...(parsed.positionals[0] ? { runId: parsed.positionals[0] } : {}) };
971
1006
  },
972
- },
973
- {
974
- name: "interop",
975
- description: "Review other coding agents detected on this machine",
976
- group: "Inspect",
977
- kinds: ["interop"],
978
- args: {},
979
- fromArgs: fromArgsOrUsage("interop", { kind: "interop" }),
980
- handle(_command, ctx) {
981
- ctx.openInterop?.();
1007
+ handle(command, ctx) {
1008
+ if (command.kind === "share") shareWorkerRun(command.runId, ctx);
982
1009
  },
983
1010
  },
984
1011
  {
985
- name: "share",
986
- description: "Share a worker result with the main agent, or export and import Clio archives",
987
- group: "Sessions",
988
- kinds: ["share"],
1012
+ name: "archive",
1013
+ description: "Export or import a full Clio archive",
1014
+ group: "Session",
1015
+ kinds: ["archive-export", "archive-import", "archive-usage"],
1016
+ subcommandDescriptions: { export: "Export a full Clio archive", import: "Import a full Clio archive" },
989
1017
  args: {
990
- positionals: [{ name: "runId", required: false }],
991
1018
  subcommands: {
992
1019
  export: {
993
1020
  positionals: [{ name: "path", required: true }],
@@ -1002,56 +1029,43 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1002
1029
  const subcommand = parsed.subcommand === "export" || parsed.subcommand === "import" ? parsed.subcommand : undefined;
1003
1030
  if (parsed.error) {
1004
1031
  return {
1005
- kind: "share",
1006
- action: "usage",
1032
+ kind: "archive-usage",
1007
1033
  ...(subcommand !== undefined ? { subcommand } : {}),
1008
1034
  error: parsed.error,
1009
1035
  };
1010
1036
  }
1011
1037
  const path = parsed.positionals[0];
1012
- if (subcommand === "export" && path !== undefined) return { kind: "share", action: "export", path };
1038
+ if (subcommand === "export" && path !== undefined) return { kind: "archive-export", path };
1013
1039
  if (subcommand === "import" && path !== undefined) {
1014
1040
  return {
1015
- kind: "share",
1016
- action: "import",
1041
+ kind: "archive-import",
1017
1042
  path,
1018
1043
  dryRun: parsed.flags.has("--dry-run"),
1019
1044
  force: parsed.flags.has("--force"),
1020
1045
  };
1021
1046
  }
1022
- // No subcommand means the worker-result sense of the word, with or
1023
- // without a run id. `export` and `import` are the archive senses and are
1024
- // matched above, so neither reading can swallow the other.
1025
- if (subcommand === undefined) {
1026
- return { kind: "share", action: "worker-run", ...(path !== undefined ? { runId: path } : {}) };
1027
- }
1028
- return { kind: "share", action: "usage", ...(subcommand !== undefined ? { subcommand } : {}) };
1047
+ return { kind: "archive-usage", ...(subcommand !== undefined ? { subcommand } : {}) };
1029
1048
  },
1030
1049
  handle(command, ctx) {
1031
- if (command.kind !== "share") return;
1032
- if (command.action === "worker-run") {
1033
- shareWorkerRun(command.runId, ctx);
1034
- return;
1035
- }
1036
- if (command.action === "usage") {
1037
- const entry = BUILTIN_SLASH_COMMANDS.find((candidate) => candidate.name === "share");
1050
+ if (command.kind === "archive-usage") {
1051
+ const entry = BUILTIN_SLASH_COMMANDS.find((candidate) => candidate.name === "archive");
1038
1052
  if (!entry) return;
1039
1053
  const usage = usageNotice(entry, command.subcommand);
1040
1054
  ctx.notice("info", command.error ? `${command.error}\n${usage}` : usage);
1041
1055
  return;
1042
1056
  }
1043
- if (command.action === "export") {
1057
+ if (command.kind === "archive-export") {
1044
1058
  if (!ctx.exportShareArchive) {
1045
- ctx.notice("error", "share export is not wired");
1059
+ ctx.notice("error", "archive export is not wired");
1046
1060
  return;
1047
1061
  }
1048
1062
  const result = ctx.exportShareArchive(command.path);
1049
1063
  ctx.notice("success", `exported ${result.fileCount} item(s) to ${result.path}`);
1050
1064
  return;
1051
1065
  }
1052
- if (command.action === "import") {
1066
+ if (command.kind === "archive-import") {
1053
1067
  if (!ctx.importShareArchive) {
1054
- ctx.notice("error", "share import is not wired");
1068
+ ctx.notice("error", "archive import is not wired");
1055
1069
  return;
1056
1070
  }
1057
1071
  const plan = ctx.importShareArchive(command.path, { dryRun: command.dryRun, force: command.force });
@@ -1072,7 +1086,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1072
1086
  {
1073
1087
  name: "run",
1074
1088
  description: "Run a fleet agent",
1075
- group: "Run",
1089
+ group: "Work",
1076
1090
  kinds: ["run", "run-usage"],
1077
1091
  args: {
1078
1092
  parseFlagsBeforeRest: true,
@@ -1163,7 +1177,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1163
1177
  {
1164
1178
  name: "delegate",
1165
1179
  description: "Run an ACP delegation agent",
1166
- group: "Run",
1180
+ group: "Work",
1167
1181
  kinds: ["delegate", "delegate-usage"],
1168
1182
  args: {
1169
1183
  parseFlagsBeforeRest: true,
@@ -1210,7 +1224,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1210
1224
  {
1211
1225
  name: "btw",
1212
1226
  description: "Ask a side question that never enters the session transcript",
1213
- group: "Run",
1227
+ group: "Work",
1214
1228
  kinds: ["btw", "btw-usage"],
1215
1229
  args: {
1216
1230
  positionals: [{ name: "question", required: true, rest: true }],
@@ -1233,7 +1247,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1233
1247
  {
1234
1248
  name: "oracle",
1235
1249
  description: "Ask a read-only advisor to challenge a question against this session's settled decisions",
1236
- group: "Run",
1250
+ group: "Work",
1237
1251
  kinds: ["oracle", "oracle-usage"],
1238
1252
  args: {
1239
1253
  positionals: [{ name: "question", required: true, rest: true }],
@@ -1259,7 +1273,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1259
1273
  {
1260
1274
  name: "council",
1261
1275
  description: "Ask a roster of read-only members the same task, with an optional vote or judge synthesis",
1262
- group: "Run",
1276
+ group: "Work",
1263
1277
  kinds: ["council", "council-usage"],
1264
1278
  args: {
1265
1279
  parseFlagsBeforeRest: true,
@@ -1311,16 +1325,24 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1311
1325
  },
1312
1326
  {
1313
1327
  name: "agents",
1314
- description: "List Clio agents and ACP delegation agents",
1328
+ description: "List agents or connect a detected external agent",
1315
1329
  group: "Inspect",
1316
1330
  kinds: ["agents"],
1317
- args: {},
1318
- fromArgs: fromArgsOrUsage("agents", { kind: "agents" }),
1319
- handle(_command, ctx) {
1320
- ctx.openAgents();
1331
+ subcommandDescriptions: {
1332
+ list: "List native and external agents",
1333
+ connect: "Review detected external-agent proposals",
1334
+ },
1335
+ args: { subcommands: { list: {}, connect: {} } },
1336
+ fromArgs(parsed) {
1337
+ if (parsed.error) return { kind: "usage-error", command: "agents", reason: parsed.error };
1338
+ return { kind: "agents", ...(parsed.subcommand === "connect" ? { connect: true } : {}) };
1339
+ },
1340
+ handle(command, ctx) {
1341
+ if (command.kind !== "agents") return;
1342
+ if (command.connect) ctx.openInterop?.();
1343
+ else ctx.openAgents();
1321
1344
  },
1322
1345
  },
1323
- settingsDeepLink("targets", "targets", "Open Settings → Targets: health, use, connect, probe, remove"),
1324
1346
  {
1325
1347
  name: "cost",
1326
1348
  description: "Show session token and cost totals",
@@ -1405,9 +1427,9 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1405
1427
  },
1406
1428
  {
1407
1429
  name: "fleet",
1408
- description: "Open Settings → Fleet, or run a fleet contract with an approval preview",
1409
- group: "Configure",
1410
- kinds: ["fleet-run", "fleet-run-usage"],
1430
+ description: "Open Fleet Runs or run a fleet contract with an approval preview",
1431
+ group: "Work",
1432
+ kinds: ["fleet", "fleet-run", "fleet-run-usage"],
1411
1433
  subcommandDescriptions: { run: "Preview and run a repo-owned fleet contract" },
1412
1434
  args: {
1413
1435
  subcommands: {
@@ -1417,17 +1439,9 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1417
1439
  },
1418
1440
  },
1419
1441
  },
1420
- /**
1421
- * `/fleet` alone keeps the settings deep link it has always been, and
1422
- * only `run` parses as a command of its own, so an operator who types
1423
- * `/fleet` out of habit still lands in Settings → Fleet. Anything else
1424
- * on the line stays the usage error every other deep link reports.
1425
- */
1426
1442
  fromArgs(parsed) {
1427
1443
  if (parsed.subcommand !== "run") {
1428
- return parsed.error
1429
- ? { kind: "usage-error", command: "fleet", reason: parsed.error }
1430
- : { kind: "settings", section: "fleet" };
1444
+ return parsed.error ? { kind: "usage-error", command: "fleet", reason: parsed.error } : { kind: "fleet" };
1431
1445
  }
1432
1446
  if (parsed.error) return { kind: "fleet-run-usage", reason: parsed.error };
1433
1447
  const name = parsed.positionals[0] ?? "";
@@ -1442,6 +1456,11 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1442
1456
  return { kind: "fleet-run", name, vars };
1443
1457
  },
1444
1458
  handle(command, ctx) {
1459
+ if (command.kind === "fleet") {
1460
+ if (ctx.openFleetRuns) ctx.openFleetRuns();
1461
+ else ctx.notice("error", "Fleet Runs is not wired in this session");
1462
+ return;
1463
+ }
1445
1464
  if (command.kind === "fleet-run-usage") {
1446
1465
  const entry = BUILTIN_SLASH_COMMANDS.find((candidate) => candidate.name === "fleet");
1447
1466
  const usage = entry ? usageNotice(entry, "run") : "usage: /fleet run <name> [--var key=value ...]";
@@ -1629,19 +1648,21 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1629
1648
  name: "panes",
1630
1649
  description: "Inspect the pane layer, watch a live run in a pane, or open a utility pane",
1631
1650
  group: "Inspect",
1632
- kinds: ["panes", "panes-show", "panes-open", "panes-close", "panes-usage"],
1651
+ kinds: ["panes", "panes-show", "panes-open", "panes-zoom", "panes-close", "panes-usage"],
1633
1652
  args: {
1634
1653
  subcommands: {
1635
1654
  show: { positionals: [{ name: "run-or-agent", required: true }] },
1636
1655
  // A rest positional, so an argv pane keeps its own flags: the parser
1637
1656
  // would otherwise refuse `--follow` as an unknown flag of `/panes`.
1638
1657
  open: { positionals: [{ name: "preset-or-argv", required: true, rest: true }] },
1658
+ zoom: { positionals: [{ name: "target", required: false }] },
1639
1659
  close: { positionals: [{ name: "target", required: false }] },
1640
1660
  },
1641
1661
  },
1642
1662
  subcommandDescriptions: {
1643
1663
  show: "watch a live run or agent in the watch pane",
1644
- open: `open a utility pane (${PANES_PRESET_IDS.join(", ")}, or a command)`,
1664
+ open: `open a utility pane (${PANES_PRESET_IDS.join(", ")}, \`files --once\` for one pick, or a command)`,
1665
+ zoom: "toggle zoom on a Clio-owned pane (default: the watch pane)",
1645
1666
  close: "close a Clio-owned pane, or all of them",
1646
1667
  },
1647
1668
  fromArgs(parsed) {
@@ -1656,12 +1677,16 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1656
1677
  const first = argv[0] ?? "";
1657
1678
  // A bare preset name is a preset; anything else is operator argv,
1658
1679
  // which the tool surface deliberately cannot ask for.
1659
- if (argv.length === 1 && isPanesPresetId(first)) return { kind: "panes-open", preset: first };
1660
- if (argv.length === 2 && first === "yazi" && argv[1] === "--once") {
1661
- return { kind: "panes-open", preset: "yazi", once: true };
1680
+ const preset = resolvePanesPresetId(first);
1681
+ if (argv.length === 1 && preset !== null) return { kind: "panes-open", preset };
1682
+ if (argv.length === 2 && preset === "files" && argv[1] === "--once") {
1683
+ return { kind: "panes-open", preset: "files", once: true };
1662
1684
  }
1663
1685
  return { kind: "panes-open", argv };
1664
1686
  }
1687
+ if (parsed.subcommand === "zoom") {
1688
+ return { kind: "panes-zoom", target: parsed.positionals[0] ?? "" };
1689
+ }
1665
1690
  if (parsed.subcommand === "close") {
1666
1691
  return { kind: "panes-close", target: parsed.positionals[0] ?? "all" };
1667
1692
  }
@@ -1685,7 +1710,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1685
1710
  // every `--with-panes` session, even one where no pane host answered.
1686
1711
  ctx.notice(
1687
1712
  "info",
1688
- "panes are inactive: this session started without them. Restart with `clio-coder --with-panes`, or set panes.enabled=auto",
1713
+ "panes are inactive: this session started without them. Restart with `clio-coder --with-panes`, or set interface.panes.enabled=auto",
1689
1714
  );
1690
1715
  return;
1691
1716
  }
@@ -1722,7 +1747,14 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1722
1747
  // The in-terminal chooser has already restored the TUI by the
1723
1748
  // time this resolves. A pick emitted its composer notice; an empty
1724
1749
  // chooser was cancellation and deliberately stays silent.
1725
- if (result.paneId !== null) ctx.notice("success", `opened pane ${result.label} (${result.paneId})`);
1750
+ if (result.paneId !== null) {
1751
+ ctx.notice(
1752
+ "success",
1753
+ result.existing
1754
+ ? `focused pane ${result.label} (${result.paneId})`
1755
+ : `opened pane ${result.label} (${result.paneId})`,
1756
+ );
1757
+ }
1726
1758
  } else if (result.status === "missing-binary") {
1727
1759
  // This is a synchronous slash-surface line, not a transient pane-host
1728
1760
  // notification. It remains visible when no pane was ever created and
@@ -1735,6 +1767,19 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1735
1767
  });
1736
1768
  return;
1737
1769
  }
1770
+ if (command.kind === "panes-zoom") {
1771
+ runLocal(async () => {
1772
+ const result = await panes.zoom(command.target);
1773
+ if (result.status === "zoomed") {
1774
+ ctx.notice("success", `toggled zoom on ${result.label} (${result.paneId})`);
1775
+ } else if (result.status === "not-found") {
1776
+ ctx.notice("warn", `no Clio-owned pane matches ${result.target}`);
1777
+ } else {
1778
+ ctx.notice("warn", result.reason);
1779
+ }
1780
+ });
1781
+ return;
1782
+ }
1738
1783
  if (command.kind !== "panes-close") return;
1739
1784
  runLocal(async () => {
1740
1785
  const result = await panes.close(command.target);
@@ -1749,20 +1794,79 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1749
1794
  });
1750
1795
  },
1751
1796
  },
1797
+ {
1798
+ name: "files",
1799
+ description: "Toggle the files pane; picks land in the composer as @ mentions",
1800
+ group: "Inspect",
1801
+ kinds: ["files", "files-usage"],
1802
+ args: { positionals: [{ name: "action", required: false }] },
1803
+ subcommandDescriptions: {
1804
+ open: "open the files pane, or focus it when it is already open",
1805
+ close: "close the files pane",
1806
+ pick: "borrow the files pane for one selection, then close it",
1807
+ },
1808
+ fromArgs(parsed) {
1809
+ if (parsed.error) return { kind: "files-usage", reason: parsed.error };
1810
+ const action = parsed.positionals[0];
1811
+ if (action === undefined) return { kind: "files", action: "toggle" };
1812
+ if (action === "open" || action === "close" || action === "pick" || action === "toggle") {
1813
+ return { kind: "files", action };
1814
+ }
1815
+ return { kind: "files-usage", reason: `Unexpected argument: ${action}` };
1816
+ },
1817
+ handle(command, ctx) {
1818
+ if (command.kind === "files-usage") {
1819
+ ctx.notice("info", `${command.reason}\nusage: /files [open|close|pick]`);
1820
+ return;
1821
+ }
1822
+ if (command.kind !== "files") return;
1823
+ const panes = ctx.panes;
1824
+ if (!panes) {
1825
+ ctx.notice(
1826
+ "info",
1827
+ "the files pane is inactive: this session started without panes. Restart with `clio-coder --with-panes`, or set interface.panes.enabled=auto",
1828
+ );
1829
+ return;
1830
+ }
1831
+ const runLocal = ctx.runLocalOperation ?? ((operation: () => Promise<void>) => void operation());
1832
+ runLocal(async () => {
1833
+ const result = await panes.files(command.action);
1834
+ if (result.status === "opened") {
1835
+ // The in-terminal chooser reports through its own composer notice.
1836
+ if (result.paneId !== null) {
1837
+ ctx.notice(
1838
+ "success",
1839
+ result.existing ? `files pane focused (${result.paneId})` : `files pane opened (${result.paneId})`,
1840
+ );
1841
+ }
1842
+ } else if (result.status === "closed") {
1843
+ ctx.notice("info", "files pane closed");
1844
+ } else if (result.status === "missing-binary") {
1845
+ ctx.io.stdout(`${result.detail}\n`);
1846
+ ctx.render();
1847
+ } else {
1848
+ ctx.notice("warn", result.reason);
1849
+ }
1850
+ });
1851
+ },
1852
+ },
1752
1853
  {
1753
1854
  name: "thinking",
1754
- description: "Set the chat thinking level, or open Settings → Orchestrator",
1855
+ description: "Set the chat thinking level",
1755
1856
  group: "Configure",
1756
- kinds: ["thinking-set"],
1857
+ kinds: ["thinking-set", "thinking-picker"],
1757
1858
  args: { positionals: [{ name: "level", required: false }] },
1758
1859
  fromArgs(parsed) {
1759
1860
  if (parsed.error) return { kind: "usage-error", command: "thinking", reason: parsed.error };
1760
1861
  const level = parsed.positionals[0];
1761
- return level
1762
- ? { kind: "thinking-set", level }
1763
- : { kind: "settings", section: "orchestrator", rowId: "orchestrator.thinkingLevel" };
1862
+ return level ? { kind: "thinking-set", level } : { kind: "thinking-picker" };
1764
1863
  },
1765
1864
  handle(command, ctx) {
1865
+ if (command.kind === "thinking-picker") {
1866
+ if (ctx.openThinkingPicker) ctx.openThinkingPicker();
1867
+ else ctx.notice("error", "thinking picker is not wired in this session");
1868
+ return;
1869
+ }
1766
1870
  if (command.kind !== "thinking-set") return;
1767
1871
  const result = ctx.setThinkingLevel?.(command.level) ?? { status: "unavailable" as const };
1768
1872
  if (result.status === "applied") {
@@ -1777,18 +1881,21 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1777
1881
  },
1778
1882
  {
1779
1883
  name: "output",
1780
- description: "Set transcript detail (minimal, default, verbose), or open Settings → Terminal",
1884
+ description: "Set transcript detail to minimal, default, or verbose",
1781
1885
  group: "Configure",
1782
- kinds: ["output-set"],
1886
+ kinds: ["output-set", "output-picker"],
1783
1887
  args: { positionals: [{ name: "verbosity", required: false }] },
1784
1888
  fromArgs(parsed) {
1785
1889
  if (parsed.error) return { kind: "usage-error", command: "output", reason: parsed.error };
1786
1890
  const verbosity = parsed.positionals[0];
1787
- return verbosity
1788
- ? { kind: "output-set", verbosity }
1789
- : { kind: "settings", section: "terminal", rowId: "terminal.outputVerbosity" };
1891
+ return verbosity ? { kind: "output-set", verbosity } : { kind: "output-picker" };
1790
1892
  },
1791
1893
  handle(command, ctx) {
1894
+ if (command.kind === "output-picker") {
1895
+ if (ctx.openOutputPicker) ctx.openOutputPicker();
1896
+ else ctx.notice("error", "output picker is not wired in this session");
1897
+ return;
1898
+ }
1792
1899
  if (command.kind !== "output-set") return;
1793
1900
  const result = ctx.setOutputVerbosity?.(command.verbosity) ?? { status: "unavailable" as const };
1794
1901
  if (result.status === "applied") {
@@ -1847,36 +1954,38 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1847
1954
  })();
1848
1955
  },
1849
1956
  },
1850
- settingsDeepLink(
1851
- "scoped-models",
1852
- "models",
1853
- "Open Settings → Models: the Alt+J / Alt+K cycle set and favorites",
1854
- "scope",
1855
- ),
1856
1957
  {
1857
1958
  name: "settings",
1858
1959
  description: "Open interactive settings",
1859
1960
  group: "Configure",
1860
1961
  kinds: ["settings"],
1861
- args: { positionals: [{ name: "section", required: false }] },
1962
+ args: {
1963
+ positionals: [
1964
+ { name: "area", required: false },
1965
+ { name: "group", required: false },
1966
+ ],
1967
+ },
1862
1968
  fromArgs(parsed) {
1863
1969
  if (parsed.error) return { kind: "usage-error", command: "settings", reason: parsed.error };
1864
- const section = parsed.positionals[0];
1865
- if (section === undefined) return { kind: "settings" };
1866
- if (!isSettingsSectionId(section)) {
1867
- const known = SETTINGS_SECTIONS.map((entry) => entry.id).join(", ");
1868
- return { kind: "usage-error", command: "settings", reason: `Unknown section: ${section} (one of ${known})` };
1970
+ const area = parsed.positionals[0];
1971
+ if (area === undefined) return { kind: "settings" };
1972
+ if (!isSettingsAreaId(area)) {
1973
+ return {
1974
+ kind: "usage-error",
1975
+ command: "settings",
1976
+ reason: `Unknown area: ${area} (one of ${SETTINGS_AREA_IDS.join(", ")})`,
1977
+ };
1869
1978
  }
1870
- return { kind: "settings", section };
1979
+ return { kind: "settings", area, ...(parsed.positionals[1] ? { group: parsed.positionals[1] } : {}) };
1871
1980
  },
1872
1981
  handle(command, ctx) {
1873
- if (command.kind === "settings") ctx.openSettings(command.section, command.rowId);
1982
+ if (command.kind === "settings") ctx.openSettings(command.area, command.group);
1874
1983
  },
1875
1984
  },
1876
1985
  {
1877
1986
  name: "resume",
1878
1987
  description: "Resume a past session",
1879
- group: "Sessions",
1988
+ group: "Session",
1880
1989
  kinds: ["resume"],
1881
1990
  args: {},
1882
1991
  fromArgs: fromArgsOrUsage("resume", { kind: "resume" }),
@@ -1887,7 +1996,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1887
1996
  {
1888
1997
  name: "new",
1889
1998
  description: "Start a fresh session",
1890
- group: "Sessions",
1999
+ group: "Session",
1891
2000
  kinds: ["new"],
1892
2001
  args: {},
1893
2002
  fromArgs: fromArgsOrUsage("new", { kind: "new" }),
@@ -1898,7 +2007,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1898
2007
  {
1899
2008
  name: "handoff",
1900
2009
  description: "Hand this session's working state to a fresh session for a stated goal",
1901
- group: "Sessions",
2010
+ group: "Session",
1902
2011
  kinds: ["handoff", "handoff-usage"],
1903
2012
  args: {
1904
2013
  positionals: [{ name: "goal", required: true, rest: true }],
@@ -1921,7 +2030,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1921
2030
  {
1922
2031
  name: "tree",
1923
2032
  description: "Open session tree navigator",
1924
- group: "Sessions",
2033
+ group: "Session",
1925
2034
  kinds: ["tree"],
1926
2035
  args: {},
1927
2036
  fromArgs: fromArgsOrUsage("tree", { kind: "tree" }),
@@ -1932,7 +2041,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1932
2041
  {
1933
2042
  name: "fork",
1934
2043
  description: "Fork from an assistant turn",
1935
- group: "Sessions",
2044
+ group: "Session",
1936
2045
  kinds: ["fork"],
1937
2046
  args: {},
1938
2047
  fromArgs: fromArgsOrUsage("fork", { kind: "fork" }),
@@ -1943,7 +2052,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1943
2052
  {
1944
2053
  name: "export",
1945
2054
  description: "Export a self-contained HTML transcript by default; a .md path writes Markdown",
1946
- group: "Sessions",
2055
+ group: "Session",
1947
2056
  kinds: ["export"],
1948
2057
  args: {
1949
2058
  positionals: [{ name: "path", required: false }],
@@ -2015,7 +2124,66 @@ const COMMAND_SHAPED_TOKEN = /^[A-Za-z][A-Za-z0-9:-]*$/u;
2015
2124
  */
2016
2125
  const COMMAND_ESCAPE = "\\/";
2017
2126
 
2127
+ const RETIRED_COMMAND_HINTS: Readonly<Record<string, string>> = Object.freeze({
2128
+ status: "Use the footer or Alt+U for status; /cost, /context, and /fleet inspect their own domains.",
2129
+ receipts: "Use /view or /view verify <run-id>.",
2130
+ "context-init": "Use /context init.",
2131
+ "context-clear": "Use /context reset for project context or /new for a fresh session.",
2132
+ "context-view": "Use /context.",
2133
+ compact: "Use /context compact [instructions].",
2134
+ skills: "Use /skill or /resources skills.",
2135
+ exit: "Use /quit.",
2136
+ config: "Use /settings.",
2137
+ ctx: "Use /context.",
2138
+ models: "Use /model.",
2139
+ clear: "Use /new for a fresh session or /context reset for project context.",
2140
+ library: "Use /resources library [kind].",
2141
+ prompts: "Use /resources prompts.",
2142
+ extensions: "Use /resources extensions.",
2143
+ interop: "Use /agents connect.",
2144
+ targets: "Use /settings targets.",
2145
+ "scoped-models": "Use /settings chat model-picker.",
2146
+ });
2147
+
2148
+ function retiredCommandHint(token: string): string | undefined {
2149
+ if (/^skills?:[^\s]+$/u.test(token)) return "Use /skill <name> [task].";
2150
+ return RETIRED_COMMAND_HINTS[token];
2151
+ }
2152
+
2018
2153
  /** Pure slash-command parser: no I/O, no side effects. Walks the registry in order. */
2154
+ /**
2155
+ * One notice line for a reload outcome. Success when the generation committed
2156
+ * cleanly; warn when it committed with dropped hooks or declaration issues;
2157
+ * error when it was refused and the previous generation stays active.
2158
+ */
2159
+ export function formatExtensionReloadNotice(outcome: ExtensionReloadOutcome): [NoticeLevel, string] {
2160
+ if (outcome.status !== "committed") {
2161
+ return ["error", `extensions: reload rejected (${outcome.reason}); generation ${outcome.generation} stays active`];
2162
+ }
2163
+ const delta = outcome.changed
2164
+ ? `changed: +${outcome.added.length} -${outcome.removed.length} ~${outcome.modified.length}`
2165
+ : "unchanged";
2166
+ const issueCount = outcome.hooks.fileIssues + outcome.hooks.issues;
2167
+ const hookParts = [`${outcome.hooks.registered} registered`];
2168
+ if (outcome.hooks.dropped > 0) hookParts.push(`${outcome.hooks.dropped} dropped`);
2169
+ if (issueCount > 0) hookParts.push(`${issueCount} issue${issueCount === 1 ? "" : "s"}`);
2170
+ if (outcome.hooks.overridden > 0) hookParts.push(`${outcome.hooks.overridden} overridden`);
2171
+ const level: NoticeLevel = outcome.hooks.dropped > 0 || issueCount > 0 ? "warn" : "success";
2172
+ return [level, `extensions: generation ${outcome.generation} committed (${delta}); hooks: ${hookParts.join(", ")}`];
2173
+ }
2174
+
2175
+ function reloadExtensionsCommand(ctx: SlashCommandContext): void {
2176
+ if (!ctx.reloadExtensions) {
2177
+ ctx.notice("warn", "extensions: reload is unavailable in this session; restart to pick up installed changes");
2178
+ return;
2179
+ }
2180
+ const outcome = ctx.reloadExtensions();
2181
+ const [level, text] = formatExtensionReloadNotice(outcome);
2182
+ ctx.notice(level, text);
2183
+ for (const line of outcome.lines) ctx.notice("warn", line);
2184
+ if (outcome.status === "committed") ctx.openExtensions();
2185
+ }
2186
+
2019
2187
  export function parseSlashCommand(input: string): SlashCommand {
2020
2188
  const trimmed = input.trim();
2021
2189
  if (trimmed.length === 0) return { kind: "empty" };
@@ -2044,6 +2212,12 @@ export function dispatchSlashCommand(command: SlashCommand, ctx: SlashCommandCon
2044
2212
  return "accepted";
2045
2213
  }
2046
2214
  if (command.kind === "unknown-command") {
2215
+ const retiredHint = retiredCommandHint(command.token);
2216
+ if (retiredHint) {
2217
+ ctx.notice("error", `/${command.token} is retired and did not run. ${retiredHint}`);
2218
+ ctx.render();
2219
+ return "rejected";
2220
+ }
2047
2221
  // The registry does not own the token, but a prompt template might. The
2048
2222
  // parser stays pure, so the lookup happens here, and only for a spelling
2049
2223
  // that matched no command: `/name` is how every other agent invokes the
@@ -2085,18 +2259,55 @@ export interface CommandReferenceEntry {
2085
2259
  subcommandDescriptions?: Readonly<Record<string, string>>;
2086
2260
  }
2087
2261
 
2262
+ const COMMAND_ORDER = [
2263
+ "run",
2264
+ "fleet",
2265
+ "delegate",
2266
+ "council",
2267
+ "oracle",
2268
+ "btw",
2269
+ "share",
2270
+ "skill",
2271
+ "agents",
2272
+ "tasks",
2273
+ "context",
2274
+ "memory",
2275
+ "view",
2276
+ "panes",
2277
+ "cost",
2278
+ "decisions",
2279
+ "resources",
2280
+ "help",
2281
+ "model",
2282
+ "thinking",
2283
+ "output",
2284
+ "settings",
2285
+ "new",
2286
+ "resume",
2287
+ "handoff",
2288
+ "fork",
2289
+ "tree",
2290
+ "export",
2291
+ "archive",
2292
+ "quit",
2293
+ ] as const;
2294
+ const COMMAND_ORDER_INDEX = new Map<string, number>(COMMAND_ORDER.map((name, index) => [name, index]));
2295
+
2088
2296
  export function commandReference(): ReadonlyArray<CommandReferenceEntry> {
2089
- return BUILTIN_SLASH_COMMANDS.filter((entry) => entry.hidden !== true).map((entry) => {
2090
- const usage = usageLine(entry)
2091
- .replace(/^\nusage:\s*/, "")
2092
- .replace(/\n$/, "");
2093
- return {
2094
- name: entry.name,
2095
- usage,
2096
- description: entry.description,
2097
- group: entry.group,
2098
- ...(entry.args ? { args: entry.args } : {}),
2099
- ...(entry.subcommandDescriptions ? { subcommandDescriptions: entry.subcommandDescriptions } : {}),
2100
- };
2101
- });
2297
+ return BUILTIN_SLASH_COMMANDS.filter((entry) => entry.hidden !== true)
2298
+ .slice()
2299
+ .sort((a, b) => (COMMAND_ORDER_INDEX.get(a.name) ?? 99) - (COMMAND_ORDER_INDEX.get(b.name) ?? 99))
2300
+ .map((entry) => {
2301
+ const usage = usageLine(entry)
2302
+ .replace(/^\nusage:\s*/, "")
2303
+ .replace(/\n$/, "");
2304
+ return {
2305
+ name: entry.name,
2306
+ usage,
2307
+ description: entry.description,
2308
+ group: entry.group,
2309
+ ...(entry.args ? { args: entry.args } : {}),
2310
+ ...(entry.subcommandDescriptions ? { subcommandDescriptions: entry.subcommandDescriptions } : {}),
2311
+ };
2312
+ });
2102
2313
  }