@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
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fixed machine-readable projection of recent durable trace runs and phases.
|
|
3
|
+
*
|
|
4
|
+
* `trace runs --json` is an operator-directed terminal surface: it takes a
|
|
5
|
+
* database path and a limit, and it emits `SELECT *`, which includes the
|
|
6
|
+
* request text the operator typed. The GUI cannot reuse that transport. This
|
|
7
|
+
* command accepts no identifier, path, or limit, opens only the default trace
|
|
8
|
+
* database, selects a bounded newest-first window itself, and emits accounting
|
|
9
|
+
* facts with no prompt text, no free-form description or error, and no path.
|
|
10
|
+
*
|
|
11
|
+
* It is deliberately a separate read from `fleet inspect --json` even though
|
|
12
|
+
* both are keyed by run id. The ledger and the trace database are different
|
|
13
|
+
* durable stores with different failure modes: an installation that never
|
|
14
|
+
* enabled tracing has no trace database at all, and that must be an empty
|
|
15
|
+
* answer here rather than a failure of the run journal.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { existsSync } from "node:fs";
|
|
19
|
+
import { clioStatePath } from "../core/xdg.js";
|
|
20
|
+
import { TraceReader, traceDatabasePath } from "../domains/observability/trace-store.js";
|
|
21
|
+
import { sanitizeCallTargetText } from "../domains/safety/call-target.js";
|
|
22
|
+
import { truncateToWidth } from "../engine/tui-primitives.js";
|
|
23
|
+
|
|
24
|
+
export const TRACE_INSPECT_MAX_RUNS = 8;
|
|
25
|
+
export const TRACE_INSPECT_MAX_PHASES = 16;
|
|
26
|
+
export const TRACE_INSPECT_MAX_EVENT_KINDS = 12;
|
|
27
|
+
export const TRACE_INSPECT_MAX_PROCESS_KINDS = 8;
|
|
28
|
+
|
|
29
|
+
const IDENTITY_WIDTH = 128;
|
|
30
|
+
const STATUS_WIDTH = 64;
|
|
31
|
+
|
|
32
|
+
export interface TraceInspectPhase {
|
|
33
|
+
readonly name: string;
|
|
34
|
+
readonly kind: string;
|
|
35
|
+
readonly owner: string;
|
|
36
|
+
readonly status: string;
|
|
37
|
+
readonly attempt: number;
|
|
38
|
+
readonly retries: number;
|
|
39
|
+
/** Whether the phase recorded an error, without the error text itself. */
|
|
40
|
+
readonly failed: boolean;
|
|
41
|
+
readonly elapsedMs: number | null;
|
|
42
|
+
readonly totalTokens: number | null;
|
|
43
|
+
readonly totalCostUsd: number | null;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* What a run's events were, in aggregate.
|
|
48
|
+
*
|
|
49
|
+
* Deliberately shapes and not rows. A trace event carries `payload_json` and a
|
|
50
|
+
* free-form name, which are the class of value this boundary keeps host-side,
|
|
51
|
+
* so the tail itself stays in the terminal and what crosses is how many events
|
|
52
|
+
* of each kind there were and the span they cover. The counts come out of SQL,
|
|
53
|
+
* so the payloads are not read on the way to counting them.
|
|
54
|
+
*/
|
|
55
|
+
export interface TraceInspectEvents {
|
|
56
|
+
readonly total: number;
|
|
57
|
+
readonly firstAt: string | null;
|
|
58
|
+
readonly lastAt: string | null;
|
|
59
|
+
readonly kinds: readonly { readonly kind: string; readonly count: number }[];
|
|
60
|
+
readonly kindsTruncated: boolean;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* What a run's child processes were, in aggregate.
|
|
65
|
+
*
|
|
66
|
+
* Same rule, applied harder: a process row carries the command line, the pid,
|
|
67
|
+
* and the host. None of that is needed to say a run spawned four workers and
|
|
68
|
+
* one is still alive, and none of it crosses.
|
|
69
|
+
*/
|
|
70
|
+
export interface TraceInspectProcesses {
|
|
71
|
+
readonly total: number;
|
|
72
|
+
readonly running: number;
|
|
73
|
+
readonly kinds: readonly { readonly kind: string; readonly total: number; readonly running: number }[];
|
|
74
|
+
readonly kindsTruncated: boolean;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export interface TraceInspectRun {
|
|
78
|
+
readonly runId: string;
|
|
79
|
+
readonly agent: string;
|
|
80
|
+
readonly target: string;
|
|
81
|
+
readonly model: string;
|
|
82
|
+
readonly runtime: string;
|
|
83
|
+
readonly node: string | null;
|
|
84
|
+
readonly status: string;
|
|
85
|
+
readonly startedAt: string;
|
|
86
|
+
readonly elapsedMs: number | null;
|
|
87
|
+
readonly totalTokens: number | null;
|
|
88
|
+
readonly totalCostUsd: number | null;
|
|
89
|
+
readonly phases: readonly TraceInspectPhase[];
|
|
90
|
+
readonly phasesTruncated: boolean;
|
|
91
|
+
readonly events: TraceInspectEvents;
|
|
92
|
+
readonly processes: TraceInspectProcesses;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export interface TraceInspectSnapshot {
|
|
96
|
+
readonly version: 1;
|
|
97
|
+
readonly generatedAt: string;
|
|
98
|
+
/**
|
|
99
|
+
* False when this installation has no trace database. That is the ordinary
|
|
100
|
+
* state of an installation that never enabled tracing, and it has to stay
|
|
101
|
+
* distinguishable from a database that exists and holds no runs.
|
|
102
|
+
*/
|
|
103
|
+
readonly available: boolean;
|
|
104
|
+
readonly runs: readonly TraceInspectRun[];
|
|
105
|
+
readonly truncated: boolean;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function bounded(value: string, width: number): string {
|
|
109
|
+
const sanitized = sanitizeCallTargetText(value);
|
|
110
|
+
if (sanitized.length === 0) return "unavailable";
|
|
111
|
+
return sanitizeCallTargetText(truncateToWidth(sanitized, width, "…", false));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function nullableBounded(value: string | null, width: number): string | null {
|
|
115
|
+
return value === null ? null : bounded(value, width);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/** A finite non-negative count, or null when the store recorded none. */
|
|
119
|
+
function tally(value: number | null): number | null {
|
|
120
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? Math.trunc(value) : null;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/** A finite non-negative cost, or null. Kept as a number so the GUI formats it. */
|
|
124
|
+
function cost(value: number | null): number | null {
|
|
125
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : null;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Wall time between two stamps. Null rather than zero when either is missing or
|
|
130
|
+
* unparseable, because "still running" and "took no time" are different facts.
|
|
131
|
+
*/
|
|
132
|
+
function elapsed(startedAt: string | null, endedAt: string | null): number | null {
|
|
133
|
+
if (startedAt === null || endedAt === null) return null;
|
|
134
|
+
const start = Date.parse(startedAt);
|
|
135
|
+
const end = Date.parse(endedAt);
|
|
136
|
+
if (!Number.isFinite(start) || !Number.isFinite(end)) return null;
|
|
137
|
+
return Math.max(0, end - start);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function eventSummary(reader: TraceReader, runId: string): TraceInspectEvents {
|
|
141
|
+
const span = reader.eventSpan(runId);
|
|
142
|
+
const all = reader.eventKindCounts(runId);
|
|
143
|
+
const visible = all.slice(0, TRACE_INSPECT_MAX_EVENT_KINDS);
|
|
144
|
+
return {
|
|
145
|
+
total: tally(span.total) ?? 0,
|
|
146
|
+
firstAt: span.firstAt,
|
|
147
|
+
lastAt: span.lastAt,
|
|
148
|
+
kinds: visible.map((entry) => ({ kind: bounded(entry.type, STATUS_WIDTH), count: tally(entry.count) ?? 0 })),
|
|
149
|
+
kindsTruncated: all.length > visible.length,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function processSummary(reader: TraceReader, runId: string): TraceInspectProcesses {
|
|
154
|
+
const all = reader.processKindCounts(runId);
|
|
155
|
+
const visible = all.slice(0, TRACE_INSPECT_MAX_PROCESS_KINDS);
|
|
156
|
+
return {
|
|
157
|
+
total: all.reduce((sum, entry) => sum + (tally(entry.total) ?? 0), 0),
|
|
158
|
+
running: all.reduce((sum, entry) => sum + (tally(entry.running) ?? 0), 0),
|
|
159
|
+
kinds: visible.map((entry) => ({
|
|
160
|
+
kind: bounded(entry.kind, STATUS_WIDTH),
|
|
161
|
+
total: tally(entry.total) ?? 0,
|
|
162
|
+
running: tally(entry.running) ?? 0,
|
|
163
|
+
})),
|
|
164
|
+
kindsTruncated: all.length > visible.length,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/** Pure payload builder, exported so the fixed contract is testable without subprocess capture. */
|
|
169
|
+
function traceInspectSnapshot(
|
|
170
|
+
now: () => number = Date.now,
|
|
171
|
+
databasePath: string = traceDatabasePath(clioStatePath()),
|
|
172
|
+
): TraceInspectSnapshot {
|
|
173
|
+
const generatedAt = new Date(now()).toISOString();
|
|
174
|
+
if (!existsSync(databasePath)) {
|
|
175
|
+
return { version: 1, generatedAt, available: false, runs: [], truncated: false };
|
|
176
|
+
}
|
|
177
|
+
let reader: TraceReader;
|
|
178
|
+
try {
|
|
179
|
+
reader = new TraceReader(databasePath);
|
|
180
|
+
} catch {
|
|
181
|
+
// A database that exists but will not open is not an empty installation,
|
|
182
|
+
// and it is not this command's job to diagnose it. Report it as present
|
|
183
|
+
// with nothing readable rather than inventing either extreme.
|
|
184
|
+
return { version: 1, generatedAt, available: true, runs: [], truncated: false };
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
const selected = reader.runs(TRACE_INSPECT_MAX_RUNS + 1);
|
|
188
|
+
const window = selected.slice(0, TRACE_INSPECT_MAX_RUNS);
|
|
189
|
+
const runs = window.map((row): TraceInspectRun => {
|
|
190
|
+
const allPhases = reader.phases(row.run_id);
|
|
191
|
+
const visible = allPhases.slice(0, TRACE_INSPECT_MAX_PHASES);
|
|
192
|
+
return {
|
|
193
|
+
runId: bounded(row.run_id, IDENTITY_WIDTH),
|
|
194
|
+
agent: bounded(row.agent, IDENTITY_WIDTH),
|
|
195
|
+
target: bounded(row.target, IDENTITY_WIDTH),
|
|
196
|
+
model: bounded(row.model, IDENTITY_WIDTH),
|
|
197
|
+
runtime: bounded(row.runtime, IDENTITY_WIDTH),
|
|
198
|
+
node: nullableBounded(row.node, IDENTITY_WIDTH),
|
|
199
|
+
status: bounded(row.status, STATUS_WIDTH),
|
|
200
|
+
startedAt: row.started_at,
|
|
201
|
+
elapsedMs: elapsed(row.started_at, row.ended_at),
|
|
202
|
+
totalTokens: tally(row.total_tokens),
|
|
203
|
+
totalCostUsd: cost(row.total_cost_usd),
|
|
204
|
+
phases: visible.map(
|
|
205
|
+
(phase): TraceInspectPhase => ({
|
|
206
|
+
name: bounded(phase.name, IDENTITY_WIDTH),
|
|
207
|
+
kind: bounded(phase.kind, STATUS_WIDTH),
|
|
208
|
+
owner: bounded(phase.owner, IDENTITY_WIDTH),
|
|
209
|
+
status: bounded(phase.status, STATUS_WIDTH),
|
|
210
|
+
attempt: tally(phase.attempt) ?? 0,
|
|
211
|
+
retries: tally(phase.retries) ?? 0,
|
|
212
|
+
// The error text can quote a path, a URL, or a model reply, so only
|
|
213
|
+
// the fact that one was recorded crosses.
|
|
214
|
+
failed: phase.error !== null && phase.error !== "",
|
|
215
|
+
elapsedMs: elapsed(phase.started_at, phase.ended_at),
|
|
216
|
+
totalTokens: tally(phase.total_tokens),
|
|
217
|
+
totalCostUsd: cost(phase.total_cost_usd),
|
|
218
|
+
}),
|
|
219
|
+
),
|
|
220
|
+
phasesTruncated: allPhases.length > visible.length,
|
|
221
|
+
events: eventSummary(reader, row.run_id),
|
|
222
|
+
processes: processSummary(reader, row.run_id),
|
|
223
|
+
};
|
|
224
|
+
});
|
|
225
|
+
return {
|
|
226
|
+
version: 1,
|
|
227
|
+
generatedAt,
|
|
228
|
+
available: true,
|
|
229
|
+
runs,
|
|
230
|
+
truncated: selected.length > window.length,
|
|
231
|
+
};
|
|
232
|
+
} finally {
|
|
233
|
+
reader.close();
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* `clio-coder trace inspect --json`, and nothing else.
|
|
239
|
+
*
|
|
240
|
+
* `fixed` is false as soon as the caller supplied a database, a limit, a follow,
|
|
241
|
+
* or any other positional. The whole point of this command is that its argv is
|
|
242
|
+
* not a surface: a GUI host can invoke it and be certain the process it started
|
|
243
|
+
* cannot be steered into reading a different file or a wider window.
|
|
244
|
+
*/
|
|
245
|
+
export function runTraceInspect(fixed: boolean): number {
|
|
246
|
+
if (!fixed) {
|
|
247
|
+
process.stderr.write("clio-coder trace inspect: usage: clio-coder trace inspect --json\n");
|
|
248
|
+
return 2;
|
|
249
|
+
}
|
|
250
|
+
process.stdout.write(`${JSON.stringify(traceInspectSnapshot(), null, 2)}\n`);
|
|
251
|
+
return 0;
|
|
252
|
+
}
|
package/src/cli/trace.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { resolve } from "node:path";
|
|
|
4
4
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
5
5
|
import { clioStatePath } from "../core/xdg.js";
|
|
6
6
|
import {
|
|
7
|
+
assertTraceSelectOnly,
|
|
7
8
|
DEFAULT_TRACE_RETENTION_POLICY,
|
|
8
9
|
resolveTraceRetentionPolicy,
|
|
9
10
|
TRACE_EVENT_POLL_LIMIT,
|
|
@@ -15,9 +16,11 @@ import {
|
|
|
15
16
|
TraceStore,
|
|
16
17
|
traceDatabasePath,
|
|
17
18
|
} from "../domains/observability/trace-store.js";
|
|
19
|
+
import { runTraceInspect } from "./trace-inspect.js";
|
|
18
20
|
|
|
19
21
|
const HELP = `Usage:
|
|
20
22
|
clio-coder trace runs [--db PATH] [--limit N] [--json]
|
|
23
|
+
clio-coder trace inspect --json a fixed bounded window with no request text
|
|
21
24
|
clio-coder trace phases <runId> [--db PATH]
|
|
22
25
|
clio-coder trace tail <runId> [--follow] [--db PATH]
|
|
23
26
|
clio-coder trace procs <runId> [--db PATH]
|
|
@@ -32,6 +35,9 @@ CLIO_CODER_TRACE_RETENTION_DAYS or CLIO_CODER_TRACE_MAX_BYTES to change the auto
|
|
|
32
35
|
policy; prune flags override those values for one command.
|
|
33
36
|
`;
|
|
34
37
|
|
|
38
|
+
/** Rows `trace runs` shows when the operator names no limit. */
|
|
39
|
+
const DEFAULT_TRACE_LIMIT = 50;
|
|
40
|
+
|
|
35
41
|
interface ParsedTraceArgs {
|
|
36
42
|
positional: string[];
|
|
37
43
|
db: string;
|
|
@@ -50,7 +56,7 @@ function parseTraceArgs(args: string[]): ParsedTraceArgs {
|
|
|
50
56
|
let db = traceDatabasePath(clioStatePath());
|
|
51
57
|
let dbExplicit = false;
|
|
52
58
|
let follow = false;
|
|
53
|
-
let limit =
|
|
59
|
+
let limit = DEFAULT_TRACE_LIMIT;
|
|
54
60
|
let port = 0;
|
|
55
61
|
let json = false;
|
|
56
62
|
let maxAgeDays: number | undefined;
|
|
@@ -91,7 +97,7 @@ function parseTraceArgs(args: string[]): ParsedTraceArgs {
|
|
|
91
97
|
}
|
|
92
98
|
|
|
93
99
|
/** Every subcommand `trace` answers to. Anything else is a usage error. */
|
|
94
|
-
const TRACE_COMMANDS = new Set(["runs", "phases", "tail", "procs", "prune", "sql", "ui"]);
|
|
100
|
+
const TRACE_COMMANDS = new Set(["runs", "inspect", "phases", "tail", "procs", "prune", "sql", "ui"]);
|
|
95
101
|
|
|
96
102
|
/** The subcommands whose first positional is a run id. */
|
|
97
103
|
const TRACE_COMMANDS_NEEDING_RUN_ID = new Set(["phases", "tail", "procs"]);
|
|
@@ -144,9 +150,33 @@ export async function runTraceCommand(args: string[]): Promise<number> {
|
|
|
144
150
|
process.stderr.write("trace sql requires a SELECT query\n");
|
|
145
151
|
return 2;
|
|
146
152
|
}
|
|
153
|
+
if (command === "sql") {
|
|
154
|
+
try {
|
|
155
|
+
assertTraceSelectOnly(sqlQuery);
|
|
156
|
+
} catch (error) {
|
|
157
|
+
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
|
|
158
|
+
return 2;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
147
161
|
|
|
148
162
|
if (command === "ui") return runTraceUi(parsed.db, parsed.port);
|
|
149
163
|
|
|
164
|
+
// `inspect` answers ahead of the no-database courtesy below, because its
|
|
165
|
+
// answer to a state tree nothing has written to is a JSON snapshot saying
|
|
166
|
+
// the trace database is unavailable, not a sentence on stdout.
|
|
167
|
+
if (command === "inspect") {
|
|
168
|
+
return runTraceInspect(
|
|
169
|
+
parsed.positional.length === 1 &&
|
|
170
|
+
parsed.json &&
|
|
171
|
+
!parsed.dbExplicit &&
|
|
172
|
+
!parsed.follow &&
|
|
173
|
+
parsed.limit === DEFAULT_TRACE_LIMIT &&
|
|
174
|
+
parsed.port === 0 &&
|
|
175
|
+
parsed.maxAgeDays === undefined &&
|
|
176
|
+
parsed.maxBytes === undefined,
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
|
|
150
180
|
// A database that was never written is the empty state, not a failure. Handing
|
|
151
181
|
// the absent path to node:sqlite produced "unable to open database file",
|
|
152
182
|
// which named neither the file nor a next step, and loading the module leaked
|
|
@@ -357,6 +387,38 @@ function missingDatabase(parsed: ParsedTraceArgs): number {
|
|
|
357
387
|
);
|
|
358
388
|
return 1;
|
|
359
389
|
}
|
|
390
|
+
if (parsed.json && parsed.positional[0] === "runs") {
|
|
391
|
+
process.stdout.write("[]\n");
|
|
392
|
+
return 0;
|
|
393
|
+
}
|
|
394
|
+
if (parsed.json && parsed.positional[0] === "prune") {
|
|
395
|
+
let policy: ReturnType<typeof resolveTraceRetentionPolicy>;
|
|
396
|
+
try {
|
|
397
|
+
policy = resolveTraceRetentionPolicy({
|
|
398
|
+
...(parsed.maxAgeDays === undefined ? {} : { maxAgeDays: parsed.maxAgeDays }),
|
|
399
|
+
...(parsed.maxBytes === undefined ? {} : { maxBytes: parsed.maxBytes }),
|
|
400
|
+
});
|
|
401
|
+
} catch (error) {
|
|
402
|
+
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
|
|
403
|
+
return 1;
|
|
404
|
+
}
|
|
405
|
+
process.stdout.write(
|
|
406
|
+
`${JSON.stringify(
|
|
407
|
+
{
|
|
408
|
+
available: false,
|
|
409
|
+
policy,
|
|
410
|
+
runsRemoved: 0,
|
|
411
|
+
rowsRemoved: 0,
|
|
412
|
+
bytesRemoved: 0,
|
|
413
|
+
vacuumed: false,
|
|
414
|
+
protectedRuns: 0,
|
|
415
|
+
},
|
|
416
|
+
null,
|
|
417
|
+
2,
|
|
418
|
+
)}\n`,
|
|
419
|
+
);
|
|
420
|
+
return 0;
|
|
421
|
+
}
|
|
360
422
|
process.stdout.write(
|
|
361
423
|
`no trace database yet at ${parsed.db}. rows are recorded when a dispatch executes or an interactive turn runs; run \`clio-coder run "<task>"\` or start a session to create one.\n`,
|
|
362
424
|
);
|
package/src/cli/uninstall.ts
CHANGED
|
@@ -90,7 +90,7 @@ export interface ProjectContextInventory {
|
|
|
90
90
|
* rather than one per session. Directories whose `.clio-coder/` is already gone are
|
|
91
91
|
* dropped, because an inventory of nothing to do is noise.
|
|
92
92
|
*/
|
|
93
|
-
|
|
93
|
+
function projectContextInventory(stateDir: string): ProjectContextInventory {
|
|
94
94
|
const root = join(stateDir, "sessions");
|
|
95
95
|
let hashes: string[];
|
|
96
96
|
try {
|
|
@@ -298,7 +298,7 @@ function readNpmPrefix(): string | null {
|
|
|
298
298
|
* that cannot be resolved is dangling, which is still something the operator
|
|
299
299
|
* will hit and still not this installation.
|
|
300
300
|
*/
|
|
301
|
-
|
|
301
|
+
function otherClioOnPath(pathClio: string | null, localLink: string): string | null {
|
|
302
302
|
if (pathClio === null) return null;
|
|
303
303
|
if (pathClio === localLink) return null;
|
|
304
304
|
const resolve = (path: string): string | null => {
|
package/src/cli/upgrade.ts
CHANGED
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
-
import { loadDomains } from "../core/domain-loader.js";
|
|
3
2
|
import { initializeClioHome } from "../core/init.js";
|
|
4
3
|
import { clioStateDir } from "../core/xdg.js";
|
|
5
|
-
import { ConfigDomainModule } from "../domains/config/index.js";
|
|
6
|
-
import type { LifecycleContract } from "../domains/lifecycle/contract.js";
|
|
7
|
-
import { LifecycleDomainModule } from "../domains/lifecycle/index.js";
|
|
8
4
|
import { detectInstallMethod } from "../domains/lifecycle/install-method.js";
|
|
9
|
-
import { listMigrations } from "../domains/lifecycle/migrations/index.js";
|
|
5
|
+
import { listMigrations, runPending } from "../domains/lifecycle/migrations/index.js";
|
|
10
6
|
import { readStateInfo } from "../domains/lifecycle/state.js";
|
|
11
7
|
import { getVersionInfo } from "../domains/lifecycle/version.js";
|
|
12
8
|
import { printError, printHeader, printOk } from "./shared.js";
|
|
@@ -229,36 +225,35 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
|
|
|
229
225
|
if (opts.skipMigrations) {
|
|
230
226
|
process.stdout.write("[upgrade] skipping migrations (--skip-migrations)\n");
|
|
231
227
|
} else {
|
|
232
|
-
|
|
228
|
+
// Migrations run on the state tree directly rather than through the
|
|
229
|
+
// lifecycle domain. Loading that domain pulls in `config`, whose start
|
|
230
|
+
// runs the strict settings reader, and a settings-repairing migration is
|
|
231
|
+
// precisely the one that cannot get past it: `clio-coder upgrade` on a
|
|
232
|
+
// home whose settings.yaml names a retired key failed the domain load and
|
|
233
|
+
// never reached the migration that removes the key. A runner that needs
|
|
234
|
+
// valid config in order to repair invalid config can never run. The
|
|
235
|
+
// domain's `runMigrations` is a passthrough to this same function, so
|
|
236
|
+
// nothing is lost by calling it where the circularity does not exist.
|
|
237
|
+
let result: Awaited<ReturnType<typeof runPending>>;
|
|
233
238
|
try {
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
}
|
|
253
|
-
appliedIds = [...result.applied];
|
|
254
|
-
appliedCount = appliedIds.length;
|
|
255
|
-
if (appliedCount === 0) {
|
|
256
|
-
process.stdout.write("[upgrade] no pending migrations\n");
|
|
257
|
-
} else {
|
|
258
|
-
for (const id of appliedIds) process.stdout.write(`[upgrade] applied migration ${id}\n`);
|
|
259
|
-
}
|
|
260
|
-
} finally {
|
|
261
|
-
await loaded.stop();
|
|
239
|
+
result = await runPending(stateDir);
|
|
240
|
+
} catch (err) {
|
|
241
|
+
// A migration reports why it could not run, but on its own that reads
|
|
242
|
+
// as the whole upgrade being impossible. It is not: the rest of the
|
|
243
|
+
// upgrade is independent of it, and naming the flag that runs the rest
|
|
244
|
+
// is the difference between a stuck operator and a moved one.
|
|
245
|
+
printError(
|
|
246
|
+
`migration failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
247
|
+
"the rest of the upgrade does not depend on it; run `clio-coder upgrade --skip-migrations` to continue, then fix the cause and re-run `clio-coder upgrade`.",
|
|
248
|
+
);
|
|
249
|
+
return 1;
|
|
250
|
+
}
|
|
251
|
+
appliedIds = [...result.applied];
|
|
252
|
+
appliedCount = appliedIds.length;
|
|
253
|
+
if (appliedCount === 0) {
|
|
254
|
+
process.stdout.write("[upgrade] no pending migrations\n");
|
|
255
|
+
} else {
|
|
256
|
+
for (const id of appliedIds) process.stdout.write(`[upgrade] applied migration ${id}\n`);
|
|
262
257
|
}
|
|
263
258
|
}
|
|
264
259
|
|
package/src/cli/usage.ts
CHANGED
|
@@ -788,7 +788,7 @@ function indent(text: string): string {
|
|
|
788
788
|
.join("\n");
|
|
789
789
|
}
|
|
790
790
|
|
|
791
|
-
|
|
791
|
+
function inWindow(iso: string, start: number, end: number): boolean {
|
|
792
792
|
const value = Date.parse(iso);
|
|
793
793
|
return Number.isFinite(value) && value >= start && value <= end + USAGE_WINDOW_FUTURE_SKEW_MS;
|
|
794
794
|
}
|
|
@@ -968,7 +968,7 @@ function bashCommandFromToolCallPayload(payload: unknown): string | null {
|
|
|
968
968
|
* assignments dropped, verb plus subcommand kept, flags kept with values
|
|
969
969
|
* stripped, remaining arguments dropped.
|
|
970
970
|
*/
|
|
971
|
-
|
|
971
|
+
function bashShape(command: string): string {
|
|
972
972
|
const firstLine = command.split("\n").find((line) => {
|
|
973
973
|
const trimmed = line.trim();
|
|
974
974
|
return trimmed.length > 0 && !trimmed.startsWith("#");
|
|
@@ -39,7 +39,7 @@ function describeLiveTarget(live: LiveModelInventory): string {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
/** The refusal `configure` prints for a model the live target does not advertise. */
|
|
42
|
-
|
|
42
|
+
function formatUnadvertisedModelReason(modelId: string, live: LiveModelInventory): string {
|
|
43
43
|
const resident = live.resident.length > 0 ? live.resident.join(", ") : "none";
|
|
44
44
|
return (
|
|
45
45
|
`${describeLiveTarget(live)} does not advertise model '${modelId}'. ` +
|