@iowarp/clio-coder 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/README.md +116 -16
- package/dist/{acp-G5WJBNCT.js → acp-ZILU3AUO.js} +14 -14
- package/dist/{agents-FMV2Q5G4.js → agents-HYWGBGQR.js} +40 -29
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-3IDSJEIK.js → auth-N3QT7CBO.js} +21 -19
- package/dist/{builtins-XCZWXSC7.js → builtins-UJLMOVOV.js} +6 -6
- package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
- package/dist/{chunk-3BT2XMV4.js → chunk-2NM363SV.js} +50 -57
- package/dist/{chunk-J4W7KFM7.js → chunk-2VG7KLYV.js} +24 -279
- package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
- package/dist/{chunk-K5C3NCBD.js → chunk-3I5NY75V.js} +5 -5
- package/dist/{chunk-VAZSBTKF.js → chunk-3QSOM6PA.js} +2 -2
- package/dist/{chunk-TZ3SGWZZ.js → chunk-5QIAJV2D.js} +2 -2
- package/dist/{chunk-OQBA45DZ.js → chunk-5YHDIDBP.js} +2 -2
- package/dist/{chunk-NHLBIGRH.js → chunk-6CCS4G3W.js} +40 -17
- package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
- package/dist/{chunk-LDQ2ZF2M.js → chunk-6FN3E6KX.js} +5 -5
- package/dist/{chunk-X3YGUTOB.js → chunk-6HMJX2VU.js} +59 -59
- package/dist/{chunk-VEO4AP2K.js → chunk-6I5ILFOF.js} +3 -2
- package/dist/{chunk-B7OBL7PK.js → chunk-6NJQITNH.js} +18 -11
- package/dist/{chunk-IQ7KR472.js → chunk-6VC4OV3Z.js} +6 -3
- package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
- package/dist/{chunk-AB44T6BB.js → chunk-74YWRRU5.js} +8 -7
- package/dist/{chunk-SJ5ZKQ4S.js → chunk-7EPLI7VL.js} +2 -2
- package/dist/{chunk-HWHKMHUA.js → chunk-7OBGU7UB.js} +3 -3
- package/dist/{chunk-2OQE55CK.js → chunk-7PWAODYW.js} +2 -2
- package/dist/{chunk-IBEBSCYA.js → chunk-7RY5VZPH.js} +42 -33
- package/dist/{chunk-LQ3DZAMX.js → chunk-ABLSQ6JX.js} +2 -2
- package/dist/{chunk-QLFS5GO2.js → chunk-AFKWHWXF.js} +12 -22
- package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
- package/dist/{chunk-O6TL7WWY.js → chunk-AKB4GYDL.js} +4 -4
- package/dist/chunk-AP73CFDC.js +308 -0
- package/dist/{chunk-JDG2WCRO.js → chunk-BBTJOK6Y.js} +5 -5
- package/dist/{chunk-SP2RXXYO.js → chunk-BDPT6GTK.js} +10 -10
- package/dist/{chunk-NQQH3YT7.js → chunk-BJGUKIG4.js} +3 -3
- package/dist/{chunk-O4XIVISU.js → chunk-BTGG6BG2.js} +79 -38
- package/dist/chunk-BTK3SSSK.js +67 -0
- package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
- package/dist/chunk-BWW4HLO4.js +301 -0
- package/dist/{chunk-I5VEOC6I.js → chunk-C537JADH.js} +10 -10
- package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
- package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
- package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
- package/dist/chunk-D7E7WCDF.js +27 -0
- package/dist/{chunk-WZR7K7ZX.js → chunk-E67WX76H.js} +6 -6
- package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
- package/dist/chunk-EIMVLWB3.js +1842 -0
- package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
- package/dist/{chunk-MLKNTWH2.js → chunk-FYUN5KZ3.js} +21 -21
- package/dist/{chunk-YJX4SHTD.js → chunk-GIZNH63R.js} +1 -1
- package/dist/{chunk-X75E3D2N.js → chunk-GPPB3JBE.js} +18 -16
- package/dist/{chunk-GR5G2PVF.js → chunk-GVQJ5CCZ.js} +15 -10
- package/dist/chunk-HJWWJ6IL.js +184 -0
- package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
- package/dist/{chunk-VYMXRQI6.js → chunk-HUAS7ITX.js} +89 -93
- package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
- package/dist/{chunk-DYJP44XW.js → chunk-IG7BCQBA.js} +1 -1
- package/dist/{chunk-32KWKNSF.js → chunk-IXJT6DCX.js} +3 -3
- package/dist/{chunk-C2LTL2W6.js → chunk-J4HBWF6Y.js} +360 -172
- package/dist/chunk-J5LZHVIT.js +284 -0
- package/dist/{chunk-QLL7ILRG.js → chunk-JA5QWE4Z.js} +510 -202
- package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
- package/dist/{chunk-36EJLSQQ.js → chunk-JZWT5J3Y.js} +4 -4
- package/dist/{chunk-HZHHCK24.js → chunk-K6BF4U2H.js} +476 -322
- package/dist/{chunk-Z2RR6MAK.js → chunk-MA3H6DM5.js} +6 -6
- package/dist/{chunk-CODPRO7Q.js → chunk-MOPSG2X7.js} +6 -6
- package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
- package/dist/{chunk-YDFRH54B.js → chunk-N5UK64DP.js} +4 -4
- package/dist/chunk-NDDGJUXD.js +81 -0
- package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
- package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
- package/dist/{chunk-W5VSYASO.js → chunk-OJTRZGR3.js} +46 -87
- package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
- package/dist/{chunk-3URVFKWK.js → chunk-PJJ6MY27.js} +5 -5
- package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
- package/dist/{chunk-GKF55TAZ.js → chunk-PVAMAVBB.js} +3 -2
- package/dist/{chunk-6DB53AJS.js → chunk-QKIFBZKT.js} +7 -7
- package/dist/{chunk-HJJTYUHX.js → chunk-QMXC4JB7.js} +20 -20
- package/dist/chunk-QTFGO774.js +644 -0
- package/dist/{chunk-CY6FY24N.js → chunk-R23Z6K6I.js} +2 -2
- package/dist/{chunk-ULC6OTWO.js → chunk-R32CLGZ6.js} +13 -13
- package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
- package/dist/{chunk-F4CKPOEQ.js → chunk-SCYB3HA4.js} +72 -26
- package/dist/{chunk-LY4S7GJC.js → chunk-SINK3QR6.js} +18 -16
- package/dist/{chunk-U77AMWDL.js → chunk-TD3PGPQA.js} +43 -22
- package/dist/{chunk-QBJA7R7N.js → chunk-THYWACCR.js} +2 -2
- package/dist/{chunk-QREDIESB.js → chunk-TVH4ONAM.js} +14 -8
- package/dist/chunk-U2WB7TZS.js +271 -0
- package/dist/{chunk-KFZI4NIL.js → chunk-UAPGZHYC.js} +145 -31
- package/dist/{chunk-DQITNCXG.js → chunk-UEDMSP56.js} +29 -14
- package/dist/{chunk-3XML7CDN.js → chunk-UXN6JT4W.js} +2 -2
- package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
- package/dist/{chunk-BPKCPIL7.js → chunk-VEGN6WIQ.js} +2 -2
- package/dist/chunk-VKFQTNDV.js +66 -0
- package/dist/{chunk-7MCTRUCE.js → chunk-VKRH2TCS.js} +2 -2
- package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
- package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
- package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
- package/dist/{chunk-SUCTJL45.js → chunk-WR6U3OVP.js} +3 -3
- package/dist/{chunk-BUMFYQFY.js → chunk-XKA2ICR3.js} +124 -113
- package/dist/{chunk-UXMFQ54G.js → chunk-Y45G3AXC.js} +39 -39
- package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
- package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
- package/dist/{chunk-V5DHCITQ.js → chunk-ZAZB4JMW.js} +23 -12
- package/dist/{chunk-Z4TXYIEG.js → chunk-ZJLUDYFY.js} +9 -9
- package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
- package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
- package/dist/cli/index.js +36 -36
- package/dist/{clio-2JXHBBY5.js → clio-IT3G3VQH.js} +12 -13
- package/dist/{code-nav-3YYRMYNF.js → code-nav-RK6S7F6E.js} +5 -5
- package/dist/codewiki/build-worker.js +1 -1
- package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
- package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
- package/dist/{config-QZPCMYSO.js → config-3QZRWZJF.js} +53 -49
- package/dist/{configure-TEGEBYCA.js → configure-FL7Y3KJF.js} +25 -22
- package/dist/{context-E6H5RNMC.js → context-5HE7ODYK.js} +47 -43
- package/dist/{context-AV7OEZ4D.js → context-KYQFRVDC.js} +11 -11
- package/dist/{context-GSXUE4CT.js → context-XNHL75JV.js} +32 -19
- package/dist/{context-clear-SHIBYK6T.js → context-clear-N545L53A.js} +47 -43
- package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-QHKXSV2F.js} +10 -9
- package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-RGIE5PCT.js} +56 -47
- package/dist/{docs-23KQS3XK.js → docs-5NAF6AU7.js} +5 -11
- package/dist/doctor-ZGPEGHIP.js +772 -0
- package/dist/{eval-TFBYQH4H.js → eval-GXLL44RD.js} +63 -45
- package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-HBWSWQOK.js} +7 -8
- package/dist/{evidence-ERGESKGN.js → evidence-HWLBRH3Q.js} +44 -40
- package/dist/{evolve-VDXTSYCJ.js → evolve-FTZBMNVW.js} +43 -39
- package/dist/{extensions-7BGBHN57.js → extensions-VHRBEID7.js} +4 -4
- package/dist/{fleet-2RRVDF2V.js → fleet-CKZHJWZJ.js} +86 -73
- package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EXDXBMV6.js} +10 -9
- package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-OTHB6KRL.js} +5 -5
- package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-YTEZUCUT.js} +13 -11
- package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-SS6YMDCK.js} +44 -41
- package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-PBY4VYOM.js} +5 -9
- package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-KMEM5L3S.js} +16 -13
- package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-QD5M7E7Q.js} +42 -39
- package/dist/{fleet-view-ZCON35AG.js → fleet-view-WAMJYNDT.js} +44 -52
- package/dist/{init-DN2WWLFE.js → init-5XQRBOFV.js} +63 -58
- package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
- package/dist/{interop-OZBKXAYL.js → interop-34TVO25M.js} +13 -11
- package/dist/{library-YWZG7IMW.js → library-3QY6KF57.js} +17 -14
- package/dist/{memory-I4C4HMLW.js → memory-L4UTIIIW.js} +45 -41
- package/dist/{models-CEYXJBO6.js → models-ZVX3QOWE.js} +39 -31
- package/dist/{monitor-NZ6GCI3P.js → monitor-CEKVSYTS.js} +50 -46
- package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-77BAP6BC.js} +1807 -1039
- package/dist/{panes-KY6W3V2E.js → panes-7STHOAUJ.js} +4 -4
- package/dist/{panes-HMABYVO4.js → panes-SHAUIRXY.js} +10 -8
- package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
- package/dist/{reset-DQ6FGCSH.js → reset-EOLM7GVE.js} +7 -8
- package/dist/{resources-BB3MVJMD.js → resources-74GKTLSF.js} +17 -13
- package/dist/{run-H2GQDUER.js → run-HBAUJNNZ.js} +86 -76
- package/dist/{share-GTJN6A5O.js → share-G3APVLVP.js} +17 -14
- package/dist/{skills-L55TEW6R.js → skills-35HHUKCR.js} +19 -16
- package/dist/{skills-eval-XVXPH2JI.js → skills-eval-QN4HSHDC.js} +55 -57
- package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-J357J34F.js} +15 -12
- package/dist/{slash-commands-ZSGASKJC.js → slash-commands-JZZCQA32.js} +31 -29
- package/dist/{steer-RZGSCY4R.js → steer-XAVHJM22.js} +3 -3
- package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
- package/dist/{targets-NCPZ644J.js → targets-DSM6CY3M.js} +59 -53
- package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-JOPFUVEM.js} +14 -9
- package/dist/{tools-DAF3DI3C.js → tools-MKNWVPBH.js} +10 -8
- package/dist/{trace-FYVW2MQA.js → trace-ECQ7TIYZ.js} +48 -3
- package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
- package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
- package/dist/{upgrade-3XPP6OQL.js → upgrade-H7TOM7YL.js} +35 -62
- package/dist/{usage-3NLHGTU2.js → usage-X52N3IDJ.js} +51 -48
- package/dist/{verifiers-SSQONKRT.js → verifiers-EJTVVSMA.js} +10 -9
- package/dist/{verify-3U6J7FZI.js → verify-YJL6XET2.js} +9 -8
- package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPIFL3LL.js} +1 -2
- package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-4NDZTQ4B.js} +66 -63
- package/dist/{with-panes-MKB46MPQ.js → with-panes-OBOBFIIR.js} +62 -26
- package/dist/worker/entry.js +57 -52
- package/docs/acp.md +1 -1
- package/docs/built-in-agents.md +40 -32
- package/docs/commands-and-modes.md +9 -3
- package/docs/config-knobs-audit.md +3 -0
- package/docs/configuration-and-targets.md +105 -164
- package/docs/environment-variables.md +2 -1
- package/docs/exit-codes-and-output.md +2 -0
- package/docs/fleet-demo-runbook.md +6 -3
- package/docs/fleet-dispatch.md +8 -6
- package/docs/installation-and-lifecycle.md +1 -1
- package/docs/release-cut-checklist.md +164 -177
- package/docs/trace-store.md +15 -10
- package/docs/troubleshooting.md +1 -1
- package/evals/README.md +5 -0
- package/evals/behavioral-corpus-grader.mjs +103 -0
- package/evals/behavioral-machinery-baseline.json +2276 -0
- package/evals/behavioral-machinery-driver.ts +250 -0
- package/evals/behavioral-machinery-support.ts +253 -0
- package/evals/behavioral-machinery.yaml +614 -0
- package/evals/behavioral-model-negative-control.yaml +68 -0
- package/evals/behavioral-model.yaml +216 -0
- package/evals/fixtures/behavioral-facts.txt +3 -0
- package/evals/fixtures/behavioral-main.ts +7 -0
- package/evals/fixtures/decoy/note.txt +2 -0
- package/evals/fixtures/private/credentials.txt +1 -0
- package/evals/tracked-metrics-baseline.yaml +229 -0
- package/evals/tracked-metrics-grader.mjs +129 -0
- package/package.json +5 -15
- package/skills/README.md +6 -6
- package/skills/coding/ast-grep/SKILL.md +8 -2
- package/skills/coding/coding-standards/SKILL.md +8 -2
- package/skills/coding/prototype/SKILL.md +8 -2
- package/skills/coding/tdd/SKILL.md +8 -2
- package/skills/context/context-handoff/SKILL.md +12 -3
- package/skills/context/context-handoff/evals.md +3 -3
- package/skills/context/context-prime/SKILL.md +8 -2
- package/skills/context/context-prime/evals.md +2 -2
- package/skills/git/file-ticket/SKILL.md +9 -4
- package/skills/git/file-ticket/evals.md +2 -2
- package/skills/git/fix-issue/SKILL.md +12 -5
- package/skills/git/fix-issue/evals.md +4 -4
- package/skills/git/resolve-merge-conflicts/SKILL.md +8 -2
- package/skills/git/resolve-merge-conflicts/evals.md +2 -2
- package/skills/git/ship/SKILL.md +9 -3
- package/skills/git/ship/evals.md +4 -4
- package/skills/git/worktree-create/SKILL.md +7 -2
- package/skills/git/worktree-create/evals.md +6 -6
- package/skills/git/worktree-merge/SKILL.md +7 -2
- package/skills/git/worktree-merge/evals.md +6 -6
- package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
- package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
- package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
- package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
- package/skills/meta/credentials/SKILL.md +9 -2
- package/skills/meta/find-skills/SKILL.md +8 -2
- package/skills/meta/herdr/SKILL.md +8 -2
- package/skills/meta/skill-craft/SKILL.md +21 -4
- package/skills/planning/architecture/SKILL.md +9 -3
- package/skills/planning/backlog/SKILL.md +8 -2
- package/skills/planning/prd/SKILL.md +8 -2
- package/skills/planning/product-intent/SKILL.md +8 -2
- package/skills/planning/tech-spec/SKILL.md +9 -3
- package/skills/registry.yaml +66 -66
- package/skills/research/arxiv-literature/SKILL.md +8 -2
- package/skills/research/experiment-protocol/SKILL.md +9 -2
- package/skills/research/scientific-debugging/SKILL.md +9 -2
- package/skills/research/scientific-debugging/evals.md +2 -2
- package/skills/research/scientific-modernization/SKILL.md +9 -2
- package/skills/skill-marketplace.json +257 -38
- package/skills/workflow/cut-it/SKILL.md +10 -2
- package/skills/workflow/design-council/SKILL.md +11 -2
- package/skills/workflow/grill-me/SKILL.md +8 -2
- package/skills/workflow/workflow-distiller/SKILL.md +8 -2
- package/src/cli/acp.ts +2 -2
- package/src/cli/auth.ts +2 -2
- package/src/cli/bootstrap-generate.ts +5 -5
- package/src/cli/clio.ts +6 -1
- package/src/cli/config-inspect.ts +3 -3
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure.ts +27 -27
- package/src/cli/default-target.ts +1 -1
- package/src/cli/docs.ts +6 -6
- package/src/cli/doctor-naming.ts +323 -0
- package/src/cli/doctor-panes.ts +46 -14
- package/src/cli/doctor-toolchain.ts +29 -8
- package/src/cli/doctor.ts +15 -1
- package/src/cli/eval-inventory.ts +8 -8
- package/src/cli/evidence-detail.ts +1 -1
- package/src/cli/evidence-inventory.ts +1 -1
- package/src/cli/fleet-decisions.ts +1 -1
- package/src/cli/fleet-inspect.ts +1 -1
- package/src/cli/fleet-preflight.ts +1 -1
- package/src/cli/fleet-verify.ts +1 -1
- package/src/cli/fleet-view.ts +40 -23
- package/src/cli/fleet.ts +8 -5
- package/src/cli/interop-inspect.ts +2 -2
- package/src/cli/models.ts +3 -3
- package/src/cli/modes/print.ts +1 -1
- package/src/cli/reset.ts +1 -1
- package/src/cli/run.ts +11 -15
- package/src/cli/share.ts +1 -1
- package/src/cli/skills-eval.ts +11 -11
- package/src/cli/targets.ts +23 -24
- package/src/cli/trace-inspect.ts +1 -1
- package/src/cli/trace.ts +41 -0
- package/src/cli/uninstall.ts +2 -2
- package/src/cli/upgrade.ts +29 -34
- package/src/cli/usage.ts +2 -2
- package/src/cli/validate-model.ts +1 -1
- package/src/cli/verifiers-inspect.ts +1 -1
- package/src/cli/wiki-generate.ts +5 -5
- package/src/core/bash-exec.ts +1 -1
- package/src/core/boot-trace.ts +3 -3
- package/src/core/bus-trace.ts +2 -2
- package/src/core/compile-cache.ts +1 -1
- package/src/core/config.ts +1062 -886
- package/src/core/defaults.ts +321 -528
- package/src/core/domain-loader.ts +6 -4
- package/src/core/event-bus.ts +1 -1
- package/src/core/file-references.ts +78 -88
- package/src/core/git-commit-attribution.ts +3 -9
- package/src/core/guardrails.ts +24 -4
- package/src/core/naming-compat.ts +45 -0
- package/src/core/naming-events.ts +62 -0
- package/src/core/recent-models.ts +1 -7
- package/src/core/residency-protection.ts +4 -8
- package/src/core/resolve-config-value.ts +1 -1
- package/src/core/response-model-id.ts +0 -14
- package/src/core/session-routing.ts +84 -74
- package/src/core/skill-activation.ts +18 -0
- package/src/core/termination.ts +4 -4
- package/src/core/timers.ts +2 -12
- package/src/domains/agents/catalog.ts +2 -12
- package/src/domains/agents/extension.ts +3 -3
- package/src/domains/agents/registry.ts +7 -7
- package/src/domains/agents/result-contract.ts +1 -1
- package/src/domains/agents/spec.ts +0 -11
- package/src/domains/config/classify.ts +35 -47
- package/src/domains/config/extension.ts +5 -5
- package/src/domains/config/keybindings.ts +48 -47
- package/src/domains/config/watcher.ts +1 -1
- package/src/domains/context/codewiki/indexer.ts +1 -1
- package/src/domains/context/extension.ts +3 -3
- package/src/domains/context/prompt-context.ts +1 -1
- package/src/domains/context/wiki/assemble.ts +2 -2
- package/src/domains/context/working-set/replay/metrics.ts +0 -4
- package/src/domains/context/working-set/replay/report.ts +1 -1
- package/src/domains/context/working-set/replay/synthetic.ts +2 -2
- package/src/domains/dispatch/active-route-planner.ts +2 -2
- package/src/domains/dispatch/agent-candidates.ts +1 -1
- package/src/domains/dispatch/agent-ledger-store.ts +1 -1
- package/src/domains/dispatch/agent-ledger.ts +1 -1
- package/src/domains/dispatch/assignment.ts +5 -5
- package/src/domains/dispatch/capacity-lease.ts +2 -5
- package/src/domains/dispatch/code-step.ts +1 -1
- package/src/domains/dispatch/contract.ts +2 -2
- package/src/domains/dispatch/extension.ts +65 -61
- package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
- package/src/domains/dispatch/fleet-preflight.ts +8 -17
- package/src/domains/dispatch/fleet-run.ts +0 -7
- package/src/domains/dispatch/gate-decisions.ts +25 -14
- package/src/domains/dispatch/joint-route-resolver.ts +1 -1
- package/src/domains/dispatch/path-scope.ts +0 -61
- package/src/domains/dispatch/placement.ts +2 -2
- package/src/domains/dispatch/receipt-findings.ts +1 -1
- package/src/domains/dispatch/receipt-integrity.ts +20 -8
- package/src/domains/dispatch/reservation-store.ts +0 -23
- package/src/domains/dispatch/route-decision.ts +1 -1
- package/src/domains/dispatch/route-history.ts +1 -1
- package/src/domains/dispatch/route-policy.ts +1 -1
- package/src/domains/dispatch/route-readiness.ts +0 -28
- package/src/domains/dispatch/run-event-journal.ts +6 -5
- package/src/domains/dispatch/tool-stats.ts +1 -1
- package/src/domains/dispatch/transport.ts +2 -19
- package/src/domains/dispatch/types.ts +3 -3
- package/src/domains/dispatch/worker-protocol.ts +2 -2
- package/src/domains/eval/artifacts/store.ts +5 -4
- package/src/domains/eval/compare/thresholds.ts +0 -8
- package/src/domains/eval/execution-provenance.ts +1 -1
- package/src/domains/eval/metrics/token-stream.ts +0 -7
- package/src/domains/eval/report.ts +1 -1
- package/src/domains/eval/runner.ts +1 -1
- package/src/domains/eval/runners/clio-run.ts +7 -6
- package/src/domains/eval/runners/external-command.ts +4 -3
- package/src/domains/eval/schema/artifact.ts +1 -1
- package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
- package/src/domains/eval/schema/behavioral.ts +7 -6
- package/src/domains/eval/schema/execution-envelope.ts +4 -2
- package/src/domains/eval/schema/naming.ts +10 -0
- package/src/domains/eval/schema/suite.ts +2 -2
- package/src/domains/eval/schema/validate.ts +9 -5
- package/src/domains/eval/schema/verdict.ts +4 -2
- package/src/domains/eval/store.ts +12 -2
- package/src/domains/eval/suites/run.ts +12 -6
- package/src/domains/eval/types.ts +1 -1
- package/src/domains/eval/workspaces/git.ts +1 -1
- package/src/domains/eval/workspaces/temp-copy.ts +1 -1
- package/src/domains/evidence/build.ts +13 -5
- package/src/domains/interop/consent.ts +7 -7
- package/src/domains/interop/extension.ts +1 -1
- package/src/domains/lifecycle/doctor.ts +27 -21
- package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
- package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
- package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
- package/src/domains/lifecycle/migrations/index.ts +20 -1
- package/src/domains/lifecycle/naming-history.ts +153 -0
- package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
- package/src/domains/lifecycle/naming-resources.ts +261 -0
- package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
- package/src/domains/lifecycle/naming-yazi.ts +81 -0
- package/src/domains/lifecycle/upgrade-notice.ts +1 -1
- package/src/domains/memory/task-memory-handoff.ts +6 -3
- package/src/domains/middleware/index.ts +7 -0
- package/src/domains/middleware/marketplace-offer.ts +339 -0
- package/src/domains/middleware/runtime.ts +2 -2
- package/src/domains/mux/contract.ts +157 -25
- package/src/domains/mux/detect.ts +29 -5
- package/src/domains/mux/dock-controller.ts +365 -0
- package/src/domains/mux/extension.ts +7 -1
- package/src/domains/mux/index.ts +20 -0
- package/src/domains/mux/operations.ts +28 -0
- package/src/domains/mux/protocol.ts +19 -6
- package/src/domains/mux/socket-client.ts +167 -19
- package/src/domains/mux/types.ts +49 -6
- package/src/domains/mux/yazi/event-stream.ts +6 -4
- package/src/domains/mux/yazi/profile.ts +1 -1
- package/src/domains/mux/yazi/session.ts +26 -3
- package/src/domains/observability/extension.ts +1 -1
- package/src/domains/observability/out-of-turn-usage.ts +2 -2
- package/src/domains/observability/projection.ts +1 -1
- package/src/domains/observability/trace-store.ts +22 -12
- package/src/domains/prompts/compiler.ts +2 -2
- package/src/domains/prompts/extension.ts +3 -3
- package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
- package/src/domains/prompts/fragments/operating/skills.md +25 -18
- package/src/domains/providers/extension.ts +5 -5
- package/src/domains/providers/knowledge-base-path.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +14 -2
- package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
- package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +4 -4
- package/src/domains/providers/plugins.ts +1 -1
- package/src/domains/providers/resolver.ts +1 -1
- package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
- package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
- package/src/domains/providers/runtimes/common/probe-helpers.ts +2 -2
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
- package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
- package/src/domains/providers/types/knowledge-base.ts +13 -0
- package/src/domains/providers/types/local-model-quirks.ts +2 -2
- package/src/domains/providers/types/target-descriptor.ts +3 -3
- package/src/domains/resources/extension.ts +1 -1
- package/src/domains/resources/library.ts +6 -6
- package/src/domains/resources/prompts/loader.ts +1 -1
- package/src/domains/resources/skills/content-hash.ts +7 -6
- package/src/domains/resources/skills/evals.ts +1 -1
- package/src/domains/resources/skills/install.ts +36 -12
- package/src/domains/resources/skills/loader.ts +39 -13
- package/src/domains/resources/skills/marketplace.ts +21 -2
- package/src/domains/resources/skills/promotion.ts +214 -0
- package/src/domains/safety/audit.ts +2 -2
- package/src/domains/safety/finish-contract.ts +2 -1
- package/src/domains/safety/run-effects.ts +1 -1
- package/src/domains/scheduling/extension.ts +4 -4
- package/src/domains/session/archive-readers.ts +9 -1
- package/src/domains/session/compaction/branch-summary.ts +4 -0
- package/src/domains/session/compaction/compact.ts +1 -1
- package/src/domains/session/compaction/tokens.ts +4 -0
- package/src/domains/session/context-accounting.ts +1 -1
- package/src/domains/session/decision-board.ts +1 -1
- package/src/domains/session/extension.ts +1 -1
- package/src/domains/session/handoff.ts +2 -2
- package/src/domains/session/prompt-manifest.ts +0 -5
- package/src/domains/session/protected-artifact-journal.ts +12 -6
- package/src/domains/session/retry.ts +1 -1
- package/src/domains/share/archive.ts +85 -36
- package/src/domains/toolchain/install.ts +1 -1
- package/src/engine/acp/adapter.ts +3 -3
- package/src/engine/acp/event-mapper.ts +3 -3
- package/src/engine/acp/server.ts +27 -26
- package/src/engine/acp/tool-mediator.ts +2 -2
- package/src/engine/acp/types.ts +1 -1
- package/src/engine/alcf-oauth.ts +5 -5
- package/src/engine/antigravity/subprocess-runtime.ts +2 -2
- package/src/engine/api-registry.ts +1 -1
- package/src/engine/apis/llamacpp-residency.ts +1 -19
- package/src/engine/apis/lmstudio.ts +1 -6
- package/src/engine/apis/ollama-native.ts +3 -3
- package/src/engine/apis/openai-completions.ts +2 -2
- package/src/engine/apis/residency.ts +3 -9
- package/src/engine/claude/sdk-module.ts +1 -12
- package/src/engine/claude/sdk-runtime.ts +6 -6
- package/src/engine/claude/subprocess-runtime.ts +1 -1
- package/src/engine/claude/tool-safety.ts +4 -4
- package/src/engine/loop-guard.ts +0 -5
- package/src/engine/session.ts +14 -7
- package/src/engine/tui-primitives.ts +1 -1
- package/src/engine/worker-events.ts +6 -6
- package/src/engine/worker-runtime.ts +14 -13
- package/src/entry/orchestrator.ts +107 -88
- package/src/interactive/application-controller.ts +21 -21
- package/src/interactive/bus-notices.ts +2 -2
- package/src/interactive/chat-loop.ts +8 -8
- package/src/interactive/chat-panel.ts +1 -1
- package/src/interactive/clio-editor.ts +105 -1
- package/src/interactive/context-activity.ts +8 -6
- package/src/interactive/context-meter.ts +3 -6
- package/src/interactive/context-overlay.ts +1 -1
- package/src/interactive/cost-overlay.ts +1 -1
- package/src/interactive/council-grid.ts +2 -2
- package/src/interactive/dispatch-board.ts +30 -33
- package/src/interactive/editor-bash.ts +21 -0
- package/src/interactive/editor-steer.ts +9 -4
- package/src/interactive/editor-submit.ts +24 -18
- package/src/interactive/external-editor.ts +1 -1
- package/src/interactive/file-reference-completion.ts +360 -0
- package/src/interactive/footer/dashboard.ts +15 -17
- package/src/interactive/footer/notifications.ts +14 -8
- package/src/interactive/footer/widgets.ts +2 -44
- package/src/interactive/interactive-application.ts +79 -59
- package/src/interactive/interactive-event-projection.ts +1 -1
- package/src/interactive/interactive-input-runtime.ts +2 -2
- package/src/interactive/interactive-presentation.ts +21 -16
- package/src/interactive/interactive-shell.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +63 -17
- package/src/interactive/interactive-subscriptions.ts +1 -1
- package/src/interactive/interactive-tickers.ts +1 -1
- package/src/interactive/keybinding-manager.ts +4 -4
- package/src/interactive/layout.ts +1 -1
- package/src/interactive/memory-overlay.ts +2 -2
- package/src/interactive/modal-marker.ts +2 -21
- package/src/interactive/mutation-preview.ts +1 -1
- package/src/interactive/overlay-frame.ts +4 -12
- package/src/interactive/overlay-general-openers.ts +6 -2
- package/src/interactive/overlay-key-routing.ts +7 -7
- package/src/interactive/overlay-lifecycle.ts +1 -1
- package/src/interactive/overlay-model-selectors.ts +3 -3
- package/src/interactive/overlays/agents.ts +2 -2
- package/src/interactive/overlays/ask-user.ts +25 -11
- package/src/interactive/overlays/context-reset.ts +28 -4
- package/src/interactive/overlays/cwd-fallback.ts +28 -4
- package/src/interactive/overlays/decisions.ts +4 -2
- package/src/interactive/overlays/fleet-run-approval.ts +3 -3
- package/src/interactive/overlays/handoff-review.ts +2 -2
- package/src/interactive/overlays/interop.ts +1 -1
- package/src/interactive/overlays/library-install-confirm.ts +1 -1
- package/src/interactive/overlays/message-picker.ts +1 -1
- package/src/interactive/overlays/model-selector.ts +39 -31
- package/src/interactive/overlays/prompts.ts +10 -4
- package/src/interactive/overlays/session-selector.ts +2 -2
- package/src/interactive/overlays/settings.ts +339 -293
- package/src/interactive/overlays/side-question.ts +2 -2
- package/src/interactive/overlays/skills-hub.ts +8 -8
- package/src/interactive/overlays/tree-selector.ts +2 -2
- package/src/interactive/panes-runtime.ts +36 -10
- package/src/interactive/permission-overlay.ts +2 -2
- package/src/interactive/renderers/retry-status.ts +12 -4
- package/src/interactive/renderers/tool-execution.ts +4 -4
- package/src/interactive/session-transcript.ts +3 -3
- package/src/interactive/slash-autocomplete.ts +454 -165
- package/src/interactive/slash-commands.ts +279 -183
- package/src/interactive/slash-spec.ts +160 -17
- package/src/interactive/status/controller.ts +2 -2
- package/src/interactive/stream-pacing-policy.ts +1 -1
- package/src/interactive/tasks-overlay.ts +20 -13
- package/src/interactive/terminal-lease.ts +6 -7
- package/src/interactive/turn-context.ts +11 -11
- package/src/interactive/turn-persistence.ts +2 -2
- package/src/interactive/turn-prewarm.ts +2 -2
- package/src/interactive/turn-runtime.ts +8 -8
- package/src/interactive/turn-state.ts +1 -1
- package/src/interactive/view/artifacts.ts +12 -9
- package/src/interactive/view/view-overlay.ts +13 -10
- package/src/interactive/watch-pane.ts +38 -10
- package/src/interactive/welcome-dashboard.ts +15 -15
- package/src/interactive/worker-progress.ts +4 -4
- package/src/interactive/worker-receipts.ts +1 -1
- package/src/interactive/worker-stream.ts +1 -4
- package/src/interactive/yazi-bridge.ts +12 -5
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/builtin-tool-catalog.ts +1 -1
- package/src/tools/compete-worktrees.ts +27 -17
- package/src/tools/context/index.ts +15 -1
- package/src/tools/dispatch-admission.ts +4 -2
- package/src/tools/dispatch-arguments.ts +1 -1
- package/src/tools/dispatch-plan.ts +0 -11
- package/src/tools/dispatch-run-events.ts +12 -10
- package/src/tools/dispatch-runner.ts +11 -6
- package/src/tools/dispatch.ts +1 -1
- package/src/tools/find.ts +1 -6
- package/src/tools/monitor.ts +4 -4
- package/src/tools/observers.ts +0 -33
- package/src/tools/task-worktree.ts +28 -7
- package/src/tools/verify/authoring.ts +3 -6
- package/src/tools/verify/frontend.ts +1 -1
- package/src/tools/web-fetch.ts +1 -1
- package/src/worker/entry.ts +4 -3
- package/src/worker/protocol.ts +16 -14
- package/src/worker/spec-contract.ts +2 -2
- package/src/worker/stdin-demux.ts +2 -2
- package/dist/chunk-GXNLGKAB.js +0 -571
- package/dist/chunk-VFA6GDY5.js +0 -1625
- package/dist/doctor-QOA5FNY5.js +0 -313
- package/src/engine/apis/degraded-inference.ts +0 -95
- /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
- /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
|
@@ -1,26 +1,33 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: operating.skills
|
|
3
3
|
version: 1
|
|
4
|
-
budgetTokens:
|
|
4
|
+
budgetTokens: 340
|
|
5
5
|
description: Coordinator skill suggestion discipline; rendered only when context is on the surface
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Skills
|
|
9
9
|
|
|
10
|
-
Skills package proven workflows. Some are installed; the rest sit in
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
nothing
|
|
10
|
+
Skills package proven workflows. Some are installed; the rest sit in a
|
|
11
|
+
marketplace the operator installs from, and context (scope="skills") is
|
|
12
|
+
the one authoritative listing of both — never guess the inventory or
|
|
13
|
+
search the repository for a skill file. The catalog spans git delivery
|
|
14
|
+
(filing, fixing, and shipping issues), planning (intent, PRD, backlog,
|
|
15
|
+
architecture, sprint slicing), coding practice (TDD, standards,
|
|
16
|
+
prototyping), context priming and handoff, research workflows, and
|
|
17
|
+
plan-stress-testing debates. When a task lands in one of those shapes,
|
|
18
|
+
call context (scope="skills") first and match it against the catalog.
|
|
19
|
+
Suggest the best match to the operator as /skill <name> — the sequence
|
|
20
|
+
in order when skills compose — and let the operator decide before
|
|
21
|
+
grinding through that workflow bare; a marketplace match is suggested
|
|
22
|
+
the same way, and /skill <name> offers the install. When the operator
|
|
23
|
+
names a skill or asks how one works, answer from that same listing.
|
|
24
|
+
When a [Marketplace] reminder names an uninstalled skill for the
|
|
25
|
+
current request, first check the installed side with context
|
|
26
|
+
(scope="skills"); only if nothing installed serves and the named skill
|
|
27
|
+
truly fits, put the install question to the operator with ask_user
|
|
28
|
+
using exactly the four options the reminder states, then continue the
|
|
29
|
+
task in the same turn. The harness performs any consented install;
|
|
30
|
+
never install a skill yourself, and never offer one no reminder named.
|
|
31
|
+
Only an explicit operator request activates a skill; never load one on
|
|
32
|
+
your own. If nothing fits or the task is routine, proceed normally and
|
|
33
|
+
suggest nothing.
|
|
@@ -88,7 +88,7 @@ function positiveWindow(value: unknown): number | undefined {
|
|
|
88
88
|
* `n_ctx: 0` still discovers the window it did publish, instead of silently
|
|
89
89
|
* falling back to the runtime descriptor's placeholder.
|
|
90
90
|
*/
|
|
91
|
-
|
|
91
|
+
function capabilitiesFor(
|
|
92
92
|
desc: RuntimeDescriptor,
|
|
93
93
|
target: TargetDescriptor,
|
|
94
94
|
probe: ProbeMerge,
|
|
@@ -173,7 +173,7 @@ export interface ProbeMerge {
|
|
|
173
173
|
* `cache`, while health and availability (decided by the caller from `probe`)
|
|
174
174
|
* reflect the failure. Only a successful probe replaces the catalog.
|
|
175
175
|
*/
|
|
176
|
-
|
|
176
|
+
function mergeProbeResult(
|
|
177
177
|
desc: RuntimeDescriptor,
|
|
178
178
|
target: TargetDescriptor,
|
|
179
179
|
probe: ProbeResult | null,
|
|
@@ -224,7 +224,7 @@ export function mergeProbeResult(
|
|
|
224
224
|
* Returns the reason when the default is not served, null when it is or when
|
|
225
225
|
* there is no live evidence either way.
|
|
226
226
|
*/
|
|
227
|
-
|
|
227
|
+
function unservedDefaultModelReason(
|
|
228
228
|
desc: Pick<RuntimeDescriptor, "id">,
|
|
229
229
|
target: Pick<TargetDescriptor, "defaultModel">,
|
|
230
230
|
merge: Pick<ProbeMerge, "discoveredModels" | "discoveredModelsSource" | "discoveredModelStates">,
|
|
@@ -396,7 +396,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
396
396
|
}
|
|
397
397
|
if (probeResult.ok && options?.reasoning !== false && typeof desc.probeReasoning === "function") {
|
|
398
398
|
const settings = readConfig();
|
|
399
|
-
const orchestratorTarget = settings.
|
|
399
|
+
const orchestratorTarget = settings.chat.target === target.id ? settings.chat.model : null;
|
|
400
400
|
const candidateModelId = orchestratorTarget ?? target.defaultModel ?? null;
|
|
401
401
|
if (candidateModelId) {
|
|
402
402
|
try {
|
|
@@ -482,7 +482,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
482
482
|
registerClioOAuthProviders();
|
|
483
483
|
registerBuiltinRuntimes(registry);
|
|
484
484
|
const settings = readConfig();
|
|
485
|
-
setGlobalDefaultMaxOutputTokens(settings.
|
|
485
|
+
setGlobalDefaultMaxOutputTokens(settings.chat.maxOutputTokens);
|
|
486
486
|
await loadPluginRuntimes(registry, settings);
|
|
487
487
|
await probeAll();
|
|
488
488
|
const config = context.getContract<ConfigContract>("config");
|
|
@@ -72,7 +72,7 @@ function envOverlayDirs(): string[] {
|
|
|
72
72
|
.filter((entry) => entry.length > 0);
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
function resolveProviderModelCatalogDirs(
|
|
76
76
|
importMetaUrl: string,
|
|
77
77
|
options: { cwd?: string } = {},
|
|
78
78
|
): ProviderModelCatalogDirs {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { warnLegacyNaming } from "../../core/naming-compat.js";
|
|
1
2
|
import type { Api, Model } from "../../engine/types.js";
|
|
2
3
|
import { getCatalogModelForRuntime } from "./catalog.js";
|
|
3
4
|
import type { ProvidersContract, TargetStatus } from "./contract.js";
|
|
@@ -111,10 +112,19 @@ function capabilityHints(input: {
|
|
|
111
112
|
}
|
|
112
113
|
|
|
113
114
|
interface ClioRuntimeMetadata {
|
|
115
|
+
clioCoder?: {
|
|
116
|
+
targetId?: string;
|
|
117
|
+
runtimeId?: string;
|
|
118
|
+
lifecycle?: "user-managed" | "clio-coder-managed";
|
|
119
|
+
gateway?: boolean;
|
|
120
|
+
family?: string;
|
|
121
|
+
quirks?: LocalModelQuirks;
|
|
122
|
+
};
|
|
123
|
+
/** Released in-memory metadata name accepted at plugin/runtime read boundaries. */
|
|
114
124
|
clio?: {
|
|
115
125
|
targetId?: string;
|
|
116
126
|
runtimeId?: string;
|
|
117
|
-
lifecycle?: "user-managed" | "clio-managed";
|
|
127
|
+
lifecycle?: "user-managed" | "clio-coder-managed";
|
|
118
128
|
gateway?: boolean;
|
|
119
129
|
family?: string;
|
|
120
130
|
quirks?: LocalModelQuirks;
|
|
@@ -691,7 +701,9 @@ export function resolveModelRuntimeCapabilitiesForModel<TApi extends Api>(
|
|
|
691
701
|
model: Model<TApi>,
|
|
692
702
|
configuredThinkingLevel?: ThinkingLevel,
|
|
693
703
|
): ResolvedModelRuntimeCapabilities {
|
|
694
|
-
const
|
|
704
|
+
const runtimeModel = model as Model<TApi> & ClioRuntimeMetadata;
|
|
705
|
+
if (runtimeModel.clio !== undefined) warnLegacyNaming("model.clio", "model.clioCoder");
|
|
706
|
+
const metadata = runtimeModel.clioCoder ?? runtimeModel.clio;
|
|
695
707
|
const caps = capabilitiesFromModel(model as Model<Api> & ClioRuntimeMetadata);
|
|
696
708
|
return resolveModelRuntimeCapabilities({
|
|
697
709
|
targetId: metadata?.targetId ?? null,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# ALCF (Argonne) inference-gateway model knowledge base.
|
|
2
2
|
#
|
|
3
3
|
# GPT-OSS models served through ALCF are already covered by the existing
|
|
4
|
-
# openai-gpt-oss family in local-models/clio-local-coding-targets.yaml.
|
|
4
|
+
# openai-gpt-oss family in local-models/clio-coder-local-coding-targets.yaml.
|
|
5
5
|
|
|
6
6
|
- family: meta-llama-4-maverick
|
|
7
7
|
matchPatterns:
|
|
@@ -308,7 +308,7 @@
|
|
|
308
308
|
measuredUnder:
|
|
309
309
|
hardware: unknown
|
|
310
310
|
runtime: lmstudio
|
|
311
|
-
build: "unknown; the host was
|
|
311
|
+
build: "unknown; the host was a Windows LM Studio machine whose bundled build string was not recorded on this date"
|
|
312
312
|
llamaCpp: "unknown; the measurement went through LM Studio's OpenAI-compatible port, which does not expose the underlying server argv"
|
|
313
313
|
date: "2026-08-08"
|
|
314
314
|
source: "commit b3db3b82 (fix(providers): thinking off reaches the wire for models that reason by default)"
|
|
@@ -884,12 +884,12 @@
|
|
|
884
884
|
measuredUnder:
|
|
885
885
|
hardware: unknown
|
|
886
886
|
runtime: "lmstudio and its OpenAI-compatible port for the reasoning findings; an unrecorded llama.cpp host for the presence-penalty finding"
|
|
887
|
-
build: "unknown for both dates; the
|
|
887
|
+
build: "unknown for both dates; the Windows LM Studio measurement host's bundled build string was first recorded on 2026-08-29 as llama.cpp-win-x86_64-nvidia-cuda12-avx2, which is three weeks after the reasoning measurement and cannot be backdated to it"
|
|
888
888
|
llamaCpp: "unknown; the reasoning measurement went through LM Studio's HTTP port, which does not expose the underlying server argv, and no argv survives for the dispatch that produced the presence-penalty value"
|
|
889
889
|
date: "2026-08-08 (reasoning_effort and enable_thinking), 2026-07-06 (presence penalty)"
|
|
890
890
|
source: "commits b3db3b82 and f7d76bf4"
|
|
891
891
|
note: |
|
|
892
|
-
Three numbers here are measurements. On 2026-08-08 on
|
|
892
|
+
Three numbers here are measurements. On 2026-08-08 on that host this
|
|
893
893
|
model spent 98 of 103 completion tokens reasoning on "what is 17+25"
|
|
894
894
|
with no thinking field set; chat_template_kwargs enable_thinking was
|
|
895
895
|
inert, re-checked with unique prompts to rule out prompt-cache hits;
|
|
@@ -1268,7 +1268,7 @@
|
|
|
1268
1268
|
maxTokens: 32768
|
|
1269
1269
|
quirks:
|
|
1270
1270
|
measuredUnder:
|
|
1271
|
-
hardware: "unknown; the host was
|
|
1271
|
+
hardware: "unknown; the host was a Windows LM Studio machine"
|
|
1272
1272
|
runtime: "lmstudio, SDK 1.5.0 and its OpenAI-compatible port"
|
|
1273
1273
|
build: "unknown; LM Studio's bundled llama.cpp build string was not recorded on this date"
|
|
1274
1274
|
llamaCpp: "unknown; the measurement went through LM Studio, which does not expose the underlying server argv"
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* 1. `~/.config/clio-coder/runtimes/`: any `.js` file whose default export is a valid
|
|
5
5
|
* RuntimeDescriptor. Resolved from `clioConfigDir()` so CLIO_CODER_HOME /
|
|
6
6
|
* CLIO_CODER_CONFIG_DIR overrides flow through.
|
|
7
|
-
* 2. npm packages listed under `settings.runtimePlugins
|
|
7
|
+
* 2. npm packages listed under `settings.integrations.runtimePlugins`.
|
|
8
8
|
* Each package must export a `clioRuntimes: RuntimeDescriptor[]` array.
|
|
9
9
|
*
|
|
10
10
|
* Missing directories, import failures, and descriptor conflicts are logged
|
|
@@ -117,7 +117,7 @@ function buildResult(
|
|
|
117
117
|
*
|
|
118
118
|
* Trailing `:low`/`:medium`/`:high`/`:xhigh`/`:minimal`/`:off` is parsed off
|
|
119
119
|
* before matching and surfaced on the returned ref so callers can apply it
|
|
120
|
-
* to settings.
|
|
120
|
+
* to settings.chat.thinkingLevel.
|
|
121
121
|
*/
|
|
122
122
|
export function resolveModelReference(rawPattern: string, providers: ProvidersContract): ResolveModelResult {
|
|
123
123
|
const trimmed = rawPattern.trim();
|
|
@@ -35,13 +35,13 @@ const KNOWN_MODELS: string[] = [
|
|
|
35
35
|
|
|
36
36
|
type AlcfCluster = string;
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
function clusterFromUrl(url: string | undefined): AlcfCluster | null {
|
|
39
39
|
if (!url) return null;
|
|
40
40
|
const match = /\/resource_server\/([^/]+)\//.exec(url);
|
|
41
41
|
return match ? (match[1] ?? null) : null;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
function frameworkForCluster(cluster: AlcfCluster): string {
|
|
45
45
|
return cluster === "metis" ? "api" : "vllm";
|
|
46
46
|
}
|
|
47
47
|
|
|
@@ -59,7 +59,7 @@ export function catalogModels(payload: CatalogPayload, cluster: string, framewor
|
|
|
59
59
|
return models.map((model) => String(model).trim()).filter((model) => model.length > 0);
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
function runningModels(payload: JobsPayload): string[] {
|
|
63
63
|
const out: string[] = [];
|
|
64
64
|
for (const job of payload.running ?? []) {
|
|
65
65
|
for (const raw of String(job.Models ?? "").split(",")) {
|
|
@@ -162,7 +162,7 @@ const alcfRuntime: RuntimeDescriptor = {
|
|
|
162
162
|
provider: "alcf",
|
|
163
163
|
baseUrlForTarget: withAsIs,
|
|
164
164
|
});
|
|
165
|
-
const meta = (model as Model<Api> & {
|
|
165
|
+
const meta = (model as Model<Api> & { clioCoder?: { chatTemplateKwargsUnsupported?: boolean } }).clioCoder;
|
|
166
166
|
if (meta) meta.chatTemplateKwargsUnsupported = true;
|
|
167
167
|
return model;
|
|
168
168
|
},
|
|
@@ -169,7 +169,7 @@ function reasoningOptions(capabilities: unknown): string[] | undefined {
|
|
|
169
169
|
return options.length > 0 ? options : undefined;
|
|
170
170
|
}
|
|
171
171
|
|
|
172
|
-
|
|
172
|
+
function parseLmStudioV1Models(data: unknown): LmStudioModelInfo[] | null {
|
|
173
173
|
if (!isRecord(data) || !Array.isArray(data.models)) return null;
|
|
174
174
|
const models: LmStudioModelInfo[] = [];
|
|
175
175
|
for (const raw of data.models) {
|
|
@@ -285,10 +285,6 @@ export function resolveLmStudioInstance(
|
|
|
285
285
|
return { requestedId, wireModelId: requestedId, peerTargets: [], state: "unknown" };
|
|
286
286
|
}
|
|
287
287
|
|
|
288
|
-
export function resetLmStudioHostCatalogs(): void {
|
|
289
|
-
catalogsByHost.clear();
|
|
290
|
-
}
|
|
291
|
-
|
|
292
288
|
export function lmStudioReasoningLevels(options: ReadonlyArray<string> | undefined): ThinkingLevel[] {
|
|
293
289
|
if (!options || options.length === 0) return [...THINKING_LEVELS];
|
|
294
290
|
if (options.includes("on") && !options.includes("low") && !options.includes("medium") && !options.includes("high")) {
|
|
@@ -7,10 +7,10 @@ import { extractLocalModelQuirks, type LocalModelQuirks } from "../../types/loca
|
|
|
7
7
|
import type { RuntimeApiFamily } from "../../types/runtime-descriptor.js";
|
|
8
8
|
import type { TargetDescriptor } from "../../types/target-descriptor.js";
|
|
9
9
|
|
|
10
|
-
export type LocalModelLifecycle = "user-managed" | "clio-managed";
|
|
10
|
+
export type LocalModelLifecycle = "user-managed" | "clio-coder-managed";
|
|
11
11
|
|
|
12
12
|
export interface ClioLocalModelMetadata {
|
|
13
|
-
|
|
13
|
+
clioCoder?: {
|
|
14
14
|
targetId: string;
|
|
15
15
|
runtimeId: string;
|
|
16
16
|
/**
|
|
@@ -101,7 +101,7 @@ export function synthLocalModel(input: LocalSynthesisInput): Model<Api> {
|
|
|
101
101
|
},
|
|
102
102
|
contextWindow: caps.contextWindow,
|
|
103
103
|
maxTokens: caps.maxTokens,
|
|
104
|
-
|
|
104
|
+
clioCoder: {
|
|
105
105
|
targetId: target.id,
|
|
106
106
|
runtimeId: target.runtime,
|
|
107
107
|
...(target.lifecycle ? { lifecycle: target.lifecycle } : {}),
|
|
@@ -357,7 +357,7 @@ export interface LlamaCppRequestContextWindow {
|
|
|
357
357
|
* 25% (issue #187). With `--kv-unified` every slot shares one sequence and
|
|
358
358
|
* the total is the window.
|
|
359
359
|
*/
|
|
360
|
-
|
|
360
|
+
function llamaCppRequestContextWindow(flags: LlamaCppServerFlags): LlamaCppRequestContextWindow | undefined {
|
|
361
361
|
const total = positiveNumber(flags.contextSize);
|
|
362
362
|
if (total === undefined) return undefined;
|
|
363
363
|
const parallel = positiveNumber(flags.parallel);
|
|
@@ -423,7 +423,7 @@ function booleanFlag(args: ReadonlyArray<string>, ...flags: ReadonlyArray<string
|
|
|
423
423
|
return undefined;
|
|
424
424
|
}
|
|
425
425
|
|
|
426
|
-
|
|
426
|
+
function parseLlamaCppServerFlags(args: ReadonlyArray<string>): LlamaCppServerFlags {
|
|
427
427
|
const flags: LlamaCppServerFlags = {};
|
|
428
428
|
const ctxSize = numberFlag(args, "--ctx-size", "-c");
|
|
429
429
|
if (ctxSize !== undefined) flags.contextSize = ctxSize;
|
|
@@ -100,7 +100,7 @@ async function* streamSse(body: ReadableStream<Uint8Array>): AsyncGenerator<Comp
|
|
|
100
100
|
}
|
|
101
101
|
} finally {
|
|
102
102
|
if (droppedFrames > 0) {
|
|
103
|
-
process.stderr.write(`[clio:llamacpp] dropped ${droppedFrames} malformed stream frame(s)\n`);
|
|
103
|
+
process.stderr.write(`[clio-coder:llamacpp] dropped ${droppedFrames} malformed stream frame(s)\n`);
|
|
104
104
|
}
|
|
105
105
|
reader.releaseLock();
|
|
106
106
|
}
|
|
@@ -13,7 +13,6 @@ import {
|
|
|
13
13
|
listLmStudioModels,
|
|
14
14
|
lmStudioReasoningLevels,
|
|
15
15
|
loadedContextLength,
|
|
16
|
-
parseLmStudioV1Models,
|
|
17
16
|
resolveLmStudioInstance,
|
|
18
17
|
} from "../common/lmstudio-http.js";
|
|
19
18
|
import { synthLocalModel, withV1 } from "../common/local-synth.js";
|
|
@@ -181,12 +180,6 @@ function probeFromCatalog(catalog: LmStudioCatalog, target: TargetDescriptor): P
|
|
|
181
180
|
return result;
|
|
182
181
|
}
|
|
183
182
|
|
|
184
|
-
export function probeResultFromV1Models(data: unknown, target: TargetDescriptor, latencyMs?: number): ProbeResult {
|
|
185
|
-
const models = parseLmStudioV1Models(data);
|
|
186
|
-
if (!models) return { ok: false, error: "LM Studio /api/v1/models response has no models array" };
|
|
187
|
-
return probeFromCatalog({ ok: true, models, tier: "0.4+", ...(latencyMs !== undefined ? { latencyMs } : {}) }, target);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
183
|
const lmstudioRuntime: RuntimeDescriptor = {
|
|
191
184
|
id: "lmstudio",
|
|
192
185
|
aliases: ["lmstudio-native"],
|
|
@@ -224,13 +217,13 @@ const lmstudioRuntime: RuntimeDescriptor = {
|
|
|
224
217
|
});
|
|
225
218
|
const metadata = (
|
|
226
219
|
model as Model<Api> & {
|
|
227
|
-
|
|
220
|
+
clioCoder?: {
|
|
228
221
|
chatTemplateKwargsUnsupported?: boolean;
|
|
229
222
|
lmstudioReasoningOptions?: ReadonlyArray<string>;
|
|
230
223
|
lmstudioDefaultModel?: string;
|
|
231
224
|
};
|
|
232
225
|
}
|
|
233
|
-
).
|
|
226
|
+
).clioCoder;
|
|
234
227
|
if (metadata) {
|
|
235
228
|
metadata.chatTemplateKwargsUnsupported = true;
|
|
236
229
|
if (target.defaultModel) metadata.lmstudioDefaultModel = target.defaultModel;
|
|
@@ -14,10 +14,6 @@
|
|
|
14
14
|
* publishes the real numbers on `/v1/model/info` instead, which is what this
|
|
15
15
|
* probe reads.
|
|
16
16
|
*
|
|
17
|
-
* Second, routed-deployment attribution. Which physical model answered is a
|
|
18
|
-
* per-response fact behind an alias, and LiteLLM returns it in `x-litellm-*`
|
|
19
|
-
* response headers. See {@link routedDeploymentFromHeaders}.
|
|
20
|
-
*
|
|
21
17
|
* Structured output is the one property worth stating explicitly, because
|
|
22
18
|
* getting it wrong is silent. `src/core/response-schema.ts` deliberately keys
|
|
23
19
|
* the schema dialect on runtime id and not on api family, since a generic
|
|
@@ -110,7 +106,7 @@ function boolean(value: unknown): boolean | undefined {
|
|
|
110
106
|
* so the caller can tell "the gateway says this model has no vision" apart from
|
|
111
107
|
* "the gateway did not say", and merge accordingly.
|
|
112
108
|
*/
|
|
113
|
-
|
|
109
|
+
function capabilitiesFromLiteLLMModelInfo(info: Record<string, unknown>): Partial<CapabilityFlags> {
|
|
114
110
|
const caps: Partial<CapabilityFlags> = {};
|
|
115
111
|
const contextWindow = positiveInteger(info.max_input_tokens) ?? positiveInteger(info.max_tokens);
|
|
116
112
|
if (contextWindow !== undefined) caps.contextWindow = contextWindow;
|
|
@@ -200,92 +196,6 @@ async function fetchCatalog(base: string, ctx: ProbeContext, headers: Record<str
|
|
|
200
196
|
return { models, modelCapabilities: {}, modelStates: {}, deployments: {} };
|
|
201
197
|
}
|
|
202
198
|
|
|
203
|
-
/**
|
|
204
|
-
* The routed deployment LiteLLM reports for one response.
|
|
205
|
-
*
|
|
206
|
-
* Behind an alias the physical model is a per-request fact: a fallback, a
|
|
207
|
-
* context-window promotion, or an ordinary load-balancing choice all change it
|
|
208
|
-
* without changing what the client asked for. Reporting the alias back as the
|
|
209
|
-
* model is how a gateway hides an outage, and it is exactly what an operator
|
|
210
|
-
* needs to see. LiteLLM answers in headers on every completion.
|
|
211
|
-
*/
|
|
212
|
-
export interface RoutedDeployment {
|
|
213
|
-
/** The alias the client asked for, e.g. `code`. */
|
|
214
|
-
group?: string;
|
|
215
|
-
/** The physical model that answered, e.g. `openai/katcoder2.5-35b-moe`. */
|
|
216
|
-
model?: string;
|
|
217
|
-
/** The upstream that served it. */
|
|
218
|
-
apiBase?: string;
|
|
219
|
-
/** Stable id of the specific deployment inside the group. */
|
|
220
|
-
deploymentId?: string;
|
|
221
|
-
/** Non-zero when the request did not reach its first-choice deployment. */
|
|
222
|
-
attemptedFallbacks?: number;
|
|
223
|
-
attemptedRetries?: number;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
function headerValue(headers: { get(name: string): string | null }, name: string): string | undefined {
|
|
227
|
-
const raw = headers.get(name)?.trim();
|
|
228
|
-
return raw && raw.length > 0 ? raw : undefined;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
function headerInteger(headers: { get(name: string): string | null }, name: string): number | undefined {
|
|
232
|
-
const raw = headerValue(headers, name);
|
|
233
|
-
if (raw === undefined) return undefined;
|
|
234
|
-
const parsed = Number.parseInt(raw, 10);
|
|
235
|
-
return Number.isFinite(parsed) ? parsed : undefined;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
/**
|
|
239
|
-
* Extract the routed deployment from a LiteLLM response, or null when the
|
|
240
|
-
* headers are absent. Absent is the normal answer for every non-LiteLLM target,
|
|
241
|
-
* so callers treat null as "no attribution available" rather than an error.
|
|
242
|
-
*/
|
|
243
|
-
export function routedDeploymentFromHeaders(headers: { get(name: string): string | null }): RoutedDeployment | null {
|
|
244
|
-
const routed: RoutedDeployment = {};
|
|
245
|
-
const group = headerValue(headers, "x-litellm-model-group");
|
|
246
|
-
if (group !== undefined) routed.group = group;
|
|
247
|
-
const model = headerValue(headers, "x-litellm-model-name");
|
|
248
|
-
if (model !== undefined) routed.model = model;
|
|
249
|
-
const apiBase = headerValue(headers, "x-litellm-model-api-base");
|
|
250
|
-
if (apiBase !== undefined) routed.apiBase = apiBase;
|
|
251
|
-
const deploymentId = headerValue(headers, "x-litellm-model-id");
|
|
252
|
-
if (deploymentId !== undefined) routed.deploymentId = deploymentId;
|
|
253
|
-
const fallbacks = headerInteger(headers, "x-litellm-attempted-fallbacks");
|
|
254
|
-
if (fallbacks !== undefined) routed.attemptedFallbacks = fallbacks;
|
|
255
|
-
const retries = headerInteger(headers, "x-litellm-attempted-retries");
|
|
256
|
-
if (retries !== undefined) routed.attemptedRetries = retries;
|
|
257
|
-
return Object.keys(routed).length > 0 ? routed : null;
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
/**
|
|
261
|
-
* One-line attribution for a routed response.
|
|
262
|
-
*
|
|
263
|
-
* A request that fell back says so. `code -> openai/qwen3.8-27b-dense @
|
|
264
|
-
* mini.tail78f300.ts.net:8080 (fallback)` is the whole point of the runtime:
|
|
265
|
-
* the operator asked for the coder, the coder was asleep, and something else
|
|
266
|
-
* answered.
|
|
267
|
-
*/
|
|
268
|
-
export function formatRoutedDeployment(routed: RoutedDeployment): string {
|
|
269
|
-
const parts: string[] = [];
|
|
270
|
-
if (routed.group && routed.model && routed.group !== routed.model) {
|
|
271
|
-
parts.push(`${routed.group} -> ${routed.model}`);
|
|
272
|
-
} else if (routed.model ?? routed.group) {
|
|
273
|
-
parts.push((routed.model ?? routed.group) as string);
|
|
274
|
-
}
|
|
275
|
-
if (routed.apiBase) {
|
|
276
|
-
let host = routed.apiBase;
|
|
277
|
-
try {
|
|
278
|
-
host = new URL(routed.apiBase).host;
|
|
279
|
-
} catch {
|
|
280
|
-
// A non-URL api_base is displayed verbatim.
|
|
281
|
-
}
|
|
282
|
-
parts.push(`@ ${host}`);
|
|
283
|
-
}
|
|
284
|
-
if ((routed.attemptedFallbacks ?? 0) > 0) parts.push("(fallback)");
|
|
285
|
-
else if ((routed.attemptedRetries ?? 0) > 0) parts.push("(retried)");
|
|
286
|
-
return parts.join(" ");
|
|
287
|
-
}
|
|
288
|
-
|
|
289
199
|
const litellmRuntime: RuntimeDescriptor = {
|
|
290
200
|
id: "litellm",
|
|
291
201
|
displayName: "LiteLLM gateway",
|
|
@@ -2,6 +2,7 @@ import { readdirSync, readFileSync, statSync } from "node:fs";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { parse as parseYaml } from "yaml";
|
|
4
4
|
|
|
5
|
+
import { warnLegacyNaming } from "../../../core/naming-compat.js";
|
|
5
6
|
import type { CapabilityFlags } from "./capability-flags.js";
|
|
6
7
|
|
|
7
8
|
export interface KnowledgeBaseEntry {
|
|
@@ -9,6 +10,8 @@ export interface KnowledgeBaseEntry {
|
|
|
9
10
|
matchPatterns: ReadonlyArray<string>;
|
|
10
11
|
capabilities: Partial<CapabilityFlags>;
|
|
11
12
|
quirks?: Record<string, unknown>;
|
|
13
|
+
/** Product-owned catalog metadata, normalized from either YAML spelling. */
|
|
14
|
+
clioCoder?: Record<string, unknown>;
|
|
12
15
|
}
|
|
13
16
|
|
|
14
17
|
export type MatchKind = "family" | "alias";
|
|
@@ -152,5 +155,15 @@ function normalizeEntry(raw: unknown, file: string): KnowledgeBaseEntry {
|
|
|
152
155
|
}
|
|
153
156
|
entry.quirks = candidate.quirks as Record<string, unknown>;
|
|
154
157
|
}
|
|
158
|
+
const canonicalMetadata = candidate["clio-coder"];
|
|
159
|
+
const legacyMetadata = candidate.clio;
|
|
160
|
+
if (legacyMetadata !== undefined) warnLegacyNaming("clio: model metadata", "clio-coder: model metadata");
|
|
161
|
+
const metadata = canonicalMetadata ?? legacyMetadata;
|
|
162
|
+
if (metadata !== undefined) {
|
|
163
|
+
if (typeof metadata !== "object" || metadata === null || Array.isArray(metadata)) {
|
|
164
|
+
throw new Error(`knowledge base file ${file}: entry '${family}' clio-coder metadata must be an object`);
|
|
165
|
+
}
|
|
166
|
+
entry.clioCoder = metadata as Record<string, unknown>;
|
|
167
|
+
}
|
|
155
168
|
return entry;
|
|
156
169
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* keeps free-form `quirks` (gpu tiers, runtime preferences, serving notes), so
|
|
4
4
|
* `KnowledgeBaseEntry.quirks` stays `Record<string, unknown>`. This module
|
|
5
5
|
* narrows the slice the engine consumes (KV cache layout, per-mode sampling)
|
|
6
|
-
* into a typed shape that flows through `model.
|
|
6
|
+
* into a typed shape that flows through `model.clioCoder.quirks` at synth time.
|
|
7
7
|
*
|
|
8
8
|
* Field naming follows the Hugging Face / model-card terminology so the YAML
|
|
9
9
|
* can be authored against the source-of-truth card. The OpenAI adapter
|
|
@@ -201,7 +201,7 @@ function extractThinkingQuirks(raw: unknown): ThinkingQuirks | undefined {
|
|
|
201
201
|
/**
|
|
202
202
|
* Pull the engine-visible quirks slice out of a free-form catalog quirks
|
|
203
203
|
* record. Returns `undefined` when nothing engine-relevant is configured so
|
|
204
|
-
* `model.
|
|
204
|
+
* `model.clioCoder.quirks` only gets attached when it carries information.
|
|
205
205
|
*/
|
|
206
206
|
export function extractLocalModelQuirks(raw: unknown): LocalModelQuirks | undefined {
|
|
207
207
|
if (!isRecord(raw)) return undefined;
|
|
@@ -14,9 +14,9 @@ export interface TargetPricing {
|
|
|
14
14
|
cacheWrite?: number;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
export type TargetLifecycle = "user-managed" | "clio-managed";
|
|
17
|
+
// Canonical persisted lifecycle name. Readers temporarily normalize the
|
|
18
|
+
// released `clio-managed` spelling at the settings boundary.
|
|
19
|
+
export type TargetLifecycle = "user-managed" | "clio-coder-managed";
|
|
20
20
|
|
|
21
21
|
export interface LmStudioLoadSettings {
|
|
22
22
|
contextLength?: number;
|
|
@@ -12,7 +12,7 @@ export function createResourcesBundle(
|
|
|
12
12
|
...(options.cwd !== undefined ? { cwd: options.cwd } : {}),
|
|
13
13
|
...(options.reservedPromptNames !== undefined ? { reservedPromptNames: options.reservedPromptNames } : {}),
|
|
14
14
|
skills: () => ({
|
|
15
|
-
...skillOptions(config()?.get().
|
|
15
|
+
...skillOptions(config()?.get().integrations.projectResources.trustProjectImports === true, options),
|
|
16
16
|
}),
|
|
17
17
|
});
|
|
18
18
|
const extension: DomainExtension = {
|
|
@@ -37,7 +37,7 @@ function isRecord(value: unknown): value is Record<string, unknown> {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
function catalogPath(): string {
|
|
40
|
-
const configured = readSettings().library.catalog;
|
|
40
|
+
const configured = readSettings().integrations.library.catalog;
|
|
41
41
|
return path.resolve(configured ?? path.join(clioConfigDir(), "library.yaml"));
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -283,17 +283,17 @@ export function installLibraryPlan(plan: LibraryInstallPlan): void {
|
|
|
283
283
|
}
|
|
284
284
|
|
|
285
285
|
function confirmedRemote(): string {
|
|
286
|
-
const settings = readSettings().library;
|
|
286
|
+
const settings = readSettings().integrations.library;
|
|
287
287
|
if (!settings.remote || settings.remote !== settings.confirmedRemote) throw new Error("library_remote_unconfirmed");
|
|
288
288
|
return settings.remote;
|
|
289
289
|
}
|
|
290
290
|
|
|
291
291
|
export function confirmLibraryRemote(url: string): void {
|
|
292
|
-
const current = readSettings().library.remote;
|
|
292
|
+
const current = readSettings().integrations.library.remote;
|
|
293
293
|
if (current !== null && current !== url) throw new Error("library_remote_mismatch");
|
|
294
294
|
updateSettings((settings) => {
|
|
295
|
-
if (settings.library.remote === null) settings.library.remote = url;
|
|
296
|
-
settings.library.confirmedRemote = url;
|
|
295
|
+
if (settings.integrations.library.remote === null) settings.integrations.library.remote = url;
|
|
296
|
+
settings.integrations.library.confirmedRemote = url;
|
|
297
297
|
});
|
|
298
298
|
}
|
|
299
299
|
|
|
@@ -307,7 +307,7 @@ export async function syncLibrary(
|
|
|
307
307
|
direction: "sync" | "push",
|
|
308
308
|
runner: LibraryCommandRunner = runCommandVector,
|
|
309
309
|
): Promise<void> {
|
|
310
|
-
const settings = readSettings().library;
|
|
310
|
+
const settings = readSettings().integrations.library;
|
|
311
311
|
if (!settings.sync) throw new Error("library_sync_disabled");
|
|
312
312
|
const remote = confirmedRemote();
|
|
313
313
|
const cwd = path.dirname(catalogPath());
|
|
@@ -393,7 +393,7 @@ export function expandPromptTemplateInput(input: string, templates: PromptTempla
|
|
|
393
393
|
};
|
|
394
394
|
}
|
|
395
395
|
if (!template.trusted) {
|
|
396
|
-
const message = `prompt template ${template.name} comes from an untrusted project root; set
|
|
396
|
+
const message = `prompt template ${template.name} comes from an untrusted project root; set integrations.projectResources.trustProjectImports to use it`;
|
|
397
397
|
return {
|
|
398
398
|
expanded: false,
|
|
399
399
|
text: input,
|
|
@@ -2,7 +2,8 @@ import { createHash } from "node:crypto";
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Frontmatter keys owned by the install lifecycle, recognized both at the top
|
|
5
|
-
* level (legacy flat form) and nested under the reserved `clio:`
|
|
5
|
+
* level (legacy flat form) and nested under the reserved `clio-coder:` or
|
|
6
|
+
* released `clio:` block.
|
|
6
7
|
* Stripped before hashing so upstream and installed copies compare on
|
|
7
8
|
* content, not on when or how a copy was installed. Registry identity
|
|
8
9
|
* (`registry-id`, `registry-url`) is deliberately NOT here: it names which
|
|
@@ -64,7 +65,7 @@ export function frontmatterRegion(rawText: string): FrontmatterRegion | null {
|
|
|
64
65
|
export function stripProvenanceLines(lines: ReadonlyArray<string>): string[] {
|
|
65
66
|
const kept: string[] = [];
|
|
66
67
|
let dropIndent: number | null = null;
|
|
67
|
-
let
|
|
68
|
+
let inProductBlock = false;
|
|
68
69
|
for (const line of lines) {
|
|
69
70
|
const indent = line.length - line.trimStart().length;
|
|
70
71
|
if (dropIndent !== null && line.trim().length > 0 && indent > dropIndent) continue;
|
|
@@ -72,19 +73,19 @@ export function stripProvenanceLines(lines: ReadonlyArray<string>): string[] {
|
|
|
72
73
|
const keyMatch = line.match(/^([ \t]*)([A-Za-z][A-Za-z0-9-]*):/);
|
|
73
74
|
const key = keyMatch?.[2];
|
|
74
75
|
if (key !== undefined) {
|
|
75
|
-
if (indent === 0)
|
|
76
|
-
if (PROVENANCE_KEYS.has(key) && (indent === 0 ||
|
|
76
|
+
if (indent === 0) inProductBlock = key === "clio-coder" || key === "clio";
|
|
77
|
+
if (PROVENANCE_KEYS.has(key) && (indent === 0 || inProductBlock)) {
|
|
77
78
|
dropIndent = indent;
|
|
78
79
|
continue;
|
|
79
80
|
}
|
|
80
81
|
}
|
|
81
82
|
kept.push(line);
|
|
82
83
|
}
|
|
83
|
-
// A
|
|
84
|
+
// A product mapping whose children were all lifecycle keys is now empty;
|
|
84
85
|
// keep it and a source that never had the block reads as drifted from its
|
|
85
86
|
// own installed copy. Drop the dangling key line.
|
|
86
87
|
return kept.filter((line, index) => {
|
|
87
|
-
if (!/^clio:\s*$/.test(line)) return true;
|
|
88
|
+
if (!/^(?:clio-coder|clio):\s*$/.test(line)) return true;
|
|
88
89
|
for (let next = index + 1; next < kept.length; next += 1) {
|
|
89
90
|
const candidate = kept[next] as string;
|
|
90
91
|
if (candidate.trim().length === 0) continue;
|