@iowarp/clio-coder 0.4.0 → 0.4.1

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 (581) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +116 -16
  3. package/dist/{acp-G5WJBNCT.js → acp-ZILU3AUO.js} +14 -14
  4. package/dist/{agents-FMV2Q5G4.js → agents-HYWGBGQR.js} +40 -29
  5. package/dist/assets/codewiki.json +1 -1
  6. package/dist/{auth-3IDSJEIK.js → auth-N3QT7CBO.js} +21 -19
  7. package/dist/{builtins-XCZWXSC7.js → builtins-UJLMOVOV.js} +6 -6
  8. package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
  9. package/dist/{chunk-3BT2XMV4.js → chunk-2NM363SV.js} +50 -57
  10. package/dist/{chunk-J4W7KFM7.js → chunk-2VG7KLYV.js} +24 -279
  11. package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
  12. package/dist/{chunk-K5C3NCBD.js → chunk-3I5NY75V.js} +5 -5
  13. package/dist/{chunk-VAZSBTKF.js → chunk-3QSOM6PA.js} +2 -2
  14. package/dist/{chunk-TZ3SGWZZ.js → chunk-5QIAJV2D.js} +2 -2
  15. package/dist/{chunk-OQBA45DZ.js → chunk-5YHDIDBP.js} +2 -2
  16. package/dist/{chunk-NHLBIGRH.js → chunk-6CCS4G3W.js} +40 -17
  17. package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
  18. package/dist/{chunk-LDQ2ZF2M.js → chunk-6FN3E6KX.js} +5 -5
  19. package/dist/{chunk-X3YGUTOB.js → chunk-6HMJX2VU.js} +59 -59
  20. package/dist/{chunk-VEO4AP2K.js → chunk-6I5ILFOF.js} +3 -2
  21. package/dist/{chunk-B7OBL7PK.js → chunk-6NJQITNH.js} +18 -11
  22. package/dist/{chunk-IQ7KR472.js → chunk-6VC4OV3Z.js} +6 -3
  23. package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
  24. package/dist/{chunk-AB44T6BB.js → chunk-74YWRRU5.js} +8 -7
  25. package/dist/{chunk-SJ5ZKQ4S.js → chunk-7EPLI7VL.js} +2 -2
  26. package/dist/{chunk-HWHKMHUA.js → chunk-7OBGU7UB.js} +3 -3
  27. package/dist/{chunk-2OQE55CK.js → chunk-7PWAODYW.js} +2 -2
  28. package/dist/{chunk-IBEBSCYA.js → chunk-7RY5VZPH.js} +42 -33
  29. package/dist/{chunk-LQ3DZAMX.js → chunk-ABLSQ6JX.js} +2 -2
  30. package/dist/{chunk-QLFS5GO2.js → chunk-AFKWHWXF.js} +12 -22
  31. package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
  32. package/dist/{chunk-O6TL7WWY.js → chunk-AKB4GYDL.js} +4 -4
  33. package/dist/chunk-AP73CFDC.js +308 -0
  34. package/dist/{chunk-JDG2WCRO.js → chunk-BBTJOK6Y.js} +5 -5
  35. package/dist/{chunk-SP2RXXYO.js → chunk-BDPT6GTK.js} +10 -10
  36. package/dist/{chunk-NQQH3YT7.js → chunk-BJGUKIG4.js} +3 -3
  37. package/dist/{chunk-O4XIVISU.js → chunk-BTGG6BG2.js} +79 -38
  38. package/dist/chunk-BTK3SSSK.js +67 -0
  39. package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
  40. package/dist/chunk-BWW4HLO4.js +301 -0
  41. package/dist/{chunk-I5VEOC6I.js → chunk-C537JADH.js} +10 -10
  42. package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
  43. package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
  44. package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
  45. package/dist/chunk-D7E7WCDF.js +27 -0
  46. package/dist/{chunk-WZR7K7ZX.js → chunk-E67WX76H.js} +6 -6
  47. package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
  48. package/dist/chunk-EIMVLWB3.js +1842 -0
  49. package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
  50. package/dist/{chunk-MLKNTWH2.js → chunk-FYUN5KZ3.js} +21 -21
  51. package/dist/{chunk-YJX4SHTD.js → chunk-GIZNH63R.js} +1 -1
  52. package/dist/{chunk-X75E3D2N.js → chunk-GPPB3JBE.js} +18 -16
  53. package/dist/{chunk-GR5G2PVF.js → chunk-GVQJ5CCZ.js} +15 -10
  54. package/dist/chunk-HJWWJ6IL.js +184 -0
  55. package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
  56. package/dist/{chunk-VYMXRQI6.js → chunk-HUAS7ITX.js} +89 -93
  57. package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
  58. package/dist/{chunk-DYJP44XW.js → chunk-IG7BCQBA.js} +1 -1
  59. package/dist/{chunk-32KWKNSF.js → chunk-IXJT6DCX.js} +3 -3
  60. package/dist/{chunk-C2LTL2W6.js → chunk-J4HBWF6Y.js} +360 -172
  61. package/dist/chunk-J5LZHVIT.js +284 -0
  62. package/dist/{chunk-QLL7ILRG.js → chunk-JA5QWE4Z.js} +510 -202
  63. package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
  64. package/dist/{chunk-36EJLSQQ.js → chunk-JZWT5J3Y.js} +4 -4
  65. package/dist/{chunk-HZHHCK24.js → chunk-K6BF4U2H.js} +476 -322
  66. package/dist/{chunk-Z2RR6MAK.js → chunk-MA3H6DM5.js} +6 -6
  67. package/dist/{chunk-CODPRO7Q.js → chunk-MOPSG2X7.js} +6 -6
  68. package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
  69. package/dist/{chunk-YDFRH54B.js → chunk-N5UK64DP.js} +4 -4
  70. package/dist/chunk-NDDGJUXD.js +81 -0
  71. package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
  72. package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
  73. package/dist/{chunk-W5VSYASO.js → chunk-OJTRZGR3.js} +46 -87
  74. package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
  75. package/dist/{chunk-3URVFKWK.js → chunk-PJJ6MY27.js} +5 -5
  76. package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
  77. package/dist/{chunk-GKF55TAZ.js → chunk-PVAMAVBB.js} +3 -2
  78. package/dist/{chunk-6DB53AJS.js → chunk-QKIFBZKT.js} +7 -7
  79. package/dist/{chunk-HJJTYUHX.js → chunk-QMXC4JB7.js} +20 -20
  80. package/dist/chunk-QTFGO774.js +644 -0
  81. package/dist/{chunk-CY6FY24N.js → chunk-R23Z6K6I.js} +2 -2
  82. package/dist/{chunk-ULC6OTWO.js → chunk-R32CLGZ6.js} +13 -13
  83. package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
  84. package/dist/{chunk-F4CKPOEQ.js → chunk-SCYB3HA4.js} +72 -26
  85. package/dist/{chunk-LY4S7GJC.js → chunk-SINK3QR6.js} +18 -16
  86. package/dist/{chunk-U77AMWDL.js → chunk-TD3PGPQA.js} +43 -22
  87. package/dist/{chunk-QBJA7R7N.js → chunk-THYWACCR.js} +2 -2
  88. package/dist/{chunk-QREDIESB.js → chunk-TVH4ONAM.js} +14 -8
  89. package/dist/chunk-U2WB7TZS.js +271 -0
  90. package/dist/{chunk-KFZI4NIL.js → chunk-UAPGZHYC.js} +145 -31
  91. package/dist/{chunk-DQITNCXG.js → chunk-UEDMSP56.js} +29 -14
  92. package/dist/{chunk-3XML7CDN.js → chunk-UXN6JT4W.js} +2 -2
  93. package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
  94. package/dist/{chunk-BPKCPIL7.js → chunk-VEGN6WIQ.js} +2 -2
  95. package/dist/chunk-VKFQTNDV.js +66 -0
  96. package/dist/{chunk-7MCTRUCE.js → chunk-VKRH2TCS.js} +2 -2
  97. package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
  98. package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
  99. package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
  100. package/dist/{chunk-SUCTJL45.js → chunk-WR6U3OVP.js} +3 -3
  101. package/dist/{chunk-BUMFYQFY.js → chunk-XKA2ICR3.js} +124 -113
  102. package/dist/{chunk-UXMFQ54G.js → chunk-Y45G3AXC.js} +39 -39
  103. package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
  104. package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
  105. package/dist/{chunk-V5DHCITQ.js → chunk-ZAZB4JMW.js} +23 -12
  106. package/dist/{chunk-Z4TXYIEG.js → chunk-ZJLUDYFY.js} +9 -9
  107. package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
  108. package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
  109. package/dist/cli/index.js +36 -36
  110. package/dist/{clio-2JXHBBY5.js → clio-IT3G3VQH.js} +12 -13
  111. package/dist/{code-nav-3YYRMYNF.js → code-nav-RK6S7F6E.js} +5 -5
  112. package/dist/codewiki/build-worker.js +1 -1
  113. package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
  114. package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
  115. package/dist/{config-QZPCMYSO.js → config-3QZRWZJF.js} +53 -49
  116. package/dist/{configure-TEGEBYCA.js → configure-FL7Y3KJF.js} +25 -22
  117. package/dist/{context-E6H5RNMC.js → context-5HE7ODYK.js} +47 -43
  118. package/dist/{context-AV7OEZ4D.js → context-KYQFRVDC.js} +11 -11
  119. package/dist/{context-GSXUE4CT.js → context-XNHL75JV.js} +32 -19
  120. package/dist/{context-clear-SHIBYK6T.js → context-clear-N545L53A.js} +47 -43
  121. package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-QHKXSV2F.js} +10 -9
  122. package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-RGIE5PCT.js} +56 -47
  123. package/dist/{docs-23KQS3XK.js → docs-5NAF6AU7.js} +5 -11
  124. package/dist/doctor-ZGPEGHIP.js +772 -0
  125. package/dist/{eval-TFBYQH4H.js → eval-GXLL44RD.js} +63 -45
  126. package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-HBWSWQOK.js} +7 -8
  127. package/dist/{evidence-ERGESKGN.js → evidence-HWLBRH3Q.js} +44 -40
  128. package/dist/{evolve-VDXTSYCJ.js → evolve-FTZBMNVW.js} +43 -39
  129. package/dist/{extensions-7BGBHN57.js → extensions-VHRBEID7.js} +4 -4
  130. package/dist/{fleet-2RRVDF2V.js → fleet-CKZHJWZJ.js} +86 -73
  131. package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EXDXBMV6.js} +10 -9
  132. package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-OTHB6KRL.js} +5 -5
  133. package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-YTEZUCUT.js} +13 -11
  134. package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-SS6YMDCK.js} +44 -41
  135. package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-PBY4VYOM.js} +5 -9
  136. package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-KMEM5L3S.js} +16 -13
  137. package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-QD5M7E7Q.js} +42 -39
  138. package/dist/{fleet-view-ZCON35AG.js → fleet-view-WAMJYNDT.js} +44 -52
  139. package/dist/{init-DN2WWLFE.js → init-5XQRBOFV.js} +63 -58
  140. package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
  141. package/dist/{interop-OZBKXAYL.js → interop-34TVO25M.js} +13 -11
  142. package/dist/{library-YWZG7IMW.js → library-3QY6KF57.js} +17 -14
  143. package/dist/{memory-I4C4HMLW.js → memory-L4UTIIIW.js} +45 -41
  144. package/dist/{models-CEYXJBO6.js → models-ZVX3QOWE.js} +39 -31
  145. package/dist/{monitor-NZ6GCI3P.js → monitor-CEKVSYTS.js} +50 -46
  146. package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-77BAP6BC.js} +1807 -1039
  147. package/dist/{panes-KY6W3V2E.js → panes-7STHOAUJ.js} +4 -4
  148. package/dist/{panes-HMABYVO4.js → panes-SHAUIRXY.js} +10 -8
  149. package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
  150. package/dist/{reset-DQ6FGCSH.js → reset-EOLM7GVE.js} +7 -8
  151. package/dist/{resources-BB3MVJMD.js → resources-74GKTLSF.js} +17 -13
  152. package/dist/{run-H2GQDUER.js → run-HBAUJNNZ.js} +86 -76
  153. package/dist/{share-GTJN6A5O.js → share-G3APVLVP.js} +17 -14
  154. package/dist/{skills-L55TEW6R.js → skills-35HHUKCR.js} +19 -16
  155. package/dist/{skills-eval-XVXPH2JI.js → skills-eval-QN4HSHDC.js} +55 -57
  156. package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-J357J34F.js} +15 -12
  157. package/dist/{slash-commands-ZSGASKJC.js → slash-commands-JZZCQA32.js} +31 -29
  158. package/dist/{steer-RZGSCY4R.js → steer-XAVHJM22.js} +3 -3
  159. package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
  160. package/dist/{targets-NCPZ644J.js → targets-DSM6CY3M.js} +59 -53
  161. package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-JOPFUVEM.js} +14 -9
  162. package/dist/{tools-DAF3DI3C.js → tools-MKNWVPBH.js} +10 -8
  163. package/dist/{trace-FYVW2MQA.js → trace-ECQ7TIYZ.js} +48 -3
  164. package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
  165. package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
  166. package/dist/{upgrade-3XPP6OQL.js → upgrade-H7TOM7YL.js} +35 -62
  167. package/dist/{usage-3NLHGTU2.js → usage-X52N3IDJ.js} +51 -48
  168. package/dist/{verifiers-SSQONKRT.js → verifiers-EJTVVSMA.js} +10 -9
  169. package/dist/{verify-3U6J7FZI.js → verify-YJL6XET2.js} +9 -8
  170. package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPIFL3LL.js} +1 -2
  171. package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-4NDZTQ4B.js} +66 -63
  172. package/dist/{with-panes-MKB46MPQ.js → with-panes-OBOBFIIR.js} +62 -26
  173. package/dist/worker/entry.js +57 -52
  174. package/docs/acp.md +1 -1
  175. package/docs/built-in-agents.md +40 -32
  176. package/docs/commands-and-modes.md +9 -3
  177. package/docs/config-knobs-audit.md +3 -0
  178. package/docs/configuration-and-targets.md +105 -164
  179. package/docs/environment-variables.md +2 -1
  180. package/docs/exit-codes-and-output.md +2 -0
  181. package/docs/fleet-demo-runbook.md +6 -3
  182. package/docs/fleet-dispatch.md +8 -6
  183. package/docs/installation-and-lifecycle.md +1 -1
  184. package/docs/release-cut-checklist.md +164 -177
  185. package/docs/trace-store.md +15 -10
  186. package/docs/troubleshooting.md +1 -1
  187. package/evals/README.md +5 -0
  188. package/evals/behavioral-corpus-grader.mjs +103 -0
  189. package/evals/behavioral-machinery-baseline.json +2276 -0
  190. package/evals/behavioral-machinery-driver.ts +250 -0
  191. package/evals/behavioral-machinery-support.ts +253 -0
  192. package/evals/behavioral-machinery.yaml +614 -0
  193. package/evals/behavioral-model-negative-control.yaml +68 -0
  194. package/evals/behavioral-model.yaml +216 -0
  195. package/evals/fixtures/behavioral-facts.txt +3 -0
  196. package/evals/fixtures/behavioral-main.ts +7 -0
  197. package/evals/fixtures/decoy/note.txt +2 -0
  198. package/evals/fixtures/private/credentials.txt +1 -0
  199. package/evals/tracked-metrics-baseline.yaml +229 -0
  200. package/evals/tracked-metrics-grader.mjs +129 -0
  201. package/package.json +5 -15
  202. package/skills/README.md +6 -6
  203. package/skills/coding/ast-grep/SKILL.md +8 -2
  204. package/skills/coding/coding-standards/SKILL.md +8 -2
  205. package/skills/coding/prototype/SKILL.md +8 -2
  206. package/skills/coding/tdd/SKILL.md +8 -2
  207. package/skills/context/context-handoff/SKILL.md +12 -3
  208. package/skills/context/context-handoff/evals.md +3 -3
  209. package/skills/context/context-prime/SKILL.md +8 -2
  210. package/skills/context/context-prime/evals.md +2 -2
  211. package/skills/git/file-ticket/SKILL.md +9 -4
  212. package/skills/git/file-ticket/evals.md +2 -2
  213. package/skills/git/fix-issue/SKILL.md +12 -5
  214. package/skills/git/fix-issue/evals.md +4 -4
  215. package/skills/git/resolve-merge-conflicts/SKILL.md +8 -2
  216. package/skills/git/resolve-merge-conflicts/evals.md +2 -2
  217. package/skills/git/ship/SKILL.md +9 -3
  218. package/skills/git/ship/evals.md +4 -4
  219. package/skills/git/worktree-create/SKILL.md +7 -2
  220. package/skills/git/worktree-create/evals.md +6 -6
  221. package/skills/git/worktree-merge/SKILL.md +7 -2
  222. package/skills/git/worktree-merge/evals.md +6 -6
  223. package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
  224. package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
  225. package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
  226. package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
  227. package/skills/meta/credentials/SKILL.md +9 -2
  228. package/skills/meta/find-skills/SKILL.md +8 -2
  229. package/skills/meta/herdr/SKILL.md +8 -2
  230. package/skills/meta/skill-craft/SKILL.md +21 -4
  231. package/skills/planning/architecture/SKILL.md +9 -3
  232. package/skills/planning/backlog/SKILL.md +8 -2
  233. package/skills/planning/prd/SKILL.md +8 -2
  234. package/skills/planning/product-intent/SKILL.md +8 -2
  235. package/skills/planning/tech-spec/SKILL.md +9 -3
  236. package/skills/registry.yaml +66 -66
  237. package/skills/research/arxiv-literature/SKILL.md +8 -2
  238. package/skills/research/experiment-protocol/SKILL.md +9 -2
  239. package/skills/research/scientific-debugging/SKILL.md +9 -2
  240. package/skills/research/scientific-debugging/evals.md +2 -2
  241. package/skills/research/scientific-modernization/SKILL.md +9 -2
  242. package/skills/skill-marketplace.json +257 -38
  243. package/skills/workflow/cut-it/SKILL.md +10 -2
  244. package/skills/workflow/design-council/SKILL.md +11 -2
  245. package/skills/workflow/grill-me/SKILL.md +8 -2
  246. package/skills/workflow/workflow-distiller/SKILL.md +8 -2
  247. package/src/cli/acp.ts +2 -2
  248. package/src/cli/auth.ts +2 -2
  249. package/src/cli/bootstrap-generate.ts +5 -5
  250. package/src/cli/clio.ts +6 -1
  251. package/src/cli/config-inspect.ts +3 -3
  252. package/src/cli/configure-interop.ts +1 -1
  253. package/src/cli/configure.ts +27 -27
  254. package/src/cli/default-target.ts +1 -1
  255. package/src/cli/docs.ts +6 -6
  256. package/src/cli/doctor-naming.ts +323 -0
  257. package/src/cli/doctor-panes.ts +46 -14
  258. package/src/cli/doctor-toolchain.ts +29 -8
  259. package/src/cli/doctor.ts +15 -1
  260. package/src/cli/eval-inventory.ts +8 -8
  261. package/src/cli/evidence-detail.ts +1 -1
  262. package/src/cli/evidence-inventory.ts +1 -1
  263. package/src/cli/fleet-decisions.ts +1 -1
  264. package/src/cli/fleet-inspect.ts +1 -1
  265. package/src/cli/fleet-preflight.ts +1 -1
  266. package/src/cli/fleet-verify.ts +1 -1
  267. package/src/cli/fleet-view.ts +40 -23
  268. package/src/cli/fleet.ts +8 -5
  269. package/src/cli/interop-inspect.ts +2 -2
  270. package/src/cli/models.ts +3 -3
  271. package/src/cli/modes/print.ts +1 -1
  272. package/src/cli/reset.ts +1 -1
  273. package/src/cli/run.ts +11 -15
  274. package/src/cli/share.ts +1 -1
  275. package/src/cli/skills-eval.ts +11 -11
  276. package/src/cli/targets.ts +23 -24
  277. package/src/cli/trace-inspect.ts +1 -1
  278. package/src/cli/trace.ts +41 -0
  279. package/src/cli/uninstall.ts +2 -2
  280. package/src/cli/upgrade.ts +29 -34
  281. package/src/cli/usage.ts +2 -2
  282. package/src/cli/validate-model.ts +1 -1
  283. package/src/cli/verifiers-inspect.ts +1 -1
  284. package/src/cli/wiki-generate.ts +5 -5
  285. package/src/core/bash-exec.ts +1 -1
  286. package/src/core/boot-trace.ts +3 -3
  287. package/src/core/bus-trace.ts +2 -2
  288. package/src/core/compile-cache.ts +1 -1
  289. package/src/core/config.ts +1062 -886
  290. package/src/core/defaults.ts +321 -528
  291. package/src/core/domain-loader.ts +6 -4
  292. package/src/core/event-bus.ts +1 -1
  293. package/src/core/file-references.ts +78 -88
  294. package/src/core/git-commit-attribution.ts +3 -9
  295. package/src/core/guardrails.ts +24 -4
  296. package/src/core/naming-compat.ts +45 -0
  297. package/src/core/naming-events.ts +62 -0
  298. package/src/core/recent-models.ts +1 -7
  299. package/src/core/residency-protection.ts +4 -8
  300. package/src/core/resolve-config-value.ts +1 -1
  301. package/src/core/response-model-id.ts +0 -14
  302. package/src/core/session-routing.ts +84 -74
  303. package/src/core/skill-activation.ts +18 -0
  304. package/src/core/termination.ts +4 -4
  305. package/src/core/timers.ts +2 -12
  306. package/src/domains/agents/catalog.ts +2 -12
  307. package/src/domains/agents/extension.ts +3 -3
  308. package/src/domains/agents/registry.ts +7 -7
  309. package/src/domains/agents/result-contract.ts +1 -1
  310. package/src/domains/agents/spec.ts +0 -11
  311. package/src/domains/config/classify.ts +35 -47
  312. package/src/domains/config/extension.ts +5 -5
  313. package/src/domains/config/keybindings.ts +48 -47
  314. package/src/domains/config/watcher.ts +1 -1
  315. package/src/domains/context/codewiki/indexer.ts +1 -1
  316. package/src/domains/context/extension.ts +3 -3
  317. package/src/domains/context/prompt-context.ts +1 -1
  318. package/src/domains/context/wiki/assemble.ts +2 -2
  319. package/src/domains/context/working-set/replay/metrics.ts +0 -4
  320. package/src/domains/context/working-set/replay/report.ts +1 -1
  321. package/src/domains/context/working-set/replay/synthetic.ts +2 -2
  322. package/src/domains/dispatch/active-route-planner.ts +2 -2
  323. package/src/domains/dispatch/agent-candidates.ts +1 -1
  324. package/src/domains/dispatch/agent-ledger-store.ts +1 -1
  325. package/src/domains/dispatch/agent-ledger.ts +1 -1
  326. package/src/domains/dispatch/assignment.ts +5 -5
  327. package/src/domains/dispatch/capacity-lease.ts +2 -5
  328. package/src/domains/dispatch/code-step.ts +1 -1
  329. package/src/domains/dispatch/contract.ts +2 -2
  330. package/src/domains/dispatch/extension.ts +65 -61
  331. package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
  332. package/src/domains/dispatch/fleet-preflight.ts +8 -17
  333. package/src/domains/dispatch/fleet-run.ts +0 -7
  334. package/src/domains/dispatch/gate-decisions.ts +25 -14
  335. package/src/domains/dispatch/joint-route-resolver.ts +1 -1
  336. package/src/domains/dispatch/path-scope.ts +0 -61
  337. package/src/domains/dispatch/placement.ts +2 -2
  338. package/src/domains/dispatch/receipt-findings.ts +1 -1
  339. package/src/domains/dispatch/receipt-integrity.ts +20 -8
  340. package/src/domains/dispatch/reservation-store.ts +0 -23
  341. package/src/domains/dispatch/route-decision.ts +1 -1
  342. package/src/domains/dispatch/route-history.ts +1 -1
  343. package/src/domains/dispatch/route-policy.ts +1 -1
  344. package/src/domains/dispatch/route-readiness.ts +0 -28
  345. package/src/domains/dispatch/run-event-journal.ts +6 -5
  346. package/src/domains/dispatch/tool-stats.ts +1 -1
  347. package/src/domains/dispatch/transport.ts +2 -19
  348. package/src/domains/dispatch/types.ts +3 -3
  349. package/src/domains/dispatch/worker-protocol.ts +2 -2
  350. package/src/domains/eval/artifacts/store.ts +5 -4
  351. package/src/domains/eval/compare/thresholds.ts +0 -8
  352. package/src/domains/eval/execution-provenance.ts +1 -1
  353. package/src/domains/eval/metrics/token-stream.ts +0 -7
  354. package/src/domains/eval/report.ts +1 -1
  355. package/src/domains/eval/runner.ts +1 -1
  356. package/src/domains/eval/runners/clio-run.ts +7 -6
  357. package/src/domains/eval/runners/external-command.ts +4 -3
  358. package/src/domains/eval/schema/artifact.ts +1 -1
  359. package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
  360. package/src/domains/eval/schema/behavioral.ts +7 -6
  361. package/src/domains/eval/schema/execution-envelope.ts +4 -2
  362. package/src/domains/eval/schema/naming.ts +10 -0
  363. package/src/domains/eval/schema/suite.ts +2 -2
  364. package/src/domains/eval/schema/validate.ts +9 -5
  365. package/src/domains/eval/schema/verdict.ts +4 -2
  366. package/src/domains/eval/store.ts +12 -2
  367. package/src/domains/eval/suites/run.ts +12 -6
  368. package/src/domains/eval/types.ts +1 -1
  369. package/src/domains/eval/workspaces/git.ts +1 -1
  370. package/src/domains/eval/workspaces/temp-copy.ts +1 -1
  371. package/src/domains/evidence/build.ts +13 -5
  372. package/src/domains/interop/consent.ts +7 -7
  373. package/src/domains/interop/extension.ts +1 -1
  374. package/src/domains/lifecycle/doctor.ts +27 -21
  375. package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
  376. package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
  377. package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
  378. package/src/domains/lifecycle/migrations/index.ts +20 -1
  379. package/src/domains/lifecycle/naming-history.ts +153 -0
  380. package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
  381. package/src/domains/lifecycle/naming-resources.ts +261 -0
  382. package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
  383. package/src/domains/lifecycle/naming-yazi.ts +81 -0
  384. package/src/domains/lifecycle/upgrade-notice.ts +1 -1
  385. package/src/domains/memory/task-memory-handoff.ts +6 -3
  386. package/src/domains/middleware/index.ts +7 -0
  387. package/src/domains/middleware/marketplace-offer.ts +339 -0
  388. package/src/domains/middleware/runtime.ts +2 -2
  389. package/src/domains/mux/contract.ts +157 -25
  390. package/src/domains/mux/detect.ts +29 -5
  391. package/src/domains/mux/dock-controller.ts +365 -0
  392. package/src/domains/mux/extension.ts +7 -1
  393. package/src/domains/mux/index.ts +20 -0
  394. package/src/domains/mux/operations.ts +28 -0
  395. package/src/domains/mux/protocol.ts +19 -6
  396. package/src/domains/mux/socket-client.ts +167 -19
  397. package/src/domains/mux/types.ts +49 -6
  398. package/src/domains/mux/yazi/event-stream.ts +6 -4
  399. package/src/domains/mux/yazi/profile.ts +1 -1
  400. package/src/domains/mux/yazi/session.ts +26 -3
  401. package/src/domains/observability/extension.ts +1 -1
  402. package/src/domains/observability/out-of-turn-usage.ts +2 -2
  403. package/src/domains/observability/projection.ts +1 -1
  404. package/src/domains/observability/trace-store.ts +22 -12
  405. package/src/domains/prompts/compiler.ts +2 -2
  406. package/src/domains/prompts/extension.ts +3 -3
  407. package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
  408. package/src/domains/prompts/fragments/operating/skills.md +25 -18
  409. package/src/domains/providers/extension.ts +5 -5
  410. package/src/domains/providers/knowledge-base-path.ts +1 -1
  411. package/src/domains/providers/model-runtime-capabilities.ts +14 -2
  412. package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
  413. package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +4 -4
  414. package/src/domains/providers/plugins.ts +1 -1
  415. package/src/domains/providers/resolver.ts +1 -1
  416. package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
  417. package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
  418. package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
  419. package/src/domains/providers/runtimes/common/probe-helpers.ts +2 -2
  420. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  421. package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
  422. package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
  423. package/src/domains/providers/types/knowledge-base.ts +13 -0
  424. package/src/domains/providers/types/local-model-quirks.ts +2 -2
  425. package/src/domains/providers/types/target-descriptor.ts +3 -3
  426. package/src/domains/resources/extension.ts +1 -1
  427. package/src/domains/resources/library.ts +6 -6
  428. package/src/domains/resources/prompts/loader.ts +1 -1
  429. package/src/domains/resources/skills/content-hash.ts +7 -6
  430. package/src/domains/resources/skills/evals.ts +1 -1
  431. package/src/domains/resources/skills/install.ts +36 -12
  432. package/src/domains/resources/skills/loader.ts +39 -13
  433. package/src/domains/resources/skills/marketplace.ts +21 -2
  434. package/src/domains/resources/skills/promotion.ts +214 -0
  435. package/src/domains/safety/audit.ts +2 -2
  436. package/src/domains/safety/finish-contract.ts +2 -1
  437. package/src/domains/safety/run-effects.ts +1 -1
  438. package/src/domains/scheduling/extension.ts +4 -4
  439. package/src/domains/session/archive-readers.ts +9 -1
  440. package/src/domains/session/compaction/branch-summary.ts +4 -0
  441. package/src/domains/session/compaction/compact.ts +1 -1
  442. package/src/domains/session/compaction/tokens.ts +4 -0
  443. package/src/domains/session/context-accounting.ts +1 -1
  444. package/src/domains/session/decision-board.ts +1 -1
  445. package/src/domains/session/extension.ts +1 -1
  446. package/src/domains/session/handoff.ts +2 -2
  447. package/src/domains/session/prompt-manifest.ts +0 -5
  448. package/src/domains/session/protected-artifact-journal.ts +12 -6
  449. package/src/domains/session/retry.ts +1 -1
  450. package/src/domains/share/archive.ts +85 -36
  451. package/src/domains/toolchain/install.ts +1 -1
  452. package/src/engine/acp/adapter.ts +3 -3
  453. package/src/engine/acp/event-mapper.ts +3 -3
  454. package/src/engine/acp/server.ts +27 -26
  455. package/src/engine/acp/tool-mediator.ts +2 -2
  456. package/src/engine/acp/types.ts +1 -1
  457. package/src/engine/alcf-oauth.ts +5 -5
  458. package/src/engine/antigravity/subprocess-runtime.ts +2 -2
  459. package/src/engine/api-registry.ts +1 -1
  460. package/src/engine/apis/llamacpp-residency.ts +1 -19
  461. package/src/engine/apis/lmstudio.ts +1 -6
  462. package/src/engine/apis/ollama-native.ts +3 -3
  463. package/src/engine/apis/openai-completions.ts +2 -2
  464. package/src/engine/apis/residency.ts +3 -9
  465. package/src/engine/claude/sdk-module.ts +1 -12
  466. package/src/engine/claude/sdk-runtime.ts +6 -6
  467. package/src/engine/claude/subprocess-runtime.ts +1 -1
  468. package/src/engine/claude/tool-safety.ts +4 -4
  469. package/src/engine/loop-guard.ts +0 -5
  470. package/src/engine/session.ts +14 -7
  471. package/src/engine/tui-primitives.ts +1 -1
  472. package/src/engine/worker-events.ts +6 -6
  473. package/src/engine/worker-runtime.ts +14 -13
  474. package/src/entry/orchestrator.ts +107 -88
  475. package/src/interactive/application-controller.ts +21 -21
  476. package/src/interactive/bus-notices.ts +2 -2
  477. package/src/interactive/chat-loop.ts +8 -8
  478. package/src/interactive/chat-panel.ts +1 -1
  479. package/src/interactive/clio-editor.ts +105 -1
  480. package/src/interactive/context-activity.ts +8 -6
  481. package/src/interactive/context-meter.ts +3 -6
  482. package/src/interactive/context-overlay.ts +1 -1
  483. package/src/interactive/cost-overlay.ts +1 -1
  484. package/src/interactive/council-grid.ts +2 -2
  485. package/src/interactive/dispatch-board.ts +30 -33
  486. package/src/interactive/editor-bash.ts +21 -0
  487. package/src/interactive/editor-steer.ts +9 -4
  488. package/src/interactive/editor-submit.ts +24 -18
  489. package/src/interactive/external-editor.ts +1 -1
  490. package/src/interactive/file-reference-completion.ts +360 -0
  491. package/src/interactive/footer/dashboard.ts +15 -17
  492. package/src/interactive/footer/notifications.ts +14 -8
  493. package/src/interactive/footer/widgets.ts +2 -44
  494. package/src/interactive/interactive-application.ts +79 -59
  495. package/src/interactive/interactive-event-projection.ts +1 -1
  496. package/src/interactive/interactive-input-runtime.ts +2 -2
  497. package/src/interactive/interactive-presentation.ts +21 -16
  498. package/src/interactive/interactive-shell.ts +2 -2
  499. package/src/interactive/interactive-slash-runtime.ts +63 -17
  500. package/src/interactive/interactive-subscriptions.ts +1 -1
  501. package/src/interactive/interactive-tickers.ts +1 -1
  502. package/src/interactive/keybinding-manager.ts +4 -4
  503. package/src/interactive/layout.ts +1 -1
  504. package/src/interactive/memory-overlay.ts +2 -2
  505. package/src/interactive/modal-marker.ts +2 -21
  506. package/src/interactive/mutation-preview.ts +1 -1
  507. package/src/interactive/overlay-frame.ts +4 -12
  508. package/src/interactive/overlay-general-openers.ts +6 -2
  509. package/src/interactive/overlay-key-routing.ts +7 -7
  510. package/src/interactive/overlay-lifecycle.ts +1 -1
  511. package/src/interactive/overlay-model-selectors.ts +3 -3
  512. package/src/interactive/overlays/agents.ts +2 -2
  513. package/src/interactive/overlays/ask-user.ts +25 -11
  514. package/src/interactive/overlays/context-reset.ts +28 -4
  515. package/src/interactive/overlays/cwd-fallback.ts +28 -4
  516. package/src/interactive/overlays/decisions.ts +4 -2
  517. package/src/interactive/overlays/fleet-run-approval.ts +3 -3
  518. package/src/interactive/overlays/handoff-review.ts +2 -2
  519. package/src/interactive/overlays/interop.ts +1 -1
  520. package/src/interactive/overlays/library-install-confirm.ts +1 -1
  521. package/src/interactive/overlays/message-picker.ts +1 -1
  522. package/src/interactive/overlays/model-selector.ts +39 -31
  523. package/src/interactive/overlays/prompts.ts +10 -4
  524. package/src/interactive/overlays/session-selector.ts +2 -2
  525. package/src/interactive/overlays/settings.ts +339 -293
  526. package/src/interactive/overlays/side-question.ts +2 -2
  527. package/src/interactive/overlays/skills-hub.ts +8 -8
  528. package/src/interactive/overlays/tree-selector.ts +2 -2
  529. package/src/interactive/panes-runtime.ts +36 -10
  530. package/src/interactive/permission-overlay.ts +2 -2
  531. package/src/interactive/renderers/retry-status.ts +12 -4
  532. package/src/interactive/renderers/tool-execution.ts +4 -4
  533. package/src/interactive/session-transcript.ts +3 -3
  534. package/src/interactive/slash-autocomplete.ts +454 -165
  535. package/src/interactive/slash-commands.ts +279 -183
  536. package/src/interactive/slash-spec.ts +160 -17
  537. package/src/interactive/status/controller.ts +2 -2
  538. package/src/interactive/stream-pacing-policy.ts +1 -1
  539. package/src/interactive/tasks-overlay.ts +20 -13
  540. package/src/interactive/terminal-lease.ts +6 -7
  541. package/src/interactive/turn-context.ts +11 -11
  542. package/src/interactive/turn-persistence.ts +2 -2
  543. package/src/interactive/turn-prewarm.ts +2 -2
  544. package/src/interactive/turn-runtime.ts +8 -8
  545. package/src/interactive/turn-state.ts +1 -1
  546. package/src/interactive/view/artifacts.ts +12 -9
  547. package/src/interactive/view/view-overlay.ts +13 -10
  548. package/src/interactive/watch-pane.ts +38 -10
  549. package/src/interactive/welcome-dashboard.ts +15 -15
  550. package/src/interactive/worker-progress.ts +4 -4
  551. package/src/interactive/worker-receipts.ts +1 -1
  552. package/src/interactive/worker-stream.ts +1 -4
  553. package/src/interactive/yazi-bridge.ts +12 -5
  554. package/src/tools/ask-user.ts +3 -3
  555. package/src/tools/bash.ts +1 -1
  556. package/src/tools/builtin-tool-catalog.ts +1 -1
  557. package/src/tools/compete-worktrees.ts +27 -17
  558. package/src/tools/context/index.ts +15 -1
  559. package/src/tools/dispatch-admission.ts +4 -2
  560. package/src/tools/dispatch-arguments.ts +1 -1
  561. package/src/tools/dispatch-plan.ts +0 -11
  562. package/src/tools/dispatch-run-events.ts +12 -10
  563. package/src/tools/dispatch-runner.ts +11 -6
  564. package/src/tools/dispatch.ts +1 -1
  565. package/src/tools/find.ts +1 -6
  566. package/src/tools/monitor.ts +4 -4
  567. package/src/tools/observers.ts +0 -33
  568. package/src/tools/task-worktree.ts +28 -7
  569. package/src/tools/verify/authoring.ts +3 -6
  570. package/src/tools/verify/frontend.ts +1 -1
  571. package/src/tools/web-fetch.ts +1 -1
  572. package/src/worker/entry.ts +4 -3
  573. package/src/worker/protocol.ts +16 -14
  574. package/src/worker/spec-contract.ts +2 -2
  575. package/src/worker/stdin-demux.ts +2 -2
  576. package/dist/chunk-GXNLGKAB.js +0 -571
  577. package/dist/chunk-VFA6GDY5.js +0 -1625
  578. package/dist/doctor-QOA5FNY5.js +0 -313
  579. package/src/engine/apis/degraded-inference.ts +0 -95
  580. /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
  581. /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
