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