@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
|
@@ -95,7 +95,7 @@ export async function loadDomains(
|
|
|
95
95
|
// render the failure, so the structured line must land first.
|
|
96
96
|
const message = error instanceof Error ? error.message : String(error);
|
|
97
97
|
(options.diagnostic ?? ((text: string) => process.stderr.write(text)))(
|
|
98
|
-
`[clio:domain] load failed: ${name}: ${message}\n`,
|
|
98
|
+
`[clio-coder:domain] load failed: ${name}: ${message}\n`,
|
|
99
99
|
);
|
|
100
100
|
throw new DomainLoadError(name, error);
|
|
101
101
|
}
|
|
@@ -111,15 +111,17 @@ export async function loadDomains(
|
|
|
111
111
|
const t0 = debug ? process.hrtime.bigint() : 0n;
|
|
112
112
|
const completed = await runWithBudget(stopFn, budgetMs, (err) => {
|
|
113
113
|
const message = err instanceof Error ? err.message : String(err);
|
|
114
|
-
writeShutdownNotice(`[clio:domain-loader] ${name}.stop() failed: ${message}`);
|
|
114
|
+
writeShutdownNotice(`[clio-coder:domain-loader] ${name}.stop() failed: ${message}`);
|
|
115
115
|
if (debug && err instanceof Error && err.stack) process.stderr.write(`${err.stack}\n`);
|
|
116
116
|
});
|
|
117
117
|
if (!completed) {
|
|
118
|
-
writeShutdownNotice(`[clio:domain-loader] ${name}.stop() exceeded ${budgetMs}ms budget; abandoning`);
|
|
118
|
+
writeShutdownNotice(`[clio-coder:domain-loader] ${name}.stop() exceeded ${budgetMs}ms budget; abandoning`);
|
|
119
119
|
}
|
|
120
120
|
if (debug) {
|
|
121
121
|
const dt = Number(process.hrtime.bigint() - t0) / 1e6;
|
|
122
|
-
process.stderr.write(
|
|
122
|
+
process.stderr.write(
|
|
123
|
+
`[clio-coder:shutdown] domain.${name} ${dt.toFixed(1)}ms${completed ? "" : " (timed out)"}\n`,
|
|
124
|
+
);
|
|
123
125
|
}
|
|
124
126
|
}
|
|
125
127
|
};
|
package/src/core/event-bus.ts
CHANGED
|
@@ -40,7 +40,7 @@ type StoredListener = (payload: never) => void | Promise<void>;
|
|
|
40
40
|
|
|
41
41
|
function reportListenerError(channel: string, error: unknown): void {
|
|
42
42
|
const message = error instanceof Error ? (error.stack ?? error.message) : String(error);
|
|
43
|
-
console.error(`[clio:event-bus] Listener crashed on ${channel}: ${message}`);
|
|
43
|
+
console.error(`[clio-coder:event-bus] Listener crashed on ${channel}: ${message}`);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
export function createSafeEventBus(): SafeEventBus {
|
|
@@ -25,9 +25,70 @@ export interface FileReferenceOptions {
|
|
|
25
25
|
autoResizeImages?: boolean;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
const FILE_REF = /(^|\s)@(\S+)/g;
|
|
29
28
|
const DEFAULT_IMAGE_MAX_BASE64_BYTES = 4.5 * 1024 * 1024;
|
|
30
29
|
|
|
30
|
+
interface InlineFileReference {
|
|
31
|
+
start: number;
|
|
32
|
+
end: number;
|
|
33
|
+
raw: string;
|
|
34
|
+
fileArg: string;
|
|
35
|
+
quoted: boolean;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function decodeQuotedFileArg(input: string, start: number, quote: '"' | "'"): { value: string; end: number } | null {
|
|
39
|
+
let value = "";
|
|
40
|
+
let escaped = false;
|
|
41
|
+
for (let index = start; index < input.length; index += 1) {
|
|
42
|
+
const character = input[index] ?? "";
|
|
43
|
+
if (escaped) {
|
|
44
|
+
value += character;
|
|
45
|
+
escaped = false;
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (character === "\\") {
|
|
49
|
+
escaped = true;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (character === quote) return { value, end: index + 1 };
|
|
53
|
+
value += character;
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** Scanner shared by sync and async expansion; quoted references may contain spaces. */
|
|
59
|
+
function inlineFileReferences(input: string): InlineFileReference[] {
|
|
60
|
+
const references: InlineFileReference[] = [];
|
|
61
|
+
for (let start = 0; start < input.length; start += 1) {
|
|
62
|
+
if (input[start] !== "@" || (start > 0 && !/\s/u.test(input[start - 1] ?? ""))) continue;
|
|
63
|
+
const next = input[start + 1];
|
|
64
|
+
if (next === '"' || next === "'") {
|
|
65
|
+
const decoded = decodeQuotedFileArg(input, start + 2, next);
|
|
66
|
+
if (!decoded || decoded.value.length === 0) continue;
|
|
67
|
+
references.push({
|
|
68
|
+
start,
|
|
69
|
+
end: decoded.end,
|
|
70
|
+
raw: input.slice(start, decoded.end),
|
|
71
|
+
fileArg: decoded.value,
|
|
72
|
+
quoted: true,
|
|
73
|
+
});
|
|
74
|
+
start = decoded.end - 1;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
let end = start + 1;
|
|
78
|
+
while (end < input.length && !/\s/u.test(input[end] ?? "")) end += 1;
|
|
79
|
+
if (end === start + 1) continue;
|
|
80
|
+
references.push({
|
|
81
|
+
start,
|
|
82
|
+
end,
|
|
83
|
+
raw: input.slice(start, end),
|
|
84
|
+
fileArg: input.slice(start + 1, end),
|
|
85
|
+
quoted: false,
|
|
86
|
+
});
|
|
87
|
+
start = end - 1;
|
|
88
|
+
}
|
|
89
|
+
return references;
|
|
90
|
+
}
|
|
91
|
+
|
|
31
92
|
function renderTextFile(filePath: string, content: string): string {
|
|
32
93
|
return `<file name="${filePath}">\n${content}\n</file>\n`;
|
|
33
94
|
}
|
|
@@ -64,42 +125,6 @@ function detectSupportedImageMimeType(bytes: Buffer): string | null {
|
|
|
64
125
|
return null;
|
|
65
126
|
}
|
|
66
127
|
|
|
67
|
-
function readFileReference(fileArg: string, options: FileReferenceOptions): FileReferenceResult {
|
|
68
|
-
const filePath = expandConfigPath(fileArg, options.cwd === undefined ? undefined : { cwd: options.cwd });
|
|
69
|
-
if (!existsSync(filePath)) {
|
|
70
|
-
if (options.missing === "leave") return result(`@${fileArg}`);
|
|
71
|
-
return result("", [{ type: "error", message: `file not found: ${filePath}`, path: filePath }]);
|
|
72
|
-
}
|
|
73
|
-
let stat: ReturnType<typeof statSync>;
|
|
74
|
-
try {
|
|
75
|
-
stat = statSync(filePath);
|
|
76
|
-
} catch (err) {
|
|
77
|
-
const reason = err instanceof Error ? err.message : String(err);
|
|
78
|
-
return result("", [{ type: "error", message: `file could not be stat'ed: ${reason}`, path: filePath }]);
|
|
79
|
-
}
|
|
80
|
-
if (!stat.isFile()) {
|
|
81
|
-
return result("", [{ type: "error", message: `not a file: ${filePath}`, path: filePath }]);
|
|
82
|
-
}
|
|
83
|
-
if (stat.size === 0) return result("", [], [], [filePath]);
|
|
84
|
-
try {
|
|
85
|
-
const bytes = readFileSync(filePath);
|
|
86
|
-
const imageMimeType = detectSupportedImageMimeType(bytes);
|
|
87
|
-
if (imageMimeType) {
|
|
88
|
-
if (options.includeImages !== true) return result(`@${fileArg}`);
|
|
89
|
-
return result(
|
|
90
|
-
renderImageFile(filePath),
|
|
91
|
-
[],
|
|
92
|
-
[{ type: "image", mimeType: imageMimeType, data: bytes.toString("base64") }],
|
|
93
|
-
[filePath],
|
|
94
|
-
);
|
|
95
|
-
}
|
|
96
|
-
return result(renderTextFile(filePath, bytes.toString("utf8")), [], [], [filePath]);
|
|
97
|
-
} catch (err) {
|
|
98
|
-
const reason = err instanceof Error ? err.message : String(err);
|
|
99
|
-
return result("", [{ type: "error", message: `file could not be read: ${reason}`, path: filePath }]);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
128
|
async function readFileReferenceAsync(fileArg: string, options: FileReferenceOptions): Promise<FileReferenceResult> {
|
|
104
129
|
const filePath = expandConfigPath(fileArg, options.cwd === undefined ? undefined : { cwd: options.cwd });
|
|
105
130
|
if (!existsSync(filePath)) {
|
|
@@ -191,39 +216,6 @@ function splitTrailingPunctuation(token: string): { fileArg: string; suffix: str
|
|
|
191
216
|
return { fileArg: candidate, suffix };
|
|
192
217
|
}
|
|
193
218
|
|
|
194
|
-
export function expandInlineFileReferences(input: string, options: FileReferenceOptions = {}): FileReferenceResult {
|
|
195
|
-
const diagnostics: FileReferenceDiagnostic[] = [];
|
|
196
|
-
const images: ImageContent[] = [];
|
|
197
|
-
const referencedPaths: string[] = [];
|
|
198
|
-
const text = input.replace(FILE_REF, (match: string, prefix: string, token: string) => {
|
|
199
|
-
const direct = readFileReference(token, {
|
|
200
|
-
...options,
|
|
201
|
-
missing: "leave",
|
|
202
|
-
includeImages: options.includeImages === true,
|
|
203
|
-
});
|
|
204
|
-
if (direct.text !== `@${token}`) {
|
|
205
|
-
diagnostics.push(...direct.diagnostics);
|
|
206
|
-
images.push(...direct.images);
|
|
207
|
-
referencedPaths.push(...direct.referencedPaths);
|
|
208
|
-
return `${prefix}${direct.text}`;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
const { fileArg, suffix } = splitTrailingPunctuation(token);
|
|
212
|
-
if (fileArg === token) return match;
|
|
213
|
-
const stripped = readFileReference(fileArg, {
|
|
214
|
-
...options,
|
|
215
|
-
missing: "leave",
|
|
216
|
-
includeImages: options.includeImages === true,
|
|
217
|
-
});
|
|
218
|
-
if (stripped.text === `@${fileArg}`) return match;
|
|
219
|
-
diagnostics.push(...stripped.diagnostics);
|
|
220
|
-
images.push(...stripped.images);
|
|
221
|
-
referencedPaths.push(...stripped.referencedPaths);
|
|
222
|
-
return `${prefix}${stripped.text}${suffix}`;
|
|
223
|
-
});
|
|
224
|
-
return { text, images, diagnostics, referencedPaths };
|
|
225
|
-
}
|
|
226
|
-
|
|
227
219
|
export async function expandInlineFileReferencesAsync(
|
|
228
220
|
input: string,
|
|
229
221
|
options: FileReferenceOptions = {},
|
|
@@ -233,31 +225,29 @@ export async function expandInlineFileReferencesAsync(
|
|
|
233
225
|
const referencedPaths: string[] = [];
|
|
234
226
|
let text = "";
|
|
235
227
|
let lastIndex = 0;
|
|
236
|
-
for (const
|
|
237
|
-
|
|
238
|
-
const full = match[0] ?? "";
|
|
239
|
-
const prefix = match[1] ?? "";
|
|
240
|
-
const token = match[2] ?? "";
|
|
241
|
-
text += input.slice(lastIndex, index);
|
|
228
|
+
for (const reference of inlineFileReferences(input)) {
|
|
229
|
+
text += input.slice(lastIndex, reference.start);
|
|
242
230
|
|
|
243
|
-
const direct = await readFileReferenceAsync(
|
|
231
|
+
const direct = await readFileReferenceAsync(reference.fileArg, {
|
|
244
232
|
...options,
|
|
245
233
|
missing: "leave",
|
|
246
234
|
includeImages: options.includeImages === true,
|
|
247
235
|
});
|
|
248
|
-
if (direct.text !== `@${
|
|
236
|
+
if (direct.text !== `@${reference.fileArg}`) {
|
|
249
237
|
diagnostics.push(...direct.diagnostics);
|
|
250
238
|
images.push(...direct.images);
|
|
251
239
|
referencedPaths.push(...direct.referencedPaths);
|
|
252
|
-
text +=
|
|
253
|
-
lastIndex =
|
|
240
|
+
text += direct.text;
|
|
241
|
+
lastIndex = reference.end;
|
|
254
242
|
continue;
|
|
255
243
|
}
|
|
256
244
|
|
|
257
|
-
const { fileArg, suffix } =
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
245
|
+
const { fileArg, suffix } = reference.quoted
|
|
246
|
+
? { fileArg: reference.fileArg, suffix: "" }
|
|
247
|
+
: splitTrailingPunctuation(reference.fileArg);
|
|
248
|
+
if (fileArg === reference.fileArg) {
|
|
249
|
+
text += reference.raw;
|
|
250
|
+
lastIndex = reference.end;
|
|
261
251
|
continue;
|
|
262
252
|
}
|
|
263
253
|
|
|
@@ -267,15 +257,15 @@ export async function expandInlineFileReferencesAsync(
|
|
|
267
257
|
includeImages: options.includeImages === true,
|
|
268
258
|
});
|
|
269
259
|
if (stripped.text === `@${fileArg}`) {
|
|
270
|
-
text +=
|
|
271
|
-
lastIndex =
|
|
260
|
+
text += reference.raw;
|
|
261
|
+
lastIndex = reference.end;
|
|
272
262
|
continue;
|
|
273
263
|
}
|
|
274
264
|
diagnostics.push(...stripped.diagnostics);
|
|
275
265
|
images.push(...stripped.images);
|
|
276
266
|
referencedPaths.push(...stripped.referencedPaths);
|
|
277
|
-
text += `${
|
|
278
|
-
lastIndex =
|
|
267
|
+
text += `${stripped.text}${suffix}`;
|
|
268
|
+
lastIndex = reference.end;
|
|
279
269
|
}
|
|
280
270
|
text += input.slice(lastIndex);
|
|
281
271
|
return { text, images, diagnostics, referencedPaths };
|
|
@@ -63,7 +63,7 @@ export interface ManagedCommitAttributionEnvironment {
|
|
|
63
63
|
export function reportCommitAttributionDiagnostic(diagnostic: string | null): void {
|
|
64
64
|
if (diagnostic === null || reportedDiagnostics.has(diagnostic)) return;
|
|
65
65
|
reportedDiagnostics.add(diagnostic);
|
|
66
|
-
process.stderr.write(`[clio:attribution] ${diagnostic}\n`);
|
|
66
|
+
process.stderr.write(`[clio-coder:attribution] ${diagnostic}\n`);
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
export function setGitCommitAttributionEnabled(enabled: boolean): void {
|
|
@@ -74,12 +74,6 @@ export function gitCommitAttributionEnabled(source: NodeJS.ProcessEnv = process.
|
|
|
74
74
|
return source[CLIO_GIT_COMMITS_ENABLED_ENV] !== "0";
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
/** Forget cached repository probes and the installed managed hooks directory. */
|
|
78
|
-
export function resetGitCommitAttributionCachesForTests(): void {
|
|
79
|
-
probeCache.clear();
|
|
80
|
-
installedHooksDirectory = null;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
77
|
function boundedDiagnostic(message: string): string {
|
|
84
78
|
const folded = message.replace(/\s+/gu, " ").trim();
|
|
85
79
|
return folded.length <= DIAGNOSTIC_MAX_CHARS ? folded : `${folded.slice(0, DIAGNOSTIC_MAX_CHARS - 3)}...`;
|
|
@@ -171,7 +165,7 @@ hook_name=$(basename "$0")
|
|
|
171
165
|
base_count=$${CONFIG_BASE_COUNT_ENV}
|
|
172
166
|
case "$base_count" in
|
|
173
167
|
'' | *[!0-9]*)
|
|
174
|
-
printf '%s\\n' '[clio:attribution] invalid managed hook environment' >&2
|
|
168
|
+
printf '%s\\n' '[clio-coder:attribution] invalid managed hook environment' >&2
|
|
175
169
|
exit 0
|
|
176
170
|
;;
|
|
177
171
|
0) unset GIT_CONFIG_COUNT ;;
|
|
@@ -241,7 +235,7 @@ has_trailer() {
|
|
|
241
235
|
append_trailer() {
|
|
242
236
|
if has_trailer "$1"; then return 0; fi
|
|
243
237
|
git interpret-trailers --in-place --if-exists=addIfDifferent --trailer "$1" "$message_file" ||
|
|
244
|
-
printf '%s\\n' '[clio:attribution] git interpret-trailers failed; commit left as written' >&2
|
|
238
|
+
printf '%s\\n' '[clio-coder:attribution] git interpret-trailers failed; commit left as written' >&2
|
|
245
239
|
}
|
|
246
240
|
|
|
247
241
|
if [ "$${ASSISTED_ENV}" = '1' ] || [ "$${AUTHORED_ENV}" = '1' ]; then
|
package/src/core/guardrails.ts
CHANGED
|
@@ -76,6 +76,30 @@ export const GUARDRAIL_ENV_VARS: Readonly<Record<keyof GuardrailValues, string>>
|
|
|
76
76
|
internalDispatchTimeoutMs: "CLIO_CODER_INTERNAL_DISPATCH_TIMEOUT_MS",
|
|
77
77
|
};
|
|
78
78
|
|
|
79
|
+
/** Project canonical v2 settings leaves onto the process-local guardrail registry. */
|
|
80
|
+
export function guardrailValuesFromSettings(settings: {
|
|
81
|
+
safety: {
|
|
82
|
+
limits: {
|
|
83
|
+
chatToolCallsPerTurn: number;
|
|
84
|
+
readBytesPerCall: number;
|
|
85
|
+
observationBytesPerTurn: number;
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
fleet: {
|
|
89
|
+
limits: { toolCallsPerRun: number; internalRunTimeoutMs: number };
|
|
90
|
+
history: { maxRuns: number };
|
|
91
|
+
};
|
|
92
|
+
}): GuardrailValues {
|
|
93
|
+
return {
|
|
94
|
+
turnToolCallBudget: settings.safety.limits.chatToolCallsPerTurn,
|
|
95
|
+
workerToolCallCap: settings.fleet.limits.toolCallsPerRun,
|
|
96
|
+
maxDispatchRuns: settings.fleet.history.maxRuns,
|
|
97
|
+
readMaxBytes: settings.safety.limits.readBytesPerCall,
|
|
98
|
+
observationTurnBudgetBytes: settings.safety.limits.observationBytesPerTurn,
|
|
99
|
+
internalDispatchTimeoutMs: settings.fleet.limits.internalRunTimeoutMs,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
79
103
|
/**
|
|
80
104
|
* Older env spellings that still read. `CLIO_CODER_MAX_RUNS` was the only
|
|
81
105
|
* guardrail whose variable was not the SCREAMING_SNAKE of its key, and CI
|
|
@@ -112,10 +136,6 @@ export function workerSynthesisReserveBlockReason(tool: string, remaining: numbe
|
|
|
112
136
|
);
|
|
113
137
|
}
|
|
114
138
|
|
|
115
|
-
export function isWorkerSynthesisReserveBlockReason(reason: string): boolean {
|
|
116
|
-
return /^workerToolCallReserve: only [1-9]\d* of [1-9]\d* tool calls remain/.test(reason);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
139
|
export function workerToolCallCapExceededReason(cap: number): string {
|
|
120
140
|
return `workerToolCallCap reached (${cap}); abort run`;
|
|
121
141
|
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Released naming aliases retained for the v0.5 and v0.6 compatibility window.
|
|
3
|
+
* Canonical writers must never call this helper; it exists only at read and
|
|
4
|
+
* protocol boundaries where an older Clio Coder installation can still be the
|
|
5
|
+
* producer.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const warned = new Set<string>();
|
|
9
|
+
|
|
10
|
+
export const LEGACY_NAMING_COMPATIBILITY_RETIREMENT = "v0.7.0";
|
|
11
|
+
|
|
12
|
+
/** Emit one deprecation diagnostic per legacy/canonical pair in this process. */
|
|
13
|
+
export function warnLegacyNaming(legacy: string, canonical: string): void {
|
|
14
|
+
const key = `${legacy}\0${canonical}`;
|
|
15
|
+
if (warned.has(key)) return;
|
|
16
|
+
warned.add(key);
|
|
17
|
+
process.emitWarning(
|
|
18
|
+
`'${legacy}' is a deprecated Clio Coder identifier; use '${canonical}'. ` +
|
|
19
|
+
`Legacy naming compatibility is scheduled for removal in ${LEGACY_NAMING_COMPATIBILITY_RETIREMENT}.`,
|
|
20
|
+
{ code: "CLIO_CODER_LEGACY_NAMING", type: "DeprecationWarning" },
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Prefer a canonical environment variable and temporarily fall back to its released alias. */
|
|
25
|
+
export function readNamingEnvironment(
|
|
26
|
+
environment: NodeJS.ProcessEnv,
|
|
27
|
+
canonical: string,
|
|
28
|
+
legacy: string,
|
|
29
|
+
): string | undefined {
|
|
30
|
+
const current = environment[canonical]?.trim();
|
|
31
|
+
if (current) return current;
|
|
32
|
+
const fallback = environment[legacy]?.trim();
|
|
33
|
+
if (!fallback) return undefined;
|
|
34
|
+
warnLegacyNaming(legacy, canonical);
|
|
35
|
+
return fallback;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Parent-to-child bridge used only during the two-minor compatibility window. */
|
|
39
|
+
export function namingCompatibilityEnvironment(
|
|
40
|
+
canonical: string,
|
|
41
|
+
legacy: string,
|
|
42
|
+
value: string,
|
|
43
|
+
): Record<string, string> {
|
|
44
|
+
return { [canonical]: value, [legacy]: value };
|
|
45
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
const CLIO_CODER_EVENT_SUFFIXES = new Set([
|
|
2
|
+
"permission_escalated",
|
|
3
|
+
"permission_resolved",
|
|
4
|
+
"plan_update",
|
|
5
|
+
"run_outcome",
|
|
6
|
+
"safety_decision",
|
|
7
|
+
"skill_activation",
|
|
8
|
+
"steer_received",
|
|
9
|
+
"tool_activity",
|
|
10
|
+
"tool_finish",
|
|
11
|
+
"tool_start",
|
|
12
|
+
"usage",
|
|
13
|
+
"verification",
|
|
14
|
+
"write_record_downgraded",
|
|
15
|
+
]);
|
|
16
|
+
|
|
17
|
+
/** Canonicalize one released snake-case event id without accepting arbitrary prefixes. */
|
|
18
|
+
export function normalizeClioCoderEventType(type: string): string {
|
|
19
|
+
if (!type.startsWith("clio_") || type.startsWith("clio_coder_")) return type;
|
|
20
|
+
const suffix = type.slice("clio_".length);
|
|
21
|
+
return CLIO_CODER_EVENT_SUFFIXES.has(suffix) ? `clio_coder_${suffix}` : type;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Clone one decoded event only when its top-level discriminator is legacy. */
|
|
25
|
+
export function normalizeClioCoderEventRecord(record: Record<string, unknown>): Record<string, unknown> {
|
|
26
|
+
if (typeof record.type !== "string") return record;
|
|
27
|
+
const type = normalizeClioCoderEventType(record.type);
|
|
28
|
+
return type === record.type ? record : { ...record, type };
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Normalize legacy event discriminators in an in-memory decoded history tree.
|
|
33
|
+
* This never writes the source session/eval/evidence file.
|
|
34
|
+
*/
|
|
35
|
+
export function normalizeClioCoderEventTree(value: unknown): unknown {
|
|
36
|
+
if (Array.isArray(value)) {
|
|
37
|
+
let changed = false;
|
|
38
|
+
const next = value.map((entry) => {
|
|
39
|
+
const normalized = normalizeClioCoderEventTree(entry);
|
|
40
|
+
if (normalized !== entry) changed = true;
|
|
41
|
+
return normalized;
|
|
42
|
+
});
|
|
43
|
+
return changed ? next : value;
|
|
44
|
+
}
|
|
45
|
+
if (typeof value !== "object" || value === null) return value;
|
|
46
|
+
const record = value as Record<string, unknown>;
|
|
47
|
+
let changed = false;
|
|
48
|
+
const next: Record<string, unknown> = {};
|
|
49
|
+
for (const [key, entry] of Object.entries(record)) {
|
|
50
|
+
const normalized = normalizeClioCoderEventTree(entry);
|
|
51
|
+
next[key] = normalized;
|
|
52
|
+
if (normalized !== entry) changed = true;
|
|
53
|
+
}
|
|
54
|
+
if (typeof record.type === "string") {
|
|
55
|
+
const type = normalizeClioCoderEventType(record.type);
|
|
56
|
+
if (type !== record.type) {
|
|
57
|
+
next.type = type;
|
|
58
|
+
changed = true;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return changed ? next : value;
|
|
62
|
+
}
|
|
@@ -14,7 +14,7 @@ import { join } from "node:path";
|
|
|
14
14
|
import { safeResourceWrite } from "./safe-resource-write.js";
|
|
15
15
|
import { clioStateDir, stateRootRemoved } from "./xdg.js";
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
function recentModelsPath(): string {
|
|
18
18
|
return join(clioStateDir(), "recent-models.json");
|
|
19
19
|
}
|
|
20
20
|
|
|
@@ -83,9 +83,3 @@ export function rememberRecentModel(ref: string, limit: number): string[] {
|
|
|
83
83
|
}
|
|
84
84
|
return next;
|
|
85
85
|
}
|
|
86
|
-
|
|
87
|
-
/** Test hook: clear the in-process cache after CLIO_* dir overrides change. */
|
|
88
|
-
export function resetRecentModelsCache(): void {
|
|
89
|
-
cache = null;
|
|
90
|
-
cachePath = null;
|
|
91
|
-
}
|
|
@@ -43,14 +43,10 @@ export function protectedResidencyModels(settings: ClioSettings): ProtectedModel
|
|
|
43
43
|
if (!trimmed || byId.has(trimmed)) return;
|
|
44
44
|
byId.set(trimmed, role);
|
|
45
45
|
};
|
|
46
|
-
add(settings.
|
|
47
|
-
add(settings.
|
|
48
|
-
add(settings.
|
|
49
|
-
for (const profile of Object.values(settings.
|
|
46
|
+
add(settings.chat.model, "chat");
|
|
47
|
+
add(settings.context.memory.model, "memory");
|
|
48
|
+
add(settings.fleet.default.model, "worker");
|
|
49
|
+
for (const profile of Object.values(settings.fleet.profiles ?? {})) add(profile.model, "worker");
|
|
50
50
|
for (const target of settings.targets) add(target.defaultModel, "target-default");
|
|
51
51
|
return [...byId].map(([modelId, role]) => ({ modelId, role }));
|
|
52
52
|
}
|
|
53
|
-
|
|
54
|
-
export function protectedResidencyModelIds(settings: ClioSettings): string[] {
|
|
55
|
-
return protectedResidencyModels(settings).map((ref) => ref.modelId);
|
|
56
|
-
}
|
|
@@ -50,7 +50,7 @@ function warnStaticCommand(config: string, options?: ResolveConfigValueOptions):
|
|
|
50
50
|
});
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
function expandConfigValue(value: string, options?: ResolveConfigValueOptions): string {
|
|
54
54
|
const sourceEnv = env(options);
|
|
55
55
|
return value.replace(/\$(\w+)|\$\{([^}]+)\}/g, (match, bare: string | undefined, braced: string | undefined) => {
|
|
56
56
|
const key = bare ?? braced;
|
|
@@ -101,20 +101,6 @@ export function responseModelIdObservationFromRecord(
|
|
|
101
101
|
return { state: "legacy-difference-only", differingModelId: nonEmptyString(record.responseModel) };
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
/** Human vocabulary shared by usage, footer, and receipt projections. */
|
|
105
|
-
export function responseModelIdObservationLabel(observation: ResponseModelIdObservation): string {
|
|
106
|
-
switch (observation.state) {
|
|
107
|
-
case "reported":
|
|
108
|
-
return "reported";
|
|
109
|
-
case "not-reported":
|
|
110
|
-
return "not reported";
|
|
111
|
-
case "not-observed":
|
|
112
|
-
return "not observed";
|
|
113
|
-
case "legacy-difference-only":
|
|
114
|
-
return "legacy difference-only";
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
104
|
/** Model id used for accounting without claiming more than the observation supports. */
|
|
119
105
|
export function attributedModelId(
|
|
120
106
|
observation: ResponseModelIdObservation,
|
|
@@ -21,6 +21,28 @@ export const RESPONSE_SCHEMA_RUNTIME_ID = "llamacpp";
|
|
|
21
21
|
/** The runtime that takes the standard OpenAI `json_schema` response format. */
|
|
22
22
|
export const OPENAI_SCHEMA_RUNTIME_ID = "lmstudio";
|
|
23
23
|
|
|
24
|
+
/**
|
|
25
|
+
* The LiteLLM gateway, which takes the same standard `json_schema` format.
|
|
26
|
+
*
|
|
27
|
+
* This is the one gateway admitted to the table above, and it is admitted on
|
|
28
|
+
* measurement rather than on the api family the warning describes. Against a
|
|
29
|
+
* LiteLLM v1.98.0 proxy fronting both a llama.cpp and an LM Studio upstream:
|
|
30
|
+
* `{"type":"json_schema", json_schema:{...}}` was grammar-enforced end to end
|
|
31
|
+
* through both, `{"type":"json_object", schema:{...}}` was enforced through
|
|
32
|
+
* llama.cpp but rejected HTTP 400 by LM Studio, and the same prompt with no
|
|
33
|
+
* `response_format` returned plain prose. LiteLLM's `drop_params` did not strip
|
|
34
|
+
* either spelling, because `response_format` is a parameter it recognizes and
|
|
35
|
+
* forwards whole.
|
|
36
|
+
*
|
|
37
|
+
* The standard dialect is therefore the only one that holds across every
|
|
38
|
+
* upstream a gateway may route to, which is why LiteLLM belongs with LM Studio
|
|
39
|
+
* here and not with llama.cpp. Re-verify with the gateway's own smoke test
|
|
40
|
+
* before trusting this against a proxy other than LiteLLM: the hazard the
|
|
41
|
+
* warning names is real, and the only thing that makes this entry safe is that
|
|
42
|
+
* somebody measured it.
|
|
43
|
+
*/
|
|
44
|
+
export const GATEWAY_SCHEMA_RUNTIME_ID = "litellm";
|
|
45
|
+
|
|
24
46
|
/**
|
|
25
47
|
* How a runtime spells a JSON-schema response constraint on the wire.
|
|
26
48
|
*
|
|
@@ -47,14 +69,32 @@ export type ResponseSchemaDialect = "llamacpp-json-object" | "openai-json-schema
|
|
|
47
69
|
export function responseSchemaDialectFor(runtimeId: string): ResponseSchemaDialect | null {
|
|
48
70
|
if (runtimeId === RESPONSE_SCHEMA_RUNTIME_ID) return "llamacpp-json-object";
|
|
49
71
|
if (runtimeId === OPENAI_SCHEMA_RUNTIME_ID) return "openai-json-schema";
|
|
72
|
+
if (runtimeId === GATEWAY_SCHEMA_RUNTIME_ID) return "openai-json-schema";
|
|
50
73
|
return null;
|
|
51
74
|
}
|
|
52
75
|
|
|
53
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* Whether this runtime speaks the dialect above. Transport shape, not capability.
|
|
78
|
+
*
|
|
79
|
+
* LiteLLM joins llama.cpp here because a gateway in front of llama.cpp is the
|
|
80
|
+
* same transport with one hop added, and the hop was measured not to alter it.
|
|
81
|
+
* That is what admits a contract-bearing worker to a gateway target; without
|
|
82
|
+
* it, every typed agent behind a proxy is refused rather than enforced.
|
|
83
|
+
*
|
|
84
|
+
* It also opts LiteLLM into {@link responseSchemaConflictsWithTools}, which is
|
|
85
|
+
* deliberately conservative. Whether a schema and a tool surface can constrain
|
|
86
|
+
* the same completion is a property of the upstream, and one alias may route to
|
|
87
|
+
* llama.cpp (which refuses both with HTTP 400) while another routes to LM Studio
|
|
88
|
+
* (which accepts them). A runtime id cannot tell those apart, so this treats
|
|
89
|
+
* every gateway upstream as if it were the refusing one. The cost is a
|
|
90
|
+
* tool-bearing contract run through an LM Studio upstream falling back to the
|
|
91
|
+
* prompt parser when it did not strictly have to. The alternative is paying a
|
|
92
|
+
* round trip to discover a predictable 400, and having the answer depend on
|
|
93
|
+
* which deployment the proxy happened to pick for that request.
|
|
94
|
+
*/
|
|
54
95
|
export function runtimeSpeaksResponseSchemaDialect(runtime: { id: string; kind: string; apiFamily: string }): boolean {
|
|
55
|
-
return
|
|
56
|
-
|
|
57
|
-
);
|
|
96
|
+
if (runtime.kind !== "http" || runtime.apiFamily !== "openai-completions") return false;
|
|
97
|
+
return runtime.id === RESPONSE_SCHEMA_RUNTIME_ID || runtime.id === GATEWAY_SCHEMA_RUNTIME_ID;
|
|
58
98
|
}
|
|
59
99
|
|
|
60
100
|
/**
|