cartethyia 2.7.8 → 2.8.0
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/.env.example +3 -3
- package/README.md +29 -59
- package/dist/dashboard/assets/BannedPage-Cc0vKpMG.js +1 -0
- package/dist/dashboard/assets/BannedPage-Cc0vKpMG.js.gz +0 -0
- package/dist/dashboard/assets/{CliToolDetailPage-BRWKPQPf.js → CliToolDetailPage-Bqj2aa1T.js} +1 -1
- package/dist/dashboard/assets/CliToolDetailPage-Bqj2aa1T.js.gz +0 -0
- package/dist/dashboard/assets/{CliToolsPage-BP-Y5iHN.js → CliToolsPage-CXsaOAO2.js} +1 -1
- package/dist/dashboard/assets/CliToolsPage-CXsaOAO2.js.gz +0 -0
- package/dist/dashboard/assets/CombosPage-BeLpJ4ma.js +1 -0
- package/dist/dashboard/assets/CombosPage-BeLpJ4ma.js.gz +0 -0
- package/dist/dashboard/assets/ConsoleLogPage-DnV0uZ3m.js +1 -0
- package/dist/dashboard/assets/ConsoleLogPage-DnV0uZ3m.js.gz +0 -0
- package/dist/dashboard/assets/CustomizationPage-CBxAjo63.js +1 -0
- package/dist/dashboard/assets/CustomizationPage-CBxAjo63.js.gz +0 -0
- package/dist/dashboard/assets/HealthEventsModal-B5yEE0k6.js +1 -0
- package/dist/dashboard/assets/HealthEventsModal-B5yEE0k6.js.gz +0 -0
- package/dist/dashboard/assets/{InjectSystemPromptPanel-Cv-2Ol_K.js → InjectSystemPromptPanel-BWFLECmz.js} +2 -2
- package/dist/dashboard/assets/InjectSystemPromptPanel-BWFLECmz.js.gz +0 -0
- package/dist/dashboard/assets/{LoginPage-bKfz_b1K.js → LoginPage-CgoPc5B9.js} +1 -1
- package/dist/dashboard/assets/LoginPage-CgoPc5B9.js.gz +0 -0
- package/dist/dashboard/assets/{ModelPicker-B-WQxx_H.js → ModelPicker-D9bFQern.js} +1 -1
- package/dist/dashboard/assets/ModelPicker-D9bFQern.js.gz +0 -0
- package/dist/dashboard/assets/OverviewPage-B_p4tL8k.js +1 -0
- package/dist/dashboard/assets/OverviewPage-B_p4tL8k.js.gz +0 -0
- package/dist/dashboard/assets/ProviderDetailPage-rs5E2rxv.js +8 -0
- package/dist/dashboard/assets/ProviderDetailPage-rs5E2rxv.js.gz +0 -0
- package/dist/dashboard/assets/ProviderIcon-D_0PiZtg.js +1 -0
- package/dist/dashboard/assets/ProviderIcon-D_0PiZtg.js.gz +0 -0
- package/dist/dashboard/assets/ProvidersPage-CLI2bJTK.js +1 -0
- package/dist/dashboard/assets/ProvidersPage-CLI2bJTK.js.gz +0 -0
- package/dist/dashboard/assets/{ProxyPage-emlTuxz6.js → ProxyPage-BwNC_-Cx.js} +1 -1
- package/dist/dashboard/assets/ProxyPage-BwNC_-Cx.js.gz +0 -0
- package/dist/dashboard/assets/QuotaPage-DA-a1iSN.js +1 -0
- package/dist/dashboard/assets/QuotaPage-DA-a1iSN.js.gz +0 -0
- package/dist/dashboard/assets/SettingsPage-CctTga2C.js +1 -0
- package/dist/dashboard/assets/SettingsPage-CctTga2C.js.gz +0 -0
- package/dist/dashboard/assets/{SetupPage-CUZrKs9r.js → SetupPage-febLU4r1.js} +1 -1
- package/dist/dashboard/assets/SetupPage-febLU4r1.js.gz +0 -0
- package/dist/dashboard/assets/{StudioPage-jWmUdDpy.js → StudioPage-M6fvR5Wz.js} +1 -1
- package/dist/dashboard/assets/StudioPage-M6fvR5Wz.js.gz +0 -0
- package/dist/dashboard/assets/UsagePage-nyeuRqz9.js +56 -0
- package/dist/dashboard/assets/UsagePage-nyeuRqz9.js.gz +0 -0
- package/dist/dashboard/assets/api-keys-BFOlvrJC.js +1 -0
- package/dist/dashboard/assets/api-keys-BFOlvrJC.js.gz +0 -0
- package/dist/dashboard/assets/app-Dx2QgsNj.css +2 -0
- package/dist/dashboard/assets/app-Dx2QgsNj.css.gz +0 -0
- package/dist/dashboard/assets/{assert-CidQVoNo.js → assert-CqTLw5e7.js} +1 -1
- package/dist/dashboard/assets/assert-CqTLw5e7.js.gz +0 -0
- package/dist/dashboard/assets/{badge-DyI_mJfi.js → badge-C83EqLB0.js} +1 -1
- package/dist/dashboard/assets/badge-C83EqLB0.js.gz +0 -0
- package/dist/dashboard/assets/ban-durations-B58FyRxC.js +1 -0
- package/dist/dashboard/assets/ban-durations-B58FyRxC.js.gz +0 -0
- package/dist/dashboard/assets/{banner-B-yXtCqb.js → banner-D1xn7pIe.js} +1 -1
- package/dist/dashboard/assets/banner-D1xn7pIe.js.gz +0 -0
- package/dist/dashboard/assets/brand/bansos_page.webp +0 -0
- package/dist/dashboard/assets/brand/denia_bansos.webp +0 -0
- package/dist/dashboard/assets/brand/favicon.webp +0 -0
- package/dist/dashboard/assets/brand/login_register.webp +0 -0
- package/dist/dashboard/assets/brand/login_register_initial.webp +0 -0
- package/dist/dashboard/assets/brand/og_bansos.webp +0 -0
- package/dist/dashboard/assets/brand/og_image.webp +0 -0
- package/dist/dashboard/assets/brand/sidebar_ico.webp +0 -0
- package/dist/dashboard/assets/{card-_HwAEqFF.js → card-DU3Lq5Lm.js} +1 -1
- package/dist/dashboard/assets/card-DU3Lq5Lm.js.gz +0 -0
- package/dist/dashboard/assets/cli-tools-Dw1U_drK.js +1 -0
- package/dist/dashboard/assets/cli-tools-Dw1U_drK.js.gz +0 -0
- package/dist/dashboard/assets/{clipboard-button-ByjCk0o9.js → clipboard-button-CEL5Sg_J.js} +1 -1
- package/dist/dashboard/assets/clipboard-button-CEL5Sg_J.js.gz +0 -0
- package/dist/dashboard/assets/{dialog-BZhOlfz-.js → dialog-BjFR5UHy.js} +1 -1
- package/dist/dashboard/assets/dialog-BjFR5UHy.js.gz +0 -0
- package/dist/dashboard/assets/{drawer-BADqIRYP.js → drawer-HvBW0AjI.js} +1 -1
- package/dist/dashboard/assets/drawer-HvBW0AjI.js.gz +0 -0
- package/dist/dashboard/assets/entry-BSu3gFlt.js +4 -0
- package/dist/dashboard/assets/entry-BSu3gFlt.js.gz +0 -0
- package/dist/dashboard/assets/{entry-COaC-irN.js → entry-CECVELyy.js} +1 -1
- package/dist/dashboard/assets/entry-CECVELyy.js.gz +0 -0
- package/dist/dashboard/assets/entry-DYYofQ7W.js +1 -0
- package/dist/dashboard/assets/entry-DYYofQ7W.js.gz +0 -0
- package/dist/dashboard/assets/{formatters-DcHJyRiu.js → formatters-DLW4i8zK.js} +1 -1
- package/dist/dashboard/assets/formatters-DLW4i8zK.js.gz +0 -0
- package/dist/dashboard/assets/{index-CgKmFngv.js → index-1-fCqe64.js} +2 -2
- package/dist/dashboard/assets/index-1-fCqe64.js.gz +0 -0
- package/dist/dashboard/assets/{inline-B2BirKry.js → inline-DGvU2oLK.js} +1 -1
- package/dist/dashboard/assets/inline-DGvU2oLK.js.gz +0 -0
- package/dist/dashboard/assets/{input-D-qV9dKY.js → input-iNnO1X2K.js} +1 -1
- package/dist/dashboard/assets/input-iNnO1X2K.js.gz +0 -0
- package/dist/dashboard/assets/{layout-B7tVWhtV.js → layout-0q8UGypb.js} +1 -1
- package/dist/dashboard/assets/layout-0q8UGypb.js.gz +0 -0
- package/dist/dashboard/assets/{list-row-CtkGE3bF.js → list-row-C0w2bQjJ.js} +1 -1
- package/dist/dashboard/assets/list-row-C0w2bQjJ.js.gz +0 -0
- package/dist/dashboard/assets/{live-DGizF06-.js → live-M5aJ_xCa.js} +1 -1
- package/dist/dashboard/assets/live-M5aJ_xCa.js.gz +0 -0
- package/dist/dashboard/assets/{mutation-GU7XdEjz.js → mutation-BQ0ccH_A.js} +1 -1
- package/dist/dashboard/assets/mutation-BQ0ccH_A.js.gz +0 -0
- package/dist/dashboard/assets/{network-C9UE-bOr.js → network-BKeQGT3K.js} +1 -1
- package/dist/dashboard/assets/network-BKeQGT3K.js.gz +0 -0
- package/dist/dashboard/assets/{numbers-BnAd22a_.js → numbers-CivAk3da.js} +1 -1
- package/dist/dashboard/assets/numbers-CivAk3da.js.gz +0 -0
- package/dist/dashboard/assets/{pagination-BAywyMzS.js → pagination-CpzvI5ep.js} +1 -1
- package/dist/dashboard/assets/pagination-CpzvI5ep.js.gz +0 -0
- package/dist/dashboard/assets/providers/devin.svg +9 -0
- package/dist/dashboard/assets/providers/devin.svg.gz +0 -0
- package/dist/dashboard/assets/providers/windsurf.svg +10 -0
- package/dist/dashboard/assets/providers/windsurf.svg.gz +0 -0
- package/dist/dashboard/assets/providers/zro.svg +3 -0
- package/dist/dashboard/assets/providers/zro.svg.gz +0 -0
- package/dist/dashboard/assets/{query-keys-YSoQOUh6.js → query-keys-IKLh0YFd.js} +1 -1
- package/dist/dashboard/assets/query-keys-IKLh0YFd.js.gz +0 -0
- package/dist/dashboard/assets/quota-DiPD6UKH.js +1 -0
- package/dist/dashboard/assets/quota-DiPD6UKH.js.gz +0 -0
- package/dist/dashboard/assets/routing-BFQX2VBc.js +1 -0
- package/dist/dashboard/assets/routing-BFQX2VBc.js.gz +0 -0
- package/dist/dashboard/assets/{select-BCOcv8WK.js → select-CXbck0jG.js} +2 -2
- package/dist/dashboard/assets/select-CXbck0jG.js.gz +0 -0
- package/dist/dashboard/assets/settings-C_XvMHh9.js +1 -0
- package/dist/dashboard/assets/settings-C_XvMHh9.js.gz +0 -0
- package/dist/dashboard/assets/{stack-ByKt3Q1g.js → stack-DggRiCxE.js} +1 -1
- package/dist/dashboard/assets/stack-DggRiCxE.js.gz +0 -0
- package/dist/dashboard/assets/{state-DXbGTx7N.js → state-ClFzfbYp.js} +1 -1
- package/dist/dashboard/assets/state-ClFzfbYp.js.gz +0 -0
- package/dist/dashboard/assets/story/25817331.webp +0 -0
- package/dist/dashboard/assets/story/Shorekeeper.webp +0 -0
- package/dist/dashboard/assets/story/cartethyia-god.webp +0 -0
- package/dist/dashboard/assets/story/fleurdelys_plus.webp +0 -0
- package/dist/dashboard/assets/story/jinhsi-blossom.webp +0 -0
- package/dist/dashboard/assets/story/phrolova-a.webp +0 -0
- package/dist/dashboard/assets/story/requestdeniawokkjpg.webp +0 -0
- package/dist/dashboard/assets/story/wuthering-waves-hiyuki-aemeath-hiyuki-rover.webp +0 -0
- package/dist/dashboard/assets/{switch-ZeTsW623.js → switch-CTIFxKqS.js} +1 -1
- package/dist/dashboard/assets/switch-CTIFxKqS.js.gz +0 -0
- package/dist/dashboard/assets/{useMutation-CbCP4w1o.js → useMutation-BClG3yWj.js} +1 -1
- package/dist/dashboard/assets/useMutation-BClG3yWj.js.gz +0 -0
- package/dist/dashboard/console-backgrounds.webp +0 -0
- package/dist/dashboard/console-backgrounds_initial.webp +0 -0
- package/dist/dashboard/donation/qris-risun-marke.webp +0 -0
- package/dist/dashboard/index.html +3 -3
- package/dist/dashboard/index.html.gz +0 -0
- package/dist/dashboard/precompressed-assets.json +59 -56
- package/migrations/full-postgres/0044_add_models_warning_metadata.sql +10 -0
- package/migrations/full-postgres/0045_migrate_workbuddy_to_codebuddy.sql +156 -0
- package/migrations/full-postgres/0046_add_accounts_quota_plan_fetched_at.sql +7 -0
- package/migrations/lite-sqlite3/0044_add_models_warning_metadata.sql +11 -0
- package/migrations/lite-sqlite3/0045_migrate_workbuddy_to_codebuddy.sql +156 -0
- package/migrations/lite-sqlite3/0046_add_accounts_quota_plan_fetched_at.sql +4 -0
- package/package.json +1 -1
- package/src/boot/app.ts +10 -13
- package/src/boot/dependencies.ts +12 -4
- package/src/boot/flush.ts +20 -0
- package/src/boot/lifecycle.ts +7 -5
- package/src/config/cooldowns.ts +1 -1
- package/src/config/routing.ts +26 -0
- package/src/config/spec-metadata.ts +72 -0
- package/src/config/spec.ts +20 -6
- package/src/console/api-keys/contracts.ts +12 -1
- package/src/console/api-keys/routes.ts +50 -31
- package/src/console/auth/account-reset.ts +7 -9
- package/src/console/backup/contracts.ts +4 -0
- package/src/console/backup/export-endpoint.ts +7 -5
- package/src/console/cli-tools/service.ts +6 -12
- package/src/console/console-router-guards.ts +23 -16
- package/src/console/console-router.ts +7 -0
- package/src/console/dashboard-assets.ts +5 -5
- package/src/console/domain-registration.ts +27 -2
- package/src/console/inferhub/normalize.ts +24 -28
- package/src/console/inferhub/types.ts +3 -0
- package/src/console/ip-bans/routes.ts +93 -0
- package/src/console/observability/store.ts +0 -53
- package/src/console/providers/catalog/catalog-projections.ts +5 -2
- package/src/console/providers/catalog/contracts.ts +123 -0
- package/src/console/providers/catalog/discover-constants.ts +6 -0
- package/src/console/providers/catalog/model-operations.ts +122 -10
- package/src/console/providers/catalog/provider-operations.ts +116 -8
- package/src/console/providers/catalog/public-model-store.ts +0 -0
- package/src/console/providers/catalog/routes.ts +65 -4
- package/src/console/providers/catalog/store-helpers.ts +30 -1
- package/src/console/providers/catalog/store.ts +249 -4
- package/src/console/quota/account-quota-global.ts +97 -19
- package/src/console/quota/account-quota-shared.ts +49 -0
- package/src/console/quota/account-quota-tenant.ts +6 -18
- package/src/console/quota/native-identity.ts +2 -0
- package/src/console/quota/quota-view.ts +19 -3
- package/src/console/routing/pools/operations.ts +31 -46
- package/src/console/settings/contracts.ts +18 -0
- package/src/console/settings/store.ts +32 -0
- package/src/console/shared/errors.ts +33 -6
- package/src/console/system-prompt/contracts.ts +0 -1
- package/src/main.ts +3 -3
- package/src/network/pool/byte-accounting.ts +3 -2
- package/src/network/pool/selector.ts +182 -39
- package/src/network/pool-cooldown-store.ts +89 -14
- package/src/network/pool-health.ts +49 -61
- package/src/network/rate-limit-verdict.ts +1 -1
- package/src/network/ssrf.ts +6 -6
- package/src/observability/event-log.ts +7 -361
- package/src/observability/event-query.ts +18 -4
- package/src/observability/performance-metrics.ts +9 -0
- package/src/observability/runtime-metrics.ts +14 -9
- package/src/observability/telemetry-buffer.ts +15 -25
- package/src/observability/telemetry-reconciliation.ts +9 -37
- package/src/observability/telemetry-row.ts +125 -0
- package/src/persistence/db-mode.ts +4 -1
- package/src/persistence/dialect.ts +30 -0
- package/src/persistence/migrate.ts +6 -3
- package/src/persistence/schema.ts +28 -2
- package/src/persistence/ttl-cache.ts +20 -2
- package/src/protocol/codecs.ts +1 -1
- package/src/protocol/dsml.ts +35 -87
- package/src/protocol/gateway-error.ts +1 -0
- package/src/protocol/markup-stream-parser.ts +195 -0
- package/src/protocol/reasoning-text.ts +19 -0
- package/src/protocol/reasoning.ts +1 -1
- package/src/protocol/request/chat.ts +14 -14
- package/src/protocol/request/gemini.ts +8 -2
- package/src/protocol/request/messages.ts +4 -5
- package/src/protocol/response/chat.ts +12 -20
- package/src/protocol/response/gemini.ts +6 -1
- package/src/protocol/response/omp-tool-call-markup.ts +43 -86
- package/src/protocol/response/responses.ts +18 -2
- package/src/protocol/sse-decoder.ts +25 -8
- package/src/protocol/stop-reason.ts +23 -1
- package/src/protocol/stream-error-frames.ts +13 -3
- package/src/protocol/think-split.ts +112 -0
- package/src/protocol/translation/dialect/qwen.ts +26 -58
- package/src/protocol/translation/quirks.ts +1 -1
- package/src/protocol/translation/tool-repair.ts +2 -2
- package/src/protocol/upstream/send-claude-messages.ts +15 -4
- package/src/protocol/upstream-parsing.ts +1 -1
- package/src/providers/adapters/compatible-adapter.ts +78 -17
- package/src/providers/authentication/oauth-client.ts +1 -1
- package/src/providers/authentication/oauth-device-flow.ts +98 -8
- package/src/providers/authentication/oauth-refresh-service.ts +153 -59
- package/src/providers/configured-provider.ts +148 -0
- package/src/providers/default-registry.ts +117 -27
- package/src/providers/discovery/discovery-types.ts +12 -0
- package/src/providers/discovery/probe-phases.ts +74 -33
- package/src/providers/discovery/probing-service.ts +293 -165
- package/src/providers/integrations/alibabacp/alibabacp-models.ts +1 -2
- package/src/providers/integrations/{dashscope-models.ts → alibabacp/dashscope-models.ts} +2 -2
- package/src/providers/integrations/antigravity/antigravity-protocol.ts +121 -2
- package/src/providers/integrations/antigravity/antigravity.ts +13 -2
- package/src/providers/integrations/buddy/buddy-catalog-shared.ts +72 -34
- package/src/providers/integrations/buddy/buddy-chat-shared.ts +191 -35
- package/src/providers/integrations/buddy/buddy-checkin.ts +17 -39
- package/src/providers/integrations/buddy/buddy-conversation-headers.ts +2 -2
- package/src/providers/integrations/buddy/buddy-discovery-shared.ts +5 -5
- package/src/providers/integrations/buddy/buddy-identity.ts +89 -6
- package/src/providers/integrations/buddy/buddy-media.ts +4 -5
- package/src/providers/integrations/buddy/buddy-oauth-shared.ts +2 -2
- package/src/providers/integrations/buddy/buddy-quota-shared.ts +1 -1
- package/src/providers/integrations/buddy/buddy-usage-shared.ts +1 -3
- package/src/providers/integrations/buddy/capabilities.ts +6 -43
- package/src/providers/integrations/buddy/codebuddy/cn-catalog.ts +2 -1
- package/src/providers/integrations/buddy/codebuddy/cn-provider.ts +23 -1
- package/src/providers/integrations/buddy/codebuddy/provider.ts +6 -2
- package/src/providers/integrations/buddy/codebuddy/shared.ts +38 -27
- package/src/providers/integrations/claude/claude-quota.ts +14 -17
- package/src/providers/integrations/cline/cline.ts +2 -2
- package/src/providers/integrations/commandcode/quota.ts +22 -28
- package/src/providers/integrations/cursor/cursor-auth.ts +0 -8
- package/src/providers/integrations/cursor/cursor-catalog.ts +2 -0
- package/src/providers/integrations/cursor/cursor-exec.ts +745 -0
- package/src/providers/integrations/cursor/cursor-http2.ts +2 -0
- package/src/providers/integrations/cursor/cursor-request.ts +35 -20
- package/src/providers/integrations/cursor/cursor-shared.ts +26 -5
- package/src/providers/integrations/cursor/cursor.ts +139 -70
- package/src/providers/integrations/cursor/protocol/messages.ts +22 -29
- package/src/providers/integrations/cursor/protocol/protobuf-schema.ts +37 -0
- package/src/providers/integrations/cursor/protocol/tool-canonical.ts +26 -100
- package/src/providers/integrations/devin/devin-auth.ts +353 -0
- package/src/providers/integrations/devin/devin-catalog.ts +207 -0
- package/src/providers/integrations/devin/devin-http.ts +91 -0
- package/src/providers/integrations/devin/devin-quota.ts +214 -0
- package/src/providers/integrations/devin/devin-shared.ts +111 -0
- package/src/providers/integrations/devin/devin.ts +539 -0
- package/src/providers/integrations/devin/protocol/devin-proto.ts +558 -0
- package/src/providers/integrations/devin/protocol/framing.ts +124 -0
- package/src/providers/integrations/factory/factory-oauth.ts +17 -44
- package/src/providers/integrations/factory/factory.ts +2 -2
- package/src/providers/integrations/freebuff/assets/official-system-manager.txt +88 -0
- package/src/providers/integrations/freebuff/assets/official-system-worker.txt +57 -0
- package/src/providers/integrations/freebuff/assets/official-tools.json +1070 -0
- package/src/providers/integrations/freebuff/freebuff-catalog.ts +120 -0
- package/src/providers/integrations/freebuff/freebuff-constants.ts +1233 -0
- package/src/providers/integrations/freebuff/freebuff-discovery.ts +108 -0
- package/src/providers/integrations/freebuff/freebuff-oauth.ts +240 -0
- package/src/providers/integrations/freebuff/freebuff-quota.ts +260 -0
- package/src/providers/integrations/freebuff/freebuff-virtual.ts +89 -0
- package/src/providers/integrations/freebuff/freebuff.ts +682 -0
- package/src/providers/integrations/freepi/freepi-catalog.ts +60 -0
- package/src/providers/integrations/freepi/freepi-discovery.ts +82 -0
- package/src/providers/integrations/freepi/freepi-headers.ts +21 -0
- package/src/providers/integrations/freepi/freepi-oauth.ts +142 -0
- package/src/providers/integrations/freepi/freepi-protocol.ts +242 -0
- package/src/providers/integrations/freepi/freepi-quota.ts +126 -0
- package/src/providers/integrations/freepi/freepi-realm.ts +35 -0
- package/src/providers/integrations/freepi/freepi.ts +292 -0
- package/src/providers/integrations/gemini.ts +2 -2
- package/src/providers/integrations/grok/grok-oauth.ts +48 -45
- package/src/providers/integrations/grok/grok-ratelimit-store.ts +10 -17
- package/src/providers/integrations/grok/grok-turn-index.ts +11 -16
- package/src/providers/integrations/hermes/hermes-oauth.ts +94 -0
- package/src/providers/integrations/{hermes.ts → hermes/hermes.ts} +13 -21
- package/src/providers/integrations/hermes/index.ts +2 -0
- package/src/providers/integrations/kiro/kiro-catalog.ts +17 -1
- package/src/providers/integrations/kiro/kiro-discovery.ts +10 -12
- package/src/providers/integrations/kiro/kiro-quota.ts +8 -4
- package/src/providers/integrations/kiro/kiro.ts +15 -19
- package/src/providers/integrations/ollamacloud/index.ts +2 -0
- package/src/providers/integrations/{ollamacloud-models.ts → ollamacloud/models.ts} +2 -2
- package/src/providers/integrations/{ollamacloud-quota.ts → ollamacloud/quota.ts} +3 -3
- package/src/providers/integrations/opencode/fingerprint.ts +1 -1
- package/src/providers/integrations/opencode/opencode-go-quota.ts +2 -8
- package/src/providers/integrations/perch/perch-catalog.ts +105 -0
- package/src/providers/integrations/perch/perch-credential.ts +25 -0
- package/src/providers/integrations/perch/perch-oauth.ts +170 -0
- package/src/providers/integrations/perch/perch-protocol.ts +208 -0
- package/src/providers/integrations/perch/perch-quota.ts +123 -0
- package/src/providers/integrations/perch/perch-realm.ts +82 -0
- package/src/providers/integrations/perch/perch-system-prompt.ts +13 -0
- package/src/providers/integrations/perch/perch.ts +305 -0
- package/src/providers/integrations/perch/saffron-system-prompt.txt +8 -0
- package/src/providers/integrations/qoder/chat-proto.ts +328 -328
- package/src/providers/integrations/qoder/claim-qoder-credits.ts +19 -60
- package/src/providers/integrations/qoder/qoder-adapter.ts +90 -40
- package/src/providers/integrations/qoder/qoder-auth.ts +101 -29
- package/src/providers/integrations/qoder/qoder-cache.ts +32 -0
- package/src/providers/integrations/qoder/qoder-catalog.ts +26 -6
- package/src/providers/integrations/qoder/qoder-chat.ts +7 -21
- package/src/providers/integrations/qoder/qoder-checkin.ts +6 -6
- package/src/providers/integrations/qoder/qoder-grpc.ts +210 -7
- package/src/providers/integrations/qoder/qoder-ide.ts +5 -108
- package/src/providers/integrations/qoder/qoder-identity-cache.ts +184 -0
- package/src/providers/integrations/qoder/qoder-native-identity-store.ts +83 -18
- package/src/providers/integrations/qoder/qoder-realm.ts +9 -6
- package/src/providers/integrations/qoder/qoder-umid.ts +109 -342
- package/src/providers/integrations/qoder/qoder-virtual.ts +33 -1
- package/src/providers/integrations/qoder/qoder.ts +3 -7
- package/src/providers/integrations/trae/trae-catalog.ts +9 -14
- package/src/providers/integrations/trae/trae-headers.ts +36 -11
- package/src/providers/integrations/trae/trae-oauth.ts +14 -17
- package/src/providers/integrations/trae/trae-protocol.ts +12 -11
- package/src/providers/integrations/trae/trae-quota.ts +96 -36
- package/src/providers/integrations/trae/trae-realm.ts +74 -15
- package/src/providers/integrations/trae/trae.ts +99 -26
- package/src/providers/integrations/zcode-start-plan/provider.ts +226 -23
- package/src/providers/integrations/zcode-start-plan/quota.ts +19 -2
- package/src/providers/integrations/zro/zro.ts +204 -0
- package/src/providers/operations/account-error-classification.ts +235 -278
- package/src/providers/operations/account-health-service.ts +273 -26
- package/src/providers/operations/account-refresh-status.ts +269 -0
- package/src/providers/operations/account-tier.ts +66 -0
- package/src/providers/operations/client-version-resolver.ts +1 -1
- package/src/providers/operations/client-versions.ts +42 -150
- package/src/providers/operations/cooldown-rules.ts +56 -0
- package/src/providers/operations/{model-catalog-cache.ts → provider-caches.ts} +68 -16
- package/src/providers/operations/provider-catalog-seeder.ts +4 -0
- package/src/providers/operations/provider-catalog-service.ts +1 -1
- package/src/providers/operations/provider-credential-service.ts +102 -32
- package/src/providers/operations/provider-rules/github.ts +48 -0
- package/src/providers/operations/provider-rules/grok.ts +33 -0
- package/src/providers/operations/provider-rules/inception.ts +49 -0
- package/src/providers/operations/provider-rules/index.ts +32 -0
- package/src/providers/operations/provider-rules/perch.ts +37 -0
- package/src/providers/operations/provider-rules/qoder.ts +70 -0
- package/src/providers/operations/provider-rules/trae.ts +81 -0
- package/src/providers/provider-contracts.ts +33 -2
- package/src/providers/{provider-credential-resolver.ts → provider-credentials.ts} +40 -3
- package/src/providers/provider-metadata.ts +99 -14
- package/src/providers/provider-model-definition.ts +36 -0
- package/src/providers/provider-probe.ts +15 -1
- package/src/providers/provider-registry.ts +42 -33
- package/src/providers/quota/quota-limit-windows.ts +16 -5
- package/src/providers/quota/quota-support.ts +1 -1
- package/src/providers/quota/quota-window-parser.ts +90 -18
- package/src/providers/quota/refresh.ts +96 -18
- package/src/security/abuse.ts +71 -0
- package/src/security/api-key-auth-cache.ts +1 -1
- package/src/security/api-key-auth.ts +6 -2
- package/src/transport/dispatch/attempt-finalize.ts +14 -13
- package/src/transport/dispatch/attempt-loop.ts +71 -17
- package/src/transport/dispatch/generation.ts +2 -8
- package/src/transport/dispatch/native-shared.ts +25 -0
- package/src/transport/dispatch/proxy-request.ts +9 -46
- package/src/transport/dispatch/responses-compact.ts +2 -8
- package/src/transport/dispatch/streaming/finalize.ts +9 -6
- package/src/transport/dispatch/streaming/stream.ts +9 -36
- package/src/transport/dispatch/systemone.ts +2 -8
- package/src/transport/dispatch/token-count.ts +2 -6
- package/src/transport/dispatch/upstream.ts +67 -1
- package/src/transport/drain-endpoint.ts +31 -4
- package/src/transport/failure-policy.ts +129 -37
- package/src/transport/guards/body-policy.ts +7 -1
- package/src/transport/guards/error-lifecycle.ts +13 -1
- package/src/transport/guards/request-context.ts +22 -14
- package/src/transport/request/preparer.ts +81 -71
- package/src/transport/routing/bounded-lru.ts +14 -0
- package/src/transport/routing/drain-reserve.ts +129 -0
- package/src/transport/routing/plan-gate.ts +7 -1
- package/src/transport/routing/round-robin.ts +60 -0
- package/src/transport/routing/route-catalog.ts +123 -111
- package/src/transport/routing/route-model.ts +51 -9
- package/src/transport/routing/router.ts +418 -33
- package/src/transport/surface/adapters.ts +11 -2
- package/src/transport/surface/chat/adapter.ts +2 -2
- package/src/transport/surface/chat/encode.ts +47 -4
- package/src/transport/surface/chat/parse.ts +2 -12
- package/src/transport/surface/completion.ts +44 -33
- package/src/transport/surface/content-parts.ts +21 -0
- package/src/transport/surface/messages/adapter.ts +9 -2
- package/src/transport/surface/messages/encode.ts +11 -3
- package/src/transport/surface/messages/parse.ts +2 -1
- package/src/transport/surface/messages/stream.ts +33 -17
- package/src/transport/surface/responses/encode.ts +34 -6
- package/src/transport/surface/responses/parse.ts +3 -11
- package/src/workers/daily-checkin.ts +1 -1
- package/src/workers/quota-refresh-sweep.ts +1 -1
- package/src/workers/scheduler.ts +22 -4
- package/dist/dashboard/assets/BannedPage-DeIbIiBU.js +0 -1
- package/dist/dashboard/assets/BannedPage-DeIbIiBU.js.gz +0 -0
- package/dist/dashboard/assets/CliToolDetailPage-BRWKPQPf.js.gz +0 -0
- package/dist/dashboard/assets/CliToolsPage-BP-Y5iHN.js.gz +0 -0
- package/dist/dashboard/assets/CombosPage-B7JHozVa.js +0 -1
- package/dist/dashboard/assets/CombosPage-B7JHozVa.js.gz +0 -0
- package/dist/dashboard/assets/ConsoleLogPage-GX7iGGcu.js +0 -1
- package/dist/dashboard/assets/ConsoleLogPage-GX7iGGcu.js.gz +0 -0
- package/dist/dashboard/assets/CustomizationPage-HVonbGEa.js +0 -1
- package/dist/dashboard/assets/CustomizationPage-HVonbGEa.js.gz +0 -0
- package/dist/dashboard/assets/HealthEventsModal-xaut4OJ9.js +0 -1
- package/dist/dashboard/assets/HealthEventsModal-xaut4OJ9.js.gz +0 -0
- package/dist/dashboard/assets/InjectSystemPromptPanel-Cv-2Ol_K.js.gz +0 -0
- package/dist/dashboard/assets/LoginPage-bKfz_b1K.js.gz +0 -0
- package/dist/dashboard/assets/ModelPicker-B-WQxx_H.js.gz +0 -0
- package/dist/dashboard/assets/OverviewPage-Z9pJZFo8.js +0 -1
- package/dist/dashboard/assets/OverviewPage-Z9pJZFo8.js.gz +0 -0
- package/dist/dashboard/assets/ProviderDetailPage-CMeDBxR1.js +0 -7
- package/dist/dashboard/assets/ProviderDetailPage-CMeDBxR1.js.gz +0 -0
- package/dist/dashboard/assets/ProviderIcon-jjqXJDA3.js +0 -1
- package/dist/dashboard/assets/ProviderIcon-jjqXJDA3.js.gz +0 -0
- package/dist/dashboard/assets/ProvidersPage-BXPdOpG4.js +0 -1
- package/dist/dashboard/assets/ProvidersPage-BXPdOpG4.js.gz +0 -0
- package/dist/dashboard/assets/ProxyPage-emlTuxz6.js.gz +0 -0
- package/dist/dashboard/assets/QuotaPage-CMJKNYWb.js +0 -1
- package/dist/dashboard/assets/QuotaPage-CMJKNYWb.js.gz +0 -0
- package/dist/dashboard/assets/SettingsPage-BSy7EwGo.js +0 -1
- package/dist/dashboard/assets/SettingsPage-BSy7EwGo.js.gz +0 -0
- package/dist/dashboard/assets/SetupPage-CUZrKs9r.js.gz +0 -0
- package/dist/dashboard/assets/StudioPage-jWmUdDpy.js.gz +0 -0
- package/dist/dashboard/assets/UsagePage-5F9tGVGG.js +0 -56
- package/dist/dashboard/assets/UsagePage-5F9tGVGG.js.gz +0 -0
- package/dist/dashboard/assets/api-keys-KvX83mRe.js +0 -1
- package/dist/dashboard/assets/api-keys-KvX83mRe.js.gz +0 -0
- package/dist/dashboard/assets/app-BEsU8hKs.css +0 -2
- package/dist/dashboard/assets/app-BEsU8hKs.css.gz +0 -0
- package/dist/dashboard/assets/assert-CidQVoNo.js.gz +0 -0
- package/dist/dashboard/assets/badge-DyI_mJfi.js.gz +0 -0
- package/dist/dashboard/assets/banner-B-yXtCqb.js.gz +0 -0
- package/dist/dashboard/assets/brand/bansos_page.png +0 -0
- package/dist/dashboard/assets/brand/denia_bansos.jpg +0 -0
- package/dist/dashboard/assets/brand/favicon.jpg +0 -0
- package/dist/dashboard/assets/brand/login_register.jpg +0 -0
- package/dist/dashboard/assets/brand/login_register_initial.jpg +0 -0
- package/dist/dashboard/assets/brand/og_bansos.jpg +0 -0
- package/dist/dashboard/assets/brand/og_image.jpg +0 -0
- package/dist/dashboard/assets/brand/sidebar_ico.jpg +0 -0
- package/dist/dashboard/assets/card-_HwAEqFF.js.gz +0 -0
- package/dist/dashboard/assets/cli-tools-Bwv5-zGZ.js +0 -1
- package/dist/dashboard/assets/cli-tools-Bwv5-zGZ.js.gz +0 -0
- package/dist/dashboard/assets/clipboard-button-ByjCk0o9.js.gz +0 -0
- package/dist/dashboard/assets/dialog-BZhOlfz-.js.gz +0 -0
- package/dist/dashboard/assets/drawer-BADqIRYP.js.gz +0 -0
- package/dist/dashboard/assets/entry-COaC-irN.js.gz +0 -0
- package/dist/dashboard/assets/entry-Ca7LSCet.js +0 -4
- package/dist/dashboard/assets/entry-Ca7LSCet.js.gz +0 -0
- package/dist/dashboard/assets/entry-PDd27uCd.js +0 -1
- package/dist/dashboard/assets/entry-PDd27uCd.js.gz +0 -0
- package/dist/dashboard/assets/formatters-DcHJyRiu.js.gz +0 -0
- package/dist/dashboard/assets/index-CgKmFngv.js.gz +0 -0
- package/dist/dashboard/assets/inline-B2BirKry.js.gz +0 -0
- package/dist/dashboard/assets/input-D-qV9dKY.js.gz +0 -0
- package/dist/dashboard/assets/layout-B7tVWhtV.js.gz +0 -0
- package/dist/dashboard/assets/list-row-CtkGE3bF.js.gz +0 -0
- package/dist/dashboard/assets/live-DGizF06-.js.gz +0 -0
- package/dist/dashboard/assets/minimize-2-BTmMTK4o.js +0 -1
- package/dist/dashboard/assets/minimize-2-BTmMTK4o.js.gz +0 -0
- package/dist/dashboard/assets/mutation-GU7XdEjz.js.gz +0 -0
- package/dist/dashboard/assets/network-C9UE-bOr.js.gz +0 -0
- package/dist/dashboard/assets/numbers-BnAd22a_.js.gz +0 -0
- package/dist/dashboard/assets/pagination-BAywyMzS.js.gz +0 -0
- package/dist/dashboard/assets/query-keys-YSoQOUh6.js.gz +0 -0
- package/dist/dashboard/assets/quota-DJ1QlAOq.js +0 -1
- package/dist/dashboard/assets/quota-DJ1QlAOq.js.gz +0 -0
- package/dist/dashboard/assets/routing-fnCsxgNO.js +0 -1
- package/dist/dashboard/assets/routing-fnCsxgNO.js.gz +0 -0
- package/dist/dashboard/assets/select-BCOcv8WK.js.gz +0 -0
- package/dist/dashboard/assets/settings-BxslsErn.js +0 -1
- package/dist/dashboard/assets/settings-BxslsErn.js.gz +0 -0
- package/dist/dashboard/assets/stack-ByKt3Q1g.js.gz +0 -0
- package/dist/dashboard/assets/state-DXbGTx7N.js.gz +0 -0
- package/dist/dashboard/assets/switch-ZeTsW623.js.gz +0 -0
- package/dist/dashboard/assets/useMutation-CbCP4w1o.js.gz +0 -0
- package/dist/dashboard/console-backgrounds.jpg +0 -0
- package/dist/dashboard/console-backgrounds_initial.jpg +0 -0
- package/dist/dashboard/donation/qris-risun-marke.png +0 -0
- package/src/providers/bundled-discovery-providers.ts +0 -98
- package/src/providers/configured-openai-providers.ts +0 -120
- package/src/providers/integrations/buddy/turing-device-token.ts +0 -262
- package/src/providers/integrations/buddy/workbuddy/cn-oauth.ts +0 -30
- package/src/providers/integrations/buddy/workbuddy/cn-provider.ts +0 -58
- package/src/providers/integrations/buddy/workbuddy/oauth.ts +0 -31
- package/src/providers/integrations/buddy/workbuddy/provider.ts +0 -209
- package/src/providers/integrations/buddy/workbuddy/quota.ts +0 -161
- package/src/providers/integrations/buddy/workbuddy/shared.ts +0 -285
- package/src/providers/operations/model-discovery-cache.ts +0 -34
- package/src/providers/operations/probe-fetch.ts +0 -15
- package/src/providers/operations/provider-version-cache.ts +0 -30
- package/src/providers/provider-capabilities.ts +0 -33
- package/src/providers/provider-credential-envelope.ts +0 -43
- /package/dist/dashboard/assets/{app-CTxoqyYB.js → app-DIXLjojg.js} +0 -0
- /package/dist/dashboard/assets/{app-CTxoqyYB.js.gz → app-DIXLjojg.js.gz} +0 -0
|
@@ -19,8 +19,7 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import { defineModel } from "../../provider-model-definition";
|
|
21
21
|
import type { ModelDefinition } from "../../provider-model-definition";
|
|
22
|
-
|
|
23
|
-
export const ALIBABACP_PROVIDER_ID = "alibabacp" as const;
|
|
22
|
+
import { ALIBABACP_PROVIDER_ID } from "./alibabacp";
|
|
24
23
|
|
|
25
24
|
/** Chat path below the region's `/compatible-mode/v1` base. */
|
|
26
25
|
const CHAT_ENDPOINT = "/chat/completions";
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
* does not publish yet arrives through the sync control instead of being
|
|
18
18
|
* asserted ahead of the upstream.
|
|
19
19
|
*/
|
|
20
|
-
import { defineModel } from "
|
|
21
|
-
import type { ModelDefinition } from "
|
|
20
|
+
import { defineModel } from "../../provider-model-definition";
|
|
21
|
+
import type { ModelDefinition } from "../../provider-model-definition";
|
|
22
22
|
|
|
23
23
|
export const DASHSCOPE_PROVIDER_ID = "dashscope" as const;
|
|
24
24
|
|
|
@@ -267,6 +267,85 @@ export function normalizeAntigravityToolSchema(schema: unknown): unknown {
|
|
|
267
267
|
return schema;
|
|
268
268
|
}
|
|
269
269
|
|
|
270
|
+
/**
|
|
271
|
+
* Flattens JSON-Schema constructs the Antigravity upstream rejects.
|
|
272
|
+
*
|
|
273
|
+
* Verified live (2026-11-05): the Claude-route upstream validates tool
|
|
274
|
+
* schemas as strict JSON Schema draft 2020-12 and refuses every `anyOf` /
|
|
275
|
+
* `oneOf` / multi-type `type: [...]` declaration — even a degenerate
|
|
276
|
+
* `anyOf` of two identical string schemas, and even at the root. The Gemini
|
|
277
|
+
* builder's sanitizer keeps those constructs (Gemini itself accepts them), so
|
|
278
|
+
* a tool that declares a union (e.g. OMP's `task` tool's `model` field)
|
|
279
|
+
* ships an invalid schema and the upstream 400s the whole request with
|
|
280
|
+
* `tools.N.custom.input_schema: JSON schema is invalid`.
|
|
281
|
+
*
|
|
282
|
+
* The rewrite replaces `anyOf`/`oneOf` with the single most permissive
|
|
283
|
+
* alternative's type (string when a choice is a string, otherwise any
|
|
284
|
+
* surviving type), and a multi-type `type: [...]` with its first entry —
|
|
285
|
+
* the most permissive shape a strict single-type validator can express.
|
|
286
|
+
* Recurses through `properties` and `items`.
|
|
287
|
+
*/
|
|
288
|
+
export function flattenAntigravitySchema(schema: unknown): unknown {
|
|
289
|
+
if (!isRecord(schema)) return schema;
|
|
290
|
+
const out: Record<string, unknown> = {};
|
|
291
|
+
for (const [key, child] of Object.entries(schema)) {
|
|
292
|
+
if (key === "anyOf" || key === "oneOf") {
|
|
293
|
+
if (!Array.isArray(child)) continue;
|
|
294
|
+
const chosen = child.map((entry) => flattenAntigravitySchema(entry)).find(isRecord);
|
|
295
|
+
if (chosen === undefined) continue;
|
|
296
|
+
if (typeof chosen["type"] === "string") out["type"] = chosen["type"];
|
|
297
|
+
for (const [nestedKey, nestedValue] of Object.entries(chosen)) {
|
|
298
|
+
if (nestedKey === "type") continue;
|
|
299
|
+
out[nestedKey] = nestedValue;
|
|
300
|
+
}
|
|
301
|
+
continue;
|
|
302
|
+
}
|
|
303
|
+
if (key === "type" && Array.isArray(child)) {
|
|
304
|
+
const first = child.find((entry): entry is string => typeof entry === "string");
|
|
305
|
+
if (first !== undefined) out["type"] = first;
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
if (key === "properties" && isRecord(child)) {
|
|
309
|
+
out["properties"] = Object.fromEntries(
|
|
310
|
+
Object.entries(child).map(([name, entry]) => [name, flattenAntigravitySchema(entry)]),
|
|
311
|
+
);
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
if (key === "items" && Array.isArray(child)) {
|
|
315
|
+
out["items"] = child.map((entry) => flattenAntigravitySchema(entry));
|
|
316
|
+
continue;
|
|
317
|
+
}
|
|
318
|
+
if (key === "items" && isRecord(child)) {
|
|
319
|
+
out["items"] = flattenAntigravitySchema(child);
|
|
320
|
+
continue;
|
|
321
|
+
}
|
|
322
|
+
out[key] = child;
|
|
323
|
+
}
|
|
324
|
+
return out;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* Applies both tool-schema normalizations (unwrap `parametersJsonSchema`,
|
|
329
|
+
* flatten rejected union constructs) and reports whether anything changed.
|
|
330
|
+
*
|
|
331
|
+
* When flattening is a no-op, the *original* reference is returned so the
|
|
332
|
+
* request-level helper can detect an unchanged request without a deep compare.
|
|
333
|
+
*/
|
|
334
|
+
export function normalizeAntigravityToolSchemaForWire(schema: unknown): {
|
|
335
|
+
readonly schema: unknown;
|
|
336
|
+
readonly changed: boolean;
|
|
337
|
+
} {
|
|
338
|
+
const unwrapped = normalizeAntigravityToolSchema(schema);
|
|
339
|
+
const flattened = flattenAntigravitySchema(unwrapped);
|
|
340
|
+
const unwrapChanged = unwrapped !== schema;
|
|
341
|
+
const flattenChanged =
|
|
342
|
+
flattened !== unwrapped && JSON.stringify(flattened) !== JSON.stringify(unwrapped);
|
|
343
|
+
return {
|
|
344
|
+
schema: flattenChanged ? flattened : unwrapped,
|
|
345
|
+
changed: unwrapChanged || flattenChanged,
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
|
|
270
349
|
/**
|
|
271
350
|
* Normalizes every declared tool's schema on a canonical request, returning a
|
|
272
351
|
* shallow copy of the request when anything changed and the original object
|
|
@@ -286,14 +365,54 @@ export function normalizeAntigravityToolSchemas(request: CanonicalRequest): Cano
|
|
|
286
365
|
if (tools === undefined || tools.length === 0) return request;
|
|
287
366
|
let changed = false;
|
|
288
367
|
const normalized = tools.map((tool) => {
|
|
289
|
-
const schema =
|
|
290
|
-
if (
|
|
368
|
+
const { schema, changed: schemaChanged } = normalizeAntigravityToolSchemaForWire(tool.jsonSchema);
|
|
369
|
+
if (!schemaChanged) return tool;
|
|
291
370
|
changed = true;
|
|
292
371
|
return { ...tool, jsonSchema: schema };
|
|
293
372
|
});
|
|
294
373
|
return changed ? { ...request, tools: normalized } : request;
|
|
295
374
|
}
|
|
296
375
|
|
|
376
|
+
/**
|
|
377
|
+
* Drops replayed reasoning blocks that carry no signature on a Claude route.
|
|
378
|
+
*
|
|
379
|
+
* The Claude-route upstream requires every `thinking` block in a replayed
|
|
380
|
+
* assistant turn to carry a `signature`; an unsigned block is rejected with
|
|
381
|
+
* `400 messages.N.content.0.thinking.signature: Field required`. Chat-surface
|
|
382
|
+
* clients (e.g. OMP) replay reasoning as a bare `reasoning_content` string
|
|
383
|
+
* that has no signature — there is nothing to forward, and sending it as an
|
|
384
|
+
* unsigned `thought` part guarantees the 400.
|
|
385
|
+
*
|
|
386
|
+
* The reference client solves this with a `drop-unsigned-thinking` compat flag
|
|
387
|
+
* on `google-antigravity` (donor `anthropic.kdl:743-748`): a thinking block
|
|
388
|
+
* without a signature is simply not replayed. This mirrors that behavior —
|
|
389
|
+
* reasoning with a real signature still replays; reasoning without one is
|
|
390
|
+
* dropped so the upstream never sees an unsigned `thinking` part.
|
|
391
|
+
*/
|
|
392
|
+
export function dropAntigravityUnsignedReasoning(
|
|
393
|
+
request: CanonicalRequest,
|
|
394
|
+
isClaudeRoute: boolean,
|
|
395
|
+
): CanonicalRequest {
|
|
396
|
+
if (!isClaudeRoute) return request;
|
|
397
|
+
const messages = request.messages;
|
|
398
|
+
let changed = false;
|
|
399
|
+
const next = messages.map((message) => {
|
|
400
|
+
if (message.role !== "assistant") return message;
|
|
401
|
+
const content = message.content.filter((part) => {
|
|
402
|
+
if (part.kind !== "reasoning") return true;
|
|
403
|
+
// A present-but-empty signature is still unsigned: upstream rejects a
|
|
404
|
+
// `thinking` part whose `signature` is missing *or* empty with
|
|
405
|
+
// `400 messages.N.content.0.thinking.signature: Field required`. Only a
|
|
406
|
+
// non-empty signature is a real one.
|
|
407
|
+
if (typeof part.signature === "string" && part.signature.length > 0) return true;
|
|
408
|
+
changed = true;
|
|
409
|
+
return false;
|
|
410
|
+
});
|
|
411
|
+
return changed ? { ...message, content } : message;
|
|
412
|
+
});
|
|
413
|
+
return changed ? { ...request, messages: next } : request;
|
|
414
|
+
}
|
|
415
|
+
|
|
297
416
|
// Last-good-endpoint stickiness
|
|
298
417
|
|
|
299
418
|
/**
|
|
@@ -41,6 +41,7 @@ import {
|
|
|
41
41
|
import {
|
|
42
42
|
antigravityWireModelId,
|
|
43
43
|
applySkipThoughtSignatureBypass,
|
|
44
|
+
dropAntigravityUnsignedReasoning,
|
|
44
45
|
getAntigravityModelWireProfile,
|
|
45
46
|
getAntigravityUserAgent,
|
|
46
47
|
loadAntigravityProject,
|
|
@@ -334,6 +335,7 @@ class AntigravityAdapter implements ProviderAdapter {
|
|
|
334
335
|
kind: "reasoning",
|
|
335
336
|
payload: null,
|
|
336
337
|
summary: output.thought,
|
|
338
|
+
...(output.thoughtSignature ? { signature: output.thoughtSignature } : {}),
|
|
337
339
|
},
|
|
338
340
|
} as CanonicalEvent;
|
|
339
341
|
}
|
|
@@ -448,6 +450,7 @@ class AntigravityAdapter implements ProviderAdapter {
|
|
|
448
450
|
kind: "reasoning",
|
|
449
451
|
payload: null,
|
|
450
452
|
summary: output.thought,
|
|
453
|
+
...(output.thoughtSignature ? { signature: output.thoughtSignature } : {}),
|
|
451
454
|
},
|
|
452
455
|
} as CanonicalEvent;
|
|
453
456
|
}
|
|
@@ -912,7 +915,16 @@ export function buildAntigravityEnvelope(
|
|
|
912
915
|
// for that key and would drop both the wrapper and the schema inside it —
|
|
913
916
|
// the tool would ship as `{"type":"object"}` with every property gone.
|
|
914
917
|
// Rewriting after the payload is built leaves nothing to recover.
|
|
915
|
-
|
|
918
|
+
//
|
|
919
|
+
// Claude routes also drop replayed reasoning without a signature (donor
|
|
920
|
+
// `drop-unsigned-thinking`): upstream rejects an unsigned `thinking` part
|
|
921
|
+
// with 400 `messages.N.content.0.thinking.signature: Field required`.
|
|
922
|
+
const isClaudeRoute = logicalModelId.toLowerCase().includes("claude");
|
|
923
|
+
const geminiPayload = buildGeminiPayload(
|
|
924
|
+
normalizeAntigravityToolSchemas(
|
|
925
|
+
dropAntigravityUnsignedReasoning(request, isClaudeRoute),
|
|
926
|
+
),
|
|
927
|
+
);
|
|
916
928
|
const profile = getAntigravityModelWireProfile(wireModelId);
|
|
917
929
|
|
|
918
930
|
const generationConfig = isRecord(geminiPayload["generationConfig"])
|
|
@@ -946,7 +958,6 @@ export function buildAntigravityEnvelope(
|
|
|
946
958
|
const existingContents = Array.isArray(geminiPayload["contents"])
|
|
947
959
|
? (geminiPayload["contents"] as Record<string, unknown>[])
|
|
948
960
|
: [];
|
|
949
|
-
const isClaudeRoute = logicalModelId.toLowerCase().includes("claude");
|
|
950
961
|
// Forced choice on Gemini routes: the backend drops `toolConfig` here, so a
|
|
951
962
|
// canonical `tool_choice=required` with no declared change is restated as a
|
|
952
963
|
// trailing user directive (reference behavior). Claude routes implement
|
|
@@ -8,10 +8,9 @@
|
|
|
8
8
|
* declarations.
|
|
9
9
|
*
|
|
10
10
|
* Only the row shape and the builder are shared. Identity headers are not:
|
|
11
|
-
* `codebuddyHeaders`
|
|
12
|
-
* (`X-Product`/`X-IDE-Type`/`X-Domain` versus
|
|
13
|
-
*
|
|
14
|
-
* with their own provider.
|
|
11
|
+
* `codebuddyHeaders` sends genuinely different bytes per realm
|
|
12
|
+
* (`X-Product`/`X-IDE-Type`/`X-Domain` versus the CN CLI profile), and those
|
|
13
|
+
* stay with the provider.
|
|
15
14
|
*/
|
|
16
15
|
import { GatewayError } from "../../../protocol/gateway-error";
|
|
17
16
|
import { defineModel } from "../../provider-model-definition";
|
|
@@ -42,7 +41,8 @@ export const BUDDY_INTL_EFFORTS: Readonly<Record<string, readonly string[]>> = {
|
|
|
42
41
|
"glm-5.2": ["high", "xhigh"],
|
|
43
42
|
"glm-5.3": ["low", "high", "max"],
|
|
44
43
|
hy3: ["low", "high"],
|
|
45
|
-
|
|
44
|
+
hy4: ["high"],
|
|
45
|
+
hy4free: ["high"],
|
|
46
46
|
};
|
|
47
47
|
export const BUDDY_CN_EFFORTS: Readonly<Record<string, readonly string[]>> = {
|
|
48
48
|
"deepseek-v4-flash": ["low", "high", "max"],
|
|
@@ -53,7 +53,8 @@ export const BUDDY_CN_EFFORTS: Readonly<Record<string, readonly string[]>> = {
|
|
|
53
53
|
"glm-5.3": ["low", "high", "max"],
|
|
54
54
|
"glm-5.3-flash": ["low", "high", "max"],
|
|
55
55
|
hy3: ["low", "high"],
|
|
56
|
-
|
|
56
|
+
hy4: ["high"],
|
|
57
|
+
hy4free: ["high"],
|
|
57
58
|
};
|
|
58
59
|
|
|
59
60
|
/** The image-generation ids the international buddy providers serve. */
|
|
@@ -75,9 +76,9 @@ const BUDDY_IMAGE_MODEL_IDS: readonly { id: string; endpoint: string; ctx: numbe
|
|
|
75
76
|
* `seedance-2.5` is the text-to-video model the buddy facade exposes. It is a
|
|
76
77
|
* distinct service kind (`videoGeneration`), not a chat or image row, so it is
|
|
77
78
|
* built by {@link makeBuddyVideoModels} and reached through
|
|
78
|
-
* `/videos/generations` (relative to each variant's own base
|
|
79
|
-
*
|
|
80
|
-
*
|
|
79
|
+
* `/videos/generations` (relative to each variant's own base) rather than a
|
|
80
|
+
* chat wire. CodeBuddy CN is deliberately absent — it publishes a different
|
|
81
|
+
* roster.
|
|
81
82
|
*/
|
|
82
83
|
const BUDDY_VIDEO_MODEL_IDS: readonly { id: string; endpoint: string; ctx: number; out: number }[] = [
|
|
83
84
|
{ id: "seedance-2.5", endpoint: "/videos/generations", ctx: 1_000_000, out: 128_000 },
|
|
@@ -103,16 +104,15 @@ export const BUDDY_IMAGE_MODEL_ID_SET: ReadonlySet<string> = new Set(
|
|
|
103
104
|
* The CN realm's image-generation ids.
|
|
104
105
|
*
|
|
105
106
|
* Separate from {@link BUDDY_IMAGE_MODEL_IDS} because the realms do not share
|
|
106
|
-
* a roster: `hunyuan-image-alpha`
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
* `hunyuan-image-alpha-edit` carries `image-to-image` and is deliberately NOT
|
|
112
|
-
* here: it is not in the CLI roster, so it is not a routable generation model.
|
|
107
|
+
* a roster: `hunyuan-image-alpha` (text-to-image) and
|
|
108
|
+
* `hunyuan-image-alpha-edit` (image-to-image) are published by the CN
|
|
109
|
+
* `/v3/config` only, and the intl image ids are not served there. Sharing one
|
|
110
|
+
* list would either leak CN-only ids onto the international catalogs or force
|
|
111
|
+
* a realm check into every consumer.
|
|
113
112
|
*/
|
|
114
113
|
const BUDDY_CN_IMAGE_MODEL_IDS: readonly { id: string; ctx: number; out: number }[] = [
|
|
115
114
|
{ id: "hunyuan-image-alpha", ctx: 1_000_000, out: 64_000 },
|
|
115
|
+
{ id: "hunyuan-image-alpha-edit", ctx: 1_000_000, out: 64_000 },
|
|
116
116
|
];
|
|
117
117
|
|
|
118
118
|
/** The CN analogue of {@link BUDDY_IMAGE_MODEL_ID_SET}. */
|
|
@@ -145,10 +145,54 @@ export function makeBuddyCnImageModels(
|
|
|
145
145
|
);
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
+
/**
|
|
149
|
+
* The CN realm's video-generation ids.
|
|
150
|
+
*
|
|
151
|
+
* `kling-video-v3` (text-to-video + image-to-video) and
|
|
152
|
+
* `minimax-video-h3` (text-to-video) are published by the CN `/v3/config`,
|
|
153
|
+
* sharing the async task surface the intl video rows use.
|
|
154
|
+
*/
|
|
155
|
+
const BUDDY_CN_VIDEO_MODEL_IDS: readonly { id: string; ctx: number; out: number }[] = [
|
|
156
|
+
{ id: "kling-video-v3", ctx: 1_000_000, out: 128_000 },
|
|
157
|
+
{ id: "minimax-video-h3", ctx: 1_000_000, out: 128_000 },
|
|
158
|
+
];
|
|
159
|
+
|
|
160
|
+
/** The CN analogue of {@link BUDDY_VIDEO_MODEL_ID_SET}. */
|
|
161
|
+
export const BUDDY_CN_VIDEO_MODEL_ID_SET: ReadonlySet<string> = new Set(
|
|
162
|
+
BUDDY_CN_VIDEO_MODEL_IDS.map((entry) => entry.id),
|
|
163
|
+
);
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Builds the CN video-generation rows for one buddy CN provider.
|
|
167
|
+
*
|
|
168
|
+
* Same shape as {@link makeBuddyVideoModels}, scoped to the CN roster: a video
|
|
169
|
+
* row produces `["video"]` on the `videoGeneration` surface and is reached
|
|
170
|
+
* through the native video route, not a chat wire.
|
|
171
|
+
*/
|
|
172
|
+
export function makeBuddyCnVideoModels(
|
|
173
|
+
providerId: string,
|
|
174
|
+
endpoint: string,
|
|
175
|
+
): readonly ModelDefinition[] {
|
|
176
|
+
return BUDDY_CN_VIDEO_MODEL_IDS.map((entry) =>
|
|
177
|
+
defineModel({
|
|
178
|
+
id: entry.id,
|
|
179
|
+
providerId,
|
|
180
|
+
serviceKind: "videoGeneration",
|
|
181
|
+
wireFamily: "chat",
|
|
182
|
+
endpoint,
|
|
183
|
+
ctx: entry.ctx,
|
|
184
|
+
out: entry.out,
|
|
185
|
+
vision: true,
|
|
186
|
+
output: ["video"],
|
|
187
|
+
toolCall: false,
|
|
188
|
+
}),
|
|
189
|
+
);
|
|
190
|
+
}
|
|
191
|
+
|
|
148
192
|
/**
|
|
149
193
|
* Ids the buddy facade refuses on a free plan.
|
|
150
194
|
*
|
|
151
|
-
* The international CodeBuddy
|
|
195
|
+
* The international CodeBuddy catalog shares this roster and
|
|
152
196
|
* the same Pro-tier model classification.
|
|
153
197
|
*
|
|
154
198
|
* Nothing in the console directory predicts it. `credits` does not — `kimi-k3`
|
|
@@ -186,12 +230,12 @@ export const BUDDY_PRO_ONLY_MODEL_IDS: ReadonlySet<string> = new Set([
|
|
|
186
230
|
/**
|
|
187
231
|
* Builds the image-generation rows for one buddy provider.
|
|
188
232
|
*
|
|
189
|
-
* Shared rather than copied per provider: cb
|
|
233
|
+
* Shared rather than copied per provider: cb serves the same image
|
|
190
234
|
* models from the same facade, so the roster and the declared capabilities are
|
|
191
235
|
* one decision instead of two that drift. CodeBuddy CN is deliberately absent —
|
|
192
236
|
* it publishes a different roster.
|
|
193
237
|
*
|
|
194
|
-
* `endpoint` is explicit because the
|
|
238
|
+
* `endpoint` is explicit because the realms disagree about the path their
|
|
195
239
|
* base URL expects, and a bare `defineModel` would infer the generic default
|
|
196
240
|
* and produce a URL the upstream rejects.
|
|
197
241
|
*/
|
|
@@ -260,12 +304,9 @@ export const BUDDY_VIDEO_MODEL_ID_SET: ReadonlySet<string> = new Set(
|
|
|
260
304
|
* Builds one buddy catalog row.
|
|
261
305
|
*
|
|
262
306
|
* `endpoint` is explicit rather than left to the generic `/chat/completions`
|
|
263
|
-
* default because the
|
|
264
|
-
*
|
|
265
|
-
*
|
|
266
|
-
* `https://www.workbuddy.ai/chat/completions`, which that upstream answers
|
|
267
|
-
* with a 405 HTML page. Callers pass the endpoint their base URL actually
|
|
268
|
-
* serves, and `undefined` for the default.
|
|
307
|
+
* default because the family's CN base URL differs from the intl one; callers
|
|
308
|
+
* pass the endpoint their base URL actually serves, and `undefined` for the
|
|
309
|
+
* default.
|
|
269
310
|
*/
|
|
270
311
|
export function makeBuddyModel(
|
|
271
312
|
entry: BuddyRawEntry,
|
|
@@ -297,14 +338,11 @@ export function makeBuddyModel(
|
|
|
297
338
|
}
|
|
298
339
|
|
|
299
340
|
/**
|
|
300
|
-
* The shared model roster for the
|
|
341
|
+
* The shared model roster for the international buddy site.
|
|
301
342
|
*
|
|
302
|
-
* CodeBuddy intl
|
|
303
|
-
*
|
|
304
|
-
*
|
|
305
|
-
* single source of truth, and each provider maps it with its own endpoint
|
|
306
|
-
* (`workbuddy.ts` needs the explicit `/v2/chat/completions`, `codebuddy.ts`
|
|
307
|
-
* takes the family default) — the endpoint is the only thing that differs.
|
|
343
|
+
* CodeBuddy intl serves the model set from the same console directory shape, so
|
|
344
|
+
* the catalog is one hand-written list as the single source of truth, mapped
|
|
345
|
+
* with the provider's own endpoint (`codebuddy.ts` takes the family default).
|
|
308
346
|
*
|
|
309
347
|
* CodeBuddy CN is deliberately NOT on this list: its console publishes a
|
|
310
348
|
* different roster (its own `glm-5v-turbo` / `kimi-k3-1` ids and CN-specific
|
|
@@ -349,8 +387,8 @@ export const BUDDY_SHARED_RAW: readonly BuddyRawEntry[] = [
|
|
|
349
387
|
["grok-4.6", "Grok 4.6", true, true, 500_000, 500_000],
|
|
350
388
|
["grok-4.7", "Grok 4.7", true, true, 500_000, 128_000],
|
|
351
389
|
["hy3", "Hy3", true, true, 192_000, 64_000, true],
|
|
352
|
-
["hy4
|
|
353
|
-
["
|
|
390
|
+
["hy4", "Hy4", true, true, 1_000_000, 64_000, true],
|
|
391
|
+
["hy4free", "Hy4 Free", true, true, 1_000_000, 64_000, true],
|
|
354
392
|
["kimi-k2.5", "Kimi K2.5", true, false, 164_000, 262_144],
|
|
355
393
|
["kimi-k2.6", "Kimi K2.6", true, false, 256_000, 262_144],
|
|
356
394
|
["kimi-k2.7", "Kimi K2.7", true, false, 256_000, 65_536],
|