@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.
- package/CHANGELOG.md +39 -0
- package/README.md +116 -16
- package/dist/{acp-G5WJBNCT.js → acp-ZILU3AUO.js} +14 -14
- package/dist/{agents-FMV2Q5G4.js → agents-HYWGBGQR.js} +40 -29
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-3IDSJEIK.js → auth-N3QT7CBO.js} +21 -19
- package/dist/{builtins-XCZWXSC7.js → builtins-UJLMOVOV.js} +6 -6
- package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
- package/dist/{chunk-3BT2XMV4.js → chunk-2NM363SV.js} +50 -57
- package/dist/{chunk-J4W7KFM7.js → chunk-2VG7KLYV.js} +24 -279
- package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
- package/dist/{chunk-K5C3NCBD.js → chunk-3I5NY75V.js} +5 -5
- package/dist/{chunk-VAZSBTKF.js → chunk-3QSOM6PA.js} +2 -2
- package/dist/{chunk-TZ3SGWZZ.js → chunk-5QIAJV2D.js} +2 -2
- package/dist/{chunk-OQBA45DZ.js → chunk-5YHDIDBP.js} +2 -2
- package/dist/{chunk-NHLBIGRH.js → chunk-6CCS4G3W.js} +40 -17
- package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
- package/dist/{chunk-LDQ2ZF2M.js → chunk-6FN3E6KX.js} +5 -5
- package/dist/{chunk-X3YGUTOB.js → chunk-6HMJX2VU.js} +59 -59
- package/dist/{chunk-VEO4AP2K.js → chunk-6I5ILFOF.js} +3 -2
- package/dist/{chunk-B7OBL7PK.js → chunk-6NJQITNH.js} +18 -11
- package/dist/{chunk-IQ7KR472.js → chunk-6VC4OV3Z.js} +6 -3
- package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
- package/dist/{chunk-AB44T6BB.js → chunk-74YWRRU5.js} +8 -7
- package/dist/{chunk-SJ5ZKQ4S.js → chunk-7EPLI7VL.js} +2 -2
- package/dist/{chunk-HWHKMHUA.js → chunk-7OBGU7UB.js} +3 -3
- package/dist/{chunk-2OQE55CK.js → chunk-7PWAODYW.js} +2 -2
- package/dist/{chunk-IBEBSCYA.js → chunk-7RY5VZPH.js} +42 -33
- package/dist/{chunk-LQ3DZAMX.js → chunk-ABLSQ6JX.js} +2 -2
- package/dist/{chunk-QLFS5GO2.js → chunk-AFKWHWXF.js} +12 -22
- package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
- package/dist/{chunk-O6TL7WWY.js → chunk-AKB4GYDL.js} +4 -4
- package/dist/chunk-AP73CFDC.js +308 -0
- package/dist/{chunk-JDG2WCRO.js → chunk-BBTJOK6Y.js} +5 -5
- package/dist/{chunk-SP2RXXYO.js → chunk-BDPT6GTK.js} +10 -10
- package/dist/{chunk-NQQH3YT7.js → chunk-BJGUKIG4.js} +3 -3
- package/dist/{chunk-O4XIVISU.js → chunk-BTGG6BG2.js} +79 -38
- package/dist/chunk-BTK3SSSK.js +67 -0
- package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
- package/dist/chunk-BWW4HLO4.js +301 -0
- package/dist/{chunk-I5VEOC6I.js → chunk-C537JADH.js} +10 -10
- package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
- package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
- package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
- package/dist/chunk-D7E7WCDF.js +27 -0
- package/dist/{chunk-WZR7K7ZX.js → chunk-E67WX76H.js} +6 -6
- package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
- package/dist/chunk-EIMVLWB3.js +1842 -0
- package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
- package/dist/{chunk-MLKNTWH2.js → chunk-FYUN5KZ3.js} +21 -21
- package/dist/{chunk-YJX4SHTD.js → chunk-GIZNH63R.js} +1 -1
- package/dist/{chunk-X75E3D2N.js → chunk-GPPB3JBE.js} +18 -16
- package/dist/{chunk-GR5G2PVF.js → chunk-GVQJ5CCZ.js} +15 -10
- package/dist/chunk-HJWWJ6IL.js +184 -0
- package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
- package/dist/{chunk-VYMXRQI6.js → chunk-HUAS7ITX.js} +89 -93
- package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
- package/dist/{chunk-DYJP44XW.js → chunk-IG7BCQBA.js} +1 -1
- package/dist/{chunk-32KWKNSF.js → chunk-IXJT6DCX.js} +3 -3
- package/dist/{chunk-C2LTL2W6.js → chunk-J4HBWF6Y.js} +360 -172
- package/dist/chunk-J5LZHVIT.js +284 -0
- package/dist/{chunk-QLL7ILRG.js → chunk-JA5QWE4Z.js} +510 -202
- package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
- package/dist/{chunk-36EJLSQQ.js → chunk-JZWT5J3Y.js} +4 -4
- package/dist/{chunk-HZHHCK24.js → chunk-K6BF4U2H.js} +476 -322
- package/dist/{chunk-Z2RR6MAK.js → chunk-MA3H6DM5.js} +6 -6
- package/dist/{chunk-CODPRO7Q.js → chunk-MOPSG2X7.js} +6 -6
- package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
- package/dist/{chunk-YDFRH54B.js → chunk-N5UK64DP.js} +4 -4
- package/dist/chunk-NDDGJUXD.js +81 -0
- package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
- package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
- package/dist/{chunk-W5VSYASO.js → chunk-OJTRZGR3.js} +46 -87
- package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
- package/dist/{chunk-3URVFKWK.js → chunk-PJJ6MY27.js} +5 -5
- package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
- package/dist/{chunk-GKF55TAZ.js → chunk-PVAMAVBB.js} +3 -2
- package/dist/{chunk-6DB53AJS.js → chunk-QKIFBZKT.js} +7 -7
- package/dist/{chunk-HJJTYUHX.js → chunk-QMXC4JB7.js} +20 -20
- package/dist/chunk-QTFGO774.js +644 -0
- package/dist/{chunk-CY6FY24N.js → chunk-R23Z6K6I.js} +2 -2
- package/dist/{chunk-ULC6OTWO.js → chunk-R32CLGZ6.js} +13 -13
- package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
- package/dist/{chunk-F4CKPOEQ.js → chunk-SCYB3HA4.js} +72 -26
- package/dist/{chunk-LY4S7GJC.js → chunk-SINK3QR6.js} +18 -16
- package/dist/{chunk-U77AMWDL.js → chunk-TD3PGPQA.js} +43 -22
- package/dist/{chunk-QBJA7R7N.js → chunk-THYWACCR.js} +2 -2
- package/dist/{chunk-QREDIESB.js → chunk-TVH4ONAM.js} +14 -8
- package/dist/chunk-U2WB7TZS.js +271 -0
- package/dist/{chunk-KFZI4NIL.js → chunk-UAPGZHYC.js} +145 -31
- package/dist/{chunk-DQITNCXG.js → chunk-UEDMSP56.js} +29 -14
- package/dist/{chunk-3XML7CDN.js → chunk-UXN6JT4W.js} +2 -2
- package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
- package/dist/{chunk-BPKCPIL7.js → chunk-VEGN6WIQ.js} +2 -2
- package/dist/chunk-VKFQTNDV.js +66 -0
- package/dist/{chunk-7MCTRUCE.js → chunk-VKRH2TCS.js} +2 -2
- package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
- package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
- package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
- package/dist/{chunk-SUCTJL45.js → chunk-WR6U3OVP.js} +3 -3
- package/dist/{chunk-BUMFYQFY.js → chunk-XKA2ICR3.js} +124 -113
- package/dist/{chunk-UXMFQ54G.js → chunk-Y45G3AXC.js} +39 -39
- package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
- package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
- package/dist/{chunk-V5DHCITQ.js → chunk-ZAZB4JMW.js} +23 -12
- package/dist/{chunk-Z4TXYIEG.js → chunk-ZJLUDYFY.js} +9 -9
- package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
- package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
- package/dist/cli/index.js +36 -36
- package/dist/{clio-2JXHBBY5.js → clio-IT3G3VQH.js} +12 -13
- package/dist/{code-nav-3YYRMYNF.js → code-nav-RK6S7F6E.js} +5 -5
- package/dist/codewiki/build-worker.js +1 -1
- package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
- package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
- package/dist/{config-QZPCMYSO.js → config-3QZRWZJF.js} +53 -49
- package/dist/{configure-TEGEBYCA.js → configure-FL7Y3KJF.js} +25 -22
- package/dist/{context-E6H5RNMC.js → context-5HE7ODYK.js} +47 -43
- package/dist/{context-AV7OEZ4D.js → context-KYQFRVDC.js} +11 -11
- package/dist/{context-GSXUE4CT.js → context-XNHL75JV.js} +32 -19
- package/dist/{context-clear-SHIBYK6T.js → context-clear-N545L53A.js} +47 -43
- package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-QHKXSV2F.js} +10 -9
- package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-RGIE5PCT.js} +56 -47
- package/dist/{docs-23KQS3XK.js → docs-5NAF6AU7.js} +5 -11
- package/dist/doctor-ZGPEGHIP.js +772 -0
- package/dist/{eval-TFBYQH4H.js → eval-GXLL44RD.js} +63 -45
- package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-HBWSWQOK.js} +7 -8
- package/dist/{evidence-ERGESKGN.js → evidence-HWLBRH3Q.js} +44 -40
- package/dist/{evolve-VDXTSYCJ.js → evolve-FTZBMNVW.js} +43 -39
- package/dist/{extensions-7BGBHN57.js → extensions-VHRBEID7.js} +4 -4
- package/dist/{fleet-2RRVDF2V.js → fleet-CKZHJWZJ.js} +86 -73
- package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EXDXBMV6.js} +10 -9
- package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-OTHB6KRL.js} +5 -5
- package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-YTEZUCUT.js} +13 -11
- package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-SS6YMDCK.js} +44 -41
- package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-PBY4VYOM.js} +5 -9
- package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-KMEM5L3S.js} +16 -13
- package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-QD5M7E7Q.js} +42 -39
- package/dist/{fleet-view-ZCON35AG.js → fleet-view-WAMJYNDT.js} +44 -52
- package/dist/{init-DN2WWLFE.js → init-5XQRBOFV.js} +63 -58
- package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
- package/dist/{interop-OZBKXAYL.js → interop-34TVO25M.js} +13 -11
- package/dist/{library-YWZG7IMW.js → library-3QY6KF57.js} +17 -14
- package/dist/{memory-I4C4HMLW.js → memory-L4UTIIIW.js} +45 -41
- package/dist/{models-CEYXJBO6.js → models-ZVX3QOWE.js} +39 -31
- package/dist/{monitor-NZ6GCI3P.js → monitor-CEKVSYTS.js} +50 -46
- package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-77BAP6BC.js} +1807 -1039
- package/dist/{panes-KY6W3V2E.js → panes-7STHOAUJ.js} +4 -4
- package/dist/{panes-HMABYVO4.js → panes-SHAUIRXY.js} +10 -8
- package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
- package/dist/{reset-DQ6FGCSH.js → reset-EOLM7GVE.js} +7 -8
- package/dist/{resources-BB3MVJMD.js → resources-74GKTLSF.js} +17 -13
- package/dist/{run-H2GQDUER.js → run-HBAUJNNZ.js} +86 -76
- package/dist/{share-GTJN6A5O.js → share-G3APVLVP.js} +17 -14
- package/dist/{skills-L55TEW6R.js → skills-35HHUKCR.js} +19 -16
- package/dist/{skills-eval-XVXPH2JI.js → skills-eval-QN4HSHDC.js} +55 -57
- package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-J357J34F.js} +15 -12
- package/dist/{slash-commands-ZSGASKJC.js → slash-commands-JZZCQA32.js} +31 -29
- package/dist/{steer-RZGSCY4R.js → steer-XAVHJM22.js} +3 -3
- package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
- package/dist/{targets-NCPZ644J.js → targets-DSM6CY3M.js} +59 -53
- package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-JOPFUVEM.js} +14 -9
- package/dist/{tools-DAF3DI3C.js → tools-MKNWVPBH.js} +10 -8
- package/dist/{trace-FYVW2MQA.js → trace-ECQ7TIYZ.js} +48 -3
- package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
- package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
- package/dist/{upgrade-3XPP6OQL.js → upgrade-H7TOM7YL.js} +35 -62
- package/dist/{usage-3NLHGTU2.js → usage-X52N3IDJ.js} +51 -48
- package/dist/{verifiers-SSQONKRT.js → verifiers-EJTVVSMA.js} +10 -9
- package/dist/{verify-3U6J7FZI.js → verify-YJL6XET2.js} +9 -8
- package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPIFL3LL.js} +1 -2
- package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-4NDZTQ4B.js} +66 -63
- package/dist/{with-panes-MKB46MPQ.js → with-panes-OBOBFIIR.js} +62 -26
- package/dist/worker/entry.js +57 -52
- package/docs/acp.md +1 -1
- package/docs/built-in-agents.md +40 -32
- package/docs/commands-and-modes.md +9 -3
- package/docs/config-knobs-audit.md +3 -0
- package/docs/configuration-and-targets.md +105 -164
- package/docs/environment-variables.md +2 -1
- package/docs/exit-codes-and-output.md +2 -0
- package/docs/fleet-demo-runbook.md +6 -3
- package/docs/fleet-dispatch.md +8 -6
- package/docs/installation-and-lifecycle.md +1 -1
- package/docs/release-cut-checklist.md +164 -177
- package/docs/trace-store.md +15 -10
- package/docs/troubleshooting.md +1 -1
- package/evals/README.md +5 -0
- package/evals/behavioral-corpus-grader.mjs +103 -0
- package/evals/behavioral-machinery-baseline.json +2276 -0
- package/evals/behavioral-machinery-driver.ts +250 -0
- package/evals/behavioral-machinery-support.ts +253 -0
- package/evals/behavioral-machinery.yaml +614 -0
- package/evals/behavioral-model-negative-control.yaml +68 -0
- package/evals/behavioral-model.yaml +216 -0
- package/evals/fixtures/behavioral-facts.txt +3 -0
- package/evals/fixtures/behavioral-main.ts +7 -0
- package/evals/fixtures/decoy/note.txt +2 -0
- package/evals/fixtures/private/credentials.txt +1 -0
- package/evals/tracked-metrics-baseline.yaml +229 -0
- package/evals/tracked-metrics-grader.mjs +129 -0
- package/package.json +5 -15
- package/skills/README.md +6 -6
- package/skills/coding/ast-grep/SKILL.md +8 -2
- package/skills/coding/coding-standards/SKILL.md +8 -2
- package/skills/coding/prototype/SKILL.md +8 -2
- package/skills/coding/tdd/SKILL.md +8 -2
- package/skills/context/context-handoff/SKILL.md +12 -3
- package/skills/context/context-handoff/evals.md +3 -3
- package/skills/context/context-prime/SKILL.md +8 -2
- package/skills/context/context-prime/evals.md +2 -2
- package/skills/git/file-ticket/SKILL.md +9 -4
- package/skills/git/file-ticket/evals.md +2 -2
- package/skills/git/fix-issue/SKILL.md +12 -5
- package/skills/git/fix-issue/evals.md +4 -4
- package/skills/git/resolve-merge-conflicts/SKILL.md +8 -2
- package/skills/git/resolve-merge-conflicts/evals.md +2 -2
- package/skills/git/ship/SKILL.md +9 -3
- package/skills/git/ship/evals.md +4 -4
- package/skills/git/worktree-create/SKILL.md +7 -2
- package/skills/git/worktree-create/evals.md +6 -6
- package/skills/git/worktree-merge/SKILL.md +7 -2
- package/skills/git/worktree-merge/evals.md +6 -6
- package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
- package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
- package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
- package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
- package/skills/meta/credentials/SKILL.md +9 -2
- package/skills/meta/find-skills/SKILL.md +8 -2
- package/skills/meta/herdr/SKILL.md +8 -2
- package/skills/meta/skill-craft/SKILL.md +21 -4
- package/skills/planning/architecture/SKILL.md +9 -3
- package/skills/planning/backlog/SKILL.md +8 -2
- package/skills/planning/prd/SKILL.md +8 -2
- package/skills/planning/product-intent/SKILL.md +8 -2
- package/skills/planning/tech-spec/SKILL.md +9 -3
- package/skills/registry.yaml +66 -66
- package/skills/research/arxiv-literature/SKILL.md +8 -2
- package/skills/research/experiment-protocol/SKILL.md +9 -2
- package/skills/research/scientific-debugging/SKILL.md +9 -2
- package/skills/research/scientific-debugging/evals.md +2 -2
- package/skills/research/scientific-modernization/SKILL.md +9 -2
- package/skills/skill-marketplace.json +257 -38
- package/skills/workflow/cut-it/SKILL.md +10 -2
- package/skills/workflow/design-council/SKILL.md +11 -2
- package/skills/workflow/grill-me/SKILL.md +8 -2
- package/skills/workflow/workflow-distiller/SKILL.md +8 -2
- package/src/cli/acp.ts +2 -2
- package/src/cli/auth.ts +2 -2
- package/src/cli/bootstrap-generate.ts +5 -5
- package/src/cli/clio.ts +6 -1
- package/src/cli/config-inspect.ts +3 -3
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure.ts +27 -27
- package/src/cli/default-target.ts +1 -1
- package/src/cli/docs.ts +6 -6
- package/src/cli/doctor-naming.ts +323 -0
- package/src/cli/doctor-panes.ts +46 -14
- package/src/cli/doctor-toolchain.ts +29 -8
- package/src/cli/doctor.ts +15 -1
- package/src/cli/eval-inventory.ts +8 -8
- package/src/cli/evidence-detail.ts +1 -1
- package/src/cli/evidence-inventory.ts +1 -1
- package/src/cli/fleet-decisions.ts +1 -1
- package/src/cli/fleet-inspect.ts +1 -1
- package/src/cli/fleet-preflight.ts +1 -1
- package/src/cli/fleet-verify.ts +1 -1
- package/src/cli/fleet-view.ts +40 -23
- package/src/cli/fleet.ts +8 -5
- package/src/cli/interop-inspect.ts +2 -2
- package/src/cli/models.ts +3 -3
- package/src/cli/modes/print.ts +1 -1
- package/src/cli/reset.ts +1 -1
- package/src/cli/run.ts +11 -15
- package/src/cli/share.ts +1 -1
- package/src/cli/skills-eval.ts +11 -11
- package/src/cli/targets.ts +23 -24
- package/src/cli/trace-inspect.ts +1 -1
- package/src/cli/trace.ts +41 -0
- package/src/cli/uninstall.ts +2 -2
- package/src/cli/upgrade.ts +29 -34
- package/src/cli/usage.ts +2 -2
- package/src/cli/validate-model.ts +1 -1
- package/src/cli/verifiers-inspect.ts +1 -1
- package/src/cli/wiki-generate.ts +5 -5
- package/src/core/bash-exec.ts +1 -1
- package/src/core/boot-trace.ts +3 -3
- package/src/core/bus-trace.ts +2 -2
- package/src/core/compile-cache.ts +1 -1
- package/src/core/config.ts +1062 -886
- package/src/core/defaults.ts +321 -528
- package/src/core/domain-loader.ts +6 -4
- package/src/core/event-bus.ts +1 -1
- package/src/core/file-references.ts +78 -88
- package/src/core/git-commit-attribution.ts +3 -9
- package/src/core/guardrails.ts +24 -4
- package/src/core/naming-compat.ts +45 -0
- package/src/core/naming-events.ts +62 -0
- package/src/core/recent-models.ts +1 -7
- package/src/core/residency-protection.ts +4 -8
- package/src/core/resolve-config-value.ts +1 -1
- package/src/core/response-model-id.ts +0 -14
- package/src/core/session-routing.ts +84 -74
- package/src/core/skill-activation.ts +18 -0
- package/src/core/termination.ts +4 -4
- package/src/core/timers.ts +2 -12
- package/src/domains/agents/catalog.ts +2 -12
- package/src/domains/agents/extension.ts +3 -3
- package/src/domains/agents/registry.ts +7 -7
- package/src/domains/agents/result-contract.ts +1 -1
- package/src/domains/agents/spec.ts +0 -11
- package/src/domains/config/classify.ts +35 -47
- package/src/domains/config/extension.ts +5 -5
- package/src/domains/config/keybindings.ts +48 -47
- package/src/domains/config/watcher.ts +1 -1
- package/src/domains/context/codewiki/indexer.ts +1 -1
- package/src/domains/context/extension.ts +3 -3
- package/src/domains/context/prompt-context.ts +1 -1
- package/src/domains/context/wiki/assemble.ts +2 -2
- package/src/domains/context/working-set/replay/metrics.ts +0 -4
- package/src/domains/context/working-set/replay/report.ts +1 -1
- package/src/domains/context/working-set/replay/synthetic.ts +2 -2
- package/src/domains/dispatch/active-route-planner.ts +2 -2
- package/src/domains/dispatch/agent-candidates.ts +1 -1
- package/src/domains/dispatch/agent-ledger-store.ts +1 -1
- package/src/domains/dispatch/agent-ledger.ts +1 -1
- package/src/domains/dispatch/assignment.ts +5 -5
- package/src/domains/dispatch/capacity-lease.ts +2 -5
- package/src/domains/dispatch/code-step.ts +1 -1
- package/src/domains/dispatch/contract.ts +2 -2
- package/src/domains/dispatch/extension.ts +65 -61
- package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
- package/src/domains/dispatch/fleet-preflight.ts +8 -17
- package/src/domains/dispatch/fleet-run.ts +0 -7
- package/src/domains/dispatch/gate-decisions.ts +25 -14
- package/src/domains/dispatch/joint-route-resolver.ts +1 -1
- package/src/domains/dispatch/path-scope.ts +0 -61
- package/src/domains/dispatch/placement.ts +2 -2
- package/src/domains/dispatch/receipt-findings.ts +1 -1
- package/src/domains/dispatch/receipt-integrity.ts +20 -8
- package/src/domains/dispatch/reservation-store.ts +0 -23
- package/src/domains/dispatch/route-decision.ts +1 -1
- package/src/domains/dispatch/route-history.ts +1 -1
- package/src/domains/dispatch/route-policy.ts +1 -1
- package/src/domains/dispatch/route-readiness.ts +0 -28
- package/src/domains/dispatch/run-event-journal.ts +6 -5
- package/src/domains/dispatch/tool-stats.ts +1 -1
- package/src/domains/dispatch/transport.ts +2 -19
- package/src/domains/dispatch/types.ts +3 -3
- package/src/domains/dispatch/worker-protocol.ts +2 -2
- package/src/domains/eval/artifacts/store.ts +5 -4
- package/src/domains/eval/compare/thresholds.ts +0 -8
- package/src/domains/eval/execution-provenance.ts +1 -1
- package/src/domains/eval/metrics/token-stream.ts +0 -7
- package/src/domains/eval/report.ts +1 -1
- package/src/domains/eval/runner.ts +1 -1
- package/src/domains/eval/runners/clio-run.ts +7 -6
- package/src/domains/eval/runners/external-command.ts +4 -3
- package/src/domains/eval/schema/artifact.ts +1 -1
- package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
- package/src/domains/eval/schema/behavioral.ts +7 -6
- package/src/domains/eval/schema/execution-envelope.ts +4 -2
- package/src/domains/eval/schema/naming.ts +10 -0
- package/src/domains/eval/schema/suite.ts +2 -2
- package/src/domains/eval/schema/validate.ts +9 -5
- package/src/domains/eval/schema/verdict.ts +4 -2
- package/src/domains/eval/store.ts +12 -2
- package/src/domains/eval/suites/run.ts +12 -6
- package/src/domains/eval/types.ts +1 -1
- package/src/domains/eval/workspaces/git.ts +1 -1
- package/src/domains/eval/workspaces/temp-copy.ts +1 -1
- package/src/domains/evidence/build.ts +13 -5
- package/src/domains/interop/consent.ts +7 -7
- package/src/domains/interop/extension.ts +1 -1
- package/src/domains/lifecycle/doctor.ts +27 -21
- package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
- package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
- package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
- package/src/domains/lifecycle/migrations/index.ts +20 -1
- package/src/domains/lifecycle/naming-history.ts +153 -0
- package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
- package/src/domains/lifecycle/naming-resources.ts +261 -0
- package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
- package/src/domains/lifecycle/naming-yazi.ts +81 -0
- package/src/domains/lifecycle/upgrade-notice.ts +1 -1
- package/src/domains/memory/task-memory-handoff.ts +6 -3
- package/src/domains/middleware/index.ts +7 -0
- package/src/domains/middleware/marketplace-offer.ts +339 -0
- package/src/domains/middleware/runtime.ts +2 -2
- package/src/domains/mux/contract.ts +157 -25
- package/src/domains/mux/detect.ts +29 -5
- package/src/domains/mux/dock-controller.ts +365 -0
- package/src/domains/mux/extension.ts +7 -1
- package/src/domains/mux/index.ts +20 -0
- package/src/domains/mux/operations.ts +28 -0
- package/src/domains/mux/protocol.ts +19 -6
- package/src/domains/mux/socket-client.ts +167 -19
- package/src/domains/mux/types.ts +49 -6
- package/src/domains/mux/yazi/event-stream.ts +6 -4
- package/src/domains/mux/yazi/profile.ts +1 -1
- package/src/domains/mux/yazi/session.ts +26 -3
- package/src/domains/observability/extension.ts +1 -1
- package/src/domains/observability/out-of-turn-usage.ts +2 -2
- package/src/domains/observability/projection.ts +1 -1
- package/src/domains/observability/trace-store.ts +22 -12
- package/src/domains/prompts/compiler.ts +2 -2
- package/src/domains/prompts/extension.ts +3 -3
- package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
- package/src/domains/prompts/fragments/operating/skills.md +25 -18
- package/src/domains/providers/extension.ts +5 -5
- package/src/domains/providers/knowledge-base-path.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +14 -2
- package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
- package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +4 -4
- package/src/domains/providers/plugins.ts +1 -1
- package/src/domains/providers/resolver.ts +1 -1
- package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
- package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
- package/src/domains/providers/runtimes/common/probe-helpers.ts +2 -2
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
- package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
- package/src/domains/providers/types/knowledge-base.ts +13 -0
- package/src/domains/providers/types/local-model-quirks.ts +2 -2
- package/src/domains/providers/types/target-descriptor.ts +3 -3
- package/src/domains/resources/extension.ts +1 -1
- package/src/domains/resources/library.ts +6 -6
- package/src/domains/resources/prompts/loader.ts +1 -1
- package/src/domains/resources/skills/content-hash.ts +7 -6
- package/src/domains/resources/skills/evals.ts +1 -1
- package/src/domains/resources/skills/install.ts +36 -12
- package/src/domains/resources/skills/loader.ts +39 -13
- package/src/domains/resources/skills/marketplace.ts +21 -2
- package/src/domains/resources/skills/promotion.ts +214 -0
- package/src/domains/safety/audit.ts +2 -2
- package/src/domains/safety/finish-contract.ts +2 -1
- package/src/domains/safety/run-effects.ts +1 -1
- package/src/domains/scheduling/extension.ts +4 -4
- package/src/domains/session/archive-readers.ts +9 -1
- package/src/domains/session/compaction/branch-summary.ts +4 -0
- package/src/domains/session/compaction/compact.ts +1 -1
- package/src/domains/session/compaction/tokens.ts +4 -0
- package/src/domains/session/context-accounting.ts +1 -1
- package/src/domains/session/decision-board.ts +1 -1
- package/src/domains/session/extension.ts +1 -1
- package/src/domains/session/handoff.ts +2 -2
- package/src/domains/session/prompt-manifest.ts +0 -5
- package/src/domains/session/protected-artifact-journal.ts +12 -6
- package/src/domains/session/retry.ts +1 -1
- package/src/domains/share/archive.ts +85 -36
- package/src/domains/toolchain/install.ts +1 -1
- package/src/engine/acp/adapter.ts +3 -3
- package/src/engine/acp/event-mapper.ts +3 -3
- package/src/engine/acp/server.ts +27 -26
- package/src/engine/acp/tool-mediator.ts +2 -2
- package/src/engine/acp/types.ts +1 -1
- package/src/engine/alcf-oauth.ts +5 -5
- package/src/engine/antigravity/subprocess-runtime.ts +2 -2
- package/src/engine/api-registry.ts +1 -1
- package/src/engine/apis/llamacpp-residency.ts +1 -19
- package/src/engine/apis/lmstudio.ts +1 -6
- package/src/engine/apis/ollama-native.ts +3 -3
- package/src/engine/apis/openai-completions.ts +2 -2
- package/src/engine/apis/residency.ts +3 -9
- package/src/engine/claude/sdk-module.ts +1 -12
- package/src/engine/claude/sdk-runtime.ts +6 -6
- package/src/engine/claude/subprocess-runtime.ts +1 -1
- package/src/engine/claude/tool-safety.ts +4 -4
- package/src/engine/loop-guard.ts +0 -5
- package/src/engine/session.ts +14 -7
- package/src/engine/tui-primitives.ts +1 -1
- package/src/engine/worker-events.ts +6 -6
- package/src/engine/worker-runtime.ts +14 -13
- package/src/entry/orchestrator.ts +107 -88
- package/src/interactive/application-controller.ts +21 -21
- package/src/interactive/bus-notices.ts +2 -2
- package/src/interactive/chat-loop.ts +8 -8
- package/src/interactive/chat-panel.ts +1 -1
- package/src/interactive/clio-editor.ts +105 -1
- package/src/interactive/context-activity.ts +8 -6
- package/src/interactive/context-meter.ts +3 -6
- package/src/interactive/context-overlay.ts +1 -1
- package/src/interactive/cost-overlay.ts +1 -1
- package/src/interactive/council-grid.ts +2 -2
- package/src/interactive/dispatch-board.ts +30 -33
- package/src/interactive/editor-bash.ts +21 -0
- package/src/interactive/editor-steer.ts +9 -4
- package/src/interactive/editor-submit.ts +24 -18
- package/src/interactive/external-editor.ts +1 -1
- package/src/interactive/file-reference-completion.ts +360 -0
- package/src/interactive/footer/dashboard.ts +15 -17
- package/src/interactive/footer/notifications.ts +14 -8
- package/src/interactive/footer/widgets.ts +2 -44
- package/src/interactive/interactive-application.ts +79 -59
- package/src/interactive/interactive-event-projection.ts +1 -1
- package/src/interactive/interactive-input-runtime.ts +2 -2
- package/src/interactive/interactive-presentation.ts +21 -16
- package/src/interactive/interactive-shell.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +63 -17
- package/src/interactive/interactive-subscriptions.ts +1 -1
- package/src/interactive/interactive-tickers.ts +1 -1
- package/src/interactive/keybinding-manager.ts +4 -4
- package/src/interactive/layout.ts +1 -1
- package/src/interactive/memory-overlay.ts +2 -2
- package/src/interactive/modal-marker.ts +2 -21
- package/src/interactive/mutation-preview.ts +1 -1
- package/src/interactive/overlay-frame.ts +4 -12
- package/src/interactive/overlay-general-openers.ts +6 -2
- package/src/interactive/overlay-key-routing.ts +7 -7
- package/src/interactive/overlay-lifecycle.ts +1 -1
- package/src/interactive/overlay-model-selectors.ts +3 -3
- package/src/interactive/overlays/agents.ts +2 -2
- package/src/interactive/overlays/ask-user.ts +25 -11
- package/src/interactive/overlays/context-reset.ts +28 -4
- package/src/interactive/overlays/cwd-fallback.ts +28 -4
- package/src/interactive/overlays/decisions.ts +4 -2
- package/src/interactive/overlays/fleet-run-approval.ts +3 -3
- package/src/interactive/overlays/handoff-review.ts +2 -2
- package/src/interactive/overlays/interop.ts +1 -1
- package/src/interactive/overlays/library-install-confirm.ts +1 -1
- package/src/interactive/overlays/message-picker.ts +1 -1
- package/src/interactive/overlays/model-selector.ts +39 -31
- package/src/interactive/overlays/prompts.ts +10 -4
- package/src/interactive/overlays/session-selector.ts +2 -2
- package/src/interactive/overlays/settings.ts +339 -293
- package/src/interactive/overlays/side-question.ts +2 -2
- package/src/interactive/overlays/skills-hub.ts +8 -8
- package/src/interactive/overlays/tree-selector.ts +2 -2
- package/src/interactive/panes-runtime.ts +36 -10
- package/src/interactive/permission-overlay.ts +2 -2
- package/src/interactive/renderers/retry-status.ts +12 -4
- package/src/interactive/renderers/tool-execution.ts +4 -4
- package/src/interactive/session-transcript.ts +3 -3
- package/src/interactive/slash-autocomplete.ts +454 -165
- package/src/interactive/slash-commands.ts +279 -183
- package/src/interactive/slash-spec.ts +160 -17
- package/src/interactive/status/controller.ts +2 -2
- package/src/interactive/stream-pacing-policy.ts +1 -1
- package/src/interactive/tasks-overlay.ts +20 -13
- package/src/interactive/terminal-lease.ts +6 -7
- package/src/interactive/turn-context.ts +11 -11
- package/src/interactive/turn-persistence.ts +2 -2
- package/src/interactive/turn-prewarm.ts +2 -2
- package/src/interactive/turn-runtime.ts +8 -8
- package/src/interactive/turn-state.ts +1 -1
- package/src/interactive/view/artifacts.ts +12 -9
- package/src/interactive/view/view-overlay.ts +13 -10
- package/src/interactive/watch-pane.ts +38 -10
- package/src/interactive/welcome-dashboard.ts +15 -15
- package/src/interactive/worker-progress.ts +4 -4
- package/src/interactive/worker-receipts.ts +1 -1
- package/src/interactive/worker-stream.ts +1 -4
- package/src/interactive/yazi-bridge.ts +12 -5
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/builtin-tool-catalog.ts +1 -1
- package/src/tools/compete-worktrees.ts +27 -17
- package/src/tools/context/index.ts +15 -1
- package/src/tools/dispatch-admission.ts +4 -2
- package/src/tools/dispatch-arguments.ts +1 -1
- package/src/tools/dispatch-plan.ts +0 -11
- package/src/tools/dispatch-run-events.ts +12 -10
- package/src/tools/dispatch-runner.ts +11 -6
- package/src/tools/dispatch.ts +1 -1
- package/src/tools/find.ts +1 -6
- package/src/tools/monitor.ts +4 -4
- package/src/tools/observers.ts +0 -33
- package/src/tools/task-worktree.ts +28 -7
- package/src/tools/verify/authoring.ts +3 -6
- package/src/tools/verify/frontend.ts +1 -1
- package/src/tools/web-fetch.ts +1 -1
- package/src/worker/entry.ts +4 -3
- package/src/worker/protocol.ts +16 -14
- package/src/worker/spec-contract.ts +2 -2
- package/src/worker/stdin-demux.ts +2 -2
- package/dist/chunk-GXNLGKAB.js +0 -571
- package/dist/chunk-VFA6GDY5.js +0 -1625
- package/dist/doctor-QOA5FNY5.js +0 -313
- package/src/engine/apis/degraded-inference.ts +0 -95
- /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
- /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/
|
|
86
|
-
*
|
|
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
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
| { kind: "
|
|
99
|
-
| { kind: "
|
|
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: "
|
|
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: "
|
|
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";
|
|
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.
|
|
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: (
|
|
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
|
-
|
|
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 = ["
|
|
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
|
|
793
|
-
return
|
|
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
|
-
|
|
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: "
|
|
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: "
|
|
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: "
|
|
933
|
-
description: "
|
|
934
|
-
group: "
|
|
935
|
-
kinds: ["
|
|
936
|
-
|
|
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: "
|
|
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: "
|
|
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: "
|
|
960
|
+
return { kind: "usage-error", command: "resources", reason: `Unknown kind: ${tab} (one of ${known})` };
|
|
944
961
|
}
|
|
945
|
-
return { kind: "
|
|
962
|
+
return { kind: "resources", tab };
|
|
946
963
|
},
|
|
947
964
|
handle(command, ctx) {
|
|
948
|
-
if (command.kind
|
|
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: "
|
|
964
|
-
description: "
|
|
965
|
-
group: "
|
|
966
|
-
kinds: ["
|
|
967
|
-
args: {},
|
|
968
|
-
fromArgs
|
|
969
|
-
|
|
970
|
-
|
|
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: "
|
|
986
|
-
description: "
|
|
987
|
-
group: "
|
|
988
|
-
kinds: ["
|
|
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: "
|
|
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: "
|
|
1020
|
+
if (subcommand === "export" && path !== undefined) return { kind: "archive-export", path };
|
|
1013
1021
|
if (subcommand === "import" && path !== undefined) {
|
|
1014
1022
|
return {
|
|
1015
|
-
kind: "
|
|
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
|
-
|
|
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
|
|
1032
|
-
|
|
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.
|
|
1039
|
+
if (command.kind === "archive-export") {
|
|
1044
1040
|
if (!ctx.exportShareArchive) {
|
|
1045
|
-
ctx.notice("error", "
|
|
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.
|
|
1048
|
+
if (command.kind === "archive-import") {
|
|
1053
1049
|
if (!ctx.importShareArchive) {
|
|
1054
|
-
ctx.notice("error", "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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
|
|
1310
|
+
description: "List agents or connect a detected external agent",
|
|
1315
1311
|
group: "Inspect",
|
|
1316
1312
|
kinds: ["agents"],
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
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
|
|
1409
|
-
group: "
|
|
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
|
|
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
|
|
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: {
|
|
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
|
|
1865
|
-
if (
|
|
1866
|
-
if (!
|
|
1867
|
-
|
|
1868
|
-
|
|
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",
|
|
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.
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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)
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
|
|
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
|
}
|