@iowarp/clio-coder 0.4.2 → 0.4.4
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 +98 -0
- package/CONTRIBUTING.md +86 -19
- package/README.md +35 -6
- package/dist/{acp-TMDQZDIG.js → acp-WNAYYF4F.js} +12 -13
- package/dist/{agents-5N5NG3XG.js → agents-3OKXHLOI.js} +60 -57
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-Z5CCBXKQ.js → auth-VKNNMGPU.js} +21 -19
- package/dist/{builtins-K6TNDT24.js → builtins-WGALA46I.js} +9 -4
- package/dist/{chunk-XE3PCIXH.js → chunk-23L32XTI.js} +12 -9
- package/dist/{chunk-I64IFBLB.js → chunk-25QBEXRS.js} +18 -11
- package/dist/{chunk-CDNVLKUX.js → chunk-26QSH3EJ.js} +13 -7
- package/dist/{chunk-QQLGQY2A.js → chunk-2ASED4PZ.js} +22 -22
- package/dist/{chunk-MCEPRMZW.js → chunk-2CU2H6KE.js} +2 -2
- package/dist/chunk-2DSOYNFC.js +108 -0
- package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
- package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
- package/dist/{chunk-O3YUNJZ2.js → chunk-2ZSONWVL.js} +82 -25
- package/dist/{chunk-2NHR3NAY.js → chunk-36CT5VVL.js} +331 -42
- package/dist/{chunk-2X4RYJTJ.js → chunk-3GY4F45V.js} +3 -3
- package/dist/{chunk-ZW55JB7N.js → chunk-3ODX73FK.js} +4 -6
- package/dist/{chunk-PBP4B7XR.js → chunk-3UNOLWNZ.js} +3 -3
- package/dist/{chunk-4JDLP6ZS.js → chunk-3UUXNFEX.js} +14 -10
- package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
- package/dist/{chunk-ZW4HH5JJ.js → chunk-4M6Z5QVF.js} +6 -6
- package/dist/{chunk-K6BSR66V.js → chunk-4NSRCOYP.js} +4 -1
- package/dist/{chunk-M2DAX4F6.js → chunk-4WR7VSYB.js} +2 -2
- package/dist/{chunk-FSP7CMNU.js → chunk-54X7T7DK.js} +61 -6
- package/dist/{chunk-54ODD65L.js → chunk-5636DCO5.js} +4 -4
- package/dist/chunk-57XXR6DR.js +3763 -0
- package/dist/{chunk-3KIPBMUA.js → chunk-5ICU3EUH.js} +2 -2
- package/dist/{chunk-77QIVUZB.js → chunk-5MEZN6CB.js} +4 -4
- package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
- package/dist/{chunk-YJISEZKC.js → chunk-5TUB6SLS.js} +6 -6
- package/dist/{chunk-IMXMHHMQ.js → chunk-6OSVSQL5.js} +341 -57
- package/dist/{chunk-Q4XWMHX6.js → chunk-6PAZTBPA.js} +14 -2
- package/dist/{chunk-FVDGR2ZL.js → chunk-6Q3CYFD3.js} +112 -39
- package/dist/{chunk-IDNA72AH.js → chunk-6QOTUPRG.js} +155 -36
- package/dist/{chunk-X7IARSHT.js → chunk-6UINWWS6.js} +16 -10
- package/dist/{chunk-CYZW7JHJ.js → chunk-72YIHOZQ.js} +9 -9
- package/dist/{chunk-IKSLQ4XV.js → chunk-75W7L2E2.js} +752 -861
- package/dist/{chunk-CRFOIAX3.js → chunk-7UGL4MB5.js} +6 -6
- package/dist/{chunk-HIICAHCJ.js → chunk-AUPNRN7C.js} +2 -2
- package/dist/{chunk-7BHIY2MW.js → chunk-BJVFZO5U.js} +8 -50
- package/dist/{chunk-B74PXLU7.js → chunk-CUSRQKPU.js} +65 -3
- package/dist/chunk-DQOVN6KV.js +386 -0
- package/dist/{chunk-E7GT7O5N.js → chunk-DT3LWJOB.js} +7 -4
- package/dist/chunk-DXKJURES.js +671 -0
- package/dist/{chunk-JBCS7CRR.js → chunk-EL24TAU4.js} +10 -10
- package/dist/{chunk-TPEQIQIE.js → chunk-ELWDPP3Y.js} +8 -8
- package/dist/{chunk-NDINPTJ4.js → chunk-ELZVTCGV.js} +5 -4
- package/dist/chunk-EXLD33WO.js +381 -0
- package/dist/chunk-FEAXX7B6.js +101 -0
- package/dist/{chunk-RLYRBIYQ.js → chunk-FFUPXJC4.js} +90 -331
- package/dist/{chunk-5PFYMY2V.js → chunk-FTMGRKEF.js} +2 -2
- package/dist/{chunk-34BHNEE3.js → chunk-GHS5EBTQ.js} +58 -7
- package/dist/{chunk-DYHAXKHD.js → chunk-GWZNEVM2.js} +12 -8
- package/dist/chunk-GX5WYQO4.js +59 -0
- package/dist/chunk-GYV6VZOC.js +26 -0
- package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
- package/dist/chunk-I2DWJ4GM.js +390 -0
- package/dist/{chunk-TXOTCRLG.js → chunk-I5FWO7L5.js} +5 -5
- package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
- package/dist/{chunk-XQRY4DTA.js → chunk-IGLP3ODT.js} +10 -10
- package/dist/chunk-IRXAATOX.js +539 -0
- package/dist/chunk-IXIY2H4R.js +44 -0
- package/dist/{chunk-SSEYRH53.js → chunk-IZXGRF7P.js} +92 -147
- package/dist/{chunk-5TSRNF4G.js → chunk-JCI2ROMZ.js} +164 -6
- package/dist/{chunk-JWJGP5DQ.js → chunk-JEIYHLOR.js} +7 -7
- package/dist/{chunk-F2I26BDK.js → chunk-JQLNNIKT.js} +4 -4
- package/dist/{chunk-BYMNWQ7O.js → chunk-JSD46VO2.js} +315 -63
- package/dist/{chunk-AK5XEFVZ.js → chunk-JT2RFCC5.js} +64 -14
- package/dist/{chunk-MCMZMDAC.js → chunk-K6T2ZAMZ.js} +168 -6
- package/dist/{chunk-PGF63K6I.js → chunk-KFV5L5SK.js} +73 -4
- package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
- package/dist/{chunk-PJX3WQUQ.js → chunk-LLXSDWXS.js} +3 -3
- package/dist/{chunk-DZAW46HP.js → chunk-LTIKRKFL.js} +3 -3
- package/dist/{chunk-DZEK6CJN.js → chunk-N56KALIC.js} +21 -21
- package/dist/{chunk-B7HM5Z7T.js → chunk-NAI6ZFCY.js} +9 -5
- package/dist/{chunk-I66ZTYNP.js → chunk-NRO2BJRH.js} +2656 -2213
- package/dist/{chunk-ZGNYYXQ6.js → chunk-NXIMQY5W.js} +3 -3
- package/dist/{chunk-IKOZFYBN.js → chunk-NXYCB2VD.js} +149 -106
- package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
- package/dist/{chunk-462T4EGZ.js → chunk-O5CVSAG5.js} +2 -2
- package/dist/chunk-ODGTEFFI.js +50 -0
- package/dist/{chunk-3F7VUY77.js → chunk-OEJSLEPW.js} +2 -2
- package/dist/{chunk-KKOJXO6R.js → chunk-OMQNJVKW.js} +4 -2
- package/dist/{chunk-5KW52TEP.js → chunk-Q4WO54TA.js} +132 -77
- package/dist/{chunk-W6NIE6OW.js → chunk-QUFRYSWI.js} +13 -7
- package/dist/{chunk-42FMPA75.js → chunk-QZWQA4DE.js} +2 -2
- package/dist/chunk-R6Q67RJH.js +134 -0
- package/dist/{chunk-W4YEMFBX.js → chunk-RAY4OVGZ.js} +3 -3
- package/dist/{chunk-ZNT2M6TG.js → chunk-RQCKCSRL.js} +17 -17
- package/dist/{chunk-LJID3DYZ.js → chunk-RXTN6AKH.js} +3 -3
- package/dist/{chunk-P75RZCJW.js → chunk-RZDWV63N.js} +3 -3
- package/dist/{chunk-UH632ZYL.js → chunk-S6PYF2XF.js} +2 -2
- package/dist/{chunk-HJWWJ6IL.js → chunk-TOIVGRUX.js} +17 -5
- package/dist/{chunk-HLAFFSEK.js → chunk-TQAHXW6Y.js} +2 -2
- package/dist/{chunk-JIEGK6UF.js → chunk-U6TMQNSI.js} +48 -4
- package/dist/{chunk-2HFQNRV3.js → chunk-UEPWCCTY.js} +12 -12
- package/dist/chunk-UOIZ7DA4.js +41 -0
- package/dist/{chunk-UH347SHR.js → chunk-USR47QNF.js} +11 -11
- package/dist/{chunk-AZ4WMN4W.js → chunk-V6HJFQZE.js} +2 -2
- package/dist/chunk-V76WTFTW.js +318 -0
- package/dist/{chunk-NMJXSHBJ.js → chunk-W54I7H25.js} +2 -2
- package/dist/{chunk-KPXDY6QF.js → chunk-XRZT5WY5.js} +2 -2
- package/dist/{chunk-UBRFI4HS.js → chunk-XULDXHTN.js} +142 -50
- package/dist/chunk-XXYSBZIQ.js +283 -0
- package/dist/{chunk-HKMD33FO.js → chunk-Y55JBDO5.js} +405 -122
- package/dist/{chunk-XOXV5GKE.js → chunk-YD5GIKET.js} +17 -8
- package/dist/{chunk-XGDPUNND.js → chunk-YECAMM3D.js} +2 -2
- package/dist/{chunk-BO7Y52RY.js → chunk-YNFKXPEC.js} +7 -7
- package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
- package/dist/{chunk-M2WXEHER.js → chunk-ZA4VCIGV.js} +2 -2
- package/dist/cli/index.js +42 -40
- package/dist/{clio-7VB377CC.js → clio-QLICPCF5.js} +7 -7
- package/dist/{code-nav-YVLCYA7V.js → code-nav-IJR2DBPR.js} +9 -9
- package/dist/{components-UBWCQSRW.js → components-2TGAI2RC.js} +5 -6
- package/dist/{config-4HVOS65E.js → config-IUA6OYNS.js} +88 -81
- package/dist/{configure-PIWO7B24.js → configure-VEPX4NMX.js} +26 -25
- package/dist/{context-KQYIWPWT.js → context-2DKHWH2T.js} +60 -45
- package/dist/{context-IYEHL3WQ.js → context-4MPR7WKB.js} +78 -69
- package/dist/{context-N6ZE3LGJ.js → context-BOYF5EJM.js} +15 -11
- package/dist/{context-clear-G4OGZJDS.js → context-clear-S4ZJCQUX.js} +73 -65
- package/dist/context-map-COB37XXN.js +505 -0
- package/dist/{context-working-set-BWLF6LJP.js → context-working-set-3I3FYX6Y.js} +18 -17
- package/dist/detail-A7JAVSIG.js +98 -0
- package/dist/{dispatch-runner-2QQAITS3.js → dispatch-runner-RJ5I2F2O.js} +99 -75
- package/dist/{docs-PD3EXDKU.js → docs-SPOV3BAN.js} +3 -5
- package/dist/{doctor-LHBD36VU.js → doctor-DKICC2SN.js} +71 -48
- package/dist/{eval-C45FYRJ6.js → eval-OQOQUDHK.js} +308 -146
- package/dist/{eval-inventory-6DEJPLBF.js → eval-inventory-Y6QRFOH5.js} +4 -4
- package/dist/{evidence-6SHONYAF.js → evidence-4DQ25GUQ.js} +79 -175
- package/dist/evidence-4F5USFKH.js +208 -0
- package/dist/{evolve-KRKMV72X.js → evolve-GSS52E5J.js} +71 -67
- package/dist/{extensions-KPZ2UHBB.js → extensions-G7MFLYHT.js} +8 -9
- package/dist/{fleet-IVTCKDHT.js → fleet-Q37YHHAQ.js} +126 -118
- package/dist/{fleet-commands-EDWL3IT7.js → fleet-commands-G7E4N7SM.js} +16 -13
- package/dist/{fleet-decisions-YP3YEFGK.js → fleet-decisions-O7M6QBA2.js} +9 -8
- package/dist/{fleet-graph-ZFWKHY2M.js → fleet-graph-TOUBW6OW.js} +21 -20
- package/dist/{fleet-inspect-FVUNCBML.js → fleet-inspect-SW33JJNI.js} +65 -60
- package/dist/{fleet-preflight-UN5XED4R.js → fleet-preflight-CV2655TW.js} +4 -5
- package/dist/{fleet-validate-XOWC4HSX.js → fleet-validate-KESZX2YH.js} +25 -24
- package/dist/{fleet-verify-UN3SODEL.js → fleet-verify-UQPMTVE3.js} +66 -61
- package/dist/{fleet-view-TWHJKCN6.js → fleet-view-MN2VG4MR.js} +65 -60
- package/dist/{init-T2QORQ3Y.js → init-PXEXQSBF.js} +90 -82
- package/dist/{interop-IN5I2A66.js → interop-ZG5T62U3.js} +12 -13
- package/dist/inventory-C26CFDRR.js +101 -0
- package/dist/{library-LSCATDLZ.js → library-B2W4N74O.js} +29 -29
- package/dist/{memory-HYOKAGGJ.js → memory-YCANYS5A.js} +73 -69
- package/dist/{models-2GPMFYCM.js → models-GERTU3YI.js} +51 -47
- package/dist/{monitor-E4ASVUJH.js → monitor-CPNIUULB.js} +74 -67
- package/dist/{orchestrator-DDMPR3PY.js → orchestrator-J4BSH4WQ.js} +1288 -1606
- package/dist/{panes-E3RUXOW5.js → panes-BOHAEGYC.js} +4 -4
- package/dist/{panes-IXKLOKA2.js → panes-NXSLDQZ2.js} +10 -11
- package/dist/{paths-L7LGY6RN.js → paths-VSUWNC22.js} +6 -7
- package/dist/reset-TNWTB5LU.js +343 -0
- package/dist/{resources-OTRSN34L.js → resources-4PXNMD5G.js} +29 -22
- package/dist/{run-5DEYH5QK.js → run-D6XJ34CN.js} +132 -132
- package/dist/{share-IHWTLO3M.js → share-2NWMJJEE.js} +27 -27
- package/dist/{skills-IYMXMKW4.js → skills-KR7WON5G.js} +40 -33
- package/dist/{skills-eval-DROHSJAR.js → skills-eval-O2ZNOLDS.js} +81 -77
- package/dist/{skills-inventory-D7X4L4ZX.js → skills-inventory-ZZOUBK7O.js} +23 -22
- package/dist/{slash-commands-QBM7UZ3B.js → slash-commands-ZXPJD64J.js} +47 -37
- package/dist/{steer-Z5DO23FJ.js → steer-XA25PSCS.js} +4 -4
- package/dist/{support-U7QOWY26.js → support-7EMVWYG2.js} +6 -6
- package/dist/{targets-P2FUC4IL.js → targets-OMH2XCSN.js} +50 -49
- package/dist/tasks-IPAGMEIX.js +36 -0
- package/dist/{terminal-lease-YREJ3JX2.js → terminal-lease-C2J3JYRE.js} +4 -4
- package/dist/{tools-5B7RO6MV.js → tools-EFFEAIDP.js} +8 -9
- package/dist/{trace-YMGMUM6A.js → trace-FXMXUZUF.js} +7 -7
- package/dist/uninstall-HALS6BLF.js +407 -0
- package/dist/upgrade-MS72RJEP.js +306 -0
- package/dist/{usage-ME5MPXGX.js → usage-NHG6MCJM.js} +162 -108
- package/dist/{verifiers-BVZ7IWOO.js → verifiers-7AUNVXDY.js} +155 -22
- package/dist/{verify-5K7ZKQFC.js → verify-FWYGPKMR.js} +14 -12
- package/dist/{web-fetch-MPARV2K7.js → web-fetch-V4FKSDAV.js} +4 -4
- package/dist/{wiki-generate-F5W5QTYY.js → wiki-generate-743CIGJW.js} +99 -90
- package/dist/{with-panes-BYOJCLAM.js → with-panes-BDQEWBRT.js} +10 -10
- package/dist/worker/entry.js +72 -68
- package/docs/README.md +3 -2
- package/docs/architecture/acp.md +17 -0
- package/docs/architecture/artifact-placement.md +1 -0
- package/docs/architecture/artifact-versions.md +2 -2
- package/docs/architecture/context-engine.md +4 -0
- package/docs/architecture/dispatch-typed-intent.md +1 -1
- package/docs/architecture/evidence-and-memory.md +1 -1
- package/docs/architecture/middleware-and-components.md +1 -1
- package/docs/architecture/model-catalog.md +21 -10
- package/docs/architecture/observability.md +19 -2
- package/docs/architecture/prompt-envelope-and-tools.md +17 -5
- package/docs/architecture/provider-adapter-cookbook.md +63 -0
- package/docs/architecture/safety-model.md +25 -22
- package/docs/architecture/tui-design.md +1 -1
- package/docs/guide/built-in-agents.md +25 -11
- package/docs/guide/commands-and-modes.md +18 -3
- package/docs/guide/configuration-and-targets.md +100 -10
- package/docs/guide/configuration-reference.md +17 -7
- package/docs/guide/environment-variables.md +4 -2
- package/docs/guide/installation-and-lifecycle.md +37 -4
- package/docs/guide/proactive-memory.md +66 -55
- package/docs/guide/skills-marketplace.md +18 -0
- package/docs/guide/tool-usage.md +78 -3
- package/docs/history/config-knobs-audit.md +2 -2
- package/docs/process/development-pipeline.md +40 -2
- package/docs/process/eval-runner.md +67 -3
- package/docs/process/git-commit-provenance.md +15 -0
- package/docs/process/release-cut-checklist.md +207 -0
- package/docs/process/scientific-validation.md +18 -17
- package/evals/behavioral-machinery-support.ts +1 -0
- package/evals/behavioral-machinery.yaml +1 -1
- package/evals/behavioral-model.yaml +3 -2
- package/package.json +2 -2
- package/skills/README.md +7 -5
- package/skills/coding/ast-grep/SKILL.md +101 -30
- package/skills/coding/ast-grep/evals.md +26 -0
- package/skills/coding/coding-standards/SKILL.md +47 -2
- package/skills/coding/coding-standards/evals.md +23 -0
- package/skills/coding/prototype/SKILL.md +87 -28
- package/skills/coding/prototype/evals.md +19 -0
- package/skills/coding/tdd/SKILL.md +80 -53
- package/skills/coding/tdd/evals.md +20 -0
- package/skills/context/context-handoff/SKILL.md +43 -2
- package/skills/context/context-handoff/evals.md +44 -0
- package/skills/context/context-prime/SKILL.md +45 -15
- 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 +77 -63
- 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 +87 -64
- 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 +100 -51
- 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/planning/archify/SKILL.md +196 -0
- package/skills/planning/archify/evals.md +65 -0
- package/skills/planning/architecture/SKILL.md +61 -12
- package/skills/planning/architecture/evals.md +65 -0
- package/skills/planning/backlog/SKILL.md +130 -14
- package/skills/planning/backlog/evals.md +142 -0
- package/skills/planning/prd/SKILL.md +47 -6
- package/skills/planning/prd/evals.md +54 -0
- package/skills/planning/product-intent/SKILL.md +57 -2
- package/skills/planning/product-intent/evals.md +70 -0
- package/skills/planning/tech-spec/SKILL.md +53 -2
- package/skills/planning/tech-spec/evals.md +73 -0
- package/skills/registry.yaml +58 -50
- package/skills/remote.yaml +13 -0
- package/skills/research/arxiv-literature/SKILL.md +76 -18
- package/skills/research/arxiv-literature/evals.md +50 -0
- package/skills/research/experiment-protocol/SKILL.md +20 -1
- package/skills/research/experiment-protocol/evals.md +23 -0
- package/skills/research/scientific-debugging/SKILL.md +24 -1
- package/skills/research/scientific-debugging/evals.md +18 -0
- package/skills/research/scientific-modernization/SKILL.md +26 -1
- package/skills/research/scientific-modernization/evals.md +27 -0
- package/skills/skill-marketplace.json +63 -28
- package/skills/workflow/cut-it/SKILL.md +64 -5
- package/skills/workflow/cut-it/evals.md +101 -0
- package/skills/workflow/design-council/SKILL.md +112 -27
- package/skills/workflow/design-council/evals.md +161 -0
- package/skills/workflow/grill-me/SKILL.md +85 -10
- package/skills/workflow/grill-me/evals.md +153 -0
- package/skills/workflow/workflow-distiller/SKILL.md +76 -17
- package/skills/workflow/workflow-distiller/evals.md +118 -0
- package/src/cli/args.ts +0 -8
- 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 +1084 -529
- package/src/cli/context-map.ts +114 -0
- package/src/cli/context.ts +4 -0
- package/src/cli/doctor-state-size.ts +1 -12
- package/src/cli/doctor-validation-contract.ts +28 -0
- package/src/cli/doctor.ts +5 -0
- package/src/cli/evidence-detail.ts +1 -75
- package/src/cli/evidence-inventory.ts +1 -167
- package/src/cli/index.ts +3 -0
- 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/reset.ts +228 -106
- package/src/cli/run.ts +7 -4
- package/src/cli/select.ts +664 -0
- package/src/cli/skills.ts +9 -2
- package/src/cli/targets.ts +3 -0
- package/src/cli/tasks.ts +84 -0
- package/src/cli/uninstall.ts +233 -165
- package/src/cli/upgrade.ts +210 -150
- package/src/cli/usage.ts +92 -27
- package/src/cli/validate-model.ts +3 -3
- package/src/cli/verifiers.ts +147 -1
- package/src/cli/wiki-generate.ts +1 -0
- package/src/core/commit-attribution.ts +41 -1
- package/src/core/config.ts +56 -0
- package/src/core/external-diagnostic.ts +44 -0
- package/src/core/gateway-routing.ts +157 -0
- package/src/core/git-commit-attribution.ts +46 -3
- package/src/core/run-overrides.ts +0 -5
- package/src/core/safe-exec.ts +17 -2
- package/src/core/skill-activation.ts +92 -2
- package/src/core/tool-names.ts +5 -2
- package/src/domains/agents/builtins/architect.md +1 -1
- package/src/domains/agents/builtins/coder.md +1 -1
- package/src/domains/agents/builtins/documenter.md +1 -1
- package/src/domains/agents/builtins/git-master.md +1 -1
- package/src/domains/agents/builtins/provenance.md +7 -7
- package/src/domains/agents/builtins/tester.md +1 -1
- package/src/domains/agents/builtins/verifier.md +2 -2
- package/src/domains/agents/builtins/wiki-writer.md +4 -3
- package/src/domains/agents/builtins/world-knowledge.md +31 -0
- package/src/domains/agents/catalog.ts +1 -1
- package/src/domains/agents/result-contract.ts +70 -0
- package/src/domains/context/extension.ts +31 -7
- package/src/domains/context/refresh.ts +3 -0
- package/src/domains/context/wiki/frontmatter.ts +5 -2
- package/src/domains/context/wiki/generate.ts +6 -0
- package/src/domains/context/wiki/map-seed.ts +589 -0
- package/src/domains/context/wiki/plan.ts +2 -2
- package/src/domains/context/wiki/prompts.ts +43 -0
- package/src/domains/dispatch/active-route-planner.ts +4 -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 +1 -0
- package/src/domains/dispatch/capacity-lease.ts +17 -0
- package/src/domains/dispatch/code-step.ts +11 -4
- package/src/domains/dispatch/contract.ts +42 -8
- package/src/domains/dispatch/execution-scheduler.ts +2 -0
- package/src/domains/dispatch/extension.ts +184 -56
- package/src/domains/dispatch/fleet-commit-attribution.ts +5 -0
- package/src/domains/dispatch/fleet-run.ts +1 -0
- package/src/domains/dispatch/host-verification.ts +114 -13
- package/src/domains/dispatch/intent.ts +28 -18
- package/src/domains/dispatch/orphan-recovery.ts +2 -0
- package/src/domains/dispatch/receipt-integrity.ts +4 -0
- package/src/domains/dispatch/reservation-store.ts +5 -3
- package/src/domains/dispatch/state.ts +15 -2
- package/src/domains/dispatch/types.ts +20 -2
- package/src/domains/dispatch/worker-model-metadata.ts +38 -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 +17 -11
- package/src/domains/eval/runners/context-index.ts +2 -7
- package/src/domains/eval/runners/context-init.ts +3 -6
- package/src/domains/eval/runners/external-command.ts +29 -11
- package/src/domains/eval/schema/suite.ts +28 -0
- package/src/domains/eval/schema/verdict.ts +2 -2
- package/src/domains/eval/suites/resolve.ts +13 -1
- package/src/domains/eval/suites/run.ts +24 -3
- package/src/domains/evidence/build.ts +102 -15
- package/src/domains/evidence/detail.ts +69 -0
- package/src/domains/evidence/eval.ts +13 -1
- package/src/domains/evidence/finish-contract-map.ts +5 -1
- package/src/domains/evidence/inventory.ts +167 -0
- package/src/domains/evidence/store.ts +16 -0
- package/src/domains/evidence/types.ts +12 -0
- package/src/domains/extensions/resources.ts +7 -0
- package/src/domains/interop/registry.ts +6 -2
- package/src/domains/interop/types.ts +4 -0
- package/src/domains/lifecycle/migrations/index.ts +4 -0
- package/src/domains/memory/task-memory-policy.ts +70 -26
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- package/src/domains/middleware/index.ts +0 -1
- package/src/domains/middleware/marketplace-offer.ts +22 -35
- package/src/domains/middleware/memory-intervention.ts +127 -32
- package/src/domains/middleware/memory-step-endpoint.ts +3 -2
- package/src/domains/middleware/runtime.ts +7 -3
- package/src/domains/middleware/skills-reminder.ts +31 -2
- package/src/domains/mux/detect.ts +3 -6
- package/src/domains/observability/accountability.ts +15 -1
- package/src/domains/observability/compaction-usage.ts +118 -0
- package/src/domains/observability/contract.ts +52 -7
- package/src/domains/observability/cost.ts +1 -1
- package/src/domains/observability/evidence-index.ts +10 -0
- package/src/domains/observability/extension.ts +15 -6
- package/src/domains/observability/out-of-turn-usage.ts +52 -21
- package/src/domains/observability/projection.ts +394 -45
- package/src/{interactive → domains/observability}/worker-progress.ts +3 -3
- package/src/domains/prompts/fragments/operating/contract.md +2 -0
- package/src/domains/prompts/fragments/wiki/page.md +8 -0
- package/src/domains/providers/contract.ts +4 -1
- package/src/domains/providers/extension.ts +40 -9
- package/src/domains/providers/model-capabilities.ts +9 -0
- package/src/domains/providers/model-discovery.ts +3 -4
- package/src/domains/providers/model-runtime-capabilities.ts +15 -5
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +48 -26
- package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
- package/src/domains/providers/runtimes/claude/claude-code.ts +9 -0
- 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/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/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 +7 -0
- package/src/domains/resources/skills/marketplace.ts +63 -11
- package/src/domains/safety/action-classifier.ts +7 -0
- package/src/domains/safety/autonomy.ts +15 -0
- package/src/domains/safety/default-path-policy.ts +2 -0
- package/src/domains/safety/finish-contract-registration.ts +29 -14
- package/src/domains/safety/finish-contract.ts +252 -40
- package/src/domains/safety/index.ts +21 -1
- package/src/domains/safety/path-policy.ts +1 -1
- package/src/domains/safety/policy-engine.ts +60 -17
- package/src/domains/safety/protected-artifacts.ts +191 -88
- package/src/domains/safety/rigor.ts +53 -39
- package/src/domains/safety/run-effects.ts +2 -22
- package/src/domains/safety/skill-authority.ts +55 -0
- package/src/domains/safety/validation-contract.ts +388 -0
- package/src/domains/session/archive-readers.ts +10 -1
- package/src/domains/session/compaction/compact.ts +72 -22
- package/src/domains/session/decision-board.ts +101 -2
- package/src/domains/session/entries.ts +50 -7
- package/src/domains/session/extension.ts +4 -4
- package/src/domains/session/handoff.ts +2 -1
- package/src/domains/session/manager.ts +2 -3
- package/src/domains/session/task-board.ts +14 -1
- package/src/domains/session/tree/fork.ts +1 -2
- package/src/domains/session/tree/navigator.ts +1 -1
- package/src/domains/session/usage.ts +3 -3
- package/src/domains/user-tasks/acceptance.ts +56 -0
- package/src/domains/user-tasks/active-acceptance.ts +40 -0
- package/src/domains/user-tasks/store.ts +34 -3
- package/src/engine/acp/adapter.ts +24 -6
- package/src/engine/acp/server.ts +21 -4
- package/src/engine/acp/transport.ts +53 -8
- package/src/engine/acp/types.ts +4 -0
- 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/ollama-native.ts +15 -0
- package/src/engine/apis/openai-completions.ts +117 -14
- package/src/engine/claude/subprocess-runtime.ts +107 -60
- package/src/engine/external-subprocess.ts +122 -6
- package/src/entry/background-model-metadata.ts +18 -0
- package/src/entry/compaction-prompt.ts +57 -0
- package/src/entry/orchestrator.ts +416 -218
- package/src/entry/task-memory-lifecycle.ts +35 -0
- package/src/interactive/chat-loop-messages.ts +13 -4
- package/src/interactive/chat-loop.ts +65 -2
- package/src/interactive/chat-renderer.ts +1 -0
- package/src/interactive/cost-overlay.ts +26 -2
- package/src/interactive/dispatch-board.ts +46 -717
- package/src/interactive/fleet-run-preview.ts +2 -1
- package/src/interactive/interactive-application.ts +3 -2
- package/src/interactive/interactive-presentation.ts +55 -12
- package/src/interactive/interactive-slash-runtime.ts +4 -2
- package/src/interactive/oracle.ts +5 -2
- package/src/interactive/overlays/fleet-run-approval.ts +3 -2
- package/src/interactive/overlays/message-picker.ts +2 -2
- package/src/interactive/overlays/settings.ts +2 -2
- package/src/interactive/overlays/tree-selector.ts +2 -2
- package/src/interactive/renderers/branch-summary.ts +1 -1
- package/src/interactive/renderers/worker-entry.ts +32 -0
- package/src/interactive/slash-autocomplete.ts +4 -6
- package/src/interactive/slash-commands.ts +49 -45
- package/src/interactive/slash-spec.ts +28 -0
- package/src/interactive/theme/labels.ts +19 -13
- package/src/interactive/turn-context.ts +9 -5
- 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/view/artifacts.ts +2 -0
- package/src/interactive/worker-receipts.ts +1 -0
- package/src/interactive/worker-stream.ts +13 -4
- package/src/tools/bootstrap.ts +4 -0
- package/src/tools/builtin-tool-catalog.ts +31 -0
- package/src/tools/compete-worktrees.ts +7 -1
- package/src/tools/context/index.ts +30 -9
- package/src/tools/core-bootstrap.ts +16 -0
- package/src/tools/decide.ts +136 -0
- package/src/tools/dispatch-admission.ts +21 -0
- package/src/tools/dispatch-arguments.ts +1 -0
- package/src/tools/dispatch-event-text.ts +10 -0
- package/src/tools/dispatch-plan.ts +6 -2
- package/src/tools/dispatch-runner.ts +27 -1
- package/src/tools/dispatch-types.ts +6 -0
- package/src/tools/evidence.ts +96 -0
- package/src/tools/limitation.ts +76 -0
- package/src/tools/policy.ts +9 -0
- package/src/tools/presentation.ts +3 -0
- package/src/tools/registry.ts +11 -5
- package/src/tools/result-shaping.ts +17 -5
- package/src/tools/task-worktree.ts +13 -3
- package/src/tools/tasks.ts +10 -1
- package/src/tools/verify/authoring.ts +170 -83
- package/src/tools/verify/catalog.ts +122 -5
- package/src/tools/verify/index.ts +2 -1
- package/src/tools/verify/numeric.ts +298 -0
- package/src/tools/verify/perf.ts +143 -0
- package/src/tools/verify/scripts.ts +229 -2
- package/src/tools/worker-evidence.ts +3 -1
- package/src/worker/spec-contract.ts +4 -0
- package/dist/chunk-2Z2IKEXI.js +0 -1554
- package/dist/chunk-RVG5JXAL.js +0 -41
- package/dist/chunk-T56WDKA5.js +0 -183
- package/dist/chunk-VN3SHNBN.js +0 -313
- package/dist/chunk-VPKWYKEY.js +0 -169
- package/dist/reset-OAQP3W4O.js +0 -230
- package/dist/uninstall-N34PCTGJ.js +0 -331
- package/dist/upgrade-PXK3S2YM.js +0 -325
|
@@ -3,29 +3,26 @@ 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-
|
|
10
|
+
} from "./chunk-NZMNUPZZ.js";
|
|
14
11
|
import {
|
|
15
|
-
|
|
16
|
-
} from "./chunk-
|
|
12
|
+
credentialsPresent
|
|
13
|
+
} from "./chunk-2JH2WHGE.js";
|
|
17
14
|
import {
|
|
18
15
|
readSettings
|
|
19
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-GHS5EBTQ.js";
|
|
20
17
|
import {
|
|
21
18
|
warnLegacyNaming
|
|
22
19
|
} from "./chunk-D7E7WCDF.js";
|
|
20
|
+
import {
|
|
21
|
+
getSharedBus
|
|
22
|
+
} from "./chunk-PMZVFWSR.js";
|
|
23
23
|
import {
|
|
24
24
|
BusChannels
|
|
25
25
|
} from "./chunk-F4EKGO4N.js";
|
|
26
|
-
import {
|
|
27
|
-
sleep
|
|
28
|
-
} from "./chunk-EBY63B7G.js";
|
|
29
26
|
import {
|
|
30
27
|
CLIO_CONTEXT_WINDOW_WARN_BELOW,
|
|
31
28
|
CLIO_MIN_CONTEXT_WINDOW,
|
|
@@ -42,31 +39,26 @@ import {
|
|
|
42
39
|
registerBuiltinRuntimes,
|
|
43
40
|
requestLmStudioJson,
|
|
44
41
|
resolveLmStudioInstance
|
|
45
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-6OSVSQL5.js";
|
|
43
|
+
import {
|
|
44
|
+
sleep
|
|
45
|
+
} from "./chunk-EBY63B7G.js";
|
|
46
46
|
import {
|
|
47
47
|
listKnownModelsForRuntime
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-26QSH3EJ.js";
|
|
49
49
|
import {
|
|
50
50
|
authNotRequiredStatus,
|
|
51
51
|
openAuthStorage,
|
|
52
52
|
registerClioOAuthProviders,
|
|
53
53
|
resolveAuthTarget,
|
|
54
54
|
targetRequiresAuth
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-ID64D7PE.js";
|
|
56
56
|
import {
|
|
57
57
|
withStateFileLock
|
|
58
58
|
} from "./chunk-IKCO5N3L.js";
|
|
59
59
|
import {
|
|
60
60
|
require_dist
|
|
61
61
|
} from "./chunk-APJ265NV.js";
|
|
62
|
-
import {
|
|
63
|
-
clioCacheDir,
|
|
64
|
-
clioConfigDir,
|
|
65
|
-
clioStateDir,
|
|
66
|
-
clioStatePath,
|
|
67
|
-
resolveClioDirs,
|
|
68
|
-
stateRootRemoved
|
|
69
|
-
} from "./chunk-BYP5D4HI.js";
|
|
70
62
|
import {
|
|
71
63
|
safeResourceWrite
|
|
72
64
|
} from "./chunk-WEPFGWHJ.js";
|
|
@@ -78,13 +70,21 @@ import {
|
|
|
78
70
|
getCatalogModelForRuntime,
|
|
79
71
|
mergeCapabilities,
|
|
80
72
|
resolveCostProvenance
|
|
81
|
-
} from "./chunk-
|
|
73
|
+
} from "./chunk-5OIVVPHF.js";
|
|
82
74
|
import {
|
|
83
75
|
activateExternalPluginApiBridge,
|
|
84
76
|
calculateEngineCost,
|
|
85
77
|
ensurePiAiRegistered,
|
|
86
78
|
registerEngineApiProvider
|
|
87
|
-
} 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";
|
|
88
88
|
import {
|
|
89
89
|
__toESM,
|
|
90
90
|
init_esm_shims
|
|
@@ -760,9 +760,6 @@ function runOverrides(env = process.env) {
|
|
|
760
760
|
if (typeof maxContextTokens === "number" && Number.isInteger(maxContextTokens) && maxContextTokens > 0) {
|
|
761
761
|
out.maxContextTokens = maxContextTokens;
|
|
762
762
|
}
|
|
763
|
-
if (typeof record.kvCacheMode === "string" && record.kvCacheMode.length > 0) {
|
|
764
|
-
out.kvCacheMode = record.kvCacheMode;
|
|
765
|
-
}
|
|
766
763
|
const sampling = record.sampling;
|
|
767
764
|
if (sampling !== null && typeof sampling === "object" && !Array.isArray(sampling)) {
|
|
768
765
|
const numeric = {};
|
|
@@ -797,6 +794,12 @@ function applyModelCapabilityPatch(model, caps) {
|
|
|
797
794
|
if (typeof caps.contextWindow === "number") model.contextWindow = caps.contextWindow;
|
|
798
795
|
if (typeof caps.maxTokens === "number") model.maxTokens = caps.maxTokens;
|
|
799
796
|
if (typeof caps.reasoning === "boolean") model.reasoning = caps.reasoning;
|
|
797
|
+
if (model.clioCoder || caps.thinkingControlRuntime !== void 0) {
|
|
798
|
+
const metadata2 = { ...model.clioCoder };
|
|
799
|
+
delete metadata2.thinkingControlRuntime;
|
|
800
|
+
if (caps.thinkingControlRuntime !== void 0) metadata2.thinkingControlRuntime = caps.thinkingControlRuntime;
|
|
801
|
+
model.clioCoder = metadata2;
|
|
802
|
+
}
|
|
800
803
|
return model;
|
|
801
804
|
}
|
|
802
805
|
function applyReasoningResolution(caps, kbHit, detectedReasoning) {
|
|
@@ -1068,7 +1071,8 @@ function effectiveThinkingLevel(configured, available) {
|
|
|
1068
1071
|
const fallback = available[0] ?? "off";
|
|
1069
1072
|
if (!configured) return fallback;
|
|
1070
1073
|
if (available.includes(configured)) return configured;
|
|
1071
|
-
if (configured === "max" && available.includes("
|
|
1074
|
+
if ((configured === "max" || configured === "high" && !available.includes("high")) && available.includes("xhigh"))
|
|
1075
|
+
return "xhigh";
|
|
1072
1076
|
if ((configured === "high" || configured === "xhigh" || configured === "max") && available.includes("high")) {
|
|
1073
1077
|
return "high";
|
|
1074
1078
|
}
|
|
@@ -1263,7 +1267,12 @@ function resolveModelRuntimeCapabilities(input) {
|
|
|
1263
1267
|
family,
|
|
1264
1268
|
capabilities: input.capabilities,
|
|
1265
1269
|
thinking,
|
|
1266
|
-
request: resolveRequestCapability(
|
|
1270
|
+
request: resolveRequestCapability(
|
|
1271
|
+
thinking,
|
|
1272
|
+
parser,
|
|
1273
|
+
input.runtimeId === "litellm" ? input.capabilities.thinkingControlRuntime ?? input.runtimeId : input.runtimeId,
|
|
1274
|
+
quirks
|
|
1275
|
+
),
|
|
1267
1276
|
response: {
|
|
1268
1277
|
parser,
|
|
1269
1278
|
stripTokenizerSentinels: true
|
|
@@ -1329,6 +1338,7 @@ function thinkingFormatFromModelApi(api) {
|
|
|
1329
1338
|
}
|
|
1330
1339
|
function capabilitiesFromModel(model) {
|
|
1331
1340
|
const format = model.compat?.thinkingFormat ?? thinkingFormatFromModelApi(model.api);
|
|
1341
|
+
const controlRuntime = (model.clioCoder ?? model.clio)?.thinkingControlRuntime;
|
|
1332
1342
|
const caps = {
|
|
1333
1343
|
chat: true,
|
|
1334
1344
|
tools: true,
|
|
@@ -1339,7 +1349,8 @@ function capabilitiesFromModel(model) {
|
|
|
1339
1349
|
rerank: false,
|
|
1340
1350
|
fim: false,
|
|
1341
1351
|
contextWindow: model.contextWindow,
|
|
1342
|
-
maxTokens: model.maxTokens
|
|
1352
|
+
maxTokens: model.maxTokens,
|
|
1353
|
+
...controlRuntime ? { thinkingControlRuntime: controlRuntime } : {}
|
|
1343
1354
|
};
|
|
1344
1355
|
if (format === "qwen-chat-template" || format === "openrouter" || format === "zai" || format === "anthropic-extended" || format === "deepseek-r1" || format === "openai-codex" || format === "harmony") {
|
|
1345
1356
|
caps.thinkingFormat = format;
|
|
@@ -1411,6 +1422,21 @@ function normalizedModels(models) {
|
|
|
1411
1422
|
}
|
|
1412
1423
|
return out;
|
|
1413
1424
|
}
|
|
1425
|
+
function normalizedLabels(models, labels) {
|
|
1426
|
+
if (typeof labels !== "object" || labels === null || Array.isArray(labels)) return void 0;
|
|
1427
|
+
const source = labels;
|
|
1428
|
+
const out = {};
|
|
1429
|
+
for (const id of models) {
|
|
1430
|
+
const label = source[id];
|
|
1431
|
+
if (typeof label !== "string") continue;
|
|
1432
|
+
const trimmed = label.trim();
|
|
1433
|
+
if (trimmed.length === 0 || trimmed.length > TARGET_MODEL_CACHE_MAX_MODEL_ID_CHARS || /[\r\n\0]/u.test(trimmed)) {
|
|
1434
|
+
continue;
|
|
1435
|
+
}
|
|
1436
|
+
out[id] = trimmed;
|
|
1437
|
+
}
|
|
1438
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
1439
|
+
}
|
|
1414
1440
|
function parseSnapshot(value) {
|
|
1415
1441
|
if (typeof value !== "object" || value === null || Array.isArray(value)) return null;
|
|
1416
1442
|
const row = value;
|
|
@@ -1422,7 +1448,7 @@ function parseSnapshot(value) {
|
|
|
1422
1448
|
if (typeof row.observedAt !== "string" || !Number.isFinite(Date.parse(row.observedAt))) return null;
|
|
1423
1449
|
const models = normalizedModels(row.models);
|
|
1424
1450
|
if (models.length !== row.models.length) return null;
|
|
1425
|
-
|
|
1451
|
+
const snapshot = {
|
|
1426
1452
|
version: TARGET_MODEL_CACHE_VERSION,
|
|
1427
1453
|
targetId: row.targetId,
|
|
1428
1454
|
runtimeId: row.runtimeId,
|
|
@@ -1430,6 +1456,9 @@ function parseSnapshot(value) {
|
|
|
1430
1456
|
models,
|
|
1431
1457
|
observedAt: row.observedAt
|
|
1432
1458
|
};
|
|
1459
|
+
const modelLabels = normalizedLabels(models, row.modelLabels);
|
|
1460
|
+
if (modelLabels !== void 0) snapshot.modelLabels = modelLabels;
|
|
1461
|
+
return snapshot;
|
|
1433
1462
|
}
|
|
1434
1463
|
function readTargetModelSnapshot(target, options = {}) {
|
|
1435
1464
|
const path = targetModelSnapshotPath(target.id, options.cacheDir);
|
|
@@ -1458,6 +1487,8 @@ function recordTargetModelSnapshot(target, models, options = {}) {
|
|
|
1458
1487
|
models: normalizedModels(models),
|
|
1459
1488
|
observedAt: new Date(options.nowMs ?? Date.now()).toISOString()
|
|
1460
1489
|
};
|
|
1490
|
+
const modelLabels = normalizedLabels(snapshot.models, options.modelLabels);
|
|
1491
|
+
if (modelLabels !== void 0) snapshot.modelLabels = modelLabels;
|
|
1461
1492
|
try {
|
|
1462
1493
|
safeResourceWrite(targetModelSnapshotPath(target.id, options.cacheDir), `${JSON.stringify(snapshot, null, 2)}
|
|
1463
1494
|
`, {
|
|
@@ -1515,8 +1546,7 @@ function modelResidencyForStatus(status, modelId) {
|
|
|
1515
1546
|
}
|
|
1516
1547
|
}
|
|
1517
1548
|
function hasLiveModelCatalog(status) {
|
|
1518
|
-
|
|
1519
|
-
return status.discoveredModelsSource === void 0 && status.discoveredModels.length > 0;
|
|
1549
|
+
return status.discoveredModelsSource === "probe" || status.discoveredModelsSource === "cache";
|
|
1520
1550
|
}
|
|
1521
1551
|
function modelCandidatesForStatus(status) {
|
|
1522
1552
|
const configured = uniqueModels(status.target.wireModels ?? []);
|
|
@@ -1531,6 +1561,7 @@ function modelCandidatesForStatus(status) {
|
|
|
1531
1561
|
const state = status.discoveredModelStates?.[trimmed];
|
|
1532
1562
|
out.push({
|
|
1533
1563
|
id: trimmed,
|
|
1564
|
+
...status.discoveredModelLabels?.[trimmed] ? { label: status.discoveredModelLabels[trimmed] } : {},
|
|
1534
1565
|
source,
|
|
1535
1566
|
...state ? { loadState: state.state } : {},
|
|
1536
1567
|
...state?.detail ? { loadStateDetail: state.detail } : {}
|
|
@@ -2408,6 +2439,7 @@ function mergeSamplingOverride(profile, override = runSamplingOverrides()) {
|
|
|
2408
2439
|
|
|
2409
2440
|
// src/engine/apis/ollama-native.ts
|
|
2410
2441
|
var REASONING_CHARS_PER_TOKEN = 4;
|
|
2442
|
+
var ownedModelsByTarget = /* @__PURE__ */ new Map();
|
|
2411
2443
|
function clioQuirks(model) {
|
|
2412
2444
|
return model.clioCoder?.quirks;
|
|
2413
2445
|
}
|
|
@@ -2573,7 +2605,10 @@ async function listResidentOllamaModels(client) {
|
|
|
2573
2605
|
});
|
|
2574
2606
|
}
|
|
2575
2607
|
async function unloadOllamaModel(baseUrl, modelId, headers) {
|
|
2608
|
+
const owned = ownedModelsByTarget.get(residencyTargetKey("ollama-native", baseUrl));
|
|
2609
|
+
if (!owned?.has(modelId)) return;
|
|
2576
2610
|
await ollamaEvictClient(baseUrl, headers).generate({ model: modelId, prompt: "", keep_alive: 0, stream: false });
|
|
2611
|
+
owned.delete(modelId);
|
|
2577
2612
|
}
|
|
2578
2613
|
function mapStopReason(reason, hadToolCall) {
|
|
2579
2614
|
if (hadToolCall) return "toolUse";
|
|
@@ -2729,8 +2764,19 @@ function runStream(model, context, options, thinkingLevel) {
|
|
|
2729
2764
|
else emitText(segment.content);
|
|
2730
2765
|
}
|
|
2731
2766
|
};
|
|
2767
|
+
let recordedOwnership = false;
|
|
2732
2768
|
for await (const chunk of iterator) {
|
|
2733
2769
|
const response = chunk;
|
|
2770
|
+
if (!recordedOwnership && model.baseUrl) {
|
|
2771
|
+
const targetKey = residencyTargetKey("ollama-native", model.baseUrl);
|
|
2772
|
+
let owned = ownedModelsByTarget.get(targetKey);
|
|
2773
|
+
if (!owned) {
|
|
2774
|
+
owned = /* @__PURE__ */ new Set();
|
|
2775
|
+
ownedModelsByTarget.set(targetKey, owned);
|
|
2776
|
+
}
|
|
2777
|
+
owned.add(response.model || model.id);
|
|
2778
|
+
recordedOwnership = true;
|
|
2779
|
+
}
|
|
2734
2780
|
const msg = response.message;
|
|
2735
2781
|
if (msg?.thinking && msg.thinking.length > 0) {
|
|
2736
2782
|
emitThinking(msg.thinking);
|
|
@@ -2796,6 +2842,115 @@ import {
|
|
|
2796
2842
|
} from "@earendil-works/pi-ai";
|
|
2797
2843
|
import { openAICompletionsApi } from "@earendil-works/pi-ai/api/openai-completions.lazy";
|
|
2798
2844
|
|
|
2845
|
+
// src/core/gateway-routing.ts
|
|
2846
|
+
init_esm_shims();
|
|
2847
|
+
function liteLLMRouteFailureMessage(errorMessage, targetId, modelId) {
|
|
2848
|
+
const providerMessage = errorMessage?.trim() || "LiteLLM request failed.";
|
|
2849
|
+
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.`;
|
|
2850
|
+
return providerMessage.includes(advice) ? providerMessage : `${providerMessage}
|
|
2851
|
+
|
|
2852
|
+
${advice}`;
|
|
2853
|
+
}
|
|
2854
|
+
function nonEmptyString(value) {
|
|
2855
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
|
|
2856
|
+
}
|
|
2857
|
+
function nonnegativeNumber(value) {
|
|
2858
|
+
if (typeof value === "number" && Number.isFinite(value) && value >= 0) return value;
|
|
2859
|
+
if (typeof value !== "string" || value.trim().length === 0) return void 0;
|
|
2860
|
+
const parsed = Number(value);
|
|
2861
|
+
return Number.isFinite(parsed) && parsed >= 0 ? parsed : void 0;
|
|
2862
|
+
}
|
|
2863
|
+
function nonnegativeInteger(value) {
|
|
2864
|
+
const parsed = nonnegativeNumber(value);
|
|
2865
|
+
return parsed === void 0 ? void 0 : Math.floor(parsed);
|
|
2866
|
+
}
|
|
2867
|
+
function apiBaseHost(value) {
|
|
2868
|
+
const raw = nonEmptyString(value);
|
|
2869
|
+
if (raw === void 0) return void 0;
|
|
2870
|
+
try {
|
|
2871
|
+
return new URL(raw).host || void 0;
|
|
2872
|
+
} catch {
|
|
2873
|
+
return void 0;
|
|
2874
|
+
}
|
|
2875
|
+
}
|
|
2876
|
+
function storedApiBaseHost(value) {
|
|
2877
|
+
const raw = nonEmptyString(value);
|
|
2878
|
+
if (raw === void 0) return void 0;
|
|
2879
|
+
try {
|
|
2880
|
+
return new URL(raw.includes("://") ? raw : `http://${raw}`).host || void 0;
|
|
2881
|
+
} catch {
|
|
2882
|
+
return void 0;
|
|
2883
|
+
}
|
|
2884
|
+
}
|
|
2885
|
+
function liteLLMGatewayRoutingFromHeaders(headers) {
|
|
2886
|
+
const callId = nonEmptyString(headers.get("x-litellm-call-id"));
|
|
2887
|
+
const modelGroup = nonEmptyString(headers.get("x-litellm-model-group"));
|
|
2888
|
+
const modelName = nonEmptyString(headers.get("x-litellm-model-name"));
|
|
2889
|
+
const host = apiBaseHost(headers.get("x-litellm-model-api-base"));
|
|
2890
|
+
const deploymentId = nonEmptyString(headers.get("x-litellm-model-id"));
|
|
2891
|
+
const attemptedFallbacks = nonnegativeInteger(headers.get("x-litellm-attempted-fallbacks"));
|
|
2892
|
+
const attemptedRetries = nonnegativeInteger(headers.get("x-litellm-attempted-retries"));
|
|
2893
|
+
const overheadMs = nonnegativeNumber(headers.get("x-litellm-overhead-duration-ms"));
|
|
2894
|
+
const responseDurationMs = nonnegativeNumber(headers.get("x-litellm-response-duration-ms"));
|
|
2895
|
+
const version = nonEmptyString(headers.get("x-litellm-version"));
|
|
2896
|
+
const observation = {
|
|
2897
|
+
gateway: "litellm",
|
|
2898
|
+
...callId !== void 0 ? { callId } : {},
|
|
2899
|
+
...modelGroup !== void 0 ? { modelGroup } : {},
|
|
2900
|
+
...modelName !== void 0 ? { modelName } : {},
|
|
2901
|
+
...host !== void 0 ? { apiBaseHost: host } : {},
|
|
2902
|
+
...deploymentId !== void 0 ? { deploymentId } : {},
|
|
2903
|
+
...attemptedFallbacks !== void 0 ? { attemptedFallbacks } : {},
|
|
2904
|
+
...attemptedRetries !== void 0 ? { attemptedRetries } : {},
|
|
2905
|
+
...overheadMs !== void 0 ? { overheadMs } : {},
|
|
2906
|
+
...responseDurationMs !== void 0 ? { responseDurationMs } : {},
|
|
2907
|
+
...version !== void 0 ? { version } : {}
|
|
2908
|
+
};
|
|
2909
|
+
return Object.keys(observation).length > 1 ? observation : null;
|
|
2910
|
+
}
|
|
2911
|
+
function gatewayRoutingObservationFromRecord(record) {
|
|
2912
|
+
const value = record.gatewayRouting;
|
|
2913
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) return null;
|
|
2914
|
+
const raw = value;
|
|
2915
|
+
if (raw.gateway !== "litellm") return null;
|
|
2916
|
+
const callId = nonEmptyString(raw.callId);
|
|
2917
|
+
const modelGroup = nonEmptyString(raw.modelGroup);
|
|
2918
|
+
const modelName = nonEmptyString(raw.modelName);
|
|
2919
|
+
const host = storedApiBaseHost(raw.apiBaseHost);
|
|
2920
|
+
const deploymentId = nonEmptyString(raw.deploymentId);
|
|
2921
|
+
const attemptedFallbacks = nonnegativeInteger(raw.attemptedFallbacks);
|
|
2922
|
+
const attemptedRetries = nonnegativeInteger(raw.attemptedRetries);
|
|
2923
|
+
const overheadMs = nonnegativeNumber(raw.overheadMs);
|
|
2924
|
+
const responseDurationMs = nonnegativeNumber(raw.responseDurationMs);
|
|
2925
|
+
const version = nonEmptyString(raw.version);
|
|
2926
|
+
const observation = {
|
|
2927
|
+
gateway: "litellm",
|
|
2928
|
+
...callId !== void 0 ? { callId } : {},
|
|
2929
|
+
...modelGroup !== void 0 ? { modelGroup } : {},
|
|
2930
|
+
...modelName !== void 0 ? { modelName } : {},
|
|
2931
|
+
...host !== void 0 ? { apiBaseHost: host } : {},
|
|
2932
|
+
...deploymentId !== void 0 ? { deploymentId } : {},
|
|
2933
|
+
...attemptedFallbacks !== void 0 ? { attemptedFallbacks } : {},
|
|
2934
|
+
...attemptedRetries !== void 0 ? { attemptedRetries } : {},
|
|
2935
|
+
...overheadMs !== void 0 ? { overheadMs } : {},
|
|
2936
|
+
...responseDurationMs !== void 0 ? { responseDurationMs } : {},
|
|
2937
|
+
...version !== void 0 ? { version } : {}
|
|
2938
|
+
};
|
|
2939
|
+
return Object.keys(observation).length > 1 ? observation : null;
|
|
2940
|
+
}
|
|
2941
|
+
function gatewayRoutingObservationLabel(observation) {
|
|
2942
|
+
const route = [observation.modelGroup, observation.modelName].filter(Boolean).join("->");
|
|
2943
|
+
const destination = [route, observation.apiBaseHost ? `@${observation.apiBaseHost}` : ""].filter(Boolean).join("");
|
|
2944
|
+
const parts = [
|
|
2945
|
+
"gateway=litellm",
|
|
2946
|
+
...destination ? [`route=${destination}`] : [],
|
|
2947
|
+
...observation.attemptedFallbacks !== void 0 ? [`fallbacks=${observation.attemptedFallbacks}`] : [],
|
|
2948
|
+
...observation.attemptedRetries !== void 0 ? [`retries=${observation.attemptedRetries}`] : [],
|
|
2949
|
+
...observation.overheadMs !== void 0 ? [`overhead_ms=${observation.overheadMs}`] : []
|
|
2950
|
+
];
|
|
2951
|
+
return parts.join(" ");
|
|
2952
|
+
}
|
|
2953
|
+
|
|
2799
2954
|
// src/engine/harmony-response.ts
|
|
2800
2955
|
init_esm_shims();
|
|
2801
2956
|
var START = "<|start|>";
|
|
@@ -3443,7 +3598,10 @@ function observeResponseModelIdBytes(chunk, capture, flush = false) {
|
|
|
3443
3598
|
}
|
|
3444
3599
|
if (captureCanStopEarly(capture) || flush) capture.decoder = null;
|
|
3445
3600
|
}
|
|
3446
|
-
function captureResponseModelId(response, capture) {
|
|
3601
|
+
function captureResponseModelId(response, capture, model) {
|
|
3602
|
+
if (runtimeMetadata(model)?.runtimeId === "litellm") {
|
|
3603
|
+
capture.gatewayRouting = liteLLMGatewayRoutingFromHeaders(response.headers);
|
|
3604
|
+
}
|
|
3447
3605
|
if (!response.body || !response.headers.get("content-type")?.toLowerCase().includes("text/event-stream")) {
|
|
3448
3606
|
return response;
|
|
3449
3607
|
}
|
|
@@ -3473,13 +3631,14 @@ function withResponseModelIdCapture(model, options, sourceFactory) {
|
|
|
3473
3631
|
modelIdDone: false,
|
|
3474
3632
|
backendTimings: null,
|
|
3475
3633
|
backendTimingsSource: backendTimingsSourceForModel(model),
|
|
3634
|
+
gatewayRouting: null,
|
|
3476
3635
|
buffer: "",
|
|
3477
3636
|
decoder: new TextDecoder()
|
|
3478
3637
|
};
|
|
3479
3638
|
const fetchImpl = options.fetch ?? ((input, init) => globalThis.fetch(input, init));
|
|
3480
3639
|
const capturedOptions = {
|
|
3481
3640
|
...options,
|
|
3482
|
-
fetch: async (input, init) => captureResponseModelId(await fetchImpl(input, init), capture)
|
|
3641
|
+
fetch: async (input, init) => captureResponseModelId(await fetchImpl(input, init), capture, model)
|
|
3483
3642
|
};
|
|
3484
3643
|
const source = sourceFactory(capturedOptions);
|
|
3485
3644
|
const annotated = createAssistantMessageEventStream3();
|
|
@@ -3489,9 +3648,11 @@ function withResponseModelIdCapture(model, options, sourceFactory) {
|
|
|
3489
3648
|
const observation = capture.observed ? capture.reportedModelId === null ? { state: "not-reported" } : { state: "reported", reportedModelId: capture.reportedModelId } : { state: "not-observed" };
|
|
3490
3649
|
if (event.type === "done") {
|
|
3491
3650
|
event.message.responseModelIdObservation = observation;
|
|
3651
|
+
if (capture.gatewayRouting !== null) event.message.gatewayRouting = capture.gatewayRouting;
|
|
3492
3652
|
if (capture.backendTimings !== null) event.message.backendTimings = capture.backendTimings;
|
|
3493
3653
|
} else if (event.type === "error") {
|
|
3494
3654
|
event.error.responseModelIdObservation = observation;
|
|
3655
|
+
if (capture.gatewayRouting !== null) event.error.gatewayRouting = capture.gatewayRouting;
|
|
3495
3656
|
if (capture.backendTimings !== null) event.error.backendTimings = capture.backendTimings;
|
|
3496
3657
|
}
|
|
3497
3658
|
annotated.push(event);
|
|
@@ -3504,6 +3665,26 @@ function withResponseModelIdCapture(model, options, sourceFactory) {
|
|
|
3504
3665
|
})();
|
|
3505
3666
|
return annotated;
|
|
3506
3667
|
}
|
|
3668
|
+
function withLiteLLMRouteFailureAdvice(model, source) {
|
|
3669
|
+
const metadata2 = runtimeMetadata(model);
|
|
3670
|
+
if (metadata2?.runtimeId !== "litellm") return source;
|
|
3671
|
+
const advised = createAssistantMessageEventStream3();
|
|
3672
|
+
(async () => {
|
|
3673
|
+
try {
|
|
3674
|
+
for await (const event of source) {
|
|
3675
|
+
if (event.type === "error") {
|
|
3676
|
+
event.error.errorMessage = liteLLMRouteFailureMessage(event.error.errorMessage, metadata2.targetId, model.id);
|
|
3677
|
+
}
|
|
3678
|
+
advised.push(event);
|
|
3679
|
+
}
|
|
3680
|
+
advised.end();
|
|
3681
|
+
} catch (err) {
|
|
3682
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
3683
|
+
throw new Error(liteLLMRouteFailureMessage(message, metadata2.targetId, model.id));
|
|
3684
|
+
}
|
|
3685
|
+
})();
|
|
3686
|
+
return advised;
|
|
3687
|
+
}
|
|
3507
3688
|
function samplingParamsFromProfile(profile) {
|
|
3508
3689
|
return {
|
|
3509
3690
|
...profile.topP !== void 0 ? { top_p: profile.topP } : {},
|
|
@@ -3591,6 +3772,10 @@ function applyThinkingPayload(payload, applied, resolved, model) {
|
|
|
3591
3772
|
if (resolved.request.reasoningEffort && (next.reasoning_effort === void 0 || resolved.response.parser === "harmony")) {
|
|
3592
3773
|
next.reasoning_effort = resolved.request.reasoningEffort;
|
|
3593
3774
|
}
|
|
3775
|
+
if (resolved.runtimeId === "litellm" && resolved.request.reasoningEffort && next.reasoning_effort === resolved.request.reasoningEffort) {
|
|
3776
|
+
const allowed = Array.isArray(next.allowed_openai_params) ? next.allowed_openai_params : [];
|
|
3777
|
+
next.allowed_openai_params = [.../* @__PURE__ */ new Set([...allowed, "reasoning_effort"])];
|
|
3778
|
+
}
|
|
3594
3779
|
if (resolved.request.chatTemplateKwargs && !chatTemplateKwargsUnsupported(model)) {
|
|
3595
3780
|
const existing = isPlainRecord(next.chat_template_kwargs) ? next.chat_template_kwargs : {};
|
|
3596
3781
|
next.chat_template_kwargs = { ...existing, ...resolved.request.chatTemplateKwargs };
|
|
@@ -3612,13 +3797,13 @@ function applyLmStudioPayload(payload, model, resolved) {
|
|
|
3612
3797
|
if (request?.ttlSeconds !== void 0) next.ttl = request.ttlSeconds;
|
|
3613
3798
|
if (request?.draftModel !== void 0) next.draft_model = request.draftModel;
|
|
3614
3799
|
if (resolved.thinking.mechanism === "none" || resolved.thinking.mechanism === "always-on") return next;
|
|
3615
|
-
const resolvedEffort =
|
|
3800
|
+
const resolvedEffort = runtimeMetadata(model)?.lmstudioReasoningOptions ? lmStudioReasoningEffort(resolved.thinking.effectiveLevel, runtimeMetadata(model)?.lmstudioReasoningOptions) : resolved.request.reasoningEffort ?? lmStudioReasoningEffort(resolved.thinking.effectiveLevel);
|
|
3616
3801
|
switch (request?.reasoning) {
|
|
3617
3802
|
case "off":
|
|
3618
|
-
next.reasoning_effort = "
|
|
3803
|
+
next.reasoning_effort = lmStudioReasoningEffort("off", runtimeMetadata(model)?.lmstudioReasoningOptions);
|
|
3619
3804
|
break;
|
|
3620
3805
|
case "on":
|
|
3621
|
-
next.reasoning_effort = "low";
|
|
3806
|
+
next.reasoning_effort = lmStudioReasoningEffort("low", runtimeMetadata(model)?.lmstudioReasoningOptions);
|
|
3622
3807
|
break;
|
|
3623
3808
|
case "low":
|
|
3624
3809
|
case "medium":
|
|
@@ -3722,6 +3907,36 @@ function withRemainingContextBudget(model, context, options) {
|
|
|
3722
3907
|
maxTokens: remainingContextMaxTokens(model, context, options)
|
|
3723
3908
|
};
|
|
3724
3909
|
}
|
|
3910
|
+
function hasHeader(headers, name) {
|
|
3911
|
+
if (!headers) return false;
|
|
3912
|
+
const wanted = name.toLowerCase();
|
|
3913
|
+
return Object.keys(headers).some((key) => key.toLowerCase() === wanted);
|
|
3914
|
+
}
|
|
3915
|
+
function withLiteLLMRequestOptions(model, options) {
|
|
3916
|
+
const metadata2 = runtimeMetadata(model);
|
|
3917
|
+
if (metadata2?.runtimeId !== "litellm") return options;
|
|
3918
|
+
const request = metadata2.litellm?.request;
|
|
3919
|
+
const modelHeaders = model.headers;
|
|
3920
|
+
const optionHeaders = options.headers;
|
|
3921
|
+
const headers = { ...options.headers ?? {} };
|
|
3922
|
+
const setDefault = (name, value) => {
|
|
3923
|
+
if (value === void 0 || hasHeader(modelHeaders, name) || hasHeader(optionHeaders, name)) return;
|
|
3924
|
+
headers[name] = value;
|
|
3925
|
+
};
|
|
3926
|
+
setDefault("x-litellm-tags", ["clio-coder", ...request?.tags ?? []].join(","));
|
|
3927
|
+
if (request?.sendSessionId !== false) setDefault("x-litellm-session-id", options.sessionId);
|
|
3928
|
+
setDefault("x-litellm-timeout", request?.timeoutSeconds?.toString());
|
|
3929
|
+
setDefault("x-litellm-stream-timeout", request?.streamTimeoutSeconds?.toString());
|
|
3930
|
+
setDefault("x-litellm-num-retries", request?.numRetries?.toString());
|
|
3931
|
+
return {
|
|
3932
|
+
...options,
|
|
3933
|
+
headers,
|
|
3934
|
+
// Never hide duplicate attempts inside the OpenAI SDK beneath Clio's
|
|
3935
|
+
// operator-visible failure. The gateway may still be configured to retry,
|
|
3936
|
+
// but physical-routing deployments should keep that policy at zero too.
|
|
3937
|
+
maxRetries: options.maxRetries ?? 0
|
|
3938
|
+
};
|
|
3939
|
+
}
|
|
3725
3940
|
function requiredToolArguments(tool) {
|
|
3726
3941
|
const schema = tool.parameters;
|
|
3727
3942
|
if (schema === null || typeof schema !== "object" || Array.isArray(schema)) return [];
|
|
@@ -3990,21 +4205,28 @@ var openAICompletionsApiProvider = {
|
|
|
3990
4205
|
const resolved = resolvedCapabilitiesForModel(model, defaultLevel);
|
|
3991
4206
|
const effectiveContext = stripsThinking(resolved) ? stripThinkingFromContext(context) : context;
|
|
3992
4207
|
const withSamplers = withSamplingOverrides(model, options, resolved);
|
|
4208
|
+
const withGatewayOptions = withLiteLLMRequestOptions(
|
|
4209
|
+
model,
|
|
4210
|
+
withRemainingContextBudget(model, effectiveContext, withSamplers)
|
|
4211
|
+
);
|
|
3993
4212
|
return guardMalformedToolCalls(
|
|
3994
4213
|
withReasoningTokenEstimate(
|
|
3995
4214
|
stripSentinelsFromStream(
|
|
3996
4215
|
stripNeverReasoningFromStream(
|
|
3997
4216
|
filterGemmaChannelStream(
|
|
3998
|
-
|
|
4217
|
+
withLiteLLMRouteFailureAdvice(
|
|
3999
4218
|
model,
|
|
4000
|
-
|
|
4001
|
-
(capturedOptions) => withLocalResidency(
|
|
4219
|
+
withResponseModelIdCapture(
|
|
4002
4220
|
model,
|
|
4003
|
-
|
|
4004
|
-
|
|
4005
|
-
|
|
4006
|
-
|
|
4007
|
-
|
|
4221
|
+
withGatewayOptions,
|
|
4222
|
+
(capturedOptions) => withLocalResidency(
|
|
4223
|
+
model,
|
|
4224
|
+
{
|
|
4225
|
+
...options?.apiKey !== void 0 ? { apiKey: options.apiKey } : {},
|
|
4226
|
+
...options?.signal !== void 0 ? { signal: options.signal } : {}
|
|
4227
|
+
},
|
|
4228
|
+
(requestModel) => piOpenAICompletions.stream(requestModel, effectiveContext, capturedOptions)
|
|
4229
|
+
)
|
|
4008
4230
|
)
|
|
4009
4231
|
),
|
|
4010
4232
|
usesGemmaChannelMarkers(resolved.modelId)
|
|
@@ -4022,21 +4244,28 @@ var openAICompletionsApiProvider = {
|
|
|
4022
4244
|
const resolved = resolvedCapabilitiesForModel(model, thinkingLevelFromSimple2(options));
|
|
4023
4245
|
const effectiveContext = stripsThinking(resolved) ? stripThinkingFromContext(context) : context;
|
|
4024
4246
|
const withSamplers = withSamplingOverrides(model, options, resolved);
|
|
4247
|
+
const withGatewayOptions = withLiteLLMRequestOptions(
|
|
4248
|
+
model,
|
|
4249
|
+
withRemainingContextBudget(model, effectiveContext, withSamplers)
|
|
4250
|
+
);
|
|
4025
4251
|
return guardMalformedToolCalls(
|
|
4026
4252
|
withReasoningTokenEstimate(
|
|
4027
4253
|
stripSentinelsFromStream(
|
|
4028
4254
|
stripNeverReasoningFromStream(
|
|
4029
4255
|
filterGemmaChannelStream(
|
|
4030
|
-
|
|
4256
|
+
withLiteLLMRouteFailureAdvice(
|
|
4031
4257
|
model,
|
|
4032
|
-
|
|
4033
|
-
(capturedOptions) => withLocalResidency(
|
|
4258
|
+
withResponseModelIdCapture(
|
|
4034
4259
|
model,
|
|
4035
|
-
|
|
4036
|
-
|
|
4037
|
-
|
|
4038
|
-
|
|
4039
|
-
|
|
4260
|
+
withGatewayOptions,
|
|
4261
|
+
(capturedOptions) => withLocalResidency(
|
|
4262
|
+
model,
|
|
4263
|
+
{
|
|
4264
|
+
...options?.apiKey !== void 0 ? { apiKey: options.apiKey } : {},
|
|
4265
|
+
...options?.signal !== void 0 ? { signal: options.signal } : {}
|
|
4266
|
+
},
|
|
4267
|
+
(requestModel) => piOpenAICompletions.streamSimple(requestModel, effectiveContext, capturedOptions)
|
|
4268
|
+
)
|
|
4040
4269
|
)
|
|
4041
4270
|
),
|
|
4042
4271
|
usesGemmaChannelMarkers(resolved.modelId)
|
|
@@ -4376,7 +4605,7 @@ function discoveredModelsSource(probe, preservePreviousProbe, previous, cachedMo
|
|
|
4376
4605
|
function sameProbeIdentity(previous, next) {
|
|
4377
4606
|
return previous.id === next.id && previous.runtime === next.runtime && (previous.url ?? "") === (next.url ?? "") && (previous.defaultModel ?? "") === (next.defaultModel ?? "");
|
|
4378
4607
|
}
|
|
4379
|
-
function mergeProbeResult(desc, target, probe, previous, cachedModels = []) {
|
|
4608
|
+
function mergeProbeResult(desc, target, probe, previous, cachedModels = [], cachedModelLabels = {}) {
|
|
4380
4609
|
const probeSucceeded = probe?.ok ?? false;
|
|
4381
4610
|
const preservePrevious = !probeSucceeded && previous !== void 0 && sameProbeIdentity(previous.target, target);
|
|
4382
4611
|
const probeCapabilities = probe?.discoveredCapabilities ?? (preservePrevious ? previous.probeCapabilities : null) ?? null;
|
|
@@ -4388,8 +4617,10 @@ function mergeProbeResult(desc, target, probe, previous, cachedModels = []) {
|
|
|
4388
4617
|
probe?.models ?? (preservePrevious ? previous.discoveredModels : void 0) ?? (cachedModels.length > 0 ? cachedModels : void 0) ?? desc.knownModels ?? []
|
|
4389
4618
|
);
|
|
4390
4619
|
const discoveredModelStates = probe?.modelStates ?? (preservePrevious ? previous.discoveredModelStates : null) ?? null;
|
|
4620
|
+
const discoveredModelLabels = probe?.modelLabels ?? (preservePrevious ? previous.discoveredModelLabels : void 0) ?? (cachedModels.length > 0 ? cachedModelLabels : void 0) ?? {};
|
|
4391
4621
|
const merge = {
|
|
4392
4622
|
discoveredModels,
|
|
4623
|
+
discoveredModelLabels,
|
|
4393
4624
|
discoveredModelsSource: discoveredModelsSource(probe, preservePrevious, previous, cachedModels, desc),
|
|
4394
4625
|
discoveredModelStates,
|
|
4395
4626
|
probeCapabilities,
|
|
@@ -4404,7 +4635,9 @@ function unservedDefaultModelReason(desc, target, merge) {
|
|
|
4404
4635
|
const model = target.defaultModel;
|
|
4405
4636
|
if (!model) return null;
|
|
4406
4637
|
if (merge.discoveredModelsSource !== "probe" || merge.discoveredModels.length === 0) return null;
|
|
4407
|
-
if (listKnownModelsForRuntime(desc.id).length > 0)
|
|
4638
|
+
if (listKnownModelsForRuntime(desc.id).length > 0 && desc.externalAgentLoop?.modelCatalog !== "live-authoritative") {
|
|
4639
|
+
return null;
|
|
4640
|
+
}
|
|
4408
4641
|
if (merge.discoveredModels.includes(model)) return null;
|
|
4409
4642
|
if (merge.discoveredModelStates && model in merge.discoveredModelStates) return null;
|
|
4410
4643
|
return `default model '${model}' is not advertised by the target`;
|
|
@@ -4424,14 +4657,18 @@ function createProvidersBundle(context) {
|
|
|
4424
4657
|
if (config) return config.get();
|
|
4425
4658
|
return readSettings();
|
|
4426
4659
|
}
|
|
4427
|
-
async function buildProbeContextForTarget(target, desc) {
|
|
4660
|
+
async function buildProbeContextForTarget(target, desc, signal) {
|
|
4428
4661
|
const probeCtx = {
|
|
4429
4662
|
credentialsPresent: credentialsPresent(),
|
|
4430
|
-
httpTimeoutMs: DEFAULT_PROBE_TIMEOUT_MS
|
|
4663
|
+
httpTimeoutMs: DEFAULT_PROBE_TIMEOUT_MS,
|
|
4664
|
+
...signal ? { signal } : {}
|
|
4431
4665
|
};
|
|
4432
4666
|
if (!targetRequiresAuth(target, desc)) return probeCtx;
|
|
4433
4667
|
try {
|
|
4434
|
-
const resolution = await authStore.resolveForTarget(resolveAuthTarget(target, desc), {
|
|
4668
|
+
const resolution = await authStore.resolveForTarget(resolveAuthTarget(target, desc), {
|
|
4669
|
+
includeFallback: false,
|
|
4670
|
+
...signal ? { signal } : {}
|
|
4671
|
+
});
|
|
4435
4672
|
if (resolution.apiKey) probeCtx.authToken = resolution.apiKey;
|
|
4436
4673
|
} catch {
|
|
4437
4674
|
}
|
|
@@ -4483,8 +4720,9 @@ function createProvidersBundle(context) {
|
|
|
4483
4720
|
return out2;
|
|
4484
4721
|
}
|
|
4485
4722
|
const availability = availabilityFor(desc, target, authStatusFor);
|
|
4486
|
-
const
|
|
4487
|
-
const
|
|
4723
|
+
const cachedSnapshot = readTargetModelSnapshot(target);
|
|
4724
|
+
const cachedModels = cachedSnapshot?.models ?? [];
|
|
4725
|
+
const merge = mergeProbeResult(desc, target, probe, previous, cachedModels, cachedSnapshot?.modelLabels ?? {});
|
|
4488
4726
|
const { capabilities, contextWindowProvenance } = capabilitiesFor(desc, target, merge, kb);
|
|
4489
4727
|
const healthy = probe !== null ? probe.ok : null;
|
|
4490
4728
|
const unservedDefault = probe?.ok ? unservedDefaultModelReason(desc, target, merge) : null;
|
|
@@ -4508,6 +4746,7 @@ function createProvidersBundle(context) {
|
|
|
4508
4746
|
probeModelCapabilities: merge.probeModelCapabilities,
|
|
4509
4747
|
probeModelId: merge.probeModelId,
|
|
4510
4748
|
discoveredModels: merge.discoveredModels,
|
|
4749
|
+
discoveredModelLabels: merge.discoveredModelLabels,
|
|
4511
4750
|
discoveredModelsSource: merge.discoveredModelsSource,
|
|
4512
4751
|
discoveredModelStates: merge.discoveredModelStates
|
|
4513
4752
|
};
|
|
@@ -4516,6 +4755,7 @@ function createProvidersBundle(context) {
|
|
|
4516
4755
|
return out;
|
|
4517
4756
|
}
|
|
4518
4757
|
async function probeTargetInternal(target, live, options) {
|
|
4758
|
+
options?.signal?.throwIfAborted();
|
|
4519
4759
|
const previous = statuses.get(target.id);
|
|
4520
4760
|
const desc = registry.get(target.runtime);
|
|
4521
4761
|
if (!desc) {
|
|
@@ -4529,13 +4769,15 @@ function createProvidersBundle(context) {
|
|
|
4529
4769
|
statuses.set(target.id, status2);
|
|
4530
4770
|
return status2;
|
|
4531
4771
|
}
|
|
4532
|
-
const probeCtx = await buildProbeContextForTarget(target, desc);
|
|
4772
|
+
const probeCtx = await buildProbeContextForTarget(target, desc, options?.signal);
|
|
4773
|
+
options?.signal?.throwIfAborted();
|
|
4533
4774
|
let probeResult;
|
|
4534
4775
|
try {
|
|
4535
4776
|
probeResult = await desc.probe(target, probeCtx);
|
|
4536
4777
|
} catch (err) {
|
|
4537
4778
|
probeResult = { ok: false, error: err instanceof Error ? err.message : String(err) };
|
|
4538
4779
|
}
|
|
4780
|
+
options?.signal?.throwIfAborted();
|
|
4539
4781
|
if (probeResult.ok && typeof desc.probeModels === "function" && !probeResult.models) {
|
|
4540
4782
|
try {
|
|
4541
4783
|
const ids = await desc.probeModels(target, probeCtx);
|
|
@@ -4543,6 +4785,7 @@ function createProvidersBundle(context) {
|
|
|
4543
4785
|
} catch {
|
|
4544
4786
|
}
|
|
4545
4787
|
}
|
|
4788
|
+
options?.signal?.throwIfAborted();
|
|
4546
4789
|
if (probeResult.ok && options?.reasoning !== false && typeof desc.probeReasoning === "function") {
|
|
4547
4790
|
const settings = readConfig();
|
|
4548
4791
|
const orchestratorTarget = settings.chat.target === target.id ? settings.chat.model : null;
|
|
@@ -4550,6 +4793,7 @@ function createProvidersBundle(context) {
|
|
|
4550
4793
|
if (candidateModelId) {
|
|
4551
4794
|
try {
|
|
4552
4795
|
const result = await desc.probeReasoning(target, candidateModelId, probeCtx);
|
|
4796
|
+
options?.signal?.throwIfAborted();
|
|
4553
4797
|
reasoningCache.set(reasoningCacheKey(target.id, candidateModelId), result.reasoning);
|
|
4554
4798
|
const capabilityModelId = probeResult.capabilityModelId ?? null;
|
|
4555
4799
|
if (capabilityModelId === null || capabilityModelId === candidateModelId) {
|
|
@@ -4570,10 +4814,15 @@ function createProvidersBundle(context) {
|
|
|
4570
4814
|
}
|
|
4571
4815
|
}
|
|
4572
4816
|
}
|
|
4817
|
+
options?.signal?.throwIfAborted();
|
|
4573
4818
|
const status = buildStatus(target, desc, probeResult, previous);
|
|
4574
4819
|
statuses.set(target.id, status);
|
|
4575
4820
|
if (probeResult.ok && probeResult.models !== void 0) {
|
|
4576
|
-
recordTargetModelSnapshot(
|
|
4821
|
+
recordTargetModelSnapshot(
|
|
4822
|
+
target,
|
|
4823
|
+
probeResult.models,
|
|
4824
|
+
probeResult.modelLabels ? { modelLabels: probeResult.modelLabels } : {}
|
|
4825
|
+
);
|
|
4577
4826
|
}
|
|
4578
4827
|
void recordEndpointSlotsFromStatus(status);
|
|
4579
4828
|
context.bus.emit(BusChannels.ProviderHealth, { id: target.id, status });
|
|
@@ -4759,6 +5008,8 @@ export {
|
|
|
4759
5008
|
setResidencyNoticeSink,
|
|
4760
5009
|
setProtectedModelsProvider,
|
|
4761
5010
|
withRunOverrides,
|
|
5011
|
+
gatewayRoutingObservationFromRecord,
|
|
5012
|
+
gatewayRoutingObservationLabel,
|
|
4762
5013
|
applyModelCapabilityPatch,
|
|
4763
5014
|
probeCapabilitiesForModel,
|
|
4764
5015
|
resolveModelCapabilities,
|
|
@@ -4776,6 +5027,7 @@ export {
|
|
|
4776
5027
|
isOrchestratorEligibleRuntime,
|
|
4777
5028
|
isDispatchEligibleRuntime,
|
|
4778
5029
|
modelResidencyForStatus,
|
|
5030
|
+
hasLiveModelCatalog,
|
|
4779
5031
|
modelCandidatesForStatus,
|
|
4780
5032
|
modelIdsForStatus,
|
|
4781
5033
|
canonicalizeWireModelId,
|
|
@@ -4790,4 +5042,4 @@ export {
|
|
|
4790
5042
|
resolveCostProvenance2 as resolveCostProvenance,
|
|
4791
5043
|
ProvidersDomainModule
|
|
4792
5044
|
};
|
|
4793
|
-
//# sourceMappingURL=chunk-
|
|
5045
|
+
//# sourceMappingURL=chunk-JSD46VO2.js.map
|