@@ -51,8 +51,6 @@ import {
51
51
  packOracleDigest,
52
52
  } from "./oracle.js";
53
53
  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
54
  import type { CommandArgsSpec, CommandPositionalSpec, ParsedArgs } from "./slash-spec.js";
57
55
  import { matchFromSpec, usageLine } from "./slash-spec.js";
58
56
  import {
@@ -82,21 +80,31 @@ import type { WorkerEntryState } from "./worker-stream.js";
82
80
  * shell's Stage 0 closure, and a second, disjoint reacher makes esbuild split
83
81
  * it, which is a startup-latency regression rather than a style problem. The
84
82
  * 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.
83
+ * `./overlays/library-tabs.js` and `COUNCIL_SYNTHESIS_LABEL` in
84
+ * `./council.js`. Import from those, not from overlays that re-export them.
88
85
  *
89
86
  * Boundaries rule6 in `tests/boundaries/check-boundaries.ts` refuses a violation
90
87
  * at lint time; `tests/contracts/instant-shell-import-graph.test.ts` is the
91
88
  * measurement it protects.
92
89
  */
93
90
 
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 };
91
+ /** Put a finished worker run's answer into the main agent's context. Bare `/share` takes the newest one. */
92
+ type ShareCommandVariant = { kind: "share"; runId?: string };
93
+ type ArchiveCommandVariant =
94
+ | { kind: "archive-export"; path: string }
95
+ | { kind: "archive-import"; path: string; dryRun: boolean; force: boolean }
96
+ | { kind: "archive-usage"; subcommand?: "export" | "import"; error?: string };
97
+
98
+ export const SETTINGS_AREA_IDS = [
99
+ "chat",
100
+ "fleet",
101
+ "targets",
102
+ "context",
103
+ "safety",
104
+ "interface",
105
+ "integrations",
106
+ ] as const;
107
+ export type SettingsAreaId = (typeof SETTINGS_AREA_IDS)[number];
100
108
 
