@iowarp/clio-coder 0.4.2 → 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 +35 -0
- package/CONTRIBUTING.md +86 -19
- package/README.md +35 -6
- package/dist/{acp-TMDQZDIG.js → acp-H2NGRPWO.js} +11 -11
- package/dist/{agents-5N5NG3XG.js → agents-TL5LLUQP.js} +54 -53
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-Z5CCBXKQ.js → auth-E5SW4HMS.js} +19 -16
- package/dist/{builtins-K6TNDT24.js → builtins-IA7V7FUC.js} +9 -4
- package/dist/{chunk-ZW4HH5JJ.js → chunk-2APPQIER.js} +6 -6
- package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
- package/dist/{chunk-UBRFI4HS.js → chunk-2UG5F4C5.js} +127 -47
- package/dist/{chunk-UH632ZYL.js → chunk-2UH2KFUP.js} +2 -2
- package/dist/{chunk-3F7VUY77.js → chunk-2VIKGWFZ.js} +2 -2
- package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
- package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
- package/dist/{chunk-2X4RYJTJ.js → chunk-4UVU7BJ5.js} +2 -2
- package/dist/{chunk-M2DAX4F6.js → chunk-4WR7VSYB.js} +2 -2
- package/dist/{chunk-5KW52TEP.js → chunk-54CBCGIR.js} +5 -5
- 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-LJID3DYZ.js → chunk-64I3JVYM.js} +2 -2
- package/dist/{chunk-4JDLP6ZS.js → chunk-6PTFB5VS.js} +7 -7
- package/dist/{chunk-VN3SHNBN.js → chunk-7DICMOS6.js} +2 -2
- package/dist/{chunk-HLAFFSEK.js → chunk-7DRAWPTZ.js} +2 -2
- package/dist/chunk-7E7I3WLS.js +3762 -0
- package/dist/{chunk-YJISEZKC.js → chunk-7ZYNNDKC.js} +6 -6
- package/dist/{chunk-I66ZTYNP.js → chunk-AF4YM7Z4.js} +236 -101
- package/dist/{chunk-2HFQNRV3.js → chunk-AX2THNSA.js} +12 -12
- package/dist/{chunk-PGF63K6I.js → chunk-B4OAX3SI.js} +65 -3
- package/dist/{chunk-W6NIE6OW.js → chunk-B4VEBZKF.js} +3 -3
- package/dist/{chunk-JBCS7CRR.js → chunk-BEPZRGGU.js} +10 -10
- package/dist/{chunk-XGDPUNND.js → chunk-CE5AX47J.js} +2 -2
- package/dist/{chunk-I64IFBLB.js → chunk-DWUOQKRU.js} +17 -10
- package/dist/{chunk-DZAW46HP.js → chunk-E3TPLWFX.js} +3 -3
- package/dist/{chunk-HIICAHCJ.js → chunk-EKCHAPYA.js} +2 -2
- package/dist/{chunk-XE3PCIXH.js → chunk-F5JHEYZM.js} +7 -7
- package/dist/{chunk-5PFYMY2V.js → chunk-FTMGRKEF.js} +2 -2
- package/dist/{chunk-ZNT2M6TG.js → chunk-G76U63X4.js} +17 -17
- package/dist/{chunk-34BHNEE3.js → chunk-GHS5EBTQ.js} +58 -7
- package/dist/{chunk-2NHR3NAY.js → chunk-GI7YYQ3F.js} +40 -34
- package/dist/{chunk-DYHAXKHD.js → chunk-GWZNEVM2.js} +12 -8
- package/dist/chunk-GYV6VZOC.js +26 -0
- package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
- package/dist/{chunk-W4YEMFBX.js → chunk-HEQY7ZFI.js} +2 -2
- package/dist/{chunk-IKOZFYBN.js → chunk-I7ZPNEJM.js} +145 -102
- package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
- package/dist/{chunk-XQRY4DTA.js → chunk-IGLP3ODT.js} +10 -10
- package/dist/chunk-IJNZMHLA.js +101 -0
- package/dist/{chunk-JWJGP5DQ.js → chunk-INY6HTFL.js} +7 -7
- package/dist/{chunk-PBP4B7XR.js → chunk-IUE3Y34X.js} +2 -2
- package/dist/{chunk-B74PXLU7.js → chunk-IWT4SF4R.js} +3 -3
- package/dist/{chunk-B7HM5Z7T.js → chunk-JDAY6FIL.js} +5 -5
- package/dist/{chunk-PJX3WQUQ.js → chunk-JEQ3XTHC.js} +2 -2
- package/dist/{chunk-FSP7CMNU.js → chunk-JGRC33J2.js} +50 -4
- package/dist/{chunk-X7IARSHT.js → chunk-JKKCYP3C.js} +9 -9
- package/dist/{chunk-HJWWJ6IL.js → chunk-JSC3U7TI.js} +16 -4
- package/dist/{chunk-SSEYRH53.js → chunk-KK4JZPBQ.js} +19 -140
- package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
- package/dist/{chunk-Q4XWMHX6.js → chunk-L47TF46W.js} +2 -2
- package/dist/{chunk-O3YUNJZ2.js → chunk-LDJG7DW3.js} +81 -24
- package/dist/{chunk-CDNVLKUX.js → chunk-LLDJM5XK.js} +13 -7
- package/dist/{chunk-F2I26BDK.js → chunk-MUW2BDDH.js} +4 -4
- package/dist/{chunk-HKMD33FO.js → chunk-MWUZBSAQ.js} +79 -76
- package/dist/{chunk-QQLGQY2A.js → chunk-N2Z7HLVY.js} +20 -20
- package/dist/{chunk-DZEK6CJN.js → chunk-NIQJ66N4.js} +19 -19
- package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
- package/dist/{chunk-462T4EGZ.js → chunk-O5CVSAG5.js} +2 -2
- package/dist/{chunk-TPEQIQIE.js → chunk-OML5D5V5.js} +8 -8
- package/dist/{chunk-IKSLQ4XV.js → chunk-PAJQJ7BS.js} +558 -216
- package/dist/{chunk-ZW55JB7N.js → chunk-PUVDKJ2Y.js} +2 -2
- package/dist/{chunk-UH347SHR.js → chunk-QWGDJJYJ.js} +11 -11
- package/dist/chunk-R6Q67RJH.js +134 -0
- package/dist/{chunk-CRFOIAX3.js → chunk-RRNP2ANY.js} +6 -6
- package/dist/{chunk-IDNA72AH.js → chunk-RSJ25QSL.js} +2 -2
- package/dist/chunk-SKHCAU7K.js +385 -0
- package/dist/{chunk-RLYRBIYQ.js → chunk-TM6LQDI3.js} +20 -12
- package/dist/chunk-UOIZ7DA4.js +41 -0
- package/dist/{chunk-P75RZCJW.js → chunk-UPZU6GE4.js} +3 -3
- package/dist/{chunk-MCMZMDAC.js → chunk-V2ANDPVT.js} +4 -4
- package/dist/{chunk-AK5XEFVZ.js → chunk-VA5FNYMT.js} +26 -13
- package/dist/{chunk-IMXMHHMQ.js → chunk-VW6DOEDG.js} +332 -57
- package/dist/{chunk-XOXV5GKE.js → chunk-W6RRQCPQ.js} +16 -7
- package/dist/{chunk-CYZW7JHJ.js → chunk-WBKFA554.js} +8 -8
- package/dist/{chunk-BO7Y52RY.js → chunk-WCXUNS7U.js} +7 -7
- package/dist/{chunk-ZGNYYXQ6.js → chunk-WRBAGUNF.js} +3 -3
- package/dist/{chunk-FVDGR2ZL.js → chunk-XIVNBFZS.js} +85 -30
- package/dist/{chunk-BYMNWQ7O.js → chunk-XPWWI35G.js} +299 -58
- package/dist/{chunk-KPXDY6QF.js → chunk-XRZT5WY5.js} +2 -2
- package/dist/{chunk-AZ4WMN4W.js → chunk-Y3CBHOR6.js} +2 -2
- package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
- package/dist/{chunk-54ODD65L.js → chunk-YQWYVTMC.js} +4 -4
- package/dist/{chunk-M2WXEHER.js → chunk-ZA4VCIGV.js} +2 -2
- package/dist/{chunk-7BHIY2MW.js → chunk-ZDN3Y73Y.js} +6 -6
- package/dist/{chunk-E7GT7O5N.js → chunk-ZWPRK62N.js} +7 -4
- package/dist/cli/index.js +38 -37
- package/dist/{clio-7VB377CC.js → clio-CMMK4KRR.js} +7 -7
- package/dist/{code-nav-YVLCYA7V.js → code-nav-MDZNQS33.js} +7 -7
- package/dist/{components-UBWCQSRW.js → components-UCUQ4QXW.js} +4 -4
- package/dist/{config-4HVOS65E.js → config-SVM5P5YI.js} +76 -74
- package/dist/{configure-PIWO7B24.js → configure-LE3IK2TJ.js} +26 -24
- package/dist/{context-IYEHL3WQ.js → context-2OHRKS42.js} +66 -63
- package/dist/{context-N6ZE3LGJ.js → context-E3VC7RX5.js} +15 -11
- package/dist/{context-KQYIWPWT.js → context-VNCR7KAG.js} +60 -45
- package/dist/{context-clear-G4OGZJDS.js → context-clear-BW4O37TG.js} +61 -59
- package/dist/context-map-COB37XXN.js +505 -0
- package/dist/{context-working-set-BWLF6LJP.js → context-working-set-VDS25HXZ.js} +17 -16
- package/dist/{dispatch-runner-2QQAITS3.js → dispatch-runner-5AHT53RF.js} +85 -74
- package/dist/{doctor-LHBD36VU.js → doctor-WNNVO6FY.js} +37 -37
- package/dist/{eval-C45FYRJ6.js → eval-7G7SGAYO.js} +285 -114
- package/dist/{eval-inventory-6DEJPLBF.js → eval-inventory-Y6QRFOH5.js} +4 -4
- package/dist/{evidence-6SHONYAF.js → evidence-VD6736FQ.js} +63 -62
- package/dist/{evolve-KRKMV72X.js → evolve-AL3NGVRL.js} +62 -61
- package/dist/{extensions-KPZ2UHBB.js → extensions-MOVJ32NM.js} +7 -7
- package/dist/{fleet-IVTCKDHT.js → fleet-QZHUMAGI.js} +110 -108
- package/dist/{fleet-commands-EDWL3IT7.js → fleet-commands-BAYT5FJZ.js} +10 -10
- package/dist/{fleet-decisions-YP3YEFGK.js → fleet-decisions-IREVMRU4.js} +7 -6
- package/dist/{fleet-graph-ZFWKHY2M.js → fleet-graph-YCTT3HTI.js} +19 -18
- package/dist/{fleet-inspect-FVUNCBML.js → fleet-inspect-QVJTDAVB.js} +55 -54
- package/dist/{fleet-preflight-UN5XED4R.js → fleet-preflight-25QAFPK4.js} +4 -4
- package/dist/{fleet-validate-XOWC4HSX.js → fleet-validate-5O57AAJ7.js} +23 -22
- package/dist/{fleet-verify-UN3SODEL.js → fleet-verify-CPH2W2T6.js} +56 -55
- package/dist/{fleet-view-TWHJKCN6.js → fleet-view-SWBR3VGQ.js} +55 -54
- package/dist/{init-T2QORQ3Y.js → init-J477LKZH.js} +78 -76
- package/dist/{interop-IN5I2A66.js → interop-3FCM6XLG.js} +11 -11
- package/dist/{library-LSCATDLZ.js → library-QUQEIUG6.js} +28 -27
- package/dist/{memory-HYOKAGGJ.js → memory-SGGSEP65.js} +64 -63
- package/dist/{models-2GPMFYCM.js → models-HEKUAXXK.js} +49 -43
- package/dist/{monitor-E4ASVUJH.js → monitor-HKU57TYQ.js} +61 -60
- package/dist/{orchestrator-DDMPR3PY.js → orchestrator-VDFAEFAI.js} +919 -546
- package/dist/{panes-E3RUXOW5.js → panes-DN2SSFOH.js} +3 -3
- package/dist/{panes-IXKLOKA2.js → panes-TALGNPZT.js} +8 -8
- package/dist/{paths-L7LGY6RN.js → paths-NBMFAIEZ.js} +5 -5
- package/dist/reset-EAJFFJVB.js +344 -0
- package/dist/{resources-OTRSN34L.js → resources-OVKSEFVE.js} +27 -20
- package/dist/{run-5DEYH5QK.js → run-7DP7ZF2J.js} +113 -109
- package/dist/{share-IHWTLO3M.js → share-WML67FT3.js} +26 -25
- package/dist/{skills-IYMXMKW4.js → skills-SG662R2K.js} +39 -31
- package/dist/{skills-eval-DROHSJAR.js → skills-eval-VVZEUU46.js} +74 -73
- package/dist/{skills-inventory-D7X4L4ZX.js → skills-inventory-I2E23GET.js} +21 -20
- package/dist/{slash-commands-QBM7UZ3B.js → slash-commands-S7MBJDQK.js} +35 -34
- package/dist/{steer-Z5DO23FJ.js → steer-2LQOMCPB.js} +3 -3
- package/dist/{support-U7QOWY26.js → support-CC2UJBJ6.js} +6 -6
- package/dist/{targets-P2FUC4IL.js → targets-4QC3HIEW.js} +48 -45
- package/dist/{terminal-lease-YREJ3JX2.js → terminal-lease-TUHIJ6Y2.js} +2 -2
- package/dist/{tools-5B7RO6MV.js → tools-TFGJICCU.js} +8 -8
- package/dist/{trace-YMGMUM6A.js → trace-FXMXUZUF.js} +7 -7
- package/dist/uninstall-5PEVOE5B.js +408 -0
- package/dist/upgrade-M4WXY6KN.js +303 -0
- package/dist/{usage-ME5MPXGX.js → usage-N7ZNVLEM.js} +147 -102
- package/dist/{verifiers-BVZ7IWOO.js → verifiers-DJTP4XX6.js} +15 -15
- package/dist/{verify-5K7ZKQFC.js → verify-RWE4PPEK.js} +9 -9
- package/dist/{wiki-generate-F5W5QTYY.js → wiki-generate-C7IQOXSP.js} +84 -82
- package/dist/{with-panes-BYOJCLAM.js → with-panes-4GCGSL7J.js} +9 -9
- package/dist/worker/entry.js +61 -60
- package/docs/architecture/artifact-placement.md +1 -0
- package/docs/architecture/artifact-versions.md +1 -1
- package/docs/architecture/context-engine.md +4 -0
- package/docs/architecture/middleware-and-components.md +1 -1
- package/docs/architecture/model-catalog.md +21 -10
- package/docs/architecture/observability.md +12 -1
- package/docs/architecture/prompt-envelope-and-tools.md +2 -0
- package/docs/architecture/provider-adapter-cookbook.md +63 -0
- package/docs/architecture/safety-model.md +15 -5
- package/docs/guide/built-in-agents.md +17 -3
- package/docs/guide/commands-and-modes.md +1 -1
- package/docs/guide/configuration-and-targets.md +97 -9
- package/docs/guide/configuration-reference.md +7 -2
- package/docs/guide/environment-variables.md +2 -0
- 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/process/development-pipeline.md +34 -1
- package/docs/process/eval-runner.md +67 -3
- 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 +40 -5
- 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 +46 -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 +23 -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 +65 -5
- package/skills/workflow/cut-it/evals.md +101 -0
- package/skills/workflow/design-council/SKILL.md +117 -27
- package/skills/workflow/design-council/evals.md +161 -0
- package/skills/workflow/grill-me/SKILL.md +86 -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/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 -528
- package/src/cli/context-map.ts +114 -0
- package/src/cli/context.ts +4 -0
- package/src/cli/index.ts +1 -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 -2
- package/src/cli/select.ts +664 -0
- package/src/cli/skills.ts +9 -2
- package/src/cli/targets.ts +3 -0
- 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/core/config.ts +56 -0
- package/src/core/external-diagnostic.ts +44 -0
- package/src/core/gateway-routing.ts +157 -0
- package/src/core/safe-exec.ts +17 -2
- package/src/core/skill-activation.ts +89 -2
- 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/wiki/map-seed.ts +589 -0
- package/src/domains/context/wiki/plan.ts +2 -2
- 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/contract.ts +11 -1
- package/src/domains/dispatch/extension.ts +134 -29
- package/src/domains/dispatch/types.ts +3 -0
- 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 +5 -2
- 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/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 +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/skills-reminder.ts +31 -2
- package/src/domains/observability/compaction-usage.ts +118 -0
- package/src/domains/observability/cost.ts +1 -1
- package/src/domains/observability/extension.ts +6 -1
- package/src/domains/observability/out-of-turn-usage.ts +52 -21
- 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 +2 -0
- package/src/domains/providers/model-runtime-capabilities.ts +15 -5
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +32 -12
- 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/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/autonomy.ts +15 -0
- package/src/domains/safety/index.ts +1 -0
- 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/usage.ts +3 -3
- 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/openai-completions.ts +117 -14
- package/src/engine/external-subprocess.ts +114 -6
- package/src/entry/background-model-metadata.ts +18 -0
- package/src/entry/compaction-prompt.ts +57 -0
- package/src/entry/orchestrator.ts +405 -216
- 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/interactive-slash-runtime.ts +2 -1
- package/src/interactive/renderers/worker-entry.ts +32 -0
- package/src/interactive/slash-commands.ts +24 -6
- 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/worker-receipts.ts +1 -0
- package/src/interactive/worker-stream.ts +6 -1
- package/src/tools/context/index.ts +30 -9
- package/src/tools/dispatch-arguments.ts +1 -0
- package/src/tools/dispatch-event-text.ts +10 -0
- package/src/tools/dispatch-plan.ts +1 -0
- package/src/tools/dispatch-runner.ts +12 -0
- package/src/tools/registry.ts +11 -5
- 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/reset-OAQP3W4O.js +0 -230
- package/dist/uninstall-N34PCTGJ.js +0 -331
- package/dist/upgrade-PXK3S2YM.js +0 -325
|
@@ -2,12 +2,15 @@ import { createRequire as __clioCreateRequire } from "node:module"; const requir
|
|
|
2
2
|
import {
|
|
3
3
|
THINKING_LEVELS
|
|
4
4
|
} from "./chunk-UXCU4E3T.js";
|
|
5
|
+
import {
|
|
6
|
+
runCommandVector
|
|
7
|
+
} from "./chunk-JSC3U7TI.js";
|
|
5
8
|
import {
|
|
6
9
|
catalogThinkingLevelsForRuntime,
|
|
7
10
|
listCatalogModelsForRuntime,
|
|
8
11
|
mergeCapabilities,
|
|
9
12
|
synthesizeCatalogBackedModel
|
|
10
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-5OIVVPHF.js";
|
|
11
14
|
import {
|
|
12
15
|
init_esm_shims
|
|
13
16
|
} from "./chunk-3R73A4XB.js";
|
|
@@ -17,47 +20,243 @@ init_esm_shims();
|
|
|
17
20
|
|
|
18
21
|
// src/domains/providers/runtimes/antigravity/antigravity-code.ts
|
|
19
22
|
init_esm_shims();
|
|
20
|
-
|
|
23
|
+
|
|
24
|
+
// src/core/external-diagnostic.ts
|
|
25
|
+
init_esm_shims();
|
|
26
|
+
var REDACTED = "[redacted]";
|
|
27
|
+
function redactExternalDiagnostic(input) {
|
|
28
|
+
return input.replace(/\b(?:authorization|proxy-authorization)\s*:\s*[^\r\n]+/giu, `Authorization: ${REDACTED}`).replace(/\b(?:set-cookie|cookie)\s*:\s*[^\r\n]+/giu, `Cookie: ${REDACTED}`).replace(/\bbearer\s+[A-Za-z0-9._~+/-]+=*/giu, `Bearer ${REDACTED}`).replace(
|
|
29
|
+
/\b(?:api[_-]?key|access[_-]?token|refresh[_-]?token|token|secret|password)\s*[:=]\s*[^\s,;]+/giu,
|
|
30
|
+
(match) => {
|
|
31
|
+
const separator = match.includes(":") ? ":" : "=";
|
|
32
|
+
return `${match.slice(0, match.indexOf(separator)).trim()}${separator}${REDACTED}`;
|
|
33
|
+
}
|
|
34
|
+
).replace(/\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/gu, REDACTED).replace(
|
|
35
|
+
/(?:~|\/[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)*)\/\.(?:gemini\/antigravity-cli|antigravitycli)(?:\/[^\s]*)?/gu,
|
|
36
|
+
"[redacted credential path]"
|
|
37
|
+
).replace(/https?:\/\/[^\s"'<>]+/giu, (url2) => {
|
|
38
|
+
try {
|
|
39
|
+
const parsed = new URL(url2);
|
|
40
|
+
if (/(?:auth|oauth|login|signin|callback)/iu.test(parsed.pathname)) return "[redacted authorization URL]";
|
|
41
|
+
parsed.username = "";
|
|
42
|
+
parsed.password = "";
|
|
43
|
+
parsed.search = "";
|
|
44
|
+
parsed.hash = "";
|
|
45
|
+
return parsed.toString();
|
|
46
|
+
} catch {
|
|
47
|
+
return REDACTED;
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
function boundedExternalDiagnostic(input, maxBytes = 8192) {
|
|
52
|
+
const redacted = redactExternalDiagnostic(input).trim();
|
|
53
|
+
const bytes = Buffer.from(redacted, "utf8");
|
|
54
|
+
if (bytes.byteLength <= maxBytes) return redacted;
|
|
55
|
+
return `${bytes.subarray(0, Math.max(0, maxBytes - 32)).toString("utf8")}
|
|
56
|
+
[diagnostic truncated]`;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// src/domains/providers/runtimes/antigravity/antigravity-code.ts
|
|
60
|
+
var ANTIGRAVITY_AUTH_NOTICE = "Experimental local delegation through your installed Antigravity (`agy`) CLI. Clio neither signs in nor stores or inspects Antigravity credentials. Run `agy` yourself and complete sign-in before probing this target.";
|
|
21
61
|
var ANTIGRAVITY_MODELS = [
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"Claude Sonnet 4.6 (Thinking)",
|
|
28
|
-
"Claude Opus 4.6 (Thinking)",
|
|
29
|
-
"GPT-OSS 120B (Medium)"
|
|
62
|
+
"gemini-3.8-flash-high",
|
|
63
|
+
"gemini-3.8-flash-medium",
|
|
64
|
+
"gemini-3.8-flash-low",
|
|
65
|
+
"gemini-3.1-pro-high",
|
|
66
|
+
"gemini-3.1-pro-low"
|
|
30
67
|
];
|
|
31
68
|
var antigravityCapabilities = {
|
|
32
69
|
chat: true,
|
|
33
|
-
tools:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
vision: true,
|
|
70
|
+
tools: false,
|
|
71
|
+
reasoning: false,
|
|
72
|
+
vision: false,
|
|
37
73
|
audio: false,
|
|
38
74
|
embeddings: false,
|
|
39
75
|
rerank: false,
|
|
40
76
|
fim: false,
|
|
41
|
-
contextWindow:
|
|
42
|
-
maxTokens:
|
|
77
|
+
contextWindow: 0,
|
|
78
|
+
maxTokens: 0
|
|
79
|
+
};
|
|
80
|
+
var ANTIGRAVITY_MAX_CATALOG_BYTES = 1024 * 1024;
|
|
81
|
+
var ANTIGRAVITY_MAX_DISCOVERED_MODELS = 4096;
|
|
82
|
+
var MAX_MODEL_ID_CHARS = 1024;
|
|
83
|
+
var MAX_MODEL_LABEL_CHARS = 1024;
|
|
84
|
+
var AntigravityCatalogError = class extends Error {
|
|
85
|
+
kind;
|
|
86
|
+
constructor(kind, message) {
|
|
87
|
+
super(message);
|
|
88
|
+
this.name = "AntigravityCatalogError";
|
|
89
|
+
this.kind = kind;
|
|
90
|
+
}
|
|
43
91
|
};
|
|
92
|
+
function record(value) {
|
|
93
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
|
|
94
|
+
}
|
|
95
|
+
function parseAntigravityModelCatalogDetails(output) {
|
|
96
|
+
let decoded;
|
|
97
|
+
try {
|
|
98
|
+
decoded = JSON.parse(output);
|
|
99
|
+
} catch {
|
|
100
|
+
throw new AntigravityCatalogError(
|
|
101
|
+
"unsupported-feature",
|
|
102
|
+
"agy returned an unreadable model catalog; update the Antigravity CLI and retry"
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
const envelope = record(decoded);
|
|
106
|
+
const command = record(envelope?.command);
|
|
107
|
+
const data = record(command?.data);
|
|
108
|
+
if (envelope?.status !== "SUCCESS") {
|
|
109
|
+
const detail = boundedExternalDiagnostic(
|
|
110
|
+
typeof envelope?.error === "string" ? envelope.error : typeof command?.error === "string" ? command.error : "agy could not list models"
|
|
111
|
+
);
|
|
112
|
+
const kind = classifyAntigravityDiagnostic(detail);
|
|
113
|
+
throw new AntigravityCatalogError(kind, antigravityProbeMessage(kind, detail));
|
|
114
|
+
}
|
|
115
|
+
if (command?.name !== "models" || !Array.isArray(data?.models)) {
|
|
116
|
+
throw new AntigravityCatalogError(
|
|
117
|
+
"unsupported-feature",
|
|
118
|
+
"agy returned an unsupported model catalog; update the Antigravity CLI and retry"
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
if (data.models.length === 0) {
|
|
122
|
+
throw new AntigravityCatalogError(
|
|
123
|
+
"catalog-unavailable",
|
|
124
|
+
"agy returned no available models; run `agy` locally and verify the signed-in account has model access"
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
if (data.models.length > ANTIGRAVITY_MAX_DISCOVERED_MODELS) {
|
|
128
|
+
throw new AntigravityCatalogError(
|
|
129
|
+
"catalog-unavailable",
|
|
130
|
+
`agy returned more than ${ANTIGRAVITY_MAX_DISCOVERED_MODELS} models; the authoritative catalog was refused rather than truncated`
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
const models = [];
|
|
134
|
+
const labels = {};
|
|
135
|
+
const seen = /* @__PURE__ */ new Set();
|
|
136
|
+
for (const value of data.models) {
|
|
137
|
+
const model = record(value);
|
|
138
|
+
const id = typeof model?.id === "string" ? model.id.trim() : "";
|
|
139
|
+
const label = typeof model?.label === "string" ? model.label.trim() : "";
|
|
140
|
+
if (id.length === 0 || id.length > MAX_MODEL_ID_CHARS || /[\r\n\0]/u.test(id)) {
|
|
141
|
+
throw new AntigravityCatalogError("catalog-unavailable", "agy returned an invalid model identifier");
|
|
142
|
+
}
|
|
143
|
+
if (label.length === 0 || label.length > MAX_MODEL_LABEL_CHARS || /[\r\n\0]/u.test(label)) {
|
|
144
|
+
throw new AntigravityCatalogError("catalog-unavailable", `agy returned an invalid label for model '${id}'`);
|
|
145
|
+
}
|
|
146
|
+
if (seen.has(id)) {
|
|
147
|
+
if (labels[id] !== label) {
|
|
148
|
+
throw new AntigravityCatalogError(
|
|
149
|
+
"catalog-unavailable",
|
|
150
|
+
`agy returned conflicting labels for duplicate model '${id}'`
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
seen.add(id);
|
|
156
|
+
models.push(id);
|
|
157
|
+
labels[id] = label;
|
|
158
|
+
}
|
|
159
|
+
return { models, labels };
|
|
160
|
+
}
|
|
161
|
+
function classifyAntigravityDiagnostic(detail) {
|
|
162
|
+
if (/(?:enoent|not found|cannot find|could not start|spawn .*agy)/iu.test(detail)) return "missing";
|
|
163
|
+
if (/(?:sign[ -]?in|log[ -]?in|unauthori[sz]ed|authenticat|credential|account.*required)/iu.test(detail)) {
|
|
164
|
+
return "authentication";
|
|
165
|
+
}
|
|
166
|
+
if (/(?:unknown|unsupported|unrecognized|invalid) (?:option|argument|command)|output-format|models command/iu.test(detail)) {
|
|
167
|
+
return "unsupported-feature";
|
|
168
|
+
}
|
|
169
|
+
return "generic";
|
|
170
|
+
}
|
|
171
|
+
function antigravityProbeMessage(kind, detail) {
|
|
172
|
+
const safeDetail = boundedExternalDiagnostic(detail || "no diagnostic was provided");
|
|
173
|
+
switch (kind) {
|
|
174
|
+
case "missing":
|
|
175
|
+
return "Antigravity CLI is not installed or `agy` is not on PATH";
|
|
176
|
+
case "authentication":
|
|
177
|
+
return `Antigravity sign-in is required; run \`agy\` yourself and complete sign-in (${safeDetail})`;
|
|
178
|
+
case "unsupported-feature":
|
|
179
|
+
return `the installed Antigravity CLI does not expose the required structured model catalog; update \`agy\` (${safeDetail})`;
|
|
180
|
+
case "catalog-unavailable":
|
|
181
|
+
return safeDetail;
|
|
182
|
+
case "cancelled":
|
|
183
|
+
return "Antigravity model discovery was cancelled";
|
|
184
|
+
default:
|
|
185
|
+
return `Antigravity model discovery failed: ${safeDetail}`;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
async function probeAntigravityModelCatalog(ctx, runner = runCommandVector) {
|
|
189
|
+
const result = await runner("agy", ["--output-format", "json", "models"], {
|
|
190
|
+
cwd: process.cwd(),
|
|
191
|
+
workspaceRoot: process.cwd(),
|
|
192
|
+
timeoutMs: Math.max(1, ctx.httpTimeoutMs),
|
|
193
|
+
maxOutputBytes: ANTIGRAVITY_MAX_CATALOG_BYTES,
|
|
194
|
+
...ctx.signal ? { signal: ctx.signal } : {}
|
|
195
|
+
});
|
|
196
|
+
if (result.aborted || result.timedOut) {
|
|
197
|
+
return {
|
|
198
|
+
ok: false,
|
|
199
|
+
latencyMs: result.durationMs,
|
|
200
|
+
failureKind: "cancelled",
|
|
201
|
+
error: antigravityProbeMessage("cancelled", "")
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
if (result.outputCapped) {
|
|
205
|
+
return {
|
|
206
|
+
ok: false,
|
|
207
|
+
latencyMs: result.durationMs,
|
|
208
|
+
failureKind: "catalog-unavailable",
|
|
209
|
+
error: `agy model catalog exceeded ${ANTIGRAVITY_MAX_CATALOG_BYTES} bytes`
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
if (result.exitCode !== 0) {
|
|
213
|
+
const detail = boundedExternalDiagnostic(result.stderr || result.stdout || `agy exited ${String(result.exitCode)}`);
|
|
214
|
+
const kind = classifyAntigravityDiagnostic(detail);
|
|
215
|
+
return { ok: false, latencyMs: result.durationMs, failureKind: kind, error: antigravityProbeMessage(kind, detail) };
|
|
216
|
+
}
|
|
217
|
+
try {
|
|
218
|
+
const catalog = parseAntigravityModelCatalogDetails(result.stdout);
|
|
219
|
+
return {
|
|
220
|
+
ok: true,
|
|
221
|
+
latencyMs: result.durationMs,
|
|
222
|
+
models: catalog.models,
|
|
223
|
+
modelLabels: catalog.labels
|
|
224
|
+
};
|
|
225
|
+
} catch (cause) {
|
|
226
|
+
const kind = cause instanceof AntigravityCatalogError ? cause.kind : "generic";
|
|
227
|
+
const detail = cause instanceof Error ? cause.message : String(cause);
|
|
228
|
+
return { ok: false, latencyMs: result.durationMs, failureKind: kind, error: boundedExternalDiagnostic(detail) };
|
|
229
|
+
}
|
|
230
|
+
}
|
|
44
231
|
var antigravityCodeRuntime = {
|
|
45
232
|
id: "antigravity-code",
|
|
46
|
-
displayName: "Antigravity CLI",
|
|
233
|
+
displayName: "Antigravity CLI \u2014 experimental local delegation",
|
|
47
234
|
kind: "subprocess",
|
|
48
235
|
tier: "subscription",
|
|
49
|
-
|
|
50
|
-
// to its own runner before any pi-ai inference, so this only needs to be a
|
|
51
|
-
// valid, google-backed family. The runner is selected by runtime id, and the
|
|
52
|
-
// plain-text parser is named by `outputParser`.
|
|
53
|
-
apiFamily: "google-generative-ai",
|
|
236
|
+
apiFamily: "external-agent-subprocess",
|
|
54
237
|
auth: "none",
|
|
55
238
|
authNotice: ANTIGRAVITY_AUTH_NOTICE,
|
|
56
239
|
knownModels: [...ANTIGRAVITY_MODELS],
|
|
57
240
|
binaryName: "agy",
|
|
58
|
-
headlessCommand: "agy --
|
|
59
|
-
outputParser: "antigravity-
|
|
241
|
+
headlessCommand: "agy --input-format stream-json --output-format stream-json",
|
|
242
|
+
outputParser: "antigravity-stream-json",
|
|
60
243
|
defaultCapabilities: antigravityCapabilities,
|
|
244
|
+
externalAgentLoop: {
|
|
245
|
+
tools: "externally-governed-unobserved",
|
|
246
|
+
network: "externally-governed-unobserved",
|
|
247
|
+
budget: "external-one-shot",
|
|
248
|
+
generatingRetry: "forbidden",
|
|
249
|
+
modelCatalog: "live-authoritative"
|
|
250
|
+
},
|
|
251
|
+
async probe(_target, ctx) {
|
|
252
|
+
try {
|
|
253
|
+
return await probeAntigravityModelCatalog(ctx);
|
|
254
|
+
} catch (cause) {
|
|
255
|
+
const detail = boundedExternalDiagnostic(cause instanceof Error ? cause.message : String(cause));
|
|
256
|
+
const kind = classifyAntigravityDiagnostic(detail);
|
|
257
|
+
return { ok: false, failureKind: kind, error: antigravityProbeMessage(kind, detail) };
|
|
258
|
+
}
|
|
259
|
+
},
|
|
61
260
|
synthesizeModel(target, wireModelId, kb) {
|
|
62
261
|
return synthesizeCatalogBackedModel({
|
|
63
262
|
target,
|
|
@@ -65,9 +264,9 @@ var antigravityCodeRuntime = {
|
|
|
65
264
|
kb,
|
|
66
265
|
defaultCapabilities: antigravityCapabilities,
|
|
67
266
|
runtimeId: "antigravity-code",
|
|
68
|
-
api: "
|
|
69
|
-
provider: "
|
|
70
|
-
defaultBaseUrl: "antigravity
|
|
267
|
+
api: "external-agent-subprocess",
|
|
268
|
+
provider: "antigravity",
|
|
269
|
+
defaultBaseUrl: "external-agent://antigravity/local"
|
|
71
270
|
});
|
|
72
271
|
}
|
|
73
272
|
};
|
|
@@ -577,7 +776,8 @@ function synthLocalModel(input) {
|
|
|
577
776
|
...target.gateway === true ? { gateway: true } : {},
|
|
578
777
|
...kb?.entry.family ? { family: kb.entry.family } : {},
|
|
579
778
|
...quirks ? { quirks } : {},
|
|
580
|
-
...target.lmstudio ? { lmstudio: target.lmstudio } : {}
|
|
779
|
+
...target.lmstudio ? { lmstudio: target.lmstudio } : {},
|
|
780
|
+
...target.litellm ? { litellm: target.litellm } : {}
|
|
581
781
|
}
|
|
582
782
|
};
|
|
583
783
|
if (headers) model.headers = headers;
|
|
@@ -750,41 +950,41 @@ function isRecord2(value) {
|
|
|
750
950
|
function positiveNumber(value) {
|
|
751
951
|
return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : void 0;
|
|
752
952
|
}
|
|
753
|
-
function firstPositiveNumber(
|
|
953
|
+
function firstPositiveNumber(record2, keys) {
|
|
754
954
|
for (const key of keys) {
|
|
755
|
-
const value = positiveNumber(
|
|
955
|
+
const value = positiveNumber(record2[key]);
|
|
756
956
|
if (value !== void 0) return value;
|
|
757
957
|
}
|
|
758
958
|
return void 0;
|
|
759
959
|
}
|
|
760
|
-
function capabilityListFlag(
|
|
761
|
-
const list =
|
|
960
|
+
function capabilityListFlag(record2, name) {
|
|
961
|
+
const list = record2.capabilities;
|
|
762
962
|
if (!Array.isArray(list)) return void 0;
|
|
763
963
|
return list.some((entry) => entry === name) ? true : void 0;
|
|
764
964
|
}
|
|
765
|
-
function booleanFromAny(
|
|
965
|
+
function booleanFromAny(record2, keys) {
|
|
766
966
|
for (const key of keys) {
|
|
767
|
-
const value =
|
|
967
|
+
const value = record2[key];
|
|
768
968
|
if (typeof value === "boolean") return value;
|
|
769
969
|
}
|
|
770
970
|
return void 0;
|
|
771
971
|
}
|
|
772
|
-
function nestedRecord(
|
|
773
|
-
const value =
|
|
972
|
+
function nestedRecord(record2, key) {
|
|
973
|
+
const value = record2[key];
|
|
774
974
|
return isRecord2(value) ? value : null;
|
|
775
975
|
}
|
|
776
|
-
function firstString(
|
|
777
|
-
if (!
|
|
976
|
+
function firstString(record2, keys) {
|
|
977
|
+
if (!record2) return void 0;
|
|
778
978
|
for (const key of keys) {
|
|
779
|
-
const value =
|
|
979
|
+
const value = record2[key];
|
|
780
980
|
if (typeof value === "string" && value.trim().length > 0) return value.trim();
|
|
781
981
|
}
|
|
782
982
|
return void 0;
|
|
783
983
|
}
|
|
784
|
-
function firstBoolean(
|
|
785
|
-
if (!
|
|
984
|
+
function firstBoolean(record2, keys) {
|
|
985
|
+
if (!record2) return void 0;
|
|
786
986
|
for (const key of keys) {
|
|
787
|
-
const value =
|
|
987
|
+
const value = record2[key];
|
|
788
988
|
if (typeof value === "boolean") return value;
|
|
789
989
|
}
|
|
790
990
|
return void 0;
|
|
@@ -2678,8 +2878,8 @@ function lmStudioReasoningLevels(options) {
|
|
|
2678
2878
|
return [...new Set(levels)];
|
|
2679
2879
|
}
|
|
2680
2880
|
function lmStudioReasoningEffort(level, options) {
|
|
2881
|
+
if (options?.includes("on") && options.includes("off")) return level === "off" ? "none" : void 0;
|
|
2681
2882
|
if (level === "off") return "none";
|
|
2682
|
-
if (options?.includes("on") && !options.includes("medium") && !options.includes("high")) return "low";
|
|
2683
2883
|
if (level === "medium" && options?.includes("medium") !== false) return "medium";
|
|
2684
2884
|
if ((level === "high" || level === "xhigh" || level === "max") && options?.includes("high") !== false) return "high";
|
|
2685
2885
|
return "low";
|
|
@@ -3118,7 +3318,7 @@ var defaultCapabilities25 = {
|
|
|
3118
3318
|
embeddings: false,
|
|
3119
3319
|
rerank: false,
|
|
3120
3320
|
fim: false,
|
|
3121
|
-
structuredOutputs: "
|
|
3321
|
+
structuredOutputs: "none",
|
|
3122
3322
|
contextWindow: CLIO_MIN_CONTEXT_WINDOW,
|
|
3123
3323
|
maxTokens: CLIO_MIN_MAX_OUTPUT_TOKENS
|
|
3124
3324
|
};
|
|
@@ -3143,6 +3343,8 @@ function boolean(value) {
|
|
|
3143
3343
|
}
|
|
3144
3344
|
function capabilitiesFromLiteLLMModelInfo(info) {
|
|
3145
3345
|
const caps = {};
|
|
3346
|
+
if (info.runtime === "lm-studio") caps.thinkingControlRuntime = "lmstudio";
|
|
3347
|
+
else if (info.runtime === "llama.cpp") caps.thinkingControlRuntime = "llamacpp";
|
|
3146
3348
|
const contextWindow = positiveInteger(info.max_input_tokens) ?? positiveInteger(info.max_tokens);
|
|
3147
3349
|
if (contextWindow !== void 0) caps.contextWindow = contextWindow;
|
|
3148
3350
|
const maxTokens = positiveInteger(info.max_output_tokens);
|
|
@@ -3164,36 +3366,96 @@ function capabilitiesFromLiteLLMModelInfo(info) {
|
|
|
3164
3366
|
caps.rerank = true;
|
|
3165
3367
|
}
|
|
3166
3368
|
if (info.mode === "chat") caps.chat = true;
|
|
3167
|
-
|
|
3369
|
+
const responseSchema = boolean(info.supports_response_schema);
|
|
3370
|
+
if (responseSchema !== void 0) caps.structuredOutputs = responseSchema ? "json-schema" : "none";
|
|
3168
3371
|
return caps;
|
|
3169
3372
|
}
|
|
3170
|
-
var
|
|
3373
|
+
var BOOLEAN_CAPABILITIES = [
|
|
3374
|
+
"chat",
|
|
3375
|
+
"tools",
|
|
3376
|
+
"reasoning",
|
|
3377
|
+
"vision",
|
|
3378
|
+
"audio",
|
|
3379
|
+
"embeddings",
|
|
3380
|
+
"rerank",
|
|
3381
|
+
"fim"
|
|
3382
|
+
];
|
|
3383
|
+
function aggregateLiteLLMCapabilities(rows) {
|
|
3384
|
+
if (rows.length === 0) return {};
|
|
3385
|
+
const aggregate = {};
|
|
3386
|
+
for (const key of ["contextWindow", "maxTokens"]) {
|
|
3387
|
+
const values = rows.map((row) => row[key]);
|
|
3388
|
+
if (values.every((value) => typeof value === "number")) {
|
|
3389
|
+
aggregate[key] = Math.min(...values);
|
|
3390
|
+
}
|
|
3391
|
+
}
|
|
3392
|
+
for (const key of BOOLEAN_CAPABILITIES) {
|
|
3393
|
+
const values = rows.map((row) => row[key]);
|
|
3394
|
+
if (values.some((value) => value === false)) aggregate[key] = false;
|
|
3395
|
+
else if (values.every((value) => value === true)) aggregate[key] = true;
|
|
3396
|
+
}
|
|
3397
|
+
const controlRuntime = rows[0]?.thinkingControlRuntime;
|
|
3398
|
+
if (controlRuntime !== void 0 && rows.every((row) => row.thinkingControlRuntime === controlRuntime)) {
|
|
3399
|
+
aggregate.thinkingControlRuntime = controlRuntime;
|
|
3400
|
+
}
|
|
3401
|
+
const structuredOutputs = rows.map((row) => row.structuredOutputs);
|
|
3402
|
+
if (structuredOutputs.some((value) => value === "none")) aggregate.structuredOutputs = "none";
|
|
3403
|
+
else if (structuredOutputs.every((value) => value === "json-schema")) aggregate.structuredOutputs = "json-schema";
|
|
3404
|
+
return aggregate;
|
|
3405
|
+
}
|
|
3406
|
+
var EMPTY_CATALOG = {
|
|
3407
|
+
models: [],
|
|
3408
|
+
modelCapabilities: {},
|
|
3409
|
+
modelStates: {},
|
|
3410
|
+
deployments: {},
|
|
3411
|
+
authFailed: false
|
|
3412
|
+
};
|
|
3413
|
+
function isAuthError(leg) {
|
|
3414
|
+
return !leg.ok && /^HTTP 40[13]\b/u.test(leg.error ?? "");
|
|
3415
|
+
}
|
|
3171
3416
|
async function fetchCatalog(base, ctx, headers) {
|
|
3172
3417
|
const detailOpts = { url: `${base}/v1/model/info`, timeoutMs: ctx.httpTimeoutMs, headers };
|
|
3173
3418
|
const detail = await (ctx.signal ? probeJson({ ...detailOpts, signal: ctx.signal }) : probeJson(detailOpts));
|
|
3174
3419
|
if (detail.ok && Array.isArray(detail.data?.data)) {
|
|
3175
|
-
const catalog = {
|
|
3420
|
+
const catalog = {
|
|
3421
|
+
models: [],
|
|
3422
|
+
modelCapabilities: {},
|
|
3423
|
+
modelStates: {},
|
|
3424
|
+
deployments: {},
|
|
3425
|
+
authFailed: false
|
|
3426
|
+
};
|
|
3427
|
+
const capabilityRows = {};
|
|
3176
3428
|
for (const row of detail.data.data) {
|
|
3177
3429
|
if (typeof row?.model_name !== "string" || row.model_name.length === 0) continue;
|
|
3178
3430
|
const alias = row.model_name;
|
|
3179
|
-
if (catalog.deployments[alias]
|
|
3180
|
-
|
|
3431
|
+
if (catalog.deployments[alias] === void 0) {
|
|
3432
|
+
catalog.models.push(alias);
|
|
3433
|
+
catalog.deployments[alias] = [];
|
|
3434
|
+
capabilityRows[alias] = [];
|
|
3435
|
+
}
|
|
3181
3436
|
const caps = row.model_info ? capabilitiesFromLiteLLMModelInfo(row.model_info) : {};
|
|
3182
|
-
|
|
3437
|
+
capabilityRows[alias]?.push(caps);
|
|
3183
3438
|
const upstream = row.litellm_params?.model;
|
|
3184
3439
|
const apiBase = row.litellm_params?.api_base;
|
|
3185
|
-
catalog.deployments[alias]
|
|
3440
|
+
catalog.deployments[alias]?.push({
|
|
3186
3441
|
model: typeof upstream === "string" ? upstream : alias,
|
|
3187
3442
|
...typeof apiBase === "string" ? { apiBase } : {}
|
|
3188
|
-
};
|
|
3443
|
+
});
|
|
3444
|
+
}
|
|
3445
|
+
for (const alias of catalog.models) {
|
|
3446
|
+
const caps = aggregateLiteLLMCapabilities(capabilityRows[alias] ?? []);
|
|
3447
|
+
if (Object.keys(caps).length > 0) catalog.modelCapabilities[alias] = caps;
|
|
3189
3448
|
}
|
|
3190
3449
|
if (catalog.models.length > 0) return catalog;
|
|
3191
3450
|
}
|
|
3451
|
+
const detailAuthFailed = isAuthError(detail);
|
|
3192
3452
|
const listOpts = { url: `${base}/v1/models`, timeoutMs: ctx.httpTimeoutMs, headers };
|
|
3193
3453
|
const list = await (ctx.signal ? probeJson({ ...listOpts, signal: ctx.signal }) : probeJson(listOpts));
|
|
3194
|
-
if (!list.ok || !Array.isArray(list.data?.data))
|
|
3454
|
+
if (!list.ok || !Array.isArray(list.data?.data)) {
|
|
3455
|
+
return { ...EMPTY_CATALOG, authFailed: detailAuthFailed || isAuthError(list) };
|
|
3456
|
+
}
|
|
3195
3457
|
const models = list.data.data.map((row) => typeof row?.id === "string" ? row.id : null).filter((id) => id !== null && id.length > 0);
|
|
3196
|
-
return { models, modelCapabilities: {}, modelStates: {}, deployments: {} };
|
|
3458
|
+
return { models, modelCapabilities: {}, modelStates: {}, deployments: {}, authFailed: false };
|
|
3197
3459
|
}
|
|
3198
3460
|
var litellmRuntime = {
|
|
3199
3461
|
id: "litellm",
|
|
@@ -3214,8 +3476,9 @@ var litellmRuntime = {
|
|
|
3214
3476
|
if (catalog.models.length === 0) {
|
|
3215
3477
|
const result2 = {
|
|
3216
3478
|
ok: false,
|
|
3217
|
-
error: "gateway is live but served no model catalog; check the target's API key"
|
|
3479
|
+
error: catalog.authFailed ? "gateway rejected the key" : "gateway is live but served no model catalog; check the target's API key"
|
|
3218
3480
|
};
|
|
3481
|
+
if (catalog.authFailed) result2.authFailed = true;
|
|
3219
3482
|
if (live.latencyMs !== void 0) result2.latencyMs = live.latencyMs;
|
|
3220
3483
|
return result2;
|
|
3221
3484
|
}
|
|
@@ -3235,7 +3498,18 @@ var litellmRuntime = {
|
|
|
3235
3498
|
if (configured && !catalog.models.includes(configured)) {
|
|
3236
3499
|
notes.push(`configured model '${configured}' is not in the gateway catalog`);
|
|
3237
3500
|
}
|
|
3238
|
-
const
|
|
3501
|
+
const routeEntries = Object.entries(catalog.deployments);
|
|
3502
|
+
const physical = routeEntries.filter(([alias, deployments]) => {
|
|
3503
|
+
const slash = alias.indexOf("/");
|
|
3504
|
+
if (slash <= 0 || deployments.length !== 1) return false;
|
|
3505
|
+
const upstream = deployments[0]?.model.replace(/^openai\//u, "");
|
|
3506
|
+
return upstream === alias.slice(slash + 1);
|
|
3507
|
+
});
|
|
3508
|
+
if (physical.length > 0) notes.push(`physical routes: ${physical.length} node/model names map one-to-one`);
|
|
3509
|
+
const routed = routeEntries.filter(([alias]) => !physical.some(([physicalAlias]) => physicalAlias === alias)).map(([alias, deployments]) => {
|
|
3510
|
+
const models = [...new Set(deployments.map((deployment) => deployment.model))];
|
|
3511
|
+
return `${alias}=${models.join("|")}`;
|
|
3512
|
+
}).sort();
|
|
3239
3513
|
if (routed.length > 0) notes.push(`routes: ${routed.join(", ")}`);
|
|
3240
3514
|
if (notes.length > 0) result.notes = notes;
|
|
3241
3515
|
return result;
|
|
@@ -3318,8 +3592,9 @@ export {
|
|
|
3318
3592
|
lmStudioReasoningEffort,
|
|
3319
3593
|
listLmStudioModels,
|
|
3320
3594
|
greetLmStudio,
|
|
3595
|
+
boundedExternalDiagnostic,
|
|
3321
3596
|
formatContextWindowSlots,
|
|
3322
3597
|
BUILTIN_RUNTIMES,
|
|
3323
3598
|
registerBuiltinRuntimes
|
|
3324
3599
|
};
|
|
3325
|
-
//# sourceMappingURL=chunk-
|
|
3600
|
+
//# sourceMappingURL=chunk-VW6DOEDG.js.map
|
|
@@ -2,12 +2,12 @@ import { createRequire as __clioCreateRequire } from "node:module"; const requir
|
|
|
2
2
|
import {
|
|
3
3
|
canonicalJson,
|
|
4
4
|
sha256
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-IWT4SF4R.js";
|
|
6
6
|
import {
|
|
7
7
|
addResponseModelIdObservationCount,
|
|
8
8
|
emptyResponseModelIdObservationCounts,
|
|
9
9
|
responseModelIdObservationFromRecord
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-JKKCYP3C.js";
|
|
11
11
|
import {
|
|
12
12
|
uncachedPrefillTokens
|
|
13
13
|
} from "./chunk-3DPEIQKN.js";
|
|
@@ -17,16 +17,16 @@ import {
|
|
|
17
17
|
import {
|
|
18
18
|
ceilChars,
|
|
19
19
|
extractReasoningTokens
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-NZMNUPZZ.js";
|
|
21
21
|
import {
|
|
22
22
|
settingsPath
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-GHS5EBTQ.js";
|
|
24
24
|
import {
|
|
25
25
|
expandConfigPath
|
|
26
26
|
} from "./chunk-336NSSKI.js";
|
|
27
27
|
import {
|
|
28
28
|
isEngineContextOverflow
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-YPC6ZR5L.js";
|
|
30
30
|
import {
|
|
31
31
|
init_esm_shims
|
|
32
32
|
} from "./chunk-3R73A4XB.js";
|
|
@@ -426,7 +426,16 @@ function assistantSessionPayload(message, failure) {
|
|
|
426
426
|
if (Array.isArray(raw.content)) payload.content = raw.content;
|
|
427
427
|
if (thinking.length > 0) payload.thinking = thinking;
|
|
428
428
|
payload.responseModelIdObservation = responseModelIdObservationFromRecord(raw, "not-observed");
|
|
429
|
-
for (const key of [
|
|
429
|
+
for (const key of [
|
|
430
|
+
"usage",
|
|
431
|
+
"api",
|
|
432
|
+
"provider",
|
|
433
|
+
"model",
|
|
434
|
+
"responseModel",
|
|
435
|
+
"responseId",
|
|
436
|
+
"gatewayRouting",
|
|
437
|
+
"diagnostics"
|
|
438
|
+
]) {
|
|
430
439
|
if (raw[key] !== void 0) payload[key] = raw[key];
|
|
431
440
|
}
|
|
432
441
|
if (failure && !isSelfExplainingAbort({ stopReason: raw.stopReason, errorMessage: raw.errorMessage, text })) {
|
|
@@ -1185,4 +1194,4 @@ export {
|
|
|
1185
1194
|
readFileArgsAsync,
|
|
1186
1195
|
expandInlineFileReferencesAsync
|
|
1187
1196
|
};
|
|
1188
|
-
//# sourceMappingURL=chunk-
|
|
1197
|
+
//# sourceMappingURL=chunk-W6RRQCPQ.js.map
|
|
@@ -2,22 +2,22 @@ import { createRequire as __clioCreateRequire } from "node:module"; const requir
|
|
|
2
2
|
import {
|
|
3
3
|
readStrictLayeredSettings,
|
|
4
4
|
updateLayeredSettings
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-4WR7VSYB.js";
|
|
6
|
+
import {
|
|
7
|
+
assertAgentIdNamespace
|
|
8
|
+
} from "./chunk-DR52UMZW.js";
|
|
6
9
|
import {
|
|
7
10
|
resolveShutdownHookBudgetMs,
|
|
8
11
|
runWithBudget,
|
|
9
12
|
writeShutdownNotice
|
|
10
13
|
} from "./chunk-4O6MANBS.js";
|
|
11
14
|
import {
|
|
12
|
-
|
|
13
|
-
|
|
15
|
+
formatSettingsFailure,
|
|
16
|
+
settingsPath
|
|
17
|
+
} from "./chunk-GHS5EBTQ.js";
|
|
14
18
|
import {
|
|
15
19
|
getSharedBus
|
|
16
20
|
} from "./chunk-PMZVFWSR.js";
|
|
17
|
-
import {
|
|
18
|
-
formatSettingsFailure,
|
|
19
|
-
settingsPath
|
|
20
|
-
} from "./chunk-34BHNEE3.js";
|
|
21
21
|
import {
|
|
22
22
|
BusChannels
|
|
23
23
|
} from "./chunk-F4EKGO4N.js";
|
|
@@ -377,4 +377,4 @@ export {
|
|
|
377
377
|
ConfigDomainModule,
|
|
378
378
|
createConfigDomainModule
|
|
379
379
|
};
|
|
380
|
-
//# sourceMappingURL=chunk-
|
|
380
|
+
//# sourceMappingURL=chunk-WBKFA554.js.map
|
|
@@ -4,23 +4,23 @@ import {
|
|
|
4
4
|
loadProjectRules,
|
|
5
5
|
renderOperatorProfile,
|
|
6
6
|
selectActiveRules
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-KK4JZPBQ.js";
|
|
8
8
|
import {
|
|
9
9
|
loadFragments
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-Y3CBHOR6.js";
|
|
11
11
|
import {
|
|
12
12
|
compile,
|
|
13
13
|
compileWorker
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-AF4YM7Z4.js";
|
|
15
15
|
import {
|
|
16
16
|
sha256
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-IWT4SF4R.js";
|
|
18
18
|
import {
|
|
19
19
|
classifyProjectPreload
|
|
20
20
|
} from "./chunk-JVCV3ICN.js";
|
|
21
21
|
import {
|
|
22
22
|
isUserVisibleAgent
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-B4OAX3SI.js";
|
|
24
24
|
import {
|
|
25
25
|
BusChannels
|
|
26
26
|
} from "./chunk-F4EKGO4N.js";
|
|
@@ -36,7 +36,7 @@ var FLEET_PROMPT_PURPOSE_MAX_CHARS = 64;
|
|
|
36
36
|
var FLEET_HANDOFF_RULE = "A file you assigned to a worker is not yours to edit while its dispatch is pending or after it succeeds; if you already changed it, say so in your report.";
|
|
37
37
|
var FLEET_REFUSAL_DISCLOSURE = "When admission refuses a dispatch, report the refusal and the reason it gave; never substitute another agent without saying why.";
|
|
38
38
|
var FLEET_ANTI_CHURN_RULE = "A dispatch with the same target files and the same goal as one you already ran is a repeat however differently you word it: read that run's receipt, or run the check yourself, instead of dispatching again.";
|
|
39
|
-
var FLEET_SPECIALIST_ROUTING = "Pick by job:
|
|
39
|
+
var FLEET_SPECIALIST_ROUTING = "Pick by job: supplied URLs, standards, or papers -> researcher; current ecosystems or an open-world second opinion -> world-knowledge; repository recon -> scout; receipts -> provenance; tests -> tester; gates -> verifier.";
|
|
40
40
|
function fleetPromptPurpose(description) {
|
|
41
41
|
const trimmed = description.trim().replace(/\s+/gu, " ");
|
|
42
42
|
if (trimmed.length === 0) return "";
|
|
@@ -720,4 +720,4 @@ export {
|
|
|
720
720
|
createPromptsDomainModule,
|
|
721
721
|
SchedulingDomainModule
|
|
722
722
|
};
|
|
723
|
-
//# sourceMappingURL=chunk-
|
|
723
|
+
//# sourceMappingURL=chunk-WCXUNS7U.js.map
|