@iowarp/clio-coder 0.3.9 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +92 -0
- package/NOTICE +33 -0
- package/README.md +121 -16
- package/dist/{acp-7LOELQFP.js → acp-ZILU3AUO.js} +19 -18
- package/dist/{agents-FIBG2SHA.js → agents-HYWGBGQR.js} +53 -39
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-OI4LIH2I.js → auth-N3QT7CBO.js} +24 -21
- package/dist/{builtins-AD25UL3C.js → builtins-UJLMOVOV.js} +6 -6
- package/dist/{chunk-I4HZDVNP.js → chunk-2LEAKD4C.js} +2 -3
- package/dist/{chunk-465CC7FK.js → chunk-2NM363SV.js} +60 -64
- package/dist/{chunk-4H6ULJ3H.js → chunk-2VG7KLYV.js} +1046 -1370
- package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
- package/dist/{chunk-NZU6YDNV.js → chunk-3I5NY75V.js} +5 -5
- package/dist/{chunk-47CMYGET.js → chunk-3QSOM6PA.js} +2 -2
- package/dist/chunk-42FMPA75.js +101 -0
- package/dist/{chunk-HAY4ZE2P.js → chunk-5PSMVOLM.js} +2 -2
- package/dist/{chunk-IHKBWSXF.js → chunk-5QIAJV2D.js} +3 -3
- package/dist/chunk-5YHDIDBP.js +97 -0
- package/dist/chunk-6CCS4G3W.js +1529 -0
- package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
- package/dist/{chunk-BVDVID7E.js → chunk-6FN3E6KX.js} +6 -6
- package/dist/{chunk-DG4M6ZUE.js → chunk-6HMJX2VU.js} +59 -59
- package/dist/{chunk-3MRC2YSQ.js → chunk-6I5ILFOF.js} +3 -2
- package/dist/chunk-6NJQITNH.js +1412 -0
- package/dist/chunk-6VC4OV3Z.js +365 -0
- package/dist/{chunk-LU7P4LHA.js → chunk-72GZI5EV.js} +2 -2
- package/dist/{chunk-5T7RBWN2.js → chunk-74YWRRU5.js} +9 -8
- package/dist/{chunk-VPTUJU4P.js → chunk-7EPLI7VL.js} +2 -2
- package/dist/{chunk-CA42X6KT.js → chunk-7OBGU7UB.js} +7 -7
- package/dist/{chunk-56KB5IJP.js → chunk-7PWAODYW.js} +3 -3
- package/dist/chunk-7RY5VZPH.js +573 -0
- package/dist/{chunk-OEDBCISO.js → chunk-ABLSQ6JX.js} +3 -3
- package/dist/{chunk-5HFBWUMU.js → chunk-AFKWHWXF.js} +13 -23
- package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
- package/dist/{chunk-WXCJ7VME.js → chunk-AKB4GYDL.js} +7 -7
- package/dist/chunk-AP73CFDC.js +308 -0
- package/dist/{chunk-4LJX2PUC.js → chunk-BBTJOK6Y.js} +5 -5
- package/dist/{chunk-QQ7EKM72.js → chunk-BDPT6GTK.js} +13 -61
- package/dist/chunk-BJGUKIG4.js +302 -0
- package/dist/chunk-BMS5RKQY.js +27 -0
- package/dist/{chunk-TD7UE2L5.js → chunk-BTGG6BG2.js} +81 -40
- package/dist/chunk-BTK3SSSK.js +67 -0
- package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
- package/dist/chunk-BWW4HLO4.js +301 -0
- package/dist/{chunk-BNAZZHFG.js → chunk-BYP5D4HI.js} +1 -1
- package/dist/{chunk-HJB5IUKP.js → chunk-C537JADH.js} +18 -18
- package/dist/{chunk-774ILSRL.js → chunk-CDNVLKUX.js} +5 -4
- package/dist/{chunk-HPCTNZM2.js → chunk-CTJ4RNAA.js} +4 -4
- package/dist/{chunk-AEYBF3TB.js → chunk-CWVRRIEI.js} +2 -2
- package/dist/chunk-D4CJV46V.js +462 -0
- package/dist/chunk-D7E7WCDF.js +27 -0
- package/dist/{chunk-5PVQ4SRS.js → chunk-E67WX76H.js} +10 -126
- package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
- package/dist/chunk-EIMVLWB3.js +1842 -0
- package/dist/{chunk-AMKHQW3C.js → chunk-FEFIFZTL.js} +3 -3
- package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
- package/dist/{chunk-3DUR4WUA.js → chunk-FYUN5KZ3.js} +25 -25
- package/dist/{chunk-MV3K5QF2.js → chunk-GCSMB2KY.js} +2 -2
- package/dist/chunk-GIZNH63R.js +40 -0
- package/dist/chunk-GPPB3JBE.js +688 -0
- package/dist/{chunk-B5XRQOLB.js → chunk-GVQJ5CCZ.js} +17 -11
- package/dist/chunk-HHV2GANA.js +88 -0
- package/dist/chunk-HJWWJ6IL.js +184 -0
- package/dist/{chunk-RKRLDWD3.js → chunk-HLW2MRKE.js} +1 -1
- package/dist/chunk-HRQMFLJP.js +75 -0
- package/dist/{chunk-AD7Y7STJ.js → chunk-HUAS7ITX.js} +107 -97
- package/dist/{chunk-O6I4CIEU.js → chunk-I66EAJFY.js} +6 -6
- package/dist/{chunk-S4COXYBG.js → chunk-IG7BCQBA.js} +129 -106
- package/dist/{chunk-N3PBVRTZ.js → chunk-IXJT6DCX.js} +9 -7
- package/dist/chunk-J4HBWF6Y.js +2635 -0
- package/dist/chunk-J5LZHVIT.js +284 -0
- package/dist/{chunk-GAYUJ7LE.js → chunk-JA5QWE4Z.js} +544 -227
- package/dist/{chunk-B5CSFE7B.js → chunk-JIEGK6UF.js} +6 -174
- package/dist/{chunk-VKBMFOYV.js → chunk-JZWT5J3Y.js} +23 -27
- package/dist/chunk-K6BF4U2H.js +1785 -0
- package/dist/{chunk-CGKSTWHD.js → chunk-K6BSR66V.js} +2 -1
- package/dist/{chunk-YSEHGPCT.js → chunk-MA3H6DM5.js} +6 -6
- package/dist/{chunk-EBOC7MT3.js → chunk-MOPSG2X7.js} +9 -9
- package/dist/{chunk-KV2AOLDF.js → chunk-MQXIVJ35.js} +18 -29
- package/dist/{chunk-P3JGPQFL.js → chunk-N5UK64DP.js} +4 -4
- package/dist/chunk-NDDGJUXD.js +81 -0
- package/dist/chunk-NEKRRTYW.js +56 -0
- package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
- package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
- package/dist/{chunk-T3Z6VAAF.js → chunk-OJTRZGR3.js} +53 -92
- package/dist/{chunk-5DQRIYDZ.js → chunk-PBP4B7XR.js} +3 -3
- package/dist/{chunk-NQ6UCCOD.js → chunk-PJJ6MY27.js} +8 -8
- package/dist/chunk-PMZCIOCJ.js +25 -0
- package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
- package/dist/{chunk-7C6RYZGQ.js → chunk-PVAMAVBB.js} +5 -4
- package/dist/chunk-QDC3K2U3.js +262 -0
- package/dist/{chunk-JEQQR47K.js → chunk-QKIFBZKT.js} +173 -14
- package/dist/{chunk-R7LNVMCS.js → chunk-QMXC4JB7.js} +70 -78
- package/dist/chunk-QSNYB6ZV.js +195 -0
- package/dist/chunk-QTFGO774.js +644 -0
- package/dist/{chunk-ODFEOB4F.js → chunk-R23Z6K6I.js} +27 -9
- package/dist/{chunk-3UUY7R3Z.js → chunk-R32CLGZ6.js} +14 -14
- package/dist/chunk-R346GLFC.js +31 -0
- package/dist/chunk-RKSR6VSF.js +132 -0
- package/dist/{chunk-N5XKWMDW.js → chunk-SCYB3HA4.js} +73 -27
- package/dist/{chunk-PZ4I4JE2.js → chunk-SINK3QR6.js} +135 -125
- package/dist/{chunk-5QKCQQ3E.js → chunk-SUW5DORT.js} +2 -2
- package/dist/chunk-T56WDKA5.js +183 -0
- package/dist/{chunk-ECUO3KDP.js → chunk-TD3PGPQA.js} +87 -26
- package/dist/{chunk-HKO36JWF.js → chunk-THYWACCR.js} +31 -3
- package/dist/{chunk-LXPJXFM5.js → chunk-TVH4ONAM.js} +18 -12
- package/dist/chunk-TVHHYFHE.js +255 -0
- package/dist/chunk-U2WB7TZS.js +271 -0
- package/dist/{chunk-NNNWO6F2.js → chunk-UAPGZHYC.js} +237 -33
- package/dist/{chunk-MIX5N5AC.js → chunk-UEDMSP56.js} +415 -160
- package/dist/{chunk-WIE7ZOSW.js → chunk-UXN6JT4W.js} +3 -3
- package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
- package/dist/{chunk-MV2VUEJC.js → chunk-VEGN6WIQ.js} +2 -2
- package/dist/chunk-VKFQTNDV.js +66 -0
- package/dist/{chunk-FALJGAWU.js → chunk-VKRH2TCS.js} +2 -2
- package/dist/{chunk-A2NJGIB3.js → chunk-VN3SHNBN.js} +2 -2
- package/dist/{chunk-XK56QHLX.js → chunk-VPKWYKEY.js} +19 -5
- package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
- package/dist/{chunk-EQ63NRB7.js → chunk-WNP7O5WZ.js} +3 -3
- package/dist/chunk-WR6U3OVP.js +45 -0
- package/dist/{chunk-TEO2TLVN.js → chunk-XKA2ICR3.js} +1051 -1196
- package/dist/{chunk-3V5AYSEQ.js → chunk-Y45G3AXC.js} +72 -65
- package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
- package/dist/chunk-YAKGTXEV.js +17 -0
- package/dist/{chunk-ZI647VB5.js → chunk-YPI3QQCF.js} +2 -2
- package/dist/{chunk-YW7UVM5V.js → chunk-ZAZB4JMW.js} +55 -11
- package/dist/{chunk-HCBCAYZU.js → chunk-ZJLUDYFY.js} +11 -11
- package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
- package/dist/{chunk-IFBNV6H6.js → chunk-ZW55JB7N.js} +3 -3
- package/dist/cli/index.js +48 -37
- package/dist/clio-IT3G3VQH.js +25 -0
- package/dist/{code-nav-LMW275PA.js → code-nav-RK6S7F6E.js} +8 -8
- package/dist/codewiki/build-worker.js +1 -1
- package/dist/{compile-cache-CVJMMODC.js → compile-cache-OQAVB7Y5.js} +3 -5
- package/dist/{components-ZFA3SAER.js → components-UBWCQSRW.js} +6 -6
- package/dist/{config-RXS5T3JT.js → config-3QZRWZJF.js} +73 -61
- package/dist/configure-FL7Y3KJF.js +54 -0
- package/dist/{context-MVOORGMF.js → context-5HE7ODYK.js} +61 -49
- package/dist/{context-I3BTOTCS.js → context-KYQFRVDC.js} +11 -11
- package/dist/{context-PALKKQYL.js → context-XNHL75JV.js} +43 -28
- package/dist/{context-clear-N2WOYZ2K.js → context-clear-N545L53A.js} +60 -48
- package/dist/{context-working-set-MIEVECVZ.js → context-working-set-QHKXSV2F.js} +15 -13
- package/dist/{dispatch-runner-VVA4SRRH.js → dispatch-runner-RGIE5PCT.js} +109 -72
- package/dist/{docs-7LQ23DLM.js → docs-5NAF6AU7.js} +7 -13
- package/dist/doctor-ZGPEGHIP.js +772 -0
- package/dist/{eval-IJ5VEZDJ.js → eval-GXLL44RD.js} +106 -86
- package/dist/eval-inventory-HBWSWQOK.js +315 -0
- package/dist/{evidence-L5APPXNV.js → evidence-HWLBRH3Q.js} +209 -51
- package/dist/{evolve-RGNKFJ52.js → evolve-FTZBMNVW.js} +57 -45
- package/dist/{extensions-7WYWUX5A.js → extensions-VHRBEID7.js} +7 -7
- package/dist/{fleet-6CNVBZZP.js → fleet-CKZHJWZJ.js} +215 -114
- package/dist/{fleet-commands-L2SXSYEI.js → fleet-commands-EXDXBMV6.js} +13 -12
- package/dist/fleet-decisions-OTHB6KRL.js +157 -0
- package/dist/{fleet-graph-2J3OOIPO.js → fleet-graph-YTEZUCUT.js} +20 -17
- package/dist/fleet-inspect-SS6YMDCK.js +445 -0
- package/dist/{fleet-preflight-CZRJ4JP5.js → fleet-preflight-PBY4VYOM.js} +6 -9
- package/dist/{fleet-validate-C5RI6DP7.js → fleet-validate-KMEM5L3S.js} +25 -20
- package/dist/fleet-verify-QD5M7E7Q.js +178 -0
- package/dist/fleet-view-WAMJYNDT.js +94 -0
- package/dist/{init-VBN2ACVA.js → init-5XQRBOFV.js} +79 -66
- package/dist/install-NKNG7KD4.js +13 -0
- package/dist/interop-34TVO25M.js +116 -0
- package/dist/{library-JHGUMLY2.js → library-3QY6KF57.js} +25 -21
- package/dist/{memory-K4OQIYWG.js → memory-L4UTIIIW.js} +59 -47
- package/dist/{models-2NCZUWDD.js → models-ZVX3QOWE.js} +47 -37
- package/dist/{monitor-MMVTJABD.js → monitor-CEKVSYTS.js} +67 -57
- package/dist/{orchestrator-ZKBPCHW6.js → orchestrator-77BAP6BC.js} +7633 -7699
- package/dist/panes-7STHOAUJ.js +103 -0
- package/dist/panes-SHAUIRXY.js +60 -0
- package/dist/{paths-DBXMZMDU.js → paths-L7LGY6RN.js} +6 -6
- package/dist/{reset-DD5JGOY3.js → reset-EOLM7GVE.js} +15 -14
- package/dist/resources-74GKTLSF.js +115 -0
- package/dist/{run-QEGNX7FL.js → run-HBAUJNNZ.js} +139 -98
- package/dist/{share-JKD3BQMW.js → share-G3APVLVP.js} +25 -21
- package/dist/{skills-LMQIKDOZ.js → skills-35HHUKCR.js} +37 -27
- package/dist/{skills-eval-I7X2774U.js → skills-eval-QN4HSHDC.js} +80 -73
- package/dist/skills-inventory-J357J34F.js +129 -0
- package/dist/slash-commands-JZZCQA32.js +79 -0
- package/dist/{steer-CF5TDANS.js → steer-XAVHJM22.js} +4 -4
- package/dist/{support-I7LOJLIF.js → support-U7QOWY26.js} +7 -7
- package/dist/{targets-RUSR6B5Z.js → targets-DSM6CY3M.js} +67 -59
- package/dist/{terminal-lease-QYVORFR4.js → terminal-lease-JOPFUVEM.js} +15 -10
- package/dist/tools-MKNWVPBH.js +29 -0
- package/dist/{trace-ODOQIVIW.js → trace-ECQ7TIYZ.js} +194 -7
- package/dist/tui-primitives-K5PASC3O.js +17 -0
- package/dist/{uninstall-ZJF5H5ZN.js → uninstall-N34PCTGJ.js} +6 -8
- package/dist/{upgrade-XANW3FXB.js → upgrade-H7TOM7YL.js} +37 -62
- package/dist/{usage-4H7ZRXQT.js → usage-X52N3IDJ.js} +70 -59
- package/dist/{verifiers-UZXNBZEB.js → verifiers-EJTVVSMA.js} +174 -14
- package/dist/{verify-BVKWTNDL.js → verify-YJL6XET2.js} +12 -11
- package/dist/{web-fetch-2YHJ3KTG.js → web-fetch-MPIFL3LL.js} +3 -4
- package/dist/{wiki-generate-MY7WV2QI.js → wiki-generate-4NDZTQ4B.js} +86 -75
- package/dist/with-panes-OBOBFIIR.js +818 -0
- package/dist/worker/entry.js +131 -91
- package/docs/README.md +3 -2
- package/docs/acp.md +25 -4
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +2 -2
- package/docs/artifact-versions.md +4 -1
- package/docs/built-in-agents.md +40 -32
- package/docs/capacity-and-scheduling.md +43 -5
- package/docs/commands-and-modes.md +39 -4
- package/docs/config-knobs-audit.md +3 -0
- package/docs/configuration-and-targets.md +138 -167
- package/docs/context-engine.md +1 -1
- package/docs/development-pipeline.md +19 -0
- package/docs/dispatch-typed-intent.md +385 -0
- package/docs/documentation-coverage.md +2 -2
- package/docs/documentation-guide.md +1 -1
- package/docs/environment-variables.md +3 -1
- package/docs/eval-runner.md +1 -1
- package/docs/evals-internal.md +1 -1
- package/docs/evidence-and-memory.md +2 -2
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +3 -1
- package/docs/extensions-and-sharing.md +25 -1
- package/docs/fleet-demo-runbook.md +6 -3
- package/docs/fleet-dispatch.md +30 -7
- package/docs/installation-and-lifecycle.md +16 -3
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +10 -1
- package/docs/observability.md +3 -3
- package/docs/proactive-memory.md +1 -1
- package/docs/prompt-envelope-and-tools.md +1 -1
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +164 -177
- package/docs/safety-model.md +2 -2
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +1 -1
- package/docs/skills-marketplace.md +1 -1
- package/docs/tool-usage.md +18 -8
- package/docs/trace-store.md +16 -11
- package/docs/troubleshooting.md +2 -2
- package/docs/tui-design.md +1 -1
- package/docs/worker-dispatch-mechanics.md +1 -1
- package/evals/README.md +5 -0
- package/evals/behavioral-corpus-grader.mjs +103 -0
- package/evals/behavioral-machinery-baseline.json +2276 -0
- package/evals/behavioral-machinery-driver.ts +250 -0
- package/evals/behavioral-machinery-support.ts +253 -0
- package/evals/behavioral-machinery.yaml +614 -0
- package/evals/behavioral-model-negative-control.yaml +68 -0
- package/evals/behavioral-model.yaml +216 -0
- package/evals/fixtures/behavioral-facts.txt +3 -0
- package/evals/fixtures/behavioral-main.ts +7 -0
- package/evals/fixtures/decoy/note.txt +2 -0
- package/evals/fixtures/private/credentials.txt +1 -0
- package/evals/tracked-metrics-baseline.yaml +229 -0
- package/evals/tracked-metrics-grader.mjs +129 -0
- package/package.json +8 -16
- package/skills/README.md +6 -6
- package/skills/coding/ast-grep/SKILL.md +8 -2
- package/skills/coding/coding-standards/SKILL.md +8 -2
- package/skills/coding/prototype/SKILL.md +8 -2
- package/skills/coding/tdd/SKILL.md +8 -2
- package/skills/context/context-handoff/SKILL.md +12 -3
- package/skills/context/context-handoff/evals.md +3 -3
- package/skills/context/context-prime/SKILL.md +8 -2
- package/skills/context/context-prime/evals.md +2 -2
- package/skills/git/file-ticket/SKILL.md +9 -4
- package/skills/git/file-ticket/evals.md +2 -2
- package/skills/git/fix-issue/SKILL.md +12 -5
- package/skills/git/fix-issue/evals.md +4 -4
- package/skills/git/resolve-merge-conflicts/SKILL.md +8 -2
- package/skills/git/resolve-merge-conflicts/evals.md +2 -2
- package/skills/git/ship/SKILL.md +9 -3
- package/skills/git/ship/evals.md +4 -4
- package/skills/git/worktree-create/SKILL.md +7 -2
- package/skills/git/worktree-create/evals.md +6 -6
- package/skills/git/worktree-merge/SKILL.md +7 -2
- package/skills/git/worktree-merge/evals.md +6 -6
- package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
- package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
- package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
- package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
- package/skills/meta/credentials/SKILL.md +9 -2
- package/skills/meta/find-skills/SKILL.md +8 -2
- package/skills/meta/herdr/SKILL.md +8 -2
- package/skills/meta/skill-craft/SKILL.md +21 -4
- package/skills/planning/architecture/SKILL.md +9 -3
- package/skills/planning/backlog/SKILL.md +8 -2
- package/skills/planning/prd/SKILL.md +8 -2
- package/skills/planning/product-intent/SKILL.md +8 -2
- package/skills/planning/tech-spec/SKILL.md +9 -3
- package/skills/registry.yaml +66 -66
- package/skills/research/arxiv-literature/SKILL.md +8 -2
- package/skills/research/experiment-protocol/SKILL.md +9 -2
- package/skills/research/scientific-debugging/SKILL.md +9 -2
- package/skills/research/scientific-debugging/evals.md +2 -2
- package/skills/research/scientific-modernization/SKILL.md +9 -2
- package/skills/skill-marketplace.json +257 -38
- package/skills/workflow/cut-it/SKILL.md +10 -2
- package/skills/workflow/design-council/SKILL.md +11 -2
- package/skills/workflow/grill-me/SKILL.md +8 -2
- package/skills/workflow/workflow-distiller/SKILL.md +8 -2
- package/src/cli/acp.ts +8 -4
- package/src/cli/argv.ts +25 -0
- package/src/cli/auth.ts +2 -2
- package/src/cli/bootstrap-generate.ts +5 -5
- package/src/cli/clio.ts +6 -1
- package/src/cli/config-inspect.ts +3 -3
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure.ts +50 -48
- package/src/cli/default-target.ts +1 -1
- package/src/cli/docs.ts +6 -6
- package/src/cli/doctor-naming.ts +323 -0
- package/src/cli/doctor-panes.ts +156 -0
- package/src/cli/doctor-toolchain.ts +78 -0
- package/src/cli/doctor.ts +34 -1
- package/src/cli/eval-inventory.ts +436 -0
- package/src/cli/eval.ts +13 -0
- package/src/cli/evidence-detail.ts +88 -0
- package/src/cli/evidence-inventory.ts +183 -0
- package/src/cli/evidence.ts +30 -5
- package/src/cli/fleet-decisions.ts +69 -0
- package/src/cli/fleet-inspect.ts +334 -0
- package/src/cli/fleet-preflight.ts +1 -1
- package/src/cli/fleet-verify.ts +133 -0
- package/src/cli/fleet-view.ts +827 -0
- package/src/cli/fleet.ts +154 -40
- package/src/cli/index.ts +14 -2
- package/src/cli/interop-inspect.ts +128 -0
- package/src/cli/interop.ts +34 -0
- package/src/cli/models.ts +3 -3
- package/src/cli/modes/print.ts +1 -1
- package/src/cli/panes.ts +35 -0
- package/src/cli/reset.ts +6 -3
- package/src/cli/run.ts +67 -13
- package/src/cli/share.ts +1 -1
- package/src/cli/skills-eval.ts +11 -11
- package/src/cli/skills-inventory.ts +185 -0
- package/src/cli/skills.ts +16 -13
- package/src/cli/targets.ts +23 -24
- package/src/cli/tools.ts +321 -0
- package/src/cli/trace-inspect.ts +252 -0
- package/src/cli/trace.ts +64 -2
- 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 +347 -0
- package/src/cli/verifiers.ts +9 -0
- package/src/cli/wiki-generate.ts +5 -5
- package/src/core/bash-exec.ts +1 -1
- package/src/core/boot-trace.ts +3 -3
- package/src/core/bus-events.ts +4 -0
- package/src/core/bus-trace.ts +2 -2
- package/src/core/compile-cache.ts +1 -1
- package/src/core/config.ts +1070 -845
- package/src/core/defaults.ts +342 -463
- package/src/core/domain-loader.ts +6 -4
- package/src/core/event-bus.ts +1 -1
- package/src/core/file-references.ts +78 -88
- package/src/core/git-commit-attribution.ts +3 -9
- package/src/core/guardrails.ts +24 -4
- package/src/core/naming-compat.ts +45 -0
- package/src/core/naming-events.ts +62 -0
- package/src/core/recent-models.ts +1 -7
- package/src/core/residency-protection.ts +4 -8
- package/src/core/resolve-config-value.ts +1 -1
- package/src/core/response-model-id.ts +0 -14
- package/src/core/response-schema.ts +44 -4
- 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/theme-token-hex.ts +43 -0
- package/src/core/timers.ts +2 -12
- package/src/core/tool-names.ts +2 -1
- package/src/core/xdg.ts +1 -1
- package/src/domains/agents/catalog.ts +2 -12
- package/src/domains/agents/extension.ts +3 -3
- package/src/domains/agents/fleets/build-review.md +0 -3
- package/src/domains/agents/fleets/build-test.md +0 -3
- package/src/domains/agents/registry.ts +7 -7
- package/src/domains/agents/result-contract-filesystem.ts +32 -0
- package/src/domains/agents/result-contract.ts +165 -36
- package/src/domains/agents/spec.ts +0 -11
- package/src/domains/config/classify.ts +37 -46
- package/src/domains/config/extension.ts +5 -5
- package/src/domains/config/keybindings.ts +48 -47
- package/src/domains/config/watcher.ts +1 -1
- package/src/domains/context/codewiki/indexer.ts +1 -1
- package/src/domains/context/extension.ts +3 -3
- package/src/domains/context/prompt-context.ts +1 -1
- package/src/domains/context/wiki/assemble.ts +2 -2
- package/src/domains/context/working-set/replay/metrics.ts +0 -4
- package/src/domains/context/working-set/replay/report.ts +1 -1
- package/src/domains/context/working-set/replay/synthetic.ts +2 -2
- package/src/domains/dispatch/active-route-planner.ts +2 -2
- package/src/domains/dispatch/admission-error.ts +9 -0
- package/src/domains/dispatch/admission.ts +22 -21
- package/src/domains/dispatch/agent-candidates.ts +1 -1
- package/src/domains/dispatch/agent-ledger-store.ts +1 -1
- package/src/domains/dispatch/agent-ledger.ts +1 -1
- package/src/domains/dispatch/assignment.ts +5 -5
- package/src/domains/dispatch/capacity-lease.ts +23 -6
- package/src/domains/dispatch/code-step.ts +1 -1
- package/src/domains/dispatch/contract.ts +2 -2
- package/src/domains/dispatch/council-topology.ts +398 -0
- package/src/domains/dispatch/extension.ts +287 -111
- package/src/domains/dispatch/fleet-node-prompt.ts +62 -0
- package/src/domains/dispatch/fleet-plan.ts +7 -2
- package/src/domains/dispatch/fleet-preflight.ts +8 -17
- package/src/domains/dispatch/fleet-run.ts +59 -3
- package/src/domains/dispatch/gate-decisions.ts +36 -15
- package/src/domains/dispatch/gate-role-prompts.ts +9 -0
- package/src/domains/dispatch/gate-topology.ts +289 -0
- package/src/domains/dispatch/index.ts +19 -0
- package/src/domains/dispatch/intent-compatibility.ts +330 -0
- package/src/domains/dispatch/intent.ts +85 -1
- package/src/domains/dispatch/joint-route-resolver.ts +1 -1
- package/src/domains/dispatch/path-scope.ts +0 -61
- package/src/domains/dispatch/placement.ts +2 -2
- package/src/domains/dispatch/receipt-findings.ts +1 -1
- package/src/domains/dispatch/receipt-integrity.ts +20 -8
- package/src/domains/dispatch/reservation-store.ts +24 -27
- 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-bridge.ts +149 -0
- package/src/domains/dispatch/run-event-journal.ts +599 -0
- package/src/domains/dispatch/state.ts +45 -1
- package/src/domains/dispatch/tool-stats.ts +1 -1
- package/src/domains/dispatch/transport.ts +2 -19
- package/src/domains/dispatch/types.ts +16 -3
- package/src/domains/dispatch/validation.ts +33 -8
- package/src/domains/dispatch/worker-protocol.ts +2 -2
- package/src/domains/eval/artifacts/store.ts +5 -4
- package/src/domains/eval/compare/compare.ts +3 -16
- package/src/domains/eval/compare/thresholds.ts +0 -8
- package/src/domains/eval/execution-provenance.ts +1 -1
- package/src/domains/eval/inventory.ts +113 -0
- 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/serving.ts +31 -0
- package/src/domains/eval/schema/suite.ts +2 -2
- package/src/domains/eval/schema/validate.ts +9 -5
- package/src/domains/eval/schema/verdict.ts +4 -2
- package/src/domains/eval/store.ts +12 -2
- package/src/domains/eval/suites/run.ts +12 -6
- package/src/domains/eval/types.ts +1 -1
- package/src/domains/eval/workspaces/git.ts +1 -1
- package/src/domains/eval/workspaces/temp-copy.ts +1 -1
- package/src/domains/evidence/build.ts +13 -5
- package/src/domains/evidence/store.ts +6 -0
- package/src/domains/interop/consent.ts +7 -7
- package/src/domains/interop/extension.ts +1 -1
- package/src/domains/lifecycle/doctor.ts +27 -21
- package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
- package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
- package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
- package/src/domains/lifecycle/migrations/index.ts +20 -1
- package/src/domains/lifecycle/naming-history.ts +153 -0
- package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
- package/src/domains/lifecycle/naming-resources.ts +261 -0
- package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
- package/src/domains/lifecycle/naming-yazi.ts +81 -0
- package/src/domains/lifecycle/upgrade-notice.ts +1 -1
- package/src/domains/memory/index.ts +0 -1
- package/src/domains/memory/task-memory-handoff.ts +6 -3
- package/src/domains/memory/task-memory-policy.ts +6 -10
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- package/src/domains/middleware/index.ts +7 -0
- package/src/domains/middleware/marketplace-offer.ts +339 -0
- package/src/domains/middleware/memory-intervention.ts +33 -21
- package/src/domains/middleware/runtime.ts +2 -2
- package/src/domains/mux/contract.ts +566 -0
- package/src/domains/mux/detect.ts +182 -0
- package/src/domains/mux/dock-controller.ts +365 -0
- package/src/domains/mux/extension.ts +53 -0
- package/src/domains/mux/index.ts +116 -0
- package/src/domains/mux/manifest.ts +6 -0
- package/src/domains/mux/operations.ts +192 -0
- package/src/domains/mux/pane-registry.ts +90 -0
- package/src/domains/mux/protocol.ts +62 -0
- package/src/domains/mux/socket-client.ts +964 -0
- package/src/domains/mux/types.ts +265 -0
- package/src/domains/mux/viewer-command.ts +59 -0
- package/src/domains/mux/yazi/assets/init.lua +2 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/LICENSE +21 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/README.md +78 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/main.lua +255 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/types.lua +12 -0
- package/src/domains/mux/yazi/assets/yazi.toml +17 -0
- package/src/domains/mux/yazi/event-stream.ts +182 -0
- package/src/domains/mux/yazi/profile.ts +299 -0
- package/src/domains/mux/yazi/session.ts +251 -0
- package/src/domains/mux/yazi/theme.ts +30 -0
- package/src/domains/observability/cost.ts +21 -0
- package/src/domains/observability/extension.ts +1 -1
- package/src/domains/observability/index.ts +2 -0
- package/src/domains/observability/out-of-turn-usage.ts +2 -2
- package/src/domains/observability/projection.ts +1 -1
- package/src/domains/observability/trace-store.ts +63 -11
- package/src/domains/prompts/compiler.ts +2 -2
- package/src/domains/prompts/extension.ts +3 -3
- package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
- package/src/domains/prompts/fragments/operating/skills.md +25 -18
- package/src/domains/providers/endpoint-capacity.ts +154 -22
- package/src/domains/providers/endpoint-slots-store.ts +189 -0
- package/src/domains/providers/extension.ts +25 -8
- package/src/domains/providers/index.ts +22 -0
- package/src/domains/providers/knowledge-base-path.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +46 -2
- package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
- package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +4 -4
- package/src/domains/providers/plugins.ts +1 -1
- package/src/domains/providers/resolver.ts +1 -1
- package/src/domains/providers/runtimes/boot-manifest.ts +1 -0
- package/src/domains/providers/runtimes/builtins.ts +2 -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 +2 -2
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
- package/src/domains/providers/runtimes/protocol/litellm.ts +285 -0
- package/src/domains/providers/support.ts +1 -0
- package/src/domains/providers/target-model-cache.ts +124 -0
- package/src/domains/providers/types/knowledge-base.ts +13 -0
- package/src/domains/providers/types/local-model-quirks.ts +2 -2
- package/src/domains/providers/types/target-descriptor.ts +3 -3
- package/src/domains/resources/extension.ts +1 -1
- package/src/domains/resources/index.ts +3 -0
- 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 +72 -13
- package/src/domains/resources/skills/marketplace.ts +21 -2
- package/src/domains/resources/skills/promotion.ts +214 -0
- package/src/domains/safety/action-classifier.ts +6 -0
- package/src/domains/safety/audit.ts +2 -2
- package/src/domains/safety/finish-contract.ts +2 -1
- package/src/domains/safety/run-effects.ts +1 -1
- package/src/domains/scheduling/extension.ts +4 -4
- package/src/domains/session/archive-readers.ts +9 -1
- package/src/domains/session/compaction/branch-summary.ts +4 -0
- package/src/domains/session/compaction/compact.ts +1 -1
- package/src/domains/session/compaction/tokens.ts +4 -0
- package/src/domains/session/context-accounting.ts +1 -1
- package/src/domains/session/decision-board.ts +1 -1
- package/src/domains/session/extension.ts +1 -1
- package/src/domains/session/handoff.ts +2 -2
- package/src/domains/session/prompt-manifest.ts +0 -5
- package/src/domains/session/protected-artifact-journal.ts +12 -6
- package/src/domains/session/retry.ts +1 -1
- package/src/domains/share/archive.ts +85 -36
- package/src/domains/toolchain/archive.ts +175 -0
- package/src/domains/toolchain/contract.ts +28 -0
- package/src/domains/toolchain/extension.ts +47 -0
- package/src/domains/toolchain/index.ts +39 -0
- package/src/domains/toolchain/install.ts +327 -0
- package/src/domains/toolchain/manifest.ts +8 -0
- package/src/domains/toolchain/paths.ts +34 -0
- package/src/domains/toolchain/registry.ts +265 -0
- package/src/domains/toolchain/remove.ts +218 -0
- package/src/domains/toolchain/resolve.ts +182 -0
- package/src/domains/toolchain/types.ts +113 -0
- package/src/domains/toolchain/version.ts +88 -0
- package/src/engine/acp/adapter.ts +3 -3
- package/src/engine/acp/event-mapper.ts +3 -3
- package/src/engine/acp/server.ts +440 -96
- package/src/engine/acp/tool-mediator.ts +2 -2
- package/src/engine/acp/types.ts +20 -2
- package/src/engine/alcf-oauth.ts +5 -5
- package/src/engine/antigravity/subprocess-runtime.ts +2 -2
- package/src/engine/api-registry.ts +1 -1
- package/src/engine/apis/llamacpp-residency.ts +1 -19
- package/src/engine/apis/lmstudio.ts +1 -6
- package/src/engine/apis/ollama-native.ts +3 -3
- package/src/engine/apis/openai-completions.ts +2 -2
- package/src/engine/apis/residency.ts +3 -9
- package/src/engine/claude/sdk-module.ts +87 -0
- package/src/engine/claude/sdk-runtime.ts +25 -17
- package/src/engine/claude/subprocess-runtime.ts +1 -1
- package/src/engine/claude/tool-safety.ts +4 -4
- package/src/engine/loop-guard.ts +0 -5
- package/src/engine/session.ts +14 -7
- package/src/engine/tui-primitives.ts +21 -0
- package/src/engine/tui.ts +1 -0
- package/src/engine/worker-events.ts +6 -6
- package/src/engine/worker-runtime.ts +16 -26
- package/src/entry/boot-options.ts +2 -0
- package/src/entry/orchestrator.ts +207 -90
- package/src/entry/panes-activation.ts +31 -0
- package/src/entry/with-panes.ts +20 -0
- package/src/interactive/application-controller.ts +21 -21
- package/src/interactive/bus-notices.ts +2 -2
- package/src/interactive/chat-loop.ts +8 -8
- package/src/interactive/chat-panel.ts +1 -1
- package/src/interactive/clio-editor.ts +105 -1
- package/src/interactive/context-activity.ts +8 -6
- package/src/interactive/context-meter.ts +3 -6
- package/src/interactive/context-overlay.ts +2 -1
- package/src/interactive/cost-overlay.ts +3 -1
- package/src/interactive/council-grid.ts +3 -5
- package/src/interactive/council.ts +11 -0
- package/src/interactive/dispatch-board.ts +56 -49
- package/src/interactive/editor-bash.ts +21 -0
- package/src/interactive/editor-steer.ts +9 -4
- package/src/interactive/editor-submit.ts +24 -18
- package/src/interactive/external-editor.ts +1 -1
- package/src/interactive/file-reference-completion.ts +360 -0
- package/src/interactive/footer/dashboard.ts +15 -17
- package/src/interactive/footer/notifications.ts +14 -8
- package/src/interactive/footer/widgets.ts +2 -44
- package/src/interactive/interactive-application.ts +229 -62
- package/src/interactive/interactive-event-projection.ts +1 -1
- package/src/interactive/interactive-input-runtime.ts +9 -2
- package/src/interactive/interactive-presentation.ts +21 -16
- package/src/interactive/interactive-shell.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +99 -23
- 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 +3 -2
- package/src/interactive/modal-marker.ts +151 -0
- package/src/interactive/mutation-preview.ts +1 -1
- package/src/interactive/mux-bridge.ts +214 -0
- package/src/interactive/overlay-frame.ts +62 -14
- package/src/interactive/overlay-general-openers.ts +7 -2
- package/src/interactive/overlay-key-routing.ts +21 -10
- package/src/interactive/overlay-lifecycle.ts +20 -4
- package/src/interactive/overlay-model-selectors.ts +43 -6
- package/src/interactive/overlay-permission-lifecycle.ts +90 -22
- package/src/interactive/overlay-transitions.ts +18 -4
- package/src/interactive/overlays/agents.ts +3 -2
- package/src/interactive/overlays/ask-user.ts +161 -41
- package/src/interactive/overlays/auth-dialog.ts +1 -0
- package/src/interactive/overlays/context-reset.ts +29 -4
- package/src/interactive/overlays/cwd-fallback.ts +29 -4
- package/src/interactive/overlays/decisions.ts +15 -13
- package/src/interactive/overlays/extensions.ts +1 -0
- package/src/interactive/overlays/fleet-run-approval.ts +4 -3
- package/src/interactive/overlays/handoff-review.ts +3 -2
- package/src/interactive/overlays/help-reference.ts +2 -0
- package/src/interactive/overlays/interop.ts +2 -1
- package/src/interactive/overlays/library-install-confirm.ts +2 -1
- package/src/interactive/overlays/library-tabs.ts +28 -0
- package/src/interactive/overlays/list-overlay.ts +10 -1
- package/src/interactive/overlays/message-picker.ts +2 -1
- package/src/interactive/overlays/model-scope.ts +86 -0
- package/src/interactive/overlays/model-selector.ts +40 -31
- package/src/interactive/overlays/prompts.ts +11 -4
- package/src/interactive/overlays/session-selector.ts +3 -2
- package/src/interactive/overlays/settings-sections.ts +30 -0
- package/src/interactive/overlays/settings.ts +849 -268
- package/src/interactive/overlays/side-question.ts +3 -2
- package/src/interactive/overlays/skills-hub.ts +11 -19
- package/src/interactive/overlays/tree-selector.ts +3 -2
- package/src/interactive/pane-policy.ts +46 -0
- package/src/interactive/panes-runtime.ts +318 -0
- package/src/interactive/permission-overlay.ts +2 -2
- package/src/interactive/renderers/compaction-summary.ts +29 -0
- package/src/interactive/renderers/retry-status.ts +12 -4
- package/src/interactive/renderers/tool-execution.ts +4 -4
- package/src/interactive/renderers/worker-entry.ts +122 -14
- package/src/interactive/session-transcript.ts +3 -3
- package/src/interactive/slash-autocomplete.ts +454 -165
- package/src/interactive/slash-commands.ts +521 -189
- package/src/interactive/slash-spec.ts +160 -17
- package/src/interactive/status/controller.ts +2 -2
- package/src/interactive/stream-pacing-policy.ts +1 -1
- package/src/interactive/tasks-overlay.ts +21 -13
- package/src/interactive/terminal-lease.ts +6 -7
- package/src/interactive/theme/tokens.ts +3 -14
- package/src/interactive/turn-context.ts +58 -13
- 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 +120 -9
- package/src/interactive/view/view-overlay.ts +14 -10
- package/src/interactive/watch-pane.ts +180 -0
- package/src/interactive/welcome-dashboard.ts +15 -15
- package/src/interactive/worker-progress.ts +11 -5
- package/src/interactive/worker-receipts.ts +20 -2
- package/src/interactive/worker-stream.ts +6 -4
- package/src/interactive/yazi-bridge.ts +451 -0
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/bootstrap.ts +26 -2
- package/src/tools/builtin-tool-catalog.ts +16 -1
- package/src/tools/compete-worktrees.ts +108 -17
- package/src/tools/context/index.ts +15 -1
- package/src/tools/core-bootstrap.ts +2 -1
- package/src/tools/dispatch-admission.ts +18 -5
- package/src/tools/dispatch-arguments.ts +21 -21
- package/src/tools/dispatch-plan.ts +0 -11
- package/src/tools/dispatch-run-events.ts +145 -28
- package/src/tools/dispatch-runner.ts +40 -13
- package/src/tools/dispatch-types.ts +15 -3
- package/src/tools/dispatch.ts +2 -2
- package/src/tools/executables.ts +17 -14
- package/src/tools/find.ts +1 -6
- package/src/tools/monitor.ts +4 -4
- package/src/tools/observation.ts +54 -4
- package/src/tools/observers.ts +0 -33
- package/src/tools/panes-surface.ts +38 -0
- package/src/tools/panes.ts +112 -0
- package/src/tools/policy.ts +10 -1
- package/src/tools/presentation.ts +1 -0
- package/src/tools/task-worktree.ts +28 -7
- package/src/tools/verify/authoring.ts +3 -6
- package/src/tools/verify/frontend.ts +1 -1
- package/src/tools/web-fetch.ts +1 -1
- package/src/worker/entry.ts +4 -3
- package/src/worker/protocol.ts +16 -14
- package/src/worker/spec-contract.ts +2 -2
- package/src/worker/stdin-demux.ts +2 -2
- package/dist/chunk-D73KXYPF.js +0 -37
- package/dist/chunk-MLOK6ZOS.js +0 -2888
- package/dist/chunk-PNY46YEY.js +0 -1581
- package/dist/chunk-XDOQXGFO.js +0 -515
- package/dist/chunk-YKOFT37S.js +0 -279
- package/dist/clio-LT5V7SSZ.js +0 -26
- package/dist/configure-2WYWSCSD.js +0 -49
- package/dist/doctor-TWBWFK5V.js +0 -165
- package/src/engine/apis/degraded-inference.ts +0 -95
- /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
- /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
package/src/cli/targets.ts
CHANGED
|
@@ -205,8 +205,7 @@ export async function runTargetsCommand(args: ReadonlyArray<string>): Promise<nu
|
|
|
205
205
|
if (parsed.json) {
|
|
206
206
|
const settings = readSettings();
|
|
207
207
|
const candidateFor = (status: TargetStatus): string | null => {
|
|
208
|
-
const orchestratorModel =
|
|
209
|
-
settings.orchestrator?.target === status.target.id ? (settings.orchestrator?.model ?? null) : null;
|
|
208
|
+
const orchestratorModel = settings.chat?.target === status.target.id ? (settings.chat?.model ?? null) : null;
|
|
210
209
|
return orchestratorModel ?? status.target.defaultModel ?? null;
|
|
211
210
|
};
|
|
212
211
|
const rows = filtered.map((status) => {
|
|
@@ -467,11 +466,11 @@ function runProfileRemove(args: ReadonlyArray<string>): number {
|
|
|
467
466
|
}
|
|
468
467
|
ensureClioState();
|
|
469
468
|
const settings = readSettings();
|
|
470
|
-
if (!settings.
|
|
469
|
+
if (!settings.fleet.profiles[parsed.name]) {
|
|
471
470
|
printError(`no fleet profile named ${parsed.name}`);
|
|
472
471
|
return 1;
|
|
473
472
|
}
|
|
474
|
-
const boundAgents = Object.entries(settings.
|
|
473
|
+
const boundAgents = Object.entries(settings.fleet.agentProfiles)
|
|
475
474
|
.filter(([, profileName]) => profileName === parsed.name)
|
|
476
475
|
.map(([agentId]) => agentId);
|
|
477
476
|
if (boundAgents.length > 0 && !parsed.force) {
|
|
@@ -510,23 +509,23 @@ function runProfileRename(args: ReadonlyArray<string>): number {
|
|
|
510
509
|
}
|
|
511
510
|
ensureClioState();
|
|
512
511
|
const settings = readSettings();
|
|
513
|
-
if (!settings.
|
|
512
|
+
if (!settings.fleet.profiles[parsed.oldName]) {
|
|
514
513
|
printError(`no fleet profile named ${parsed.oldName}`);
|
|
515
514
|
return 1;
|
|
516
515
|
}
|
|
517
|
-
if (settings.
|
|
516
|
+
if (settings.fleet.profiles[parsed.newName]) {
|
|
518
517
|
printError(`fleet profile already exists: ${parsed.newName}`);
|
|
519
518
|
return 2;
|
|
520
519
|
}
|
|
521
520
|
let updatedBindings = 0;
|
|
522
521
|
updateSettings((fresh) => {
|
|
523
|
-
const profile = fresh.
|
|
522
|
+
const profile = fresh.fleet.profiles[parsed.oldName];
|
|
524
523
|
if (!profile) return;
|
|
525
|
-
fresh.
|
|
526
|
-
delete fresh.
|
|
527
|
-
for (const [agentId, profileName] of Object.entries(fresh.
|
|
524
|
+
fresh.fleet.profiles[parsed.newName] = profile;
|
|
525
|
+
delete fresh.fleet.profiles[parsed.oldName];
|
|
526
|
+
for (const [agentId, profileName] of Object.entries(fresh.fleet.agentProfiles)) {
|
|
528
527
|
if (profileName !== parsed.oldName) continue;
|
|
529
|
-
fresh.
|
|
528
|
+
fresh.fleet.agentProfiles[agentId] = parsed.newName;
|
|
530
529
|
updatedBindings += 1;
|
|
531
530
|
}
|
|
532
531
|
});
|
|
@@ -551,13 +550,13 @@ function runProfileBind(args: ReadonlyArray<string>): number {
|
|
|
551
550
|
}
|
|
552
551
|
ensureClioState();
|
|
553
552
|
const settings = readSettings();
|
|
554
|
-
if (settings.
|
|
553
|
+
if (settings.integrations.externalAgents.entries.some((agent) => agent.id === parsed.agentId)) {
|
|
555
554
|
printError(
|
|
556
555
|
`cannot bind ACP delegation agent '${parsed.agentId}' to a fleet profile; ACP agents use their own runner and ignore native target routing`,
|
|
557
556
|
);
|
|
558
557
|
return 1;
|
|
559
558
|
}
|
|
560
|
-
if (!settings.
|
|
559
|
+
if (!settings.fleet.profiles[parsed.profileName]) {
|
|
561
560
|
process.stderr.write(
|
|
562
561
|
`${chalk.yellow("warning:")} fleet profile '${parsed.profileName}' is not configured; binding will resolve after the profile exists\n`,
|
|
563
562
|
);
|
|
@@ -581,12 +580,12 @@ function runProfileUnbind(args: ReadonlyArray<string>): number {
|
|
|
581
580
|
}
|
|
582
581
|
ensureClioState();
|
|
583
582
|
const settings = readSettings();
|
|
584
|
-
if (!settings.
|
|
583
|
+
if (!settings.fleet.agentProfiles[parsed]) {
|
|
585
584
|
printError(`agent ${parsed} is not bound to a fleet profile`);
|
|
586
585
|
return 1;
|
|
587
586
|
}
|
|
588
587
|
updateSettings((fresh) => {
|
|
589
|
-
delete fresh.
|
|
588
|
+
delete fresh.fleet.agentProfiles[parsed];
|
|
590
589
|
});
|
|
591
590
|
printOk(`unbound agent ${parsed}`);
|
|
592
591
|
return 0;
|
|
@@ -608,10 +607,10 @@ function runProfileBindings(args: ReadonlyArray<string>): number {
|
|
|
608
607
|
}
|
|
609
608
|
ensureClioState();
|
|
610
609
|
const settings = readSettings();
|
|
611
|
-
const rows = Object.entries(settings.
|
|
610
|
+
const rows = Object.entries(settings.fleet.agentProfiles)
|
|
612
611
|
.sort(([a], [b]) => a.localeCompare(b))
|
|
613
612
|
.map(([agentId, profileName]) => {
|
|
614
|
-
const profile = settings.
|
|
613
|
+
const profile = settings.fleet.profiles[profileName];
|
|
615
614
|
return {
|
|
616
615
|
agentId,
|
|
617
616
|
profile: profileName,
|
|
@@ -686,7 +685,7 @@ function runFleet(args: ReadonlyArray<string>, usage = "clio-coder targets fleet
|
|
|
686
685
|
ensureClioState();
|
|
687
686
|
const settings = readSettings();
|
|
688
687
|
const byId = new Map(settings.targets.map((target) => [target.id, target] as const));
|
|
689
|
-
const rows = Object.entries(settings.
|
|
688
|
+
const rows = Object.entries(settings.fleet.profiles).map(([name, profile]) => {
|
|
690
689
|
const target = profile.target ? byId.get(profile.target) : undefined;
|
|
691
690
|
return {
|
|
692
691
|
name,
|
|
@@ -782,7 +781,7 @@ function runConvert(args: ReadonlyArray<string>): number {
|
|
|
782
781
|
printOk(`target ${id} already uses runtime ${runtimeId}`);
|
|
783
782
|
return 0;
|
|
784
783
|
}
|
|
785
|
-
if (settings.
|
|
784
|
+
if (settings.chat.target === id && !isOrchestratorEligibleRuntime(runtime)) {
|
|
786
785
|
printError(`cannot convert orchestrator target '${id}' to non-HTTP/native runtime '${runtime.id}'`);
|
|
787
786
|
return 1;
|
|
788
787
|
}
|
|
@@ -917,7 +916,7 @@ function tableWidths(rows: ReadonlyArray<TargetTableRow>, width: number): Target
|
|
|
917
916
|
* cut to its width, marked the same way. Colour is dropped on those rows because
|
|
918
917
|
* the ansi bytes would sit inside the cut; a wrapped row costs more than colour.
|
|
919
918
|
*/
|
|
920
|
-
|
|
919
|
+
function formatTargetTable(
|
|
921
920
|
rows: ReadonlyArray<TargetTableRow>,
|
|
922
921
|
width: number,
|
|
923
922
|
paintHealth: (cell: string, row: TargetTableRow) => string = (cell) => cell,
|
|
@@ -972,7 +971,7 @@ function renderTable(providers: ProvidersContract, entries: ReadonlyArray<Target
|
|
|
972
971
|
}
|
|
973
972
|
}
|
|
974
973
|
|
|
975
|
-
|
|
974
|
+
function targetTableRow(providers: ProvidersContract, status: TargetStatus): TargetTableRow {
|
|
976
975
|
const diagnostic = degradedHealthDiagnostic(status);
|
|
977
976
|
return {
|
|
978
977
|
id: status.target.id,
|
|
@@ -1034,7 +1033,7 @@ function capabilityBadges(caps: CapabilityFlags): string {
|
|
|
1034
1033
|
* no states (cloud targets); "resident: none" when states are known and
|
|
1035
1034
|
* nothing is loaded, so a cold box is distinguishable from an unknown one.
|
|
1036
1035
|
*/
|
|
1037
|
-
|
|
1036
|
+
function residentModelsSummary(states: TargetStatus["discoveredModelStates"]): string | null {
|
|
1038
1037
|
if (!states) return null;
|
|
1039
1038
|
const entries = Object.entries(states);
|
|
1040
1039
|
if (entries.length === 0) return null;
|
|
@@ -1049,7 +1048,7 @@ export function residentModelsSummary(states: TargetStatus["discoveredModelState
|
|
|
1049
1048
|
* capability the target reported. Saying so is the difference between a number
|
|
1050
1049
|
* a user can plan against and one they cannot.
|
|
1051
1050
|
*/
|
|
1052
|
-
|
|
1051
|
+
function formatContextWindow(
|
|
1053
1052
|
status: Pick<TargetStatus, "capabilities" | "contextWindowProvenance"> &
|
|
1054
1053
|
Partial<Pick<TargetStatus, "target" | "discoveredModelStates">>,
|
|
1055
1054
|
): string {
|
|
@@ -1065,7 +1064,7 @@ export function formatContextWindow(
|
|
|
1065
1064
|
: `ctx ${window}`;
|
|
1066
1065
|
}
|
|
1067
1066
|
|
|
1068
|
-
|
|
1067
|
+
function formatNotes(status: TargetStatus): string {
|
|
1069
1068
|
const parts: string[] = [];
|
|
1070
1069
|
const diagnostic = degradedHealthDiagnostic(status);
|
|
1071
1070
|
// The health diagnosis leads because gateway, context, and residency facts
|
package/src/cli/tools.ts
ADDED
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import { describeYaziProfile, inspectCurrentYaziProfile, resetYaziProfile } from "../domains/mux/index.js";
|
|
2
|
+
import {
|
|
3
|
+
describeFloorRejection,
|
|
4
|
+
describeResolution,
|
|
5
|
+
findPinnedTool,
|
|
6
|
+
installedToolVersions,
|
|
7
|
+
installRemedy,
|
|
8
|
+
installTool,
|
|
9
|
+
PINNED_TOOLS,
|
|
10
|
+
removeTool,
|
|
11
|
+
type ToolStatus,
|
|
12
|
+
toolStatus,
|
|
13
|
+
toolStatuses,
|
|
14
|
+
} from "../domains/toolchain/index.js";
|
|
15
|
+
import { formatColumns, printError, printOk } from "./shared.js";
|
|
16
|
+
|
|
17
|
+
const HELP = `clio-coder tools <command>
|
|
18
|
+
|
|
19
|
+
Manage the external terminal programs Clio can drive. Every one of them is
|
|
20
|
+
optional: Clio works without them and only uses one when it is present. Each is
|
|
21
|
+
pinned to an exact upstream version and checksum, and a copy already on PATH
|
|
22
|
+
wins over Clio's own as long as it clears the pinned minimum.
|
|
23
|
+
|
|
24
|
+
Commands:
|
|
25
|
+
clio-coder tools list [--json] the pinned table and where each resolves
|
|
26
|
+
clio-coder tools status <id> [--json] [--reset-profile] one tool in detail
|
|
27
|
+
clio-coder tools install <id> [--force] [--json] download, verify, and vendor a tool
|
|
28
|
+
clio-coder tools remove <id>|--all [--json] delete every vendored version of a tool
|
|
29
|
+
|
|
30
|
+
Downloads happen only here. Nothing on a startup path fetches anything.
|
|
31
|
+
|
|
32
|
+
An install keeps one version directory per tool: once the pinned version is in
|
|
33
|
+
place, versions it superseded are pruned, along with any staging directory left
|
|
34
|
+
by an install that was killed. Removal touches nothing outside <data>/tools/<id>
|
|
35
|
+
and needs no confirmation, since every byte under it is re-downloadable from the
|
|
36
|
+
checksum-pinned registry. "remove --all" sweeps every tool in the table.
|
|
37
|
+
`;
|
|
38
|
+
|
|
39
|
+
interface Parsed {
|
|
40
|
+
command?: string;
|
|
41
|
+
positional: string[];
|
|
42
|
+
json: boolean;
|
|
43
|
+
force: boolean;
|
|
44
|
+
all: boolean;
|
|
45
|
+
resetProfile: boolean;
|
|
46
|
+
help: boolean;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export async function runToolsCommand(argv: ReadonlyArray<string> = []): Promise<number> {
|
|
50
|
+
let parsed: Parsed;
|
|
51
|
+
try {
|
|
52
|
+
parsed = parse(argv);
|
|
53
|
+
} catch (error) {
|
|
54
|
+
printError(error instanceof Error ? error.message : String(error));
|
|
55
|
+
process.stderr.write(HELP);
|
|
56
|
+
return 2;
|
|
57
|
+
}
|
|
58
|
+
if (parsed.help || parsed.command === undefined) {
|
|
59
|
+
process.stdout.write(HELP);
|
|
60
|
+
return parsed.help ? 0 : 2;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// `--all` belongs to `remove` alone. Silently ignoring it elsewhere would let
|
|
64
|
+
// `tools install --all` read as a request that was honored.
|
|
65
|
+
if (parsed.all && parsed.command !== "remove") {
|
|
66
|
+
printError("--all is only valid with `tools remove`");
|
|
67
|
+
return 2;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
switch (parsed.command) {
|
|
71
|
+
case "list":
|
|
72
|
+
if (parsed.resetProfile) return invalidResetProfile();
|
|
73
|
+
return listTools(parsed.json);
|
|
74
|
+
case "status":
|
|
75
|
+
return statusTool(parsed.positional[0], parsed.json, parsed.resetProfile);
|
|
76
|
+
case "install":
|
|
77
|
+
if (parsed.resetProfile) return invalidResetProfile();
|
|
78
|
+
return installOne(parsed.positional[0], parsed.force, parsed.json);
|
|
79
|
+
case "remove":
|
|
80
|
+
if (parsed.resetProfile) return invalidResetProfile();
|
|
81
|
+
return parsed.all ? removeAll(parsed.positional[0], parsed.json) : removeOne(parsed.positional[0], parsed.json);
|
|
82
|
+
default:
|
|
83
|
+
printError(`unknown tools command: ${parsed.command}`);
|
|
84
|
+
process.stderr.write(HELP);
|
|
85
|
+
return 2;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function parse(argv: ReadonlyArray<string>): Parsed {
|
|
90
|
+
const out: Parsed = { positional: [], json: false, force: false, all: false, resetProfile: false, help: false };
|
|
91
|
+
for (const arg of argv) {
|
|
92
|
+
if (!out.command && !arg.startsWith("-")) {
|
|
93
|
+
out.command = arg;
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
switch (arg) {
|
|
97
|
+
case "--json":
|
|
98
|
+
out.json = true;
|
|
99
|
+
break;
|
|
100
|
+
case "--force":
|
|
101
|
+
case "-f":
|
|
102
|
+
out.force = true;
|
|
103
|
+
break;
|
|
104
|
+
case "--all":
|
|
105
|
+
out.all = true;
|
|
106
|
+
break;
|
|
107
|
+
case "--reset-profile":
|
|
108
|
+
out.resetProfile = true;
|
|
109
|
+
break;
|
|
110
|
+
case "--help":
|
|
111
|
+
case "-h":
|
|
112
|
+
out.help = true;
|
|
113
|
+
break;
|
|
114
|
+
default:
|
|
115
|
+
if (arg.startsWith("-")) throw new Error(`unknown flag: ${arg}`);
|
|
116
|
+
out.positional.push(arg);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return out;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function listTools(json: boolean): number {
|
|
123
|
+
const statuses = toolStatuses();
|
|
124
|
+
if (json) {
|
|
125
|
+
process.stdout.write(`${JSON.stringify(statuses.map(jsonShape), null, 2)}\n`);
|
|
126
|
+
return 0;
|
|
127
|
+
}
|
|
128
|
+
const rows = statuses.map((status) => [
|
|
129
|
+
status.id,
|
|
130
|
+
status.version,
|
|
131
|
+
status.license,
|
|
132
|
+
status.resolution.source,
|
|
133
|
+
describeResolution(status),
|
|
134
|
+
]);
|
|
135
|
+
process.stdout.write(formatColumns([["TOOL", "PIN", "LICENSE", "SOURCE", "RESOLVED"], ...rows]));
|
|
136
|
+
return 0;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function invalidResetProfile(): number {
|
|
140
|
+
printError("--reset-profile is only valid with `tools status yazi`");
|
|
141
|
+
return 2;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* The one refusal an unknown id gets, from every verb.
|
|
146
|
+
*
|
|
147
|
+
* It names the tools that do exist, because the whole error an operator makes
|
|
148
|
+
* here is a name: `tools remove herd` and `tools remove tmux` want different
|
|
149
|
+
* answers, and the registry list gives both of them one.
|
|
150
|
+
*/
|
|
151
|
+
function unknownTool(id: string): number {
|
|
152
|
+
printError(`unknown tool: ${id} (known: ${PINNED_TOOLS.map((row) => row.id).join(", ")})`);
|
|
153
|
+
return 2;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function statusTool(id: string | undefined, json: boolean, resetProfile: boolean): number {
|
|
157
|
+
if (id === undefined) {
|
|
158
|
+
printError("usage: clio-coder tools status <id>");
|
|
159
|
+
return 2;
|
|
160
|
+
}
|
|
161
|
+
const entry = findPinnedTool(id);
|
|
162
|
+
if (entry === null) {
|
|
163
|
+
return unknownTool(id);
|
|
164
|
+
}
|
|
165
|
+
if (resetProfile && id !== "yazi") return invalidResetProfile();
|
|
166
|
+
if (resetProfile) resetYaziProfile();
|
|
167
|
+
const status = toolStatus(entry);
|
|
168
|
+
const profile = id === "yazi" ? inspectCurrentYaziProfile() : null;
|
|
169
|
+
if (json) {
|
|
170
|
+
process.stdout.write(
|
|
171
|
+
`${JSON.stringify({ ...jsonShape(status), ...(profile ? { profile, profileReset: resetProfile } : {}) }, null, 2)}\n`,
|
|
172
|
+
);
|
|
173
|
+
return 0;
|
|
174
|
+
}
|
|
175
|
+
const rejection = describeFloorRejection(status);
|
|
176
|
+
const installedVersions = installedToolVersions(entry.id);
|
|
177
|
+
const lines = [
|
|
178
|
+
`${entry.id} ${entry.version} (${entry.license})`,
|
|
179
|
+
` ${entry.summary}`,
|
|
180
|
+
` homepage ${entry.homepage}`,
|
|
181
|
+
` binaries ${entry.binaries.join(", ")}`,
|
|
182
|
+
` PATH floor ${entry.minimumVersion}`,
|
|
183
|
+
` platform ${status.platform ?? `${process.platform}-${process.arch}`}${status.supported ? "" : " (no pinned asset)"}`,
|
|
184
|
+
` vendor dir ${status.installDir}${status.installed ? "" : " (not installed)"}`,
|
|
185
|
+
` vendored ${installedVersions.length === 0 ? "nothing" : installedVersions.join(", ")}`,
|
|
186
|
+
` resolves to ${describeResolution(status)}`,
|
|
187
|
+
// Spelled out on its own line as well as inside the resolution sentence,
|
|
188
|
+
// because a rejected PATH copy is the one thing an operator reads this
|
|
189
|
+
// command to understand and the sentence above may be about something else.
|
|
190
|
+
...(rejection === null
|
|
191
|
+
? []
|
|
192
|
+
: [
|
|
193
|
+
` floor rejected: ${rejection}`,
|
|
194
|
+
...(status.resolution.source === "none" && status.supported ? [` remedy ${installRemedy(entry.id)}`] : []),
|
|
195
|
+
]),
|
|
196
|
+
...(profile
|
|
197
|
+
? [
|
|
198
|
+
` profile ${describeYaziProfile(profile)}`,
|
|
199
|
+
...(resetProfile ? [" profile reset; next open regenerates it"] : []),
|
|
200
|
+
]
|
|
201
|
+
: []),
|
|
202
|
+
];
|
|
203
|
+
process.stdout.write(`${lines.join("\n")}\n`);
|
|
204
|
+
return 0;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
async function installOne(id: string | undefined, force: boolean, json: boolean): Promise<number> {
|
|
208
|
+
if (id === undefined) {
|
|
209
|
+
printError("usage: clio-coder tools install <id>");
|
|
210
|
+
return 2;
|
|
211
|
+
}
|
|
212
|
+
if (findPinnedTool(id) === null) {
|
|
213
|
+
return unknownTool(id);
|
|
214
|
+
}
|
|
215
|
+
const result = await installTool(id, {
|
|
216
|
+
force,
|
|
217
|
+
...(json ? {} : { onProgress: (message: string) => process.stderr.write(` ${message}\n`) }),
|
|
218
|
+
});
|
|
219
|
+
if (json) {
|
|
220
|
+
process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
221
|
+
return result.ok ? 0 : 1;
|
|
222
|
+
}
|
|
223
|
+
if (!result.ok) {
|
|
224
|
+
printError(result.message);
|
|
225
|
+
return 1;
|
|
226
|
+
}
|
|
227
|
+
printOk(result.message);
|
|
228
|
+
for (const path of result.documents) process.stdout.write(` license ${path}\n`);
|
|
229
|
+
for (const version of result.pruned) process.stdout.write(` pruned ${id} ${version}\n`);
|
|
230
|
+
return 0;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Delete a tool's vendored install.
|
|
235
|
+
*
|
|
236
|
+
* The two answers an operator can act on are "there was nothing there" and
|
|
237
|
+
* "these versions are gone", and both are exit 0: the state they asked for
|
|
238
|
+
* holds either way. Only an id the registry does not know is a usage error,
|
|
239
|
+
* because that is the one case where nothing was inspected at all.
|
|
240
|
+
*/
|
|
241
|
+
function removeOne(id: string | undefined, json: boolean): number {
|
|
242
|
+
if (id === undefined) {
|
|
243
|
+
printError("usage: clio-coder tools remove <id>");
|
|
244
|
+
return 2;
|
|
245
|
+
}
|
|
246
|
+
if (findPinnedTool(id) === null) return unknownTool(id);
|
|
247
|
+
const result = removeTool(id);
|
|
248
|
+
if (json) {
|
|
249
|
+
process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
250
|
+
return result.ok ? 0 : 1;
|
|
251
|
+
}
|
|
252
|
+
if (!result.ok) {
|
|
253
|
+
printError(result.message);
|
|
254
|
+
return 1;
|
|
255
|
+
}
|
|
256
|
+
printOk(result.message);
|
|
257
|
+
if (result.removed.length > 0) {
|
|
258
|
+
process.stdout.write(` reinstall with \`${installRemedy(id)}\`\n`);
|
|
259
|
+
}
|
|
260
|
+
return 0;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Delete every pinned tool's vendored install.
|
|
265
|
+
*
|
|
266
|
+
* Each tool is swept independently and the exit code is the worst of them, so
|
|
267
|
+
* one directory that resists deletion does not hide the two that came off
|
|
268
|
+
* cleanly. Tools that had nothing installed are counted rather than listed:
|
|
269
|
+
* on the machine this verb is for, most of the registry is usually absent, and
|
|
270
|
+
* three lines of "nothing to remove" would bury the one line that matters.
|
|
271
|
+
*/
|
|
272
|
+
function removeAll(id: string | undefined, json: boolean): number {
|
|
273
|
+
if (id !== undefined) {
|
|
274
|
+
printError("`tools remove --all` takes no tool id; drop the id or drop --all");
|
|
275
|
+
return 2;
|
|
276
|
+
}
|
|
277
|
+
const results = PINNED_TOOLS.map((entry) => removeTool(entry.id));
|
|
278
|
+
if (json) {
|
|
279
|
+
process.stdout.write(`${JSON.stringify(results, null, 2)}\n`);
|
|
280
|
+
return results.every((result) => result.ok) ? 0 : 1;
|
|
281
|
+
}
|
|
282
|
+
for (const result of results) {
|
|
283
|
+
if (!result.ok) printError(result.message);
|
|
284
|
+
else if (result.removed.length > 0 || result.staleStaging.length > 0) printOk(result.message);
|
|
285
|
+
}
|
|
286
|
+
const touched = results.filter((result) => result.ok && result.removed.length > 0);
|
|
287
|
+
const untouched = results.filter((result) => result.ok && result.removed.length === 0);
|
|
288
|
+
if (touched.length > 0) {
|
|
289
|
+
process.stdout.write(` reinstall with \`clio-coder tools install <id>\`\n`);
|
|
290
|
+
}
|
|
291
|
+
if (untouched.length > 0) {
|
|
292
|
+
process.stdout.write(` ${untouched.length} of ${results.length} had nothing vendored\n`);
|
|
293
|
+
}
|
|
294
|
+
return results.every((result) => result.ok) ? 0 : 1;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/** The JSON surface, flattened so a script does not have to walk the resolution. */
|
|
298
|
+
function jsonShape(status: ToolStatus): Record<string, unknown> {
|
|
299
|
+
return {
|
|
300
|
+
id: status.id,
|
|
301
|
+
version: status.version,
|
|
302
|
+
license: status.license,
|
|
303
|
+
platform: status.platform,
|
|
304
|
+
supported: status.supported,
|
|
305
|
+
installed: status.installed,
|
|
306
|
+
installDir: status.installDir,
|
|
307
|
+
source: status.resolution.source,
|
|
308
|
+
binaryPath: status.resolution.binaryPath,
|
|
309
|
+
foundVersion: status.resolution.version,
|
|
310
|
+
minimumVersion: status.resolution.entry?.minimumVersion ?? null,
|
|
311
|
+
pathCandidate: status.resolution.pathCandidate,
|
|
312
|
+
// A script deciding whether to warn about a floor rejection should not have
|
|
313
|
+
// to parse `detail` for it, so the rejection and the command that answers
|
|
314
|
+
// it are their own fields. `remedy` is null exactly where installing would
|
|
315
|
+
// change nothing: already vendored, or no asset for this platform.
|
|
316
|
+
floorRejection: describeFloorRejection(status),
|
|
317
|
+
remedy: status.resolution.source === "none" && status.supported ? installRemedy(status.id) : null,
|
|
318
|
+
installedVersions: installedToolVersions(status.id),
|
|
319
|
+
detail: describeResolution(status),
|
|
320
|
+
};
|
|
321
|
+
}
|