@iowarp/clio-coder 0.4.1 → 0.4.3
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 +127 -0
- package/CONTRIBUTING.md +142 -52
- package/README.md +434 -473
- package/SECURITY.md +2 -1
- package/dist/{acp-ZILU3AUO.js → acp-H2NGRPWO.js} +12 -12
- package/dist/{agents-HYWGBGQR.js → agents-TL5LLUQP.js} +56 -55
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-N3QT7CBO.js → auth-E5SW4HMS.js} +23 -21
- package/dist/builtins-IA7V7FUC.js +22 -0
- package/dist/{chunk-7RY5VZPH.js → chunk-2APPQIER.js} +8 -8
- package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
- package/dist/{chunk-JA5QWE4Z.js → chunk-2UG5F4C5.js} +1973 -1664
- package/dist/{chunk-5YHDIDBP.js → chunk-2UH2KFUP.js} +2 -2
- package/dist/{chunk-CTJ4RNAA.js → chunk-2VIKGWFZ.js} +2 -2
- package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
- package/dist/{chunk-GIZNH63R.js → chunk-35MSIRKH.js} +9 -4
- package/dist/chunk-3EBYEESD.js +314 -0
- package/dist/{chunk-J5LZHVIT.js → chunk-3M6DQK6S.js} +113 -35
- package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
- package/dist/{chunk-6FN3E6KX.js → chunk-4O6MANBS.js} +2 -2
- package/dist/chunk-4UVU7BJ5.js +39 -0
- package/dist/{chunk-VKRH2TCS.js → chunk-4WR7VSYB.js} +2 -2
- package/dist/{chunk-BBTJOK6Y.js → chunk-54CBCGIR.js} +5 -5
- package/dist/{chunk-AP73CFDC.js → chunk-5ICU3EUH.js} +2 -2
- package/dist/chunk-5MEZN6CB.js +1334 -0
- package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
- package/dist/{chunk-ABLSQ6JX.js → chunk-64I3JVYM.js} +8 -2
- package/dist/{chunk-AFKWHWXF.js → chunk-6PTFB5VS.js} +39 -22
- package/dist/{chunk-VN3SHNBN.js → chunk-7DICMOS6.js} +2 -2
- package/dist/chunk-7DRAWPTZ.js +360 -0
- package/dist/chunk-7E7I3WLS.js +3762 -0
- package/dist/{chunk-BJGUKIG4.js → chunk-7ZYNNDKC.js} +7 -7
- package/dist/{chunk-XKA2ICR3.js → chunk-AF4YM7Z4.js} +652 -252
- package/dist/{chunk-GVQJ5CCZ.js → chunk-AX2THNSA.js} +12 -12
- package/dist/{chunk-IG7BCQBA.js → chunk-B4OAX3SI.js} +65 -3
- package/dist/{chunk-TD3PGPQA.js → chunk-B4VEBZKF.js} +3 -3
- package/dist/{chunk-74YWRRU5.js → chunk-BEPZRGGU.js} +10 -10
- package/dist/{chunk-FEFIFZTL.js → chunk-CE5AX47J.js} +2 -2
- package/dist/{chunk-UAPGZHYC.js → chunk-DWUOQKRU.js} +25 -11
- package/dist/{chunk-THYWACCR.js → chunk-E3TPLWFX.js} +3 -3
- package/dist/{chunk-7EPLI7VL.js → chunk-EKCHAPYA.js} +2 -2
- package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
- package/dist/{chunk-PJJ6MY27.js → chunk-F5JHEYZM.js} +7 -7
- package/dist/{chunk-6CCS4G3W.js → chunk-FTMGRKEF.js} +3 -3
- package/dist/{chunk-SINK3QR6.js → chunk-G76U63X4.js} +17 -17
- package/dist/{chunk-EIMVLWB3.js → chunk-GHS5EBTQ.js} +64 -9
- package/dist/{chunk-QMXC4JB7.js → chunk-GI7YYQ3F.js} +187 -1419
- package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
- package/dist/{chunk-6HMJX2VU.js → chunk-GWZNEVM2.js} +44 -12
- package/dist/chunk-GYV6VZOC.js +26 -0
- package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
- package/dist/{chunk-UXN6JT4W.js → chunk-HEQY7ZFI.js} +3 -3
- package/dist/{chunk-7PWAODYW.js → chunk-I7XBWTYH.js} +2 -2
- package/dist/{chunk-GCSMB2KY.js → chunk-I7ZPNEJM.js} +145 -102
- package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
- package/dist/{chunk-QTFGO774.js → chunk-IGLP3ODT.js} +29 -16
- package/dist/chunk-IJNZMHLA.js +101 -0
- package/dist/{chunk-BDPT6GTK.js → chunk-INY6HTFL.js} +7 -7
- package/dist/{chunk-PBP4B7XR.js → chunk-IUE3Y34X.js} +2 -2
- package/dist/{chunk-6NJQITNH.js → chunk-IWT4SF4R.js} +6 -3
- package/dist/{chunk-R23Z6K6I.js → chunk-JDAY6FIL.js} +19 -19
- package/dist/chunk-JEQ3XTHC.js +42 -0
- package/dist/{chunk-FSP7CMNU.js → chunk-JGRC33J2.js} +50 -4
- package/dist/{chunk-TVH4ONAM.js → chunk-JKKCYP3C.js} +10 -10
- package/dist/{chunk-HJWWJ6IL.js → chunk-JSC3U7TI.js} +16 -4
- package/dist/{chunk-C537JADH.js → chunk-KK4JZPBQ.js} +19 -141
- package/dist/{chunk-K6BF4U2H.js → chunk-KKOJXO6R.js} +62 -14
- package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
- package/dist/{chunk-6DWBAZ5U.js → chunk-L47TF46W.js} +5 -7
- package/dist/{chunk-HUAS7ITX.js → chunk-LDJG7DW3.js} +91 -42
- package/dist/{chunk-CDNVLKUX.js → chunk-LLDJM5XK.js} +13 -7
- package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
- package/dist/{chunk-Y4CAGMM6.js → chunk-MNJGS2IN.js} +5 -6
- package/dist/{chunk-VKFQTNDV.js → chunk-MUW2BDDH.js} +4 -4
- package/dist/{chunk-E67WX76H.js → chunk-MWUZBSAQ.js} +104 -152
- package/dist/{chunk-OJTRZGR3.js → chunk-N2Z7HLVY.js} +21 -21
- package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
- package/dist/{chunk-FYUN5KZ3.js → chunk-NIQJ66N4.js} +21 -21
- package/dist/{chunk-U2WB7TZS.js → chunk-NMJXSHBJ.js} +97 -85
- package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
- package/dist/{chunk-VEGN6WIQ.js → chunk-O5CVSAG5.js} +3 -3
- package/dist/{chunk-MOPSG2X7.js → chunk-OML5D5V5.js} +8 -8
- package/dist/{chunk-2VG7KLYV.js → chunk-PAJQJ7BS.js} +5816 -3255
- package/dist/{chunk-ZW55JB7N.js → chunk-PUVDKJ2Y.js} +2 -2
- package/dist/{chunk-BTGG6BG2.js → chunk-QWGDJJYJ.js} +158 -19
- package/dist/chunk-R6Q67RJH.js +134 -0
- package/dist/{chunk-ZJLUDYFY.js → chunk-RRNP2ANY.js} +6 -6
- package/dist/{chunk-PVAMAVBB.js → chunk-RSJ25QSL.js} +102 -2
- package/dist/{chunk-NLFAQR7Z.js → chunk-S66XZJOF.js} +3 -23
- package/dist/chunk-SKHCAU7K.js +385 -0
- package/dist/chunk-SZAA6XDG.js +30 -0
- package/dist/{chunk-J4HBWF6Y.js → chunk-TM6LQDI3.js} +131 -28
- package/dist/chunk-UOIZ7DA4.js +41 -0
- package/dist/{chunk-MA3H6DM5.js → chunk-UPZU6GE4.js} +25 -3
- package/dist/{chunk-BWW4HLO4.js → chunk-UXCU4E3T.js} +8 -6
- package/dist/{chunk-N5UK64DP.js → chunk-V2ANDPVT.js} +4 -4
- package/dist/{chunk-AK5XEFVZ.js → chunk-VA5FNYMT.js} +26 -13
- package/dist/{chunk-6VC4OV3Z.js → chunk-VIA6RFQZ.js} +3 -11
- package/dist/{chunk-ZAZB4JMW.js → chunk-VKPAQYEB.js} +27 -8
- package/dist/{chunk-QKIFBZKT.js → chunk-VW6DOEDG.js} +497 -81
- package/dist/{chunk-SCYB3HA4.js → chunk-W6RRQCPQ.js} +63 -19
- package/dist/{chunk-2NM363SV.js → chunk-WBKFA554.js} +10 -10
- package/dist/{chunk-R32CLGZ6.js → chunk-WCXUNS7U.js} +82 -21
- package/dist/{chunk-GPPB3JBE.js → chunk-WRBAGUNF.js} +3 -3
- package/dist/{chunk-IXJT6DCX.js → chunk-XIVNBFZS.js} +85 -30
- package/dist/{chunk-UEDMSP56.js → chunk-XPWWI35G.js} +417 -201
- package/dist/chunk-XRZT5WY5.js +47 -0
- package/dist/{chunk-3QSOM6PA.js → chunk-Y3CBHOR6.js} +2 -2
- package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
- package/dist/{chunk-AKB4GYDL.js → chunk-YQWYVTMC.js} +5 -5
- package/dist/{chunk-6I5ILFOF.js → chunk-ZA4VCIGV.js} +3 -3
- package/dist/{chunk-7OBGU7UB.js → chunk-ZDN3Y73Y.js} +12 -18
- package/dist/{chunk-3I5NY75V.js → chunk-ZWPRK62N.js} +8 -5
- package/dist/cli/index.js +41 -39
- package/dist/{clio-IT3G3VQH.js → clio-CMMK4KRR.js} +9 -9
- package/dist/{code-nav-RK6S7F6E.js → code-nav-MDZNQS33.js} +89 -21
- package/dist/{components-UBWCQSRW.js → components-UCUQ4QXW.js} +4 -4
- package/dist/{config-3QZRWZJF.js → config-SVM5P5YI.js} +131 -84
- package/dist/{configure-FL7Y3KJF.js → configure-LE3IK2TJ.js} +28 -26
- package/dist/{context-5HE7ODYK.js → context-2OHRKS42.js} +69 -64
- package/dist/{context-KYQFRVDC.js → context-E3VC7RX5.js} +15 -11
- package/dist/{context-XNHL75JV.js → context-VNCR7KAG.js} +93 -65
- package/dist/{context-clear-N545L53A.js → context-clear-BW4O37TG.js} +64 -60
- package/dist/context-map-COB37XXN.js +505 -0
- package/dist/{context-working-set-QHKXSV2F.js → context-working-set-VDS25HXZ.js} +19 -18
- package/dist/{dispatch-runner-RGIE5PCT.js → dispatch-runner-5AHT53RF.js} +93 -82
- package/dist/{docs-5NAF6AU7.js → docs-PD3EXDKU.js} +21 -20
- package/dist/{doctor-ZGPEGHIP.js → doctor-WNNVO6FY.js} +48 -47
- package/dist/{eval-GXLL44RD.js → eval-7G7SGAYO.js} +287 -115
- package/dist/{eval-inventory-HBWSWQOK.js → eval-inventory-Y6QRFOH5.js} +4 -4
- package/dist/{evidence-HWLBRH3Q.js → evidence-VD6736FQ.js} +67 -64
- package/dist/{evolve-FTZBMNVW.js → evolve-AL3NGVRL.js} +65 -62
- package/dist/{extensions-VHRBEID7.js → extensions-MOVJ32NM.js} +9 -7
- package/dist/{fleet-CKZHJWZJ.js → fleet-QZHUMAGI.js} +114 -111
- package/dist/{fleet-commands-EXDXBMV6.js → fleet-commands-BAYT5FJZ.js} +10 -10
- package/dist/{fleet-decisions-OTHB6KRL.js → fleet-decisions-IREVMRU4.js} +7 -6
- package/dist/{fleet-graph-YTEZUCUT.js → fleet-graph-YCTT3HTI.js} +22 -19
- package/dist/{fleet-inspect-SS6YMDCK.js → fleet-inspect-QVJTDAVB.js} +58 -55
- package/dist/{fleet-preflight-PBY4VYOM.js → fleet-preflight-25QAFPK4.js} +4 -4
- package/dist/{fleet-validate-KMEM5L3S.js → fleet-validate-5O57AAJ7.js} +26 -23
- package/dist/{fleet-verify-QD5M7E7Q.js → fleet-verify-CPH2W2T6.js} +59 -56
- package/dist/{fleet-view-WAMJYNDT.js → fleet-view-SWBR3VGQ.js} +58 -55
- package/dist/{init-5XQRBOFV.js → init-J477LKZH.js} +82 -79
- package/dist/{interop-34TVO25M.js → interop-3FCM6XLG.js} +11 -11
- package/dist/{library-3QY6KF57.js → library-QUQEIUG6.js} +30 -27
- package/dist/{memory-L4UTIIIW.js → memory-SGGSEP65.js} +67 -64
- package/dist/{models-ZVX3QOWE.js → models-HEKUAXXK.js} +53 -46
- package/dist/{monitor-CEKVSYTS.js → monitor-HKU57TYQ.js} +63 -60
- package/dist/{orchestrator-77BAP6BC.js → orchestrator-VDFAEFAI.js} +1831 -1057
- package/dist/{panes-7STHOAUJ.js → panes-DN2SSFOH.js} +5 -5
- package/dist/{panes-SHAUIRXY.js → panes-TALGNPZT.js} +29 -14
- package/dist/{paths-L7LGY6RN.js → paths-NBMFAIEZ.js} +5 -5
- package/dist/reset-EAJFFJVB.js +344 -0
- package/dist/{resources-74GKTLSF.js → resources-OVKSEFVE.js} +29 -20
- package/dist/{run-HBAUJNNZ.js → run-7DP7ZF2J.js} +120 -115
- package/dist/{share-G3APVLVP.js → share-WML67FT3.js} +32 -27
- package/dist/{skills-35HHUKCR.js → skills-SG662R2K.js} +41 -31
- package/dist/{skills-eval-QN4HSHDC.js → skills-eval-VVZEUU46.js} +78 -77
- package/dist/{skills-inventory-J357J34F.js → skills-inventory-I2E23GET.js} +23 -20
- package/dist/{slash-commands-JZZCQA32.js → slash-commands-S7MBJDQK.js} +40 -36
- package/dist/{steer-XAVHJM22.js → steer-2LQOMCPB.js} +3 -3
- package/dist/{support-U7QOWY26.js → support-CC2UJBJ6.js} +6 -6
- package/dist/{targets-DSM6CY3M.js → targets-4QC3HIEW.js} +54 -54
- package/dist/{terminal-lease-JOPFUVEM.js → terminal-lease-TUHIJ6Y2.js} +5 -5
- package/dist/{tools-MKNWVPBH.js → tools-TFGJICCU.js} +10 -10
- package/dist/{trace-ECQ7TIYZ.js → trace-FXMXUZUF.js} +55 -7
- package/dist/uninstall-5PEVOE5B.js +408 -0
- package/dist/upgrade-M4WXY6KN.js +303 -0
- package/dist/{usage-X52N3IDJ.js → usage-N7ZNVLEM.js} +151 -104
- package/dist/{verifiers-EJTVVSMA.js → verifiers-DJTP4XX6.js} +15 -15
- package/dist/{verify-YJL6XET2.js → verify-RWE4PPEK.js} +9 -9
- package/dist/{web-fetch-MPIFL3LL.js → web-fetch-MPARV2K7.js} +2 -2
- package/dist/{wiki-generate-4NDZTQ4B.js → wiki-generate-C7IQOXSP.js} +89 -86
- package/dist/{with-panes-OBOBFIIR.js → with-panes-4GCGSL7J.js} +53 -257
- package/dist/worker/entry.js +90 -74
- package/docs/README.md +176 -81
- package/docs/{acp.md → architecture/acp.md} +36 -20
- package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
- package/docs/{architecture.md → architecture/architecture.md} +43 -22
- package/docs/{artifact-placement.md → architecture/artifact-placement.md} +27 -23
- package/docs/architecture/artifact-versions.md +90 -0
- package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
- package/docs/{context-engine.md → architecture/context-engine.md} +29 -25
- package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
- package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
- package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
- package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
- package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
- package/docs/{model-catalog.md → architecture/model-catalog.md} +61 -27
- package/docs/{observability.md → architecture/observability.md} +38 -14
- package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
- package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +57 -20
- package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +99 -25
- package/docs/{safety-model.md → architecture/safety-model.md} +35 -20
- package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
- package/docs/architecture/time-conventions.md +125 -0
- package/docs/{trace-store.md → architecture/trace-store.md} +13 -5
- package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
- package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
- package/docs/{built-in-agents.md → guide/built-in-agents.md} +65 -35
- package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +66 -61
- package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -297
- package/docs/guide/configuration-reference.md +1163 -0
- package/docs/{environment-variables.md → guide/environment-variables.md} +33 -28
- package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +6 -3
- package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
- package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +39 -43
- package/docs/{glossary.md → guide/glossary.md} +14 -11
- package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +81 -17
- package/docs/guide/panes-and-files.md +290 -0
- package/docs/{proactive-memory.md → guide/proactive-memory.md} +131 -107
- package/docs/{resource-library.md → guide/resource-library.md} +13 -4
- package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +25 -3
- package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
- package/docs/{troubleshooting.md → guide/troubleshooting.md} +9 -4
- package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +11 -11
- package/docs/{release-cut-checklist.md → history/release-cut-checklist.md} +29 -2
- package/docs/process/development-pipeline.md +152 -0
- package/docs/process/documentation-coverage.md +100 -0
- package/docs/process/documentation-guide.md +187 -0
- package/docs/{eval-runner.md → process/eval-runner.md} +108 -53
- package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
- package/docs/{evolution.md → process/evolution.md} +2 -2
- package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +11 -7
- package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
- package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
- package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
- package/evals/README.md +2 -2
- package/evals/behavioral-model.yaml +3 -2
- package/package.json +10 -8
- package/skills/README.md +52 -41
- package/skills/coding/ast-grep/SKILL.md +102 -31
- package/skills/coding/ast-grep/evals.md +26 -0
- package/skills/coding/coding-standards/SKILL.md +41 -6
- package/skills/coding/coding-standards/evals.md +23 -0
- package/skills/coding/prototype/SKILL.md +88 -29
- package/skills/coding/prototype/evals.md +19 -0
- package/skills/coding/tdd/SKILL.md +81 -54
- package/skills/coding/tdd/evals.md +20 -0
- package/skills/context/context-handoff/SKILL.md +44 -3
- package/skills/context/context-handoff/evals.md +44 -0
- package/skills/context/context-prime/SKILL.md +46 -16
- package/skills/context/context-prime/evals.md +45 -0
- package/skills/git/branch-closeout/SKILL.md +132 -0
- package/skills/git/branch-closeout/evals.md +133 -0
- package/skills/git/branch-closeout/references/closeout-checklist.md +81 -0
- package/skills/git/file-ticket/SKILL.md +78 -64
- package/skills/git/file-ticket/assets/issue-template.md +22 -0
- package/skills/git/file-ticket/evals.md +31 -26
- package/skills/git/file-ticket/references/issue-discovery.md +49 -0
- package/skills/git/fix-issue/SKILL.md +88 -65
- package/skills/git/fix-issue/evals.md +35 -31
- package/skills/git/fix-issue/references/diagnosis-and-rca.md +46 -0
- package/skills/git/resolve-merge-conflicts/SKILL.md +101 -52
- package/skills/git/resolve-merge-conflicts/evals.md +52 -25
- package/skills/git/resolve-merge-conflicts/references/conflict-matrix.md +126 -0
- package/skills/git/ship/SKILL.md +103 -67
- package/skills/git/ship/assets/pr-template.md +21 -0
- package/skills/git/ship/evals.md +44 -28
- package/skills/git/ship/references/remote-and-branch-policy.md +62 -0
- package/skills/git/worktree-create/SKILL.md +80 -50
- package/skills/git/worktree-create/evals.md +40 -33
- package/skills/git/worktree-create/references/worktree-setup.md +62 -66
- package/skills/git/worktree-merge/SKILL.md +112 -65
- package/skills/git/worktree-merge/evals.md +42 -34
- package/skills/git/worktree-merge/references/merge-strategies.md +52 -0
- package/skills/meta/clio-coder-dev/SKILL.md +9 -5
- package/skills/meta/clio-coder-dev/evals.md +3 -2
- package/skills/meta/clio-coder-test/SKILL.md +102 -95
- package/skills/meta/clio-coder-test/evals.md +9 -4
- package/skills/meta/clio-coder-test/references/harness.md +100 -124
- package/skills/meta/clio-coder-test/references/test-map.md +77 -50
- package/skills/meta/credentials/SKILL.md +2 -2
- package/skills/meta/find-skills/SKILL.md +2 -2
- package/skills/meta/herdr/SKILL.md +2 -2
- package/skills/meta/skill-craft/SKILL.md +22 -16
- package/skills/planning/archify/SKILL.md +196 -0
- package/skills/planning/archify/evals.md +65 -0
- package/skills/planning/architecture/SKILL.md +62 -13
- package/skills/planning/architecture/evals.md +65 -0
- package/skills/planning/backlog/SKILL.md +131 -15
- package/skills/planning/backlog/evals.md +142 -0
- package/skills/planning/prd/SKILL.md +47 -7
- package/skills/planning/prd/evals.md +54 -0
- package/skills/planning/product-intent/SKILL.md +58 -3
- package/skills/planning/product-intent/evals.md +70 -0
- package/skills/planning/tech-spec/SKILL.md +54 -3
- package/skills/planning/tech-spec/evals.md +73 -0
- package/skills/registry.yaml +70 -62
- package/skills/remote.yaml +13 -0
- package/skills/research/arxiv-literature/SKILL.md +77 -19
- package/skills/research/arxiv-literature/evals.md +50 -0
- package/skills/research/experiment-protocol/SKILL.md +21 -2
- package/skills/research/experiment-protocol/evals.md +23 -0
- package/skills/research/scientific-debugging/SKILL.md +24 -2
- package/skills/research/scientific-debugging/evals.md +18 -0
- package/skills/research/scientific-modernization/SKILL.md +27 -2
- package/skills/research/scientific-modernization/evals.md +27 -0
- package/skills/skill-marketplace.json +97 -62
- package/skills/workflow/cut-it/SKILL.md +66 -6
- package/skills/workflow/cut-it/evals.md +101 -0
- package/skills/workflow/design-council/SKILL.md +118 -28
- package/skills/workflow/design-council/evals.md +161 -0
- package/skills/workflow/grill-me/SKILL.md +87 -11
- package/skills/workflow/grill-me/evals.md +153 -0
- package/skills/workflow/workflow-distiller/SKILL.md +77 -18
- package/skills/workflow/workflow-distiller/evals.md +118 -0
- package/src/cli/args.ts +2 -2
- package/src/cli/bootstrap-generate.ts +1 -1
- package/src/cli/config-inspect.ts +65 -12
- package/src/cli/configure-interop.ts +105 -13
- package/src/cli/configure-oauth.ts +57 -0
- package/src/cli/configure-onboarding.ts +980 -0
- package/src/cli/configure-target.ts +594 -0
- package/src/cli/configure.ts +1082 -532
- package/src/cli/context-map.ts +114 -0
- package/src/cli/context.ts +4 -0
- package/src/cli/docs.ts +22 -14
- package/src/cli/doctor-naming.ts +5 -5
- package/src/cli/doctor-toolchain.ts +3 -3
- package/src/cli/eval.ts +1 -2
- package/src/cli/extensions.ts +2 -1
- package/src/cli/fleet.ts +1 -1
- package/src/cli/index.ts +3 -1
- package/src/cli/internal-dispatch.ts +3 -4
- package/src/cli/lifecycle-presenter.ts +436 -0
- package/src/cli/models.ts +10 -2
- package/src/cli/modes/print.ts +5 -1
- package/src/cli/panes.ts +19 -5
- package/src/cli/reset.ts +228 -106
- package/src/cli/run.ts +9 -4
- package/src/cli/select.ts +664 -0
- package/src/cli/share.ts +5 -1
- package/src/cli/skills-eval.ts +3 -3
- package/src/cli/skills.ts +9 -2
- package/src/cli/targets.ts +5 -6
- package/src/cli/trace.ts +55 -4
- package/src/cli/uninstall.ts +233 -165
- package/src/cli/upgrade.ts +204 -149
- package/src/cli/usage.ts +86 -27
- package/src/cli/validate-model.ts +3 -3
- package/src/cli/wiki-generate.ts +1 -1
- package/src/core/artifact-paths.ts +1 -1
- package/src/core/bash-exec.ts +131 -86
- package/src/core/bus-events.ts +51 -6
- package/src/core/config.ts +61 -1
- package/src/core/defaults.ts +7 -4
- package/src/core/dispatch-outcome.ts +16 -0
- package/src/core/external-diagnostic.ts +44 -0
- package/src/core/gateway-routing.ts +157 -0
- package/src/core/guardrails.ts +10 -49
- package/src/core/prompt-hint.ts +9 -0
- package/src/core/safe-exec.ts +17 -2
- package/src/core/skill-activation.ts +89 -2
- package/src/domains/agents/builtins/architect.md +2 -3
- package/src/domains/agents/builtins/coder.md +3 -2
- package/src/domains/agents/builtins/debugger.md +2 -2
- package/src/domains/agents/builtins/documenter.md +2 -2
- package/src/domains/agents/builtins/git-master.md +1 -1
- package/src/domains/agents/builtins/oracle.md +1 -1
- package/src/domains/agents/builtins/provenance.md +1 -1
- package/src/domains/agents/builtins/researcher.md +1 -1
- package/src/domains/agents/builtins/scout.md +1 -1
- package/src/domains/agents/builtins/tester.md +2 -2
- package/src/domains/agents/builtins/verifier.md +2 -2
- package/src/domains/agents/builtins/wiki-writer.md +1 -1
- package/src/domains/agents/builtins/world-knowledge.md +31 -0
- package/src/domains/agents/catalog.ts +13 -15
- package/src/domains/agents/contract.ts +2 -0
- package/src/domains/agents/extension.ts +23 -1
- package/src/domains/agents/result-contract.ts +70 -0
- package/src/domains/config/keybindings.ts +8 -0
- package/src/domains/context/extension.ts +0 -3
- package/src/domains/context/wiki/map-seed.ts +589 -0
- package/src/domains/context/wiki/plan.ts +2 -2
- package/src/domains/context/working-set/path-index.ts +1 -0
- package/src/domains/dispatch/admission.ts +29 -0
- package/src/domains/dispatch/agent-candidates.ts +10 -0
- package/src/domains/dispatch/budget-envelope.ts +86 -1
- package/src/domains/dispatch/capability-match.ts +11 -0
- package/src/domains/dispatch/capacity-lease.ts +17 -0
- package/src/domains/dispatch/contract.ts +11 -1
- package/src/domains/dispatch/extension.ts +237 -49
- package/src/domains/dispatch/host-verification.ts +435 -39
- package/src/domains/dispatch/intent-requirements.ts +10 -0
- package/src/domains/dispatch/intent.ts +18 -1
- package/src/domains/dispatch/path-scope.ts +235 -24
- package/src/domains/dispatch/run-event-journal.ts +4 -15
- package/src/domains/dispatch/state.ts +2 -3
- package/src/domains/dispatch/transport.ts +45 -21
- package/src/domains/dispatch/types.ts +58 -3
- package/src/domains/dispatch/worker-model-metadata.ts +38 -0
- package/src/domains/eval/artifacts/store.ts +5 -0
- package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
- package/src/domains/eval/metrics/token-stream.ts +201 -31
- package/src/domains/eval/metrics/tracked.ts +40 -4
- package/src/domains/eval/runners/clio-run.ts +5 -2
- package/src/domains/eval/schema/suite.ts +28 -0
- package/src/domains/eval/schema/verdict.ts +2 -2
- package/src/domains/eval/store.ts +8 -1
- package/src/domains/eval/suites/resolve.ts +13 -1
- package/src/domains/eval/suites/run.ts +24 -3
- package/src/domains/evidence/trust-status.ts +10 -1
- package/src/domains/extensions/contract.ts +15 -1
- package/src/domains/extensions/discovery.ts +238 -41
- package/src/domains/extensions/extension.ts +105 -6
- package/src/domains/extensions/index.ts +24 -0
- package/src/domains/extensions/integrity.ts +189 -0
- package/src/domains/extensions/manager.ts +17 -1
- package/src/domains/extensions/resource-path.ts +27 -0
- package/src/domains/extensions/resources.ts +18 -38
- package/src/domains/extensions/snapshot-store.ts +39 -0
- package/src/domains/extensions/snapshot.ts +180 -0
- package/src/domains/extensions/state.ts +385 -57
- package/src/domains/extensions/types.ts +118 -1
- package/src/domains/interop/registry.ts +6 -2
- package/src/domains/interop/types.ts +4 -0
- package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
- package/src/domains/lifecycle/migrations/index.ts +6 -0
- package/src/domains/lifecycle/naming-resources.ts +19 -4
- package/src/domains/lifecycle/naming-yazi.ts +10 -5
- package/src/domains/memory/task-memory-policy.ts +70 -26
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- package/src/domains/middleware/contract.ts +26 -0
- package/src/domains/middleware/extension.ts +24 -24
- package/src/domains/middleware/hook-receipts.ts +27 -4
- package/src/domains/middleware/hooks-io.ts +65 -32
- package/src/domains/middleware/hooks.ts +64 -0
- package/src/domains/middleware/index.ts +28 -5
- package/src/domains/middleware/marketplace-offer.ts +3 -35
- package/src/domains/middleware/memory-intervention.ts +127 -32
- package/src/domains/middleware/memory-step-endpoint.ts +3 -2
- package/src/domains/middleware/registrations.ts +326 -0
- package/src/domains/middleware/runtime.ts +28 -0
- package/src/domains/middleware/skills-reminder.ts +31 -2
- package/src/domains/middleware/snapshot.ts +20 -7
- package/src/domains/mux/contract.ts +38 -0
- package/src/domains/mux/detect.ts +6 -13
- package/src/domains/mux/index.ts +1 -1
- package/src/domains/mux/operations.ts +44 -5
- package/src/domains/mux/yazi/assets/yazi.toml +2 -2
- package/src/domains/mux/yazi/session.ts +53 -4
- package/src/domains/mux/yazi/theme.ts +117 -17
- package/src/domains/observability/compaction-usage.ts +118 -0
- package/src/domains/observability/contract.ts +10 -11
- package/src/domains/observability/cost.ts +1 -1
- package/src/domains/observability/extension.ts +17 -4
- package/src/domains/observability/out-of-turn-usage.ts +52 -21
- package/src/domains/observability/projection.ts +14 -90
- package/src/domains/observability/trace-store.ts +43 -7
- package/src/domains/prompts/compiler.ts +73 -53
- package/src/domains/prompts/contract.ts +15 -3
- package/src/domains/prompts/extension.ts +97 -9
- package/src/domains/prompts/fragments/identity/clio-worker.md +1 -3
- package/src/domains/prompts/fragments/identity/clio.md +6 -12
- package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
- package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
- package/src/domains/prompts/fragments/operating/contract.md +7 -15
- package/src/domains/prompts/fragments/operating/delegation.md +32 -34
- package/src/domains/prompts/fragments/operating/skills.md +10 -24
- package/src/domains/prompts/fragments/operating/worker.md +1 -8
- package/src/domains/providers/contract.ts +4 -1
- package/src/domains/providers/extension.ts +40 -9
- package/src/domains/providers/index.ts +1 -1
- package/src/domains/providers/model-capabilities.ts +9 -0
- package/src/domains/providers/model-discovery.ts +2 -0
- package/src/domains/providers/model-runtime-capabilities.ts +99 -25
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +699 -114
- package/src/domains/providers/runtime-resolution.ts +31 -0
- package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
- package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
- package/src/domains/providers/runtimes/common/probe-helpers.ts +7 -2
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
- package/src/domains/providers/runtimes/protocol/litellm.ts +119 -29
- package/src/domains/providers/support.ts +11 -5
- package/src/domains/providers/target-model-cache.ts +25 -2
- package/src/domains/providers/types/capability-flags.ts +2 -0
- package/src/domains/providers/types/cost-provenance.ts +19 -0
- package/src/domains/providers/types/local-model-quirks.ts +85 -37
- package/src/domains/providers/types/runtime-descriptor.ts +20 -1
- package/src/domains/providers/types/target-descriptor.ts +19 -0
- package/src/domains/resources/index.ts +3 -0
- package/src/domains/resources/skills/install.ts +72 -7
- package/src/domains/resources/skills/loader.ts +23 -19
- package/src/domains/resources/skills/marketplace.ts +63 -11
- package/src/domains/safety/autonomy.ts +15 -0
- package/src/domains/safety/call-target.ts +1 -1
- package/src/domains/safety/index.ts +1 -0
- package/src/domains/safety/loop-detector.ts +7 -4
- package/src/domains/safety/path-policy.ts +1 -1
- package/src/domains/safety/policy-engine.ts +34 -11
- package/src/domains/safety/protected-artifacts.ts +191 -88
- package/src/domains/safety/run-effects.ts +2 -22
- package/src/domains/safety/skill-authority.ts +55 -0
- package/src/domains/session/compaction/compact.ts +72 -22
- package/src/domains/session/entries.ts +6 -0
- package/src/domains/session/task-board.ts +10 -9
- package/src/domains/session/usage.ts +3 -3
- package/src/domains/share/archive.ts +164 -7
- package/src/engine/acp/server.ts +62 -9
- package/src/engine/agent.ts +13 -3
- package/src/engine/ai.ts +26 -8
- package/src/engine/antigravity/subprocess-runtime.ts +386 -120
- package/src/engine/api-registry.ts +3 -0
- package/src/engine/apis/llamacpp-residency.ts +3 -4
- package/src/engine/apis/lmstudio.ts +3 -3
- package/src/engine/apis/ollama-native.ts +6 -6
- package/src/engine/apis/openai-completions.ts +145 -39
- package/src/engine/apis/output-budget.ts +8 -18
- package/src/engine/apis/residency.ts +8 -27
- package/src/engine/external-subprocess.ts +114 -6
- package/src/engine/gemma-channel-filter.ts +19 -0
- package/src/engine/loop-guard.ts +92 -12
- package/src/engine/worker-runtime.ts +40 -11
- package/src/engine/worker-tools.ts +3 -1
- package/src/entry/background-model-metadata.ts +18 -0
- package/src/entry/compaction-prompt.ts +57 -0
- package/src/entry/extension-hook-sources.ts +28 -0
- package/src/entry/extension-reload.ts +309 -0
- package/src/entry/orchestrator.ts +464 -251
- package/src/entry/task-memory-lifecycle.ts +35 -0
- package/src/interactive/application-controller.ts +2 -1
- package/src/interactive/bus-notices.ts +8 -1
- package/src/interactive/chat-loop-messages.ts +16 -17
- package/src/interactive/chat-loop.ts +75 -3
- package/src/interactive/chat-panel.ts +36 -13
- package/src/interactive/chat-renderer.ts +72 -7
- package/src/interactive/cost-overlay.ts +26 -2
- package/src/interactive/dispatch-board.ts +6 -11
- package/src/interactive/footer/widgets.ts +13 -0
- package/src/interactive/interactive-application.ts +39 -4
- package/src/interactive/interactive-input-runtime.ts +4 -0
- package/src/interactive/interactive-presentation.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +4 -1
- package/src/interactive/overlays/extensions.ts +9 -1
- package/src/interactive/overlays/help-reference.ts +13 -0
- package/src/interactive/overlays/settings.ts +27 -16
- package/src/interactive/panes-runtime.ts +111 -35
- package/src/interactive/prompt-cache-identity.ts +88 -0
- package/src/interactive/renderers/worker-entry.ts +32 -0
- package/src/interactive/slash-commands.ts +153 -20
- package/src/interactive/stream-pacing-policy.ts +0 -23
- package/src/interactive/theme/labels.ts +19 -13
- package/src/interactive/turn-context.ts +39 -20
- package/src/interactive/turn-recovery.ts +8 -0
- package/src/interactive/turn-runtime.ts +27 -11
- package/src/interactive/turn-state.ts +7 -0
- package/src/interactive/worker-receipts.ts +1 -0
- package/src/interactive/worker-stream.ts +6 -1
- package/src/interactive/yazi-bridge.ts +60 -6
- package/src/tools/agent-tools.ts +30 -1
- package/src/tools/artifact.ts +2 -2
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/bootstrap.ts +4 -0
- package/src/tools/builtin-tool-catalog.ts +52 -22
- package/src/tools/codewiki/code-nav-surface.ts +6 -0
- package/src/tools/codewiki/code-nav.ts +99 -13
- package/src/tools/context/docs-engine.ts +20 -7
- package/src/tools/context/index.ts +59 -21
- package/src/tools/core-bootstrap.ts +28 -6
- package/src/tools/credential-present.ts +1 -2
- package/src/tools/dispatch-arguments.ts +6 -1
- package/src/tools/dispatch-event-text.ts +10 -0
- package/src/tools/dispatch-plan.ts +49 -4
- package/src/tools/dispatch-run-events.ts +1 -1
- package/src/tools/dispatch-runner.ts +12 -0
- package/src/tools/dispatch-schema.ts +338 -0
- package/src/tools/dispatch-types.ts +3 -0
- package/src/tools/dispatch.ts +9 -254
- package/src/tools/ledger.ts +3 -5
- package/src/tools/monitor-surface.ts +5 -13
- package/src/tools/observation.ts +4 -5
- package/src/tools/panes-surface.ts +4 -11
- package/src/tools/panes.ts +4 -2
- package/src/tools/policy.ts +15 -2
- package/src/tools/read.ts +5 -6
- package/src/tools/registry.ts +41 -12
- package/src/tools/result-shaping.ts +18 -14
- package/src/tools/steer-surface.ts +1 -1
- package/src/tools/tasks.ts +1 -1
- package/src/tools/truncate.ts +6 -5
- package/src/tools/verify/surface.ts +6 -12
- package/src/tools/web-fetch-surface.ts +1 -3
- package/src/tools/worker-evidence.ts +3 -1
- package/src/worker/spec-contract.ts +4 -0
- package/dist/builtins-UJLMOVOV.js +0 -17
- package/dist/chunk-5QIAJV2D.js +0 -48
- package/dist/chunk-JZWT5J3Y.js +0 -814
- package/dist/chunk-K7VKOLQQ.js +0 -15
- package/dist/chunk-PMZCIOCJ.js +0 -25
- package/dist/chunk-SUW5DORT.js +0 -819
- package/dist/chunk-UOV2BYIW.js +0 -107
- package/dist/chunk-WR6U3OVP.js +0 -45
- package/dist/chunk-Y45G3AXC.js +0 -1558
- package/dist/reset-EOLM7GVE.js +0 -230
- package/dist/uninstall-N34PCTGJ.js +0 -331
- package/dist/upgrade-H7TOM7YL.js +0 -323
- package/docs/artifact-versions.md +0 -67
- package/docs/development-pipeline.md +0 -121
- package/docs/documentation-coverage.md +0 -46
- package/docs/documentation-guide.md +0 -167
- package/docs/time-conventions.md +0 -101
|
@@ -3,65 +3,62 @@ import {
|
|
|
3
3
|
createSentinelStripper,
|
|
4
4
|
stripTokenizerSentinels
|
|
5
5
|
} from "./chunk-CFGTUFWB.js";
|
|
6
|
-
import {
|
|
7
|
-
credentialsPresent
|
|
8
|
-
} from "./chunk-72GZI5EV.js";
|
|
9
6
|
import {
|
|
10
7
|
ceilChars,
|
|
11
8
|
estimateAgentMessageTokens,
|
|
12
9
|
toolSchemaChars
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import {
|
|
15
|
-
getSharedBus
|
|
16
|
-
} from "./chunk-PMZVFWSR.js";
|
|
10
|
+
} from "./chunk-NZMNUPZZ.js";
|
|
17
11
|
import {
|
|
18
|
-
|
|
19
|
-
} from "./chunk-
|
|
12
|
+
credentialsPresent
|
|
13
|
+
} from "./chunk-2JH2WHGE.js";
|
|
20
14
|
import {
|
|
21
15
|
readSettings
|
|
22
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-GHS5EBTQ.js";
|
|
23
17
|
import {
|
|
24
18
|
warnLegacyNaming
|
|
25
19
|
} from "./chunk-D7E7WCDF.js";
|
|
26
20
|
import {
|
|
27
|
-
|
|
28
|
-
} from "./chunk-
|
|
21
|
+
getSharedBus
|
|
22
|
+
} from "./chunk-PMZVFWSR.js";
|
|
23
|
+
import {
|
|
24
|
+
BusChannels
|
|
25
|
+
} from "./chunk-F4EKGO4N.js";
|
|
29
26
|
import {
|
|
30
27
|
CLIO_CONTEXT_WINDOW_WARN_BELOW,
|
|
31
28
|
CLIO_MIN_CONTEXT_WINDOW,
|
|
32
29
|
CLIO_MIN_MAX_OUTPUT_TOKENS,
|
|
30
|
+
EMPTY_CAPABILITIES,
|
|
31
|
+
VALID_THINKING_LEVELS,
|
|
32
|
+
availableThinkingLevels,
|
|
33
33
|
extractLocalModelQuirks,
|
|
34
|
+
inferLocalModelFamily,
|
|
35
|
+
isHarmonyModelId,
|
|
34
36
|
listLmStudioModels,
|
|
35
37
|
lmStudioReasoningEffort,
|
|
36
38
|
lmStudioRootUrl,
|
|
37
39
|
registerBuiltinRuntimes,
|
|
38
40
|
requestLmStudioJson,
|
|
39
41
|
resolveLmStudioInstance
|
|
40
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-VW6DOEDG.js";
|
|
43
|
+
import {
|
|
44
|
+
sleep
|
|
45
|
+
} from "./chunk-EBY63B7G.js";
|
|
41
46
|
import {
|
|
42
47
|
listKnownModelsForRuntime
|
|
43
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-LLDJM5XK.js";
|
|
44
49
|
import {
|
|
45
50
|
authNotRequiredStatus,
|
|
46
51
|
openAuthStorage,
|
|
47
52
|
registerClioOAuthProviders,
|
|
48
53
|
resolveAuthTarget,
|
|
49
54
|
targetRequiresAuth
|
|
50
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-ID64D7PE.js";
|
|
51
56
|
import {
|
|
52
57
|
withStateFileLock
|
|
53
58
|
} from "./chunk-IKCO5N3L.js";
|
|
54
59
|
import {
|
|
55
60
|
require_dist
|
|
56
61
|
} from "./chunk-APJ265NV.js";
|
|
57
|
-
import {
|
|
58
|
-
clioCacheDir,
|
|
59
|
-
clioConfigDir,
|
|
60
|
-
clioStateDir,
|
|
61
|
-
clioStatePath,
|
|
62
|
-
resolveClioDirs,
|
|
63
|
-
stateRootRemoved
|
|
64
|
-
} from "./chunk-BYP5D4HI.js";
|
|
65
62
|
import {
|
|
66
63
|
safeResourceWrite
|
|
67
64
|
} from "./chunk-WEPFGWHJ.js";
|
|
@@ -70,17 +67,24 @@ import {
|
|
|
70
67
|
} from "./chunk-NUGM5KR6.js";
|
|
71
68
|
import {
|
|
72
69
|
capabilitiesFromCatalogModel,
|
|
73
|
-
catalogThinkingLevelsForRuntime,
|
|
74
70
|
getCatalogModelForRuntime,
|
|
75
71
|
mergeCapabilities,
|
|
76
72
|
resolveCostProvenance
|
|
77
|
-
} from "./chunk-
|
|
73
|
+
} from "./chunk-5OIVVPHF.js";
|
|
78
74
|
import {
|
|
79
75
|
activateExternalPluginApiBridge,
|
|
80
76
|
calculateEngineCost,
|
|
81
77
|
ensurePiAiRegistered,
|
|
82
78
|
registerEngineApiProvider
|
|
83
|
-
} from "./chunk-
|
|
79
|
+
} from "./chunk-YPC6ZR5L.js";
|
|
80
|
+
import {
|
|
81
|
+
clioCacheDir,
|
|
82
|
+
clioConfigDir,
|
|
83
|
+
clioStateDir,
|
|
84
|
+
clioStatePath,
|
|
85
|
+
resolveClioDirs,
|
|
86
|
+
stateRootRemoved
|
|
87
|
+
} from "./chunk-BYP5D4HI.js";
|
|
84
88
|
import {
|
|
85
89
|
__toESM,
|
|
86
90
|
init_esm_shims
|
|
@@ -430,7 +434,7 @@ function evictionNotice(facts, entry) {
|
|
|
430
434
|
facts,
|
|
431
435
|
"swap",
|
|
432
436
|
"warning",
|
|
433
|
-
`swapping resident '${entry.modelId}' for requested '${facts.keepModelId}' on '${facts.targetId}' (Clio did not load it; recorded transition instead of a silent unload; set
|
|
437
|
+
`swapping resident '${entry.modelId}' for requested '${facts.keepModelId}' on '${facts.targetId}' (Clio did not load it; recorded transition instead of a silent unload; set lifecycle: user-managed to forbid swaps).`,
|
|
434
438
|
{
|
|
435
439
|
...entry.sizeVramBytes !== void 0 ? { freedVramBytes: entry.sizeVramBytes } : {},
|
|
436
440
|
swappedOut: entry.modelId
|
|
@@ -733,16 +737,8 @@ async function reconcileResidency(adapter) {
|
|
|
733
737
|
}
|
|
734
738
|
return plan;
|
|
735
739
|
}
|
|
736
|
-
function
|
|
737
|
-
|
|
738
|
-
if (opt === "observe" || opt === "off" || opt === "0" || opt === "false" || opt === "user" || opt === "user-managed") {
|
|
739
|
-
return false;
|
|
740
|
-
}
|
|
741
|
-
return true;
|
|
742
|
-
}
|
|
743
|
-
function residencyManagedFor(lifecycle, env = process.env) {
|
|
744
|
-
if (lifecycle === "user-managed") return false;
|
|
745
|
-
return residencyManaged(env);
|
|
740
|
+
function residencyManagedFor(lifecycle) {
|
|
741
|
+
return lifecycle !== "user-managed";
|
|
746
742
|
}
|
|
747
743
|
|
|
748
744
|
// src/core/run-overrides.ts
|
|
@@ -790,97 +786,6 @@ async function withRunOverrides(overrides, fn) {
|
|
|
790
786
|
}
|
|
791
787
|
}
|
|
792
788
|
|
|
793
|
-
// src/domains/providers/types/capability-flags.ts
|
|
794
|
-
init_esm_shims();
|
|
795
|
-
|
|
796
|
-
// src/domains/providers/model-family.ts
|
|
797
|
-
init_esm_shims();
|
|
798
|
-
function normalizeModelIdForFamily(modelId) {
|
|
799
|
-
return (modelId ?? "").trim().toLowerCase().replace(/_/g, "-");
|
|
800
|
-
}
|
|
801
|
-
function isHarmonyModelId(modelId) {
|
|
802
|
-
return normalizeModelIdForFamily(modelId).includes("gpt-oss");
|
|
803
|
-
}
|
|
804
|
-
function inferLocalModelFamily(modelId) {
|
|
805
|
-
const normalized = normalizeModelIdForFamily(modelId);
|
|
806
|
-
if (normalized.length === 0) return "unknown";
|
|
807
|
-
if (normalized.includes("gpt-oss")) return "openai-gpt-oss";
|
|
808
|
-
if (normalized.includes("nemotron-cascade-2") || normalized.includes("nemotron-cascade2")) {
|
|
809
|
-
return "nemotron-cascade-2";
|
|
810
|
-
}
|
|
811
|
-
if (normalized.includes("nemotron-3-nano-omni") || normalized.includes("nemotron-nano-omni")) {
|
|
812
|
-
return "nemotron-3-nano-omni";
|
|
813
|
-
}
|
|
814
|
-
if (normalized.includes("qwen3")) return "qwen3";
|
|
815
|
-
if (normalized.includes("gemma-4") || normalized.includes("gemma4") || normalized.includes("gemopus")) {
|
|
816
|
-
return "gemma-4";
|
|
817
|
-
}
|
|
818
|
-
return "unknown";
|
|
819
|
-
}
|
|
820
|
-
|
|
821
|
-
// src/domains/providers/types/capability-flags.ts
|
|
822
|
-
var EMPTY_CAPABILITIES = {
|
|
823
|
-
chat: false,
|
|
824
|
-
tools: false,
|
|
825
|
-
reasoning: false,
|
|
826
|
-
vision: false,
|
|
827
|
-
audio: false,
|
|
828
|
-
embeddings: false,
|
|
829
|
-
rerank: false,
|
|
830
|
-
fim: false,
|
|
831
|
-
contextWindow: 0,
|
|
832
|
-
maxTokens: 0
|
|
833
|
-
};
|
|
834
|
-
var VALID_THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
|
|
835
|
-
var THINKING_LEVELS_WITHOUT_XHIGH = ["off", "minimal", "low", "medium", "high"];
|
|
836
|
-
var THINKING_LEVELS_OPENAI_5_1_MINI = ["off", "minimal", "low", "medium", "high"];
|
|
837
|
-
var THINKING_LEVELS_OPENAI_5_2_PLUS = [
|
|
838
|
-
"off",
|
|
839
|
-
"minimal",
|
|
840
|
-
"low",
|
|
841
|
-
"medium",
|
|
842
|
-
"high",
|
|
843
|
-
"xhigh"
|
|
844
|
-
];
|
|
845
|
-
var THINKING_LEVELS_OPENAI_5_6 = [...THINKING_LEVELS_OPENAI_5_2_PLUS, "max"];
|
|
846
|
-
var THINKING_LEVELS_HARMONY = ["low", "medium", "high"];
|
|
847
|
-
function normalizeModelId(modelId) {
|
|
848
|
-
if (!modelId) return void 0;
|
|
849
|
-
const trimmed = modelId.trim();
|
|
850
|
-
if (trimmed.length === 0) return void 0;
|
|
851
|
-
return trimmed.includes("/") ? trimmed.split("/").pop() ?? trimmed : trimmed;
|
|
852
|
-
}
|
|
853
|
-
function availableOpenAICodexThinkingLevels(modelId) {
|
|
854
|
-
const normalized = normalizeModelId(modelId);
|
|
855
|
-
if (!normalized) return VALID_THINKING_LEVELS;
|
|
856
|
-
if (normalized === "gpt-5.1-codex-mini") return THINKING_LEVELS_OPENAI_5_1_MINI;
|
|
857
|
-
if (normalized.startsWith("gpt-5.2") || normalized.startsWith("gpt-5.3") || normalized.startsWith("gpt-5.4") || normalized.startsWith("gpt-5.5")) {
|
|
858
|
-
return THINKING_LEVELS_OPENAI_5_2_PLUS;
|
|
859
|
-
}
|
|
860
|
-
if (normalized.startsWith("gpt-5.6")) {
|
|
861
|
-
return THINKING_LEVELS_OPENAI_5_6;
|
|
862
|
-
}
|
|
863
|
-
return THINKING_LEVELS_WITHOUT_XHIGH;
|
|
864
|
-
}
|
|
865
|
-
function availableThinkingLevels(caps, options) {
|
|
866
|
-
if (!caps.reasoning) return ["off"];
|
|
867
|
-
if (caps.thinkingFormat === "harmony" || isHarmonyModelId(options?.modelId)) {
|
|
868
|
-
return THINKING_LEVELS_HARMONY;
|
|
869
|
-
}
|
|
870
|
-
const catalogLevels = options?.runtimeId && options.modelId ? catalogThinkingLevelsForRuntime(options.runtimeId, options.modelId) : void 0;
|
|
871
|
-
if (catalogLevels) {
|
|
872
|
-
if (!catalogLevels.includes("xhigh")) return catalogLevels.filter((level) => level !== "max");
|
|
873
|
-
return catalogLevels;
|
|
874
|
-
}
|
|
875
|
-
if (caps.thinkingFormat === "openai-codex" || options?.runtimeId === "openai-codex") {
|
|
876
|
-
return availableOpenAICodexThinkingLevels(options?.modelId);
|
|
877
|
-
}
|
|
878
|
-
if (caps.thinkingFormat === "anthropic-extended") {
|
|
879
|
-
return THINKING_LEVELS_WITHOUT_XHIGH;
|
|
880
|
-
}
|
|
881
|
-
return THINKING_LEVELS_WITHOUT_XHIGH;
|
|
882
|
-
}
|
|
883
|
-
|
|
884
789
|
// src/domains/providers/model-capabilities.ts
|
|
885
790
|
init_esm_shims();
|
|
886
791
|
function normalizedModelId(wireModelId) {
|
|
@@ -892,6 +797,12 @@ function applyModelCapabilityPatch(model, caps) {
|
|
|
892
797
|
if (typeof caps.contextWindow === "number") model.contextWindow = caps.contextWindow;
|
|
893
798
|
if (typeof caps.maxTokens === "number") model.maxTokens = caps.maxTokens;
|
|
894
799
|
if (typeof caps.reasoning === "boolean") model.reasoning = caps.reasoning;
|
|
800
|
+
if (model.clioCoder || caps.thinkingControlRuntime !== void 0) {
|
|
801
|
+
const metadata2 = { ...model.clioCoder };
|
|
802
|
+
delete metadata2.thinkingControlRuntime;
|
|
803
|
+
if (caps.thinkingControlRuntime !== void 0) metadata2.thinkingControlRuntime = caps.thinkingControlRuntime;
|
|
804
|
+
model.clioCoder = metadata2;
|
|
805
|
+
}
|
|
895
806
|
return model;
|
|
896
807
|
}
|
|
897
808
|
function applyReasoningResolution(caps, kbHit, detectedReasoning) {
|
|
@@ -1140,14 +1051,15 @@ function supportedBudgetLevels(baseLevels, quirks) {
|
|
|
1140
1051
|
function supportedEffortLevels(baseLevels, quirks, harmony) {
|
|
1141
1052
|
if (harmony) return HARMONY_LEVELS;
|
|
1142
1053
|
const efforts = quirks?.thinking?.effortByLevel;
|
|
1143
|
-
|
|
1054
|
+
const byLevelValues = (quirks?.chatTemplateKwargs ?? quirks?.thinking?.chatTemplateKwargs)?.byLevel?.values;
|
|
1055
|
+
if (!efforts && !byLevelValues) return baseLevels;
|
|
1144
1056
|
const out = [];
|
|
1145
1057
|
if (baseLevels.includes("off")) out.push("off");
|
|
1146
|
-
if (efforts
|
|
1147
|
-
if (efforts
|
|
1148
|
-
if (efforts
|
|
1149
|
-
if (efforts
|
|
1150
|
-
if (efforts
|
|
1058
|
+
if (efforts?.minimal !== void 0 || byLevelValues?.minimal !== void 0) out.push("minimal");
|
|
1059
|
+
if (efforts?.low !== void 0 || byLevelValues?.low !== void 0) out.push("low");
|
|
1060
|
+
if (efforts?.medium !== void 0 || byLevelValues?.medium !== void 0) out.push("medium");
|
|
1061
|
+
if (efforts?.high !== void 0 || byLevelValues?.high !== void 0) out.push("high");
|
|
1062
|
+
if (efforts?.xhigh !== void 0 || byLevelValues?.xhigh !== void 0) out.push("xhigh");
|
|
1151
1063
|
return out.length > 0 ? out : baseLevels;
|
|
1152
1064
|
}
|
|
1153
1065
|
function restrictThinkingLevelsByMechanism(levels, mechanism, quirks, options) {
|
|
@@ -1162,7 +1074,8 @@ function effectiveThinkingLevel(configured, available) {
|
|
|
1162
1074
|
const fallback = available[0] ?? "off";
|
|
1163
1075
|
if (!configured) return fallback;
|
|
1164
1076
|
if (available.includes(configured)) return configured;
|
|
1165
|
-
if (configured === "max" && available.includes("
|
|
1077
|
+
if ((configured === "max" || configured === "high" && !available.includes("high")) && available.includes("xhigh"))
|
|
1078
|
+
return "xhigh";
|
|
1166
1079
|
if ((configured === "high" || configured === "xhigh" || configured === "max") && available.includes("high")) {
|
|
1167
1080
|
return "high";
|
|
1168
1081
|
}
|
|
@@ -1283,12 +1196,45 @@ function resolveThinkingCapability(input, quirks, parser) {
|
|
|
1283
1196
|
budgetEnforcement
|
|
1284
1197
|
};
|
|
1285
1198
|
}
|
|
1286
|
-
var
|
|
1199
|
+
var REASONING_EFFORT_ONLY_RUNTIMES = /* @__PURE__ */ new Set(["lmstudio"]);
|
|
1287
1200
|
function onOffReasoningEffort(thinkingActive) {
|
|
1288
1201
|
return thinkingActive ? "low" : "none";
|
|
1289
1202
|
}
|
|
1290
|
-
function
|
|
1203
|
+
function resolveFamilyChatTemplateKwargs(quirks, effectiveLevel, configuredLevel) {
|
|
1204
|
+
const block = quirks?.chatTemplateKwargs ?? quirks?.thinking?.chatTemplateKwargs;
|
|
1205
|
+
if (!block) return void 0;
|
|
1206
|
+
const out = {};
|
|
1207
|
+
if (block.static) {
|
|
1208
|
+
for (const [k, v] of Object.entries(block.static)) {
|
|
1209
|
+
out[k] = v;
|
|
1210
|
+
}
|
|
1211
|
+
}
|
|
1212
|
+
if (block.byLevel) {
|
|
1213
|
+
const byLevel = block.byLevel;
|
|
1214
|
+
const val = byLevel.values[effectiveLevel] ?? byLevel.values[configuredLevel];
|
|
1215
|
+
if (val !== void 0) {
|
|
1216
|
+
out[byLevel.key] = val;
|
|
1217
|
+
}
|
|
1218
|
+
}
|
|
1219
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
1220
|
+
}
|
|
1221
|
+
function familyKwargsDeclaredUnsupported(quirks, runtimeId) {
|
|
1222
|
+
if (runtimeId !== "lmstudio") return false;
|
|
1223
|
+
const block = quirks?.chatTemplateKwargs ?? quirks?.thinking?.chatTemplateKwargs;
|
|
1224
|
+
return block?.lmstudio === "unsupported" || block?.byLevel?.lmstudio === "unsupported";
|
|
1225
|
+
}
|
|
1226
|
+
function resolveRequestCapability(thinking, parser, runtimeId, quirks) {
|
|
1291
1227
|
const request = { budgetEnforcement: thinking.budgetEnforcement };
|
|
1228
|
+
const effortOnly = REASONING_EFFORT_ONLY_RUNTIMES.has(runtimeId);
|
|
1229
|
+
const familyKwargs = resolveFamilyChatTemplateKwargs(quirks, thinking.effectiveLevel, thinking.configuredLevel);
|
|
1230
|
+
if (familyKwargs && effortOnly) {
|
|
1231
|
+
request.undeliverableChatTemplateKwargs = {
|
|
1232
|
+
keys: Object.keys(familyKwargs),
|
|
1233
|
+
declaredUnsupported: familyKwargsDeclaredUnsupported(quirks, runtimeId)
|
|
1234
|
+
};
|
|
1235
|
+
} else if (familyKwargs) {
|
|
1236
|
+
request.chatTemplateKwargs = { ...familyKwargs };
|
|
1237
|
+
}
|
|
1292
1238
|
if (thinking.mechanism === "effort-levels" && thinking.effort) {
|
|
1293
1239
|
request.reasoningEffort = thinking.effort;
|
|
1294
1240
|
}
|
|
@@ -1299,15 +1245,16 @@ function resolveRequestCapability(thinking, parser, runtimeId) {
|
|
|
1299
1245
|
request.budgetTokens = thinking.budgetTokens;
|
|
1300
1246
|
}
|
|
1301
1247
|
if (thinking.mechanism === "on-off" && thinking.chatTemplateKwargs) {
|
|
1302
|
-
request.chatTemplateKwargs = { ...thinking.chatTemplateKwargs };
|
|
1303
|
-
if (REASONING_EFFORT_ON_OFF_RUNTIMES.has(runtimeId)) {
|
|
1304
|
-
request.reasoningEffort = onOffReasoningEffort(thinking.thinkingActive);
|
|
1305
|
-
}
|
|
1248
|
+
request.chatTemplateKwargs = { ...request.chatTemplateKwargs ?? {}, ...thinking.chatTemplateKwargs };
|
|
1306
1249
|
}
|
|
1307
1250
|
if (parser === "harmony" && thinking.effort) {
|
|
1308
1251
|
request.reasoningEffort = thinking.effort;
|
|
1309
1252
|
request.chatTemplateKwargs = { ...request.chatTemplateKwargs ?? {}, reasoning_effort: thinking.effort };
|
|
1310
1253
|
}
|
|
1254
|
+
if (effortOnly && thinking.mechanism !== "none" && thinking.mechanism !== "always-on") {
|
|
1255
|
+
if (!thinking.thinkingActive) request.reasoningEffort = onOffReasoningEffort(false);
|
|
1256
|
+
else if (thinking.mechanism === "on-off") request.reasoningEffort = onOffReasoningEffort(true);
|
|
1257
|
+
}
|
|
1311
1258
|
return request;
|
|
1312
1259
|
}
|
|
1313
1260
|
function resolveModelRuntimeCapabilities(input) {
|
|
@@ -1323,7 +1270,12 @@ function resolveModelRuntimeCapabilities(input) {
|
|
|
1323
1270
|
family,
|
|
1324
1271
|
capabilities: input.capabilities,
|
|
1325
1272
|
thinking,
|
|
1326
|
-
request: resolveRequestCapability(
|
|
1273
|
+
request: resolveRequestCapability(
|
|
1274
|
+
thinking,
|
|
1275
|
+
parser,
|
|
1276
|
+
input.runtimeId === "litellm" ? input.capabilities.thinkingControlRuntime ?? input.runtimeId : input.runtimeId,
|
|
1277
|
+
quirks
|
|
1278
|
+
),
|
|
1327
1279
|
response: {
|
|
1328
1280
|
parser,
|
|
1329
1281
|
stripTokenizerSentinels: true
|
|
@@ -1389,6 +1341,7 @@ function thinkingFormatFromModelApi(api) {
|
|
|
1389
1341
|
}
|
|
1390
1342
|
function capabilitiesFromModel(model) {
|
|
1391
1343
|
const format = model.compat?.thinkingFormat ?? thinkingFormatFromModelApi(model.api);
|
|
1344
|
+
const controlRuntime = (model.clioCoder ?? model.clio)?.thinkingControlRuntime;
|
|
1392
1345
|
const caps = {
|
|
1393
1346
|
chat: true,
|
|
1394
1347
|
tools: true,
|
|
@@ -1399,7 +1352,8 @@ function capabilitiesFromModel(model) {
|
|
|
1399
1352
|
rerank: false,
|
|
1400
1353
|
fim: false,
|
|
1401
1354
|
contextWindow: model.contextWindow,
|
|
1402
|
-
maxTokens: model.maxTokens
|
|
1355
|
+
maxTokens: model.maxTokens,
|
|
1356
|
+
...controlRuntime ? { thinkingControlRuntime: controlRuntime } : {}
|
|
1403
1357
|
};
|
|
1404
1358
|
if (format === "qwen-chat-template" || format === "openrouter" || format === "zai" || format === "anthropic-extended" || format === "deepseek-r1" || format === "openai-codex" || format === "harmony") {
|
|
1405
1359
|
caps.thinkingFormat = format;
|
|
@@ -1471,6 +1425,21 @@ function normalizedModels(models) {
|
|
|
1471
1425
|
}
|
|
1472
1426
|
return out;
|
|
1473
1427
|
}
|
|
1428
|
+
function normalizedLabels(models, labels) {
|
|
1429
|
+
if (typeof labels !== "object" || labels === null || Array.isArray(labels)) return void 0;
|
|
1430
|
+
const source = labels;
|
|
1431
|
+
const out = {};
|
|
1432
|
+
for (const id of models) {
|
|
1433
|
+
const label = source[id];
|
|
1434
|
+
if (typeof label !== "string") continue;
|
|
1435
|
+
const trimmed = label.trim();
|
|
1436
|
+
if (trimmed.length === 0 || trimmed.length > TARGET_MODEL_CACHE_MAX_MODEL_ID_CHARS || /[\r\n\0]/u.test(trimmed)) {
|
|
1437
|
+
continue;
|
|
1438
|
+
}
|
|
1439
|
+
out[id] = trimmed;
|
|
1440
|
+
}
|
|
1441
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
1442
|
+
}
|
|
1474
1443
|
function parseSnapshot(value) {
|
|
1475
1444
|
if (typeof value !== "object" || value === null || Array.isArray(value)) return null;
|
|
1476
1445
|
const row = value;
|
|
@@ -1482,7 +1451,7 @@ function parseSnapshot(value) {
|
|
|
1482
1451
|
if (typeof row.observedAt !== "string" || !Number.isFinite(Date.parse(row.observedAt))) return null;
|
|
1483
1452
|
const models = normalizedModels(row.models);
|
|
1484
1453
|
if (models.length !== row.models.length) return null;
|
|
1485
|
-
|
|
1454
|
+
const snapshot = {
|
|
1486
1455
|
version: TARGET_MODEL_CACHE_VERSION,
|
|
1487
1456
|
targetId: row.targetId,
|
|
1488
1457
|
runtimeId: row.runtimeId,
|
|
@@ -1490,6 +1459,9 @@ function parseSnapshot(value) {
|
|
|
1490
1459
|
models,
|
|
1491
1460
|
observedAt: row.observedAt
|
|
1492
1461
|
};
|
|
1462
|
+
const modelLabels = normalizedLabels(models, row.modelLabels);
|
|
1463
|
+
if (modelLabels !== void 0) snapshot.modelLabels = modelLabels;
|
|
1464
|
+
return snapshot;
|
|
1493
1465
|
}
|
|
1494
1466
|
function readTargetModelSnapshot(target, options = {}) {
|
|
1495
1467
|
const path = targetModelSnapshotPath(target.id, options.cacheDir);
|
|
@@ -1518,6 +1490,8 @@ function recordTargetModelSnapshot(target, models, options = {}) {
|
|
|
1518
1490
|
models: normalizedModels(models),
|
|
1519
1491
|
observedAt: new Date(options.nowMs ?? Date.now()).toISOString()
|
|
1520
1492
|
};
|
|
1493
|
+
const modelLabels = normalizedLabels(snapshot.models, options.modelLabels);
|
|
1494
|
+
if (modelLabels !== void 0) snapshot.modelLabels = modelLabels;
|
|
1521
1495
|
try {
|
|
1522
1496
|
safeResourceWrite(targetModelSnapshotPath(target.id, options.cacheDir), `${JSON.stringify(snapshot, null, 2)}
|
|
1523
1497
|
`, {
|
|
@@ -1591,6 +1565,7 @@ function modelCandidatesForStatus(status) {
|
|
|
1591
1565
|
const state = status.discoveredModelStates?.[trimmed];
|
|
1592
1566
|
out.push({
|
|
1593
1567
|
id: trimmed,
|
|
1568
|
+
...status.discoveredModelLabels?.[trimmed] ? { label: status.discoveredModelLabels[trimmed] } : {},
|
|
1594
1569
|
source,
|
|
1595
1570
|
...state ? { loadState: state.state } : {},
|
|
1596
1571
|
...state?.detail ? { loadStateDetail: state.detail } : {}
|
|
@@ -1821,6 +1796,20 @@ function appendThinkingDiagnostics(diagnostics, resolved, requested) {
|
|
|
1821
1796
|
const severity = thinking.noticeKind === "unsupported" || thinking.noticeKind === "always-on" || thinking.noticeKind === "ignored-on-off" ? "warning" : "info";
|
|
1822
1797
|
diagnostics.push(diagnostic(severity, `thinking-${thinking.noticeKind}`, thinking.notice));
|
|
1823
1798
|
}
|
|
1799
|
+
var CHAT_TEMPLATE_KWARGS_UNDELIVERABLE = "chat-template-kwargs-undeliverable";
|
|
1800
|
+
function appendChatTemplateKwargsDiagnostics(diagnostics, resolved) {
|
|
1801
|
+
const undeliverable = resolved.request.undeliverableChatTemplateKwargs;
|
|
1802
|
+
if (!undeliverable || undeliverable.keys.length === 0) return;
|
|
1803
|
+
const keys = undeliverable.keys.join(", ");
|
|
1804
|
+
const declared = undeliverable.declaredUnsupported ? "its family entry marks them unsupported there" : "its family entry does not say so";
|
|
1805
|
+
diagnostics.push(
|
|
1806
|
+
diagnostic(
|
|
1807
|
+
"warning",
|
|
1808
|
+
CHAT_TEMPLATE_KWARGS_UNDELIVERABLE,
|
|
1809
|
+
`chat-template kwargs ${keys} cannot reach ${resolved.runtimeId}, which ignores chat_template_kwargs; ${resolved.modelId} runs without them and ${declared}`
|
|
1810
|
+
)
|
|
1811
|
+
);
|
|
1812
|
+
}
|
|
1824
1813
|
function nonNegativeFiniteNumber(value) {
|
|
1825
1814
|
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : void 0;
|
|
1826
1815
|
}
|
|
@@ -1948,6 +1937,7 @@ function resolveRuntimeTarget(providers, input) {
|
|
|
1948
1937
|
const decisions = capabilityDecisions(runtime, capabilities);
|
|
1949
1938
|
appendCapabilityDiagnostics(diagnostics, input, capabilities, decisions, targetId);
|
|
1950
1939
|
appendThinkingDiagnostics(diagnostics, modelRuntime, requestedThinkingLevel);
|
|
1940
|
+
appendChatTemplateKwargsDiagnostics(diagnostics, modelRuntime);
|
|
1951
1941
|
if (hasError(diagnostics)) return { ok: false, diagnostics };
|
|
1952
1942
|
const resolved = {
|
|
1953
1943
|
targetId: target.id,
|
|
@@ -1987,6 +1977,7 @@ function modelHintPatch(target, model) {
|
|
|
1987
1977
|
function withoutStaleRuntimeDiagnostics(diagnostics, decisions) {
|
|
1988
1978
|
return diagnostics.filter((entry) => {
|
|
1989
1979
|
if (entry.code.startsWith("thinking-")) return false;
|
|
1980
|
+
if (entry.code === CHAT_TEMPLATE_KWARGS_UNDELIVERABLE) return false;
|
|
1990
1981
|
if (entry.code === "output-budget-unknown" && decisions.maxTokens > 0) return false;
|
|
1991
1982
|
if (entry.code === "tools-unsupported" && decisions.tools) return false;
|
|
1992
1983
|
return true;
|
|
@@ -2025,6 +2016,7 @@ function refineRuntimeTargetWithModelHints(target, model, knowledgeBase) {
|
|
|
2025
2016
|
const decisions = capabilityDecisions(target.runtime, capabilities);
|
|
2026
2017
|
const diagnostics = withoutStaleRuntimeDiagnostics(target.diagnostics, decisions);
|
|
2027
2018
|
appendThinkingDiagnostics(diagnostics, modelRuntime, target.requestedThinkingLevel);
|
|
2019
|
+
appendChatTemplateKwargsDiagnostics(diagnostics, modelRuntime);
|
|
2028
2020
|
return {
|
|
2029
2021
|
...target,
|
|
2030
2022
|
capabilities,
|
|
@@ -2152,6 +2144,15 @@ init_esm_shims();
|
|
|
2152
2144
|
function normalizeCostProvenance(value) {
|
|
2153
2145
|
return value ?? "unknown";
|
|
2154
2146
|
}
|
|
2147
|
+
var COST_PROVENANCE_VALUES = /* @__PURE__ */ new Set([
|
|
2148
|
+
"known",
|
|
2149
|
+
"known_free",
|
|
2150
|
+
"estimated",
|
|
2151
|
+
"unknown"
|
|
2152
|
+
]);
|
|
2153
|
+
function resolveCostProvenance2(value, fallback) {
|
|
2154
|
+
return typeof value === "string" && COST_PROVENANCE_VALUES.has(value) ? value : fallback;
|
|
2155
|
+
}
|
|
2155
2156
|
|
|
2156
2157
|
// src/domains/providers/index.ts
|
|
2157
2158
|
init_esm_shims();
|
|
@@ -2185,6 +2186,9 @@ function residencyTargetKey(runtimeId, baseUrl) {
|
|
|
2185
2186
|
// src/engine/gemma-channel-filter.ts
|
|
2186
2187
|
init_esm_shims();
|
|
2187
2188
|
import { createAssistantMessageEventStream } from "@earendil-works/pi-ai";
|
|
2189
|
+
function usesGemmaChannelMarkers(modelId) {
|
|
2190
|
+
return inferLocalModelFamily(modelId) === "gemma-4";
|
|
2191
|
+
}
|
|
2188
2192
|
var THOUGHT_START = /<\|channel>[^\n]*\n/;
|
|
2189
2193
|
var BARE_THOUGHT_START = /^\s*(?:thought|own[- ]?(?:thought|think))\s*\n/i;
|
|
2190
2194
|
var BARE_THOUGHT_ONLY = /^\s*(?:thought|own[- ]?(?:thought|think))\s*$/i;
|
|
@@ -2384,7 +2388,6 @@ var globalDefaultMaxOutputTokens = 0;
|
|
|
2384
2388
|
function setGlobalDefaultMaxOutputTokens(value) {
|
|
2385
2389
|
globalDefaultMaxOutputTokens = Number.isFinite(value) && value > 0 ? Math.floor(value) : 0;
|
|
2386
2390
|
}
|
|
2387
|
-
var LOCAL_TOOL_TURN_MAX_OUTPUT_TOKENS = CLIO_MIN_MAX_OUTPUT_TOKENS;
|
|
2388
2391
|
function resolveReservedOutputTokens(maxOutputTokens) {
|
|
2389
2392
|
const limit = typeof maxOutputTokens === "number" && Number.isFinite(maxOutputTokens) && maxOutputTokens > 0 ? maxOutputTokens : DEFAULT_MAX_OUTPUT_TOKENS;
|
|
2390
2393
|
return Math.min(limit, DEFAULT_MAX_OUTPUT_TOKENS);
|
|
@@ -2403,7 +2406,7 @@ function remainingContextMaxTokens(model, context, options, limits) {
|
|
|
2403
2406
|
const contextWindow = Math.min(configuredContextWindow, loadedContextWindow);
|
|
2404
2407
|
const budget = Number.isFinite(contextWindow) ? Math.max(1, contextWindow - inputTokens - safety) : Number.POSITIVE_INFINITY;
|
|
2405
2408
|
const modelLimit = model.maxTokens > 0 ? model.maxTokens : Number.POSITIVE_INFINITY;
|
|
2406
|
-
const defaultLimit = limits?.maxOutputTokens !== void 0 && limits.maxOutputTokens > 0 ? limits.maxOutputTokens : globalDefaultMaxOutputTokens > 0 ? globalDefaultMaxOutputTokens : modelLimit;
|
|
2409
|
+
const defaultLimit = limits?.maxOutputTokens !== void 0 && limits.maxOutputTokens > 0 ? limits.maxOutputTokens : globalDefaultMaxOutputTokens > 0 ? globalDefaultMaxOutputTokens : model.maxTokens > 0 ? modelLimit : DEFAULT_MAX_OUTPUT_TOKENS;
|
|
2407
2410
|
const requested = options?.maxTokens ?? defaultLimit;
|
|
2408
2411
|
const resolved = Math.min(requested, modelLimit, budget);
|
|
2409
2412
|
return Number.isFinite(resolved) ? resolved : DEFAULT_MAX_OUTPUT_TOKENS;
|
|
@@ -2441,15 +2444,15 @@ function mergeSamplingOverride(profile, override = runSamplingOverrides()) {
|
|
|
2441
2444
|
// src/engine/apis/ollama-native.ts
|
|
2442
2445
|
var REASONING_CHARS_PER_TOKEN = 4;
|
|
2443
2446
|
function clioQuirks(model) {
|
|
2444
|
-
return model.
|
|
2447
|
+
return model.clioCoder?.quirks;
|
|
2445
2448
|
}
|
|
2446
2449
|
function ollamaTargetId(model) {
|
|
2447
|
-
return model.
|
|
2450
|
+
return model.clioCoder?.targetId ?? model.provider;
|
|
2448
2451
|
}
|
|
2449
2452
|
async function reconcileOllamaResidency(model, headers) {
|
|
2450
2453
|
const baseUrl = model.baseUrl;
|
|
2451
2454
|
if (!baseUrl) return;
|
|
2452
|
-
const metadata2 = model.
|
|
2455
|
+
const metadata2 = model.clioCoder;
|
|
2453
2456
|
const adapter = {
|
|
2454
2457
|
targetKey: residencyTargetKey("ollama-native", baseUrl),
|
|
2455
2458
|
targetId: ollamaTargetId(model),
|
|
@@ -2681,7 +2684,7 @@ function runStream(model, context, options, thinkingLevel) {
|
|
|
2681
2684
|
let doneReason;
|
|
2682
2685
|
const sentinelStripper = createSentinelStripper();
|
|
2683
2686
|
const resolved = resolveModelRuntimeCapabilitiesForModel(model, thinkingLevel);
|
|
2684
|
-
const channelFilter = resolved.
|
|
2687
|
+
const channelFilter = usesGemmaChannelMarkers(resolved.modelId) ? createGemmaChannelFilter() : null;
|
|
2685
2688
|
const closeActiveThinking = () => {
|
|
2686
2689
|
if (!activeThinking) return;
|
|
2687
2690
|
stream.push({
|
|
@@ -2828,6 +2831,115 @@ import {
|
|
|
2828
2831
|
} from "@earendil-works/pi-ai";
|
|
2829
2832
|
import { openAICompletionsApi } from "@earendil-works/pi-ai/api/openai-completions.lazy";
|
|
2830
2833
|
|
|
2834
|
+
// src/core/gateway-routing.ts
|
|
2835
|
+
init_esm_shims();
|
|
2836
|
+
function liteLLMRouteFailureMessage(errorMessage, targetId, modelId) {
|
|
2837
|
+
const providerMessage = errorMessage?.trim() || "LiteLLM request failed.";
|
|
2838
|
+
const advice = `LiteLLM route '${modelId}' on target '${targetId}' failed. Clio did not retry or substitute another model; select a different route with /model, then resend.`;
|
|
2839
|
+
return providerMessage.includes(advice) ? providerMessage : `${providerMessage}
|
|
2840
|
+
|
|
2841
|
+
${advice}`;
|
|
2842
|
+
}
|
|
2843
|
+
function nonEmptyString(value) {
|
|
2844
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
|
|
2845
|
+
}
|
|
2846
|
+
function nonnegativeNumber(value) {
|
|
2847
|
+
if (typeof value === "number" && Number.isFinite(value) && value >= 0) return value;
|
|
2848
|
+
if (typeof value !== "string" || value.trim().length === 0) return void 0;
|
|
2849
|
+
const parsed = Number(value);
|
|
2850
|
+
return Number.isFinite(parsed) && parsed >= 0 ? parsed : void 0;
|
|
2851
|
+
}
|
|
2852
|
+
function nonnegativeInteger(value) {
|
|
2853
|
+
const parsed = nonnegativeNumber(value);
|
|
2854
|
+
return parsed === void 0 ? void 0 : Math.floor(parsed);
|
|
2855
|
+
}
|
|
2856
|
+
function apiBaseHost(value) {
|
|
2857
|
+
const raw = nonEmptyString(value);
|
|
2858
|
+
if (raw === void 0) return void 0;
|
|
2859
|
+
try {
|
|
2860
|
+
return new URL(raw).host || void 0;
|
|
2861
|
+
} catch {
|
|
2862
|
+
return void 0;
|
|
2863
|
+
}
|
|
2864
|
+
}
|
|
2865
|
+
function storedApiBaseHost(value) {
|
|
2866
|
+
const raw = nonEmptyString(value);
|
|
2867
|
+
if (raw === void 0) return void 0;
|
|
2868
|
+
try {
|
|
2869
|
+
return new URL(raw.includes("://") ? raw : `http://${raw}`).host || void 0;
|
|
2870
|
+
} catch {
|
|
2871
|
+
return void 0;
|
|
2872
|
+
}
|
|
2873
|
+
}
|
|
2874
|
+
function liteLLMGatewayRoutingFromHeaders(headers) {
|
|
2875
|
+
const callId = nonEmptyString(headers.get("x-litellm-call-id"));
|
|
2876
|
+
const modelGroup = nonEmptyString(headers.get("x-litellm-model-group"));
|
|
2877
|
+
const modelName = nonEmptyString(headers.get("x-litellm-model-name"));
|
|
2878
|
+
const host = apiBaseHost(headers.get("x-litellm-model-api-base"));
|
|
2879
|
+
const deploymentId = nonEmptyString(headers.get("x-litellm-model-id"));
|
|
2880
|
+
const attemptedFallbacks = nonnegativeInteger(headers.get("x-litellm-attempted-fallbacks"));
|
|
2881
|
+
const attemptedRetries = nonnegativeInteger(headers.get("x-litellm-attempted-retries"));
|
|
2882
|
+
const overheadMs = nonnegativeNumber(headers.get("x-litellm-overhead-duration-ms"));
|
|
2883
|
+
const responseDurationMs = nonnegativeNumber(headers.get("x-litellm-response-duration-ms"));
|
|
2884
|
+
const version = nonEmptyString(headers.get("x-litellm-version"));
|
|
2885
|
+
const observation = {
|
|
2886
|
+
gateway: "litellm",
|
|
2887
|
+
...callId !== void 0 ? { callId } : {},
|
|
2888
|
+
...modelGroup !== void 0 ? { modelGroup } : {},
|
|
2889
|
+
...modelName !== void 0 ? { modelName } : {},
|
|
2890
|
+
...host !== void 0 ? { apiBaseHost: host } : {},
|
|
2891
|
+
...deploymentId !== void 0 ? { deploymentId } : {},
|
|
2892
|
+
...attemptedFallbacks !== void 0 ? { attemptedFallbacks } : {},
|
|
2893
|
+
...attemptedRetries !== void 0 ? { attemptedRetries } : {},
|
|
2894
|
+
...overheadMs !== void 0 ? { overheadMs } : {},
|
|
2895
|
+
...responseDurationMs !== void 0 ? { responseDurationMs } : {},
|
|
2896
|
+
...version !== void 0 ? { version } : {}
|
|
2897
|
+
};
|
|
2898
|
+
return Object.keys(observation).length > 1 ? observation : null;
|
|
2899
|
+
}
|
|
2900
|
+
function gatewayRoutingObservationFromRecord(record) {
|
|
2901
|
+
const value = record.gatewayRouting;
|
|
2902
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) return null;
|
|
2903
|
+
const raw = value;
|
|
2904
|
+
if (raw.gateway !== "litellm") return null;
|
|
2905
|
+
const callId = nonEmptyString(raw.callId);
|
|
2906
|
+
const modelGroup = nonEmptyString(raw.modelGroup);
|
|
2907
|
+
const modelName = nonEmptyString(raw.modelName);
|
|
2908
|
+
const host = storedApiBaseHost(raw.apiBaseHost);
|
|
2909
|
+
const deploymentId = nonEmptyString(raw.deploymentId);
|
|
2910
|
+
const attemptedFallbacks = nonnegativeInteger(raw.attemptedFallbacks);
|
|
2911
|
+
const attemptedRetries = nonnegativeInteger(raw.attemptedRetries);
|
|
2912
|
+
const overheadMs = nonnegativeNumber(raw.overheadMs);
|
|
2913
|
+
const responseDurationMs = nonnegativeNumber(raw.responseDurationMs);
|
|
2914
|
+
const version = nonEmptyString(raw.version);
|
|
2915
|
+
const observation = {
|
|
2916
|
+
gateway: "litellm",
|
|
2917
|
+
...callId !== void 0 ? { callId } : {},
|
|
2918
|
+
...modelGroup !== void 0 ? { modelGroup } : {},
|
|
2919
|
+
...modelName !== void 0 ? { modelName } : {},
|
|
2920
|
+
...host !== void 0 ? { apiBaseHost: host } : {},
|
|
2921
|
+
...deploymentId !== void 0 ? { deploymentId } : {},
|
|
2922
|
+
...attemptedFallbacks !== void 0 ? { attemptedFallbacks } : {},
|
|
2923
|
+
...attemptedRetries !== void 0 ? { attemptedRetries } : {},
|
|
2924
|
+
...overheadMs !== void 0 ? { overheadMs } : {},
|
|
2925
|
+
...responseDurationMs !== void 0 ? { responseDurationMs } : {},
|
|
2926
|
+
...version !== void 0 ? { version } : {}
|
|
2927
|
+
};
|
|
2928
|
+
return Object.keys(observation).length > 1 ? observation : null;
|
|
2929
|
+
}
|
|
2930
|
+
function gatewayRoutingObservationLabel(observation) {
|
|
2931
|
+
const route = [observation.modelGroup, observation.modelName].filter(Boolean).join("->");
|
|
2932
|
+
const destination = [route, observation.apiBaseHost ? `@${observation.apiBaseHost}` : ""].filter(Boolean).join("");
|
|
2933
|
+
const parts = [
|
|
2934
|
+
"gateway=litellm",
|
|
2935
|
+
...destination ? [`route=${destination}`] : [],
|
|
2936
|
+
...observation.attemptedFallbacks !== void 0 ? [`fallbacks=${observation.attemptedFallbacks}`] : [],
|
|
2937
|
+
...observation.attemptedRetries !== void 0 ? [`retries=${observation.attemptedRetries}`] : [],
|
|
2938
|
+
...observation.overheadMs !== void 0 ? [`overhead_ms=${observation.overheadMs}`] : []
|
|
2939
|
+
];
|
|
2940
|
+
return parts.join(" ");
|
|
2941
|
+
}
|
|
2942
|
+
|
|
2831
2943
|
// src/engine/harmony-response.ts
|
|
2832
2944
|
init_esm_shims();
|
|
2833
2945
|
var START = "<|start|>";
|
|
@@ -3113,7 +3225,7 @@ async function ensureLlamaCppResidency(input) {
|
|
|
3113
3225
|
targetId: input.targetId,
|
|
3114
3226
|
runtimeId: input.runtimeId,
|
|
3115
3227
|
keepModelId: input.keepModelId,
|
|
3116
|
-
managed: input.managed ??
|
|
3228
|
+
managed: input.managed ?? true,
|
|
3117
3229
|
strategy: "router",
|
|
3118
3230
|
listResident: async () => {
|
|
3119
3231
|
const models = await fetchRouterModels(input, fetchImpl);
|
|
@@ -3193,7 +3305,7 @@ function responseInstanceId(data) {
|
|
|
3193
3305
|
return typeof id === "string" && id.trim().length > 0 ? id.trim() : void 0;
|
|
3194
3306
|
}
|
|
3195
3307
|
function metadata(model) {
|
|
3196
|
-
return model.
|
|
3308
|
+
return model.clioCoder;
|
|
3197
3309
|
}
|
|
3198
3310
|
function targetForModel(model) {
|
|
3199
3311
|
const info = metadata(model);
|
|
@@ -3390,10 +3502,10 @@ async function ensureLmStudioResidency(model, options = {}) {
|
|
|
3390
3502
|
var piOpenAICompletions = openAICompletionsApi();
|
|
3391
3503
|
var REASONING_CHARS_PER_TOKEN2 = 4;
|
|
3392
3504
|
function chatTemplateKwargsUnsupported(model) {
|
|
3393
|
-
return model.
|
|
3505
|
+
return model.clioCoder?.chatTemplateKwargsUnsupported === true;
|
|
3394
3506
|
}
|
|
3395
3507
|
function clioQuirks2(model) {
|
|
3396
|
-
return model.
|
|
3508
|
+
return model.clioCoder?.quirks;
|
|
3397
3509
|
}
|
|
3398
3510
|
function pickSamplingProfile2(quirks, thinkingActive) {
|
|
3399
3511
|
const sampling = quirks?.sampling;
|
|
@@ -3424,7 +3536,7 @@ function backendCompletionTimings(value, source) {
|
|
|
3424
3536
|
};
|
|
3425
3537
|
}
|
|
3426
3538
|
function backendTimingsSourceForModel(model) {
|
|
3427
|
-
const metadata2 = model.
|
|
3539
|
+
const metadata2 = model.clioCoder;
|
|
3428
3540
|
if (model.provider === "llamacpp" && metadata2?.runtimeId === "llamacpp") return "llamacpp-timings";
|
|
3429
3541
|
if (model.provider === "lmstudio" && metadata2?.runtimeId === "lmstudio") return "lmstudio-timings";
|
|
3430
3542
|
return null;
|
|
@@ -3475,7 +3587,10 @@ function observeResponseModelIdBytes(chunk, capture, flush = false) {
|
|
|
3475
3587
|
}
|
|
3476
3588
|
if (captureCanStopEarly(capture) || flush) capture.decoder = null;
|
|
3477
3589
|
}
|
|
3478
|
-
function captureResponseModelId(response, capture) {
|
|
3590
|
+
function captureResponseModelId(response, capture, model) {
|
|
3591
|
+
if (runtimeMetadata(model)?.runtimeId === "litellm") {
|
|
3592
|
+
capture.gatewayRouting = liteLLMGatewayRoutingFromHeaders(response.headers);
|
|
3593
|
+
}
|
|
3479
3594
|
if (!response.body || !response.headers.get("content-type")?.toLowerCase().includes("text/event-stream")) {
|
|
3480
3595
|
return response;
|
|
3481
3596
|
}
|
|
@@ -3505,13 +3620,14 @@ function withResponseModelIdCapture(model, options, sourceFactory) {
|
|
|
3505
3620
|
modelIdDone: false,
|
|
3506
3621
|
backendTimings: null,
|
|
3507
3622
|
backendTimingsSource: backendTimingsSourceForModel(model),
|
|
3623
|
+
gatewayRouting: null,
|
|
3508
3624
|
buffer: "",
|
|
3509
3625
|
decoder: new TextDecoder()
|
|
3510
3626
|
};
|
|
3511
3627
|
const fetchImpl = options.fetch ?? ((input, init) => globalThis.fetch(input, init));
|
|
3512
3628
|
const capturedOptions = {
|
|
3513
3629
|
...options,
|
|
3514
|
-
fetch: async (input, init) => captureResponseModelId(await fetchImpl(input, init), capture)
|
|
3630
|
+
fetch: async (input, init) => captureResponseModelId(await fetchImpl(input, init), capture, model)
|
|
3515
3631
|
};
|
|
3516
3632
|
const source = sourceFactory(capturedOptions);
|
|
3517
3633
|
const annotated = createAssistantMessageEventStream3();
|
|
@@ -3521,9 +3637,11 @@ function withResponseModelIdCapture(model, options, sourceFactory) {
|
|
|
3521
3637
|
const observation = capture.observed ? capture.reportedModelId === null ? { state: "not-reported" } : { state: "reported", reportedModelId: capture.reportedModelId } : { state: "not-observed" };
|
|
3522
3638
|
if (event.type === "done") {
|
|
3523
3639
|
event.message.responseModelIdObservation = observation;
|
|
3640
|
+
if (capture.gatewayRouting !== null) event.message.gatewayRouting = capture.gatewayRouting;
|
|
3524
3641
|
if (capture.backendTimings !== null) event.message.backendTimings = capture.backendTimings;
|
|
3525
3642
|
} else if (event.type === "error") {
|
|
3526
3643
|
event.error.responseModelIdObservation = observation;
|
|
3644
|
+
if (capture.gatewayRouting !== null) event.error.gatewayRouting = capture.gatewayRouting;
|
|
3527
3645
|
if (capture.backendTimings !== null) event.error.backendTimings = capture.backendTimings;
|
|
3528
3646
|
}
|
|
3529
3647
|
annotated.push(event);
|
|
@@ -3536,6 +3654,26 @@ function withResponseModelIdCapture(model, options, sourceFactory) {
|
|
|
3536
3654
|
})();
|
|
3537
3655
|
return annotated;
|
|
3538
3656
|
}
|
|
3657
|
+
function withLiteLLMRouteFailureAdvice(model, source) {
|
|
3658
|
+
const metadata2 = runtimeMetadata(model);
|
|
3659
|
+
if (metadata2?.runtimeId !== "litellm") return source;
|
|
3660
|
+
const advised = createAssistantMessageEventStream3();
|
|
3661
|
+
(async () => {
|
|
3662
|
+
try {
|
|
3663
|
+
for await (const event of source) {
|
|
3664
|
+
if (event.type === "error") {
|
|
3665
|
+
event.error.errorMessage = liteLLMRouteFailureMessage(event.error.errorMessage, metadata2.targetId, model.id);
|
|
3666
|
+
}
|
|
3667
|
+
advised.push(event);
|
|
3668
|
+
}
|
|
3669
|
+
advised.end();
|
|
3670
|
+
} catch (err) {
|
|
3671
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
3672
|
+
throw new Error(liteLLMRouteFailureMessage(message, metadata2.targetId, model.id));
|
|
3673
|
+
}
|
|
3674
|
+
})();
|
|
3675
|
+
return advised;
|
|
3676
|
+
}
|
|
3539
3677
|
function samplingParamsFromProfile(profile) {
|
|
3540
3678
|
return {
|
|
3541
3679
|
...profile.topP !== void 0 ? { top_p: profile.topP } : {},
|
|
@@ -3602,12 +3740,31 @@ function withStrippedPartial(event) {
|
|
|
3602
3740
|
return { ...event, partial: stripThinkingFromMessage(event.partial) };
|
|
3603
3741
|
}
|
|
3604
3742
|
function applyThinkingPayload(payload, applied, resolved, model) {
|
|
3605
|
-
if (applied.mechanism === "none")
|
|
3606
|
-
|
|
3743
|
+
if (applied.mechanism === "none") {
|
|
3744
|
+
const next2 = stripThinkingRequestFields(payload);
|
|
3745
|
+
if (resolved.request.chatTemplateKwargs && !chatTemplateKwargsUnsupported(model)) {
|
|
3746
|
+
const existing = isPlainRecord(next2.chat_template_kwargs) ? next2.chat_template_kwargs : {};
|
|
3747
|
+
next2.chat_template_kwargs = { ...existing, ...resolved.request.chatTemplateKwargs };
|
|
3748
|
+
}
|
|
3749
|
+
return next2;
|
|
3750
|
+
}
|
|
3751
|
+
if (applied.mechanism === "always-on") {
|
|
3752
|
+
if (resolved.request.chatTemplateKwargs && !chatTemplateKwargsUnsupported(model)) {
|
|
3753
|
+
const next2 = { ...payload };
|
|
3754
|
+
const existing = isPlainRecord(next2.chat_template_kwargs) ? next2.chat_template_kwargs : {};
|
|
3755
|
+
next2.chat_template_kwargs = { ...existing, ...resolved.request.chatTemplateKwargs };
|
|
3756
|
+
return next2;
|
|
3757
|
+
}
|
|
3758
|
+
return payload;
|
|
3759
|
+
}
|
|
3607
3760
|
const next = { ...payload };
|
|
3608
3761
|
if (resolved.request.reasoningEffort && (next.reasoning_effort === void 0 || resolved.response.parser === "harmony")) {
|
|
3609
3762
|
next.reasoning_effort = resolved.request.reasoningEffort;
|
|
3610
3763
|
}
|
|
3764
|
+
if (resolved.runtimeId === "litellm" && resolved.request.reasoningEffort && next.reasoning_effort === resolved.request.reasoningEffort) {
|
|
3765
|
+
const allowed = Array.isArray(next.allowed_openai_params) ? next.allowed_openai_params : [];
|
|
3766
|
+
next.allowed_openai_params = [.../* @__PURE__ */ new Set([...allowed, "reasoning_effort"])];
|
|
3767
|
+
}
|
|
3611
3768
|
if (resolved.request.chatTemplateKwargs && !chatTemplateKwargsUnsupported(model)) {
|
|
3612
3769
|
const existing = isPlainRecord(next.chat_template_kwargs) ? next.chat_template_kwargs : {};
|
|
3613
3770
|
next.chat_template_kwargs = { ...existing, ...resolved.request.chatTemplateKwargs };
|
|
@@ -3629,13 +3786,13 @@ function applyLmStudioPayload(payload, model, resolved) {
|
|
|
3629
3786
|
if (request?.ttlSeconds !== void 0) next.ttl = request.ttlSeconds;
|
|
3630
3787
|
if (request?.draftModel !== void 0) next.draft_model = request.draftModel;
|
|
3631
3788
|
if (resolved.thinking.mechanism === "none" || resolved.thinking.mechanism === "always-on") return next;
|
|
3632
|
-
const resolvedEffort =
|
|
3789
|
+
const resolvedEffort = runtimeMetadata(model)?.lmstudioReasoningOptions ? lmStudioReasoningEffort(resolved.thinking.effectiveLevel, runtimeMetadata(model)?.lmstudioReasoningOptions) : resolved.request.reasoningEffort ?? lmStudioReasoningEffort(resolved.thinking.effectiveLevel);
|
|
3633
3790
|
switch (request?.reasoning) {
|
|
3634
3791
|
case "off":
|
|
3635
|
-
next.reasoning_effort = "
|
|
3792
|
+
next.reasoning_effort = lmStudioReasoningEffort("off", runtimeMetadata(model)?.lmstudioReasoningOptions);
|
|
3636
3793
|
break;
|
|
3637
3794
|
case "on":
|
|
3638
|
-
next.reasoning_effort = "low";
|
|
3795
|
+
next.reasoning_effort = lmStudioReasoningEffort("low", runtimeMetadata(model)?.lmstudioReasoningOptions);
|
|
3639
3796
|
break;
|
|
3640
3797
|
case "low":
|
|
3641
3798
|
case "medium":
|
|
@@ -3734,16 +3891,39 @@ function thinkingLevelFromSimple2(options) {
|
|
|
3734
3891
|
return reasoning;
|
|
3735
3892
|
}
|
|
3736
3893
|
function withRemainingContextBudget(model, context, options) {
|
|
3737
|
-
const metadata2 = runtimeMetadata(model);
|
|
3738
|
-
const localToolOutputLimit = options?.maxTokens === void 0 && (context.tools?.length ?? 0) > 0 && (model.provider === "llamacpp" || metadata2?.runtimeId === "llamacpp") ? LOCAL_TOOL_TURN_MAX_OUTPUT_TOKENS : void 0;
|
|
3739
3894
|
return {
|
|
3740
3895
|
...options ?? {},
|
|
3741
|
-
maxTokens: remainingContextMaxTokens(
|
|
3742
|
-
|
|
3743
|
-
|
|
3744
|
-
|
|
3745
|
-
|
|
3746
|
-
|
|
3896
|
+
maxTokens: remainingContextMaxTokens(model, context, options)
|
|
3897
|
+
};
|
|
3898
|
+
}
|
|
3899
|
+
function hasHeader(headers, name) {
|
|
3900
|
+
if (!headers) return false;
|
|
3901
|
+
const wanted = name.toLowerCase();
|
|
3902
|
+
return Object.keys(headers).some((key) => key.toLowerCase() === wanted);
|
|
3903
|
+
}
|
|
3904
|
+
function withLiteLLMRequestOptions(model, options) {
|
|
3905
|
+
const metadata2 = runtimeMetadata(model);
|
|
3906
|
+
if (metadata2?.runtimeId !== "litellm") return options;
|
|
3907
|
+
const request = metadata2.litellm?.request;
|
|
3908
|
+
const modelHeaders = model.headers;
|
|
3909
|
+
const optionHeaders = options.headers;
|
|
3910
|
+
const headers = { ...options.headers ?? {} };
|
|
3911
|
+
const setDefault = (name, value) => {
|
|
3912
|
+
if (value === void 0 || hasHeader(modelHeaders, name) || hasHeader(optionHeaders, name)) return;
|
|
3913
|
+
headers[name] = value;
|
|
3914
|
+
};
|
|
3915
|
+
setDefault("x-litellm-tags", ["clio-coder", ...request?.tags ?? []].join(","));
|
|
3916
|
+
if (request?.sendSessionId !== false) setDefault("x-litellm-session-id", options.sessionId);
|
|
3917
|
+
setDefault("x-litellm-timeout", request?.timeoutSeconds?.toString());
|
|
3918
|
+
setDefault("x-litellm-stream-timeout", request?.streamTimeoutSeconds?.toString());
|
|
3919
|
+
setDefault("x-litellm-num-retries", request?.numRetries?.toString());
|
|
3920
|
+
return {
|
|
3921
|
+
...options,
|
|
3922
|
+
headers,
|
|
3923
|
+
// Never hide duplicate attempts inside the OpenAI SDK beneath Clio's
|
|
3924
|
+
// operator-visible failure. The gateway may still be configured to retry,
|
|
3925
|
+
// but physical-routing deployments should keep that policy at zero too.
|
|
3926
|
+
maxRetries: options.maxRetries ?? 0
|
|
3747
3927
|
};
|
|
3748
3928
|
}
|
|
3749
3929
|
function requiredToolArguments(tool) {
|
|
@@ -3757,7 +3937,7 @@ function hasEmptyArguments(args) {
|
|
|
3757
3937
|
return Object.keys(args).length === 0;
|
|
3758
3938
|
}
|
|
3759
3939
|
function runtimeMetadata(model) {
|
|
3760
|
-
return model.
|
|
3940
|
+
return model.clioCoder;
|
|
3761
3941
|
}
|
|
3762
3942
|
function emptyErrorMessage(model, message) {
|
|
3763
3943
|
return {
|
|
@@ -4014,24 +4194,31 @@ var openAICompletionsApiProvider = {
|
|
|
4014
4194
|
const resolved = resolvedCapabilitiesForModel(model, defaultLevel);
|
|
4015
4195
|
const effectiveContext = stripsThinking(resolved) ? stripThinkingFromContext(context) : context;
|
|
4016
4196
|
const withSamplers = withSamplingOverrides(model, options, resolved);
|
|
4197
|
+
const withGatewayOptions = withLiteLLMRequestOptions(
|
|
4198
|
+
model,
|
|
4199
|
+
withRemainingContextBudget(model, effectiveContext, withSamplers)
|
|
4200
|
+
);
|
|
4017
4201
|
return guardMalformedToolCalls(
|
|
4018
4202
|
withReasoningTokenEstimate(
|
|
4019
4203
|
stripSentinelsFromStream(
|
|
4020
4204
|
stripNeverReasoningFromStream(
|
|
4021
4205
|
filterGemmaChannelStream(
|
|
4022
|
-
|
|
4206
|
+
withLiteLLMRouteFailureAdvice(
|
|
4023
4207
|
model,
|
|
4024
|
-
|
|
4025
|
-
(capturedOptions) => withLocalResidency(
|
|
4208
|
+
withResponseModelIdCapture(
|
|
4026
4209
|
model,
|
|
4027
|
-
|
|
4028
|
-
|
|
4029
|
-
|
|
4030
|
-
|
|
4031
|
-
|
|
4210
|
+
withGatewayOptions,
|
|
4211
|
+
(capturedOptions) => withLocalResidency(
|
|
4212
|
+
model,
|
|
4213
|
+
{
|
|
4214
|
+
...options?.apiKey !== void 0 ? { apiKey: options.apiKey } : {},
|
|
4215
|
+
...options?.signal !== void 0 ? { signal: options.signal } : {}
|
|
4216
|
+
},
|
|
4217
|
+
(requestModel) => piOpenAICompletions.stream(requestModel, effectiveContext, capturedOptions)
|
|
4218
|
+
)
|
|
4032
4219
|
)
|
|
4033
4220
|
),
|
|
4034
|
-
resolved.
|
|
4221
|
+
usesGemmaChannelMarkers(resolved.modelId)
|
|
4035
4222
|
),
|
|
4036
4223
|
resolved
|
|
4037
4224
|
),
|
|
@@ -4046,24 +4233,31 @@ var openAICompletionsApiProvider = {
|
|
|
4046
4233
|
const resolved = resolvedCapabilitiesForModel(model, thinkingLevelFromSimple2(options));
|
|
4047
4234
|
const effectiveContext = stripsThinking(resolved) ? stripThinkingFromContext(context) : context;
|
|
4048
4235
|
const withSamplers = withSamplingOverrides(model, options, resolved);
|
|
4236
|
+
const withGatewayOptions = withLiteLLMRequestOptions(
|
|
4237
|
+
model,
|
|
4238
|
+
withRemainingContextBudget(model, effectiveContext, withSamplers)
|
|
4239
|
+
);
|
|
4049
4240
|
return guardMalformedToolCalls(
|
|
4050
4241
|
withReasoningTokenEstimate(
|
|
4051
4242
|
stripSentinelsFromStream(
|
|
4052
4243
|
stripNeverReasoningFromStream(
|
|
4053
4244
|
filterGemmaChannelStream(
|
|
4054
|
-
|
|
4245
|
+
withLiteLLMRouteFailureAdvice(
|
|
4055
4246
|
model,
|
|
4056
|
-
|
|
4057
|
-
(capturedOptions) => withLocalResidency(
|
|
4247
|
+
withResponseModelIdCapture(
|
|
4058
4248
|
model,
|
|
4059
|
-
|
|
4060
|
-
|
|
4061
|
-
|
|
4062
|
-
|
|
4063
|
-
|
|
4249
|
+
withGatewayOptions,
|
|
4250
|
+
(capturedOptions) => withLocalResidency(
|
|
4251
|
+
model,
|
|
4252
|
+
{
|
|
4253
|
+
...options?.apiKey !== void 0 ? { apiKey: options.apiKey } : {},
|
|
4254
|
+
...options?.signal !== void 0 ? { signal: options.signal } : {}
|
|
4255
|
+
},
|
|
4256
|
+
(requestModel) => piOpenAICompletions.streamSimple(requestModel, effectiveContext, capturedOptions)
|
|
4257
|
+
)
|
|
4064
4258
|
)
|
|
4065
4259
|
),
|
|
4066
|
-
resolved.
|
|
4260
|
+
usesGemmaChannelMarkers(resolved.modelId)
|
|
4067
4261
|
),
|
|
4068
4262
|
resolved
|
|
4069
4263
|
),
|
|
@@ -4400,7 +4594,7 @@ function discoveredModelsSource(probe, preservePreviousProbe, previous, cachedMo
|
|
|
4400
4594
|
function sameProbeIdentity(previous, next) {
|
|
4401
4595
|
return previous.id === next.id && previous.runtime === next.runtime && (previous.url ?? "") === (next.url ?? "") && (previous.defaultModel ?? "") === (next.defaultModel ?? "");
|
|
4402
4596
|
}
|
|
4403
|
-
function mergeProbeResult(desc, target, probe, previous, cachedModels = []) {
|
|
4597
|
+
function mergeProbeResult(desc, target, probe, previous, cachedModels = [], cachedModelLabels = {}) {
|
|
4404
4598
|
const probeSucceeded = probe?.ok ?? false;
|
|
4405
4599
|
const preservePrevious = !probeSucceeded && previous !== void 0 && sameProbeIdentity(previous.target, target);
|
|
4406
4600
|
const probeCapabilities = probe?.discoveredCapabilities ?? (preservePrevious ? previous.probeCapabilities : null) ?? null;
|
|
@@ -4412,8 +4606,10 @@ function mergeProbeResult(desc, target, probe, previous, cachedModels = []) {
|
|
|
4412
4606
|
probe?.models ?? (preservePrevious ? previous.discoveredModels : void 0) ?? (cachedModels.length > 0 ? cachedModels : void 0) ?? desc.knownModels ?? []
|
|
4413
4607
|
);
|
|
4414
4608
|
const discoveredModelStates = probe?.modelStates ?? (preservePrevious ? previous.discoveredModelStates : null) ?? null;
|
|
4609
|
+
const discoveredModelLabels = probe?.modelLabels ?? (preservePrevious ? previous.discoveredModelLabels : void 0) ?? (cachedModels.length > 0 ? cachedModelLabels : void 0) ?? {};
|
|
4415
4610
|
const merge = {
|
|
4416
4611
|
discoveredModels,
|
|
4612
|
+
discoveredModelLabels,
|
|
4417
4613
|
discoveredModelsSource: discoveredModelsSource(probe, preservePrevious, previous, cachedModels, desc),
|
|
4418
4614
|
discoveredModelStates,
|
|
4419
4615
|
probeCapabilities,
|
|
@@ -4428,7 +4624,9 @@ function unservedDefaultModelReason(desc, target, merge) {
|
|
|
4428
4624
|
const model = target.defaultModel;
|
|
4429
4625
|
if (!model) return null;
|
|
4430
4626
|
if (merge.discoveredModelsSource !== "probe" || merge.discoveredModels.length === 0) return null;
|
|
4431
|
-
if (listKnownModelsForRuntime(desc.id).length > 0)
|
|
4627
|
+
if (listKnownModelsForRuntime(desc.id).length > 0 && desc.externalAgentLoop?.modelCatalog !== "live-authoritative") {
|
|
4628
|
+
return null;
|
|
4629
|
+
}
|
|
4432
4630
|
if (merge.discoveredModels.includes(model)) return null;
|
|
4433
4631
|
if (merge.discoveredModelStates && model in merge.discoveredModelStates) return null;
|
|
4434
4632
|
return `default model '${model}' is not advertised by the target`;
|
|
@@ -4448,14 +4646,18 @@ function createProvidersBundle(context) {
|
|
|
4448
4646
|
if (config) return config.get();
|
|
4449
4647
|
return readSettings();
|
|
4450
4648
|
}
|
|
4451
|
-
async function buildProbeContextForTarget(target, desc) {
|
|
4649
|
+
async function buildProbeContextForTarget(target, desc, signal) {
|
|
4452
4650
|
const probeCtx = {
|
|
4453
4651
|
credentialsPresent: credentialsPresent(),
|
|
4454
|
-
httpTimeoutMs: DEFAULT_PROBE_TIMEOUT_MS
|
|
4652
|
+
httpTimeoutMs: DEFAULT_PROBE_TIMEOUT_MS,
|
|
4653
|
+
...signal ? { signal } : {}
|
|
4455
4654
|
};
|
|
4456
4655
|
if (!targetRequiresAuth(target, desc)) return probeCtx;
|
|
4457
4656
|
try {
|
|
4458
|
-
const resolution = await authStore.resolveForTarget(resolveAuthTarget(target, desc), {
|
|
4657
|
+
const resolution = await authStore.resolveForTarget(resolveAuthTarget(target, desc), {
|
|
4658
|
+
includeFallback: false,
|
|
4659
|
+
...signal ? { signal } : {}
|
|
4660
|
+
});
|
|
4459
4661
|
if (resolution.apiKey) probeCtx.authToken = resolution.apiKey;
|
|
4460
4662
|
} catch {
|
|
4461
4663
|
}
|
|
@@ -4507,8 +4709,9 @@ function createProvidersBundle(context) {
|
|
|
4507
4709
|
return out2;
|
|
4508
4710
|
}
|
|
4509
4711
|
const availability = availabilityFor(desc, target, authStatusFor);
|
|
4510
|
-
const
|
|
4511
|
-
const
|
|
4712
|
+
const cachedSnapshot = readTargetModelSnapshot(target);
|
|
4713
|
+
const cachedModels = cachedSnapshot?.models ?? [];
|
|
4714
|
+
const merge = mergeProbeResult(desc, target, probe, previous, cachedModels, cachedSnapshot?.modelLabels ?? {});
|
|
4512
4715
|
const { capabilities, contextWindowProvenance } = capabilitiesFor(desc, target, merge, kb);
|
|
4513
4716
|
const healthy = probe !== null ? probe.ok : null;
|
|
4514
4717
|
const unservedDefault = probe?.ok ? unservedDefaultModelReason(desc, target, merge) : null;
|
|
@@ -4532,6 +4735,7 @@ function createProvidersBundle(context) {
|
|
|
4532
4735
|
probeModelCapabilities: merge.probeModelCapabilities,
|
|
4533
4736
|
probeModelId: merge.probeModelId,
|
|
4534
4737
|
discoveredModels: merge.discoveredModels,
|
|
4738
|
+
discoveredModelLabels: merge.discoveredModelLabels,
|
|
4535
4739
|
discoveredModelsSource: merge.discoveredModelsSource,
|
|
4536
4740
|
discoveredModelStates: merge.discoveredModelStates
|
|
4537
4741
|
};
|
|
@@ -4540,6 +4744,7 @@ function createProvidersBundle(context) {
|
|
|
4540
4744
|
return out;
|
|
4541
4745
|
}
|
|
4542
4746
|
async function probeTargetInternal(target, live, options) {
|
|
4747
|
+
options?.signal?.throwIfAborted();
|
|
4543
4748
|
const previous = statuses.get(target.id);
|
|
4544
4749
|
const desc = registry.get(target.runtime);
|
|
4545
4750
|
if (!desc) {
|
|
@@ -4553,13 +4758,15 @@ function createProvidersBundle(context) {
|
|
|
4553
4758
|
statuses.set(target.id, status2);
|
|
4554
4759
|
return status2;
|
|
4555
4760
|
}
|
|
4556
|
-
const probeCtx = await buildProbeContextForTarget(target, desc);
|
|
4761
|
+
const probeCtx = await buildProbeContextForTarget(target, desc, options?.signal);
|
|
4762
|
+
options?.signal?.throwIfAborted();
|
|
4557
4763
|
let probeResult;
|
|
4558
4764
|
try {
|
|
4559
4765
|
probeResult = await desc.probe(target, probeCtx);
|
|
4560
4766
|
} catch (err) {
|
|
4561
4767
|
probeResult = { ok: false, error: err instanceof Error ? err.message : String(err) };
|
|
4562
4768
|
}
|
|
4769
|
+
options?.signal?.throwIfAborted();
|
|
4563
4770
|
if (probeResult.ok && typeof desc.probeModels === "function" && !probeResult.models) {
|
|
4564
4771
|
try {
|
|
4565
4772
|
const ids = await desc.probeModels(target, probeCtx);
|
|
@@ -4567,6 +4774,7 @@ function createProvidersBundle(context) {
|
|
|
4567
4774
|
} catch {
|
|
4568
4775
|
}
|
|
4569
4776
|
}
|
|
4777
|
+
options?.signal?.throwIfAborted();
|
|
4570
4778
|
if (probeResult.ok && options?.reasoning !== false && typeof desc.probeReasoning === "function") {
|
|
4571
4779
|
const settings = readConfig();
|
|
4572
4780
|
const orchestratorTarget = settings.chat.target === target.id ? settings.chat.model : null;
|
|
@@ -4574,6 +4782,7 @@ function createProvidersBundle(context) {
|
|
|
4574
4782
|
if (candidateModelId) {
|
|
4575
4783
|
try {
|
|
4576
4784
|
const result = await desc.probeReasoning(target, candidateModelId, probeCtx);
|
|
4785
|
+
options?.signal?.throwIfAborted();
|
|
4577
4786
|
reasoningCache.set(reasoningCacheKey(target.id, candidateModelId), result.reasoning);
|
|
4578
4787
|
const capabilityModelId = probeResult.capabilityModelId ?? null;
|
|
4579
4788
|
if (capabilityModelId === null || capabilityModelId === candidateModelId) {
|
|
@@ -4594,10 +4803,15 @@ function createProvidersBundle(context) {
|
|
|
4594
4803
|
}
|
|
4595
4804
|
}
|
|
4596
4805
|
}
|
|
4806
|
+
options?.signal?.throwIfAborted();
|
|
4597
4807
|
const status = buildStatus(target, desc, probeResult, previous);
|
|
4598
4808
|
statuses.set(target.id, status);
|
|
4599
4809
|
if (probeResult.ok && probeResult.models !== void 0) {
|
|
4600
|
-
recordTargetModelSnapshot(
|
|
4810
|
+
recordTargetModelSnapshot(
|
|
4811
|
+
target,
|
|
4812
|
+
probeResult.models,
|
|
4813
|
+
probeResult.modelLabels ? { modelLabels: probeResult.modelLabels } : {}
|
|
4814
|
+
);
|
|
4601
4815
|
}
|
|
4602
4816
|
void recordEndpointSlotsFromStatus(status);
|
|
4603
4817
|
context.bus.emit(BusChannels.ProviderHealth, { id: target.id, status });
|
|
@@ -4783,8 +4997,8 @@ export {
|
|
|
4783
4997
|
setResidencyNoticeSink,
|
|
4784
4998
|
setProtectedModelsProvider,
|
|
4785
4999
|
withRunOverrides,
|
|
4786
|
-
|
|
4787
|
-
|
|
5000
|
+
gatewayRoutingObservationFromRecord,
|
|
5001
|
+
gatewayRoutingObservationLabel,
|
|
4788
5002
|
applyModelCapabilityPatch,
|
|
4789
5003
|
probeCapabilitiesForModel,
|
|
4790
5004
|
resolveModelCapabilities,
|
|
@@ -4802,6 +5016,7 @@ export {
|
|
|
4802
5016
|
isOrchestratorEligibleRuntime,
|
|
4803
5017
|
isDispatchEligibleRuntime,
|
|
4804
5018
|
modelResidencyForStatus,
|
|
5019
|
+
hasLiveModelCatalog,
|
|
4805
5020
|
modelCandidatesForStatus,
|
|
4806
5021
|
modelIdsForStatus,
|
|
4807
5022
|
canonicalizeWireModelId,
|
|
@@ -4813,6 +5028,7 @@ export {
|
|
|
4813
5028
|
runtimeResolutionWarnings,
|
|
4814
5029
|
runtimeResolutionWarningsBesideThinkingNotice,
|
|
4815
5030
|
normalizeCostProvenance,
|
|
5031
|
+
resolveCostProvenance2 as resolveCostProvenance,
|
|
4816
5032
|
ProvidersDomainModule
|
|
4817
5033
|
};
|
|
4818
|
-
//# sourceMappingURL=chunk-
|
|
5034
|
+
//# sourceMappingURL=chunk-XPWWI35G.js.map
|