@iowarp/clio-coder 0.3.9 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +92 -0
- package/NOTICE +33 -0
- package/README.md +121 -16
- package/dist/{acp-7LOELQFP.js → acp-ZILU3AUO.js} +19 -18
- package/dist/{agents-FIBG2SHA.js → agents-HYWGBGQR.js} +53 -39
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-OI4LIH2I.js → auth-N3QT7CBO.js} +24 -21
- package/dist/{builtins-AD25UL3C.js → builtins-UJLMOVOV.js} +6 -6
- package/dist/{chunk-I4HZDVNP.js → chunk-2LEAKD4C.js} +2 -3
- package/dist/{chunk-465CC7FK.js → chunk-2NM363SV.js} +60 -64
- package/dist/{chunk-4H6ULJ3H.js → chunk-2VG7KLYV.js} +1046 -1370
- package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
- package/dist/{chunk-NZU6YDNV.js → chunk-3I5NY75V.js} +5 -5
- package/dist/{chunk-47CMYGET.js → chunk-3QSOM6PA.js} +2 -2
- package/dist/chunk-42FMPA75.js +101 -0
- package/dist/{chunk-HAY4ZE2P.js → chunk-5PSMVOLM.js} +2 -2
- package/dist/{chunk-IHKBWSXF.js → chunk-5QIAJV2D.js} +3 -3
- package/dist/chunk-5YHDIDBP.js +97 -0
- package/dist/chunk-6CCS4G3W.js +1529 -0
- package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
- package/dist/{chunk-BVDVID7E.js → chunk-6FN3E6KX.js} +6 -6
- package/dist/{chunk-DG4M6ZUE.js → chunk-6HMJX2VU.js} +59 -59
- package/dist/{chunk-3MRC2YSQ.js → chunk-6I5ILFOF.js} +3 -2
- package/dist/chunk-6NJQITNH.js +1412 -0
- package/dist/chunk-6VC4OV3Z.js +365 -0
- package/dist/{chunk-LU7P4LHA.js → chunk-72GZI5EV.js} +2 -2
- package/dist/{chunk-5T7RBWN2.js → chunk-74YWRRU5.js} +9 -8
- package/dist/{chunk-VPTUJU4P.js → chunk-7EPLI7VL.js} +2 -2
- package/dist/{chunk-CA42X6KT.js → chunk-7OBGU7UB.js} +7 -7
- package/dist/{chunk-56KB5IJP.js → chunk-7PWAODYW.js} +3 -3
- package/dist/chunk-7RY5VZPH.js +573 -0
- package/dist/{chunk-OEDBCISO.js → chunk-ABLSQ6JX.js} +3 -3
- package/dist/{chunk-5HFBWUMU.js → chunk-AFKWHWXF.js} +13 -23
- package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
- package/dist/{chunk-WXCJ7VME.js → chunk-AKB4GYDL.js} +7 -7
- package/dist/chunk-AP73CFDC.js +308 -0
- package/dist/{chunk-4LJX2PUC.js → chunk-BBTJOK6Y.js} +5 -5
- package/dist/{chunk-QQ7EKM72.js → chunk-BDPT6GTK.js} +13 -61
- package/dist/chunk-BJGUKIG4.js +302 -0
- package/dist/chunk-BMS5RKQY.js +27 -0
- package/dist/{chunk-TD7UE2L5.js → chunk-BTGG6BG2.js} +81 -40
- package/dist/chunk-BTK3SSSK.js +67 -0
- package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
- package/dist/chunk-BWW4HLO4.js +301 -0
- package/dist/{chunk-BNAZZHFG.js → chunk-BYP5D4HI.js} +1 -1
- package/dist/{chunk-HJB5IUKP.js → chunk-C537JADH.js} +18 -18
- package/dist/{chunk-774ILSRL.js → chunk-CDNVLKUX.js} +5 -4
- package/dist/{chunk-HPCTNZM2.js → chunk-CTJ4RNAA.js} +4 -4
- package/dist/{chunk-AEYBF3TB.js → chunk-CWVRRIEI.js} +2 -2
- package/dist/chunk-D4CJV46V.js +462 -0
- package/dist/chunk-D7E7WCDF.js +27 -0
- package/dist/{chunk-5PVQ4SRS.js → chunk-E67WX76H.js} +10 -126
- package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
- package/dist/chunk-EIMVLWB3.js +1842 -0
- package/dist/{chunk-AMKHQW3C.js → chunk-FEFIFZTL.js} +3 -3
- package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
- package/dist/{chunk-3DUR4WUA.js → chunk-FYUN5KZ3.js} +25 -25
- package/dist/{chunk-MV3K5QF2.js → chunk-GCSMB2KY.js} +2 -2
- package/dist/chunk-GIZNH63R.js +40 -0
- package/dist/chunk-GPPB3JBE.js +688 -0
- package/dist/{chunk-B5XRQOLB.js → chunk-GVQJ5CCZ.js} +17 -11
- package/dist/chunk-HHV2GANA.js +88 -0
- package/dist/chunk-HJWWJ6IL.js +184 -0
- package/dist/{chunk-RKRLDWD3.js → chunk-HLW2MRKE.js} +1 -1
- package/dist/chunk-HRQMFLJP.js +75 -0
- package/dist/{chunk-AD7Y7STJ.js → chunk-HUAS7ITX.js} +107 -97
- package/dist/{chunk-O6I4CIEU.js → chunk-I66EAJFY.js} +6 -6
- package/dist/{chunk-S4COXYBG.js → chunk-IG7BCQBA.js} +129 -106
- package/dist/{chunk-N3PBVRTZ.js → chunk-IXJT6DCX.js} +9 -7
- package/dist/chunk-J4HBWF6Y.js +2635 -0
- package/dist/chunk-J5LZHVIT.js +284 -0
- package/dist/{chunk-GAYUJ7LE.js → chunk-JA5QWE4Z.js} +544 -227
- package/dist/{chunk-B5CSFE7B.js → chunk-JIEGK6UF.js} +6 -174
- package/dist/{chunk-VKBMFOYV.js → chunk-JZWT5J3Y.js} +23 -27
- package/dist/chunk-K6BF4U2H.js +1785 -0
- package/dist/{chunk-CGKSTWHD.js → chunk-K6BSR66V.js} +2 -1
- package/dist/{chunk-YSEHGPCT.js → chunk-MA3H6DM5.js} +6 -6
- package/dist/{chunk-EBOC7MT3.js → chunk-MOPSG2X7.js} +9 -9
- package/dist/{chunk-KV2AOLDF.js → chunk-MQXIVJ35.js} +18 -29
- package/dist/{chunk-P3JGPQFL.js → chunk-N5UK64DP.js} +4 -4
- package/dist/chunk-NDDGJUXD.js +81 -0
- package/dist/chunk-NEKRRTYW.js +56 -0
- package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
- package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
- package/dist/{chunk-T3Z6VAAF.js → chunk-OJTRZGR3.js} +53 -92
- package/dist/{chunk-5DQRIYDZ.js → chunk-PBP4B7XR.js} +3 -3
- package/dist/{chunk-NQ6UCCOD.js → chunk-PJJ6MY27.js} +8 -8
- package/dist/chunk-PMZCIOCJ.js +25 -0
- package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
- package/dist/{chunk-7C6RYZGQ.js → chunk-PVAMAVBB.js} +5 -4
- package/dist/chunk-QDC3K2U3.js +262 -0
- package/dist/{chunk-JEQQR47K.js → chunk-QKIFBZKT.js} +173 -14
- package/dist/{chunk-R7LNVMCS.js → chunk-QMXC4JB7.js} +70 -78
- package/dist/chunk-QSNYB6ZV.js +195 -0
- package/dist/chunk-QTFGO774.js +644 -0
- package/dist/{chunk-ODFEOB4F.js → chunk-R23Z6K6I.js} +27 -9
- package/dist/{chunk-3UUY7R3Z.js → chunk-R32CLGZ6.js} +14 -14
- package/dist/chunk-R346GLFC.js +31 -0
- package/dist/chunk-RKSR6VSF.js +132 -0
- package/dist/{chunk-N5XKWMDW.js → chunk-SCYB3HA4.js} +73 -27
- package/dist/{chunk-PZ4I4JE2.js → chunk-SINK3QR6.js} +135 -125
- package/dist/{chunk-5QKCQQ3E.js → chunk-SUW5DORT.js} +2 -2
- package/dist/chunk-T56WDKA5.js +183 -0
- package/dist/{chunk-ECUO3KDP.js → chunk-TD3PGPQA.js} +87 -26
- package/dist/{chunk-HKO36JWF.js → chunk-THYWACCR.js} +31 -3
- package/dist/{chunk-LXPJXFM5.js → chunk-TVH4ONAM.js} +18 -12
- package/dist/chunk-TVHHYFHE.js +255 -0
- package/dist/chunk-U2WB7TZS.js +271 -0
- package/dist/{chunk-NNNWO6F2.js → chunk-UAPGZHYC.js} +237 -33
- package/dist/{chunk-MIX5N5AC.js → chunk-UEDMSP56.js} +415 -160
- package/dist/{chunk-WIE7ZOSW.js → chunk-UXN6JT4W.js} +3 -3
- package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
- package/dist/{chunk-MV2VUEJC.js → chunk-VEGN6WIQ.js} +2 -2
- package/dist/chunk-VKFQTNDV.js +66 -0
- package/dist/{chunk-FALJGAWU.js → chunk-VKRH2TCS.js} +2 -2
- package/dist/{chunk-A2NJGIB3.js → chunk-VN3SHNBN.js} +2 -2
- package/dist/{chunk-XK56QHLX.js → chunk-VPKWYKEY.js} +19 -5
- package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
- package/dist/{chunk-EQ63NRB7.js → chunk-WNP7O5WZ.js} +3 -3
- package/dist/chunk-WR6U3OVP.js +45 -0
- package/dist/{chunk-TEO2TLVN.js → chunk-XKA2ICR3.js} +1051 -1196
- package/dist/{chunk-3V5AYSEQ.js → chunk-Y45G3AXC.js} +72 -65
- package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
- package/dist/chunk-YAKGTXEV.js +17 -0
- package/dist/{chunk-ZI647VB5.js → chunk-YPI3QQCF.js} +2 -2
- package/dist/{chunk-YW7UVM5V.js → chunk-ZAZB4JMW.js} +55 -11
- package/dist/{chunk-HCBCAYZU.js → chunk-ZJLUDYFY.js} +11 -11
- package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
- package/dist/{chunk-IFBNV6H6.js → chunk-ZW55JB7N.js} +3 -3
- package/dist/cli/index.js +48 -37
- package/dist/clio-IT3G3VQH.js +25 -0
- package/dist/{code-nav-LMW275PA.js → code-nav-RK6S7F6E.js} +8 -8
- package/dist/codewiki/build-worker.js +1 -1
- package/dist/{compile-cache-CVJMMODC.js → compile-cache-OQAVB7Y5.js} +3 -5
- package/dist/{components-ZFA3SAER.js → components-UBWCQSRW.js} +6 -6
- package/dist/{config-RXS5T3JT.js → config-3QZRWZJF.js} +73 -61
- package/dist/configure-FL7Y3KJF.js +54 -0
- package/dist/{context-MVOORGMF.js → context-5HE7ODYK.js} +61 -49
- package/dist/{context-I3BTOTCS.js → context-KYQFRVDC.js} +11 -11
- package/dist/{context-PALKKQYL.js → context-XNHL75JV.js} +43 -28
- package/dist/{context-clear-N2WOYZ2K.js → context-clear-N545L53A.js} +60 -48
- package/dist/{context-working-set-MIEVECVZ.js → context-working-set-QHKXSV2F.js} +15 -13
- package/dist/{dispatch-runner-VVA4SRRH.js → dispatch-runner-RGIE5PCT.js} +109 -72
- package/dist/{docs-7LQ23DLM.js → docs-5NAF6AU7.js} +7 -13
- package/dist/doctor-ZGPEGHIP.js +772 -0
- package/dist/{eval-IJ5VEZDJ.js → eval-GXLL44RD.js} +106 -86
- package/dist/eval-inventory-HBWSWQOK.js +315 -0
- package/dist/{evidence-L5APPXNV.js → evidence-HWLBRH3Q.js} +209 -51
- package/dist/{evolve-RGNKFJ52.js → evolve-FTZBMNVW.js} +57 -45
- package/dist/{extensions-7WYWUX5A.js → extensions-VHRBEID7.js} +7 -7
- package/dist/{fleet-6CNVBZZP.js → fleet-CKZHJWZJ.js} +215 -114
- package/dist/{fleet-commands-L2SXSYEI.js → fleet-commands-EXDXBMV6.js} +13 -12
- package/dist/fleet-decisions-OTHB6KRL.js +157 -0
- package/dist/{fleet-graph-2J3OOIPO.js → fleet-graph-YTEZUCUT.js} +20 -17
- package/dist/fleet-inspect-SS6YMDCK.js +445 -0
- package/dist/{fleet-preflight-CZRJ4JP5.js → fleet-preflight-PBY4VYOM.js} +6 -9
- package/dist/{fleet-validate-C5RI6DP7.js → fleet-validate-KMEM5L3S.js} +25 -20
- package/dist/fleet-verify-QD5M7E7Q.js +178 -0
- package/dist/fleet-view-WAMJYNDT.js +94 -0
- package/dist/{init-VBN2ACVA.js → init-5XQRBOFV.js} +79 -66
- package/dist/install-NKNG7KD4.js +13 -0
- package/dist/interop-34TVO25M.js +116 -0
- package/dist/{library-JHGUMLY2.js → library-3QY6KF57.js} +25 -21
- package/dist/{memory-K4OQIYWG.js → memory-L4UTIIIW.js} +59 -47
- package/dist/{models-2NCZUWDD.js → models-ZVX3QOWE.js} +47 -37
- package/dist/{monitor-MMVTJABD.js → monitor-CEKVSYTS.js} +67 -57
- package/dist/{orchestrator-ZKBPCHW6.js → orchestrator-77BAP6BC.js} +7633 -7699
- package/dist/panes-7STHOAUJ.js +103 -0
- package/dist/panes-SHAUIRXY.js +60 -0
- package/dist/{paths-DBXMZMDU.js → paths-L7LGY6RN.js} +6 -6
- package/dist/{reset-DD5JGOY3.js → reset-EOLM7GVE.js} +15 -14
- package/dist/resources-74GKTLSF.js +115 -0
- package/dist/{run-QEGNX7FL.js → run-HBAUJNNZ.js} +139 -98
- package/dist/{share-JKD3BQMW.js → share-G3APVLVP.js} +25 -21
- package/dist/{skills-LMQIKDOZ.js → skills-35HHUKCR.js} +37 -27
- package/dist/{skills-eval-I7X2774U.js → skills-eval-QN4HSHDC.js} +80 -73
- package/dist/skills-inventory-J357J34F.js +129 -0
- package/dist/slash-commands-JZZCQA32.js +79 -0
- package/dist/{steer-CF5TDANS.js → steer-XAVHJM22.js} +4 -4
- package/dist/{support-I7LOJLIF.js → support-U7QOWY26.js} +7 -7
- package/dist/{targets-RUSR6B5Z.js → targets-DSM6CY3M.js} +67 -59
- package/dist/{terminal-lease-QYVORFR4.js → terminal-lease-JOPFUVEM.js} +15 -10
- package/dist/tools-MKNWVPBH.js +29 -0
- package/dist/{trace-ODOQIVIW.js → trace-ECQ7TIYZ.js} +194 -7
- package/dist/tui-primitives-K5PASC3O.js +17 -0
- package/dist/{uninstall-ZJF5H5ZN.js → uninstall-N34PCTGJ.js} +6 -8
- package/dist/{upgrade-XANW3FXB.js → upgrade-H7TOM7YL.js} +37 -62
- package/dist/{usage-4H7ZRXQT.js → usage-X52N3IDJ.js} +70 -59
- package/dist/{verifiers-UZXNBZEB.js → verifiers-EJTVVSMA.js} +174 -14
- package/dist/{verify-BVKWTNDL.js → verify-YJL6XET2.js} +12 -11
- package/dist/{web-fetch-2YHJ3KTG.js → web-fetch-MPIFL3LL.js} +3 -4
- package/dist/{wiki-generate-MY7WV2QI.js → wiki-generate-4NDZTQ4B.js} +86 -75
- package/dist/with-panes-OBOBFIIR.js +818 -0
- package/dist/worker/entry.js +131 -91
- package/docs/README.md +3 -2
- package/docs/acp.md +25 -4
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +2 -2
- package/docs/artifact-versions.md +4 -1
- package/docs/built-in-agents.md +40 -32
- package/docs/capacity-and-scheduling.md +43 -5
- package/docs/commands-and-modes.md +39 -4
- package/docs/config-knobs-audit.md +3 -0
- package/docs/configuration-and-targets.md +138 -167
- package/docs/context-engine.md +1 -1
- package/docs/development-pipeline.md +19 -0
- package/docs/dispatch-typed-intent.md +385 -0
- package/docs/documentation-coverage.md +2 -2
- package/docs/documentation-guide.md +1 -1
- package/docs/environment-variables.md +3 -1
- package/docs/eval-runner.md +1 -1
- package/docs/evals-internal.md +1 -1
- package/docs/evidence-and-memory.md +2 -2
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +3 -1
- package/docs/extensions-and-sharing.md +25 -1
- package/docs/fleet-demo-runbook.md +6 -3
- package/docs/fleet-dispatch.md +30 -7
- package/docs/installation-and-lifecycle.md +16 -3
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +10 -1
- package/docs/observability.md +3 -3
- package/docs/proactive-memory.md +1 -1
- package/docs/prompt-envelope-and-tools.md +1 -1
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +164 -177
- package/docs/safety-model.md +2 -2
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +1 -1
- package/docs/skills-marketplace.md +1 -1
- package/docs/tool-usage.md +18 -8
- package/docs/trace-store.md +16 -11
- package/docs/troubleshooting.md +2 -2
- package/docs/tui-design.md +1 -1
- package/docs/worker-dispatch-mechanics.md +1 -1
- package/evals/README.md +5 -0
- package/evals/behavioral-corpus-grader.mjs +103 -0
- package/evals/behavioral-machinery-baseline.json +2276 -0
- package/evals/behavioral-machinery-driver.ts +250 -0
- package/evals/behavioral-machinery-support.ts +253 -0
- package/evals/behavioral-machinery.yaml +614 -0
- package/evals/behavioral-model-negative-control.yaml +68 -0
- package/evals/behavioral-model.yaml +216 -0
- package/evals/fixtures/behavioral-facts.txt +3 -0
- package/evals/fixtures/behavioral-main.ts +7 -0
- package/evals/fixtures/decoy/note.txt +2 -0
- package/evals/fixtures/private/credentials.txt +1 -0
- package/evals/tracked-metrics-baseline.yaml +229 -0
- package/evals/tracked-metrics-grader.mjs +129 -0
- package/package.json +8 -16
- package/skills/README.md +6 -6
- package/skills/coding/ast-grep/SKILL.md +8 -2
- package/skills/coding/coding-standards/SKILL.md +8 -2
- package/skills/coding/prototype/SKILL.md +8 -2
- package/skills/coding/tdd/SKILL.md +8 -2
- package/skills/context/context-handoff/SKILL.md +12 -3
- package/skills/context/context-handoff/evals.md +3 -3
- package/skills/context/context-prime/SKILL.md +8 -2
- package/skills/context/context-prime/evals.md +2 -2
- package/skills/git/file-ticket/SKILL.md +9 -4
- package/skills/git/file-ticket/evals.md +2 -2
- package/skills/git/fix-issue/SKILL.md +12 -5
- package/skills/git/fix-issue/evals.md +4 -4
- package/skills/git/resolve-merge-conflicts/SKILL.md +8 -2
- package/skills/git/resolve-merge-conflicts/evals.md +2 -2
- package/skills/git/ship/SKILL.md +9 -3
- package/skills/git/ship/evals.md +4 -4
- package/skills/git/worktree-create/SKILL.md +7 -2
- package/skills/git/worktree-create/evals.md +6 -6
- package/skills/git/worktree-merge/SKILL.md +7 -2
- package/skills/git/worktree-merge/evals.md +6 -6
- package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
- package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
- package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
- package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
- package/skills/meta/credentials/SKILL.md +9 -2
- package/skills/meta/find-skills/SKILL.md +8 -2
- package/skills/meta/herdr/SKILL.md +8 -2
- package/skills/meta/skill-craft/SKILL.md +21 -4
- package/skills/planning/architecture/SKILL.md +9 -3
- package/skills/planning/backlog/SKILL.md +8 -2
- package/skills/planning/prd/SKILL.md +8 -2
- package/skills/planning/product-intent/SKILL.md +8 -2
- package/skills/planning/tech-spec/SKILL.md +9 -3
- package/skills/registry.yaml +66 -66
- package/skills/research/arxiv-literature/SKILL.md +8 -2
- package/skills/research/experiment-protocol/SKILL.md +9 -2
- package/skills/research/scientific-debugging/SKILL.md +9 -2
- package/skills/research/scientific-debugging/evals.md +2 -2
- package/skills/research/scientific-modernization/SKILL.md +9 -2
- package/skills/skill-marketplace.json +257 -38
- package/skills/workflow/cut-it/SKILL.md +10 -2
- package/skills/workflow/design-council/SKILL.md +11 -2
- package/skills/workflow/grill-me/SKILL.md +8 -2
- package/skills/workflow/workflow-distiller/SKILL.md +8 -2
- package/src/cli/acp.ts +8 -4
- package/src/cli/argv.ts +25 -0
- package/src/cli/auth.ts +2 -2
- package/src/cli/bootstrap-generate.ts +5 -5
- package/src/cli/clio.ts +6 -1
- package/src/cli/config-inspect.ts +3 -3
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure.ts +50 -48
- package/src/cli/default-target.ts +1 -1
- package/src/cli/docs.ts +6 -6
- package/src/cli/doctor-naming.ts +323 -0
- package/src/cli/doctor-panes.ts +156 -0
- package/src/cli/doctor-toolchain.ts +78 -0
- package/src/cli/doctor.ts +34 -1
- package/src/cli/eval-inventory.ts +436 -0
- package/src/cli/eval.ts +13 -0
- package/src/cli/evidence-detail.ts +88 -0
- package/src/cli/evidence-inventory.ts +183 -0
- package/src/cli/evidence.ts +30 -5
- package/src/cli/fleet-decisions.ts +69 -0
- package/src/cli/fleet-inspect.ts +334 -0
- package/src/cli/fleet-preflight.ts +1 -1
- package/src/cli/fleet-verify.ts +133 -0
- package/src/cli/fleet-view.ts +827 -0
- package/src/cli/fleet.ts +154 -40
- package/src/cli/index.ts +14 -2
- package/src/cli/interop-inspect.ts +128 -0
- package/src/cli/interop.ts +34 -0
- package/src/cli/models.ts +3 -3
- package/src/cli/modes/print.ts +1 -1
- package/src/cli/panes.ts +35 -0
- package/src/cli/reset.ts +6 -3
- package/src/cli/run.ts +67 -13
- package/src/cli/share.ts +1 -1
- package/src/cli/skills-eval.ts +11 -11
- package/src/cli/skills-inventory.ts +185 -0
- package/src/cli/skills.ts +16 -13
- package/src/cli/targets.ts +23 -24
- package/src/cli/tools.ts +321 -0
- package/src/cli/trace-inspect.ts +252 -0
- package/src/cli/trace.ts +64 -2
- package/src/cli/uninstall.ts +2 -2
- package/src/cli/upgrade.ts +29 -34
- package/src/cli/usage.ts +2 -2
- package/src/cli/validate-model.ts +1 -1
- package/src/cli/verifiers-inspect.ts +347 -0
- package/src/cli/verifiers.ts +9 -0
- package/src/cli/wiki-generate.ts +5 -5
- package/src/core/bash-exec.ts +1 -1
- package/src/core/boot-trace.ts +3 -3
- package/src/core/bus-events.ts +4 -0
- package/src/core/bus-trace.ts +2 -2
- package/src/core/compile-cache.ts +1 -1
- package/src/core/config.ts +1070 -845
- package/src/core/defaults.ts +342 -463
- package/src/core/domain-loader.ts +6 -4
- package/src/core/event-bus.ts +1 -1
- package/src/core/file-references.ts +78 -88
- package/src/core/git-commit-attribution.ts +3 -9
- package/src/core/guardrails.ts +24 -4
- package/src/core/naming-compat.ts +45 -0
- package/src/core/naming-events.ts +62 -0
- package/src/core/recent-models.ts +1 -7
- package/src/core/residency-protection.ts +4 -8
- package/src/core/resolve-config-value.ts +1 -1
- package/src/core/response-model-id.ts +0 -14
- package/src/core/response-schema.ts +44 -4
- package/src/core/session-routing.ts +84 -74
- package/src/core/skill-activation.ts +18 -0
- package/src/core/termination.ts +4 -4
- package/src/core/theme-token-hex.ts +43 -0
- package/src/core/timers.ts +2 -12
- package/src/core/tool-names.ts +2 -1
- package/src/core/xdg.ts +1 -1
- package/src/domains/agents/catalog.ts +2 -12
- package/src/domains/agents/extension.ts +3 -3
- package/src/domains/agents/fleets/build-review.md +0 -3
- package/src/domains/agents/fleets/build-test.md +0 -3
- package/src/domains/agents/registry.ts +7 -7
- package/src/domains/agents/result-contract-filesystem.ts +32 -0
- package/src/domains/agents/result-contract.ts +165 -36
- package/src/domains/agents/spec.ts +0 -11
- package/src/domains/config/classify.ts +37 -46
- package/src/domains/config/extension.ts +5 -5
- package/src/domains/config/keybindings.ts +48 -47
- package/src/domains/config/watcher.ts +1 -1
- package/src/domains/context/codewiki/indexer.ts +1 -1
- package/src/domains/context/extension.ts +3 -3
- package/src/domains/context/prompt-context.ts +1 -1
- package/src/domains/context/wiki/assemble.ts +2 -2
- package/src/domains/context/working-set/replay/metrics.ts +0 -4
- package/src/domains/context/working-set/replay/report.ts +1 -1
- package/src/domains/context/working-set/replay/synthetic.ts +2 -2
- package/src/domains/dispatch/active-route-planner.ts +2 -2
- package/src/domains/dispatch/admission-error.ts +9 -0
- package/src/domains/dispatch/admission.ts +22 -21
- package/src/domains/dispatch/agent-candidates.ts +1 -1
- package/src/domains/dispatch/agent-ledger-store.ts +1 -1
- package/src/domains/dispatch/agent-ledger.ts +1 -1
- package/src/domains/dispatch/assignment.ts +5 -5
- package/src/domains/dispatch/capacity-lease.ts +23 -6
- package/src/domains/dispatch/code-step.ts +1 -1
- package/src/domains/dispatch/contract.ts +2 -2
- package/src/domains/dispatch/council-topology.ts +398 -0
- package/src/domains/dispatch/extension.ts +287 -111
- package/src/domains/dispatch/fleet-node-prompt.ts +62 -0
- package/src/domains/dispatch/fleet-plan.ts +7 -2
- package/src/domains/dispatch/fleet-preflight.ts +8 -17
- package/src/domains/dispatch/fleet-run.ts +59 -3
- package/src/domains/dispatch/gate-decisions.ts +36 -15
- package/src/domains/dispatch/gate-role-prompts.ts +9 -0
- package/src/domains/dispatch/gate-topology.ts +289 -0
- package/src/domains/dispatch/index.ts +19 -0
- package/src/domains/dispatch/intent-compatibility.ts +330 -0
- package/src/domains/dispatch/intent.ts +85 -1
- package/src/domains/dispatch/joint-route-resolver.ts +1 -1
- package/src/domains/dispatch/path-scope.ts +0 -61
- package/src/domains/dispatch/placement.ts +2 -2
- package/src/domains/dispatch/receipt-findings.ts +1 -1
- package/src/domains/dispatch/receipt-integrity.ts +20 -8
- package/src/domains/dispatch/reservation-store.ts +24 -27
- package/src/domains/dispatch/route-decision.ts +1 -1
- package/src/domains/dispatch/route-history.ts +1 -1
- package/src/domains/dispatch/route-policy.ts +1 -1
- package/src/domains/dispatch/route-readiness.ts +0 -28
- package/src/domains/dispatch/run-event-journal-bridge.ts +149 -0
- package/src/domains/dispatch/run-event-journal.ts +599 -0
- package/src/domains/dispatch/state.ts +45 -1
- package/src/domains/dispatch/tool-stats.ts +1 -1
- package/src/domains/dispatch/transport.ts +2 -19
- package/src/domains/dispatch/types.ts +16 -3
- package/src/domains/dispatch/validation.ts +33 -8
- package/src/domains/dispatch/worker-protocol.ts +2 -2
- package/src/domains/eval/artifacts/store.ts +5 -4
- package/src/domains/eval/compare/compare.ts +3 -16
- package/src/domains/eval/compare/thresholds.ts +0 -8
- package/src/domains/eval/execution-provenance.ts +1 -1
- package/src/domains/eval/inventory.ts +113 -0
- package/src/domains/eval/metrics/token-stream.ts +0 -7
- package/src/domains/eval/report.ts +1 -1
- package/src/domains/eval/runner.ts +1 -1
- package/src/domains/eval/runners/clio-run.ts +7 -6
- package/src/domains/eval/runners/external-command.ts +4 -3
- package/src/domains/eval/schema/artifact.ts +1 -1
- package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
- package/src/domains/eval/schema/behavioral.ts +7 -6
- package/src/domains/eval/schema/execution-envelope.ts +4 -2
- package/src/domains/eval/schema/naming.ts +10 -0
- package/src/domains/eval/schema/serving.ts +31 -0
- package/src/domains/eval/schema/suite.ts +2 -2
- package/src/domains/eval/schema/validate.ts +9 -5
- package/src/domains/eval/schema/verdict.ts +4 -2
- package/src/domains/eval/store.ts +12 -2
- package/src/domains/eval/suites/run.ts +12 -6
- package/src/domains/eval/types.ts +1 -1
- package/src/domains/eval/workspaces/git.ts +1 -1
- package/src/domains/eval/workspaces/temp-copy.ts +1 -1
- package/src/domains/evidence/build.ts +13 -5
- package/src/domains/evidence/store.ts +6 -0
- package/src/domains/interop/consent.ts +7 -7
- package/src/domains/interop/extension.ts +1 -1
- package/src/domains/lifecycle/doctor.ts +27 -21
- package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
- package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
- package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
- package/src/domains/lifecycle/migrations/index.ts +20 -1
- package/src/domains/lifecycle/naming-history.ts +153 -0
- package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
- package/src/domains/lifecycle/naming-resources.ts +261 -0
- package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
- package/src/domains/lifecycle/naming-yazi.ts +81 -0
- package/src/domains/lifecycle/upgrade-notice.ts +1 -1
- package/src/domains/memory/index.ts +0 -1
- package/src/domains/memory/task-memory-handoff.ts +6 -3
- package/src/domains/memory/task-memory-policy.ts +6 -10
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- package/src/domains/middleware/index.ts +7 -0
- package/src/domains/middleware/marketplace-offer.ts +339 -0
- package/src/domains/middleware/memory-intervention.ts +33 -21
- package/src/domains/middleware/runtime.ts +2 -2
- package/src/domains/mux/contract.ts +566 -0
- package/src/domains/mux/detect.ts +182 -0
- package/src/domains/mux/dock-controller.ts +365 -0
- package/src/domains/mux/extension.ts +53 -0
- package/src/domains/mux/index.ts +116 -0
- package/src/domains/mux/manifest.ts +6 -0
- package/src/domains/mux/operations.ts +192 -0
- package/src/domains/mux/pane-registry.ts +90 -0
- package/src/domains/mux/protocol.ts +62 -0
- package/src/domains/mux/socket-client.ts +964 -0
- package/src/domains/mux/types.ts +265 -0
- package/src/domains/mux/viewer-command.ts +59 -0
- package/src/domains/mux/yazi/assets/init.lua +2 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/LICENSE +21 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/README.md +78 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/main.lua +255 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/types.lua +12 -0
- package/src/domains/mux/yazi/assets/yazi.toml +17 -0
- package/src/domains/mux/yazi/event-stream.ts +182 -0
- package/src/domains/mux/yazi/profile.ts +299 -0
- package/src/domains/mux/yazi/session.ts +251 -0
- package/src/domains/mux/yazi/theme.ts +30 -0
- package/src/domains/observability/cost.ts +21 -0
- package/src/domains/observability/extension.ts +1 -1
- package/src/domains/observability/index.ts +2 -0
- package/src/domains/observability/out-of-turn-usage.ts +2 -2
- package/src/domains/observability/projection.ts +1 -1
- package/src/domains/observability/trace-store.ts +63 -11
- package/src/domains/prompts/compiler.ts +2 -2
- package/src/domains/prompts/extension.ts +3 -3
- package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
- package/src/domains/prompts/fragments/operating/skills.md +25 -18
- package/src/domains/providers/endpoint-capacity.ts +154 -22
- package/src/domains/providers/endpoint-slots-store.ts +189 -0
- package/src/domains/providers/extension.ts +25 -8
- package/src/domains/providers/index.ts +22 -0
- package/src/domains/providers/knowledge-base-path.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +46 -2
- package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
- package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +4 -4
- package/src/domains/providers/plugins.ts +1 -1
- package/src/domains/providers/resolver.ts +1 -1
- package/src/domains/providers/runtimes/boot-manifest.ts +1 -0
- package/src/domains/providers/runtimes/builtins.ts +2 -0
- package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
- package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
- package/src/domains/providers/runtimes/common/probe-helpers.ts +2 -2
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
- package/src/domains/providers/runtimes/protocol/litellm.ts +285 -0
- package/src/domains/providers/support.ts +1 -0
- package/src/domains/providers/target-model-cache.ts +124 -0
- package/src/domains/providers/types/knowledge-base.ts +13 -0
- package/src/domains/providers/types/local-model-quirks.ts +2 -2
- package/src/domains/providers/types/target-descriptor.ts +3 -3
- package/src/domains/resources/extension.ts +1 -1
- package/src/domains/resources/index.ts +3 -0
- package/src/domains/resources/library.ts +6 -6
- package/src/domains/resources/prompts/loader.ts +1 -1
- package/src/domains/resources/skills/content-hash.ts +7 -6
- package/src/domains/resources/skills/evals.ts +1 -1
- package/src/domains/resources/skills/install.ts +36 -12
- package/src/domains/resources/skills/loader.ts +72 -13
- package/src/domains/resources/skills/marketplace.ts +21 -2
- package/src/domains/resources/skills/promotion.ts +214 -0
- package/src/domains/safety/action-classifier.ts +6 -0
- package/src/domains/safety/audit.ts +2 -2
- package/src/domains/safety/finish-contract.ts +2 -1
- package/src/domains/safety/run-effects.ts +1 -1
- package/src/domains/scheduling/extension.ts +4 -4
- package/src/domains/session/archive-readers.ts +9 -1
- package/src/domains/session/compaction/branch-summary.ts +4 -0
- package/src/domains/session/compaction/compact.ts +1 -1
- package/src/domains/session/compaction/tokens.ts +4 -0
- package/src/domains/session/context-accounting.ts +1 -1
- package/src/domains/session/decision-board.ts +1 -1
- package/src/domains/session/extension.ts +1 -1
- package/src/domains/session/handoff.ts +2 -2
- package/src/domains/session/prompt-manifest.ts +0 -5
- package/src/domains/session/protected-artifact-journal.ts +12 -6
- package/src/domains/session/retry.ts +1 -1
- package/src/domains/share/archive.ts +85 -36
- package/src/domains/toolchain/archive.ts +175 -0
- package/src/domains/toolchain/contract.ts +28 -0
- package/src/domains/toolchain/extension.ts +47 -0
- package/src/domains/toolchain/index.ts +39 -0
- package/src/domains/toolchain/install.ts +327 -0
- package/src/domains/toolchain/manifest.ts +8 -0
- package/src/domains/toolchain/paths.ts +34 -0
- package/src/domains/toolchain/registry.ts +265 -0
- package/src/domains/toolchain/remove.ts +218 -0
- package/src/domains/toolchain/resolve.ts +182 -0
- package/src/domains/toolchain/types.ts +113 -0
- package/src/domains/toolchain/version.ts +88 -0
- package/src/engine/acp/adapter.ts +3 -3
- package/src/engine/acp/event-mapper.ts +3 -3
- package/src/engine/acp/server.ts +440 -96
- package/src/engine/acp/tool-mediator.ts +2 -2
- package/src/engine/acp/types.ts +20 -2
- package/src/engine/alcf-oauth.ts +5 -5
- package/src/engine/antigravity/subprocess-runtime.ts +2 -2
- package/src/engine/api-registry.ts +1 -1
- package/src/engine/apis/llamacpp-residency.ts +1 -19
- package/src/engine/apis/lmstudio.ts +1 -6
- package/src/engine/apis/ollama-native.ts +3 -3
- package/src/engine/apis/openai-completions.ts +2 -2
- package/src/engine/apis/residency.ts +3 -9
- package/src/engine/claude/sdk-module.ts +87 -0
- package/src/engine/claude/sdk-runtime.ts +25 -17
- package/src/engine/claude/subprocess-runtime.ts +1 -1
- package/src/engine/claude/tool-safety.ts +4 -4
- package/src/engine/loop-guard.ts +0 -5
- package/src/engine/session.ts +14 -7
- package/src/engine/tui-primitives.ts +21 -0
- package/src/engine/tui.ts +1 -0
- package/src/engine/worker-events.ts +6 -6
- package/src/engine/worker-runtime.ts +16 -26
- package/src/entry/boot-options.ts +2 -0
- package/src/entry/orchestrator.ts +207 -90
- package/src/entry/panes-activation.ts +31 -0
- package/src/entry/with-panes.ts +20 -0
- package/src/interactive/application-controller.ts +21 -21
- package/src/interactive/bus-notices.ts +2 -2
- package/src/interactive/chat-loop.ts +8 -8
- package/src/interactive/chat-panel.ts +1 -1
- package/src/interactive/clio-editor.ts +105 -1
- package/src/interactive/context-activity.ts +8 -6
- package/src/interactive/context-meter.ts +3 -6
- package/src/interactive/context-overlay.ts +2 -1
- package/src/interactive/cost-overlay.ts +3 -1
- package/src/interactive/council-grid.ts +3 -5
- package/src/interactive/council.ts +11 -0
- package/src/interactive/dispatch-board.ts +56 -49
- package/src/interactive/editor-bash.ts +21 -0
- package/src/interactive/editor-steer.ts +9 -4
- package/src/interactive/editor-submit.ts +24 -18
- package/src/interactive/external-editor.ts +1 -1
- package/src/interactive/file-reference-completion.ts +360 -0
- package/src/interactive/footer/dashboard.ts +15 -17
- package/src/interactive/footer/notifications.ts +14 -8
- package/src/interactive/footer/widgets.ts +2 -44
- package/src/interactive/interactive-application.ts +229 -62
- package/src/interactive/interactive-event-projection.ts +1 -1
- package/src/interactive/interactive-input-runtime.ts +9 -2
- package/src/interactive/interactive-presentation.ts +21 -16
- package/src/interactive/interactive-shell.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +99 -23
- package/src/interactive/interactive-subscriptions.ts +1 -1
- package/src/interactive/interactive-tickers.ts +1 -1
- package/src/interactive/keybinding-manager.ts +4 -4
- package/src/interactive/layout.ts +1 -1
- package/src/interactive/memory-overlay.ts +3 -2
- package/src/interactive/modal-marker.ts +151 -0
- package/src/interactive/mutation-preview.ts +1 -1
- package/src/interactive/mux-bridge.ts +214 -0
- package/src/interactive/overlay-frame.ts +62 -14
- package/src/interactive/overlay-general-openers.ts +7 -2
- package/src/interactive/overlay-key-routing.ts +21 -10
- package/src/interactive/overlay-lifecycle.ts +20 -4
- package/src/interactive/overlay-model-selectors.ts +43 -6
- package/src/interactive/overlay-permission-lifecycle.ts +90 -22
- package/src/interactive/overlay-transitions.ts +18 -4
- package/src/interactive/overlays/agents.ts +3 -2
- package/src/interactive/overlays/ask-user.ts +161 -41
- package/src/interactive/overlays/auth-dialog.ts +1 -0
- package/src/interactive/overlays/context-reset.ts +29 -4
- package/src/interactive/overlays/cwd-fallback.ts +29 -4
- package/src/interactive/overlays/decisions.ts +15 -13
- package/src/interactive/overlays/extensions.ts +1 -0
- package/src/interactive/overlays/fleet-run-approval.ts +4 -3
- package/src/interactive/overlays/handoff-review.ts +3 -2
- package/src/interactive/overlays/help-reference.ts +2 -0
- package/src/interactive/overlays/interop.ts +2 -1
- package/src/interactive/overlays/library-install-confirm.ts +2 -1
- package/src/interactive/overlays/library-tabs.ts +28 -0
- package/src/interactive/overlays/list-overlay.ts +10 -1
- package/src/interactive/overlays/message-picker.ts +2 -1
- package/src/interactive/overlays/model-scope.ts +86 -0
- package/src/interactive/overlays/model-selector.ts +40 -31
- package/src/interactive/overlays/prompts.ts +11 -4
- package/src/interactive/overlays/session-selector.ts +3 -2
- package/src/interactive/overlays/settings-sections.ts +30 -0
- package/src/interactive/overlays/settings.ts +849 -268
- package/src/interactive/overlays/side-question.ts +3 -2
- package/src/interactive/overlays/skills-hub.ts +11 -19
- package/src/interactive/overlays/tree-selector.ts +3 -2
- package/src/interactive/pane-policy.ts +46 -0
- package/src/interactive/panes-runtime.ts +318 -0
- package/src/interactive/permission-overlay.ts +2 -2
- package/src/interactive/renderers/compaction-summary.ts +29 -0
- package/src/interactive/renderers/retry-status.ts +12 -4
- package/src/interactive/renderers/tool-execution.ts +4 -4
- package/src/interactive/renderers/worker-entry.ts +122 -14
- package/src/interactive/session-transcript.ts +3 -3
- package/src/interactive/slash-autocomplete.ts +454 -165
- package/src/interactive/slash-commands.ts +521 -189
- package/src/interactive/slash-spec.ts +160 -17
- package/src/interactive/status/controller.ts +2 -2
- package/src/interactive/stream-pacing-policy.ts +1 -1
- package/src/interactive/tasks-overlay.ts +21 -13
- package/src/interactive/terminal-lease.ts +6 -7
- package/src/interactive/theme/tokens.ts +3 -14
- package/src/interactive/turn-context.ts +58 -13
- package/src/interactive/turn-persistence.ts +2 -2
- package/src/interactive/turn-prewarm.ts +2 -2
- package/src/interactive/turn-runtime.ts +8 -8
- package/src/interactive/turn-state.ts +1 -1
- package/src/interactive/view/artifacts.ts +120 -9
- package/src/interactive/view/view-overlay.ts +14 -10
- package/src/interactive/watch-pane.ts +180 -0
- package/src/interactive/welcome-dashboard.ts +15 -15
- package/src/interactive/worker-progress.ts +11 -5
- package/src/interactive/worker-receipts.ts +20 -2
- package/src/interactive/worker-stream.ts +6 -4
- package/src/interactive/yazi-bridge.ts +451 -0
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/bootstrap.ts +26 -2
- package/src/tools/builtin-tool-catalog.ts +16 -1
- package/src/tools/compete-worktrees.ts +108 -17
- package/src/tools/context/index.ts +15 -1
- package/src/tools/core-bootstrap.ts +2 -1
- package/src/tools/dispatch-admission.ts +18 -5
- package/src/tools/dispatch-arguments.ts +21 -21
- package/src/tools/dispatch-plan.ts +0 -11
- package/src/tools/dispatch-run-events.ts +145 -28
- package/src/tools/dispatch-runner.ts +40 -13
- package/src/tools/dispatch-types.ts +15 -3
- package/src/tools/dispatch.ts +2 -2
- package/src/tools/executables.ts +17 -14
- package/src/tools/find.ts +1 -6
- package/src/tools/monitor.ts +4 -4
- package/src/tools/observation.ts +54 -4
- package/src/tools/observers.ts +0 -33
- package/src/tools/panes-surface.ts +38 -0
- package/src/tools/panes.ts +112 -0
- package/src/tools/policy.ts +10 -1
- package/src/tools/presentation.ts +1 -0
- package/src/tools/task-worktree.ts +28 -7
- package/src/tools/verify/authoring.ts +3 -6
- package/src/tools/verify/frontend.ts +1 -1
- package/src/tools/web-fetch.ts +1 -1
- package/src/worker/entry.ts +4 -3
- package/src/worker/protocol.ts +16 -14
- package/src/worker/spec-contract.ts +2 -2
- package/src/worker/stdin-demux.ts +2 -2
- package/dist/chunk-D73KXYPF.js +0 -37
- package/dist/chunk-MLOK6ZOS.js +0 -2888
- package/dist/chunk-PNY46YEY.js +0 -1581
- package/dist/chunk-XDOQXGFO.js +0 -515
- package/dist/chunk-YKOFT37S.js +0 -279
- package/dist/clio-LT5V7SSZ.js +0 -26
- package/dist/configure-2WYWSCSD.js +0 -49
- package/dist/doctor-TWBWFK5V.js +0 -165
- package/src/engine/apis/degraded-inference.ts +0 -95
- /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
- /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,98 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to Clio Coder are documented in this file. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and versions follow Semantic Versioning; pre-1.0 minor releases may include incompatible changes.
|
|
4
4
|
|
|
5
|
+
## 0.4.1 - 2026-09-01
|
|
6
|
+
|
|
7
|
+
This grew beyond the bug-fix-only patch originally planned. v0.4.1 is a full release led by the version-2 `settings.yaml` contract, its automatic migration, and a smaller grammar-driven slash-command surface. It adds editor and marketplace workflows; fixes the release-blocking configuration, CLI, TUI, and Workbench failures found in final testing; replaces the oversized test and CI machinery with one fast deterministic gate; consolidates evaluation around the shipping eval domain and `evals/` reference suites; and moves machine-facing names into the `clio-coder` namespace without changing the product persona.
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
- `settings.yaml` is now a strict version-2 document organized around `chat`, `fleet`, `targets`, `context`, `safety`, `interface`, and `integrations`. `clio-coder upgrade` automatically runs the one-time v1 transformation before the strict config domain loads, validates the complete result in memory, refuses source/destination collisions without touching the original, writes atomically, preserves a sibling `settings.yaml.v1.bak`, and records the moved and retired paths in a migration report. Version-2 files execute only canonical paths; old spellings are non-executing tombstones with replacement guidance rather than permanent aliases.
|
|
11
|
+
- Panes, docks, and Yazi integration are experimental and opt-in: fresh homes keep pane mode, layout, and files off, diagnostics stay neutral while they are off, and migration preserves explicit v1 choices.
|
|
12
|
+
- The slash registry now has an explicit `Work`, `Inspect`, `Configure`, and `Session` order and seven canonical Settings deep links: `/settings chat|fleet|targets|context|safety|interface|integrations`. Resource browsing is consolidated under `/resources skills|prompts|library|extensions`; `/library`, `/prompts`, and `/extensions` now stop with targeted `/resources` guidance, while `/targets` points to `/settings targets` and `/scoped-models` to `/settings chat model-picker`. Other split or renamed surfaces follow the same non-executing-tombstone rule, including `/agents connect`, `/archive import|export`, and `/context compact` replacing their retired spellings.
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
- Grammar-aware slash autocomplete now follows the same command specifications used for parsing. It completes commands, subcommands, flags, closed values, and Settings areas; replaces the token under the cursor without discarding suffix text; respects quotes and explicit command order; exposes structured submenus; suppresses submit-ready exact matches; and generation-checks asynchronous results so stale suggestions cannot overwrite a newer prefix.
|
|
16
|
+
- Typing `@` in ordinary editor text opens a workspace-aware file picker with relative paths, metadata, and previews, then inserts the selected `@path` reference into the draft. File-reference spellings are kept distinct from steer targets, and explicit path completion shares the same cursor-aware replacement behavior.
|
|
17
|
+
- The editor's existing bang operators now have an enforceable public/private boundary. `!command` remains part of later model context, while `!!command` runs visibly but its command and output are excluded from replay, token accounting, and compaction summaries and are marked model-private in evidence. Multiline bracketed pastes beginning with `!` or `!!` remain literal user text through Enter, alternate-send keys, interrupts, and subsequent edits instead of arming shell execution.
|
|
18
|
+
- Marketplace self-promotion can locally match an operator request to an uninstalled catalog skill using the shipped catalog's new `triggers` metadata plus a conservative description-token fallback; request text never leaves the process. The coordinator can offer project or user installation, remember “Not now” for the session, or persist “Never offer” by skill name and version. Full-auto may install at project scope, but every consented or autonomous promotion install passes a hard runtime gate that accepts only Clio's shipped catalog or the `iowarp/clio-coder` repository tree; public registries and foreign GitHub sources are refused before installation. Offers are coordinator-only, source and content hash remain visible on autonomous installs, and installation never activates the skill for the model.
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
- Fleet CLI help and missing-journal diagnostics name the version-2 `fleet.history.journal` setting instead of its retired `panes.journal` spelling.
|
|
22
|
+
- Marketplace-offer middleware caches installed and catalog skill inventory per session, revalidating only before a real offer, so ordinary `turn_start` evaluation no longer reparses every skill on every turn.
|
|
23
|
+
- Model-picker `[Enter] use` now leaves the session/global confirmation open and applies the selected target/model binding after the operator chooses a scope.
|
|
24
|
+
- The two settings-v2 release blockers found by black-box testing are closed. A migrated v1 home no longer crashes while reading `target`, and a fresh v2 home no longer crashes while reading `agents` or `target`; both reach diagnostics and the interactive editor. The real built-binary matrix passed once at `616b10a2` and was repeated at `9959652c`, including v1 upgrade, empty-home onboarding, all seven Settings deep links, retired-command tombstones, autocomplete, file references, bang context exclusion, paste inertness, and marketplace flows.
|
|
25
|
+
- The SOL-01 through SOL-03 smoke failures are fixed: plain `clio-coder doctor` is read-only unless `--fix` is supplied; absent trace storage preserves JSON contracts for `trace runs --json` and `trace prune --json`; and command, argument, and read-only SQL validation now runs before trace storage opens.
|
|
26
|
+
- The SOL-04 through SOL-07 smoke failures are fixed: Ctrl+C during `clio-coder configure` reports cancellation and exits 130; cancelled first-run onboarding stops instead of entering an unconfigured TUI; `fleet view --help` prints view-specific usage; and non-follow fleet snapshots contain no stray ANSI reset bytes under `NO_COLOR`.
|
|
27
|
+
- Operator-facing TUI prose now wraps to the available width instead of silently losing remedy text across interviews, context and cwd choices, task/evidence reasons, notifications, model diagnostics, decisions, artifacts, dispatch cards, and fleet snapshots. Retry errors preserve normal provider remedies while bounding runaway bodies at 2,000 Unicode characters with an explicit truncation marker.
|
|
28
|
+
- The Settings Center now owns narrow screens without transcript bleed-through, expands help into otherwise unused rows, and hides parent controls while a submenu owns input. Narrow prompt-template columns have a real gap and no duplicated argument synopsis, while long skill-suggestion descriptions end with an explicit truncation marker.
|
|
29
|
+
- Workbench permission handling now uses one host-clock domain for expiry and escalation, honors the earlier of ACP and Workbench deadlines, escalates immediately when the remaining window is shorter than the delay, cancels already-expired requests without publishing an invalid card, and serializes `resolvePermission`, `cancelTurn`, and `abandon` with turn closure.
|
|
30
|
+
- The interactive Fleet settled notice now uses the shared provenance-aware cost formatter, reporting an entirely unpriced run as `not measured` and preserving estimated or partly priced provenance instead of presenting an invented measured `$0.0000`.
|
|
31
|
+
|
|
32
|
+
### Test-suite diet
|
|
33
|
+
- The automated suite was rebuilt from 557 files and 183,969 physical lines into 35 behavior-focused files and 5,179 lines at the diet landing: 30 contract suites cover the boundaries, lifecycles, migrations, and integrity properties that can break the product, while five smoke suites exercise the CLI, ACP, process lifecycle, installed package, and real binary. The custom 24-lane shard runner, its timing weights and serial lane, repeat/shuffle machinery, test-only seams, and most harness scaffolding are gone; `npm test` is now a plain `node --test` invocation and the warm suite measures about 21.3 seconds. The weekly `flake-hunt` workflow retired with the timing- and order-flake machinery it existed to exercise.
|
|
34
|
+
|
|
35
|
+
### CI modernization
|
|
36
|
+
- Push and pull-request CI is one Node 22 job that installs once and runs `npm run ci:release`; the tag-only release workflow independently reruns that same gate before packaging. The rebuilt workflow was verified green on GitHub Actions in 1m48s, down from 7m32s for the preceding successful main-branch run. There is no shard matrix, repeat lane, weekly flake hunt, or eval baseline in either CI or the release gate.
|
|
37
|
+
|
|
38
|
+
### Eval consolidation
|
|
39
|
+
- Clio Coder now ships one evaluation system: the product engine under `src/domains/eval/` owns suites, execution, verdicts, artifacts, comparison, and reporting, and the maintained runnable reference suites ship under `evals/`. The parallel `benchmarks/` tree and its internal campaign harness are retired to `archive/v041-pre-diet`; future external-benchmark adapters enter through the eval engine rather than creating another stack. Evals remain explicit operator-run measurements and do not run in ordinary CI or release gates.
|
|
40
|
+
|
|
41
|
+
### Clio Coder naming migration
|
|
42
|
+
- Machine-facing identifiers now follow one syntax-aware Clio Coder namespace: `clio-coder` for paths, package and manifest names, schema and event identifiers, tags, and Git refs; `clio_coder` where underscores are required; and `CLIO_CODER` for environment variables. Existing homes receive one idempotent `2026-09-01-clio-coder-naming` migration recorded in `migrations.json`, with an atomic settings backup and a detailed migration report. Canonical writers use the new names immediately, while readers accept released legacy names through the two-minor v0.5/v0.6 compatibility window and preserve longer read support where sealed artifacts, exported archives, host panes, or published Git refs require it. The Clio product persona and its operator-facing identity text are unchanged.
|
|
43
|
+
|
|
44
|
+
## 0.4.0 - 2026-08-31
|
|
45
|
+
|
|
46
|
+
### Added
|
|
47
|
+
- ACP clients can discover Clio's existing terminal setup flow directly from `initialize`: the server advertises `clio-login` as a terminal authentication method with `auth login` arguments. Editors and generic ACP launchers can also start the same dynamically dispatched, stdout-clean server path with the global `clio-coder --acp` alias; the canonical `clio-coder acp` command remains unchanged.
|
|
48
|
+
- Clio can vendor pinned external programs through one registry instead of hunting them on `PATH` (`clio-coder tools list|status|install|remove <id>`, with `clio-coder panes install` as an alias for herdr). The registry pins herdr 0.8.2, yazi 26.8.15 and croc 11.3.6 with a per-platform url and sha256, license, binary names and a minimum acceptable `PATH` version, and every caller shares one resolution ladder of `PATH`, then vendored, then none, through `resolveBinary(name)`. Clio bundles none of them: nothing is downloaded until an operator asks, nothing reaches the filesystem before the checksum matches (side documents included, so a tampered LICENSE refuses as loudly as a tampered binary), and each version directory keeps the upstream license text plus a `clio-install.json` recording what was fetched. Installs are atomic through a staging directory renamed into place, and `--force` parks the old version rather than unlinking it, so a failed replacement restores what was there. Archive reading is self-contained on `node:zlib` rather than shelling out to `unzip` and `tar`, which fail on exactly the machine a vendored-tool installer exists to serve. herdr, yazi and croc each declare linux-x64, linux-arm64, darwin-x64 and darwin-arm64, and yazi and croc add win32-x64; croc's Windows hash is confirmed against upstream's own checksums file, and both Windows assets were installed end to end through the real installer, though neither has been executed on Windows. herdr declares no Windows asset even though it publishes one: alongside `herdr.exe` that zip carries a ConPTY runtime that has to sit in a subdirectory beside the executable, and the installer places every declared member flat under its basename, so the entry would produce an install that verifies and unpacks cleanly and cannot run. A `PATH` copy is accepted only above the registry's floor, and a floor moves on measurement and on nothing else: croc floors at 11.0.0 because it negotiates its relay protocol by major version; herdr floors at 0.7.5, the oldest release whose `herdr api schema --json` was actually read, because every method Clio's mux domain sends exists in both 0.7.5 (protocol 17) and the 0.8.2 pin (protocol 20), the only two methods 0.8.2 adds are ones Clio never sends, and the two non-universal methods are already gated at runtime by protocol number, so the registry had been stricter than the surface it guards; yazi stays at its pin because no equivalent measurement exists, since `ya emit-to` matches at 26.1.22 but the generated profile and the DDS pick payloads were never driven there and a profile mismatch degrades into a file manager that opens and quietly does the wrong thing. A rejection that felt noisy is not evidence, and a floor lowered without one is the kind of failure that reads as a bug in the feature. The cost of a floor is now legible instead of silent: a rejected `PATH` copy is never reported as a missing binary, and every render of a rejection names the binary found, the version it reported, and the floor it missed. The install command is offered exactly where installing would change something, so a tool that already has a vendored copy says Clio runs that copy instead, and a platform with no pinned asset names no dead-end command. `clio-coder tools status` carries the same rejection as its own line plus `floorRejection`, `remedy` and `installedVersions` fields under `--json`. `clio-coder doctor` reports one row per registry entry through the same sentence, and no row can fail an install, because every pinned tool is optional.
|
|
49
|
+
- A vendored tool can be removed, and a pin bump no longer leaves the version it replaced on disk. `clio-coder tools remove <id>` deletes every vendored version of one tool and the tool's own directory, refuses an id the registry does not know while naming the ids that exist, and is a successful no-op with a clear message when nothing is installed. It needs no confirmation because everything it unlinks lives under `<data>/tools/<id>`, which Clio created by downloading it, so the worst outcome is a re-download of bytes the registry pins by checksum. A successful install then prunes: superseded versions of the same tool are deleted and named in the result and the output, including on the already-installed path, which repairs a machine that bumped pins before this existed. `clio-coder tools remove --all` sweeps every row in the registry, counting the tools that had nothing vendored rather than listing them and taking the worst exit code across them; `--all` alongside an id is refused rather than resolved by precedence, and `--all` on any other verb is refused rather than ignored, because a silently dropped flag would let `tools install --all` read as a request that was honored. A dot-prefixed staging directory is left alone while it could still belong to a live installer and swept once it is an hour old, which is the one signal that means the same thing on every machine: the installer downloads and verifies every checksum before it creates that directory, so a stale one is the remains of an install that was killed, and a removal that finds a fresh one leaves the tool directory in place rather than destroying the install it belongs to.
|
|
50
|
+
- Clio gains a pane layer that drives a herdr session it is already running inside, and degrades to exactly today's behavior everywhere else (`/panes show|open|close`, a `panes` tool, five `doctor` rows, and a `panes` settings group under Fleet). Detection is a three-condition ladder of `HERDR_ENV=1`, then a connectable socket in a fixed candidate order, then a ping answered inside one second, and the order is what makes the off path free: with `HERDR_ENV` unset nothing opens a descriptor. **Guest mode only.** `panes.enabled` accepts `auto`, `embedded` and `off`, but `embedded` resolves to none with the reason `embedded mode is not implemented yet; it ships in phase 5`, so Clio never starts a pane host of its own. The dispatch bridge subscribes to the five dispatch lifecycle channels plus interactive status, folds each run into a display record, and projects those records on a trailing-edge 250ms throttle, because herdr answers one request per connection and a call per event would open a socket per event; a fifty-event burst produces one pane update. The open decision is made at flush time rather than at start time, which is what lets `panes.agents = auto` cover detached batches and attach-to-background conversions without racing the durable record that names them, and what lets a run backgrounded halfway through acquire a pane then. A terminal run that never had a pane never gets one; `panes.keepFailed` governs whether an existing pane outlives its run. Run state maps to `working`, `blocked` for an unresolved permission escalation, and `idle` with a `state_labels` override reading "review ready" on terminal. Every mux method is best-effort: a wedged herdr server degrades `available()` to false for a five second cooldown and can never fail a dispatch or surface as a run error. Pane ownership is enforced both by a registry of the panes Clio created and by a `clio_owner` metadata token, so `doctor` can find orphans. `/panes open` takes a preset or operator argv, told apart at parse time, and probes a preset's binary through the toolchain ladder before splitting the pane, so a missing program becomes an install hint rather than a pane that dies the instant it appears. The `panes` tool is registered only when detection answered, so it is absent from the prompt on a machine with no pane host, and its `open` accepts a closed preset enum, refusing a fabricated `argv` field loudly. `panes.enabled` is restart-scoped in the Settings Center because the detection ladder runs once at boot. Terminal-state toasts under `panes.notifications` are implemented but their failure path is not verified against a live host.
|
|
51
|
+
- A pane can now be a file picker whose selections come back into the prompt, governed by four live `panes.yazi` keys (`enabled`, `mode`, `profile`, `followCwd`) surfaced together under Terminal. Clio generates its own yazi profile in an isolated cache directory from its theme tokens and a vendored `git.yazi` plugin, stamping every compatibility input and validating the emitted TOML before a pane consumes it, so the operator's own yazi configuration stays outside Clio's read and write set and a malformed generated file cannot leave an interactive pane blocked on a prompt. `doctor` and `tools status` report the profile state, so the separation is visible and only the reproducible cache can be reset. The emitted bytes, the legal theme keys and the unused pick chord are pinned against the upstream 26.8.15 presets, so a future yazi pin bump fails in contracts rather than in a session. Picks return over yazi's DDS stream rather than through a chooser file, because yazi exits on its first non-interactive open and a chooser file therefore cannot support a long-lived companion; the pane's DDS stdout is redirected through the existing mux exec delivery and tailed as a bounded stream, and the session learns its instance id from startup `cd` events so cwd can be pushed later. **The remote event ability is treated as untrusted local input.** Every companion carries a random token, and the bridge rejects and counts custom lines that do not echo it before any text reaches the draft; valid selections are deduplicated, bounded, rendered as safe mentions only when Clio can consume them, and appended with no submit capability. Chooser mode remains the operational fallback: a missing startup stream closes the suspect pane and falls back to it, and `profile: user` forces token-free chooser mode outright. The bridge attaches to the Phase 3 panes runtime rather than adding a competing slash implementation, so `/panes` reports mode, cwd, stream freshness and rejected DDS traffic, and `--once` carries through the parser. A mux contract that resolved to none still composes operator pane operations while leaving the model tool unregistered, so the same command lends the terminal to yazi under the TUI lease, restores the screen, and feeds chooser results through the same formatter the companion picks use, with binary and profile checks finishing before the screen is released. A failed yazi resolution now crosses onto a durable slash transcript block verbatim, install hint included, instead of producing no pane and no explanation.
|
|
52
|
+
- Every dispatched run now writes an append-only NDJSON journal at `<stateDir>/runs/<runId>/events.ndjson`, and `clio-coder fleet view <runId> [--follow]` reads it, so a second terminal can watch a run in flight over plain SSH with no pane host involved. Each line carries a per-run monotonic `seq` and a wall-clock `at`; display-only lines are the only droppable kind, and crossing the 2 MiB per-run cap writes a single `journal_truncated` marker and stops writing them while open, receipt and terminal lines always land. A terminal line closes the run, so a follower has an unambiguous stop signal. Writes batch into one `appendFileSync` per flush, and a write failure turns the journal off for the process after one notice and is invisible to the dispatch. The writer runs off the dispatch domain's own bus rather than off any caller's helper, so it covers `run --agent`, `fleet run`, the TUI `/run` and the model-facing `dispatch` tool alike, attached, detached, batched or retried. **A retried run journals each attempt**, because the domain publishes per attempt. Retention is bound to the ledger ring rather than to a second policy, so the two cannot disagree about how much history exists, and `clio-coder reset --state` already takes it. The viewer authenticates the receipt through `inspectRunReceiptTrustStatus` before showing any of its fields and bounds task text at the terminal boundary. `fleet view` also accepts the `root=fleet-<hex>` identifier `fleet run` advertises, reducing the durable fleet record plus the ledger to a step index with one line per step in planned order, showing steps that never ran without a run id so a fleet that stopped early reads honestly. It is deliberately not a combined transcript, because the durable record carries no interleaving and splicing several runs into one scroll would invent an ordering nothing observed.
|
|
53
|
+
- LiteLLM is a first-class provider runtime rather than something reached over `openai-compat`. A gateway's `/v1/models` is the plain OpenAI listing, so every semantic alias flattened to a bare id and a 262k tool-calling coder behind `code` fell back to the protocol defaults of `tools: false` and an unverified context floor. The runtime reads `/v1/model/info`, where LiteLLM publishes `max_input_tokens`, `supports_function_calling`, `supports_vision`, `supports_reasoning` and the deployment mode per alias, reports the physical model behind each alias in its probe notes, and probes the unauthenticated `/health/liveliness` first so an unreachable gateway is distinguishable from a rejected key. Structured output was measured rather than assumed against a LiteLLM v1.98.0 proxy fronting both a llama.cpp and an LM Studio upstream: standard `json_schema` is enforced through both, `json_object` plus schema is enforced through llama.cpp and refused with HTTP 400 by LM Studio, and `drop_params: true` strips neither because `response_format` is a parameter LiteLLM recognizes and forwards whole. Only `json_schema` is declared, which is what admits contract-bearing workers to a gateway target at all. The runtime also opts into `responseSchemaConflictsWithTools`, conservatively, because whether a schema and a tool surface can constrain one completion is a property of the upstream a runtime id cannot identify. Synthesis forces `gateway: true` regardless of settings, keeping the residency layer observe-only, since the models behind an alias are the proxy's to load and evict. The routed deployment is surfaced from the `x-litellm-*` response headers, because reporting the alias back as the model is how a gateway hides an outage.
|
|
54
|
+
- An ACP client can now build a live fleet board and attribute every frame to the agent that produced it. Five dispatch lifecycle channels join the `clio-coder/event` stream, whose channel list becomes a real allowlist: a client names the kinds it wants at `initialize`, the server intersects that with `ACP_FORWARDABLE_EVENT_KINDS`, and a malformed request still refuses the whole opt-in rather than only the offending entry. What crosses is sanitized. The exact dispatched task never leaves the process, only a control-character-stripped, byte-bounded preview carrying the standard truncation marker, and free-form `outcomeDetail` failure prose stays host side because it legitimately quotes paths, argv and provider bodies. The untyped worker event stream behind `dispatch.progress` is replaced by a capped per-run progress ordinal whose cap is announced by a final truncation frame rather than by going quiet.
|
|
55
|
+
- The workbench consumes that boundary at protocol v4, rendering agent attribution on messages and tool calls and a live fleet strip, so orchestrator work and delegated worker work are distinguishable on screen instead of both reading as the product name.
|
|
56
|
+
- Typed dispatch intent has one migration and refusal policy instead of four files that each answered part of it (#163). `src/domains/dispatch/intent-compatibility.ts` classifies a request into accept, warn, or refuse against a closed set of stable reason codes, and the boundary between warn and refuse is the load-bearing rule: a warning is never the difference between a narrow grant and a wide one, so no compatibility path widens read, write, or verification authority to resolve an ambiguity, and a compatible reading that disagrees with a declared one about what a worker may touch is a refusal rather than the union of the two. Omitted intent stays accepted with a warning, because inferred paths select project rules and compile worker context but can never become a write boundary or add a verification requirement. Refusals are contradiction and uninterpretability: legacy `writeRoots` disagreeing with `intent.write_roots`, a narrowed scope reaching outside the intent it narrows, `write_roots` on a read-only request, an `expected_outputs` entry outside every declared write root (the write boundary would block exactly the artifact the task is required to produce, after a full worker run has been paid for), and an `intent.version` this build does not speak. The supported version set is a membership list rather than a range and nothing is migrated: a reader that accepts "2 or newer" accepts fields it cannot interpret and one that accepts "2 or older" reads a v1 statement about authority under v2 rules, which is the ambiguity typed intent exists to remove. The classifier runs inside `validateJobSpec`, which every producer reaches a worker through, so the rules hold for the fleet, CLI, ACP, and extension paths rather than only for the model-facing tool, and it reads no filesystem, clock, environment, or package layout, so a source checkout and an installed package classify identical input identically. Two authority mismatches that previously ran are now closed: the unproducible expected output above, and a council member inheriting its caller's declared write roots under read-only autonomy, which now arrives with those trees demoted to read roots instead of claiming a write scope nothing enforces. Removing the legacy inference fallback stays a later explicit issue, and it now has a measured gate rather than an argued one: `pathScope.mode` is sealed on every receipt, so `dispatchIntentAdoption()` counts the share of dispatches still resolving policy-bearing scope from prose, reading nothing but that mode field. `docs/dispatch-typed-intent.md` is the published contract, with a row per dispatch producer and per persisted structure.
|
|
57
|
+
- A v4+ fleet contract's per-step `writes:` declaration now reaches project-rule selection and worker context, not only the write-boundary enforcer. The contract had already said what a position may change, and the dispatch request that position produced carried neither typed intent nor `writeRoots`, so scope for a fleet step was still reconstructed by scraping path-like tokens out of the rendered contract prompt. The declaration now compiles into the step's typed intent through `declaredScopeIntent()`, which runs a producer's repository-relative paths through the same normalization, caps, and provenance construction a model-facing declaration goes through, so a contract cannot mint an intent shape the dispatch tool could not. It arrives as `relevant_paths` rather than `write_roots` on purpose: intent write roots become the enforced boundary at the per-tool worker seam, which refuses outright on the subprocess and ACP runtimes a fleet may legitimately route a step to, so restating the contract's boundary there would mint a second grant in a second place and fail closed on contracts that run correctly today. Authority is unchanged; the fleet enforcer keeps owning the boundary. A pre-v4 contract and every readonly step declare nothing and keep the legacy inference path rather than being handed an empty declaration that would quietly switch off path-scoped rule selection for them.
|
|
58
|
+
- An endpoint's discovered parallel slot count now survives the process that learned it. Probe discovery held `probeCapabilities.parallelSlots` in memory only, so every new process started ignorant of a server's real concurrency and priced admission against a default instead.
|
|
59
|
+
- A compete round's candidate worktrees are mapped through herdr when one is driving the session, so each candidate is a workspace an operator can watch instead of a directory only Clio knows about. The mux socket client gains typed `worktree.list|create|open|remove` at protocol floor 10, which is the protocol herdr's own changelog introduces the family at rather than either release currently installed, and Clio omits the optional `trust_repository` field those requests grew at protocol 21 so herdr's default repository-trust policy stays herdr's to set. Creation prefers herdr and then validates that the path and branch it returned are the ones asked for, refusing a workspace opened somewhere else rather than adopting it. Every candidate records how it was made: `backend: herdr` with the workspace id, or `backend: native` with `fallback: mux-unavailable` when no mux is driving and `mux-operation-failed` when a live one refused, and those facts are sealed inside the integrity-verified candidate receipt rather than living only at the mapping boundary, so a competition can be audited after the fact for which candidates herdr actually held. Removal asks herdr to drop a workspace it owns and then always runs the native Git cleanup, which is both the recovery path when a mux is lost mid-competition and the authority that proves the registration, the directory and the branch are gone. A server below the protocol floor is never called, and transport loss degrades to the native path instead of escaping into compete execution.
|
|
60
|
+
- Fleet panes now say what a run is and how it ended, not just that it is running. A pane's role presentation resolves from the gate role first and the agent identity second, and the working and blocked labels follow it: candidates and builders read `building` and `build blocked`, reviewers and judges `reviewing` and `review blocked`, council members `deliberating`, and tester, scout and repair-shaped roles their own pairs, with `running` and `needs input` as the fallback. The idle label carries the outcome rather than the fact of stopping, reading `review ready`, `failed, review`, `timed out, review`, `canceled` or `finished`, so a terminal pane stays distinguishable from an untouched shell. A qualifying failure additionally writes a persistent line into the transcript naming the agent, run, outcome and terminal detail, alongside the existing best-effort herdr toast, and that line is still produced when the mux transport has already gone away, so the auditable signal does not depend on the thing that failed. Both signals stay governed by the existing `panes.notifications` setting. `/panes open` also reconciles immediately: an admitted open is recorded as a pending inventory row before the mux round trip, rendered as `opening`, and cleared when the operation settles, so an inventory read taken while an open is legitimately in flight reports it rather than omitting it.
|
|
61
|
+
- The workbench gains four bounded read surfaces over durable harness state, each following the same shape: a fixed no-argv root command emitting a bounded snapshot, a host adapter demanding the exact key set the command emits, the same bounds revalidated independently in the browser, and a panel that states its own boundary. `clio-coder fleet inspect --json` backs a Runs canvas carrying journal events, receipt trust, outcomes and truncation, and additionally indexes fleet roots so a run's lineage is visible instead of a flat newest-first list; the index rides that same read rather than paying for a second child process, and a step whose run has aged out of the window says so and stays unselectable rather than linking nowhere. `clio-coder tools list --json` backs a Settings instrument that leads with the resolution verdict and names the specific floor a rejected `PATH` copy failed to clear, while installation stays an explicit terminal operation the GUI does not offer. The recovery panel now names every diagnostic check and its verdict rather than reporting only a count, under sections that open themselves on a warning and stay folded when clean. What crosses is deliberately narrow: a finding's name is a fixed check label plus a subject drawn from the ids that already cross elsewhere, and a finding's detail, which quotes settings paths, endpoint URLs, the multiplexer socket and rejected `PATH` copies, stays on the host permanently. Demanding the exact key set in both directions is the load-bearing part, since it makes a harness field addition a loud host-side rejection rather than a silent browser leak. The Runs canvas now joins that durable narrative to `trace inspect --json` accounting from the separate trace store, showing per-run tokens, recorded cost, wall time and phase totals while dropping request text, phase prose, database paths and raw columns, and it distinguishes tracing unavailable, no accounting for this run, and accounting present with an unpriced cost rather than flattening all three to zero. Trace tails and process rows remain host-only by design: SQL crosses only event counts, spans and kind breakdowns plus process counts, live counts and kinds, with both validators proving the aggregates account for themselves, so no event payload, command line, pid or host is ever loaded into the projection. `evidence inventory --json` adds a bounded newest-first bundle inventory that omits tasks, working directories and file names, links only runs still inside the served run window, preserves redaction and tool-call shape, and folds each bundle to the harness's worst canonical trust verdict while naming historical bundles as verdict-less instead of guessing. Detail reads and receipt checks do not reopen the fixed-argv boundary: the browser may echo only an evidence or run id the host served in its current snapshot, the allowlist is replaced rather than widened on refresh, and an unserved, expired, malformed or flag-shaped id is refused before any child process starts. An admitted bundle id opens only the closed-vocabulary per-run trust axes, and an admitted run id may be re-authenticated on demand through `fleet verify <runId> --json`, shown beside rather than in place of the snapshot verdict with the check time and a classified failure cause, so a receipt that was valid when listed can later be reported as changed without carrying a path, digest or thrown message. Council parity is reconstructed from provenance the ledger already seals: a separate bounded council window groups member turns, rounds, judge runs and the zero-cost sealed synthesis row into a topology, while member answers, judge prose and vote tallies never cross and are marked host-only rather than missing. Review and compete outcomes come from their own `fleet decisions --json` read because the integrity-covered gate artifacts have a different store and failure mode; the panel carries the gate kind, closed verdict, graded run ids, classified reason, winner identity where the verdict permits one, and the sealed independence dimensions, counts artifacts that no longer authenticate instead of silently dropping them, and never carries detail prose, branch refs or receipt digests. Settings also gains `interop inspect --json`, a fixed read that names the known coding agents on this machine, whether each is installed, its last recorded version, ACP and adapter availability, standing accept or decline, staleness and whether it is already wired, while deliberately running no foreign executable and carrying no resolved binary, home directory or decision fingerprint; wiring remains an explicit terminal review the GUI does not offer. Fifteen mutation-shaped parity rows are now marked **deferred-by-design** rather than looking like ordinary backlog: installation and credential lifecycle, repair, reset, uninstall, upgrade, fleet authoring and admission, pane installation, sharing and import, extension enablement, handoff, fork and auth operations require a separately designed host-minted intent and confirmation channel before any browser control can change the machine, while mixed rows keep their still-actionable read gaps visible. `apps/workbench/PARITY.md` records the resulting command-by-command baseline so follow-on GUI work cannot overstate what is covered.
|
|
62
|
+
- A modal overlay now says so on the terminal title, so an external driver or herdr's detector can tell that Clio's keyboard is owned before sending keys into it. The grammar is published only while a modal is up, reading `clio [modal:permission-confirm]` for one and `clio [modal:library-install+2]` for a stack, naming the modal that holds the keys and counting the ones beneath it, and `MODAL_MARKER_TITLE_PATTERN` is exported so Clio's contract test and herdr's manifest rule are written against one spelling. The title was chosen over a footer marker because the modals cover the footer: most overlays anchor centre with no height cap and paint over exactly the rows a detector reads, so a footer signal would go quiet on the biggest modals, and a signal that drops out under load is worse than none because it reads as a state change rather than a gap. The title also cannot be counterfeited by a diff or a quoted log line in the transcript, and nothing else in Clio writes it. The claim is taken inside the overlay frame rather than in the overlay lifecycle, which is the one place modality is decided, so nested frames are covered and the marker cannot drift from what is actually on screen; hiding a modal to shell out drops the claim and takes it back on focus. Nothing is written until the first modal opens, which is what makes the absence of a marker a positive statement rather than an unknown. herdr needs no code change to consume it, only a manifest rule and a version bump.
|
|
63
|
+
|
|
64
|
+
- The Workbench Runs canvas can inspect a bounded window of durable fleet runs, journal events, outcomes, truncation, and authenticated receipt trust through the fixed `fleet inspect --json` read, without accepting a browser-supplied run id, path, filter, or argv.
|
|
65
|
+
- Workbench Settings names the external coding agents detected on the machine, their last recorded versions, ACP and adapter availability, standing decisions, staleness, and wiring state through `interop inspect --json`, while running no foreign executable and exposing no resolved binary, home directory, or decision fingerprint.
|
|
66
|
+
- The Workbench capability atlas crosses the declared verification-check plane through `verifiers inspect --json`, reporting each check's origin, toolchain class, fixed-argv authority, argument count, root-versus-subdirectory execution, and classified catalog rejection while keeping the declaration's executable arguments and repository paths host-side.
|
|
67
|
+
- The Workbench Skills atlas now uses `skills inventory --json` to report the whole installed catalog, including untrusted and operator-only skills the model cannot see, with the shared validity verdict and bounded diagnostic counts while keeping skill bodies, paths, hashes, upstream URLs, and diagnostic prose host-side.
|
|
68
|
+
- The Workbench Runs canvas now inventories a bounded newest-first window of evaluation reports through `eval inventory --json`, grouping reports by comparable serving configuration and showing suite outcomes, scenario reductions, coverage, failures, and attachment counts while keeping transcripts, artifact content, native paths, receipt digests, compiled-prompt fingerprints, and metric values host-side.
|
|
69
|
+
|
|
70
|
+
### Changed
|
|
71
|
+
- `@anthropic-ai/claude-agent-sdk` moves to `optionalDependencies`, so a default install no longer pays for a 224MB-per-platform proprietary binary reached from exactly one runtime most operators never enable. Measured on Linux x64 with a production install: 387MB across 118 packages with the SDK against 143MB across 109 packages with `--omit=optional`, a **244MB saving**, and the default install becomes cleanly open-licensed because the binary is not redistributable. The one static value import becomes a lazy `await import()` behind a loader that caches the module, distinguishes a resolution failure from a broken install, and turns absence into a typed error naming the package and the exact install command; it fires at the first line of a `claude-sdk` run, so a missing package reads as an ordinary run failure with a diagnostic rather than a crash in the dispatch path or a boot-time resolution error. `tsup`'s default external set covers dependencies and peer dependencies but not optional ones, so the package is now an explicit external; without that, esbuild would have bundled the SDK and quietly restored the hard requirement. npm also drops the SDK's peer tree from the lockfile, since peers of an optional dependency are themselves optional.
|
|
72
|
+
- The pane layer graduates from its initial auto-detected, per-dispatch design into an explicit first-class mode. `clio-coder --with-panes` enables it for one invocation, `--no-panes` wins over both that flag and the persisted setting, and the shipped default is off; the ordinary shell therefore does not statically import herdr, inspect its environment or socket, or pay for mux startup, while `doctor` distinguishes an operator who has not enabled panes from one whose enabled pane host cannot be reached. Enabling the mode dynamically loads the same bounded mux integration after Stage 0 and retains the existing yazi companion, notifications, ownership checks, degradation policy, `/panes` surface and model tool, but dispatch no longer creates, focuses, updates or closes a viewer pane at any lifecycle point. `panes.agents` and `panes.keepFailed` are accepted and ignored during migration instead of preserving an obsolete automatic policy. There is one operator-pulled watch pane instead: Enter on a live run in the Alt+W fleet overlay opens or adopts it, arrowing between runs atomically retargets a bounded selection file without opening another socket or pane, and a terminal selection is refused with a pointer to the post-mortem viewer. `clio-coder fleet view --watch <selection-file>` supplies that pane's long-lived reader, keeps running while no selection or journal exists, renders bounded waiting and unavailable states, and switches through the same authenticated run renderer used by `fleet view <runId>` rather than maintaining a second presentation of receipt trust.
|
|
73
|
+
- Internal quality work with no behavior change: a boundaries rule now guards every external reacher of the instant shell's Stage 0 closure, holding importers to a declared seam allowlist and walking each value-imported seam's closure against a Stage 0 set the rule computes rather than enumerates, so an edge that would split the chunk the shell's startup budget sits on fails `npm run lint` in the worktree that caused it rather than after a full build. The rule began scoped to `src/cli/**` and was widened after a `src/domains/**` edge split the same chunk from a direction it could not see; the closure holds at its 6 chunks and now measures 111,562 bytes against a cap raised from 110,000 to 113,000 for the modal marker, which the bundler groups into the same chunk as the TUI engine whether or not the instant shell can reach it; the byte cap measures chunk co-location rather than what Stage 0 executes, and the forbidden-graph assertions that pin what it must never drag in are unchanged. Contract tests additionally pin the TUI strings herdr's detector matches and the Agents Reference Enter and Tab detail behavior its footer advertises. The test runner now gives every lane its carried load and drains a named serial lane after the 24 parallel lanes for cases whose product-owned timing claim cannot be widened; hang, spawn, settlement, PTY and peer watchdogs scale with that load while behavioral deadlines remain literal. Refreshed shard weights are guarded against stale or missing coverage, asynchronous state is observed instead of guessed from sleeps, fixture connections, rejected spawn memos and PTY timers are closed where their callers can observe it, and every lane has a bounded lifetime and pipe-drain window with diagnostic failure text, turning the former wall-clock-shaped intermittent population into deterministic suite infrastructure.
|
|
74
|
+
|
|
75
|
+
### Fixed
|
|
76
|
+
- Proactive memory now budgets enough output for thinking models while respecting each model's output cap, uses a one-minute intervention deadline, and degrades visibly to the rules tier after two consecutive LLM timeouts instead of repeatedly spending on a stalled background route.
|
|
77
|
+
- Dispatches now queue behind a saturated inference endpoint under a stable, visible run identity, retain cancellation and deadline semantics while waiting, and start as soon as endpoint capacity is released instead of failing immediately.
|
|
78
|
+
- Debugger, verifier, and research result-contract repairs now name the rejected field and every legal enum choice; completed debugger, verifier, research, and scout envelopes render as readable report prose with semantic footer facts instead of raw JSON.
|
|
79
|
+
- Fleet watch panes now inherit the parent process's resolved config, data, state, and cache layout, diagnose the exact ledger root when a run is missing, and set both the herdr pane label and display title to `clio watch` on supported mux protocols.
|
|
80
|
+
- Interactive run receipts now report operator cancellation as an abort rather than a generic failure, while dispatch route-warning text survives journal projection so fleet viewers and watch panes show the warning that affected routing.
|
|
81
|
+
- `configure --list` now labels keyless local runtimes as `key-optional`, distinguishes required cloud credentials as `needs-key`, and preserves the existing `none` and `credential` states.
|
|
82
|
+
- Configured targets no longer persist probed model catalogs in `settings.yaml`; bounded, versioned, identity-checked per-target snapshots live under the provider cache, preserve offline discovery, and migrate legacy `wireModels` observations on reconfiguration.
|
|
83
|
+
- Settings Center now covers every shipped operator-policy leaf it can safely edit or display, including escalation, prewarm, route activation, guardrails, working-set eviction, retry stall, and library rows, with explicit reasons for the few nested or trust-record settings that remain read-only or YAML-only.
|
|
84
|
+
- Focused `ask_user` option descriptions, expanded decision questions, answers, and corrections now wrap inside their actual containers instead of losing explanatory text at the right edge; `/panes` usage errors also keep their reason and usage line separate.
|
|
85
|
+
- Pass-2 interactive smoke fixes close the remaining lifecycle and narrow-layout gaps as one release wave: `/model` and the model picker now ask whether a swap is session-only, saved globally, or cancelled; exhausted observation budgets become terminal after three bounded retry notices; working-set compaction announces why eviction was skipped before falling back to an LLM summary; and the two-lane Settings footer wraps its complete scope note. Worker approval dialogs now withdraw as soon as their escalation times out or their run terminates, naming the applied fallback without parking the editor; cancelling queued admission renders as an operator abort; endpoint cards separate occupied slots from queued demand; and a relaunched session reclaims its surviving tagged watch pane at startup instead of reporting no owned pane or opening a duplicate.
|
|
86
|
+
- Managed Yazi profiles now prove that the resolved pinned binary accepts their schema before an atomic promotion, rejecting and cleaning up syntax-valid profiles that would fall back to presets, while a permission request parked beneath help or another modal now interrupts as the focused top frame, keeps later approvals in FIFO order, and restores and refocuses the interrupted modal after the decision.
|
|
87
|
+
- The bounded revise loop in `build-review` was unresolvable by construction, and every run of it ended in `loop_bound_exhausted` with two needs-operator-decision lines. The plan compiler gave one rendered prompt body to every agent node, the `build-review` body ended in the builder's "Answer with your `mutation-report`", and the loop's check node was dispatched under `verifier-report`. The verifier obeyed the instruction it was handed, the gate refused the answer against the schema that instruction never mentioned, and both were correct: the run burned its whole repair budget on a contradiction it was given. Each agent node now states its own contract after the shared body, quoted from the same wire example its validator judges, with a precedence line saying that a shape the body names for another step does not apply. `build-review` and `build-test` drop the builder answer instruction their bodies carried for every node to read; `sdlc`, whose body scopes the ask to the agents that produce a work product, is unchanged. Against the same gateway and model that failed 5 runs and 10 verifier cycles out of 10, the loop now resolves on the first verification with no repair.
|
|
88
|
+
- Unpriced work rendered as `$0.0000` on every fleet surface, which is a measured zero and a claim nobody made. A gateway that declares no `pricing:` block, serving a wire model no provider catalog knows, resolves to no rates at all, and the receipt seals that honestly as `costProvenance: "unknown"` beside a `costUsd` of zero and a token count that was genuinely measured. The fleet renders then threw the provenance away and formatted the amount alone. All five of them now consult it, so an unpriced step, an unpriced run total and an unpriced `fleet status` row and its totals read `not measured`, while priced work reads a dollar amount and the token counts show either way, because usage was always observed even when nobody priced it. A run total is folded rather than summed, since adding unpriced zeros to priced dollars produces a number that is neither. A genuinely free call stays distinct from an unpriced one: a self-hosted gateway given a `pricing:` block of zero rates resolves as known-free and renders `$0.00 local`, which is the accurate label. Routing these lines through the shared formatter also narrows priced amounts at or above a cent from four decimals to two, so `$1.2500` now reads `$1.25` while sub-cent amounts keep four; that is a visible change to priced output, taken deliberately, because keeping a second cost formatter on the fleet surface is the drift that produced this defect. One render site on the interactive `/fleet` overlay's summary line is not yet covered and still prints the four-decimal total.
|
|
89
|
+
- Fleet panes did not survive a clean TUI exit, and input focus could end up in a tab nobody was looking at. Neither was the disposal path it looked like. A run viewer was started with `exec`, which replaced the pane's shell with the follower process, so when that viewer exited normally herdr removed the pane whose shell had gone, and with it the Fleet tab when it was the last pane there. The focus defect fed it: the focus ladder treated tab focus as an acceptable substitute when the agent-pane call was refused, so it could report success having focused only the tab, leaving a `q` bound for a viewer in another tab to reach that viewer and turn an ordinary exit into pane and tab destruction. Run viewers no longer use `exec`; the shell line follows, renders one settled snapshot when following returns, and leaves the shell alive, while utility panes keep `exec` because their lifetime is the launched utility's to define. Shutdown closes the subscription and the socket and neither sends `pane.close` nor clears ownership. Focus is now one ladder shared by the slash surface and the agent tool, which focuses the tab, focuses the pane, reasserts pane authority and retries once on refusal, then reads a live snapshot and reports success only when both the focused tab and the focused pane are the intended ones. The slash surface also awaits its pane operations through the serialized queue the agent tool already used, so an inventory read taken straight after a slash mutation cannot observe it half-done.
|
|
90
|
+
- `clio-coder reset --data` deletes vendored external tools and its preview did not say so, describing the data root as memory, evidence and evals. Vendored tools live under that root and are the one thing a reset cannot regenerate locally, so the preview, the command help and the documented role of each root now name them, along with the note that `clio-coder tools install <id>` downloads them again.
|
|
91
|
+
- Whether `/council` worked depended on how many seconds had passed since boot. The endpoint dimension was resolved only from `providers.list()`, which provider startup builds asynchronously while dispatch route resolution does not wait for it, so a council raised before `probeAll()` finished put no endpoint in its reservation and skipped the dimension entirely, which is not a conservative check but no check at all. Eight consecutive attempts against a one-slot llama.cpp box were refused; one raised seconds after startup was admitted and ran both members plus the orchestrator's own turn against that single slot. Capacity now resolves from the configured targets as well as the probed statuses, so admission is independent of probe timing.
|
|
92
|
+
- `clio-coder run "/definitely-not-a-command"` forwarded the token to the model as an ordinary task, opening a session, spending a full turn and exiting 0 with a conversational answer to a command that never ran (#259). The verdict now happens before the orchestrator boots, reusing `parseSlashCommand` as the single shape test and registry walk, so prose still reaches the model (an absolute path carries a separator, and the `\/` escape still works), a prompt template claims its token first, and a mistyped command exits 2 as the usage error it is, costing no session and no model call.
|
|
93
|
+
- The `ask_user` free-text field had exactly one exit, and that exit resolved the whole round as cancelled, so a single-question round had no route from a typed draft back to its options (#260). Esc in the text field now returns to the option list and drops the draft whenever the question has options, with the footer spelling `back` or `close` to say which; cancelling the interview stays available and distinct, one surface further out. Navigating away mid-draft parks the text mode rather than sticking it, so the draft survives in place but the question greets the operator with its options.
|
|
94
|
+
- `/view verify` reduced a receipt verification to a single pass-or-fail sentence, hiding the file and seal an operator needed to inspect and making a compromised trust projection look equivalent to a trustworthy result. The notice now carries the receipt path, sealed digest, canonical trust summary and per-check outcomes, reusing the same trust projection as fleet view and the dispatch board rather than growing a competing vocabulary. Compromised canonical trust renders as a warning naming each compromising axis with its reference, and cryptographic failures retain the presented digest while distinguishing file, contract, ledger and digest checks. The underlying verifier contract, its argument shapes and its refusals are unchanged.
|
|
95
|
+
- A scout dispatched with a directory-survey task died exit 1 with `Scout citation path escapes the workspace: .`, reproduced four times. Two defects sat behind one message: the containment check refused the empty relative path alongside the `..` forms, and the empty string means the citation resolved to the workspace root itself, the one location guaranteed to be inside it; behind that, the reader called `readFile` on the cited location, and a directory has no bytes, so even a contained directory citation would have failed as unreadable and then failed grounding again because a survey lists a directory rather than reading it. Containment is now answered on the resolved pair with the root treated as contained, which also settles the `./src`, `src/` and `./src/` spellings, and a real escape still refuses.
|
|
96
|
+
|
|
5
97
|
## 0.3.9 - 2026-08-30
|
|
6
98
|
|
|
7
99
|
### Added
|
package/NOTICE
CHANGED
|
@@ -7,3 +7,36 @@ Illinois Institute of Technology.
|
|
|
7
7
|
|
|
8
8
|
Licensed under the Apache License, Version 2.0. See the LICENSE file
|
|
9
9
|
distributed with this work for the full license text.
|
|
10
|
+
|
|
11
|
+
--------------------------------------------------------------------
|
|
12
|
+
Pinned external tools
|
|
13
|
+
|
|
14
|
+
Clio Coder does not bundle the programs below. `clio-coder tools install
|
|
15
|
+
<id>` downloads a pinned upstream release on request, verifies it against
|
|
16
|
+
the checksum recorded in src/domains/toolchain/registry.ts, and places the
|
|
17
|
+
upstream license text beside the binary under the Clio data directory. Each
|
|
18
|
+
program remains under its own license and copyright; Clio neither modifies
|
|
19
|
+
nor redistributes it.
|
|
20
|
+
|
|
21
|
+
herdr (https://herdr.dev, https://github.com/herdrdev/herdr)
|
|
22
|
+
Copyright the herdr authors.
|
|
23
|
+
Licensed under the Apache License, Version 2.0.
|
|
24
|
+
Used as the terminal multiplexer behind Clio panes.
|
|
25
|
+
|
|
26
|
+
yazi (https://yazi-rs.github.io, https://github.com/sxyazi/yazi)
|
|
27
|
+
Copyright the yazi authors.
|
|
28
|
+
Licensed under the MIT License.
|
|
29
|
+
Used as the terminal file manager behind the file-picker pane.
|
|
30
|
+
|
|
31
|
+
croc (https://schollz.com/software/croc6, https://github.com/schollz/croc)
|
|
32
|
+
Copyright Zack Scholl and the croc authors.
|
|
33
|
+
Licensed under the MIT License.
|
|
34
|
+
Used as the relay file-transfer backend for machine-to-machine transfers.
|
|
35
|
+
|
|
36
|
+
--------------------------------------------------------------------
|
|
37
|
+
Vendored components
|
|
38
|
+
|
|
39
|
+
git.yazi (https://github.com/yazi-rs/plugins/tree/main/git.yazi)
|
|
40
|
+
Copyright 2023 the yazi-rs authors.
|
|
41
|
+
Licensed under the MIT License.
|
|
42
|
+
Vendored as source with its LICENSE under the managed file-pane profile.
|
package/README.md
CHANGED
|
@@ -45,12 +45,54 @@ clio-coder # start the interactive session in any project directo
|
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
Requires Node.js `>=22.19.0`. `configure` lists the runtimes, asks for the
|
|
48
|
-
endpoint and model, probes it, and saves it as the chat and
|
|
48
|
+
endpoint and model, probes it, and saves it as the chat and fleet default; bare
|
|
49
49
|
`clio-coder` opens the same wizard when nothing usable is configured yet. In the
|
|
50
50
|
first session, type a request in plain words or `/help` for the command
|
|
51
51
|
palette. `/settings` changes the model later, `/quit` leaves, and
|
|
52
52
|
`clio-coder doctor` reports the install's health at any time.
|
|
53
53
|
|
|
54
|
+
Adding `--omit=optional` to that install skips the Claude Agent SDK's 224MB
|
|
55
|
+
proprietary binary, taking the tree from 387MB to 143MB. Everything but the
|
|
56
|
+
`claude-sdk` worker runtime works without it. See
|
|
57
|
+
[Installation and Lifecycle](docs/installation-and-lifecycle.md#optional-dependency-the-claude-agent-sdk).
|
|
58
|
+
|
|
59
|
+
## What changed in v0.4.1
|
|
60
|
+
|
|
61
|
+
- **`settings.yaml` v2** replaces the accumulated legacy layout with seven
|
|
62
|
+
durable areas: `chat`, `fleet`, `targets`, `context`, `safety`, `interface`,
|
|
63
|
+
and `integrations`. `clio-coder upgrade` automatically migrates a v1 (or
|
|
64
|
+
unversioned pre-v2) file once, writes it atomically, and keeps the original as
|
|
65
|
+
`settings.yaml.v1.bak`.
|
|
66
|
+
- **The interactive command surface is smaller and explicit.** `/settings`
|
|
67
|
+
accepts the same seven area names, resources meet under `/resources`, and
|
|
68
|
+
retired slash commands stop at targeted tombstones instead of falling
|
|
69
|
+
through to the model.
|
|
70
|
+
- **The editor operator family is honest about context.** `@` opens a
|
|
71
|
+
workspace-aware file picker, `!` runs a public shell command whose result can
|
|
72
|
+
enter model context, and `!!` runs a context-excluded shell command that
|
|
73
|
+
remains visible to you but is never sent to a model.
|
|
74
|
+
- **The local skills marketplace can meet a request in flight.** Clio may offer
|
|
75
|
+
a matching uninstalled skill, but every install initiated by that promotion
|
|
76
|
+
flow is hard-gated to Clio's own shipped catalog or the
|
|
77
|
+
`iowarp/clio-coder` repository. A public registry or foreign GitHub source is
|
|
78
|
+
refused before the installer runs.
|
|
79
|
+
- **Evaluation and release validation each have one path.** The product eval
|
|
80
|
+
engine remains under `src/domains/eval/`, runnable reference suites ship
|
|
81
|
+
under `evals/`, and evals stay outside CI and release gates. The automated
|
|
82
|
+
gate is now 35 focused test files driven directly by `node --test` through a
|
|
83
|
+
single fast CI job.
|
|
84
|
+
- **Machine-facing names use the Clio Coder namespace.** New paths, schemas,
|
|
85
|
+
tags, environment variables, Git refs, and manifests use syntax-appropriate
|
|
86
|
+
`clio-coder`, `clio_coder`, or `CLIO_CODER` forms. Upgrade records one naming
|
|
87
|
+
migration, and readers retain the released legacy spellings through v0.5 and
|
|
88
|
+
v0.6. The Clio persona and operator-facing identity text are unchanged.
|
|
89
|
+
|
|
90
|
+
The release also hardens the surfaces that tend to fail outside unit tests:
|
|
91
|
+
plain `doctor` is read-only again, configure cancellation exits correctly,
|
|
92
|
+
trace empty states preserve their JSON contracts, fleet views wrap and honor
|
|
93
|
+
`NO_COLOR`, Settings and other interactive prose stop losing remedy text, and
|
|
94
|
+
the Workbench lifecycle closes its timing and recovery gaps.
|
|
95
|
+
|
|
54
96
|
| | You are | Start here |
|
|
55
97
|
| --- | --- | --- |
|
|
56
98
|
| 🔬 | A researcher or developer who wants to use it | [Your models](#your-models-your-choice) → [At the keyboard](#at-the-keyboard) → [Safety](#safety-you-can-read) |
|
|
@@ -110,6 +152,7 @@ or the reverse.
|
|
|
110
152
|
| `lmstudio` | LM Studio |
|
|
111
153
|
| `ollama-native` | Ollama |
|
|
112
154
|
| `vllm`, `sglang` | vLLM and SGLang |
|
|
155
|
+
| `litellm` | LiteLLM gateways with per-alias capability discovery and routed-model attribution |
|
|
113
156
|
| `lemonade`, `lemonade-anthropic` | Lemonade |
|
|
114
157
|
| `openai-compat`, `anthropic-compat` | Any OpenAI- or Anthropic-shaped endpoint |
|
|
115
158
|
| `openai`, `anthropic`, `google`, `groq`, `mistral`, `deepseek`, `openrouter`, `bedrock` | Cloud APIs |
|
|
@@ -160,11 +203,12 @@ Run `clio-coder` from the repository you want to work on. The session opens on a
|
|
|
160
203
|
one-line header that names where Clio is working, which route answers, and
|
|
161
204
|
whether project context is ready, and then the transcript owns the screen.
|
|
162
205
|
Tool calls render as live rows with their verdicts, successful edits render as
|
|
163
|
-
numbered diffs, and
|
|
206
|
+
numbered diffs, and editor operators put files and local shell output in the
|
|
207
|
+
same transcript.
|
|
164
208
|
|
|
165
209
|
| You want to | Type |
|
|
166
210
|
| --- | --- |
|
|
167
|
-
| Change model, target, thinking level, autonomy, or terminal options | `/settings`, `/model`, `/thinking` |
|
|
211
|
+
| Change model, target, thinking level, autonomy, or terminal options | `/settings [chat\|fleet\|targets\|context\|safety\|interface\|integrations]`, `/model`, `/thinking` |
|
|
168
212
|
| See what is in the context window and what it costs | `/context`, `/cost` |
|
|
169
213
|
| Branch, revisit, or pick up a session | `/tree`, `/fork`, `/resume`, `/new` |
|
|
170
214
|
| Delegate to a fleet agent and watch it work | `/run coder "..."`, `/tasks`, `Alt+W` |
|
|
@@ -172,16 +216,63 @@ numbered diffs, and `!` runs a shell command in the same transcript.
|
|
|
172
216
|
| Ask a side question without touching the session, or get a read-only second opinion | `/btw <question>`, `/oracle <question>` |
|
|
173
217
|
| Put the same question to several models at once and read one synthesis | `/council --synthesis vote "..."` |
|
|
174
218
|
| Preview and run a multi-step fleet contract, resumable from the CLI | `/fleet run <name>` |
|
|
175
|
-
|
|
|
219
|
+
| Browse or install agents, prompts, fleets, extensions, and skills | `/resources`, `/resources library agent` |
|
|
176
220
|
| Carry the working state into a fresh session | `/handoff <goal>` |
|
|
177
221
|
| Save a self-contained HTML transcript | `/export` (an explicit `.md` path keeps Markdown) |
|
|
178
222
|
| Everything else | `/help` |
|
|
179
223
|
|
|
180
224
|
Enter while Clio is running steers the current turn; `Alt+Enter` queues a
|
|
181
|
-
follow-up; `Esc` cancels.
|
|
182
|
-
with a sticky composer beneath an
|
|
183
|
-
terminal scrollback is the
|
|
184
|
-
reference is
|
|
225
|
+
follow-up; `Esc` cancels. `/settings interface` opens the Terminal options,
|
|
226
|
+
including an opt-in fullscreen mode with a sticky composer beneath an
|
|
227
|
+
independently scrollable transcript; regular terminal scrollback is the
|
|
228
|
+
default. The complete command and keybinding reference is
|
|
229
|
+
[docs/commands-and-modes.md](docs/commands-and-modes.md).
|
|
230
|
+
|
|
231
|
+
### Settings v2 and the seven areas
|
|
232
|
+
|
|
233
|
+
The user config is a strict `version: 2` YAML document. Its seven top-level
|
|
234
|
+
areas match the seven arguments accepted by `/settings`. Those arguments are
|
|
235
|
+
stable deep links into the current Settings Center; the overlay still divides
|
|
236
|
+
the detailed editor into its existing subsections, while the durable paths on
|
|
237
|
+
disk use the seven-area vocabulary below.
|
|
238
|
+
|
|
239
|
+
| Area | What it owns |
|
|
240
|
+
| --- | --- |
|
|
241
|
+
| `chat` | Active target and model, thinking, model-picker state, output limits, prewarm, and interactive retry |
|
|
242
|
+
| `fleet` | Worker defaults and profiles, rosters, agent bindings, routing, nodes, permissions, limits, retry, and run history |
|
|
243
|
+
| `targets` | Provider/runtime connections, advertised models, capabilities, and routing roles |
|
|
244
|
+
| `context` | Working-set eviction, compaction, and proactive task memory |
|
|
245
|
+
| `safety` | Autonomy, cost/tool/read ceilings, and the review watchdog |
|
|
246
|
+
| `interface` | Output detail, terminal mode, streaming, notifications, and keybindings |
|
|
247
|
+
| `integrations` | Project resource trust, external agents, runtime plugins, resource libraries, and Git attribution |
|
|
248
|
+
|
|
249
|
+
When upgrading an existing install, run `clio-coder upgrade`. The v1-to-v2
|
|
250
|
+
migration runs before strict v2 consumers load, records its migration id so it
|
|
251
|
+
does not run twice, writes through an atomic rename, and leaves the byte-exact
|
|
252
|
+
v1 file beside the result as `settings.yaml.v1.bak`. If old and new paths
|
|
253
|
+
collide, it refuses the migration and leaves the original untouched instead of
|
|
254
|
+
guessing which value should win.
|
|
255
|
+
|
|
256
|
+
The removed slash spellings are non-executing tombstones with exact remedies:
|
|
257
|
+
`/targets` points to `/settings targets`, `/scoped-models` points to
|
|
258
|
+
`/settings chat model-picker`, and `/library`, `/prompts`, and `/extensions`
|
|
259
|
+
point to their `/resources` equivalents. The `clio-coder targets`,
|
|
260
|
+
`clio-coder skills`, and other CLI command families remain available; this
|
|
261
|
+
cleanup applies to slash commands inside the interactive session.
|
|
262
|
+
|
|
263
|
+
### The operator family today
|
|
264
|
+
|
|
265
|
+
| Operator | Behavior |
|
|
266
|
+
| --- | --- |
|
|
267
|
+
| `@` | Opens the workspace-aware picker. A bare `@` starts at the workspace root, a name fuzzily searches visible paths, and directory prefixes drill into the tree. Selecting a file inserts a reference that is expanded into the request when submitted. |
|
|
268
|
+
| `! command` | Runs one shell command in the interactive working directory. The durable transcript entry, command, and output are available to model replay and compaction. |
|
|
269
|
+
| `!! command` | Runs the same shell path and keeps the result visible and durable, but marks both command and output `not sent to model`; replay, compaction, and context accounting all exclude it. |
|
|
270
|
+
|
|
271
|
+
Bang operators arm only for a non-empty, typed, single-line draft. A
|
|
272
|
+
bracketed-pasted `!` or `!!` line, or any multiline draft beginning with one,
|
|
273
|
+
is treated as literal prompt text rather than executed.
|
|
274
|
+
|
|
275
|
+
Panes, docks, and Yazi integration are experimental and opt-in in v0.4.1; enable them explicitly under `interface.panes` in `settings.yaml`.
|
|
185
276
|
|
|
186
277
|
Outside the TUI, the same engine runs headless and speaks to editors:
|
|
187
278
|
|
|
@@ -264,6 +355,19 @@ an installed copy verifies against its audited source, and
|
|
|
264
355
|
`clio-coder skills eval <name>` runs a skill's executable evals instead of
|
|
265
356
|
trusting the prose.
|
|
266
357
|
|
|
358
|
+
The catalog is also a local marketplace. On a request that matches an
|
|
359
|
+
uninstalled skill and is not already covered by an installed one, the
|
|
360
|
+
coordinator can offer project install, user install, not now, or never for that
|
|
361
|
+
skill version, then continue the task in the same turn. Matching is local and
|
|
362
|
+
lexical; request text does not leave the machine. Full-auto may skip the
|
|
363
|
+
question, but it cannot skip the source gate: consented and autonomous
|
|
364
|
+
promotion installs both accept only the shipped local catalog or this
|
|
365
|
+
repository's own tree, and they install without activating. Dispatch workers
|
|
366
|
+
never receive offers, and only the operator activates a skill with `/skill`.
|
|
367
|
+
Manual `clio-coder skills install <path|github-url>` remains available for a
|
|
368
|
+
source you deliberately choose; the own-marketplace guarantee governs what
|
|
369
|
+
Clio installs on its own initiative.
|
|
370
|
+
|
|
267
371
|
**Task memory** keeps long runs from drifting: a rules-only tier with no model
|
|
268
372
|
calls watches tool and lifecycle hooks and surfaces advisory reminders at the
|
|
269
373
|
right boundaries, `/memory` inspects it, and durable lessons are reviewed with
|
|
@@ -283,7 +387,7 @@ dist-tag instead.
|
|
|
283
387
|
From source, pinned to this release:
|
|
284
388
|
|
|
285
389
|
```bash
|
|
286
|
-
git clone --branch v0.
|
|
390
|
+
git clone --branch v0.4.1 https://github.com/iowarp/clio-coder.git
|
|
287
391
|
cd clio-coder
|
|
288
392
|
npm run install:local
|
|
289
393
|
export PATH="$HOME/.local/bin:$PATH"
|
|
@@ -309,7 +413,7 @@ Full lifecycle details, including `reset` and the upgrade path, are in
|
|
|
309
413
|
|
|
310
414
|
## Status
|
|
311
415
|
|
|
312
|
-
The current release is **v0.
|
|
416
|
+
The current release is **v0.4.1**, installable from npm as
|
|
313
417
|
[`@iowarp/clio-coder`](https://www.npmjs.com/package/@iowarp/clio-coder) or
|
|
314
418
|
from source. Clio Coder is still experimental: we ship quickly, interfaces may
|
|
315
419
|
change between minor versions, and model-specific behavior varies by target, so
|
|
@@ -341,8 +445,8 @@ If you are an AI agent operating inside this repository or driving Clio as a
|
|
|
341
445
|
tool, start here.
|
|
342
446
|
|
|
343
447
|
**Orient from the index, not from a wide read.** `clio-coder context index`
|
|
344
|
-
builds a codewiki over the
|
|
345
|
-
|
|
448
|
+
builds a codewiki over the source and test tree; use `code_nav` in `entries`,
|
|
449
|
+
`path`, or `symbol` mode first. The indexed entry points are
|
|
346
450
|
`src/cli/index.ts`, `src/domains/agents/index.ts`,
|
|
347
451
|
`src/domains/components/index.ts`, `src/domains/config/index.ts`,
|
|
348
452
|
`src/domains/context/bootstrap.ts`, `src/domains/context/index.ts`,
|
|
@@ -422,10 +526,11 @@ Conventions worth knowing before your first PR: local imports end in `.js`,
|
|
|
422
526
|
tests use `node:test`, `any` needs a tracking issue, and compile-time
|
|
423
527
|
boundaries between domains are enforced by the hygiene lint rather than by
|
|
424
528
|
convention. Read [docs/architecture.md](docs/architecture.md) before adding a
|
|
425
|
-
cross-domain import. Live model validation
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
local model
|
|
529
|
+
cross-domain import. Live model validation
|
|
530
|
+
(`npm run live:smoke -- --target <id>`) and the runnable reference suites under
|
|
531
|
+
`evals/` are explicit, opt-in measurements. Neither runs in CI or the release
|
|
532
|
+
gate, because no deterministic suite can promise that every local model
|
|
533
|
+
behaves identically.
|
|
429
534
|
|
|
430
535
|
## Documentation
|
|
431
536
|
|
|
@@ -6,29 +6,30 @@ import {
|
|
|
6
6
|
} from "./chunk-2VTFPG5O.js";
|
|
7
7
|
import {
|
|
8
8
|
runClioCommand
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-GVQJ5CCZ.js";
|
|
10
|
+
import "./chunk-VKRH2TCS.js";
|
|
11
|
+
import "./chunk-ZTJUVLTU.js";
|
|
12
|
+
import "./chunk-7PWAODYW.js";
|
|
13
|
+
import "./chunk-ZW55JB7N.js";
|
|
14
14
|
import {
|
|
15
15
|
printError
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-VPKWYKEY.js";
|
|
17
17
|
import "./chunk-5TSRNF4G.js";
|
|
18
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-EIMVLWB3.js";
|
|
19
|
+
import "./chunk-D7E7WCDF.js";
|
|
19
20
|
import {
|
|
20
21
|
MAX_TIMER_DELAY_MS
|
|
21
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-EBY63B7G.js";
|
|
22
23
|
import "./chunk-IWHMRKLL.js";
|
|
23
|
-
import "./chunk-
|
|
24
|
+
import "./chunk-BWW4HLO4.js";
|
|
24
25
|
import "./chunk-LL4KHSZI.js";
|
|
25
|
-
import "./chunk-
|
|
26
|
-
import "./chunk-
|
|
27
|
-
import "./chunk-
|
|
26
|
+
import "./chunk-NLFAQR7Z.js";
|
|
27
|
+
import "./chunk-WNP7O5WZ.js";
|
|
28
|
+
import "./chunk-336NSSKI.js";
|
|
28
29
|
import "./chunk-IKCO5N3L.js";
|
|
29
30
|
import "./chunk-3I7MS7N2.js";
|
|
30
31
|
import "./chunk-APJ265NV.js";
|
|
31
|
-
import "./chunk-
|
|
32
|
+
import "./chunk-BYP5D4HI.js";
|
|
32
33
|
import "./chunk-WEPFGWHJ.js";
|
|
33
34
|
import "./chunk-YXLYO42X.js";
|
|
34
35
|
import {
|
|
@@ -79,11 +80,12 @@ function resolveAcpCwd(value) {
|
|
|
79
80
|
return realpathSync(path.resolve(value));
|
|
80
81
|
}
|
|
81
82
|
async function runAcpCommand(args, options = {}) {
|
|
82
|
-
|
|
83
|
+
const normalizedArgs = args[0] === "--acp" ? args.slice(1) : args;
|
|
84
|
+
if (normalizedArgs.includes("--help") || normalizedArgs.includes("-h")) {
|
|
83
85
|
process.stdout.write(HELP);
|
|
84
86
|
return 0;
|
|
85
87
|
}
|
|
86
|
-
const flags = parseAcpFlags(
|
|
88
|
+
const flags = parseAcpFlags(normalizedArgs);
|
|
87
89
|
if (typeof flags === "string") {
|
|
88
90
|
printError(flags);
|
|
89
91
|
process.stderr.write(HELP);
|
|
@@ -111,7 +113,7 @@ async function runAcpCommand(args, options = {}) {
|
|
|
111
113
|
transportOptions: {
|
|
112
114
|
write: writeRawStdout,
|
|
113
115
|
diagnostics: (line) => {
|
|
114
|
-
process.stderr.write(`[clio:acp] ${line}
|
|
116
|
+
process.stderr.write(`[clio-coder:acp] ${line}
|
|
115
117
|
`);
|
|
116
118
|
}
|
|
117
119
|
},
|
|
@@ -123,7 +125,6 @@ async function runAcpCommand(args, options = {}) {
|
|
|
123
125
|
}
|
|
124
126
|
}
|
|
125
127
|
export {
|
|
126
|
-
resolveAcpCwd,
|
|
127
128
|
runAcpCommand
|
|
128
129
|
};
|
|
129
|
-
//# sourceMappingURL=acp-
|
|
130
|
+
//# sourceMappingURL=acp-ZILU3AUO.js.map
|