101
109
  type SlashCommandVariant =
102
110
  | { kind: "quit" }
@@ -107,12 +115,10 @@ type SlashCommandVariant =
107
115
  /** `ref` is the turnId an `[evicted ...]` marker names. */
108
116
  | { kind: "context-recall"; ref: string }
109
117
  | { kind: "skill-selector" }
110
- | { kind: "library"; tab?: LibraryEntryKind }
118
+ | { kind: "resources"; family?: "skills" | "prompts" | "extensions"; tab?: LibraryEntryKind }
111
119
  | { kind: "skill-invocation"; text: string }
112
- | { kind: "prompts" }
113
- | { kind: "extensions" }
114
- | { kind: "interop" }
115
120
  | ShareCommandVariant
121
+ | ArchiveCommandVariant
116
122
  /** `source` is the line the operator typed, echoed above the run's transcript block. */
117
123
  | { kind: "run"; agentId: string; task: string; options: RunCommandOptions; source: string }
118
124
  | { kind: "run-usage" }
@@ -131,7 +137,8 @@ type SlashCommandVariant =
131
137
  /** `/fleet run <name>`: compile the plan, show it for approval, dispatch on accept. */
132
138
  | { kind: "fleet-run"; name: string; vars: Record<string, string> }
133
139
  | { kind: "fleet-run-usage"; reason?: string }
