@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/acp.ts
CHANGED
|
@@ -58,7 +58,7 @@ function parseAcpFlags(args: ReadonlyArray<string>): AcpFlags | string {
|
|
|
58
58
|
* Throws when the path cannot be resolved, which the caller reports as an
|
|
59
59
|
* unusable `--cwd`.
|
|
60
60
|
*/
|
|
61
|
-
|
|
61
|
+
function resolveAcpCwd(value: string): string {
|
|
62
62
|
return realpathSync(path.resolve(value));
|
|
63
63
|
}
|
|
64
64
|
|
|
@@ -66,11 +66,15 @@ export async function runAcpCommand(
|
|
|
66
66
|
args: ReadonlyArray<string>,
|
|
67
67
|
options: { apiKey?: string; noContextFiles?: boolean; noSkills?: boolean; skillPaths?: ReadonlyArray<string> } = {},
|
|
68
68
|
): Promise<number> {
|
|
69
|
-
|
|
69
|
+
// The top-level argv parser normally rewrites --acp to the `acp` command
|
|
70
|
+
// sentinel. Keep the command boundary tolerant too, so another dispatcher
|
|
71
|
+
// can pass the flag spelling through without changing ACP option semantics.
|
|
72
|
+
const normalizedArgs = args[0] === "--acp" ? args.slice(1) : args;
|
|
73
|
+
if (normalizedArgs.includes("--help") || normalizedArgs.includes("-h")) {
|
|
70
74
|
process.stdout.write(HELP);
|
|
71
75
|
return 0;
|
|
72
76
|
}
|
|
73
|
-
const flags = parseAcpFlags(
|
|
77
|
+
const flags = parseAcpFlags(normalizedArgs);
|
|
74
78
|
if (typeof flags === "string") {
|
|
75
79
|
printError(flags);
|
|
76
80
|
process.stderr.write(HELP);
|
|
@@ -103,7 +107,7 @@ export async function runAcpCommand(
|
|
|
103
107
|
transportOptions: {
|
|
104
108
|
write: writeRawStdout,
|
|
105
109
|
diagnostics: (line) => {
|
|
106
|
-
process.stderr.write(`[clio:acp] ${line}\n`);
|
|
110
|
+
process.stderr.write(`[clio-coder:acp] ${line}\n`);
|
|
107
111
|
},
|
|
108
112
|
},
|
|
109
113
|
...(flags.permissionTimeoutMs === undefined ? {} : { permissionTimeoutMs: flags.permissionTimeoutMs }),
|
package/src/cli/argv.ts
CHANGED
|
@@ -70,6 +70,11 @@ export interface GlobalCliFlags {
|
|
|
70
70
|
noContextFiles: boolean;
|
|
71
71
|
noSkills: boolean;
|
|
72
72
|
skillPaths: string[];
|
|
73
|
+
/**
|
|
74
|
+
* Panes activation from the command line. `--with-panes` and `--no-panes`
|
|
75
|
+
* both beat the `panes.enabled` setting; absent means the setting decides.
|
|
76
|
+
*/
|
|
77
|
+
panes?: "with" | "without";
|
|
73
78
|
rest: string[];
|
|
74
79
|
error?: string;
|
|
75
80
|
}
|
|
@@ -85,6 +90,8 @@ const GLOBAL_ONLY_FLAGS: ReadonlyMap<string, string> = new Map([
|
|
|
85
90
|
["--api-key", "--api-key <key>"],
|
|
86
91
|
["--no-context-files", "--no-context-files"],
|
|
87
92
|
["-nc", "-nc"],
|
|
93
|
+
["--with-panes", "--with-panes"],
|
|
94
|
+
["--no-panes", "--no-panes"],
|
|
88
95
|
]);
|
|
89
96
|
|
|
90
97
|
/**
|
|
@@ -128,6 +135,7 @@ export function extractGlobalFlags(
|
|
|
128
135
|
let apiKey: string | undefined;
|
|
129
136
|
let noContextFiles = false;
|
|
130
137
|
let noSkills = false;
|
|
138
|
+
let panes: "with" | "without" | undefined;
|
|
131
139
|
const skillPaths: string[] = [];
|
|
132
140
|
for (let i = 0; i < argv.length; i++) {
|
|
133
141
|
const arg = argv[i];
|
|
@@ -140,6 +148,14 @@ export function extractGlobalFlags(
|
|
|
140
148
|
rest.push(...argv.slice(i));
|
|
141
149
|
break;
|
|
142
150
|
}
|
|
151
|
+
if (arg === "--acp") {
|
|
152
|
+
// Treat the global spelling as a command boundary. Rewriting only the
|
|
153
|
+
// sentinel keeps every trailing ACP option on the exact same dispatcher
|
|
154
|
+
// and parser path as `clio-coder acp`, without importing that command into
|
|
155
|
+
// the dependency-light startup graph.
|
|
156
|
+
rest.push("acp", ...argv.slice(i + 1));
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
143
159
|
if (ROOT_FLAG_TOKENS.has(arg)) {
|
|
144
160
|
rest.push(arg);
|
|
145
161
|
continue;
|
|
@@ -152,6 +168,12 @@ export function extractGlobalFlags(
|
|
|
152
168
|
noSkills = true;
|
|
153
169
|
continue;
|
|
154
170
|
}
|
|
171
|
+
if (arg === "--with-panes" || arg === "--no-panes") {
|
|
172
|
+
// Last occurrence wins, so a wrapper script's baked-in choice can be
|
|
173
|
+
// overridden by appending the opposite flag.
|
|
174
|
+
panes = arg === "--with-panes" ? "with" : "without";
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
155
177
|
if (arg === "--api-key" || arg === "--skill") {
|
|
156
178
|
const value = argv[i + 1];
|
|
157
179
|
if (value === undefined || value.startsWith("-") || isSubcommand(value)) {
|
|
@@ -162,6 +184,7 @@ export function extractGlobalFlags(
|
|
|
162
184
|
rest,
|
|
163
185
|
error: `${arg} requires a value`,
|
|
164
186
|
...(apiKey === undefined ? {} : { apiKey }),
|
|
187
|
+
...(panes === undefined ? {} : { panes }),
|
|
165
188
|
};
|
|
166
189
|
}
|
|
167
190
|
if (arg === "--api-key") apiKey = value;
|
|
@@ -176,6 +199,7 @@ export function extractGlobalFlags(
|
|
|
176
199
|
rest,
|
|
177
200
|
error: unknownGlobalOptionError(arg),
|
|
178
201
|
...(apiKey === undefined ? {} : { apiKey }),
|
|
202
|
+
...(panes === undefined ? {} : { panes }),
|
|
179
203
|
};
|
|
180
204
|
}
|
|
181
205
|
return {
|
|
@@ -184,5 +208,6 @@ export function extractGlobalFlags(
|
|
|
184
208
|
skillPaths,
|
|
185
209
|
rest,
|
|
186
210
|
...(apiKey === undefined ? {} : { apiKey }),
|
|
211
|
+
...(panes === undefined ? {} : { panes }),
|
|
187
212
|
};
|
|
188
213
|
}
|
package/src/cli/auth.ts
CHANGED
|
@@ -104,8 +104,8 @@ function renderStatusRows(rows: ReadonlyArray<ConnectableProviderRow>): string {
|
|
|
104
104
|
|
|
105
105
|
function defaultAuthTarget(rows: ReadonlyArray<ConnectableProviderRow>): string | undefined {
|
|
106
106
|
const settings = readSettings();
|
|
107
|
-
const activeTarget = settings.
|
|
108
|
-
? settings.targets.find((entry) => entry.id === settings.
|
|
107
|
+
const activeTarget = settings.chat.target
|
|
108
|
+
? settings.targets.find((entry) => entry.id === settings.chat.target)
|
|
109
109
|
: undefined;
|
|
110
110
|
if (activeTarget && rows.some((row) => row.entry.runtimeId === activeTarget.runtime)) {
|
|
111
111
|
return activeTarget.runtime;
|
|
@@ -79,9 +79,9 @@ export interface BootstrapRoute {
|
|
|
79
79
|
*/
|
|
80
80
|
export function resolveBootstrapRoute(settings: Readonly<ClioSettings>): BootstrapRoute {
|
|
81
81
|
for (const agentId of [CONTEXT_BOOTSTRAP_AGENT_ID, "scout"]) {
|
|
82
|
-
const profileName = settings.
|
|
82
|
+
const profileName = settings.fleet.agentProfiles[agentId];
|
|
83
83
|
if (!profileName) continue;
|
|
84
|
-
const profile = settings.
|
|
84
|
+
const profile = settings.fleet.profiles[profileName];
|
|
85
85
|
if (!profile) throw new Error(`bootstrap profile '${profileName}' is not configured (bound to '${agentId}')`);
|
|
86
86
|
if (!profile.target) throw new Error(`bootstrap profile '${profileName}' has no target (bound to '${agentId}')`);
|
|
87
87
|
return {
|
|
@@ -90,7 +90,7 @@ export function resolveBootstrapRoute(settings: Readonly<ClioSettings>): Bootstr
|
|
|
90
90
|
...(profile.thinkingLevel ? { thinkingLevel: profile.thinkingLevel } : {}),
|
|
91
91
|
};
|
|
92
92
|
}
|
|
93
|
-
const fallback = settings.
|
|
93
|
+
const fallback = settings.fleet.default;
|
|
94
94
|
if (!fallback?.target) {
|
|
95
95
|
throw new Error(
|
|
96
96
|
`bootstrap has no route: workers.agentBindings.${CONTEXT_BOOTSTRAP_AGENT_ID} is unbound and ` +
|
|
@@ -233,7 +233,7 @@ async function collectDispatchAssistantText(
|
|
|
233
233
|
message: "bootstrap agent started repository exploration",
|
|
234
234
|
});
|
|
235
235
|
}
|
|
236
|
-
if (isRecord(event) && event.type === "
|
|
236
|
+
if (isRecord(event) && event.type === "clio_coder_tool_start") {
|
|
237
237
|
const tool = toolNameFromEvent(event);
|
|
238
238
|
if (tool) {
|
|
239
239
|
input.progress?.({
|
|
@@ -244,7 +244,7 @@ async function collectDispatchAssistantText(
|
|
|
244
244
|
});
|
|
245
245
|
}
|
|
246
246
|
}
|
|
247
|
-
if (isRecord(event) && event.type === "
|
|
247
|
+
if (isRecord(event) && event.type === "clio_coder_tool_finish") {
|
|
248
248
|
const tool = toolNameFromEvent(event);
|
|
249
249
|
const outcome = toolOutcomeFromEvent(event) ?? "done";
|
|
250
250
|
if (tool) {
|
package/src/cli/clio.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { classifyDefaultTarget, describeVerdict } from "./default-target.js";
|
|
|
6
6
|
|
|
7
7
|
/** Headless and ACP keep their established non-TUI transports even when an
|
|
8
8
|
* embedding process leaves the interactive marker in the environment. */
|
|
9
|
-
|
|
9
|
+
function terminalLeaseEligible(
|
|
10
10
|
options: Pick<BootOptions, "headless" | "acp">,
|
|
11
11
|
env: Readonly<Record<string, string | undefined>> = process.env,
|
|
12
12
|
): boolean {
|
|
@@ -44,6 +44,11 @@ export async function runClioCommand(options: BootOptions = {}): Promise<number>
|
|
|
44
44
|
const configured = await runConfigureCommand([]);
|
|
45
45
|
if (configured !== 0) return configured;
|
|
46
46
|
startupSettings = readStrictLayeredSettings(process.cwd()).settings;
|
|
47
|
+
const configuredVerdict = classifyDefaultTarget(startupSettings);
|
|
48
|
+
if (configuredVerdict.kind !== "usable" && configuredVerdict.kind !== "missing-credential") {
|
|
49
|
+
process.stderr.write(`${describeVerdict(configuredVerdict)} Configuration did not complete; startup cancelled.\n`);
|
|
50
|
+
return 2;
|
|
51
|
+
}
|
|
47
52
|
}
|
|
48
53
|
}
|
|
49
54
|
let terminalLease: import("../interactive/terminal-lease.js").TerminalLease | undefined;
|
|
@@ -317,12 +317,12 @@ function inspectSafetyAndMemory(cwd: string, graph: CustomizationGraph): void {
|
|
|
317
317
|
const layered = readLayeredSettings(cwd);
|
|
318
318
|
graph.entries.push({
|
|
319
319
|
category: "safety",
|
|
320
|
-
id: "autonomy",
|
|
321
|
-
scope: settingsSourceFor(layered.sources, "autonomy"),
|
|
320
|
+
id: "safety.autonomy",
|
|
321
|
+
scope: settingsSourceFor(layered.sources, "safety.autonomy"),
|
|
322
322
|
reloadClass: "hot",
|
|
323
323
|
trust: "n/a",
|
|
324
324
|
precedence: "single",
|
|
325
|
-
detail: { autonomy: layered.settings.autonomy ?? "auto-edit" },
|
|
325
|
+
detail: { autonomy: layered.settings.safety.autonomy ?? "auto-edit" },
|
|
326
326
|
});
|
|
327
327
|
} catch (err) {
|
|
328
328
|
graph.issues.push(`safety: ${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -22,7 +22,7 @@ function describe(proposal: InteropProposal): string {
|
|
|
22
22
|
renderProposalEntry(proposal),
|
|
23
23
|
"",
|
|
24
24
|
`projectContext stays ${INHERITED_PROJECT_CONTEXT}: this agent receives your task text, never the project projection.`,
|
|
25
|
-
`toolGovernance is clio-policy: its tool calls are gated by Clio safety.`,
|
|
25
|
+
`toolGovernance is clio-coder-policy: its tool calls are gated by Clio safety.`,
|
|
26
26
|
];
|
|
27
27
|
if (proposal.needsNetworkInstall) {
|
|
28
28
|
lines.push(`The ACP adapter is not installed locally; npx fetches it the first time you delegate.`);
|
package/src/cli/configure.ts
CHANGED
|
@@ -19,6 +19,8 @@ import {
|
|
|
19
19
|
listKnownModelsForRuntime,
|
|
20
20
|
listProviderSupportEntries,
|
|
21
21
|
type ProviderSupportEntry,
|
|
22
|
+
readTargetModelSnapshot,
|
|
23
|
+
recordTargetModelSnapshot,
|
|
22
24
|
resolveRuntimeAuthTarget,
|
|
23
25
|
supportGroupLabel,
|
|
24
26
|
} from "../domains/providers/index.js";
|
|
@@ -78,7 +80,7 @@ Non-interactive flags:
|
|
|
78
80
|
--force save a model outside the runtime catalog, or one the
|
|
79
81
|
target does not advertise, without refusing
|
|
80
82
|
--gateway mark the target as a gateway
|
|
81
|
-
--lifecycle <user-managed|clio-managed>
|
|
83
|
+
--lifecycle <user-managed|clio-coder-managed>
|
|
82
84
|
resident model lifecycle policy
|
|
83
85
|
--set-orchestrator use this target for chat
|
|
84
86
|
--set-background use this target for proactive task memory
|
|
@@ -103,6 +105,7 @@ const DEFAULT_PORTS: Record<string, number> = {
|
|
|
103
105
|
lemonade: 8000,
|
|
104
106
|
"anthropic-compat": 8000,
|
|
105
107
|
"openai-compat": 8000,
|
|
108
|
+
litellm: 4000,
|
|
106
109
|
};
|
|
107
110
|
|
|
108
111
|
interface ParsedArgs {
|
|
@@ -222,8 +225,8 @@ function parseSetupArgs(argv: ReadonlyArray<string>): ParsedArgs {
|
|
|
222
225
|
break;
|
|
223
226
|
case "--lifecycle": {
|
|
224
227
|
const v = need();
|
|
225
|
-
if (v !== "user-managed" && v !== "clio-managed") {
|
|
226
|
-
throw new Error("--lifecycle must be user-managed or clio-managed");
|
|
228
|
+
if (v !== "user-managed" && v !== "clio-coder-managed") {
|
|
229
|
+
throw new Error("--lifecycle must be user-managed or clio-coder-managed");
|
|
227
230
|
}
|
|
228
231
|
out.lifecycle = v;
|
|
229
232
|
break;
|
|
@@ -317,7 +320,9 @@ function printRuntimeList(includeHidden: boolean): void {
|
|
|
317
320
|
: runtime?.auth === "api-key"
|
|
318
321
|
? status?.available
|
|
319
322
|
? "credential"
|
|
320
|
-
:
|
|
323
|
+
: targetRequiresAuth({ id: entry.runtimeId, runtime: entry.runtimeId }, runtime)
|
|
324
|
+
? "needs-key"
|
|
325
|
+
: "key-optional"
|
|
321
326
|
: (runtime?.auth ?? "none");
|
|
322
327
|
rows.push({
|
|
323
328
|
group: supportGroupLabel(entry.group),
|
|
@@ -387,8 +392,8 @@ function catalogContextWindowFor(runtime: RuntimeDescriptor, modelId: string): n
|
|
|
387
392
|
/**
|
|
388
393
|
* Check the resolved model against the catalog where there is one and against
|
|
389
394
|
* the target's own list where there is not. A runtime with no catalog used to
|
|
390
|
-
* pass any string here while the same command
|
|
391
|
-
*
|
|
395
|
+
* pass any string here while the same command had a live list that ruled it
|
|
396
|
+
* out, so the target saved as `ok` and failed on its first
|
|
392
397
|
* turn. Without a catalog or a live list there is nothing to check against, and
|
|
393
398
|
* the note says so rather than implying the id was verified.
|
|
394
399
|
*/
|
|
@@ -480,13 +485,13 @@ function setOrchestratorPointer(settings: ClioSettings, descriptor: TargetDescri
|
|
|
480
485
|
`cannot use target '${descriptor.id}' as orchestrator target because runtime '${runtime.id}' is not an HTTP/native runtime`,
|
|
481
486
|
);
|
|
482
487
|
}
|
|
483
|
-
settings.
|
|
484
|
-
settings.
|
|
488
|
+
settings.chat.target = descriptor.id;
|
|
489
|
+
settings.chat.model = model ?? descriptor.defaultModel ?? null;
|
|
485
490
|
}
|
|
486
491
|
|
|
487
492
|
function setWorkerDefaultPointer(settings: ClioSettings, descriptor: TargetDescriptor, model?: string | null): void {
|
|
488
|
-
settings.
|
|
489
|
-
settings.
|
|
493
|
+
settings.fleet.default.target = descriptor.id;
|
|
494
|
+
settings.fleet.default.model = model ?? descriptor.defaultModel ?? null;
|
|
490
495
|
}
|
|
491
496
|
|
|
492
497
|
function setBackgroundPointer(settings: ClioSettings, descriptor: TargetDescriptor, model?: string | null): void {
|
|
@@ -496,13 +501,13 @@ function setBackgroundPointer(settings: ClioSettings, descriptor: TargetDescript
|
|
|
496
501
|
`cannot use target '${descriptor.id}' as background target because runtime '${descriptor.runtime}' is not an HTTP/native runtime`,
|
|
497
502
|
);
|
|
498
503
|
}
|
|
499
|
-
settings.
|
|
500
|
-
settings.
|
|
504
|
+
settings.context.memory.target = descriptor.id;
|
|
505
|
+
settings.context.memory.model = model ?? descriptor.defaultModel ?? null;
|
|
501
506
|
}
|
|
502
507
|
|
|
503
508
|
function assertOrchestratorReplacementEligible(settings: ClioSettings, descriptor: TargetDescriptor): void {
|
|
504
|
-
if (settings.
|
|
505
|
-
const role = settings.
|
|
509
|
+
if (settings.chat.target !== descriptor.id && settings.context.memory.target !== descriptor.id) return;
|
|
510
|
+
const role = settings.chat.target === descriptor.id ? "orchestrator" : "background";
|
|
506
511
|
const runtime = getRuntimeRegistry().get(descriptor.runtime);
|
|
507
512
|
if (!runtime) {
|
|
508
513
|
throw new Error(
|
|
@@ -522,7 +527,7 @@ function setWorkerProfilePointer(
|
|
|
522
527
|
): void {
|
|
523
528
|
const trimmed = name.trim();
|
|
524
529
|
if (trimmed.length === 0) throw new Error("fleet profile name must be non-empty");
|
|
525
|
-
settings.
|
|
530
|
+
settings.fleet.profiles[trimmed] = {
|
|
526
531
|
target: descriptor.id,
|
|
527
532
|
model: model ?? descriptor.defaultModel ?? null,
|
|
528
533
|
thinkingLevel: "off",
|
|
@@ -602,10 +607,10 @@ function printSummary(settings: ClioSettings, descriptor: TargetDescriptor, prob
|
|
|
602
607
|
for (const line of probeLines(descriptor, probe)) process.stdout.write(` ${line}\n`);
|
|
603
608
|
}
|
|
604
609
|
warnUndiscoveredContextWindow(descriptor, probe);
|
|
605
|
-
if (settings.
|
|
606
|
-
if (settings.
|
|
607
|
-
if (settings.
|
|
608
|
-
for (const [name, profile] of Object.entries(settings.
|
|
610
|
+
if (settings.chat.target === descriptor.id) process.stdout.write(" orchestrator target\n");
|
|
611
|
+
if (settings.context.memory.target === descriptor.id) process.stdout.write(" background memory target\n");
|
|
612
|
+
if (settings.fleet.default.target === descriptor.id) process.stdout.write(" fleet default\n");
|
|
613
|
+
for (const [name, profile] of Object.entries(settings.fleet.profiles)) {
|
|
609
614
|
if (profile.target === descriptor.id) process.stdout.write(` fleet profile ${name}\n`);
|
|
610
615
|
}
|
|
611
616
|
process.stdout.write(`\nsettings written to ${settingsPath()}\n`);
|
|
@@ -617,7 +622,6 @@ function buildDescriptor(
|
|
|
617
622
|
parts: {
|
|
618
623
|
url?: string;
|
|
619
624
|
model?: string;
|
|
620
|
-
wireModels?: string[];
|
|
621
625
|
apiKeyEnv?: string;
|
|
622
626
|
apiKeyRef?: string;
|
|
623
627
|
oauthProfile?: string;
|
|
@@ -631,19 +635,12 @@ function buildDescriptor(
|
|
|
631
635
|
): TargetDescriptor {
|
|
632
636
|
const descriptor: TargetDescriptor = { id, runtime: runtime.id };
|
|
633
637
|
if (parts.url) descriptor.url = parts.url;
|
|
634
|
-
const wireModels =
|
|
635
|
-
parts.wireModels?.filter((value, index, all) => value.trim().length > 0 && all.indexOf(value) === index) ?? [];
|
|
636
638
|
if (parts.model) descriptor.defaultModel = parts.model;
|
|
637
|
-
else {
|
|
638
|
-
const firstWireModel = wireModels[0];
|
|
639
|
-
if (firstWireModel) descriptor.defaultModel = firstWireModel;
|
|
640
|
-
}
|
|
641
639
|
const auth: NonNullable<TargetDescriptor["auth"]> = {};
|
|
642
640
|
if (parts.apiKeyEnv) auth.apiKeyEnvVar = parts.apiKeyEnv;
|
|
643
641
|
if (parts.apiKeyRef) auth.apiKeyRef = parts.apiKeyRef;
|
|
644
642
|
if (parts.oauthProfile) auth.oauthProfile = parts.oauthProfile;
|
|
645
643
|
if (Object.keys(auth).length > 0) descriptor.auth = auth;
|
|
646
|
-
if (wireModels.length > 0) descriptor.wireModels = wireModels;
|
|
647
644
|
if (parts.gateway) descriptor.gateway = true;
|
|
648
645
|
if (parts.lifecycle) descriptor.lifecycle = parts.lifecycle;
|
|
649
646
|
const caps: NonNullable<TargetDescriptor["capabilities"]> = {};
|
|
@@ -714,7 +711,7 @@ async function loginOAuthRuntime(rl: ReturnType<typeof createInterface>, runtime
|
|
|
714
711
|
*/
|
|
715
712
|
interface WireModelInventory {
|
|
716
713
|
models: string[];
|
|
717
|
-
source: "catalog" | "probe" | "
|
|
714
|
+
source: "catalog" | "probe" | "cache" | "legacy" | "none";
|
|
718
715
|
/** Per-model load state when the probe reported it. */
|
|
719
716
|
modelStates?: Readonly<Record<string, ProbeModelStatus>> | undefined;
|
|
720
717
|
}
|
|
@@ -761,13 +758,21 @@ async function resolveSupportedWireModels(
|
|
|
761
758
|
// lists models only through probeModels still gets its ids checked.
|
|
762
759
|
const probe = await runtimeProbe(runtime, target, authToken);
|
|
763
760
|
if (probe?.ok && probe.models && probe.models.length > 0) {
|
|
761
|
+
recordTargetModelSnapshot(target, probe.models);
|
|
764
762
|
return { models: [...probe.models], source: "probe", modelStates: probe.modelStates };
|
|
765
763
|
}
|
|
766
764
|
const discovered = await runtimeProbeModels(runtime, target, authToken);
|
|
767
|
-
if (discovered.length > 0)
|
|
765
|
+
if (discovered.length > 0) {
|
|
766
|
+
recordTargetModelSnapshot(target, discovered);
|
|
767
|
+
return { models: discovered, source: "probe" };
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
const cached = readTargetModelSnapshot(target);
|
|
771
|
+
if (cached && cached.models.length > 0) return { models: [...cached.models], source: "cache" };
|
|
772
|
+
if (existing?.wireModels && existing.wireModels.length > 0) {
|
|
773
|
+
recordTargetModelSnapshot(target, existing.wireModels);
|
|
774
|
+
return { models: [...existing.wireModels], source: "legacy" };
|
|
768
775
|
}
|
|
769
|
-
if (existing?.wireModels && existing.wireModels.length > 0)
|
|
770
|
-
return { models: [...existing.wireModels], source: "existing" };
|
|
771
776
|
return { models: [], source: "none" };
|
|
772
777
|
}
|
|
773
778
|
|
|
@@ -905,7 +910,6 @@ async function runNonInteractive(runtime: RuntimeDescriptor, args: ParsedArgs):
|
|
|
905
910
|
const descriptor = buildDescriptor(runtime, args.id, {
|
|
906
911
|
...(url !== undefined ? { url } : {}),
|
|
907
912
|
...(model ? { model } : {}),
|
|
908
|
-
...(wireModels.length > 0 ? { wireModels } : {}),
|
|
909
913
|
...(apiKeyEnv !== undefined ? { apiKeyEnv } : {}),
|
|
910
914
|
...(apiKeyRef !== undefined ? { apiKeyRef } : {}),
|
|
911
915
|
...(oauthProfile !== undefined ? { oauthProfile } : {}),
|
|
@@ -966,6 +970,7 @@ async function runNonInteractive(runtime: RuntimeDescriptor, args: ParsedArgs):
|
|
|
966
970
|
applyConfiguration(settings);
|
|
967
971
|
updateSettings(applyConfiguration);
|
|
968
972
|
const probe = await runtimeProbe(runtime, descriptor);
|
|
973
|
+
if (probe?.ok && probe.models) recordTargetModelSnapshot(descriptor, probe.models);
|
|
969
974
|
printSummary(settings, descriptor, probe);
|
|
970
975
|
if (
|
|
971
976
|
runtime.auth === "oauth" &&
|
|
@@ -1150,7 +1155,7 @@ async function runInteractive(
|
|
|
1150
1155
|
let runtime = preselectedRuntime ?? (await pickRuntimeViaCategory(rl));
|
|
1151
1156
|
if (!runtime) {
|
|
1152
1157
|
printError("configuration cancelled");
|
|
1153
|
-
return
|
|
1158
|
+
return 130;
|
|
1154
1159
|
}
|
|
1155
1160
|
const auth = openAuthStorage();
|
|
1156
1161
|
const settings = readSettings();
|
|
@@ -1272,10 +1277,7 @@ async function runInteractive(
|
|
|
1272
1277
|
}
|
|
1273
1278
|
|
|
1274
1279
|
let model: string | undefined = defaults.model;
|
|
1275
|
-
let inventory: WireModelInventory =
|
|
1276
|
-
existing?.wireModels && existing.wireModels.length > 0
|
|
1277
|
-
? { models: [...existing.wireModels], source: "existing" }
|
|
1278
|
-
: { models: [], source: "none" };
|
|
1280
|
+
let inventory: WireModelInventory = { models: [], source: "none" };
|
|
1279
1281
|
const tentative = buildDescriptor(runtime, targetId, {
|
|
1280
1282
|
...(url !== undefined ? { url } : {}),
|
|
1281
1283
|
...(apiKeyEnv !== undefined ? { apiKeyEnv } : {}),
|
|
@@ -1367,7 +1369,6 @@ async function runInteractive(
|
|
|
1367
1369
|
...(apiKeyEnv !== undefined ? { apiKeyEnv } : {}),
|
|
1368
1370
|
...(apiKeyRef !== undefined ? { apiKeyRef } : {}),
|
|
1369
1371
|
...(oauthProfile !== undefined ? { oauthProfile } : {}),
|
|
1370
|
-
...(wireModels.length > 0 ? { wireModels } : {}),
|
|
1371
1372
|
gateway: gatewayAnswer,
|
|
1372
1373
|
...(defaults.lifecycle !== undefined
|
|
1373
1374
|
? { lifecycle: defaults.lifecycle }
|
|
@@ -1395,6 +1396,7 @@ async function runInteractive(
|
|
|
1395
1396
|
}
|
|
1396
1397
|
|
|
1397
1398
|
const probe = await runtimeProbe(runtime, descriptor);
|
|
1399
|
+
if (probe?.ok && probe.models) recordTargetModelSnapshot(descriptor, probe.models);
|
|
1398
1400
|
if (probe) {
|
|
1399
1401
|
process.stdout.write("\n");
|
|
1400
1402
|
for (const line of probeLines(descriptor, probe)) process.stdout.write(`${line}\n`);
|
|
@@ -1411,10 +1413,10 @@ async function runInteractive(
|
|
|
1411
1413
|
? false
|
|
1412
1414
|
: defaults.setOrchestrator
|
|
1413
1415
|
? true
|
|
1414
|
-
: await askYesNo(rl, "use as orchestrator (chat) target?", !settings.
|
|
1416
|
+
: await askYesNo(rl, "use as orchestrator (chat) target?", !settings.chat.target);
|
|
1415
1417
|
const setWorkerDefault = defaults.setWorkerDefault
|
|
1416
1418
|
? true
|
|
1417
|
-
: await askYesNo(rl, "use as fleet default?", !settings.
|
|
1419
|
+
: await askYesNo(rl, "use as fleet default?", !settings.fleet.default.target);
|
|
1418
1420
|
const setBackground = !isOrchestratorEligibleRuntime(runtime)
|
|
1419
1421
|
? false
|
|
1420
1422
|
: defaults.setBackground
|
|
@@ -1426,7 +1428,7 @@ async function runInteractive(
|
|
|
1426
1428
|
rl,
|
|
1427
1429
|
"Orchestrator model",
|
|
1428
1430
|
wireModels,
|
|
1429
|
-
settings.
|
|
1431
|
+
settings.chat.target === targetId ? (settings.chat.model ?? model) : model,
|
|
1430
1432
|
)))
|
|
1431
1433
|
: undefined;
|
|
1432
1434
|
if (orchestratorModel === null) return 0;
|
|
@@ -1436,7 +1438,7 @@ async function runInteractive(
|
|
|
1436
1438
|
rl,
|
|
1437
1439
|
"Fleet model",
|
|
1438
1440
|
wireModels,
|
|
1439
|
-
settings.
|
|
1441
|
+
settings.fleet.default.target === targetId ? (settings.fleet.default.model ?? model) : model,
|
|
1440
1442
|
)))
|
|
1441
1443
|
: undefined;
|
|
1442
1444
|
if (workerModel === null) return 0;
|
|
@@ -1446,7 +1448,7 @@ async function runInteractive(
|
|
|
1446
1448
|
rl,
|
|
1447
1449
|
"Background memory model",
|
|
1448
1450
|
wireModels,
|
|
1449
|
-
settings.
|
|
1451
|
+
settings.context.memory.target === targetId ? (settings.context.memory.model ?? model) : model,
|
|
1450
1452
|
)))
|
|
1451
1453
|
: undefined;
|
|
1452
1454
|
if (backgroundModel === null) return 0;
|
|
@@ -1496,13 +1498,13 @@ export function runTargetRename(oldId: string, newId: string): number {
|
|
|
1496
1498
|
const target = settings.targets.find((e) => e.id === oldId);
|
|
1497
1499
|
if (!target) return;
|
|
1498
1500
|
target.id = newId;
|
|
1499
|
-
if (settings.
|
|
1500
|
-
if (settings.
|
|
1501
|
-
if (settings.
|
|
1502
|
-
for (const profile of Object.values(settings.
|
|
1501
|
+
if (settings.chat.target === oldId) settings.chat.target = newId;
|
|
1502
|
+
if (settings.context.memory.target === oldId) settings.context.memory.target = newId;
|
|
1503
|
+
if (settings.fleet.default.target === oldId) settings.fleet.default.target = newId;
|
|
1504
|
+
for (const profile of Object.values(settings.fleet.profiles)) {
|
|
1503
1505
|
if (profile.target === oldId) profile.target = newId;
|
|
1504
1506
|
}
|
|
1505
|
-
settings.
|
|
1507
|
+
settings.chat.modelPicker.cycleSet = settings.chat.modelPicker.cycleSet.map((entry) => {
|
|
1506
1508
|
const [head, ...rest] = entry.split("/");
|
|
1507
1509
|
if (head !== oldId) return entry;
|
|
1508
1510
|
return rest.length === 0 ? newId : `${newId}/${rest.join("/")}`;
|
|
@@ -24,7 +24,7 @@ export type DefaultTargetVerdict =
|
|
|
24
24
|
| { kind: "missing-credential"; targetId: string; store: string };
|
|
25
25
|
|
|
26
26
|
export function classifyDefaultTarget(settings: Readonly<ClioSettings> = readSettings()): DefaultTargetVerdict {
|
|
27
|
-
const targetId = settings.
|
|
27
|
+
const targetId = settings.chat.target;
|
|
28
28
|
if (!targetId) return { kind: "no-target" };
|
|
29
29
|
// A chat target naming an id that is not in `targets` cannot arrive here:
|
|
30
30
|
// the schema normalizes dangling routing references to null so that
|
package/src/cli/docs.ts
CHANGED
|
@@ -65,12 +65,12 @@ export interface DocsMenuEntry {
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
/** Resolve docs/html from the package root; present in a source checkout, absent from the npm package. */
|
|
68
|
-
|
|
68
|
+
function resolveDocsHtmlDir(): string {
|
|
69
69
|
return resolve(resolvePackageRoot(), "docs", "html");
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
/** Content-type for a file path by extension. Pure. Defaults to octet-stream. */
|
|
73
|
-
|
|
73
|
+
function contentTypeFor(filePath: string): string {
|
|
74
74
|
const dot = filePath.lastIndexOf(".");
|
|
75
75
|
if (dot === -1) return "application/octet-stream";
|
|
76
76
|
return CONTENT_TYPES[filePath.slice(dot).toLowerCase()] ?? "application/octet-stream";
|
|
@@ -82,7 +82,7 @@ export function contentTypeFor(filePath: string): string {
|
|
|
82
82
|
* to `index.html`, and rejects any traversal segment so a request can never
|
|
83
83
|
* escape the served directory.
|
|
84
84
|
*/
|
|
85
|
-
|
|
85
|
+
function resolveRequestPath(rawUrl: string): { ok: true; relative: string } | { ok: false; reason: string } {
|
|
86
86
|
const pathPart = (rawUrl.split(/[?#]/, 1)[0] ?? "").trim();
|
|
87
87
|
let decoded: string;
|
|
88
88
|
try {
|
|
@@ -112,7 +112,7 @@ function titleize(topic: string): string {
|
|
|
112
112
|
* the file-name list, not the directory. `index.html` is the menu itself and is
|
|
113
113
|
* excluded; a trailing `_blueprint` is stripped from the topic key.
|
|
114
114
|
*/
|
|
115
|
-
|
|
115
|
+
function synthesizeMenu(fileNames: ReadonlyArray<string>): DocsMenuEntry[] {
|
|
116
116
|
const entries: DocsMenuEntry[] = [];
|
|
117
117
|
for (const name of fileNames) {
|
|
118
118
|
if (!name.toLowerCase().endsWith(".html")) continue;
|
|
@@ -129,7 +129,7 @@ export function synthesizeMenu(fileNames: ReadonlyArray<string>): DocsMenuEntry[
|
|
|
129
129
|
* topic (`safety`), the blueprint file stem (`safety_blueprint`), or a full
|
|
130
130
|
* `.html` name, case-insensitively. Returns null when nothing matches.
|
|
131
131
|
*/
|
|
132
|
-
|
|
132
|
+
function topicToFile(topic: string, fileNames: ReadonlyArray<string>): string | null {
|
|
133
133
|
const wanted = topic
|
|
134
134
|
.trim()
|
|
135
135
|
.toLowerCase()
|
|
@@ -227,7 +227,7 @@ export interface StartDocsServerOptions {
|
|
|
227
227
|
}
|
|
228
228
|
|
|
229
229
|
/** Start the viewer bound to 127.0.0.1 on an ephemeral port. */
|
|
230
|
-
|
|
230
|
+
async function startDocsServer(options: StartDocsServerOptions): Promise<DocsServerHandle> {
|
|
231
231
|
const host = options.host ?? HOST;
|
|
232
232
|
const server = createServer(createDocsRequestHandler(options.htmlDir));
|
|
233
233
|
await new Promise<void>((resolveListen, rejectListen) => {
|