cartethyia 2.4.6 → 2.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -13
- package/dist/dashboard/assets/BannedPage-ChqnTRpZ.js +1 -0
- package/dist/dashboard/assets/BannedPage-ChqnTRpZ.js.gz +0 -0
- package/dist/dashboard/assets/{CliToolDetailPage-Bcy150Jo.js → CliToolDetailPage-Bb9CNuoh.js} +1 -1
- package/dist/dashboard/assets/CliToolDetailPage-Bb9CNuoh.js.gz +0 -0
- package/dist/dashboard/assets/{CliToolsPage-DyNXefph.js → CliToolsPage-BXUaRCQQ.js} +1 -1
- package/dist/dashboard/assets/CliToolsPage-BXUaRCQQ.js.gz +0 -0
- package/dist/dashboard/assets/CombosPage-CisNZOUt.js +1 -0
- package/dist/dashboard/assets/CombosPage-CisNZOUt.js.gz +0 -0
- package/dist/dashboard/assets/{ConsoleLogPage-CATpAEOz.js → ConsoleLogPage-BOpI_LOH.js} +1 -1
- package/dist/dashboard/assets/ConsoleLogPage-BOpI_LOH.js.gz +0 -0
- package/dist/dashboard/assets/{CustomizationPage-D6jEU7nL.js → CustomizationPage-DAkdvJ4k.js} +1 -1
- package/dist/dashboard/assets/CustomizationPage-DAkdvJ4k.js.gz +0 -0
- package/dist/dashboard/assets/{HealthEventsModal-CZkpn0a7.js → HealthEventsModal-DeT-VXHd.js} +1 -1
- package/dist/dashboard/assets/HealthEventsModal-DeT-VXHd.js.gz +0 -0
- package/dist/dashboard/assets/{LoginPage-BJlMVN4U.js → LoginPage-CytxSeGP.js} +1 -1
- package/dist/dashboard/assets/LoginPage-CytxSeGP.js.gz +0 -0
- package/dist/dashboard/assets/{ModelPicker-Br3CXEau.js → ModelPicker-oQ-SDXp8.js} +1 -1
- package/dist/dashboard/assets/ModelPicker-oQ-SDXp8.js.gz +0 -0
- package/dist/dashboard/assets/OverviewPage-CU7S1wJs.js +1 -0
- package/dist/dashboard/assets/OverviewPage-CU7S1wJs.js.gz +0 -0
- package/dist/dashboard/assets/ProviderDetailPage-DLm2baot.js +3 -0
- package/dist/dashboard/assets/ProviderDetailPage-DLm2baot.js.gz +0 -0
- package/dist/dashboard/assets/ProviderIcon-CmfzxpVM.js +1 -0
- package/dist/dashboard/assets/ProviderIcon-CmfzxpVM.js.gz +0 -0
- package/dist/dashboard/assets/ProvidersPage-DOXfuzfL.js +1 -0
- package/dist/dashboard/assets/ProvidersPage-DOXfuzfL.js.gz +0 -0
- package/dist/dashboard/assets/ProxyPage-wvk0ciQN.js +7 -0
- package/dist/dashboard/assets/ProxyPage-wvk0ciQN.js.gz +0 -0
- package/dist/dashboard/assets/QuotaPage-Cn_fcUHE.js +1 -0
- package/dist/dashboard/assets/QuotaPage-Cn_fcUHE.js.gz +0 -0
- package/dist/dashboard/assets/{SettingsPage-BHW4Zt06.js → SettingsPage-8-eVadhc.js} +1 -1
- package/dist/dashboard/assets/SettingsPage-8-eVadhc.js.gz +0 -0
- package/dist/dashboard/assets/{SetupPage-VOYC_lIa.js → SetupPage-uEIXPyGO.js} +1 -1
- package/dist/dashboard/assets/SetupPage-uEIXPyGO.js.gz +0 -0
- package/dist/dashboard/assets/SortableList-DCY0TPTZ.js +1 -0
- package/dist/dashboard/assets/SortableList-DCY0TPTZ.js.gz +0 -0
- package/dist/dashboard/assets/{StudioPage-BNIDLiU6.js → StudioPage-DqK5E26W.js} +4 -4
- package/dist/dashboard/assets/StudioPage-DqK5E26W.js.gz +0 -0
- package/dist/dashboard/assets/UsagePage-38JfiZ0H.js +56 -0
- package/dist/dashboard/assets/UsagePage-38JfiZ0H.js.gz +0 -0
- package/dist/dashboard/assets/{api-keys-BETfaMYZ.js → api-keys-BmDbsior.js} +1 -1
- package/dist/dashboard/assets/api-keys-BmDbsior.js.gz +0 -0
- package/dist/dashboard/assets/app-BbpSarVV.css +2 -0
- package/dist/dashboard/assets/app-BbpSarVV.css.gz +0 -0
- package/dist/dashboard/assets/assert-BHfaei-X.js +1 -0
- package/dist/dashboard/assets/assert-BHfaei-X.js.gz +0 -0
- package/dist/dashboard/assets/{badge-BTyGk_DL.js → badge-DpXT4Ixt.js} +1 -1
- package/dist/dashboard/assets/badge-DpXT4Ixt.js.gz +0 -0
- package/dist/dashboard/assets/{banner-bujTWYM4.js → banner-CSAAWLJv.js} +1 -1
- package/dist/dashboard/assets/banner-CSAAWLJv.js.gz +0 -0
- package/dist/dashboard/assets/{card-B0Bnx5CA.js → card-DEhRXXw4.js} +1 -1
- package/dist/dashboard/assets/card-DEhRXXw4.js.gz +0 -0
- package/dist/dashboard/assets/{cli-tools-DE2ug812.js → cli-tools-B0wBq-RL.js} +1 -1
- package/dist/dashboard/assets/cli-tools-B0wBq-RL.js.gz +0 -0
- package/dist/dashboard/assets/{clipboard-button-R_rArH8S.js → clipboard-button-DOo6EU8O.js} +1 -1
- package/dist/dashboard/assets/clipboard-button-DOo6EU8O.js.gz +0 -0
- package/dist/dashboard/assets/{dialog-BWIP_EvW.js → dialog-BvQeBMfP.js} +1 -1
- package/dist/dashboard/assets/dialog-BvQeBMfP.js.gz +0 -0
- package/dist/dashboard/assets/{drawer-BKcgVugF.js → drawer-CMwPXwQB.js} +1 -1
- package/dist/dashboard/assets/drawer-CMwPXwQB.js.gz +0 -0
- package/dist/dashboard/assets/entry--yj84zk3.js +4 -0
- package/dist/dashboard/assets/entry--yj84zk3.js.gz +0 -0
- package/dist/dashboard/assets/{entry-CcWkGR4a.js → entry-D4O2229X.js} +1 -1
- package/dist/dashboard/assets/{entry-CcWkGR4a.js.gz → entry-D4O2229X.js.gz} +0 -0
- package/dist/dashboard/assets/{entry-kTiTFrvh.js → entry-DKvr5Q9K.js} +1 -1
- package/dist/dashboard/assets/entry-DKvr5Q9K.js.gz +0 -0
- package/dist/dashboard/assets/{github-badge-Booc5mNe.js → github-badge-zliLvBwr.js} +1 -1
- package/dist/dashboard/assets/github-badge-zliLvBwr.js.gz +0 -0
- package/dist/dashboard/assets/{index-D70pChfn.js → index-CcD1eSJ6.js} +2 -2
- package/dist/dashboard/assets/index-CcD1eSJ6.js.gz +0 -0
- package/dist/dashboard/assets/{inline-D1TCqM2D.js → inline-D1IlZZ8H.js} +1 -1
- package/dist/dashboard/assets/inline-D1IlZZ8H.js.gz +0 -0
- package/dist/dashboard/assets/{input-B9oyU93y.js → input-BpVZdrbc.js} +1 -1
- package/dist/dashboard/assets/input-BpVZdrbc.js.gz +0 -0
- package/dist/dashboard/assets/{layout-BArzXirQ.js → layout-BioLW7gN.js} +1 -1
- package/dist/dashboard/assets/layout-BioLW7gN.js.gz +0 -0
- package/dist/dashboard/assets/{list-row-BVZzaoHF.js → list-row-CwVcGAIc.js} +1 -1
- package/dist/dashboard/assets/list-row-CwVcGAIc.js.gz +0 -0
- package/dist/dashboard/assets/{live-EmuIayqp.js → live-yfEJFF9T.js} +1 -1
- package/dist/dashboard/assets/live-yfEJFF9T.js.gz +0 -0
- package/dist/dashboard/assets/{model-bans-CSPQ9xB0.js → model-bans-CT-TxSNX.js} +1 -1
- package/dist/dashboard/assets/model-bans-CT-TxSNX.js.gz +0 -0
- package/dist/dashboard/assets/providers/cursor.webp +0 -0
- package/dist/dashboard/assets/providers/trae.webp +0 -0
- package/dist/dashboard/assets/{routing-BExgxxBU.js → routing-Cs6jl49L.js} +1 -1
- package/dist/dashboard/assets/routing-Cs6jl49L.js.gz +0 -0
- package/dist/dashboard/assets/select-XPJ-dIw3.js +41 -0
- package/dist/dashboard/assets/select-XPJ-dIw3.js.gz +0 -0
- package/dist/dashboard/assets/settings-CfcTcOyU.js +1 -0
- package/dist/dashboard/assets/settings-CfcTcOyU.js.gz +0 -0
- package/dist/dashboard/assets/{stack-Ca5HxI5i.js → stack-C9_uUjaA.js} +1 -1
- package/dist/dashboard/assets/stack-C9_uUjaA.js.gz +0 -0
- package/dist/dashboard/assets/{state-CzUPfLXo.js → state-DA0B95UQ.js} +1 -1
- package/dist/dashboard/assets/state-DA0B95UQ.js.gz +0 -0
- package/dist/dashboard/assets/{switch-DOUIky_i.js → switch-Cittxy-x.js} +1 -1
- package/dist/dashboard/assets/switch-Cittxy-x.js.gz +0 -0
- package/dist/dashboard/assets/{toast-C76WrMhc.js → toast-CNt_jzO4.js} +1 -1
- package/dist/dashboard/assets/toast-CNt_jzO4.js.gz +0 -0
- package/dist/dashboard/assets/{useMutation-D87FZwH0.js → useMutation-BQKMcJ1H.js} +1 -1
- package/dist/dashboard/assets/useMutation-BQKMcJ1H.js.gz +0 -0
- package/dist/dashboard/index.html +1 -1
- package/dist/dashboard/index.html.gz +0 -0
- package/dist/dashboard/precompressed-assets.json +51 -52
- package/migrations/full-postgres/0015_add_payload_stages.sql +18 -0
- package/migrations/full-postgres/0016_add_share_link_slug.sql +20 -0
- package/migrations/full-postgres/0017_add_models_pro_only.sql +18 -0
- package/migrations/full-postgres/0018_add_accounts_quota_plan.sql +18 -0
- package/migrations/full-postgres/0019_add_models_free_tier.sql +15 -0
- package/migrations/lite-sqlite3/0015_add_payload_stages.sql +18 -0
- package/migrations/lite-sqlite3/0016_add_share_link_slug.sql +20 -0
- package/migrations/lite-sqlite3/0017_add_models_pro_only.sql +18 -0
- package/migrations/lite-sqlite3/0018_add_accounts_quota_plan.sql +18 -0
- package/migrations/lite-sqlite3/0019_add_models_free_tier.sql +15 -0
- package/package.json +3 -2
- package/scripts/cli/command/console-menu.ts +30 -11
- package/scripts/cli/command/start.ts +77 -13
- package/scripts/cli/command/tray.ts +47 -8
- package/scripts/cli/command/update.ts +1 -1
- package/scripts/cli/gateway/instance-lock.ts +105 -0
- package/scripts/cli/gateway/spawn.ts +173 -101
- package/scripts/cli/ui/background.ts +110 -49
- package/src/boot/app.ts +20 -6
- package/src/boot/dependencies.ts +19 -0
- package/src/boot/elysia-typebox-bridge.ts +37 -0
- package/src/boot/lifecycle.ts +2 -0
- package/src/config/cooldowns.ts +138 -138
- package/src/config/providers.ts +5 -5
- package/src/config/runtime.ts +19 -3
- package/src/config/spec.ts +9 -0
- package/src/console/api-keys/contracts.ts +414 -391
- package/src/console/api-keys/routes.ts +880 -870
- package/src/console/auth/account-reset-store.ts +14 -0
- package/src/console/auth/account-reset.ts +3 -2
- package/src/console/auth/setup-service.ts +6 -3
- package/src/console/domain-registration.ts +9 -2
- package/src/console/observability/contracts.ts +475 -455
- package/src/console/observability/store.ts +1015 -952
- package/src/console/providers/catalog/contracts.ts +31 -0
- package/src/console/providers/catalog/provider-operations.ts +8 -0
- package/src/console/providers/catalog/store.ts +1532 -1525
- package/src/console/providers/oauth/callback-listener.ts +18 -3
- package/src/console/providers/oauth/routes.ts +38 -15
- package/src/console/quota/refresh.ts +19 -0
- package/src/console/updates/routes.ts +162 -4
- package/src/main.ts +3 -0
- package/src/network/http2-bidi.ts +85 -0
- package/src/network/outbound-fetch.ts +1 -26
- package/src/network/pool/agent.ts +478 -460
- package/src/network/pool/resolver.ts +1104 -544
- package/src/network/pool-health-machine.ts +12 -5
- package/src/observability/payload-capture.ts +344 -324
- package/src/persistence/db-pg.ts +9 -3
- package/src/persistence/db-sqlite.ts +497 -495
- package/src/persistence/health-event-flush.ts +137 -0
- package/src/persistence/migrate.ts +181 -129
- package/src/persistence/schema.ts +1360 -1295
- package/src/persistence/settings-revision.ts +25 -0
- package/src/persistence/shared-cache.ts +217 -0
- package/src/persistence/stores/share-store.ts +556 -528
- package/src/persistence/usage-flush.ts +61 -1
- package/src/protocol/canonical-model.ts +23 -1
- package/src/protocol/response/chat.ts +143 -10
- package/src/protocol/response/omp-tool-call-markup.ts +221 -0
- package/src/providers/default-registry.ts +173 -1
- package/src/providers/discovery/openai-model-discovery.ts +39 -3
- package/src/providers/discovery/openrouter-free-roster.ts +98 -0
- package/src/providers/discovery/probing-service.ts +1022 -1001
- package/src/providers/integrations/buddy/buddy-catalog-shared.ts +39 -0
- package/src/providers/integrations/buddy/buddy-chat-shared.ts +913 -914
- package/src/providers/integrations/buddy/buddy-conversation-headers.ts +18 -5
- package/src/providers/integrations/buddy/codebuddy/cn-provider.ts +4 -0
- package/src/providers/integrations/buddy/codebuddy/provider.ts +180 -175
- package/src/providers/integrations/buddy/codebuddy/shared.ts +15 -6
- package/src/providers/integrations/buddy/workbuddy/provider.ts +206 -204
- package/src/providers/integrations/buddy/workbuddy/shared.ts +3 -3
- package/src/providers/integrations/claude/claude.ts +606 -582
- package/src/providers/integrations/cline/cline-quota.ts +18 -16
- package/src/providers/integrations/cline/cline.ts +539 -468
- package/src/providers/integrations/commandcode/commandcode.ts +675 -541
- package/src/providers/integrations/commandcode/discovery.ts +116 -0
- package/src/providers/integrations/commandcode/quota.ts +160 -0
- package/src/providers/integrations/cursor/cursor-auth.ts +418 -0
- package/src/providers/integrations/cursor/cursor-catalog.ts +368 -0
- package/src/providers/integrations/cursor/cursor-http2.ts +300 -0
- package/src/providers/integrations/cursor/cursor-identity.ts +92 -0
- package/src/providers/integrations/cursor/cursor-request.ts +471 -0
- package/src/providers/integrations/cursor/cursor-session-manager.ts +281 -0
- package/src/providers/integrations/cursor/cursor-shared.ts +108 -0
- package/src/providers/integrations/cursor/cursor.ts +960 -0
- package/src/providers/integrations/cursor/protocol/framing.ts +129 -0
- package/src/providers/integrations/cursor/protocol/messages.ts +2355 -0
- package/src/providers/integrations/cursor/protocol/struct.ts +305 -0
- package/src/providers/integrations/github/github.ts +4 -4
- package/src/providers/integrations/hermes.ts +79 -8
- package/src/providers/integrations/kilo/kilo-discovery.ts +10 -1
- package/src/providers/integrations/kilo/kilo.ts +153 -146
- package/src/providers/integrations/opencode/provider.ts +532 -538
- package/src/providers/integrations/openrouter/provider.ts +139 -281
- package/src/providers/integrations/qoder/qoder-catalog.ts +450 -0
- package/src/providers/integrations/qoder/qoder-oauth.ts +310 -257
- package/src/providers/integrations/qoder/qoder-realm.ts +106 -0
- package/src/providers/integrations/qoder/qoder-virtual.ts +77 -0
- package/src/providers/integrations/qoder/qoder.ts +865 -730
- package/src/providers/integrations/trae/trae-catalog.ts +190 -0
- package/src/providers/integrations/trae/trae-headers.ts +149 -0
- package/src/providers/integrations/trae/trae-oauth.ts +773 -0
- package/src/providers/integrations/trae/trae-protocol.ts +400 -0
- package/src/providers/integrations/trae/trae-realm.ts +220 -0
- package/src/providers/integrations/trae/trae.ts +458 -0
- package/src/providers/operations/account-health-service.ts +107 -10
- package/src/providers/operations/client-versions.ts +133 -6
- package/src/providers/operations/provider-catalog-seeder.ts +95 -86
- package/src/providers/operations/provider-credential-service.ts +46 -7
- package/src/providers/provider-contracts.ts +76 -0
- package/src/providers/provider-metadata.ts +78 -6
- package/src/providers/provider-model-definition.ts +373 -349
- package/src/security/api-key-auth.ts +126 -8
- package/src/transport/contracts.ts +3 -0
- package/src/transport/dispatch/attempt-finalize.ts +32 -1
- package/src/transport/dispatch/attempt-loop.ts +530 -515
- package/src/transport/dispatch/generation.ts +88 -21
- package/src/transport/dispatch/leases.ts +99 -2
- package/src/transport/dispatch/proxy-request.ts +60 -3
- package/src/transport/dispatch/streaming/finalize.ts +16 -1
- package/src/transport/dispatch/streaming/stream.ts +22 -2
- package/src/transport/dispatch/upstream.ts +19 -1
- package/src/transport/guards/auth-guard.ts +26 -1
- package/src/transport/guards/body-policy.ts +5 -4
- package/src/transport/request/preparer.ts +103 -0
- package/src/transport/request/state.ts +14 -0
- package/src/transport/routing/plan-gate.ts +45 -0
- package/src/transport/routing/route-catalog.ts +799 -777
- package/src/transport/routing/route-model.ts +52 -1
- package/src/transport/routing/router.ts +51 -0
- package/dist/dashboard/assets/BannedPage-QhvbJB9o.js +0 -1
- package/dist/dashboard/assets/BannedPage-QhvbJB9o.js.gz +0 -0
- package/dist/dashboard/assets/CliToolDetailPage-Bcy150Jo.js.gz +0 -0
- package/dist/dashboard/assets/CliToolsPage-DyNXefph.js.gz +0 -0
- package/dist/dashboard/assets/CombosPage-Cak0ljnO.js +0 -1
- package/dist/dashboard/assets/CombosPage-Cak0ljnO.js.gz +0 -0
- package/dist/dashboard/assets/ConsoleLogPage-CATpAEOz.js.gz +0 -0
- package/dist/dashboard/assets/CustomizationPage-D6jEU7nL.js.gz +0 -0
- package/dist/dashboard/assets/HealthEventsModal-CZkpn0a7.js.gz +0 -0
- package/dist/dashboard/assets/LoginPage-BJlMVN4U.js.gz +0 -0
- package/dist/dashboard/assets/ModelPicker-Br3CXEau.js.gz +0 -0
- package/dist/dashboard/assets/OverviewPage-CQxXbo2g.js +0 -1
- package/dist/dashboard/assets/OverviewPage-CQxXbo2g.js.gz +0 -0
- package/dist/dashboard/assets/ProviderDetailPage--0RBNh99.js +0 -3
- package/dist/dashboard/assets/ProviderDetailPage--0RBNh99.js.gz +0 -0
- package/dist/dashboard/assets/ProviderIcon-paOCq8I0.js +0 -1
- package/dist/dashboard/assets/ProviderIcon-paOCq8I0.js.gz +0 -0
- package/dist/dashboard/assets/ProvidersPage-1M-C3mbu.js +0 -1
- package/dist/dashboard/assets/ProvidersPage-1M-C3mbu.js.gz +0 -0
- package/dist/dashboard/assets/ProxyPage-CXiumA53.js +0 -7
- package/dist/dashboard/assets/ProxyPage-CXiumA53.js.gz +0 -0
- package/dist/dashboard/assets/QuotaPage-BGDIfIYP.js +0 -1
- package/dist/dashboard/assets/QuotaPage-BGDIfIYP.js.gz +0 -0
- package/dist/dashboard/assets/SettingsPage-BHW4Zt06.js.gz +0 -0
- package/dist/dashboard/assets/SetupPage-VOYC_lIa.js.gz +0 -0
- package/dist/dashboard/assets/SortableList-DpOTnGuH.js +0 -1
- package/dist/dashboard/assets/SortableList-DpOTnGuH.js.gz +0 -0
- package/dist/dashboard/assets/StudioPage-BNIDLiU6.js.gz +0 -0
- package/dist/dashboard/assets/UsagePage-BAFaSDQV.js +0 -56
- package/dist/dashboard/assets/UsagePage-BAFaSDQV.js.gz +0 -0
- package/dist/dashboard/assets/api-keys-BETfaMYZ.js.gz +0 -0
- package/dist/dashboard/assets/app-BLCvGdzb.css +0 -2
- package/dist/dashboard/assets/app-BLCvGdzb.css.gz +0 -0
- package/dist/dashboard/assets/assert-7J6_LVD3.js +0 -1
- package/dist/dashboard/assets/assert-7J6_LVD3.js.gz +0 -0
- package/dist/dashboard/assets/badge-BTyGk_DL.js.gz +0 -0
- package/dist/dashboard/assets/banner-bujTWYM4.js.gz +0 -0
- package/dist/dashboard/assets/card-B0Bnx5CA.js.gz +0 -0
- package/dist/dashboard/assets/cli-tools-DE2ug812.js.gz +0 -0
- package/dist/dashboard/assets/clipboard-button-R_rArH8S.js.gz +0 -0
- package/dist/dashboard/assets/dialog-BWIP_EvW.js.gz +0 -0
- package/dist/dashboard/assets/drawer-BKcgVugF.js.gz +0 -0
- package/dist/dashboard/assets/entry-7dpgvpJ3.js +0 -4
- package/dist/dashboard/assets/entry-7dpgvpJ3.js.gz +0 -0
- package/dist/dashboard/assets/entry-kTiTFrvh.js.gz +0 -0
- package/dist/dashboard/assets/github-badge-Booc5mNe.js.gz +0 -0
- package/dist/dashboard/assets/index-D70pChfn.js.gz +0 -0
- package/dist/dashboard/assets/inline-D1TCqM2D.js.gz +0 -0
- package/dist/dashboard/assets/input-B9oyU93y.js.gz +0 -0
- package/dist/dashboard/assets/layout-BArzXirQ.js.gz +0 -0
- package/dist/dashboard/assets/list-row-BVZzaoHF.js.gz +0 -0
- package/dist/dashboard/assets/live-EmuIayqp.js.gz +0 -0
- package/dist/dashboard/assets/model-bans-CSPQ9xB0.js.gz +0 -0
- package/dist/dashboard/assets/routing-BExgxxBU.js.gz +0 -0
- package/dist/dashboard/assets/select-C9mMoEpJ.js +0 -41
- package/dist/dashboard/assets/select-C9mMoEpJ.js.gz +0 -0
- package/dist/dashboard/assets/settings-C4_Gn_wq.js +0 -1
- package/dist/dashboard/assets/settings-C4_Gn_wq.js.gz +0 -0
- package/dist/dashboard/assets/sliders-horizontal-ClG7dBeJ.js +0 -1
- package/dist/dashboard/assets/sliders-horizontal-ClG7dBeJ.js.gz +0 -0
- package/dist/dashboard/assets/stack-Ca5HxI5i.js.gz +0 -0
- package/dist/dashboard/assets/state-CzUPfLXo.js.gz +0 -0
- package/dist/dashboard/assets/switch-DOUIky_i.js.gz +0 -0
- package/dist/dashboard/assets/toast-C76WrMhc.js.gz +0 -0
- package/dist/dashboard/assets/useMutation-D87FZwH0.js.gz +0 -0
- package/src/network/tls/bun-client-hello.ts +0 -112
- /package/dist/dashboard/assets/{app-Cjq7nrwu.js → app-C-Y4oZT0.js} +0 -0
- /package/dist/dashboard/assets/{app-Cjq7nrwu.js.gz → app-C-Y4oZT0.js.gz} +0 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
// Qoder realms: one vendor, two unrelated deployments.
|
|
2
|
+
//
|
|
3
|
+
// `qoder` (global / intl) and `qodercn` (China) share the wire protocol — COSY
|
|
4
|
+
// signing, the scrambled body, the enveloped SSE stream — but nothing else
|
|
5
|
+
// about the address: different gateway host, different openapi host, different
|
|
6
|
+
// OAuth client id, different website, different UA, and a *different model
|
|
7
|
+
// roster*. Treating them as one provider with a region flag is what made a CN
|
|
8
|
+
// account dispatch to `*.qoder.sh` and be refused.
|
|
9
|
+
//
|
|
10
|
+
// Everything per-realm lives here so the adapter, the OAuth client, and the
|
|
11
|
+
// discovery fetcher cannot drift apart on host, client id, or roster.
|
|
12
|
+
//
|
|
13
|
+
// Sourced from the donor hub `Public/qoder2api-hub` (`REALM_CONFIGS` in
|
|
14
|
+
// `qoder_accounts.py`), which builds every upstream URL from this table.
|
|
15
|
+
|
|
16
|
+
/** One Qoder deployment. */
|
|
17
|
+
export type QoderRealm = "intl" | "cn";
|
|
18
|
+
|
|
19
|
+
/** Per-realm upstream addresses and client identity. */
|
|
20
|
+
export interface QoderRealmConfig {
|
|
21
|
+
/** Inference + model-list gateway host. */
|
|
22
|
+
readonly gateway: string;
|
|
23
|
+
/** Fallback gateway hosts, tried in order after `gateway`. */
|
|
24
|
+
readonly gatewayFallbacks: readonly string[];
|
|
25
|
+
/** Business API host (device token, userinfo, quota). */
|
|
26
|
+
readonly openapi: string;
|
|
27
|
+
/** Where the operator signs in. */
|
|
28
|
+
readonly website: string;
|
|
29
|
+
/** OAuth client id sent on the device-token exchange. */
|
|
30
|
+
readonly clientId: string;
|
|
31
|
+
/** Native redirect the desktop client registers. */
|
|
32
|
+
readonly redirectUri: string;
|
|
33
|
+
/** Upstream-facing User-Agent. */
|
|
34
|
+
readonly userAgent: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** Chat + model-list paths, identical across realms. */
|
|
38
|
+
export const QODER_CHAT_PATH =
|
|
39
|
+
"/algo/api/v2/service/pro/sse/agent_chat_generation?FetchKeys=llm_model_result&AgentId=agent_common&Encode=1";
|
|
40
|
+
export const QODER_MODELS_PATH = "/algo/api/v2/model/list?Encode=1";
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Realm → deployment.
|
|
44
|
+
*
|
|
45
|
+
* `intl` carries two gateway fallbacks (`api2`, `api3`); `cn` has exactly one
|
|
46
|
+
* host and no resilience, which is upstream fact, not an oversight — the donor
|
|
47
|
+
* loops `gateway + gatewayFallbacks` and gets one candidate for CN.
|
|
48
|
+
*/
|
|
49
|
+
export const QODER_REALMS: Readonly<Record<QoderRealm, QoderRealmConfig>> = {
|
|
50
|
+
intl: {
|
|
51
|
+
gateway: "https://api1.qoder.sh",
|
|
52
|
+
gatewayFallbacks: ["https://api2.qoder.sh", "https://api3.qoder.sh"],
|
|
53
|
+
openapi: "https://openapi.qoder.sh",
|
|
54
|
+
website: "https://qoder.com",
|
|
55
|
+
clientId: "e883ade2-e6e3-4d6d-adf7-f92ceff5fdcb",
|
|
56
|
+
redirectUri: "qoder://aicoding.aicoding-agent/login-success",
|
|
57
|
+
userAgent: "Qoder/1.1.64",
|
|
58
|
+
},
|
|
59
|
+
cn: {
|
|
60
|
+
gateway: "https://gateway.qoder.com.cn",
|
|
61
|
+
gatewayFallbacks: [],
|
|
62
|
+
openapi: "https://openapi.qoder.com.cn",
|
|
63
|
+
website: "https://qoder.com.cn",
|
|
64
|
+
clientId: "1c5e33e1-364d-4ce6-b02c-acaa81274a5c",
|
|
65
|
+
redirectUri: "qoder-work-cn://",
|
|
66
|
+
userAgent: "QoderWork/1.1.64",
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
/** The realm one bundled provider id belongs to. */
|
|
71
|
+
export function qoderRealmForProvider(providerId: string): QoderRealm {
|
|
72
|
+
return providerId === "qodercn" ? "cn" : "intl";
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** Gateway hosts for one realm, primary first. */
|
|
76
|
+
export function qoderGatewayCandidates(realm: QoderRealm): readonly string[] {
|
|
77
|
+
const config = QODER_REALMS[realm];
|
|
78
|
+
return [config.gateway, ...config.gatewayFallbacks];
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Model keys that exist in exactly one realm.
|
|
83
|
+
*
|
|
84
|
+
* From the donor's `INTL_EXCLUSIVE` / `CN_EXCLUSIVE` tables. A request for one
|
|
85
|
+
* of these on the wrong realm does not degrade — it is refused — so the roster
|
|
86
|
+
* each realm publishes is the authority, not a union.
|
|
87
|
+
*/
|
|
88
|
+
export const QODER_INTL_EXCLUSIVE: ReadonlySet<string> = new Set([
|
|
89
|
+
"fast",
|
|
90
|
+
"efficient",
|
|
91
|
+
"cmodel",
|
|
92
|
+
"smodel",
|
|
93
|
+
"ultimate",
|
|
94
|
+
"performance",
|
|
95
|
+
]);
|
|
96
|
+
|
|
97
|
+
export const QODER_CN_EXCLUSIVE: ReadonlySet<string> = new Set([
|
|
98
|
+
"q37fmodel",
|
|
99
|
+
"gm51model",
|
|
100
|
+
]);
|
|
101
|
+
|
|
102
|
+
/** True when this model key is served only by the other realm. */
|
|
103
|
+
export function isForeignQoderModel(realm: QoderRealm, modelId: string): boolean {
|
|
104
|
+
const foreign = realm === "cn" ? QODER_INTL_EXCLUSIVE : QODER_CN_EXCLUSIVE;
|
|
105
|
+
return foreign.has(modelId.trim().toLowerCase());
|
|
106
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// Qoder virtual models.
|
|
2
|
+
//
|
|
3
|
+
// Qoder's roster keys are opaque slots (`dfmodel`, `cmodel`, `smodel`) rather
|
|
4
|
+
// than model names, so what the UI offers and what a caller would ask for are
|
|
5
|
+
// two different vocabularies. A virtual id is the caller-facing name; it
|
|
6
|
+
// resolves to a roster key before the request is built.
|
|
7
|
+
//
|
|
8
|
+
// This mirrors the Copilot Auto seam: a virtual id is a catalog row that
|
|
9
|
+
// dispatch rewrites to a real `model_id` before the upstream call. The mapping
|
|
10
|
+
// is deliberately static — Qoder publishes no endpoint that resolves a name to
|
|
11
|
+
// a slot the way Copilot's `/auto` does, so there is nothing to ask at runtime.
|
|
12
|
+
|
|
13
|
+
/** A virtual id and the roster key it stands for. */
|
|
14
|
+
export interface QoderVirtualModel {
|
|
15
|
+
/** The id a caller sends and the catalog publishes. */
|
|
16
|
+
readonly id: string;
|
|
17
|
+
/** The roster key actually dispatched upstream. */
|
|
18
|
+
readonly target: string;
|
|
19
|
+
/** Name shown where a human picks a model. */
|
|
20
|
+
readonly displayName: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Virtual ids for every Qoder slot.
|
|
25
|
+
*
|
|
26
|
+
* `target` values are roster keys, so a virtual id is only valid while that key
|
|
27
|
+
* stays in the realm's roster. Discovery replaces the roster, and rows it drops
|
|
28
|
+
* would leave a virtual id pointing at nothing — dispatch surfaces that as an
|
|
29
|
+
* explicit error rather than sending an unknown key upstream.
|
|
30
|
+
*/
|
|
31
|
+
export const QODER_VIRTUAL_MODELS: readonly QoderVirtualModel[] = [
|
|
32
|
+
{ id: "deepseek-v4.1-flash", target: "dfmodel", displayName: "DeepSeek-V4.1-Flash" },
|
|
33
|
+
{ id: "deepseek-v4-pro", target: "dmodel", displayName: "DeepSeek-V4-Pro" },
|
|
34
|
+
{ id: "cantus", target: "cmodel", displayName: "Cantus" },
|
|
35
|
+
{ id: "sonus", target: "smodel", displayName: "Sonus" },
|
|
36
|
+
{ id: "qwen3.8-max", target: "qmodel_38max", displayName: "Qwen3.8-Max" },
|
|
37
|
+
{ id: "qwen3.8-flash", target: "qfmodel", displayName: "Qwen3.8-Flash" },
|
|
38
|
+
{ id: "qwen3.7-max", target: "qmodel_latest", displayName: "Qwen3.7-Max" },
|
|
39
|
+
{ id: "qwen3.7-plus", target: "qmodel", displayName: "Qwen3.7-Plus" },
|
|
40
|
+
{ id: "kimi-k3", target: "kmodel_latest", displayName: "Kimi-K3" },
|
|
41
|
+
{ id: "kimi-k2.8-preview", target: "kmodel", displayName: "Kimi-K2.8-Preview" },
|
|
42
|
+
{ id: "glm-5.3", target: "gmodel", displayName: "GLM-5.3" },
|
|
43
|
+
{ id: "glm-5.3-flash", target: "gfmodel", displayName: "GLM-5.3-Flash" },
|
|
44
|
+
{ id: "minimax-m3", target: "mmodel", displayName: "MiniMax-M3" },
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
/** Virtual id → roster key. */
|
|
48
|
+
const VIRTUAL_TARGETS: ReadonlyMap<string, string> = new Map(
|
|
49
|
+
QODER_VIRTUAL_MODELS.map((entry) => [entry.id, entry.target]),
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
/** Roster key → virtual id, for labelling a discovered row. */
|
|
53
|
+
const VIRTUAL_BY_TARGET: ReadonlyMap<string, string> = new Map(
|
|
54
|
+
QODER_VIRTUAL_MODELS.map((entry) => [entry.target, entry.id]),
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Resolves a caller-supplied model id to the roster key to dispatch.
|
|
59
|
+
*
|
|
60
|
+
* A non-virtual id is returned unchanged, so every existing caller and every
|
|
61
|
+
* discovered row keeps working: this is a translation of the new vocabulary,
|
|
62
|
+
* not a gate on the old one.
|
|
63
|
+
*/
|
|
64
|
+
export function qoderDispatchModelId(modelId: string): string {
|
|
65
|
+
const trimmed = modelId.trim();
|
|
66
|
+
return VIRTUAL_TARGETS.get(trimmed) ?? trimmed;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** True when the id is a virtual name rather than a roster key. */
|
|
70
|
+
export function isQoderVirtualModel(modelId: string): boolean {
|
|
71
|
+
return VIRTUAL_TARGETS.has(modelId.trim());
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** The virtual name for a roster key, when one exists. */
|
|
75
|
+
export function qoderVirtualIdFor(target: string): string | undefined {
|
|
76
|
+
return VIRTUAL_BY_TARGET.get(target.trim());
|
|
77
|
+
}
|