134
- | { kind: "agents" }
140
+ | { kind: "fleet" }
141
+ | { kind: "agents"; connect?: boolean }
135
142
  | { kind: "cost" }
136
143
  | { kind: "context-view" }
137
144
  | { kind: "tasks" }
@@ -150,13 +157,17 @@ type SlashCommandVariant =
150
157
  | { kind: "panes-show"; target: string }
151
158
  /** A preset the model may also ask for, or operator-only argv. Never both. */
152
159
  | { kind: "panes-open"; preset?: PanesPresetId; argv?: ReadonlyArray<string>; once?: boolean }
160
+ /** Toggle zoom on a Clio-owned pane; the bare form targets the watch pane. */
161
+ | { kind: "panes-zoom"; target: string }
153
162
  | { kind: "panes-close"; target: string }
154
163
  | { kind: "panes-usage"; reason?: string }
155
164
  | { kind: "thinking-set"; level: string }
165
+ | { kind: "thinking-picker" }
156
166
  | { kind: "output-set"; verbosity: string }
167
+ | { kind: "output-picker" }
157
168
  | { kind: "model" }
158
169
  | { kind: "model-set"; pattern: string }
159
- | { kind: "settings"; section?: SettingsSectionId; rowId?: SettingsCenterRowId }
170
+ | { kind: "settings"; area?: SettingsAreaId; group?: string }
160
171
  | { kind: "resume" }
