@iowarp/clio-coder 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/README.md +116 -16
- package/dist/{acp-G5WJBNCT.js → acp-ZILU3AUO.js} +14 -14
- package/dist/{agents-FMV2Q5G4.js → agents-HYWGBGQR.js} +40 -29
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-3IDSJEIK.js → auth-N3QT7CBO.js} +21 -19
- package/dist/{builtins-XCZWXSC7.js → builtins-UJLMOVOV.js} +6 -6
- package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
- package/dist/{chunk-3BT2XMV4.js → chunk-2NM363SV.js} +50 -57
- package/dist/{chunk-J4W7KFM7.js → chunk-2VG7KLYV.js} +24 -279
- package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
- package/dist/{chunk-K5C3NCBD.js → chunk-3I5NY75V.js} +5 -5
- package/dist/{chunk-VAZSBTKF.js → chunk-3QSOM6PA.js} +2 -2
- package/dist/{chunk-TZ3SGWZZ.js → chunk-5QIAJV2D.js} +2 -2
- package/dist/{chunk-OQBA45DZ.js → chunk-5YHDIDBP.js} +2 -2
- package/dist/{chunk-NHLBIGRH.js → chunk-6CCS4G3W.js} +40 -17
- package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
- package/dist/{chunk-LDQ2ZF2M.js → chunk-6FN3E6KX.js} +5 -5
- package/dist/{chunk-X3YGUTOB.js → chunk-6HMJX2VU.js} +59 -59
- package/dist/{chunk-VEO4AP2K.js → chunk-6I5ILFOF.js} +3 -2
- package/dist/{chunk-B7OBL7PK.js → chunk-6NJQITNH.js} +18 -11
- package/dist/{chunk-IQ7KR472.js → chunk-6VC4OV3Z.js} +6 -3
- package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
- package/dist/{chunk-AB44T6BB.js → chunk-74YWRRU5.js} +8 -7
- package/dist/{chunk-SJ5ZKQ4S.js → chunk-7EPLI7VL.js} +2 -2
- package/dist/{chunk-HWHKMHUA.js → chunk-7OBGU7UB.js} +3 -3
- package/dist/{chunk-2OQE55CK.js → chunk-7PWAODYW.js} +2 -2
- package/dist/{chunk-IBEBSCYA.js → chunk-7RY5VZPH.js} +42 -33
- package/dist/{chunk-LQ3DZAMX.js → chunk-ABLSQ6JX.js} +2 -2
- package/dist/{chunk-QLFS5GO2.js → chunk-AFKWHWXF.js} +12 -22
- package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
- package/dist/{chunk-O6TL7WWY.js → chunk-AKB4GYDL.js} +4 -4
- package/dist/chunk-AP73CFDC.js +308 -0
- package/dist/{chunk-JDG2WCRO.js → chunk-BBTJOK6Y.js} +5 -5
- package/dist/{chunk-SP2RXXYO.js → chunk-BDPT6GTK.js} +10 -10
- package/dist/{chunk-NQQH3YT7.js → chunk-BJGUKIG4.js} +3 -3
- package/dist/{chunk-O4XIVISU.js → chunk-BTGG6BG2.js} +79 -38
- package/dist/chunk-BTK3SSSK.js +67 -0
- package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
- package/dist/chunk-BWW4HLO4.js +301 -0
- package/dist/{chunk-I5VEOC6I.js → chunk-C537JADH.js} +10 -10
- package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
- package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
- package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
- package/dist/chunk-D7E7WCDF.js +27 -0
- package/dist/{chunk-WZR7K7ZX.js → chunk-E67WX76H.js} +6 -6
- package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
- package/dist/chunk-EIMVLWB3.js +1842 -0
- package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
- package/dist/{chunk-MLKNTWH2.js → chunk-FYUN5KZ3.js} +21 -21
- package/dist/{chunk-YJX4SHTD.js → chunk-GIZNH63R.js} +1 -1
- package/dist/{chunk-X75E3D2N.js → chunk-GPPB3JBE.js} +18 -16
- package/dist/{chunk-GR5G2PVF.js → chunk-GVQJ5CCZ.js} +15 -10
- package/dist/chunk-HJWWJ6IL.js +184 -0
- package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
- package/dist/{chunk-VYMXRQI6.js → chunk-HUAS7ITX.js} +89 -93
- package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
- package/dist/{chunk-DYJP44XW.js → chunk-IG7BCQBA.js} +1 -1
- package/dist/{chunk-32KWKNSF.js → chunk-IXJT6DCX.js} +3 -3
- package/dist/{chunk-C2LTL2W6.js → chunk-J4HBWF6Y.js} +360 -172
- package/dist/chunk-J5LZHVIT.js +284 -0
- package/dist/{chunk-QLL7ILRG.js → chunk-JA5QWE4Z.js} +510 -202
- package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
- package/dist/{chunk-36EJLSQQ.js → chunk-JZWT5J3Y.js} +4 -4
- package/dist/{chunk-HZHHCK24.js → chunk-K6BF4U2H.js} +476 -322
- package/dist/{chunk-Z2RR6MAK.js → chunk-MA3H6DM5.js} +6 -6
- package/dist/{chunk-CODPRO7Q.js → chunk-MOPSG2X7.js} +6 -6
- package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
- package/dist/{chunk-YDFRH54B.js → chunk-N5UK64DP.js} +4 -4
- package/dist/chunk-NDDGJUXD.js +81 -0
- package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
- package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
- package/dist/{chunk-W5VSYASO.js → chunk-OJTRZGR3.js} +46 -87
- package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
- package/dist/{chunk-3URVFKWK.js → chunk-PJJ6MY27.js} +5 -5
- package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
- package/dist/{chunk-GKF55TAZ.js → chunk-PVAMAVBB.js} +3 -2
- package/dist/{chunk-6DB53AJS.js → chunk-QKIFBZKT.js} +7 -7
- package/dist/{chunk-HJJTYUHX.js → chunk-QMXC4JB7.js} +20 -20
- package/dist/chunk-QTFGO774.js +644 -0
- package/dist/{chunk-CY6FY24N.js → chunk-R23Z6K6I.js} +2 -2
- package/dist/{chunk-ULC6OTWO.js → chunk-R32CLGZ6.js} +13 -13
- package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
- package/dist/{chunk-F4CKPOEQ.js → chunk-SCYB3HA4.js} +72 -26
- package/dist/{chunk-LY4S7GJC.js → chunk-SINK3QR6.js} +18 -16
- package/dist/{chunk-U77AMWDL.js → chunk-TD3PGPQA.js} +43 -22
- package/dist/{chunk-QBJA7R7N.js → chunk-THYWACCR.js} +2 -2
- package/dist/{chunk-QREDIESB.js → chunk-TVH4ONAM.js} +14 -8
- package/dist/chunk-U2WB7TZS.js +271 -0
- package/dist/{chunk-KFZI4NIL.js → chunk-UAPGZHYC.js} +145 -31
- package/dist/{chunk-DQITNCXG.js → chunk-UEDMSP56.js} +29 -14
- package/dist/{chunk-3XML7CDN.js → chunk-UXN6JT4W.js} +2 -2
- package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
- package/dist/{chunk-BPKCPIL7.js → chunk-VEGN6WIQ.js} +2 -2
- package/dist/chunk-VKFQTNDV.js +66 -0
- package/dist/{chunk-7MCTRUCE.js → chunk-VKRH2TCS.js} +2 -2
- package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
- package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
- package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
- package/dist/{chunk-SUCTJL45.js → chunk-WR6U3OVP.js} +3 -3
- package/dist/{chunk-BUMFYQFY.js → chunk-XKA2ICR3.js} +124 -113
- package/dist/{chunk-UXMFQ54G.js → chunk-Y45G3AXC.js} +39 -39
- package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
- package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
- package/dist/{chunk-V5DHCITQ.js → chunk-ZAZB4JMW.js} +23 -12
- package/dist/{chunk-Z4TXYIEG.js → chunk-ZJLUDYFY.js} +9 -9
- package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
- package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
- package/dist/cli/index.js +36 -36
- package/dist/{clio-2JXHBBY5.js → clio-IT3G3VQH.js} +12 -13
- package/dist/{code-nav-3YYRMYNF.js → code-nav-RK6S7F6E.js} +5 -5
- package/dist/codewiki/build-worker.js +1 -1
- package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
- package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
- package/dist/{config-QZPCMYSO.js → config-3QZRWZJF.js} +53 -49
- package/dist/{configure-TEGEBYCA.js → configure-FL7Y3KJF.js} +25 -22
- package/dist/{context-E6H5RNMC.js → context-5HE7ODYK.js} +47 -43
- package/dist/{context-AV7OEZ4D.js → context-KYQFRVDC.js} +11 -11
- package/dist/{context-GSXUE4CT.js → context-XNHL75JV.js} +32 -19
- package/dist/{context-clear-SHIBYK6T.js → context-clear-N545L53A.js} +47 -43
- package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-QHKXSV2F.js} +10 -9
- package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-RGIE5PCT.js} +56 -47
- package/dist/{docs-23KQS3XK.js → docs-5NAF6AU7.js} +5 -11
- package/dist/doctor-ZGPEGHIP.js +772 -0
- package/dist/{eval-TFBYQH4H.js → eval-GXLL44RD.js} +63 -45
- package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-HBWSWQOK.js} +7 -8
- package/dist/{evidence-ERGESKGN.js → evidence-HWLBRH3Q.js} +44 -40
- package/dist/{evolve-VDXTSYCJ.js → evolve-FTZBMNVW.js} +43 -39
- package/dist/{extensions-7BGBHN57.js → extensions-VHRBEID7.js} +4 -4
- package/dist/{fleet-2RRVDF2V.js → fleet-CKZHJWZJ.js} +86 -73
- package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EXDXBMV6.js} +10 -9
- package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-OTHB6KRL.js} +5 -5
- package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-YTEZUCUT.js} +13 -11
- package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-SS6YMDCK.js} +44 -41
- package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-PBY4VYOM.js} +5 -9
- package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-KMEM5L3S.js} +16 -13
- package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-QD5M7E7Q.js} +42 -39
- package/dist/{fleet-view-ZCON35AG.js → fleet-view-WAMJYNDT.js} +44 -52
- package/dist/{init-DN2WWLFE.js → init-5XQRBOFV.js} +63 -58
- package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
- package/dist/{interop-OZBKXAYL.js → interop-34TVO25M.js} +13 -11
- package/dist/{library-YWZG7IMW.js → library-3QY6KF57.js} +17 -14
- package/dist/{memory-I4C4HMLW.js → memory-L4UTIIIW.js} +45 -41
- package/dist/{models-CEYXJBO6.js → models-ZVX3QOWE.js} +39 -31
- package/dist/{monitor-NZ6GCI3P.js → monitor-CEKVSYTS.js} +50 -46
- package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-77BAP6BC.js} +1807 -1039
- package/dist/{panes-KY6W3V2E.js → panes-7STHOAUJ.js} +4 -4
- package/dist/{panes-HMABYVO4.js → panes-SHAUIRXY.js} +10 -8
- package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
- package/dist/{reset-DQ6FGCSH.js → reset-EOLM7GVE.js} +7 -8
- package/dist/{resources-BB3MVJMD.js → resources-74GKTLSF.js} +17 -13
- package/dist/{run-H2GQDUER.js → run-HBAUJNNZ.js} +86 -76
- package/dist/{share-GTJN6A5O.js → share-G3APVLVP.js} +17 -14
- package/dist/{skills-L55TEW6R.js → skills-35HHUKCR.js} +19 -16
- package/dist/{skills-eval-XVXPH2JI.js → skills-eval-QN4HSHDC.js} +55 -57
- package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-J357J34F.js} +15 -12
- package/dist/{slash-commands-ZSGASKJC.js → slash-commands-JZZCQA32.js} +31 -29
- package/dist/{steer-RZGSCY4R.js → steer-XAVHJM22.js} +3 -3
- package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
- package/dist/{targets-NCPZ644J.js → targets-DSM6CY3M.js} +59 -53
- package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-JOPFUVEM.js} +14 -9
- package/dist/{tools-DAF3DI3C.js → tools-MKNWVPBH.js} +10 -8
- package/dist/{trace-FYVW2MQA.js → trace-ECQ7TIYZ.js} +48 -3
- package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
- package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
- package/dist/{upgrade-3XPP6OQL.js → upgrade-H7TOM7YL.js} +35 -62
- package/dist/{usage-3NLHGTU2.js → usage-X52N3IDJ.js} +51 -48
- package/dist/{verifiers-SSQONKRT.js → verifiers-EJTVVSMA.js} +10 -9
- package/dist/{verify-3U6J7FZI.js → verify-YJL6XET2.js} +9 -8
- package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPIFL3LL.js} +1 -2
- package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-4NDZTQ4B.js} +66 -63
- package/dist/{with-panes-MKB46MPQ.js → with-panes-OBOBFIIR.js} +62 -26
- package/dist/worker/entry.js +57 -52
- package/docs/acp.md +1 -1
- package/docs/built-in-agents.md +40 -32
- package/docs/commands-and-modes.md +9 -3
- package/docs/config-knobs-audit.md +3 -0
- package/docs/configuration-and-targets.md +105 -164
- package/docs/environment-variables.md +2 -1
- package/docs/exit-codes-and-output.md +2 -0
- package/docs/fleet-demo-runbook.md +6 -3
- package/docs/fleet-dispatch.md +8 -6
- package/docs/installation-and-lifecycle.md +1 -1
- package/docs/release-cut-checklist.md +164 -177
- package/docs/trace-store.md +15 -10
- package/docs/troubleshooting.md +1 -1
- package/evals/README.md +5 -0
- package/evals/behavioral-corpus-grader.mjs +103 -0
- package/evals/behavioral-machinery-baseline.json +2276 -0
- package/evals/behavioral-machinery-driver.ts +250 -0
- package/evals/behavioral-machinery-support.ts +253 -0
- package/evals/behavioral-machinery.yaml +614 -0
- package/evals/behavioral-model-negative-control.yaml +68 -0
- package/evals/behavioral-model.yaml +216 -0
- package/evals/fixtures/behavioral-facts.txt +3 -0
- package/evals/fixtures/behavioral-main.ts +7 -0
- package/evals/fixtures/decoy/note.txt +2 -0
- package/evals/fixtures/private/credentials.txt +1 -0
- package/evals/tracked-metrics-baseline.yaml +229 -0
- package/evals/tracked-metrics-grader.mjs +129 -0
- package/package.json +5 -15
- package/skills/README.md +6 -6
- package/skills/coding/ast-grep/SKILL.md +8 -2
- package/skills/coding/coding-standards/SKILL.md +8 -2
- package/skills/coding/prototype/SKILL.md +8 -2
- package/skills/coding/tdd/SKILL.md +8 -2
- package/skills/context/context-handoff/SKILL.md +12 -3
- package/skills/context/context-handoff/evals.md +3 -3
- package/skills/context/context-prime/SKILL.md +8 -2
- package/skills/context/context-prime/evals.md +2 -2
- package/skills/git/file-ticket/SKILL.md +9 -4
- package/skills/git/file-ticket/evals.md +2 -2
- package/skills/git/fix-issue/SKILL.md +12 -5
- package/skills/git/fix-issue/evals.md +4 -4
- package/skills/git/resolve-merge-conflicts/SKILL.md +8 -2
- package/skills/git/resolve-merge-conflicts/evals.md +2 -2
- package/skills/git/ship/SKILL.md +9 -3
- package/skills/git/ship/evals.md +4 -4
- package/skills/git/worktree-create/SKILL.md +7 -2
- package/skills/git/worktree-create/evals.md +6 -6
- package/skills/git/worktree-merge/SKILL.md +7 -2
- package/skills/git/worktree-merge/evals.md +6 -6
- package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
- package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
- package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
- package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
- package/skills/meta/credentials/SKILL.md +9 -2
- package/skills/meta/find-skills/SKILL.md +8 -2
- package/skills/meta/herdr/SKILL.md +8 -2
- package/skills/meta/skill-craft/SKILL.md +21 -4
- package/skills/planning/architecture/SKILL.md +9 -3
- package/skills/planning/backlog/SKILL.md +8 -2
- package/skills/planning/prd/SKILL.md +8 -2
- package/skills/planning/product-intent/SKILL.md +8 -2
- package/skills/planning/tech-spec/SKILL.md +9 -3
- package/skills/registry.yaml +66 -66
- package/skills/research/arxiv-literature/SKILL.md +8 -2
- package/skills/research/experiment-protocol/SKILL.md +9 -2
- package/skills/research/scientific-debugging/SKILL.md +9 -2
- package/skills/research/scientific-debugging/evals.md +2 -2
- package/skills/research/scientific-modernization/SKILL.md +9 -2
- package/skills/skill-marketplace.json +257 -38
- package/skills/workflow/cut-it/SKILL.md +10 -2
- package/skills/workflow/design-council/SKILL.md +11 -2
- package/skills/workflow/grill-me/SKILL.md +8 -2
- package/skills/workflow/workflow-distiller/SKILL.md +8 -2
- package/src/cli/acp.ts +2 -2
- package/src/cli/auth.ts +2 -2
- package/src/cli/bootstrap-generate.ts +5 -5
- package/src/cli/clio.ts +6 -1
- package/src/cli/config-inspect.ts +3 -3
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure.ts +27 -27
- package/src/cli/default-target.ts +1 -1
- package/src/cli/docs.ts +6 -6
- package/src/cli/doctor-naming.ts +323 -0
- package/src/cli/doctor-panes.ts +46 -14
- package/src/cli/doctor-toolchain.ts +29 -8
- package/src/cli/doctor.ts +15 -1
- package/src/cli/eval-inventory.ts +8 -8
- package/src/cli/evidence-detail.ts +1 -1
- package/src/cli/evidence-inventory.ts +1 -1
- package/src/cli/fleet-decisions.ts +1 -1
- package/src/cli/fleet-inspect.ts +1 -1
- package/src/cli/fleet-preflight.ts +1 -1
- package/src/cli/fleet-verify.ts +1 -1
- package/src/cli/fleet-view.ts +40 -23
- package/src/cli/fleet.ts +8 -5
- package/src/cli/interop-inspect.ts +2 -2
- package/src/cli/models.ts +3 -3
- package/src/cli/modes/print.ts +1 -1
- package/src/cli/reset.ts +1 -1
- package/src/cli/run.ts +11 -15
- package/src/cli/share.ts +1 -1
- package/src/cli/skills-eval.ts +11 -11
- package/src/cli/targets.ts +23 -24
- package/src/cli/trace-inspect.ts +1 -1
- package/src/cli/trace.ts +41 -0
- package/src/cli/uninstall.ts +2 -2
- package/src/cli/upgrade.ts +29 -34
- package/src/cli/usage.ts +2 -2
- package/src/cli/validate-model.ts +1 -1
- package/src/cli/verifiers-inspect.ts +1 -1
- package/src/cli/wiki-generate.ts +5 -5
- package/src/core/bash-exec.ts +1 -1
- package/src/core/boot-trace.ts +3 -3
- package/src/core/bus-trace.ts +2 -2
- package/src/core/compile-cache.ts +1 -1
- package/src/core/config.ts +1062 -886
- package/src/core/defaults.ts +321 -528
- package/src/core/domain-loader.ts +6 -4
- package/src/core/event-bus.ts +1 -1
- package/src/core/file-references.ts +78 -88
- package/src/core/git-commit-attribution.ts +3 -9
- package/src/core/guardrails.ts +24 -4
- package/src/core/naming-compat.ts +45 -0
- package/src/core/naming-events.ts +62 -0
- package/src/core/recent-models.ts +1 -7
- package/src/core/residency-protection.ts +4 -8
- package/src/core/resolve-config-value.ts +1 -1
- package/src/core/response-model-id.ts +0 -14
- package/src/core/session-routing.ts +84 -74
- package/src/core/skill-activation.ts +18 -0
- package/src/core/termination.ts +4 -4
- package/src/core/timers.ts +2 -12
- package/src/domains/agents/catalog.ts +2 -12
- package/src/domains/agents/extension.ts +3 -3
- package/src/domains/agents/registry.ts +7 -7
- package/src/domains/agents/result-contract.ts +1 -1
- package/src/domains/agents/spec.ts +0 -11
- package/src/domains/config/classify.ts +35 -47
- package/src/domains/config/extension.ts +5 -5
- package/src/domains/config/keybindings.ts +48 -47
- package/src/domains/config/watcher.ts +1 -1
- package/src/domains/context/codewiki/indexer.ts +1 -1
- package/src/domains/context/extension.ts +3 -3
- package/src/domains/context/prompt-context.ts +1 -1
- package/src/domains/context/wiki/assemble.ts +2 -2
- package/src/domains/context/working-set/replay/metrics.ts +0 -4
- package/src/domains/context/working-set/replay/report.ts +1 -1
- package/src/domains/context/working-set/replay/synthetic.ts +2 -2
- package/src/domains/dispatch/active-route-planner.ts +2 -2
- package/src/domains/dispatch/agent-candidates.ts +1 -1
- package/src/domains/dispatch/agent-ledger-store.ts +1 -1
- package/src/domains/dispatch/agent-ledger.ts +1 -1
- package/src/domains/dispatch/assignment.ts +5 -5
- package/src/domains/dispatch/capacity-lease.ts +2 -5
- package/src/domains/dispatch/code-step.ts +1 -1
- package/src/domains/dispatch/contract.ts +2 -2
- package/src/domains/dispatch/extension.ts +65 -61
- package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
- package/src/domains/dispatch/fleet-preflight.ts +8 -17
- package/src/domains/dispatch/fleet-run.ts +0 -7
- package/src/domains/dispatch/gate-decisions.ts +25 -14
- package/src/domains/dispatch/joint-route-resolver.ts +1 -1
- package/src/domains/dispatch/path-scope.ts +0 -61
- package/src/domains/dispatch/placement.ts +2 -2
- package/src/domains/dispatch/receipt-findings.ts +1 -1
- package/src/domains/dispatch/receipt-integrity.ts +20 -8
- package/src/domains/dispatch/reservation-store.ts +0 -23
- package/src/domains/dispatch/route-decision.ts +1 -1
- package/src/domains/dispatch/route-history.ts +1 -1
- package/src/domains/dispatch/route-policy.ts +1 -1
- package/src/domains/dispatch/route-readiness.ts +0 -28
- package/src/domains/dispatch/run-event-journal.ts +6 -5
- package/src/domains/dispatch/tool-stats.ts +1 -1
- package/src/domains/dispatch/transport.ts +2 -19
- package/src/domains/dispatch/types.ts +3 -3
- package/src/domains/dispatch/worker-protocol.ts +2 -2
- package/src/domains/eval/artifacts/store.ts +5 -4
- package/src/domains/eval/compare/thresholds.ts +0 -8
- package/src/domains/eval/execution-provenance.ts +1 -1
- package/src/domains/eval/metrics/token-stream.ts +0 -7
- package/src/domains/eval/report.ts +1 -1
- package/src/domains/eval/runner.ts +1 -1
- package/src/domains/eval/runners/clio-run.ts +7 -6
- package/src/domains/eval/runners/external-command.ts +4 -3
- package/src/domains/eval/schema/artifact.ts +1 -1
- package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
- package/src/domains/eval/schema/behavioral.ts +7 -6
- package/src/domains/eval/schema/execution-envelope.ts +4 -2
- package/src/domains/eval/schema/naming.ts +10 -0
- package/src/domains/eval/schema/suite.ts +2 -2
- package/src/domains/eval/schema/validate.ts +9 -5
- package/src/domains/eval/schema/verdict.ts +4 -2
- package/src/domains/eval/store.ts +12 -2
- package/src/domains/eval/suites/run.ts +12 -6
- package/src/domains/eval/types.ts +1 -1
- package/src/domains/eval/workspaces/git.ts +1 -1
- package/src/domains/eval/workspaces/temp-copy.ts +1 -1
- package/src/domains/evidence/build.ts +13 -5
- package/src/domains/interop/consent.ts +7 -7
- package/src/domains/interop/extension.ts +1 -1
- package/src/domains/lifecycle/doctor.ts +27 -21
- package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
- package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
- package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
- package/src/domains/lifecycle/migrations/index.ts +20 -1
- package/src/domains/lifecycle/naming-history.ts +153 -0
- package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
- package/src/domains/lifecycle/naming-resources.ts +261 -0
- package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
- package/src/domains/lifecycle/naming-yazi.ts +81 -0
- package/src/domains/lifecycle/upgrade-notice.ts +1 -1
- package/src/domains/memory/task-memory-handoff.ts +6 -3
- package/src/domains/middleware/index.ts +7 -0
- package/src/domains/middleware/marketplace-offer.ts +339 -0
- package/src/domains/middleware/runtime.ts +2 -2
- package/src/domains/mux/contract.ts +157 -25
- package/src/domains/mux/detect.ts +29 -5
- package/src/domains/mux/dock-controller.ts +365 -0
- package/src/domains/mux/extension.ts +7 -1
- package/src/domains/mux/index.ts +20 -0
- package/src/domains/mux/operations.ts +28 -0
- package/src/domains/mux/protocol.ts +19 -6
- package/src/domains/mux/socket-client.ts +167 -19
- package/src/domains/mux/types.ts +49 -6
- package/src/domains/mux/yazi/event-stream.ts +6 -4
- package/src/domains/mux/yazi/profile.ts +1 -1
- package/src/domains/mux/yazi/session.ts +26 -3
- package/src/domains/observability/extension.ts +1 -1
- package/src/domains/observability/out-of-turn-usage.ts +2 -2
- package/src/domains/observability/projection.ts +1 -1
- package/src/domains/observability/trace-store.ts +22 -12
- package/src/domains/prompts/compiler.ts +2 -2
- package/src/domains/prompts/extension.ts +3 -3
- package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
- package/src/domains/prompts/fragments/operating/skills.md +25 -18
- package/src/domains/providers/extension.ts +5 -5
- package/src/domains/providers/knowledge-base-path.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +14 -2
- package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
- package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +4 -4
- package/src/domains/providers/plugins.ts +1 -1
- package/src/domains/providers/resolver.ts +1 -1
- package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
- package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
- package/src/domains/providers/runtimes/common/probe-helpers.ts +2 -2
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
- package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
- package/src/domains/providers/types/knowledge-base.ts +13 -0
- package/src/domains/providers/types/local-model-quirks.ts +2 -2
- package/src/domains/providers/types/target-descriptor.ts +3 -3
- package/src/domains/resources/extension.ts +1 -1
- package/src/domains/resources/library.ts +6 -6
- package/src/domains/resources/prompts/loader.ts +1 -1
- package/src/domains/resources/skills/content-hash.ts +7 -6
- package/src/domains/resources/skills/evals.ts +1 -1
- package/src/domains/resources/skills/install.ts +36 -12
- package/src/domains/resources/skills/loader.ts +39 -13
- package/src/domains/resources/skills/marketplace.ts +21 -2
- package/src/domains/resources/skills/promotion.ts +214 -0
- package/src/domains/safety/audit.ts +2 -2
- package/src/domains/safety/finish-contract.ts +2 -1
- package/src/domains/safety/run-effects.ts +1 -1
- package/src/domains/scheduling/extension.ts +4 -4
- package/src/domains/session/archive-readers.ts +9 -1
- package/src/domains/session/compaction/branch-summary.ts +4 -0
- package/src/domains/session/compaction/compact.ts +1 -1
- package/src/domains/session/compaction/tokens.ts +4 -0
- package/src/domains/session/context-accounting.ts +1 -1
- package/src/domains/session/decision-board.ts +1 -1
- package/src/domains/session/extension.ts +1 -1
- package/src/domains/session/handoff.ts +2 -2
- package/src/domains/session/prompt-manifest.ts +0 -5
- package/src/domains/session/protected-artifact-journal.ts +12 -6
- package/src/domains/session/retry.ts +1 -1
- package/src/domains/share/archive.ts +85 -36
- package/src/domains/toolchain/install.ts +1 -1
- package/src/engine/acp/adapter.ts +3 -3
- package/src/engine/acp/event-mapper.ts +3 -3
- package/src/engine/acp/server.ts +27 -26
- package/src/engine/acp/tool-mediator.ts +2 -2
- package/src/engine/acp/types.ts +1 -1
- package/src/engine/alcf-oauth.ts +5 -5
- package/src/engine/antigravity/subprocess-runtime.ts +2 -2
- package/src/engine/api-registry.ts +1 -1
- package/src/engine/apis/llamacpp-residency.ts +1 -19
- package/src/engine/apis/lmstudio.ts +1 -6
- package/src/engine/apis/ollama-native.ts +3 -3
- package/src/engine/apis/openai-completions.ts +2 -2
- package/src/engine/apis/residency.ts +3 -9
- package/src/engine/claude/sdk-module.ts +1 -12
- package/src/engine/claude/sdk-runtime.ts +6 -6
- package/src/engine/claude/subprocess-runtime.ts +1 -1
- package/src/engine/claude/tool-safety.ts +4 -4
- package/src/engine/loop-guard.ts +0 -5
- package/src/engine/session.ts +14 -7
- package/src/engine/tui-primitives.ts +1 -1
- package/src/engine/worker-events.ts +6 -6
- package/src/engine/worker-runtime.ts +14 -13
- package/src/entry/orchestrator.ts +107 -88
- package/src/interactive/application-controller.ts +21 -21
- package/src/interactive/bus-notices.ts +2 -2
- package/src/interactive/chat-loop.ts +8 -8
- package/src/interactive/chat-panel.ts +1 -1
- package/src/interactive/clio-editor.ts +105 -1
- package/src/interactive/context-activity.ts +8 -6
- package/src/interactive/context-meter.ts +3 -6
- package/src/interactive/context-overlay.ts +1 -1
- package/src/interactive/cost-overlay.ts +1 -1
- package/src/interactive/council-grid.ts +2 -2
- package/src/interactive/dispatch-board.ts +30 -33
- package/src/interactive/editor-bash.ts +21 -0
- package/src/interactive/editor-steer.ts +9 -4
- package/src/interactive/editor-submit.ts +24 -18
- package/src/interactive/external-editor.ts +1 -1
- package/src/interactive/file-reference-completion.ts +360 -0
- package/src/interactive/footer/dashboard.ts +15 -17
- package/src/interactive/footer/notifications.ts +14 -8
- package/src/interactive/footer/widgets.ts +2 -44
- package/src/interactive/interactive-application.ts +79 -59
- package/src/interactive/interactive-event-projection.ts +1 -1
- package/src/interactive/interactive-input-runtime.ts +2 -2
- package/src/interactive/interactive-presentation.ts +21 -16
- package/src/interactive/interactive-shell.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +63 -17
- package/src/interactive/interactive-subscriptions.ts +1 -1
- package/src/interactive/interactive-tickers.ts +1 -1
- package/src/interactive/keybinding-manager.ts +4 -4
- package/src/interactive/layout.ts +1 -1
- package/src/interactive/memory-overlay.ts +2 -2
- package/src/interactive/modal-marker.ts +2 -21
- package/src/interactive/mutation-preview.ts +1 -1
- package/src/interactive/overlay-frame.ts +4 -12
- package/src/interactive/overlay-general-openers.ts +6 -2
- package/src/interactive/overlay-key-routing.ts +7 -7
- package/src/interactive/overlay-lifecycle.ts +1 -1
- package/src/interactive/overlay-model-selectors.ts +3 -3
- package/src/interactive/overlays/agents.ts +2 -2
- package/src/interactive/overlays/ask-user.ts +25 -11
- package/src/interactive/overlays/context-reset.ts +28 -4
- package/src/interactive/overlays/cwd-fallback.ts +28 -4
- package/src/interactive/overlays/decisions.ts +4 -2
- package/src/interactive/overlays/fleet-run-approval.ts +3 -3
- package/src/interactive/overlays/handoff-review.ts +2 -2
- package/src/interactive/overlays/interop.ts +1 -1
- package/src/interactive/overlays/library-install-confirm.ts +1 -1
- package/src/interactive/overlays/message-picker.ts +1 -1
- package/src/interactive/overlays/model-selector.ts +39 -31
- package/src/interactive/overlays/prompts.ts +10 -4
- package/src/interactive/overlays/session-selector.ts +2 -2
- package/src/interactive/overlays/settings.ts +339 -293
- package/src/interactive/overlays/side-question.ts +2 -2
- package/src/interactive/overlays/skills-hub.ts +8 -8
- package/src/interactive/overlays/tree-selector.ts +2 -2
- package/src/interactive/panes-runtime.ts +36 -10
- package/src/interactive/permission-overlay.ts +2 -2
- package/src/interactive/renderers/retry-status.ts +12 -4
- package/src/interactive/renderers/tool-execution.ts +4 -4
- package/src/interactive/session-transcript.ts +3 -3
- package/src/interactive/slash-autocomplete.ts +454 -165
- package/src/interactive/slash-commands.ts +279 -183
- package/src/interactive/slash-spec.ts +160 -17
- package/src/interactive/status/controller.ts +2 -2
- package/src/interactive/stream-pacing-policy.ts +1 -1
- package/src/interactive/tasks-overlay.ts +20 -13
- package/src/interactive/terminal-lease.ts +6 -7
- package/src/interactive/turn-context.ts +11 -11
- package/src/interactive/turn-persistence.ts +2 -2
- package/src/interactive/turn-prewarm.ts +2 -2
- package/src/interactive/turn-runtime.ts +8 -8
- package/src/interactive/turn-state.ts +1 -1
- package/src/interactive/view/artifacts.ts +12 -9
- package/src/interactive/view/view-overlay.ts +13 -10
- package/src/interactive/watch-pane.ts +38 -10
- package/src/interactive/welcome-dashboard.ts +15 -15
- package/src/interactive/worker-progress.ts +4 -4
- package/src/interactive/worker-receipts.ts +1 -1
- package/src/interactive/worker-stream.ts +1 -4
- package/src/interactive/yazi-bridge.ts +12 -5
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/builtin-tool-catalog.ts +1 -1
- package/src/tools/compete-worktrees.ts +27 -17
- package/src/tools/context/index.ts +15 -1
- package/src/tools/dispatch-admission.ts +4 -2
- package/src/tools/dispatch-arguments.ts +1 -1
- package/src/tools/dispatch-plan.ts +0 -11
- package/src/tools/dispatch-run-events.ts +12 -10
- package/src/tools/dispatch-runner.ts +11 -6
- package/src/tools/dispatch.ts +1 -1
- package/src/tools/find.ts +1 -6
- package/src/tools/monitor.ts +4 -4
- package/src/tools/observers.ts +0 -33
- package/src/tools/task-worktree.ts +28 -7
- package/src/tools/verify/authoring.ts +3 -6
- package/src/tools/verify/frontend.ts +1 -1
- package/src/tools/web-fetch.ts +1 -1
- package/src/worker/entry.ts +4 -3
- package/src/worker/protocol.ts +16 -14
- package/src/worker/spec-contract.ts +2 -2
- package/src/worker/stdin-demux.ts +2 -2
- package/dist/chunk-GXNLGKAB.js +0 -571
- package/dist/chunk-VFA6GDY5.js +0 -1625
- package/dist/doctor-QOA5FNY5.js +0 -313
- package/src/engine/apis/degraded-inference.ts +0 -95
- /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
- /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
package/src/cli/run.ts
CHANGED
|
@@ -148,7 +148,7 @@ async function assemblePrompt(parsed: RunCliArgs): Promise<{
|
|
|
148
148
|
* path, not a skill package, or validation failure such as a missing
|
|
149
149
|
* description). Exported for contracts tests.
|
|
150
150
|
*/
|
|
151
|
-
|
|
151
|
+
function explicitSkillPathErrors(skillPaths: ReadonlyArray<string>): string[] {
|
|
152
152
|
const errors: string[] = [];
|
|
153
153
|
for (const skillPath of skillPaths) {
|
|
154
154
|
const list = loadSkills({ disableDiscovery: true, explicitSkillPaths: [skillPath] });
|
|
@@ -187,7 +187,7 @@ export function explicitSkillPathErrors(skillPaths: ReadonlyArray<string>): stri
|
|
|
187
187
|
* closure sits on. Boundaries rule6 in `tests/boundaries/check-boundaries.ts`
|
|
188
188
|
* holds both halves of that.
|
|
189
189
|
*/
|
|
190
|
-
|
|
190
|
+
async function unknownSlashCommandRefusal(task: string): Promise<string | null> {
|
|
191
191
|
if (!task.trim().startsWith("/")) return null;
|
|
192
192
|
const { parseSlashCommand } = await import("../interactive/slash-commands.js");
|
|
193
193
|
const command = parseSlashCommand(task);
|
|
@@ -376,9 +376,9 @@ async function runDispatch(
|
|
|
376
376
|
// does. The journal never reads settings.yaml itself: it sits on the
|
|
377
377
|
// dispatch event path, where a settings read would be both a cost and a
|
|
378
378
|
// throw site.
|
|
379
|
-
configureRunEventJournal(baseSettings.
|
|
380
|
-
effectiveSettings =
|
|
381
|
-
|
|
379
|
+
configureRunEventJournal(baseSettings.fleet.history.journal);
|
|
380
|
+
effectiveSettings = structuredClone(baseSettings);
|
|
381
|
+
if (parsed.autonomy !== undefined) effectiveSettings.safety.autonomy = parsed.autonomy;
|
|
382
382
|
const dispatch = loaded.getContract<DispatchContract>("dispatch");
|
|
383
383
|
if (!dispatch) {
|
|
384
384
|
process.stderr.write("dispatch domain unavailable\n");
|
|
@@ -394,19 +394,15 @@ async function runDispatch(
|
|
|
394
394
|
return 1;
|
|
395
395
|
}
|
|
396
396
|
const settings = effectiveSettings;
|
|
397
|
-
const profileTargetId = parsed.agentProfile ? settings.
|
|
397
|
+
const profileTargetId = parsed.agentProfile ? settings.fleet?.profiles?.[parsed.agentProfile]?.target : undefined;
|
|
398
398
|
const runtimeByTarget = new Map(settings.targets.map((target) => [target.id, target.runtime] as const));
|
|
399
399
|
const runtimeTargetId = parsed.agentRuntime
|
|
400
|
-
? [settings.
|
|
400
|
+
? [settings.fleet?.default, ...Object.values(settings.fleet?.profiles ?? {})].find(
|
|
401
401
|
(profile) => profile?.target && runtimeByTarget.get(profile.target) === parsed.agentRuntime,
|
|
402
402
|
)?.target
|
|
403
403
|
: undefined;
|
|
404
404
|
const targetId =
|
|
405
|
-
parsed.target ??
|
|
406
|
-
profileTargetId ??
|
|
407
|
-
runtimeTargetId ??
|
|
408
|
-
settings.workers?.default?.target ??
|
|
409
|
-
settings.orchestrator?.target;
|
|
405
|
+
parsed.target ?? profileTargetId ?? runtimeTargetId ?? settings.fleet?.default?.target ?? settings.chat?.target;
|
|
410
406
|
const target = targetId ? providers.getTarget(targetId) : null;
|
|
411
407
|
const runtime = target ? providers.getRuntime(target.runtime) : null;
|
|
412
408
|
if (!target || !runtime) {
|
|
@@ -441,7 +437,7 @@ async function runDispatch(
|
|
|
441
437
|
if (skillPaths.length > 0) dispatchReq.skillPaths = skillPaths;
|
|
442
438
|
try {
|
|
443
439
|
const settings = effectiveSettings;
|
|
444
|
-
if (settings.
|
|
440
|
+
if (settings.integrations.projectResources?.trustProjectImports) {
|
|
445
441
|
dispatchReq.trustProjectCompatRoots = true;
|
|
446
442
|
}
|
|
447
443
|
} catch {
|
|
@@ -451,8 +447,8 @@ async function runDispatch(
|
|
|
451
447
|
let memorySection = "";
|
|
452
448
|
try {
|
|
453
449
|
const records = loadMemoryRecordsSync(clioDataDir());
|
|
454
|
-
const boundProfileName = parsed.agentProfile ?? effectiveSettings.
|
|
455
|
-
const boundProfile = boundProfileName ? effectiveSettings.
|
|
450
|
+
const boundProfileName = parsed.agentProfile ?? effectiveSettings.fleet.agentProfiles[parsed.agentId];
|
|
451
|
+
const boundProfile = boundProfileName ? effectiveSettings.fleet.profiles[boundProfileName] : undefined;
|
|
456
452
|
const configuredRuntime = (targetId: string | null | undefined): string | undefined =>
|
|
457
453
|
effectiveSettings.targets.find((target) => target.id === targetId)?.runtime;
|
|
458
454
|
const profileRuntimeId = configuredRuntime(boundProfile?.target);
|
package/src/cli/share.ts
CHANGED
|
@@ -233,7 +233,7 @@ export function runShareCommand(argv: ReadonlyArray<string>): number {
|
|
|
233
233
|
const archive = plan.archive;
|
|
234
234
|
if (archive) {
|
|
235
235
|
process.stdout.write(
|
|
236
|
-
`archive: ${archive.manifest.format} clio=${archive.manifest.
|
|
236
|
+
`archive: ${archive.manifest.format} clio-coder=${archive.manifest.clioCoderVersion} files=${archive.files.length} created=${archive.manifest.createdAt}\n`,
|
|
237
237
|
);
|
|
238
238
|
}
|
|
239
239
|
}
|
package/src/cli/skills-eval.ts
CHANGED
|
@@ -311,7 +311,7 @@ type EvalArm = "baseline" | "treatment" | "judge";
|
|
|
311
311
|
*
|
|
312
312
|
* @internal Exported for contract tests.
|
|
313
313
|
*/
|
|
314
|
-
|
|
314
|
+
function armRunArgs(
|
|
315
315
|
arm: EvalArm,
|
|
316
316
|
prompt: string,
|
|
317
317
|
options: { target?: string | undefined; skillBaseDir?: string | undefined } = {},
|
|
@@ -335,7 +335,7 @@ export function armRunArgs(
|
|
|
335
335
|
*
|
|
336
336
|
* @internal Exported for contract tests.
|
|
337
337
|
*/
|
|
338
|
-
|
|
338
|
+
function permissionWallReason(arm: EvalArm, run: CapturedRun): string | null {
|
|
339
339
|
const haystack = `${run.transcript}\n${run.finalText}`;
|
|
340
340
|
let blocked = 0;
|
|
341
341
|
let at = haystack.indexOf(HEADLESS_PERMISSION_DENIED_MARKER);
|
|
@@ -360,7 +360,7 @@ function unmeasuredBullets(scenario: SkillEvalScenario, reason: string): ScoredB
|
|
|
360
360
|
*
|
|
361
361
|
* @internal Exported for contract tests.
|
|
362
362
|
*/
|
|
363
|
-
|
|
363
|
+
function evalChildEnv(allowNetwork: boolean, env: NodeJS.ProcessEnv = process.env): NodeJS.ProcessEnv {
|
|
364
364
|
const childEnv: NodeJS.ProcessEnv = { ...env };
|
|
365
365
|
if (allowNetwork) Reflect.deleteProperty(childEnv, NO_NETWORK_TOOLS_ENV);
|
|
366
366
|
else childEnv[NO_NETWORK_TOOLS_ENV] = "1";
|
|
@@ -378,7 +378,7 @@ export function evalChildEnv(allowNetwork: boolean, env: NodeJS.ProcessEnv = pro
|
|
|
378
378
|
* the catalog answers only for a name no root installed, which is the skill
|
|
379
379
|
* author's case in this repository.
|
|
380
380
|
*/
|
|
381
|
-
|
|
381
|
+
function resolveSkillBaseDir(
|
|
382
382
|
nameOrPath: string,
|
|
383
383
|
cwd: string,
|
|
384
384
|
): { baseDir: string | null; origin?: string; error?: string } {
|
|
@@ -442,7 +442,7 @@ async function runScenario(
|
|
|
442
442
|
// Published per-scenario figure: monotonic so a clock correction during a
|
|
443
443
|
// long sweep cannot land in one row's wall time.
|
|
444
444
|
const scenarioStart = performance.now();
|
|
445
|
-
const workspace = await mkdtemp(join(tmpdir(), "clio-skill-eval-seed-"));
|
|
445
|
+
const workspace = await mkdtemp(join(tmpdir(), "clio-coder-skill-eval-seed-"));
|
|
446
446
|
let runWorkspaces: MaterializedSkillEvalWorkspaces | null = null;
|
|
447
447
|
try {
|
|
448
448
|
if (workspaceOverride !== null) await copyWorkspace(workspaceOverride, workspace);
|
|
@@ -570,7 +570,7 @@ export interface MaterializedSkillEvalWorkspaces {
|
|
|
570
570
|
* cooperative model, not as an isolation guarantee.
|
|
571
571
|
*/
|
|
572
572
|
async function armWorkspace(created: string[]): Promise<string> {
|
|
573
|
-
const root = await mkdtemp(join(tmpdir(), "clio-skill-eval-"));
|
|
573
|
+
const root = await mkdtemp(join(tmpdir(), "clio-coder-skill-eval-"));
|
|
574
574
|
created.push(root);
|
|
575
575
|
const workspace = join(root, "workspace");
|
|
576
576
|
await mkdir(workspace, { recursive: true });
|
|
@@ -578,7 +578,7 @@ async function armWorkspace(created: string[]): Promise<string> {
|
|
|
578
578
|
}
|
|
579
579
|
|
|
580
580
|
/** @internal Exported for contract tests. */
|
|
581
|
-
|
|
581
|
+
async function materializeSkillEvalWorkspaces(seedWorkspace: string): Promise<MaterializedSkillEvalWorkspaces> {
|
|
582
582
|
const created: string[] = [];
|
|
583
583
|
try {
|
|
584
584
|
const baseline = await armWorkspace(created);
|
|
@@ -814,7 +814,7 @@ function loadsSkillBody(tool: string, args: unknown): boolean {
|
|
|
814
814
|
}
|
|
815
815
|
|
|
816
816
|
/** @internal Exported for contract tests. */
|
|
817
|
-
|
|
817
|
+
function parseRunStdout(stdout: string): { sessionId: string | null; transcript: string; finalText: string } {
|
|
818
818
|
let sessionId: string | null = null;
|
|
819
819
|
const lines: string[] = [];
|
|
820
820
|
let finalText = "";
|
|
@@ -938,7 +938,7 @@ function judgeVerdictAbsenceReason(judge: CapturedRun): string {
|
|
|
938
938
|
}
|
|
939
939
|
|
|
940
940
|
/** Exported for contracts tests. */
|
|
941
|
-
|
|
941
|
+
function parseJudgeVerdicts(scenario: SkillEvalScenario, judge: CapturedRun): ScoredBullet[] {
|
|
942
942
|
const parsed = extractBulletsObject(judge.finalText) ?? extractBulletsObject(judge.transcript);
|
|
943
943
|
// No verdict object anywhere in the judge run. The scenario was not scored,
|
|
944
944
|
// which is a fact about the judge, so every bullet stays unmeasured rather
|
|
@@ -982,7 +982,7 @@ export function parseJudgeVerdicts(scenario: SkillEvalScenario, judge: CapturedR
|
|
|
982
982
|
* content, so this walks candidate `{` openers around the first "bullets" key
|
|
983
983
|
* and balance-scans to the matching close brace.
|
|
984
984
|
*/
|
|
985
|
-
|
|
985
|
+
function extractBulletsObject(text: string): Record<string, unknown> | null {
|
|
986
986
|
const stripped = text.replace(/```(?:json)?/g, "");
|
|
987
987
|
const bulletsAt = stripped.indexOf('"bullets"');
|
|
988
988
|
if (bulletsAt < 0) return null;
|
|
@@ -1085,7 +1085,7 @@ function synthesizeArtifact(
|
|
|
1085
1085
|
evalId,
|
|
1086
1086
|
taskFile: evalsPath,
|
|
1087
1087
|
taskFileHash: contentHash,
|
|
1088
|
-
|
|
1088
|
+
clioCoder: evalClioProvenance(),
|
|
1089
1089
|
environment: evalEnvironmentProvenance(),
|
|
1090
1090
|
target: target ?? null,
|
|
1091
1091
|
model: null,
|
package/src/cli/targets.ts
CHANGED
|
@@ -205,8 +205,7 @@ export async function runTargetsCommand(args: ReadonlyArray<string>): Promise<nu
|
|
|
205
205
|
if (parsed.json) {
|
|
206
206
|
const settings = readSettings();
|
|
207
207
|
const candidateFor = (status: TargetStatus): string | null => {
|
|
208
|
-
const orchestratorModel =
|
|
209
|
-
settings.orchestrator?.target === status.target.id ? (settings.orchestrator?.model ?? null) : null;
|
|
208
|
+
const orchestratorModel = settings.chat?.target === status.target.id ? (settings.chat?.model ?? null) : null;
|
|
210
209
|
return orchestratorModel ?? status.target.defaultModel ?? null;
|
|
211
210
|
};
|
|
212
211
|
const rows = filtered.map((status) => {
|
|
@@ -467,11 +466,11 @@ function runProfileRemove(args: ReadonlyArray<string>): number {
|
|
|
467
466
|
}
|
|
468
467
|
ensureClioState();
|
|
469
468
|
const settings = readSettings();
|
|
470
|
-
if (!settings.
|
|
469
|
+
if (!settings.fleet.profiles[parsed.name]) {
|
|
471
470
|
printError(`no fleet profile named ${parsed.name}`);
|
|
472
471
|
return 1;
|
|
473
472
|
}
|
|
474
|
-
const boundAgents = Object.entries(settings.
|
|
473
|
+
const boundAgents = Object.entries(settings.fleet.agentProfiles)
|
|
475
474
|
.filter(([, profileName]) => profileName === parsed.name)
|
|
476
475
|
.map(([agentId]) => agentId);
|
|
477
476
|
if (boundAgents.length > 0 && !parsed.force) {
|
|
@@ -510,23 +509,23 @@ function runProfileRename(args: ReadonlyArray<string>): number {
|
|
|
510
509
|
}
|
|
511
510
|
ensureClioState();
|
|
512
511
|
const settings = readSettings();
|
|
513
|
-
if (!settings.
|
|
512
|
+
if (!settings.fleet.profiles[parsed.oldName]) {
|
|
514
513
|
printError(`no fleet profile named ${parsed.oldName}`);
|
|
515
514
|
return 1;
|
|
516
515
|
}
|
|
517
|
-
if (settings.
|
|
516
|
+
if (settings.fleet.profiles[parsed.newName]) {
|
|
518
517
|
printError(`fleet profile already exists: ${parsed.newName}`);
|
|
519
518
|
return 2;
|
|
520
519
|
}
|
|
521
520
|
let updatedBindings = 0;
|
|
522
521
|
updateSettings((fresh) => {
|
|
523
|
-
const profile = fresh.
|
|
522
|
+
const profile = fresh.fleet.profiles[parsed.oldName];
|
|
524
523
|
if (!profile) return;
|
|
525
|
-
fresh.
|
|
526
|
-
delete fresh.
|
|
527
|
-
for (const [agentId, profileName] of Object.entries(fresh.
|
|
524
|
+
fresh.fleet.profiles[parsed.newName] = profile;
|
|
525
|
+
delete fresh.fleet.profiles[parsed.oldName];
|
|
526
|
+
for (const [agentId, profileName] of Object.entries(fresh.fleet.agentProfiles)) {
|
|
528
527
|
if (profileName !== parsed.oldName) continue;
|
|
529
|
-
fresh.
|
|
528
|
+
fresh.fleet.agentProfiles[agentId] = parsed.newName;
|
|
530
529
|
updatedBindings += 1;
|
|
531
530
|
}
|
|
532
531
|
});
|
|
@@ -551,13 +550,13 @@ function runProfileBind(args: ReadonlyArray<string>): number {
|
|
|
551
550
|
}
|
|
552
551
|
ensureClioState();
|
|
553
552
|
const settings = readSettings();
|
|
554
|
-
if (settings.
|
|
553
|
+
if (settings.integrations.externalAgents.entries.some((agent) => agent.id === parsed.agentId)) {
|
|
555
554
|
printError(
|
|
556
555
|
`cannot bind ACP delegation agent '${parsed.agentId}' to a fleet profile; ACP agents use their own runner and ignore native target routing`,
|
|
557
556
|
);
|
|
558
557
|
return 1;
|
|
559
558
|
}
|
|
560
|
-
if (!settings.
|
|
559
|
+
if (!settings.fleet.profiles[parsed.profileName]) {
|
|
561
560
|
process.stderr.write(
|
|
562
561
|
`${chalk.yellow("warning:")} fleet profile '${parsed.profileName}' is not configured; binding will resolve after the profile exists\n`,
|
|
563
562
|
);
|
|
@@ -581,12 +580,12 @@ function runProfileUnbind(args: ReadonlyArray<string>): number {
|
|
|
581
580
|
}
|
|
582
581
|
ensureClioState();
|
|
583
582
|
const settings = readSettings();
|
|
584
|
-
if (!settings.
|
|
583
|
+
if (!settings.fleet.agentProfiles[parsed]) {
|
|
585
584
|
printError(`agent ${parsed} is not bound to a fleet profile`);
|
|
586
585
|
return 1;
|
|
587
586
|
}
|
|
588
587
|
updateSettings((fresh) => {
|
|
589
|
-
delete fresh.
|
|
588
|
+
delete fresh.fleet.agentProfiles[parsed];
|
|
590
589
|
});
|
|
591
590
|
printOk(`unbound agent ${parsed}`);
|
|
592
591
|
return 0;
|
|
@@ -608,10 +607,10 @@ function runProfileBindings(args: ReadonlyArray<string>): number {
|
|
|
608
607
|
}
|
|
609
608
|
ensureClioState();
|
|
610
609
|
const settings = readSettings();
|
|
611
|
-
const rows = Object.entries(settings.
|
|
610
|
+
const rows = Object.entries(settings.fleet.agentProfiles)
|
|
612
611
|
.sort(([a], [b]) => a.localeCompare(b))
|
|
613
612
|
.map(([agentId, profileName]) => {
|
|
614
|
-
const profile = settings.
|
|
613
|
+
const profile = settings.fleet.profiles[profileName];
|
|
615
614
|
return {
|
|
616
615
|
agentId,
|
|
617
616
|
profile: profileName,
|
|
@@ -686,7 +685,7 @@ function runFleet(args: ReadonlyArray<string>, usage = "clio-coder targets fleet
|
|
|
686
685
|
ensureClioState();
|
|
687
686
|
const settings = readSettings();
|
|
688
687
|
const byId = new Map(settings.targets.map((target) => [target.id, target] as const));
|
|
689
|
-
const rows = Object.entries(settings.
|
|
688
|
+
const rows = Object.entries(settings.fleet.profiles).map(([name, profile]) => {
|
|
690
689
|
const target = profile.target ? byId.get(profile.target) : undefined;
|
|
691
690
|
return {
|
|
692
691
|
name,
|
|
@@ -782,7 +781,7 @@ function runConvert(args: ReadonlyArray<string>): number {
|
|
|
782
781
|
printOk(`target ${id} already uses runtime ${runtimeId}`);
|
|
783
782
|
return 0;
|
|
784
783
|
}
|
|
785
|
-
if (settings.
|
|
784
|
+
if (settings.chat.target === id && !isOrchestratorEligibleRuntime(runtime)) {
|
|
786
785
|
printError(`cannot convert orchestrator target '${id}' to non-HTTP/native runtime '${runtime.id}'`);
|
|
787
786
|
return 1;
|
|
788
787
|
}
|
|
@@ -917,7 +916,7 @@ function tableWidths(rows: ReadonlyArray<TargetTableRow>, width: number): Target
|
|
|
917
916
|
* cut to its width, marked the same way. Colour is dropped on those rows because
|
|
918
917
|
* the ansi bytes would sit inside the cut; a wrapped row costs more than colour.
|
|
919
918
|
*/
|
|
920
|
-
|
|
919
|
+
function formatTargetTable(
|
|
921
920
|
rows: ReadonlyArray<TargetTableRow>,
|
|
922
921
|
width: number,
|
|
923
922
|
paintHealth: (cell: string, row: TargetTableRow) => string = (cell) => cell,
|
|
@@ -972,7 +971,7 @@ function renderTable(providers: ProvidersContract, entries: ReadonlyArray<Target
|
|
|
972
971
|
}
|
|
973
972
|
}
|
|
974
973
|
|
|
975
|
-
|
|
974
|
+
function targetTableRow(providers: ProvidersContract, status: TargetStatus): TargetTableRow {
|
|
976
975
|
const diagnostic = degradedHealthDiagnostic(status);
|
|
977
976
|
return {
|
|
978
977
|
id: status.target.id,
|
|
@@ -1034,7 +1033,7 @@ function capabilityBadges(caps: CapabilityFlags): string {
|
|
|
1034
1033
|
* no states (cloud targets); "resident: none" when states are known and
|
|
1035
1034
|
* nothing is loaded, so a cold box is distinguishable from an unknown one.
|
|
1036
1035
|
*/
|
|
1037
|
-
|
|
1036
|
+
function residentModelsSummary(states: TargetStatus["discoveredModelStates"]): string | null {
|
|
1038
1037
|
if (!states) return null;
|
|
1039
1038
|
const entries = Object.entries(states);
|
|
1040
1039
|
if (entries.length === 0) return null;
|
|
@@ -1049,7 +1048,7 @@ export function residentModelsSummary(states: TargetStatus["discoveredModelState
|
|
|
1049
1048
|
* capability the target reported. Saying so is the difference between a number
|
|
1050
1049
|
* a user can plan against and one they cannot.
|
|
1051
1050
|
*/
|
|
1052
|
-
|
|
1051
|
+
function formatContextWindow(
|
|
1053
1052
|
status: Pick<TargetStatus, "capabilities" | "contextWindowProvenance"> &
|
|
1054
1053
|
Partial<Pick<TargetStatus, "target" | "discoveredModelStates">>,
|
|
1055
1054
|
): string {
|
|
@@ -1065,7 +1064,7 @@ export function formatContextWindow(
|
|
|
1065
1064
|
: `ctx ${window}`;
|
|
1066
1065
|
}
|
|
1067
1066
|
|
|
1068
|
-
|
|
1067
|
+
function formatNotes(status: TargetStatus): string {
|
|
1069
1068
|
const parts: string[] = [];
|
|
1070
1069
|
const diagnostic = degradedHealthDiagnostic(status);
|
|
1071
1070
|
// The health diagnosis leads because gateway, context, and residency facts
|
package/src/cli/trace-inspect.ts
CHANGED
|
@@ -166,7 +166,7 @@ function processSummary(reader: TraceReader, runId: string): TraceInspectProcess
|
|
|
166
166
|
}
|
|
167
167
|
|
|
168
168
|
/** Pure payload builder, exported so the fixed contract is testable without subprocess capture. */
|
|
169
|
-
|
|
169
|
+
function traceInspectSnapshot(
|
|
170
170
|
now: () => number = Date.now,
|
|
171
171
|
databasePath: string = traceDatabasePath(clioStatePath()),
|
|
172
172
|
): TraceInspectSnapshot {
|
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,
|
|
@@ -149,6 +150,14 @@ export async function runTraceCommand(args: string[]): Promise<number> {
|
|
|
149
150
|
process.stderr.write("trace sql requires a SELECT query\n");
|
|
150
151
|
return 2;
|
|
151
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
|
+
}
|
|
152
161
|
|
|
153
162
|
if (command === "ui") return runTraceUi(parsed.db, parsed.port);
|
|
154
163
|
|
|
@@ -378,6 +387,38 @@ function missingDatabase(parsed: ParsedTraceArgs): number {
|
|
|
378
387
|
);
|
|
379
388
|
return 1;
|
|
380
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
|
+
}
|
|
381
422
|
process.stdout.write(
|
|
382
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`,
|
|
383
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}'. ` +
|
|
@@ -283,7 +283,7 @@ function projectCheck(check: AuthoringCheck): VerifiersInspectCheck | null {
|
|
|
283
283
|
|
|
284
284
|
const ORIGIN_RANK: Record<VerifierOrigin, number> = { "package-script": 0, catalog: 1, proposed: 2 };
|
|
285
285
|
|
|
286
|
-
|
|
286
|
+
function verifiersInspectSnapshot(
|
|
287
287
|
now: () => number = Date.now,
|
|
288
288
|
workspaceRoot: string = process.cwd(),
|
|
289
289
|
): VerifiersInspectSnapshot {
|
package/src/cli/wiki-generate.ts
CHANGED
|
@@ -149,7 +149,7 @@ async function drainDispatchEvents(
|
|
|
149
149
|
let firstBlockReason: string | null = null;
|
|
150
150
|
// Every event is consumed so finalization cannot block on an unread iterator.
|
|
151
151
|
for await (const event of events) {
|
|
152
|
-
if (!isRecord(event) || event.type !== "
|
|
152
|
+
if (!isRecord(event) || event.type !== "clio_coder_tool_finish") continue;
|
|
153
153
|
const tool = eventPayloadString(event, "tool");
|
|
154
154
|
if (!tool) continue;
|
|
155
155
|
const outcome = eventPayloadString(event, "outcome") ?? "done";
|
|
@@ -190,7 +190,7 @@ interface WikiDispatchOutcome {
|
|
|
190
190
|
* throws: a failed page must not take down the pages around it, and whatever
|
|
191
191
|
* the run wrote before it stopped is already on disk.
|
|
192
192
|
*/
|
|
193
|
-
|
|
193
|
+
async function runWikiDispatch(input: {
|
|
194
194
|
dispatch: DispatchContract;
|
|
195
195
|
cwd: string;
|
|
196
196
|
outputDir: string;
|
|
@@ -371,7 +371,7 @@ async function runPagePhase(
|
|
|
371
371
|
return next;
|
|
372
372
|
}
|
|
373
373
|
|
|
374
|
-
|
|
374
|
+
async function generateWikiWithDocumenter(
|
|
375
375
|
dispatch: DispatchContract,
|
|
376
376
|
input: WikiGenerateInput,
|
|
377
377
|
route: WikiModelRoute = {},
|
|
@@ -472,11 +472,11 @@ export async function resolveDocumenterModelId(route: WikiModelRoute = {}): Prom
|
|
|
472
472
|
const providers = loaded.getContract<ProvidersContract>("providers");
|
|
473
473
|
if (!config || !providers) return UNRESOLVED_DOCUMENTER_MODEL;
|
|
474
474
|
const settings = config.get();
|
|
475
|
-
const workers = settings.
|
|
475
|
+
const workers = settings.fleet;
|
|
476
476
|
// Keyed on the dispatched agent id and nothing else, because that is what
|
|
477
477
|
// `placement.ts` reads. Falling back to another agent's binding here would
|
|
478
478
|
// record a model in wiki metadata that no dispatch ever ran.
|
|
479
|
-
const bindingProfileName = workers?.
|
|
479
|
+
const bindingProfileName = workers?.agentProfiles?.[WIKI_AGENT_ID];
|
|
480
480
|
const profile = bindingProfileName ? workers?.profiles?.[bindingProfileName] : undefined;
|
|
481
481
|
const targetId = route.target ?? profile?.target ?? workers?.default?.target ?? settings.targets?.[0]?.id ?? null;
|
|
482
482
|
if (!targetId) return UNRESOLVED_DOCUMENTER_MODEL;
|
package/src/core/bash-exec.ts
CHANGED
|
@@ -75,7 +75,7 @@ const LOGIN_ENV_CAPTURE_TIMEOUT_MS = 10_000;
|
|
|
75
75
|
let loginEnvCapture: Promise<NodeJS.ProcessEnv | null> | null = null;
|
|
76
76
|
|
|
77
77
|
/** NUL-delimited `env -0` output to an env map; null when unusable (no PATH). */
|
|
78
|
-
|
|
78
|
+
function parseNullDelimitedEnv(raw: string): NodeJS.ProcessEnv | null {
|
|
79
79
|
const env: NodeJS.ProcessEnv = {};
|
|
80
80
|
for (const entry of raw.split("\0")) {
|
|
81
81
|
if (entry.length === 0) continue;
|
package/src/core/boot-trace.ts
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
const BOOT_TRACE_ENV = "CLIO_CODER_TRACE_BOOT";
|
|
17
17
|
|
|
18
18
|
/** True when boot tracing is enabled for this process. */
|
|
19
|
-
|
|
19
|
+
function isBootTraceEnabled(): boolean {
|
|
20
20
|
return process.env[BOOT_TRACE_ENV] === "1";
|
|
21
21
|
}
|
|
22
22
|
|
|
@@ -24,11 +24,11 @@ export function isBootTraceEnabled(): boolean {
|
|
|
24
24
|
export function formatBootTrace(phase: string, detail?: string): string | null {
|
|
25
25
|
if (!isBootTraceEnabled()) return null;
|
|
26
26
|
const suffix = detail !== undefined && detail.length > 0 ? ` (${detail})` : "";
|
|
27
|
-
return `[clio:boot] +${performance.now().toFixed(1)}ms ${phase}${suffix}\n`;
|
|
27
|
+
return `[clio-coder:boot] +${performance.now().toFixed(1)}ms ${phase}${suffix}\n`;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
|
-
* Stamp a boot phase marker to stderr, e.g. `[clio:boot] +742.1ms cli entry`.
|
|
31
|
+
* Stamp a boot phase marker to stderr, e.g. `[clio-coder:boot] +742.1ms cli entry`.
|
|
32
32
|
* `detail` appends a parenthetical (module counts, ids). No-op unless
|
|
33
33
|
* `CLIO_CODER_TRACE_BOOT=1`. Never throws: a diagnostic must not affect boot.
|
|
34
34
|
*/
|
package/src/core/bus-trace.ts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* orchestrator-wide observability, not a domain concern. Add channels to the
|
|
12
12
|
* `TRACED_CHANNELS` list if a future front needs to observe them.
|
|
13
13
|
*
|
|
14
|
-
* Ordering invariant: the first `[clio:bus] shutdown.requested` line must
|
|
14
|
+
* Ordering invariant: the first `[clio-coder:bus] shutdown.requested` line must
|
|
15
15
|
* never reach stderr before the `Clio Coder: received <SIGNAL>, shutting down...`
|
|
16
16
|
* notice written by termination.installSignalHandlers in
|
|
17
17
|
* src/core/termination.ts. Future edits to termination.ts must preserve that
|
|
@@ -47,7 +47,7 @@ export function installBusTracer(): void {
|
|
|
47
47
|
const bus = getSharedBus();
|
|
48
48
|
for (const channel of TRACED_CHANNELS) {
|
|
49
49
|
bus.on(channel, (payload) => {
|
|
50
|
-
process.stderr.write(`[clio:bus] ${channel}${traceSuffix(payload)}\n`);
|
|
50
|
+
process.stderr.write(`[clio-coder:bus] ${channel}${traceSuffix(payload)}\n`);
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
}
|
|
@@ -65,7 +65,7 @@ export interface CompileCacheHandle {
|
|
|
65
65
|
* exercise the settle semantics without flipping the real process-global
|
|
66
66
|
* cache.
|
|
67
67
|
*/
|
|
68
|
-
|
|
68
|
+
function createCompileCache(
|
|
69
69
|
enableFn: typeof enableCompileCache = enableCompileCache,
|
|
70
70
|
rootExists: (dir: string) => boolean = existsSync,
|
|
71
71
|
): CompileCacheHandle {
|