@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
|
@@ -5,24 +5,27 @@ import {
|
|
|
5
5
|
} from "./chunk-CFGTUFWB.js";
|
|
6
6
|
import {
|
|
7
7
|
credentialsPresent
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-72GZI5EV.js";
|
|
9
9
|
import {
|
|
10
10
|
ceilChars,
|
|
11
11
|
estimateAgentMessageTokens,
|
|
12
12
|
toolSchemaChars
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import {
|
|
15
|
-
readSettings
|
|
16
|
-
} from "./chunk-PNY46YEY.js";
|
|
17
|
-
import {
|
|
18
|
-
sleep
|
|
19
|
-
} from "./chunk-FQ4SKYE4.js";
|
|
13
|
+
} from "./chunk-CWVRRIEI.js";
|
|
20
14
|
import {
|
|
21
15
|
getSharedBus
|
|
22
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-PMZVFWSR.js";
|
|
23
17
|
import {
|
|
24
18
|
BusChannels
|
|
25
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-HLW2MRKE.js";
|
|
20
|
+
import {
|
|
21
|
+
readSettings
|
|
22
|
+
} from "./chunk-EIMVLWB3.js";
|
|
23
|
+
import {
|
|
24
|
+
warnLegacyNaming
|
|
25
|
+
} from "./chunk-D7E7WCDF.js";
|
|
26
|
+
import {
|
|
27
|
+
sleep
|
|
28
|
+
} from "./chunk-EBY63B7G.js";
|
|
26
29
|
import {
|
|
27
30
|
CLIO_CONTEXT_WINDOW_WARN_BELOW,
|
|
28
31
|
CLIO_MIN_CONTEXT_WINDOW,
|
|
@@ -34,17 +37,17 @@ import {
|
|
|
34
37
|
registerBuiltinRuntimes,
|
|
35
38
|
requestLmStudioJson,
|
|
36
39
|
resolveLmStudioInstance
|
|
37
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-QKIFBZKT.js";
|
|
38
41
|
import {
|
|
39
42
|
listKnownModelsForRuntime
|
|
40
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-CDNVLKUX.js";
|
|
41
44
|
import {
|
|
42
45
|
authNotRequiredStatus,
|
|
43
46
|
openAuthStorage,
|
|
44
47
|
registerClioOAuthProviders,
|
|
45
48
|
resolveAuthTarget,
|
|
46
49
|
targetRequiresAuth
|
|
47
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-WNP7O5WZ.js";
|
|
48
51
|
import {
|
|
49
52
|
withStateFileLock
|
|
50
53
|
} from "./chunk-IKCO5N3L.js";
|
|
@@ -52,10 +55,16 @@ import {
|
|
|
52
55
|
require_dist
|
|
53
56
|
} from "./chunk-APJ265NV.js";
|
|
54
57
|
import {
|
|
58
|
+
clioCacheDir,
|
|
55
59
|
clioConfigDir,
|
|
60
|
+
clioStateDir,
|
|
56
61
|
clioStatePath,
|
|
57
|
-
resolveClioDirs
|
|
58
|
-
|
|
62
|
+
resolveClioDirs,
|
|
63
|
+
stateRootRemoved
|
|
64
|
+
} from "./chunk-BYP5D4HI.js";
|
|
65
|
+
import {
|
|
66
|
+
safeResourceWrite
|
|
67
|
+
} from "./chunk-WEPFGWHJ.js";
|
|
59
68
|
import {
|
|
60
69
|
getRuntimeRegistry
|
|
61
70
|
} from "./chunk-NUGM5KR6.js";
|
|
@@ -65,13 +74,13 @@ import {
|
|
|
65
74
|
getCatalogModelForRuntime,
|
|
66
75
|
mergeCapabilities,
|
|
67
76
|
resolveCostProvenance
|
|
68
|
-
} from "./chunk-
|
|
77
|
+
} from "./chunk-O42A54GG.js";
|
|
69
78
|
import {
|
|
70
79
|
activateExternalPluginApiBridge,
|
|
71
80
|
calculateEngineCost,
|
|
72
81
|
ensurePiAiRegistered,
|
|
73
82
|
registerEngineApiProvider
|
|
74
|
-
} from "./chunk-
|
|
83
|
+
} from "./chunk-VXMFAE2W.js";
|
|
75
84
|
import {
|
|
76
85
|
__toESM,
|
|
77
86
|
init_esm_shims
|
|
@@ -102,6 +111,88 @@ function canonicalEndpointUrl(raw) {
|
|
|
102
111
|
}
|
|
103
112
|
}
|
|
104
113
|
|
|
114
|
+
// src/domains/providers/endpoint-slots-store.ts
|
|
115
|
+
init_esm_shims();
|
|
116
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
117
|
+
import { join } from "node:path";
|
|
118
|
+
var DEFAULT_ENDPOINT_SLOTS_TTL_MS = 24 * 60 * 60 * 1e3;
|
|
119
|
+
var ENDPOINT_SLOTS_TTL_ENV_VAR = "CLIO_CODER_ENDPOINT_SLOTS_TTL_MS";
|
|
120
|
+
var MAX_ENDPOINT_SLOT_RECORDS = 64;
|
|
121
|
+
function endpointSlotsPath() {
|
|
122
|
+
return join(clioStateDir(), "endpoint-slots.json");
|
|
123
|
+
}
|
|
124
|
+
function endpointSlotsTtlMs(env = process.env) {
|
|
125
|
+
const raw = env[ENDPOINT_SLOTS_TTL_ENV_VAR]?.trim();
|
|
126
|
+
if (raw !== void 0 && /^[1-9]\d*$/.test(raw)) {
|
|
127
|
+
const parsed = Number(raw);
|
|
128
|
+
if (Number.isSafeInteger(parsed)) return parsed;
|
|
129
|
+
}
|
|
130
|
+
return DEFAULT_ENDPOINT_SLOTS_TTL_MS;
|
|
131
|
+
}
|
|
132
|
+
function validRecord(key, value) {
|
|
133
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
|
|
134
|
+
const record = value;
|
|
135
|
+
return record.endpointKey === key && typeof record.runtimeId === "string" && record.runtimeId.length > 0 && typeof record.slots === "number" && Number.isInteger(record.slots) && record.slots > 0 && typeof record.observedAt === "string" && Number.isFinite(Date.parse(record.observedAt));
|
|
136
|
+
}
|
|
137
|
+
function readRecords() {
|
|
138
|
+
const path = endpointSlotsPath();
|
|
139
|
+
if (!existsSync(path)) return [];
|
|
140
|
+
try {
|
|
141
|
+
const parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
142
|
+
if (parsed?.version !== 1 || typeof parsed.endpoints !== "object" || parsed.endpoints === null) return [];
|
|
143
|
+
return Object.entries(parsed.endpoints).filter(([key, value]) => validRecord(key, value)).map(([, value]) => ({ ...value }));
|
|
144
|
+
} catch {
|
|
145
|
+
return [];
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
function fresh(record, nowMs, ttlMs) {
|
|
149
|
+
const observedMs = Date.parse(record.observedAt);
|
|
150
|
+
return observedMs <= nowMs && nowMs - observedMs < ttlMs;
|
|
151
|
+
}
|
|
152
|
+
function readDiscoveredEndpointSlots(options) {
|
|
153
|
+
const nowMs = options?.nowMs ?? Date.now();
|
|
154
|
+
const ttlMs = options?.ttlMs ?? endpointSlotsTtlMs();
|
|
155
|
+
const out = {};
|
|
156
|
+
for (const record of readRecords()) {
|
|
157
|
+
if (!fresh(record, nowMs, ttlMs)) continue;
|
|
158
|
+
out[record.endpointKey] = record;
|
|
159
|
+
}
|
|
160
|
+
return Object.freeze(out);
|
|
161
|
+
}
|
|
162
|
+
function writeRecords(records) {
|
|
163
|
+
const kept = [...records].sort((a, b) => Date.parse(b.observedAt) - Date.parse(a.observedAt)).slice(0, MAX_ENDPOINT_SLOT_RECORDS);
|
|
164
|
+
const file = {
|
|
165
|
+
version: 1,
|
|
166
|
+
endpoints: Object.fromEntries(kept.map((record) => [record.endpointKey, { ...record }]))
|
|
167
|
+
};
|
|
168
|
+
safeResourceWrite(endpointSlotsPath(), `${JSON.stringify(file, null, 2)}
|
|
169
|
+
`, { encoding: "utf8" });
|
|
170
|
+
}
|
|
171
|
+
async function recordDiscoveredEndpointSlots(entry, options) {
|
|
172
|
+
if (!Number.isInteger(entry.slots) || entry.slots <= 0) return;
|
|
173
|
+
if (entry.endpointKey.length === 0 || entry.runtimeId.length === 0) return;
|
|
174
|
+
if (stateRootRemoved()) return;
|
|
175
|
+
const nowMs = options?.nowMs ?? Date.now();
|
|
176
|
+
const ttlMs = options?.ttlMs ?? endpointSlotsTtlMs();
|
|
177
|
+
try {
|
|
178
|
+
await withStateFileLock(endpointSlotsPath(), () => {
|
|
179
|
+
if (stateRootRemoved()) return;
|
|
180
|
+
const kept = readRecords().filter(
|
|
181
|
+
(record) => record.endpointKey !== entry.endpointKey && fresh(record, nowMs, ttlMs)
|
|
182
|
+
);
|
|
183
|
+
kept.push({
|
|
184
|
+
endpointKey: entry.endpointKey,
|
|
185
|
+
runtimeId: entry.runtimeId,
|
|
186
|
+
slots: entry.slots,
|
|
187
|
+
observedAt: new Date(nowMs).toISOString()
|
|
188
|
+
});
|
|
189
|
+
writeRecords(kept);
|
|
190
|
+
});
|
|
191
|
+
} catch (error) {
|
|
192
|
+
options?.onError?.(error);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
105
196
|
// src/domains/providers/endpoint-capacity.ts
|
|
106
197
|
var UNBOUNDED_LOCAL_NATIVE_RUNTIMES = /* @__PURE__ */ new Set(["vllm", "sglang"]);
|
|
107
198
|
function canonicalEndpointKey(value) {
|
|
@@ -118,31 +209,80 @@ function endpointLabel(endpointKey) {
|
|
|
118
209
|
function positiveInteger(value) {
|
|
119
210
|
return typeof value === "number" && Number.isInteger(value) && value > 0 ? value : void 0;
|
|
120
211
|
}
|
|
121
|
-
function
|
|
122
|
-
const key = canonicalEndpointKey(
|
|
212
|
+
function endpointCapacityFor(input, priors = readDiscoveredEndpointSlots()) {
|
|
213
|
+
const key = canonicalEndpointKey(input.target);
|
|
123
214
|
if (key === null) return null;
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if (
|
|
129
|
-
|
|
215
|
+
const label = endpointLabel(key);
|
|
216
|
+
const override = positiveInteger(input.target.maxConcurrentRequests);
|
|
217
|
+
if (override !== void 0) return { key, label, limit: override, source: "override" };
|
|
218
|
+
const discovered = positiveInteger(input.discoveredSlots);
|
|
219
|
+
if (discovered !== void 0) return { key, label, limit: discovered, source: "discovered" };
|
|
220
|
+
const prior = priors[key];
|
|
221
|
+
if (prior !== void 0 && prior.runtimeId === (input.runtime?.id ?? input.target.runtime)) {
|
|
222
|
+
return { key, label, limit: prior.slots, source: "discovered-prior" };
|
|
223
|
+
}
|
|
224
|
+
if (input.runtime?.tier !== "local-native" || UNBOUNDED_LOCAL_NATIVE_RUNTIMES.has(input.runtime.id)) return null;
|
|
225
|
+
return { key, label, limit: 1, source: "local-native-default" };
|
|
226
|
+
}
|
|
227
|
+
function endpointCapacityForStatus(status, priors = readDiscoveredEndpointSlots()) {
|
|
228
|
+
return endpointCapacityFor(
|
|
229
|
+
{
|
|
230
|
+
target: status.target,
|
|
231
|
+
runtime: status.runtime ?? null,
|
|
232
|
+
discoveredSlots: status.probeCapabilities?.parallelSlots
|
|
233
|
+
},
|
|
234
|
+
priors
|
|
235
|
+
);
|
|
130
236
|
}
|
|
131
237
|
function sourceRank(source) {
|
|
132
|
-
|
|
238
|
+
switch (source) {
|
|
239
|
+
case "override":
|
|
240
|
+
return 3;
|
|
241
|
+
case "discovered":
|
|
242
|
+
return 2;
|
|
243
|
+
case "discovered-prior":
|
|
244
|
+
return 1;
|
|
245
|
+
default:
|
|
246
|
+
return 0;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
function foldCapacity(capacities, candidate) {
|
|
250
|
+
if (candidate === null) return;
|
|
251
|
+
const current = capacities[candidate.key];
|
|
252
|
+
if (current === void 0 || sourceRank(candidate.source) > sourceRank(current.source) || sourceRank(candidate.source) === sourceRank(current.source) && candidate.limit < current.limit) {
|
|
253
|
+
capacities[candidate.key] = candidate;
|
|
254
|
+
}
|
|
133
255
|
}
|
|
134
256
|
function endpointCapacitiesForStatuses(statuses) {
|
|
257
|
+
const priors = readDiscoveredEndpointSlots();
|
|
135
258
|
const capacities = {};
|
|
136
|
-
for (const status of statuses)
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
259
|
+
for (const status of statuses) foldCapacity(capacities, endpointCapacityForStatus(status, priors));
|
|
260
|
+
return capacities;
|
|
261
|
+
}
|
|
262
|
+
function resolveEndpointCapacities(input) {
|
|
263
|
+
const priors = readDiscoveredEndpointSlots();
|
|
264
|
+
const capacities = {};
|
|
265
|
+
const covered = /* @__PURE__ */ new Set();
|
|
266
|
+
for (const status of input.statuses) {
|
|
267
|
+
covered.add(status.target.id);
|
|
268
|
+
foldCapacity(capacities, endpointCapacityForStatus(status, priors));
|
|
269
|
+
}
|
|
270
|
+
for (const target of input.targets ?? []) {
|
|
271
|
+
if (covered.has(target.id)) continue;
|
|
272
|
+
foldCapacity(
|
|
273
|
+
capacities,
|
|
274
|
+
endpointCapacityFor({ target, runtime: input.runtimeFor?.(target.runtime) ?? null }, priors)
|
|
275
|
+
);
|
|
143
276
|
}
|
|
144
277
|
return capacities;
|
|
145
278
|
}
|
|
279
|
+
function recordEndpointSlotsFromStatus(status, options) {
|
|
280
|
+
const key = canonicalEndpointKey(status.target);
|
|
281
|
+
const slots = positiveInteger(status.probeCapabilities?.parallelSlots);
|
|
282
|
+
const runtimeId = status.runtime?.id ?? status.target.runtime;
|
|
283
|
+
if (key === null || slots === void 0 || runtimeId === void 0) return Promise.resolve();
|
|
284
|
+
return recordDiscoveredEndpointSlots({ endpointKey: key, runtimeId, slots }, options);
|
|
285
|
+
}
|
|
146
286
|
var foregroundStreams = /* @__PURE__ */ new Map();
|
|
147
287
|
function registerForegroundStream(endpointKey) {
|
|
148
288
|
foregroundStreams.set(endpointKey, (foregroundStreams.get(endpointKey) ?? 0) + 1);
|
|
@@ -164,11 +304,11 @@ init_esm_shims();
|
|
|
164
304
|
|
|
165
305
|
// src/engine/apis/residency-lock.ts
|
|
166
306
|
init_esm_shims();
|
|
167
|
-
import { join } from "node:path";
|
|
307
|
+
import { join as join2 } from "node:path";
|
|
168
308
|
var LOCK_WAIT_MS = 12e4;
|
|
169
309
|
function lockTargetFor(targetKey) {
|
|
170
310
|
const key = canonicalEndpointKey(targetKey) ?? targetKey;
|
|
171
|
-
return
|
|
311
|
+
return join2(clioStatePath(), "residency-locks", key.replace(/[^a-zA-Z0-9._-]+/g, "_"));
|
|
172
312
|
}
|
|
173
313
|
async function withResidencyLock(targetKey, fn) {
|
|
174
314
|
return withStateFileLock(lockTargetFor(targetKey), fn, {
|
|
@@ -905,6 +1045,13 @@ function harmonyReasoningEffort(level) {
|
|
|
905
1045
|
if (level === "medium") return "medium";
|
|
906
1046
|
return "low";
|
|
907
1047
|
}
|
|
1048
|
+
var MEMORY_ALWAYS_ON_MODEL_MIN_OUTPUT_TOKENS = 4e3;
|
|
1049
|
+
function memoryInterventionModelMaxTokens(input) {
|
|
1050
|
+
const configured = Number.isSafeInteger(input.configuredMaxTokens) && input.configuredMaxTokens > 0 ? input.configuredMaxTokens : 1;
|
|
1051
|
+
const requested = input.thinkingMechanism === "always-on" ? Math.max(configured * 2, MEMORY_ALWAYS_ON_MODEL_MIN_OUTPUT_TOKENS) : configured;
|
|
1052
|
+
const modelCap = input.modelMaxTokens;
|
|
1053
|
+
return typeof modelCap === "number" && Number.isSafeInteger(modelCap) && modelCap > 0 ? Math.min(requested, modelCap) : requested;
|
|
1054
|
+
}
|
|
908
1055
|
function reasoningClassForMechanism(mechanism) {
|
|
909
1056
|
if (mechanism === "none") return "never";
|
|
910
1057
|
if (mechanism === "always-on") return "always";
|
|
@@ -1260,7 +1407,9 @@ function capabilitiesFromModel(model) {
|
|
|
1260
1407
|
return caps;
|
|
1261
1408
|
}
|
|
1262
1409
|
function resolveModelRuntimeCapabilitiesForModel(model, configuredThinkingLevel) {
|
|
1263
|
-
const
|
|
1410
|
+
const runtimeModel = model;
|
|
1411
|
+
if (runtimeModel.clio !== void 0) warnLegacyNaming("model.clio", "model.clioCoder");
|
|
1412
|
+
const metadata2 = runtimeModel.clioCoder ?? runtimeModel.clio;
|
|
1264
1413
|
const caps = capabilitiesFromModel(model);
|
|
1265
1414
|
return resolveModelRuntimeCapabilities({
|
|
1266
1415
|
targetId: metadata2?.targetId ?? null,
|
|
@@ -1295,6 +1444,91 @@ function resolveTargetRuntimeCapabilities(target, runtime, wireModelId, capabili
|
|
|
1295
1444
|
});
|
|
1296
1445
|
}
|
|
1297
1446
|
|
|
1447
|
+
// src/domains/providers/target-model-cache.ts
|
|
1448
|
+
init_esm_shims();
|
|
1449
|
+
import { createHash } from "node:crypto";
|
|
1450
|
+
import { existsSync as existsSync2, readFileSync as readFileSync2 } from "node:fs";
|
|
1451
|
+
import { join as join3 } from "node:path";
|
|
1452
|
+
var TARGET_MODEL_CACHE_TTL_MS = 24 * 60 * 60 * 1e3;
|
|
1453
|
+
var TARGET_MODEL_CACHE_VERSION = 1;
|
|
1454
|
+
var TARGET_MODEL_CACHE_MAX_MODELS = 4096;
|
|
1455
|
+
var TARGET_MODEL_CACHE_MAX_MODEL_ID_CHARS = 1024;
|
|
1456
|
+
function targetCacheKey(targetId) {
|
|
1457
|
+
return createHash("sha256").update(targetId).digest("hex").slice(0, 24);
|
|
1458
|
+
}
|
|
1459
|
+
function targetModelSnapshotPath(targetId, cacheDir = clioCacheDir()) {
|
|
1460
|
+
return join3(cacheDir, "provider-target-models", `${targetCacheKey(targetId)}.json`);
|
|
1461
|
+
}
|
|
1462
|
+
function normalizedModels(models) {
|
|
1463
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1464
|
+
const out = [];
|
|
1465
|
+
for (const raw of models) {
|
|
1466
|
+
const model = raw.trim();
|
|
1467
|
+
if (model.length === 0 || model.length > TARGET_MODEL_CACHE_MAX_MODEL_ID_CHARS || seen.has(model)) continue;
|
|
1468
|
+
seen.add(model);
|
|
1469
|
+
out.push(model);
|
|
1470
|
+
if (out.length >= TARGET_MODEL_CACHE_MAX_MODELS) break;
|
|
1471
|
+
}
|
|
1472
|
+
return out;
|
|
1473
|
+
}
|
|
1474
|
+
function parseSnapshot(value) {
|
|
1475
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return null;
|
|
1476
|
+
const row = value;
|
|
1477
|
+
if (row.version !== TARGET_MODEL_CACHE_VERSION) return null;
|
|
1478
|
+
if (typeof row.targetId !== "string" || row.targetId.length === 0) return null;
|
|
1479
|
+
if (typeof row.runtimeId !== "string" || row.runtimeId.length === 0) return null;
|
|
1480
|
+
if (row.url !== null && typeof row.url !== "string") return null;
|
|
1481
|
+
if (!Array.isArray(row.models) || row.models.some((model) => typeof model !== "string")) return null;
|
|
1482
|
+
if (typeof row.observedAt !== "string" || !Number.isFinite(Date.parse(row.observedAt))) return null;
|
|
1483
|
+
const models = normalizedModels(row.models);
|
|
1484
|
+
if (models.length !== row.models.length) return null;
|
|
1485
|
+
return {
|
|
1486
|
+
version: TARGET_MODEL_CACHE_VERSION,
|
|
1487
|
+
targetId: row.targetId,
|
|
1488
|
+
runtimeId: row.runtimeId,
|
|
1489
|
+
url: row.url,
|
|
1490
|
+
models,
|
|
1491
|
+
observedAt: row.observedAt
|
|
1492
|
+
};
|
|
1493
|
+
}
|
|
1494
|
+
function readTargetModelSnapshot(target, options = {}) {
|
|
1495
|
+
const path = targetModelSnapshotPath(target.id, options.cacheDir);
|
|
1496
|
+
if (!existsSync2(path)) return null;
|
|
1497
|
+
try {
|
|
1498
|
+
const snapshot = parseSnapshot(JSON.parse(readFileSync2(path, "utf8")));
|
|
1499
|
+
if (snapshot === null) return null;
|
|
1500
|
+
if (snapshot.targetId !== target.id || snapshot.runtimeId !== target.runtime) return null;
|
|
1501
|
+
if (snapshot.url !== (target.url ?? null)) return null;
|
|
1502
|
+
const observedMs = Date.parse(snapshot.observedAt);
|
|
1503
|
+
const nowMs = options.nowMs ?? Date.now();
|
|
1504
|
+
const ttlMs = options.ttlMs ?? TARGET_MODEL_CACHE_TTL_MS;
|
|
1505
|
+
if (observedMs > nowMs || nowMs - observedMs >= ttlMs) return null;
|
|
1506
|
+
return snapshot;
|
|
1507
|
+
} catch {
|
|
1508
|
+
return null;
|
|
1509
|
+
}
|
|
1510
|
+
}
|
|
1511
|
+
function recordTargetModelSnapshot(target, models, options = {}) {
|
|
1512
|
+
if (target.id.length === 0 || target.runtime.length === 0) return false;
|
|
1513
|
+
const snapshot = {
|
|
1514
|
+
version: TARGET_MODEL_CACHE_VERSION,
|
|
1515
|
+
targetId: target.id,
|
|
1516
|
+
runtimeId: target.runtime,
|
|
1517
|
+
url: target.url ?? null,
|
|
1518
|
+
models: normalizedModels(models),
|
|
1519
|
+
observedAt: new Date(options.nowMs ?? Date.now()).toISOString()
|
|
1520
|
+
};
|
|
1521
|
+
try {
|
|
1522
|
+
safeResourceWrite(targetModelSnapshotPath(target.id, options.cacheDir), `${JSON.stringify(snapshot, null, 2)}
|
|
1523
|
+
`, {
|
|
1524
|
+
encoding: "utf8"
|
|
1525
|
+
});
|
|
1526
|
+
return true;
|
|
1527
|
+
} catch {
|
|
1528
|
+
return false;
|
|
1529
|
+
}
|
|
1530
|
+
}
|
|
1531
|
+
|
|
1298
1532
|
// src/domains/providers/eligibility.ts
|
|
1299
1533
|
init_esm_shims();
|
|
1300
1534
|
function isTargetEligibleRuntime(runtime) {
|
|
@@ -1400,6 +1634,105 @@ function canonicalizeWireModelId(status, requested) {
|
|
|
1400
1634
|
return matches.length === 1 ? matches[0] ?? requested : requested;
|
|
1401
1635
|
}
|
|
1402
1636
|
|
|
1637
|
+
// src/domains/providers/resolver.ts
|
|
1638
|
+
init_esm_shims();
|
|
1639
|
+
var GLOB_CHARS = /[*?[]/;
|
|
1640
|
+
function isThinkingLevel(token) {
|
|
1641
|
+
return VALID_THINKING_LEVELS.includes(token);
|
|
1642
|
+
}
|
|
1643
|
+
function splitThinkingSuffix(pattern) {
|
|
1644
|
+
const idx = pattern.lastIndexOf(":");
|
|
1645
|
+
if (idx === -1) return { base: pattern };
|
|
1646
|
+
const suffix = pattern.slice(idx + 1).trim();
|
|
1647
|
+
if (!isThinkingLevel(suffix)) return { base: pattern };
|
|
1648
|
+
const base = pattern.slice(0, idx).trim();
|
|
1649
|
+
return base ? { base, thinkingLevel: suffix } : { base: pattern };
|
|
1650
|
+
}
|
|
1651
|
+
function globToRegExp(glob) {
|
|
1652
|
+
let body = "^";
|
|
1653
|
+
for (let i = 0; i < glob.length; i++) {
|
|
1654
|
+
const ch = glob[i] ?? "";
|
|
1655
|
+
if (ch === "*") {
|
|
1656
|
+
body += ".*";
|
|
1657
|
+
} else if (ch === "?") {
|
|
1658
|
+
body += ".";
|
|
1659
|
+
} else if (ch === "[") {
|
|
1660
|
+
const close = glob.indexOf("]", i + 1);
|
|
1661
|
+
if (close === -1) {
|
|
1662
|
+
body += "\\[";
|
|
1663
|
+
continue;
|
|
1664
|
+
}
|
|
1665
|
+
body += `[${glob.slice(i + 1, close)}]`;
|
|
1666
|
+
i = close;
|
|
1667
|
+
} else if (/[.+^${}()|\\]/.test(ch)) {
|
|
1668
|
+
body += `\\${ch}`;
|
|
1669
|
+
} else {
|
|
1670
|
+
body += ch;
|
|
1671
|
+
}
|
|
1672
|
+
}
|
|
1673
|
+
body += "$";
|
|
1674
|
+
return new RegExp(body, "i");
|
|
1675
|
+
}
|
|
1676
|
+
function collectCandidates(providers) {
|
|
1677
|
+
const out = [];
|
|
1678
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1679
|
+
for (const status of providers.list()) {
|
|
1680
|
+
for (const model of modelIdsForStatus(status)) {
|
|
1681
|
+
const key = `${status.target.id}/${model}`;
|
|
1682
|
+
if (seen.has(key)) continue;
|
|
1683
|
+
seen.add(key);
|
|
1684
|
+
out.push({ target: status.target.id, model, full: key });
|
|
1685
|
+
}
|
|
1686
|
+
}
|
|
1687
|
+
return out;
|
|
1688
|
+
}
|
|
1689
|
+
function pickFirst(candidates) {
|
|
1690
|
+
if (candidates.length === 0) return null;
|
|
1691
|
+
const head = candidates[0];
|
|
1692
|
+
if (!head) return null;
|
|
1693
|
+
return { ref: head, ambiguous: candidates.length > 1 };
|
|
1694
|
+
}
|
|
1695
|
+
function buildResult(pattern, pick, thinkingLevel) {
|
|
1696
|
+
if (!pick) {
|
|
1697
|
+
return { ref: null, error: `no models match pattern "${pattern}"` };
|
|
1698
|
+
}
|
|
1699
|
+
const ref = { target: pick.ref.target, model: pick.ref.model };
|
|
1700
|
+
if (thinkingLevel) ref.thinkingLevel = thinkingLevel;
|
|
1701
|
+
const result = { ref };
|
|
1702
|
+
if (pick.ambiguous) {
|
|
1703
|
+
result.warning = `pattern "${pattern}" matched multiple models; using ${pick.ref.full}`;
|
|
1704
|
+
}
|
|
1705
|
+
return result;
|
|
1706
|
+
}
|
|
1707
|
+
function resolveModelReference(rawPattern, providers) {
|
|
1708
|
+
const trimmed = rawPattern.trim();
|
|
1709
|
+
if (!trimmed) return { ref: null, error: "empty pattern" };
|
|
1710
|
+
const { base, thinkingLevel } = splitThinkingSuffix(trimmed);
|
|
1711
|
+
const candidates = collectCandidates(providers);
|
|
1712
|
+
if (candidates.length === 0) {
|
|
1713
|
+
return { ref: null, error: "no targets configured; add one with `clio-coder configure` or `clio-coder targets add`" };
|
|
1714
|
+
}
|
|
1715
|
+
const lower = base.toLowerCase();
|
|
1716
|
+
const exactFull = candidates.filter((c) => c.full.toLowerCase() === lower);
|
|
1717
|
+
if (exactFull.length > 0) return buildResult(base, pickFirst(exactFull), thinkingLevel);
|
|
1718
|
+
if (GLOB_CHARS.test(base)) {
|
|
1719
|
+
const re = globToRegExp(base);
|
|
1720
|
+
const globMatches = candidates.filter((c) => re.test(c.full) || re.test(c.model));
|
|
1721
|
+
return buildResult(base, pickFirst(globMatches), thinkingLevel);
|
|
1722
|
+
}
|
|
1723
|
+
const slashIdx = base.indexOf("/");
|
|
1724
|
+
if (slashIdx !== -1) {
|
|
1725
|
+
const ep = base.slice(0, slashIdx).toLowerCase();
|
|
1726
|
+
const mdl = base.slice(slashIdx + 1).toLowerCase();
|
|
1727
|
+
const epModel = candidates.filter((c) => c.target.toLowerCase() === ep && c.model.toLowerCase() === mdl);
|
|
1728
|
+
if (epModel.length > 0) return buildResult(base, pickFirst(epModel), thinkingLevel);
|
|
1729
|
+
}
|
|
1730
|
+
const exactModel = candidates.filter((c) => c.model.toLowerCase() === lower);
|
|
1731
|
+
if (exactModel.length > 0) return buildResult(base, pickFirst(exactModel), thinkingLevel);
|
|
1732
|
+
const partial = candidates.filter((c) => c.model.toLowerCase().includes(lower));
|
|
1733
|
+
return buildResult(base, pickFirst(partial), thinkingLevel);
|
|
1734
|
+
}
|
|
1735
|
+
|
|
1403
1736
|
// src/domains/providers/runtime-resolution.ts
|
|
1404
1737
|
init_esm_shims();
|
|
1405
1738
|
function diagnostic(severity, code, message) {
|
|
@@ -3754,8 +4087,8 @@ function registerClioApiProviders() {
|
|
|
3754
4087
|
|
|
3755
4088
|
// src/domains/providers/knowledge-base-path.ts
|
|
3756
4089
|
init_esm_shims();
|
|
3757
|
-
import { existsSync, statSync } from "node:fs";
|
|
3758
|
-
import { delimiter, dirname, join as
|
|
4090
|
+
import { existsSync as existsSync3, statSync } from "node:fs";
|
|
4091
|
+
import { delimiter, dirname, join as join4 } from "node:path";
|
|
3759
4092
|
import { fileURLToPath } from "node:url";
|
|
3760
4093
|
var MODEL_CATALOG_OVERLAY_DIR = "model-catalog.d";
|
|
3761
4094
|
var MODEL_CATALOG_DIRS_ENV = "CLIO_CODER_MODEL_CATALOG_DIRS";
|
|
@@ -3769,19 +4102,19 @@ function isDirectory(path) {
|
|
|
3769
4102
|
function resolveProvidersModelsDir(importMetaUrl) {
|
|
3770
4103
|
const start = dirname(fileURLToPath(importMetaUrl));
|
|
3771
4104
|
const directCandidates = [
|
|
3772
|
-
|
|
3773
|
-
|
|
3774
|
-
|
|
4105
|
+
join4(start, "models"),
|
|
4106
|
+
join4(start, "..", "domains", "providers", "models"),
|
|
4107
|
+
join4(start, "..", "providers-models")
|
|
3775
4108
|
];
|
|
3776
4109
|
for (const candidate of directCandidates) {
|
|
3777
4110
|
if (isDirectory(candidate)) return candidate;
|
|
3778
4111
|
}
|
|
3779
4112
|
let cursor = start;
|
|
3780
4113
|
for (let i = 0; i < 8; i++) {
|
|
3781
|
-
const packageJson =
|
|
3782
|
-
const sourceModels =
|
|
3783
|
-
const distModels =
|
|
3784
|
-
if (
|
|
4114
|
+
const packageJson = join4(cursor, "package.json");
|
|
4115
|
+
const sourceModels = join4(cursor, "src", "domains", "providers", "models");
|
|
4116
|
+
const distModels = join4(cursor, "dist", "providers-models");
|
|
4117
|
+
if (existsSync3(packageJson)) {
|
|
3785
4118
|
if (isDirectory(sourceModels)) return sourceModels;
|
|
3786
4119
|
if (isDirectory(distModels)) return distModels;
|
|
3787
4120
|
}
|
|
@@ -3811,8 +4144,8 @@ function resolveProviderModelCatalogDirs(importMetaUrl, options = {}) {
|
|
|
3811
4144
|
const bundled = resolveProvidersModelsDir(importMetaUrl);
|
|
3812
4145
|
const cwd = options.cwd ?? process.cwd();
|
|
3813
4146
|
const overlays = uniqueExistingDirs([
|
|
3814
|
-
|
|
3815
|
-
|
|
4147
|
+
join4(resolveClioDirs().config, MODEL_CATALOG_OVERLAY_DIR),
|
|
4148
|
+
join4(cwd, ".clio-coder", MODEL_CATALOG_OVERLAY_DIR),
|
|
3816
4149
|
...envOverlayDirs()
|
|
3817
4150
|
]);
|
|
3818
4151
|
return {
|
|
@@ -3831,7 +4164,7 @@ function resolveProviderKnowledgeBaseRoots(importMetaUrl, options = {}) {
|
|
|
3831
4164
|
|
|
3832
4165
|
// src/domains/providers/plugins.ts
|
|
3833
4166
|
init_esm_shims();
|
|
3834
|
-
import { join as
|
|
4167
|
+
import { join as join5 } from "node:path";
|
|
3835
4168
|
function extractPluginPackages(settings) {
|
|
3836
4169
|
if (!settings || typeof settings !== "object") return [];
|
|
3837
4170
|
const raw = settings.runtimePlugins;
|
|
@@ -3840,7 +4173,7 @@ function extractPluginPackages(settings) {
|
|
|
3840
4173
|
}
|
|
3841
4174
|
async function loadPluginRuntimes(registry, settings) {
|
|
3842
4175
|
const loaded = [];
|
|
3843
|
-
const pluginDir =
|
|
4176
|
+
const pluginDir = join5(clioConfigDir(), "runtimes");
|
|
3844
4177
|
const packages = extractPluginPackages(settings);
|
|
3845
4178
|
try {
|
|
3846
4179
|
const ids = await registry.loadFromDir(pluginDir, activateExternalPluginApiBridge);
|
|
@@ -3868,8 +4201,8 @@ async function loadPluginRuntimes(registry, settings) {
|
|
|
3868
4201
|
// src/domains/providers/types/knowledge-base.ts
|
|
3869
4202
|
init_esm_shims();
|
|
3870
4203
|
var import_yaml = __toESM(require_dist(), 1);
|
|
3871
|
-
import { readdirSync, readFileSync, statSync as statSync2 } from "node:fs";
|
|
3872
|
-
import { join as
|
|
4204
|
+
import { readdirSync, readFileSync as readFileSync3, statSync as statSync2 } from "node:fs";
|
|
4205
|
+
import { join as join6 } from "node:path";
|
|
3873
4206
|
var FileKnowledgeBase = class {
|
|
3874
4207
|
roots;
|
|
3875
4208
|
loaded = [];
|
|
@@ -3883,7 +4216,7 @@ var FileKnowledgeBase = class {
|
|
|
3883
4216
|
const files = collectYamlFiles(root.dir);
|
|
3884
4217
|
for (const file of files) {
|
|
3885
4218
|
const name = root.label ? `${root.label}:${file.name}` : file.name;
|
|
3886
|
-
const raw =
|
|
4219
|
+
const raw = readFileSync3(file.path, "utf8");
|
|
3887
4220
|
const parsed = (0, import_yaml.parse)(raw);
|
|
3888
4221
|
if (!Array.isArray(parsed)) {
|
|
3889
4222
|
throw new Error(`knowledge base file ${name} must be a YAML list of KnowledgeBaseEntry`);
|
|
@@ -3941,7 +4274,7 @@ function collectYamlFiles(dir, prefix = "") {
|
|
|
3941
4274
|
const out = [];
|
|
3942
4275
|
const entries = readdirSync(dir, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name));
|
|
3943
4276
|
for (const entry of entries) {
|
|
3944
|
-
const path =
|
|
4277
|
+
const path = join6(dir, entry.name);
|
|
3945
4278
|
const name = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
3946
4279
|
if (entry.isDirectory()) {
|
|
3947
4280
|
out.push(...collectYamlFiles(path, name));
|
|
@@ -3981,6 +4314,16 @@ function normalizeEntry(raw, file) {
|
|
|
3981
4314
|
}
|
|
3982
4315
|
entry.quirks = candidate.quirks;
|
|
3983
4316
|
}
|
|
4317
|
+
const canonicalMetadata = candidate["clio-coder"];
|
|
4318
|
+
const legacyMetadata = candidate.clio;
|
|
4319
|
+
if (legacyMetadata !== void 0) warnLegacyNaming("clio: model metadata", "clio-coder: model metadata");
|
|
4320
|
+
const metadata2 = canonicalMetadata ?? legacyMetadata;
|
|
4321
|
+
if (metadata2 !== void 0) {
|
|
4322
|
+
if (typeof metadata2 !== "object" || metadata2 === null || Array.isArray(metadata2)) {
|
|
4323
|
+
throw new Error(`knowledge base file ${file}: entry '${family}' clio-coder metadata must be an object`);
|
|
4324
|
+
}
|
|
4325
|
+
entry.clioCoder = metadata2;
|
|
4326
|
+
}
|
|
3984
4327
|
return entry;
|
|
3985
4328
|
}
|
|
3986
4329
|
|
|
@@ -4047,16 +4390,17 @@ function uniqueModels2(ids) {
|
|
|
4047
4390
|
}
|
|
4048
4391
|
return out;
|
|
4049
4392
|
}
|
|
4050
|
-
function discoveredModelsSource(probe, preservePreviousProbe, previous, desc) {
|
|
4393
|
+
function discoveredModelsSource(probe, preservePreviousProbe, previous, cachedModels, desc) {
|
|
4051
4394
|
if (probe?.models !== void 0) return "probe";
|
|
4052
4395
|
if (preservePreviousProbe && previous?.discoveredModels && previous.discoveredModels.length > 0) return "cache";
|
|
4396
|
+
if (cachedModels.length > 0) return "cache";
|
|
4053
4397
|
if (desc.knownModels && desc.knownModels.length > 0) return "runtime";
|
|
4054
4398
|
return "none";
|
|
4055
4399
|
}
|
|
4056
4400
|
function sameProbeIdentity(previous, next) {
|
|
4057
4401
|
return previous.id === next.id && previous.runtime === next.runtime && (previous.url ?? "") === (next.url ?? "") && (previous.defaultModel ?? "") === (next.defaultModel ?? "");
|
|
4058
4402
|
}
|
|
4059
|
-
function mergeProbeResult(desc, target, probe, previous) {
|
|
4403
|
+
function mergeProbeResult(desc, target, probe, previous, cachedModels = []) {
|
|
4060
4404
|
const probeSucceeded = probe?.ok ?? false;
|
|
4061
4405
|
const preservePrevious = !probeSucceeded && previous !== void 0 && sameProbeIdentity(previous.target, target);
|
|
4062
4406
|
const probeCapabilities = probe?.discoveredCapabilities ?? (preservePrevious ? previous.probeCapabilities : null) ?? null;
|
|
@@ -4065,12 +4409,12 @@ function mergeProbeResult(desc, target, probe, previous) {
|
|
|
4065
4409
|
const probeNotes = probe?.notes && probe.notes.length > 0 ? probe.notes : preservePrevious ? previous.probeNotes : void 0;
|
|
4066
4410
|
const probeSurfaces = probe?.surfaces ?? (preservePrevious ? previous.probeSurfaces : void 0);
|
|
4067
4411
|
const discoveredModels = uniqueModels2(
|
|
4068
|
-
probe?.models ?? (preservePrevious ? previous.discoveredModels : void 0) ?? desc.knownModels ?? []
|
|
4412
|
+
probe?.models ?? (preservePrevious ? previous.discoveredModels : void 0) ?? (cachedModels.length > 0 ? cachedModels : void 0) ?? desc.knownModels ?? []
|
|
4069
4413
|
);
|
|
4070
4414
|
const discoveredModelStates = probe?.modelStates ?? (preservePrevious ? previous.discoveredModelStates : null) ?? null;
|
|
4071
4415
|
const merge = {
|
|
4072
4416
|
discoveredModels,
|
|
4073
|
-
discoveredModelsSource: discoveredModelsSource(probe, preservePrevious, previous, desc),
|
|
4417
|
+
discoveredModelsSource: discoveredModelsSource(probe, preservePrevious, previous, cachedModels, desc),
|
|
4074
4418
|
discoveredModelStates,
|
|
4075
4419
|
probeCapabilities,
|
|
4076
4420
|
probeModelCapabilities,
|
|
@@ -4163,7 +4507,8 @@ function createProvidersBundle(context) {
|
|
|
4163
4507
|
return out2;
|
|
4164
4508
|
}
|
|
4165
4509
|
const availability = availabilityFor(desc, target, authStatusFor);
|
|
4166
|
-
const
|
|
4510
|
+
const cachedModels = readTargetModelSnapshot(target)?.models ?? [];
|
|
4511
|
+
const merge = mergeProbeResult(desc, target, probe, previous, cachedModels);
|
|
4167
4512
|
const { capabilities, contextWindowProvenance } = capabilitiesFor(desc, target, merge, kb);
|
|
4168
4513
|
const healthy = probe !== null ? probe.ok : null;
|
|
4169
4514
|
const unservedDefault = probe?.ok ? unservedDefaultModelReason(desc, target, merge) : null;
|
|
@@ -4224,7 +4569,7 @@ function createProvidersBundle(context) {
|
|
|
4224
4569
|
}
|
|
4225
4570
|
if (probeResult.ok && options?.reasoning !== false && typeof desc.probeReasoning === "function") {
|
|
4226
4571
|
const settings = readConfig();
|
|
4227
|
-
const orchestratorTarget = settings.
|
|
4572
|
+
const orchestratorTarget = settings.chat.target === target.id ? settings.chat.model : null;
|
|
4228
4573
|
const candidateModelId = orchestratorTarget ?? target.defaultModel ?? null;
|
|
4229
4574
|
if (candidateModelId) {
|
|
4230
4575
|
try {
|
|
@@ -4251,6 +4596,10 @@ function createProvidersBundle(context) {
|
|
|
4251
4596
|
}
|
|
4252
4597
|
const status = buildStatus(target, desc, probeResult, previous);
|
|
4253
4598
|
statuses.set(target.id, status);
|
|
4599
|
+
if (probeResult.ok && probeResult.models !== void 0) {
|
|
4600
|
+
recordTargetModelSnapshot(target, probeResult.models);
|
|
4601
|
+
}
|
|
4602
|
+
void recordEndpointSlotsFromStatus(status);
|
|
4254
4603
|
context.bus.emit(BusChannels.ProviderHealth, { id: target.id, status });
|
|
4255
4604
|
return status;
|
|
4256
4605
|
}
|
|
@@ -4298,7 +4647,7 @@ function createProvidersBundle(context) {
|
|
|
4298
4647
|
registerClioOAuthProviders();
|
|
4299
4648
|
registerBuiltinRuntimes(registry);
|
|
4300
4649
|
const settings = readConfig();
|
|
4301
|
-
setGlobalDefaultMaxOutputTokens(settings.
|
|
4650
|
+
setGlobalDefaultMaxOutputTokens(settings.chat.maxOutputTokens);
|
|
4302
4651
|
await loadPluginRuntimes(registry, settings);
|
|
4303
4652
|
await probeAll();
|
|
4304
4653
|
const config = context.getContract("config");
|
|
@@ -4413,105 +4762,6 @@ var ProvidersManifest = {
|
|
|
4413
4762
|
dependsOn: ["config"]
|
|
4414
4763
|
};
|
|
4415
4764
|
|
|
4416
|
-
// src/domains/providers/resolver.ts
|
|
4417
|
-
init_esm_shims();
|
|
4418
|
-
var GLOB_CHARS = /[*?[]/;
|
|
4419
|
-
function isThinkingLevel(token) {
|
|
4420
|
-
return VALID_THINKING_LEVELS.includes(token);
|
|
4421
|
-
}
|
|
4422
|
-
function splitThinkingSuffix(pattern) {
|
|
4423
|
-
const idx = pattern.lastIndexOf(":");
|
|
4424
|
-
if (idx === -1) return { base: pattern };
|
|
4425
|
-
const suffix = pattern.slice(idx + 1).trim();
|
|
4426
|
-
if (!isThinkingLevel(suffix)) return { base: pattern };
|
|
4427
|
-
const base = pattern.slice(0, idx).trim();
|
|
4428
|
-
return base ? { base, thinkingLevel: suffix } : { base: pattern };
|
|
4429
|
-
}
|
|
4430
|
-
function globToRegExp(glob) {
|
|
4431
|
-
let body = "^";
|
|
4432
|
-
for (let i = 0; i < glob.length; i++) {
|
|
4433
|
-
const ch = glob[i] ?? "";
|
|
4434
|
-
if (ch === "*") {
|
|
4435
|
-
body += ".*";
|
|
4436
|
-
} else if (ch === "?") {
|
|
4437
|
-
body += ".";
|
|
4438
|
-
} else if (ch === "[") {
|
|
4439
|
-
const close = glob.indexOf("]", i + 1);
|
|
4440
|
-
if (close === -1) {
|
|
4441
|
-
body += "\\[";
|
|
4442
|
-
continue;
|
|
4443
|
-
}
|
|
4444
|
-
body += `[${glob.slice(i + 1, close)}]`;
|
|
4445
|
-
i = close;
|
|
4446
|
-
} else if (/[.+^${}()|\\]/.test(ch)) {
|
|
4447
|
-
body += `\\${ch}`;
|
|
4448
|
-
} else {
|
|
4449
|
-
body += ch;
|
|
4450
|
-
}
|
|
4451
|
-
}
|
|
4452
|
-
body += "$";
|
|
4453
|
-
return new RegExp(body, "i");
|
|
4454
|
-
}
|
|
4455
|
-
function collectCandidates(providers) {
|
|
4456
|
-
const out = [];
|
|
4457
|
-
const seen = /* @__PURE__ */ new Set();
|
|
4458
|
-
for (const status of providers.list()) {
|
|
4459
|
-
for (const model of modelIdsForStatus(status)) {
|
|
4460
|
-
const key = `${status.target.id}/${model}`;
|
|
4461
|
-
if (seen.has(key)) continue;
|
|
4462
|
-
seen.add(key);
|
|
4463
|
-
out.push({ target: status.target.id, model, full: key });
|
|
4464
|
-
}
|
|
4465
|
-
}
|
|
4466
|
-
return out;
|
|
4467
|
-
}
|
|
4468
|
-
function pickFirst(candidates) {
|
|
4469
|
-
if (candidates.length === 0) return null;
|
|
4470
|
-
const head = candidates[0];
|
|
4471
|
-
if (!head) return null;
|
|
4472
|
-
return { ref: head, ambiguous: candidates.length > 1 };
|
|
4473
|
-
}
|
|
4474
|
-
function buildResult(pattern, pick, thinkingLevel) {
|
|
4475
|
-
if (!pick) {
|
|
4476
|
-
return { ref: null, error: `no models match pattern "${pattern}"` };
|
|
4477
|
-
}
|
|
4478
|
-
const ref = { target: pick.ref.target, model: pick.ref.model };
|
|
4479
|
-
if (thinkingLevel) ref.thinkingLevel = thinkingLevel;
|
|
4480
|
-
const result = { ref };
|
|
4481
|
-
if (pick.ambiguous) {
|
|
4482
|
-
result.warning = `pattern "${pattern}" matched multiple models; using ${pick.ref.full}`;
|
|
4483
|
-
}
|
|
4484
|
-
return result;
|
|
4485
|
-
}
|
|
4486
|
-
function resolveModelReference(rawPattern, providers) {
|
|
4487
|
-
const trimmed = rawPattern.trim();
|
|
4488
|
-
if (!trimmed) return { ref: null, error: "empty pattern" };
|
|
4489
|
-
const { base, thinkingLevel } = splitThinkingSuffix(trimmed);
|
|
4490
|
-
const candidates = collectCandidates(providers);
|
|
4491
|
-
if (candidates.length === 0) {
|
|
4492
|
-
return { ref: null, error: "no targets configured; add one with `clio-coder configure` or `clio-coder targets add`" };
|
|
4493
|
-
}
|
|
4494
|
-
const lower = base.toLowerCase();
|
|
4495
|
-
const exactFull = candidates.filter((c) => c.full.toLowerCase() === lower);
|
|
4496
|
-
if (exactFull.length > 0) return buildResult(base, pickFirst(exactFull), thinkingLevel);
|
|
4497
|
-
if (GLOB_CHARS.test(base)) {
|
|
4498
|
-
const re = globToRegExp(base);
|
|
4499
|
-
const globMatches = candidates.filter((c) => re.test(c.full) || re.test(c.model));
|
|
4500
|
-
return buildResult(base, pickFirst(globMatches), thinkingLevel);
|
|
4501
|
-
}
|
|
4502
|
-
const slashIdx = base.indexOf("/");
|
|
4503
|
-
if (slashIdx !== -1) {
|
|
4504
|
-
const ep = base.slice(0, slashIdx).toLowerCase();
|
|
4505
|
-
const mdl = base.slice(slashIdx + 1).toLowerCase();
|
|
4506
|
-
const epModel = candidates.filter((c) => c.target.toLowerCase() === ep && c.model.toLowerCase() === mdl);
|
|
4507
|
-
if (epModel.length > 0) return buildResult(base, pickFirst(epModel), thinkingLevel);
|
|
4508
|
-
}
|
|
4509
|
-
const exactModel = candidates.filter((c) => c.model.toLowerCase() === lower);
|
|
4510
|
-
if (exactModel.length > 0) return buildResult(base, pickFirst(exactModel), thinkingLevel);
|
|
4511
|
-
const partial = candidates.filter((c) => c.model.toLowerCase().includes(lower));
|
|
4512
|
-
return buildResult(base, pickFirst(partial), thinkingLevel);
|
|
4513
|
-
}
|
|
4514
|
-
|
|
4515
4765
|
// src/domains/providers/index.ts
|
|
4516
4766
|
var ProvidersDomainModule = {
|
|
4517
4767
|
manifest: ProvidersManifest,
|
|
@@ -4524,8 +4774,10 @@ export {
|
|
|
4524
4774
|
resolveReservedOutputTokens,
|
|
4525
4775
|
canonicalEndpointKey,
|
|
4526
4776
|
endpointLabel,
|
|
4777
|
+
endpointCapacityFor,
|
|
4527
4778
|
endpointCapacityForStatus,
|
|
4528
4779
|
endpointCapacitiesForStatuses,
|
|
4780
|
+
resolveEndpointCapacities,
|
|
4529
4781
|
registerForegroundStream,
|
|
4530
4782
|
foregroundStreamUsage,
|
|
4531
4783
|
setResidencyNoticeSink,
|
|
@@ -4536,6 +4788,7 @@ export {
|
|
|
4536
4788
|
applyModelCapabilityPatch,
|
|
4537
4789
|
probeCapabilitiesForModel,
|
|
4538
4790
|
resolveModelCapabilities,
|
|
4791
|
+
memoryInterventionModelMaxTokens,
|
|
4539
4792
|
thinkingLevelChoiceLabel,
|
|
4540
4793
|
thinkingLevelFromChoiceLabel,
|
|
4541
4794
|
resolveModelRuntimeCapabilitiesForProviders,
|
|
@@ -4543,6 +4796,8 @@ export {
|
|
|
4543
4796
|
registerClioApiProviders,
|
|
4544
4797
|
resolveProviderKnowledgeBaseRoots,
|
|
4545
4798
|
loadPluginRuntimes,
|
|
4799
|
+
readTargetModelSnapshot,
|
|
4800
|
+
recordTargetModelSnapshot,
|
|
4546
4801
|
FileKnowledgeBase,
|
|
4547
4802
|
isOrchestratorEligibleRuntime,
|
|
4548
4803
|
isDispatchEligibleRuntime,
|
|
@@ -4560,4 +4815,4 @@ export {
|
|
|
4560
4815
|
normalizeCostProvenance,
|
|
4561
4816
|
ProvidersDomainModule
|
|
4562
4817
|
};
|
|
4563
|
-
//# sourceMappingURL=chunk-
|
|
4818
|
+
//# sourceMappingURL=chunk-UEDMSP56.js.map
|