161
172
  | { kind: "new" }
162
173
  | { kind: "tree" }
@@ -314,7 +325,7 @@ async function runAttributed(
314
325
  /**
315
326
  * Dispatches /run through the dispatch contract and streams events to stdout.
316
327
  * Target + model are resolved by the dispatch domain from request overrides,
317
- * worker profiles, recipe hints, and `settings.workers.default`.
328
+ * worker profiles, recipe hints, and `settings.fleet.default`.
318
329
  */
319
330
  export async function handleRun(
320
331
  agentId: string,
@@ -685,8 +696,11 @@ export interface SlashCommandContext {
685
696
  * not be one the active target supports.
686
697
  */
687
698
  setThinkingLevel?: (level: string) => SetThinkingLevelResult;
699
+ thinkingLevelChoices?: () => ReadonlyArray<{ value: string; label: string }>;
700
+ openThinkingPicker?: () => void;
688
701
  /** Apply a transcript verbosity named on the command line; refused values are reported by the caller. */
689
702
  setOutputVerbosity?: (verbosity: string) => SetOutputVerbosityResult;
703
+ openOutputPicker?: () => void;
690
704
  openModel: () => void;
691
705
  /** Live providers contract used by `/model <pattern>` to resolve directly. */
692
706
  providers: ProvidersContract;
@@ -696,7 +710,8 @@ export interface SlashCommandContext {
696
710
  * changed; the dialog reports the outcome itself.
697
711
  */
698
712
  applyModelRef: (ref: ResolvedModelRef) => "applied" | "pending";
699
- openSettings: (section?: SettingsSectionId, rowId?: SettingsCenterRowId) => void;
713
+ openSettings: (area?: SettingsAreaId, group?: string) => void;
714
+ openFleetRuns?: () => void;
700
715
  openResume: () => void;
701
716
  startNewSession: () => void;
702
717
  openTree: () => void;
@@ -740,7 +755,7 @@ export interface SlashCommandContext {
740
755
  type SlashReceiptVerification = ReturnType<SlashCommandContext["verifyReceipt"]>;
741
756
 
742
757
  /** Compact multiline receipt verification for the composer notice surface. */
743
- export function formatReceiptVerificationBlock(runId: string, result: SlashReceiptVerification): string {
758
+ function formatReceiptVerificationBlock(runId: string, result: SlashReceiptVerification): string {
744
759
  const status = result.ok ? (result.compromised ? "compromised" : "ok") : result.retired ? "retired" : "fail";
745
760
  const lines = [
746
761
  `verify ${status} ${runId}`,
@@ -762,7 +777,7 @@ export function formatUserTaskHandoff(task: Pick<UserTask, "id" | "title" | "not
762
777
  }
763
778
 
764
779
  /** The verb a command performs, in the order /help lists the groups. */
765
- export const SLASH_COMMAND_GROUPS = ["Run", "Inspect", "Configure", "Sessions"] as const;
780
+ export const SLASH_COMMAND_GROUPS = ["Work", "Inspect", "Configure", "Session"] as const;
766
781
  export type SlashCommandGroup = (typeof SLASH_COMMAND_GROUPS)[number];
767
782
 
768
783
  export interface BuiltinSlashCommand {
@@ -789,8 +804,8 @@ function isRunThinkingLevel(value: string): value is JobThinkingLevel {
789
804
  return RUN_THINKING_LEVELS.some((level) => level === value);
790
805
  }
791
806
 
792
- function isSettingsSectionId(value: string): value is SettingsSectionId {
793
- return SETTINGS_SECTIONS.some((section) => section.id === value);
807
+ function isSettingsAreaId(value: string): value is SettingsAreaId {
808
+ return SETTINGS_AREA_IDS.some((area) => area === value);
794
809
  }
795
810
 
796
811
  /** `/context compact` alone keeps a free-form optional instruction tail. */
@@ -817,28 +832,6 @@ function fromArgsOrUsage(name: string, command: SlashCommand): (parsed: ParsedAr
817
832
  return (parsed) => (parsed.error ? { kind: "usage-error", command: name, reason: parsed.error } : command);
818
833
  }
819
834
 
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
835
  function usageNotice(entry: BuiltinSlashCommand, subcommand?: string): string {
843
836
  return usageLine(entry, subcommand).trim();
844
837
  }
@@ -848,16 +841,23 @@ function usageNotice(entry: BuiltinSlashCommand, subcommand?: string): string {
848
841
  * an operator reads rather than the object behind it, and so the registry keeps
849
842
  * its promise not to reach a renderer.
850
843
  */
851
- export function formatPanesStatus(status: PanesStatus): ReadonlyArray<string> {
844
+ function formatPanesStatus(status: PanesStatus): ReadonlyArray<string> {
852
845
  const server = status.server ? `pane host ${status.server.version}, protocol ${status.server.protocol}` : "no server";
853
846
  const lines = [
854
847
  `panes: mode=${status.mode} ${status.available ? "available" : "unavailable"} (${server})`,
855
848
  ` ${status.reason}`,
856
849
  ...(status.socketPath ? [` socket ${status.socketPath}`] : []),
857
- ` settings: enabled=${status.settings.enabled} notifications=${status.settings.notifications} journal=${status.settings.journal}`,
850
+ ` settings: enabled=${status.settings.enabled} notifications=${status.settings.notifications} layout=${status.settings.layout} journal=${status.settings.journal}`,
858
851
  ` files: enabled=${status.settings.yazi.enabled} mode=${status.settings.yazi.mode} profile=${status.settings.yazi.profile} followCwd=${status.settings.yazi.followCwd}`,
859
852
  ` 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
853
  ];
854
+ if (status.docks.length > 0) {
855
+ lines.push(
856
+ ` docks: ${status.docks
857
+ .map((dock) => `${dock.slot}=${dock.paneId} @${(dock.targetShare * 100).toFixed(0)}%`)
858
+ .join(", ")}`,
859
+ );
860
+ }
861
861
  if (status.panes.length === 0) {
862
862
  lines.push(" no Clio-owned panes");
863
863
  } else {
@@ -876,7 +876,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
876
876
  {
877
877
  name: "quit",
878
878
  description: "Exit Clio Coder",
879
- group: "Sessions",
879
+ group: "Session",
880
880
  kinds: ["quit"],
881
881
  args: {},
882
882
  fromArgs: fromArgsOrUsage("quit", { kind: "quit" }),
@@ -902,7 +902,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
902
902
  {
903
903
  name: "skill",
904
904
  description: "Open the Skills Hub or invoke a skill",
905
- group: "Run",
905
+ group: "Work",
906
906
  kinds: ["skill-selector", "skill-invocation"],
907
907
  args: {
908
908
  positionals: [
@@ -929,65 +929,74 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
929
929
  },
930
930
  },
931
931
  {
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 }] },
932
+ name: "resources",
933
+ description: "Browse skills, prompts, libraries, and extensions",
934
+ group: "Inspect",
935
+ kinds: ["resources"],
936
+ subcommandDescriptions: {
937
+ skills: "Browse installed skills",
938
+ prompts: "Browse prompt templates",
939
+ library: "Browse resource libraries",
940
+ extensions: "Browse installed extensions",
941
+ },
942
+ args: {
943
+ subcommands: {
944
+ skills: {},
945
+ prompts: {},
946
+ library: { positionals: [{ name: "kind", required: false }] },
947
+ extensions: {},
948
+ },
949
+ },
937
950
  fromArgs(parsed) {
938
- if (parsed.error) return { kind: "usage-error", command: "library", reason: parsed.error };
951
+ if (parsed.error) return { kind: "usage-error", command: "resources", reason: parsed.error };
952
+ if (parsed.subcommand === undefined || parsed.subcommand === "skills")
953
+ return { kind: "resources", family: "skills" };
954
+ if (parsed.subcommand === "prompts" || parsed.subcommand === "extensions")
955
+ return { kind: "resources", family: parsed.subcommand };
939
956
  const tab = parsed.positionals[0];
940
- if (tab === undefined) return { kind: "library" };
957
+ if (tab === undefined) return { kind: "resources" };
941
958
  if (!isLibraryTab(tab)) {
942
959
  const known = LIBRARY_TABS.map((entry) => entry.id).join(", ");
943
- return { kind: "usage-error", command: "library", reason: `Unknown kind: ${tab} (one of ${known})` };
960
+ return { kind: "usage-error", command: "resources", reason: `Unknown kind: ${tab} (one of ${known})` };
944
961
  }
945
- return { kind: "library", tab };
962
+ return { kind: "resources", tab };
946
963
  },
947
964
  handle(command, ctx) {
948
- if (command.kind === "library") ctx.openSkillsHub?.(command.tab);
949
- },
950
- },
951
- {
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();
965
+ if (command.kind !== "resources") return;
966
+ if (command.family === "prompts") ctx.openPrompts();
967
+ else if (command.family === "extensions") ctx.openExtensions();
968
+ else ctx.openSkillsHub?.(command.tab);
960
969
  },
961
970
  },
962
971
  {
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?.();
972
+ name: "share",
973
+ description: "Share a worker result with the main agent",
974
+ group: "Work",
975
+ kinds: ["share"],
976
+ args: { positionals: [{ name: "run-id", required: false }] },
977
+ fromArgs(parsed) {
978
+ const retiredArchiveVerb = parsed.positionals[0];
979
+ if (retiredArchiveVerb === "export" || retiredArchiveVerb === "import") {
980
+ return {
981
+ kind: "usage-error",
982
+ command: "share",
983
+ reason: `/share ${retiredArchiveVerb} is retired and did not run; use /archive ${retiredArchiveVerb}`,
984
+ };
985
+ }
986
+ if (parsed.error) return { kind: "usage-error", command: "share", reason: parsed.error };
987
+ return { kind: "share", ...(parsed.positionals[0] ? { runId: parsed.positionals[0] } : {}) };
971
988
  },
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?.();
989
+ handle(command, ctx) {
990
+ if (command.kind === "share") shareWorkerRun(command.runId, ctx);
982
991
  },
983
992
  },
984
993
  {
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"],
994
+ name: "archive",
995
+ description: "Export or import a full Clio archive",
996
+ group: "Session",
997
+ kinds: ["archive-export", "archive-import", "archive-usage"],
998
+ subcommandDescriptions: { export: "Export a full Clio archive", import: "Import a full Clio archive" },
989
999
  args: {
990
- positionals: [{ name: "runId", required: false }],
991
1000
  subcommands: {
992
1001
  export: {
993
1002
  positionals: [{ name: "path", required: true }],
@@ -1002,56 +1011,43 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1002
1011
  const subcommand = parsed.subcommand === "export" || parsed.subcommand === "import" ? parsed.subcommand : undefined;
1003
1012
  if (parsed.error) {
1004
1013
  return {
1005
- kind: "share",
1006
- action: "usage",
1014
+ kind: "archive-usage",
1007
1015
  ...(subcommand !== undefined ? { subcommand } : {}),
1008
1016
  error: parsed.error,
1009
1017
  };
1010
1018
  }
1011
1019
  const path = parsed.positionals[0];
1012
- if (subcommand === "export" && path !== undefined) return { kind: "share", action: "export", path };
1020
+ if (subcommand === "export" && path !== undefined) return { kind: "archive-export", path };
1013
1021
  if (subcommand === "import" && path !== undefined) {
1014
1022
  return {
1015
- kind: "share",
1016
- action: "import",
1023
+ kind: "archive-import",
1017
1024
  path,
1018
1025
  dryRun: parsed.flags.has("--dry-run"),
1019
1026
  force: parsed.flags.has("--force"),
1020
1027
  };
1021
1028
  }
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 } : {}) };
1029
+ return { kind: "archive-usage", ...(subcommand !== undefined ? { subcommand } : {}) };
1029
1030
  },
1030
1031
  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");
1032
+ if (command.kind === "archive-usage") {
1033
+ const entry = BUILTIN_SLASH_COMMANDS.find((candidate) => candidate.name === "archive");
1038
1034
  if (!entry) return;
1039
1035
  const usage = usageNotice(entry, command.subcommand);
1040
1036
  ctx.notice("info", command.error ? `${command.error}\n${usage}` : usage);
1041
1037
  return;
1042
1038
  }
1043
- if (command.action === "export") {
1039
+ if (command.kind === "archive-export") {
1044
1040
  if (!ctx.exportShareArchive) {
1045
- ctx.notice("error", "share export is not wired");
1041
+ ctx.notice("error", "archive export is not wired");
1046
1042
  return;
1047
1043
  }
1048
1044
  const result = ctx.exportShareArchive(command.path);
1049
1045
  ctx.notice("success", `exported ${result.fileCount} item(s) to ${result.path}`);
1050
1046
  return;
1051
1047
  }
1052
- if (command.action === "import") {
1048
+ if (command.kind === "archive-import") {
1053
1049
  if (!ctx.importShareArchive) {
1054
- ctx.notice("error", "share import is not wired");
1050
+ ctx.notice("error", "archive import is not wired");
1055
1051
  return;
1056
1052
  }
1057
1053
  const plan = ctx.importShareArchive(command.path, { dryRun: command.dryRun, force: command.force });
@@ -1072,7 +1068,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1072
1068
  {
1073
1069
  name: "run",
1074
1070
  description: "Run a fleet agent",
1075
- group: "Run",
1071
+ group: "Work",
1076
1072
  kinds: ["run", "run-usage"],
1077
1073
  args: {
1078
1074
  parseFlagsBeforeRest: true,
@@ -1163,7 +1159,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1163
1159
  {
1164
1160
  name: "delegate",
1165
1161
  description: "Run an ACP delegation agent",
1166
- group: "Run",
1162
+ group: "Work",
1167
1163
  kinds: ["delegate", "delegate-usage"],
1168
1164
  args: {
1169
1165
  parseFlagsBeforeRest: true,
@@ -1210,7 +1206,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1210
1206
  {
1211
1207
  name: "btw",
1212
1208
  description: "Ask a side question that never enters the session transcript",
1213
- group: "Run",
1209
+ group: "Work",
1214
1210
  kinds: ["btw", "btw-usage"],
1215
1211
  args: {
1216
1212
  positionals: [{ name: "question", required: true, rest: true }],
@@ -1233,7 +1229,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1233
1229
  {
1234
1230
  name: "oracle",
1235
1231
  description: "Ask a read-only advisor to challenge a question against this session's settled decisions",
1236
- group: "Run",
1232
+ group: "Work",
1237
1233
  kinds: ["oracle", "oracle-usage"],
1238
1234
  args: {
1239
1235
  positionals: [{ name: "question", required: true, rest: true }],
@@ -1259,7 +1255,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1259
1255
  {
1260
1256
  name: "council",
1261
1257
  description: "Ask a roster of read-only members the same task, with an optional vote or judge synthesis",
1262
- group: "Run",
1258
+ group: "Work",
1263
1259
  kinds: ["council", "council-usage"],
1264
1260
  args: {
1265
1261
  parseFlagsBeforeRest: true,
@@ -1311,16 +1307,24 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1311
1307
  },
1312
1308
  {
1313
1309
  name: "agents",
1314
- description: "List Clio agents and ACP delegation agents",
1310
+ description: "List agents or connect a detected external agent",
1315
1311
  group: "Inspect",
1316
1312
  kinds: ["agents"],
1317
- args: {},
1318
- fromArgs: fromArgsOrUsage("agents", { kind: "agents" }),
1319
- handle(_command, ctx) {
1320
- ctx.openAgents();
1313
+ subcommandDescriptions: {
1314
+ list: "List native and external agents",
1315
+ connect: "Review detected external-agent proposals",
1316
+ },
1317
+ args: { subcommands: { list: {}, connect: {} } },
1318
+ fromArgs(parsed) {
1319
+ if (parsed.error) return { kind: "usage-error", command: "agents", reason: parsed.error };
1320
+ return { kind: "agents", ...(parsed.subcommand === "connect" ? { connect: true } : {}) };
1321
+ },
1322
+ handle(command, ctx) {
1323
+ if (command.kind !== "agents") return;
1324
+ if (command.connect) ctx.openInterop?.();
1325
+ else ctx.openAgents();
1321
1326
  },
1322
1327
  },
1323
- settingsDeepLink("targets", "targets", "Open Settings → Targets: health, use, connect, probe, remove"),
1324
1328
  {
1325
1329
  name: "cost",
1326
1330
  description: "Show session token and cost totals",
@@ -1405,9 +1409,9 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1405
1409
  },
1406
1410
  {
1407
1411
  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"],
1412
+ description: "Open Fleet Runs or run a fleet contract with an approval preview",
1413
+ group: "Work",
1414
+ kinds: ["fleet", "fleet-run", "fleet-run-usage"],
1411
1415
  subcommandDescriptions: { run: "Preview and run a repo-owned fleet contract" },
1412
1416
  args: {
1413
1417
  subcommands: {
@@ -1417,17 +1421,9 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1417
1421
  },
1418
1422
  },
1419
1423
  },
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
1424
  fromArgs(parsed) {
1427
1425
  if (parsed.subcommand !== "run") {
1428
- return parsed.error
1429
- ? { kind: "usage-error", command: "fleet", reason: parsed.error }
1430
- : { kind: "settings", section: "fleet" };
1426
+ return parsed.error ? { kind: "usage-error", command: "fleet", reason: parsed.error } : { kind: "fleet" };
1431
1427
  }
1432
1428
  if (parsed.error) return { kind: "fleet-run-usage", reason: parsed.error };
1433
1429
  const name = parsed.positionals[0] ?? "";
@@ -1442,6 +1438,11 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1442
1438
  return { kind: "fleet-run", name, vars };
1443
1439
  },
1444
1440
  handle(command, ctx) {
1441
+ if (command.kind === "fleet") {
1442
+ if (ctx.openFleetRuns) ctx.openFleetRuns();
1443
+ else ctx.notice("error", "Fleet Runs is not wired in this session");
1444
+ return;
1445
+ }
1445
1446
  if (command.kind === "fleet-run-usage") {
1446
1447
  const entry = BUILTIN_SLASH_COMMANDS.find((candidate) => candidate.name === "fleet");
1447
1448
  const usage = entry ? usageNotice(entry, "run") : "usage: /fleet run <name> [--var key=value ...]";
@@ -1629,19 +1630,21 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1629
1630
  name: "panes",
1630
1631
  description: "Inspect the pane layer, watch a live run in a pane, or open a utility pane",
1631
1632
  group: "Inspect",
1632
- kinds: ["panes", "panes-show", "panes-open", "panes-close", "panes-usage"],
1633
+ kinds: ["panes", "panes-show", "panes-open", "panes-zoom", "panes-close", "panes-usage"],
1633
1634
  args: {
1634
1635
  subcommands: {
1635
1636
  show: { positionals: [{ name: "run-or-agent", required: true }] },
1636
1637
  // A rest positional, so an argv pane keeps its own flags: the parser
1637
1638
  // would otherwise refuse `--follow` as an unknown flag of `/panes`.
1638
1639
  open: { positionals: [{ name: "preset-or-argv", required: true, rest: true }] },
1640
+ zoom: { positionals: [{ name: "target", required: false }] },
1639
1641
  close: { positionals: [{ name: "target", required: false }] },
1640
1642
  },
1641
1643
  },
1642
1644
  subcommandDescriptions: {
1643
1645
  show: "watch a live run or agent in the watch pane",
1644
1646
  open: `open a utility pane (${PANES_PRESET_IDS.join(", ")}, or a command)`,
1647
+ zoom: "toggle zoom on a Clio-owned pane (default: the watch pane)",
1645
1648
  close: "close a Clio-owned pane, or all of them",
1646
1649
  },
1647
1650
  fromArgs(parsed) {
@@ -1662,6 +1665,9 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1662
1665
  }
1663
1666
  return { kind: "panes-open", argv };
1664
1667
  }
1668
+ if (parsed.subcommand === "zoom") {
1669
+ return { kind: "panes-zoom", target: parsed.positionals[0] ?? "" };
1670
+ }
1665
1671
  if (parsed.subcommand === "close") {
1666
1672
  return { kind: "panes-close", target: parsed.positionals[0] ?? "all" };
1667
1673
  }
@@ -1735,6 +1741,19 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1735
1741
  });
1736
1742
  return;
1737
1743
  }
1744
+ if (command.kind === "panes-zoom") {
1745
+ runLocal(async () => {
1746
+ const result = await panes.zoom(command.target);
1747
+ if (result.status === "zoomed") {
1748
+ ctx.notice("success", `toggled zoom on ${result.label} (${result.paneId})`);
1749
+ } else if (result.status === "not-found") {
1750
+ ctx.notice("warn", `no Clio-owned pane matches ${result.target}`);
1751
+ } else {
1752
+ ctx.notice("warn", result.reason);
1753
+ }
1754
+ });
1755
+ return;
1756
+ }
1738
1757
  if (command.kind !== "panes-close") return;
1739
1758
  runLocal(async () => {
1740
1759
  const result = await panes.close(command.target);
@@ -1751,18 +1770,21 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1751
1770
  },
1752
1771
  {
1753
1772
  name: "thinking",
1754
- description: "Set the chat thinking level, or open Settings → Orchestrator",
1773
+ description: "Set the chat thinking level",
1755
1774
  group: "Configure",
1756
- kinds: ["thinking-set"],
1775
+ kinds: ["thinking-set", "thinking-picker"],
1757
1776
  args: { positionals: [{ name: "level", required: false }] },
1758
1777
  fromArgs(parsed) {
1759
1778
  if (parsed.error) return { kind: "usage-error", command: "thinking", reason: parsed.error };
1760
1779
  const level = parsed.positionals[0];
1761
- return level
1762
- ? { kind: "thinking-set", level }
1763
- : { kind: "settings", section: "orchestrator", rowId: "orchestrator.thinkingLevel" };
1780
+ return level ? { kind: "thinking-set", level } : { kind: "thinking-picker" };
1764
1781
  },
1765
1782
  handle(command, ctx) {
1783
+ if (command.kind === "thinking-picker") {
1784
+ if (ctx.openThinkingPicker) ctx.openThinkingPicker();
1785
+ else ctx.notice("error", "thinking picker is not wired in this session");
1786
+ return;
1787
+ }
1766
1788
  if (command.kind !== "thinking-set") return;
1767
1789
  const result = ctx.setThinkingLevel?.(command.level) ?? { status: "unavailable" as const };
1768
1790
  if (result.status === "applied") {
@@ -1777,18 +1799,21 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1777
1799
  },
1778
1800
  {
1779
1801
  name: "output",
1780
- description: "Set transcript detail (minimal, default, verbose), or open Settings → Terminal",
1802
+ description: "Set transcript detail to minimal, default, or verbose",
1781
1803
  group: "Configure",
1782
- kinds: ["output-set"],
1804
+ kinds: ["output-set", "output-picker"],
1783
1805
  args: { positionals: [{ name: "verbosity", required: false }] },
1784
1806
  fromArgs(parsed) {
1785
1807
  if (parsed.error) return { kind: "usage-error", command: "output", reason: parsed.error };
1786
1808
  const verbosity = parsed.positionals[0];
1787
- return verbosity
1788
- ? { kind: "output-set", verbosity }
1789
- : { kind: "settings", section: "terminal", rowId: "terminal.outputVerbosity" };
1809
+ return verbosity ? { kind: "output-set", verbosity } : { kind: "output-picker" };
1790
1810
  },
1791
1811
  handle(command, ctx) {
1812
+ if (command.kind === "output-picker") {
1813
+ if (ctx.openOutputPicker) ctx.openOutputPicker();
1814
+ else ctx.notice("error", "output picker is not wired in this session");
1815
+ return;
1816
+ }
1792
1817
  if (command.kind !== "output-set") return;
1793
1818
  const result = ctx.setOutputVerbosity?.(command.verbosity) ?? { status: "unavailable" as const };
1794
1819
  if (result.status === "applied") {
@@ -1847,36 +1872,38 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1847
1872
  })();
1848
1873
  },
1849
1874
  },
1850
- settingsDeepLink(
1851
- "scoped-models",
1852
- "models",
1853
- "Open Settings → Models: the Alt+J / Alt+K cycle set and favorites",
1854
- "scope",
1855
- ),
1856
1875
  {
1857
1876
  name: "settings",
1858
1877
  description: "Open interactive settings",
1859
1878
  group: "Configure",
1860
1879
  kinds: ["settings"],
1861
- args: { positionals: [{ name: "section", required: false }] },
1880
+ args: {
1881
+ positionals: [
1882
+ { name: "area", required: false },
1883
+ { name: "group", required: false },
1884
+ ],
1885
+ },
1862
1886
  fromArgs(parsed) {
1863
1887
  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})` };
1888
+ const area = parsed.positionals[0];
1889
+ if (area === undefined) return { kind: "settings" };
1890
+ if (!isSettingsAreaId(area)) {
1891
+ return {
1892
+ kind: "usage-error",
1893
+ command: "settings",
1894
+ reason: `Unknown area: ${area} (one of ${SETTINGS_AREA_IDS.join(", ")})`,
1895
+ };
1869
1896
  }
1870
- return { kind: "settings", section };
1897
+ return { kind: "settings", area, ...(parsed.positionals[1] ? { group: parsed.positionals[1] } : {}) };
1871
1898
  },
1872
1899
  handle(command, ctx) {
1873
- if (command.kind === "settings") ctx.openSettings(command.section, command.rowId);
1900
+ if (command.kind === "settings") ctx.openSettings(command.area, command.group);
1874
1901
  },
1875
1902
  },
1876
1903
  {
1877
1904
  name: "resume",
1878
1905
  description: "Resume a past session",
1879
- group: "Sessions",
1906
+ group: "Session",
1880
1907
  kinds: ["resume"],
1881
1908
  args: {},
1882
1909
  fromArgs: fromArgsOrUsage("resume", { kind: "resume" }),
@@ -1887,7 +1914,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1887
1914
  {
1888
1915
  name: "new",
1889
1916
  description: "Start a fresh session",
1890
- group: "Sessions",
1917
+ group: "Session",
1891
1918
  kinds: ["new"],
1892
1919
  args: {},
1893
1920
  fromArgs: fromArgsOrUsage("new", { kind: "new" }),
@@ -1898,7 +1925,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1898
1925
  {
1899
1926
  name: "handoff",
1900
1927
  description: "Hand this session's working state to a fresh session for a stated goal",
1901
- group: "Sessions",
1928
+ group: "Session",
1902
1929
  kinds: ["handoff", "handoff-usage"],
1903
1930
  args: {
1904
1931
  positionals: [{ name: "goal", required: true, rest: true }],
@@ -1921,7 +1948,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1921
1948
  {
1922
1949
  name: "tree",
1923
1950
  description: "Open session tree navigator",
1924
- group: "Sessions",
1951
+ group: "Session",
1925
1952
  kinds: ["tree"],
1926
1953
  args: {},
1927
1954
  fromArgs: fromArgsOrUsage("tree", { kind: "tree" }),
@@ -1932,7 +1959,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1932
1959
  {
1933
1960
  name: "fork",
1934
1961
  description: "Fork from an assistant turn",
1935
- group: "Sessions",
1962
+ group: "Session",
1936
1963
  kinds: ["fork"],
1937
1964
  args: {},
1938
1965
  fromArgs: fromArgsOrUsage("fork", { kind: "fork" }),
@@ -1943,7 +1970,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1943
1970
  {
1944
1971
  name: "export",
1945
1972
  description: "Export a self-contained HTML transcript by default; a .md path writes Markdown",
1946
- group: "Sessions",
1973
+ group: "Session",
1947
1974
  kinds: ["export"],
1948
1975
  args: {
1949
1976
  positionals: [{ name: "path", required: false }],
@@ -2015,6 +2042,32 @@ const COMMAND_SHAPED_TOKEN = /^[A-Za-z][A-Za-z0-9:-]*$/u;
2015
2042
  */
2016
2043
  const COMMAND_ESCAPE = "\\/";
2017
2044
 
2045
+ const RETIRED_COMMAND_HINTS: Readonly<Record<string, string>> = Object.freeze({
2046
+ status: "Use the footer or Alt+U for status; /cost, /context, and /fleet inspect their own domains.",
2047
+ receipts: "Use /view or /view verify <run-id>.",
2048
+ "context-init": "Use /context init.",
2049
+ "context-clear": "Use /context reset for project context or /new for a fresh session.",
2050
+ "context-view": "Use /context.",
2051
+ compact: "Use /context compact [instructions].",
2052
+ skills: "Use /skill or /resources skills.",
2053
+ exit: "Use /quit.",
2054
+ config: "Use /settings.",
2055
+ ctx: "Use /context.",
2056
+ models: "Use /model.",
2057
+ clear: "Use /new for a fresh session or /context reset for project context.",
2058
+ library: "Use /resources library [kind].",
2059
+ prompts: "Use /resources prompts.",
2060
+ extensions: "Use /resources extensions.",
2061
+ interop: "Use /agents connect.",
2062
+ targets: "Use /settings targets.",
2063
+ "scoped-models": "Use /settings chat model-picker.",
2064
+ });
2065
+
2066
+ function retiredCommandHint(token: string): string | undefined {
2067
+ if (/^skills?:[^\s]+$/u.test(token)) return "Use /skill <name> [task].";
2068
+ return RETIRED_COMMAND_HINTS[token];
2069
+ }
2070
+
2018
2071
  /** Pure slash-command parser: no I/O, no side effects. Walks the registry in order. */
2019
2072
  export function parseSlashCommand(input: string): SlashCommand {
2020
2073
  const trimmed = input.trim();
@@ -2044,6 +2097,12 @@ export function dispatchSlashCommand(command: SlashCommand, ctx: SlashCommandCon
2044
2097
  return "accepted";
2045
2098
  }
2046
2099
  if (command.kind === "unknown-command") {
2100
+ const retiredHint = retiredCommandHint(command.token);
2101
+ if (retiredHint) {
2102
+ ctx.notice("error", `/${command.token} is retired and did not run. ${retiredHint}`);
2103
+ ctx.render();
2104
+ return "rejected";
2105
+ }
2047
2106
  // The registry does not own the token, but a prompt template might. The
2048
2107
  // parser stays pure, so the lookup happens here, and only for a spelling
2049
2108
  // that matched no command: `/name` is how every other agent invokes the
@@ -2085,18 +2144,55 @@ export interface CommandReferenceEntry {
2085
2144
  subcommandDescriptions?: Readonly<Record<string, string>>;
2086
2145
  }
2087
2146
 
2147
+ const COMMAND_ORDER = [
2148
+ "run",
2149
+ "fleet",
2150
+ "delegate",
2151
+ "council",
2152
+ "oracle",
2153
+ "btw",
2154
+ "share",
2155
+ "skill",
2156
+ "agents",
2157
+ "tasks",
2158
+ "context",
2159
+ "memory",
2160
+ "view",
2161
+ "panes",
2162
+ "cost",
2163
+ "decisions",
2164
+ "resources",
2165
+ "help",
2166
+ "model",
2167
+ "thinking",
2168
+ "output",
2169
+ "settings",
2170
+ "new",
2171
+ "resume",
2172
+ "handoff",
2173
+ "fork",
2174
+ "tree",
2175
+ "export",
2176
+ "archive",
2177
+ "quit",
2178
+ ] as const;
2179
+ const COMMAND_ORDER_INDEX = new Map<string, number>(COMMAND_ORDER.map((name, index) => [name, index]));
2180
+
2088
2181
  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
- });
2182
+ return BUILTIN_SLASH_COMMANDS.filter((entry) => entry.hidden !== true)
2183
+ .slice()
2184
+ .sort((a, b) => (COMMAND_ORDER_INDEX.get(a.name) ?? 99) - (COMMAND_ORDER_INDEX.get(b.name) ?? 99))
2185
+ .map((entry) => {
2186
+ const usage = usageLine(entry)
2187
+ .replace(/^\nusage:\s*/, "")
2188
+ .replace(/\n$/, "");
2189
+ return {
2190
+ name: entry.name,
2191
+ usage,
2192
+ description: entry.description,
2193
+ group: entry.group,
2194
+ ...(entry.args ? { args: entry.args } : {}),
2195
+ ...(entry.subcommandDescriptions ? { subcommandDescriptions: entry.subcommandDescriptions } : {}),
2196
+ };
2197
+ });
2102
2198
  }