cartethyia 2.7.7 → 2.7.9
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 +0 -1
- package/README.md +29 -59
- package/dist/dashboard/assets/BannedPage-BxoG1MrL.js +1 -0
- package/dist/dashboard/assets/BannedPage-BxoG1MrL.js.gz +0 -0
- package/dist/dashboard/assets/{CliToolDetailPage-CLUhmjUy.js → CliToolDetailPage-ixwgKk53.js} +1 -1
- package/dist/dashboard/assets/CliToolDetailPage-ixwgKk53.js.gz +0 -0
- package/dist/dashboard/assets/{CliToolsPage-CQmrqqrk.js → CliToolsPage-BmttNV3U.js} +1 -1
- package/dist/dashboard/assets/CliToolsPage-BmttNV3U.js.gz +0 -0
- package/dist/dashboard/assets/CombosPage-BE3qwwfC.js +1 -0
- package/dist/dashboard/assets/CombosPage-BE3qwwfC.js.gz +0 -0
- package/dist/dashboard/assets/ConsoleLogPage-CRZdmMIX.js +1 -0
- package/dist/dashboard/assets/ConsoleLogPage-CRZdmMIX.js.gz +0 -0
- package/dist/dashboard/assets/CustomizationPage-Dv_FJ6Er.js +1 -0
- package/dist/dashboard/assets/CustomizationPage-Dv_FJ6Er.js.gz +0 -0
- package/dist/dashboard/assets/HealthEventsModal-CoVrw2sM.js +1 -0
- package/dist/dashboard/assets/HealthEventsModal-CoVrw2sM.js.gz +0 -0
- package/dist/dashboard/assets/{InjectSystemPromptPanel-C-e2AMz6.js → InjectSystemPromptPanel-BOoO8rpz.js} +2 -2
- package/dist/dashboard/assets/InjectSystemPromptPanel-BOoO8rpz.js.gz +0 -0
- package/dist/dashboard/assets/{LoginPage-J8wPbmfT.js → LoginPage-ChJuNNVN.js} +1 -1
- package/dist/dashboard/assets/LoginPage-ChJuNNVN.js.gz +0 -0
- package/dist/dashboard/assets/{ModelPicker-C6WlpU5E.js → ModelPicker-BZAJtPg1.js} +1 -1
- package/dist/dashboard/assets/ModelPicker-BZAJtPg1.js.gz +0 -0
- package/dist/dashboard/assets/OverviewPage-BE40s3u5.js +1 -0
- package/dist/dashboard/assets/OverviewPage-BE40s3u5.js.gz +0 -0
- package/dist/dashboard/assets/ProviderDetailPage-sfLoQtPV.js +8 -0
- package/dist/dashboard/assets/ProviderDetailPage-sfLoQtPV.js.gz +0 -0
- package/dist/dashboard/assets/ProviderIcon-CQ6bPUf_.js +1 -0
- package/dist/dashboard/assets/ProviderIcon-CQ6bPUf_.js.gz +0 -0
- package/dist/dashboard/assets/ProvidersPage-DcepmPWo.js +1 -0
- package/dist/dashboard/assets/ProvidersPage-DcepmPWo.js.gz +0 -0
- package/dist/dashboard/assets/{ProxyPage-BBTRBAQ3.js → ProxyPage-BJ87Pp0U.js} +1 -1
- package/dist/dashboard/assets/ProxyPage-BJ87Pp0U.js.gz +0 -0
- package/dist/dashboard/assets/{QuotaPage-B2WqMSG1.js → QuotaPage-gkSyRAKa.js} +1 -1
- package/dist/dashboard/assets/QuotaPage-gkSyRAKa.js.gz +0 -0
- package/dist/dashboard/assets/SettingsPage-C5HPWqEv.js +1 -0
- package/dist/dashboard/assets/SettingsPage-C5HPWqEv.js.gz +0 -0
- package/dist/dashboard/assets/{SetupPage-LND6_Ss7.js → SetupPage-CFNcATJJ.js} +1 -1
- package/dist/dashboard/assets/SetupPage-CFNcATJJ.js.gz +0 -0
- package/dist/dashboard/assets/{StudioPage-BzNnm6Bi.js → StudioPage-YoD4tY5l.js} +1 -1
- package/dist/dashboard/assets/StudioPage-YoD4tY5l.js.gz +0 -0
- package/dist/dashboard/assets/UsagePage-DxjaAhb_.js +56 -0
- package/dist/dashboard/assets/UsagePage-DxjaAhb_.js.gz +0 -0
- package/dist/dashboard/assets/api-keys-BTlkq_Uk.js +1 -0
- package/dist/dashboard/assets/api-keys-BTlkq_Uk.js.gz +0 -0
- package/dist/dashboard/assets/app-BX2nnKqs.css +2 -0
- package/dist/dashboard/assets/app-BX2nnKqs.css.gz +0 -0
- package/dist/dashboard/assets/assert-CndthXFQ.js +1 -0
- package/dist/dashboard/assets/assert-CndthXFQ.js.gz +0 -0
- package/dist/dashboard/assets/{badge-BaX2GTrn.js → badge-DdbT_7Am.js} +1 -1
- package/dist/dashboard/assets/badge-DdbT_7Am.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-DFH4Bkte.js → banner-CsGN-nbm.js} +1 -1
- package/dist/dashboard/assets/banner-CsGN-nbm.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-CxDw0lK6.js → card-mgZ_TLLZ.js} +1 -1
- package/dist/dashboard/assets/card-mgZ_TLLZ.js.gz +0 -0
- package/dist/dashboard/assets/cli-tools-A1-v8-03.js +1 -0
- package/dist/dashboard/assets/cli-tools-A1-v8-03.js.gz +0 -0
- package/dist/dashboard/assets/{clipboard-button-DfS1ntiq.js → clipboard-button-CJ4Zty89.js} +1 -1
- package/dist/dashboard/assets/clipboard-button-CJ4Zty89.js.gz +0 -0
- package/dist/dashboard/assets/{dialog-BK-NRr5u.js → dialog-B5L2jPQ_.js} +1 -1
- package/dist/dashboard/assets/dialog-B5L2jPQ_.js.gz +0 -0
- package/dist/dashboard/assets/{drawer-QqPul6sC.js → drawer-DkjUouAj.js} +1 -1
- package/dist/dashboard/assets/drawer-DkjUouAj.js.gz +0 -0
- package/dist/dashboard/assets/{entry-BMlYJVFj.js → entry-B-LVLV6o.js} +1 -1
- package/dist/dashboard/assets/entry-B-LVLV6o.js.gz +0 -0
- package/dist/dashboard/assets/entry-CAhdYl3B.js +1 -0
- package/dist/dashboard/assets/entry-CAhdYl3B.js.gz +0 -0
- package/dist/dashboard/assets/entry-D2xD0Tmd.js +4 -0
- package/dist/dashboard/assets/entry-D2xD0Tmd.js.gz +0 -0
- package/dist/dashboard/assets/{formatters-DP-5E01-.js → formatters-CrsdLVsn.js} +1 -1
- package/dist/dashboard/assets/formatters-CrsdLVsn.js.gz +0 -0
- package/dist/dashboard/assets/{index-D36vCZht.js → index-BU64Lqvp.js} +2 -2
- package/dist/dashboard/assets/index-BU64Lqvp.js.gz +0 -0
- package/dist/dashboard/assets/{inline-CHJQwxLa.js → inline-B2aDLyyg.js} +1 -1
- package/dist/dashboard/assets/inline-B2aDLyyg.js.gz +0 -0
- package/dist/dashboard/assets/{input-BlmlizVV.js → input-BCVkdR9d.js} +1 -1
- package/dist/dashboard/assets/input-BCVkdR9d.js.gz +0 -0
- package/dist/dashboard/assets/{layout-Bz93I-yE.js → layout-DNcAdMK-.js} +1 -1
- package/dist/dashboard/assets/layout-DNcAdMK-.js.gz +0 -0
- package/dist/dashboard/assets/{list-row-Ml16KCfu.js → list-row-DgrIH0hw.js} +1 -1
- package/dist/dashboard/assets/list-row-DgrIH0hw.js.gz +0 -0
- package/dist/dashboard/assets/{live-7_QpnYGu.js → live-Cae01iu8.js} +1 -1
- package/dist/dashboard/assets/live-Cae01iu8.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-CuMDaTzT.js → network-CRib7H_2.js} +1 -1
- package/dist/dashboard/assets/network-CRib7H_2.js.gz +0 -0
- package/dist/dashboard/assets/{numbers-CoqpaDMx.js → numbers-BKQE8Xpz.js} +1 -1
- package/dist/dashboard/assets/numbers-BKQE8Xpz.js.gz +0 -0
- package/dist/dashboard/assets/{pagination-B5aOoweZ.js → pagination-ecPvG_8g.js} +1 -1
- package/dist/dashboard/assets/pagination-ecPvG_8g.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/{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/routing-Ckm1UXuC.js +1 -0
- package/dist/dashboard/assets/routing-Ckm1UXuC.js.gz +0 -0
- package/dist/dashboard/assets/{select-C9Ssle9b.js → select-ChoFWyKz.js} +1 -1
- package/dist/dashboard/assets/select-ChoFWyKz.js.gz +0 -0
- package/dist/dashboard/assets/settings-CKjFPlKW.js +1 -0
- package/dist/dashboard/assets/settings-CKjFPlKW.js.gz +0 -0
- package/dist/dashboard/assets/{stack-j7cXjgYX.js → stack-DWCwU3fh.js} +1 -1
- package/dist/dashboard/assets/stack-DWCwU3fh.js.gz +0 -0
- package/dist/dashboard/assets/{state-DHmEnLa2.js → state-Cg3VL5J_.js} +1 -1
- package/dist/dashboard/assets/state-Cg3VL5J_.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-DmZcyTIC.js → switch-Db70BMix.js} +1 -1
- package/dist/dashboard/assets/switch-Db70BMix.js.gz +0 -0
- package/dist/dashboard/assets/{useMutation-CbCP4w1o.js → useMutation-BqdE0LuM.js} +1 -1
- package/dist/dashboard/assets/useMutation-BqdE0LuM.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 +57 -55
- 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/lite-sqlite3/0044_add_models_warning_metadata.sql +11 -0
- package/migrations/lite-sqlite3/0045_migrate_workbuddy_to_codebuddy.sql +156 -0
- package/package.json +1 -1
- package/src/boot/dependencies.ts +11 -3
- package/src/config/cooldowns.ts +1 -1
- package/src/config/spec.ts +0 -6
- package/src/console/api-keys/routes.ts +11 -4
- package/src/console/console-router.ts +7 -0
- package/src/console/dashboard-assets.ts +5 -5
- package/src/console/domain-registration.ts +27 -0
- package/src/console/ip-bans/routes.ts +99 -0
- package/src/console/providers/catalog/catalog-projections.ts +5 -2
- package/src/console/providers/catalog/contracts.ts +123 -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 +64 -4
- package/src/console/providers/catalog/store-helpers.ts +30 -1
- package/src/console/providers/catalog/store.ts +243 -3
- package/src/console/quota/account-quota-global.ts +89 -1
- package/src/console/quota/native-identity.ts +2 -0
- package/src/console/settings/contracts.ts +18 -0
- package/src/console/settings/store.ts +32 -0
- package/src/console/system-prompt/contracts.ts +0 -1
- package/src/main.ts +1 -0
- package/src/observability/event-query.ts +18 -4
- package/src/persistence/dialect.ts +12 -0
- package/src/persistence/schema.ts +20 -2
- package/src/protocol/dsml.ts +1 -1
- package/src/protocol/gateway-error.ts +1 -0
- package/src/protocol/reasoning.ts +1 -1
- package/src/protocol/request/chat.ts +4 -4
- package/src/protocol/request/messages.ts +1 -1
- package/src/protocol/response/gemini.ts +6 -1
- package/src/protocol/sse-decoder.ts +25 -8
- package/src/protocol/stream-error-frames.ts +13 -3
- 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 +7 -5
- package/src/providers/authentication/oauth-refresh-service.ts +149 -36
- package/src/providers/default-registry.ts +68 -3
- package/src/providers/discovery/discovery-types.ts +12 -0
- package/src/providers/discovery/probe-phases.ts +61 -30
- package/src/providers/discovery/probing-service.ts +279 -164
- package/src/providers/integrations/antigravity/antigravity-protocol.ts +117 -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 +18 -18
- 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 +70 -0
- 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 +4 -41
- package/src/providers/integrations/buddy/codebuddy/cn-catalog.ts +2 -1
- package/src/providers/integrations/buddy/codebuddy/cn-provider.ts +20 -1
- package/src/providers/integrations/buddy/codebuddy/provider.ts +2 -2
- package/src/providers/integrations/buddy/codebuddy/shared.ts +6 -10
- package/src/providers/integrations/cursor/cursor-catalog.ts +2 -0
- package/src/providers/integrations/cursor/cursor-exec.ts +738 -0
- package/src/providers/integrations/cursor/cursor-http2.ts +2 -0
- package/src/providers/integrations/cursor/cursor-request.ts +9 -8
- package/src/providers/integrations/cursor/cursor-shared.ts +19 -1
- package/src/providers/integrations/cursor/cursor.ts +50 -30
- 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 +584 -0
- package/src/providers/integrations/devin/protocol/framing.ts +124 -0
- package/src/providers/integrations/factory/factory.ts +2 -2
- 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/hermes/hermes-oauth.ts +94 -0
- package/src/providers/integrations/hermes.ts +4 -12
- package/src/providers/integrations/opencode/fingerprint.ts +1 -1
- package/src/providers/integrations/perch/perch-catalog.ts +105 -0
- package/src/providers/integrations/perch/perch-oauth.ts +170 -0
- package/src/providers/integrations/perch/perch-protocol.ts +211 -0
- package/src/providers/integrations/perch/perch-quota.ts +137 -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 +315 -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 +1 -1
- package/src/providers/integrations/qoder/qoder-adapter.ts +89 -28
- package/src/providers/integrations/qoder/qoder-cache.ts +32 -0
- package/src/providers/integrations/qoder/qoder-catalog.ts +6 -1
- package/src/providers/integrations/qoder/qoder-checkin.ts +2 -2
- package/src/providers/integrations/qoder/qoder-grpc.ts +209 -5
- package/src/providers/integrations/qoder/qoder-ide.ts +5 -1
- 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 -6
- 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 +3 -6
- package/src/providers/integrations/trae/trae-quota.ts +103 -21
- package/src/providers/integrations/trae/trae-realm.ts +36 -15
- package/src/providers/integrations/trae/trae.ts +97 -7
- package/src/providers/operations/account-error-classification.ts +66 -1
- package/src/providers/operations/account-health-service.ts +192 -26
- package/src/providers/operations/account-refresh-status.ts +284 -0
- package/src/providers/operations/account-tier.ts +67 -0
- package/src/providers/operations/byok-wire-profile.ts +9 -12
- package/src/providers/operations/client-versions.ts +37 -99
- package/src/providers/operations/cooldown-rules.ts +61 -0
- package/src/providers/operations/provider-catalog-seeder.ts +4 -0
- package/src/providers/provider-contracts.ts +29 -0
- package/src/providers/provider-metadata.ts +59 -4
- package/src/providers/provider-model-definition.ts +36 -0
- package/src/providers/quota/refresh.ts +21 -0
- package/src/security/abuse.ts +71 -0
- package/src/transport/dispatch/proxy-request.ts +1 -0
- package/src/transport/dispatch/streaming/stream.ts +1 -0
- package/src/transport/dispatch/upstream.ts +4 -1
- package/src/transport/failure-policy.ts +113 -7
- package/src/transport/routing/router.ts +25 -1
- package/src/transport/surface/messages/adapter.ts +2 -1
- package/src/transport/surface/responses/encode.ts +12 -1
- 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-B05aF8Dg.js +0 -1
- package/dist/dashboard/assets/BannedPage-B05aF8Dg.js.gz +0 -0
- package/dist/dashboard/assets/CliToolDetailPage-CLUhmjUy.js.gz +0 -0
- package/dist/dashboard/assets/CliToolsPage-CQmrqqrk.js.gz +0 -0
- package/dist/dashboard/assets/CombosPage-CHG_1Wr3.js +0 -1
- package/dist/dashboard/assets/CombosPage-CHG_1Wr3.js.gz +0 -0
- package/dist/dashboard/assets/ConsoleLogPage-DPgbklad.js +0 -1
- package/dist/dashboard/assets/ConsoleLogPage-DPgbklad.js.gz +0 -0
- package/dist/dashboard/assets/CustomizationPage-pnfAqr_-.js +0 -1
- package/dist/dashboard/assets/CustomizationPage-pnfAqr_-.js.gz +0 -0
- package/dist/dashboard/assets/HealthEventsModal-DGJuU2A6.js +0 -1
- package/dist/dashboard/assets/HealthEventsModal-DGJuU2A6.js.gz +0 -0
- package/dist/dashboard/assets/InjectSystemPromptPanel-C-e2AMz6.js.gz +0 -0
- package/dist/dashboard/assets/LoginPage-J8wPbmfT.js.gz +0 -0
- package/dist/dashboard/assets/ModelPicker-C6WlpU5E.js.gz +0 -0
- package/dist/dashboard/assets/OverviewPage-BSQnF2Lp.js +0 -1
- package/dist/dashboard/assets/OverviewPage-BSQnF2Lp.js.gz +0 -0
- package/dist/dashboard/assets/ProviderDetailPage-DK_e0FJz.js +0 -7
- package/dist/dashboard/assets/ProviderDetailPage-DK_e0FJz.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-D_a3r6Gc.js +0 -1
- package/dist/dashboard/assets/ProvidersPage-D_a3r6Gc.js.gz +0 -0
- package/dist/dashboard/assets/ProxyPage-BBTRBAQ3.js.gz +0 -0
- package/dist/dashboard/assets/QuotaPage-B2WqMSG1.js.gz +0 -0
- package/dist/dashboard/assets/SettingsPage-D7xp5Ij_.js +0 -1
- package/dist/dashboard/assets/SettingsPage-D7xp5Ij_.js.gz +0 -0
- package/dist/dashboard/assets/SetupPage-LND6_Ss7.js.gz +0 -0
- package/dist/dashboard/assets/StudioPage-BzNnm6Bi.js.gz +0 -0
- package/dist/dashboard/assets/UsagePage-C1TbL24N.js +0 -56
- package/dist/dashboard/assets/UsagePage-C1TbL24N.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-mweRcsKp.css +0 -2
- package/dist/dashboard/assets/app-mweRcsKp.css.gz +0 -0
- package/dist/dashboard/assets/assert-CidQVoNo.js +0 -1
- package/dist/dashboard/assets/assert-CidQVoNo.js.gz +0 -0
- package/dist/dashboard/assets/badge-BaX2GTrn.js.gz +0 -0
- package/dist/dashboard/assets/banner-DFH4Bkte.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-CxDw0lK6.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-DfS1ntiq.js.gz +0 -0
- package/dist/dashboard/assets/dialog-BK-NRr5u.js.gz +0 -0
- package/dist/dashboard/assets/drawer-QqPul6sC.js.gz +0 -0
- package/dist/dashboard/assets/entry-BMlYJVFj.js.gz +0 -0
- package/dist/dashboard/assets/entry-Dmx7gBiN.js +0 -1
- package/dist/dashboard/assets/entry-Dmx7gBiN.js.gz +0 -0
- package/dist/dashboard/assets/entry-vqGb8yVz.js +0 -4
- package/dist/dashboard/assets/entry-vqGb8yVz.js.gz +0 -0
- package/dist/dashboard/assets/formatters-DP-5E01-.js.gz +0 -0
- package/dist/dashboard/assets/index-D36vCZht.js.gz +0 -0
- package/dist/dashboard/assets/inline-CHJQwxLa.js.gz +0 -0
- package/dist/dashboard/assets/input-BlmlizVV.js.gz +0 -0
- package/dist/dashboard/assets/layout-Bz93I-yE.js.gz +0 -0
- package/dist/dashboard/assets/list-row-Ml16KCfu.js.gz +0 -0
- package/dist/dashboard/assets/live-7_QpnYGu.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-CuMDaTzT.js.gz +0 -0
- package/dist/dashboard/assets/numbers-CoqpaDMx.js.gz +0 -0
- package/dist/dashboard/assets/pagination-B5aOoweZ.js.gz +0 -0
- package/dist/dashboard/assets/query-keys-YSoQOUh6.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-C9Ssle9b.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-j7cXjgYX.js.gz +0 -0
- package/dist/dashboard/assets/state-DHmEnLa2.js.gz +0 -0
- package/dist/dashboard/assets/switch-DmZcyTIC.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/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/dist/dashboard/assets/{app-DRnQLhsc.js → app-B7kIWFm5.js} +0 -0
- /package/dist/dashboard/assets/{app-DRnQLhsc.js.gz → app-B7kIWFm5.js.gz} +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ProviderDispatchContext } from "../../provider-contracts";
|
|
2
2
|
import { createHash } from "node:crypto";
|
|
3
|
+
import { readFileSync } from "node:fs";
|
|
3
4
|
import { decodeJwtPayload } from "../../authentication/oauth-flow-store";
|
|
4
5
|
import { buddyAccountUid } from "./buddy-oauth-shared";
|
|
5
6
|
import type { CanonicalRequest } from "../../../protocol/canonical-model";
|
|
@@ -228,3 +229,72 @@ export function buddyAgentPurpose(
|
|
|
228
229
|
if (typeof fromRequest === "string" && fromRequest.trim().length > 0) return fromRequest.trim();
|
|
229
230
|
return undefined;
|
|
230
231
|
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Desktop risk token, sent only when the account actually has one.
|
|
235
|
+
*
|
|
236
|
+
* The account's own `auth_state` wins. When it carries none, a file the
|
|
237
|
+
* desktop client writes (`CARTETHYIA_DEVICE_TOKEN_FILE`, default
|
|
238
|
+
* `/app/data/device_token`) is read instead — cached for five minutes, and
|
|
239
|
+
* ignored when it is larger than 1 KB, because a token file that size is not
|
|
240
|
+
* a token. A missing file is the normal case and reads as "no token".
|
|
241
|
+
*/
|
|
242
|
+
const DEVICE_TOKEN_FILE_MAX_BYTES = 1024;
|
|
243
|
+
const DEVICE_TOKEN_FILE_TTL_MS = 5 * 60_000;
|
|
244
|
+
let deviceTokenFileCache: { readonly value: string | undefined; readonly readAt: number } | undefined;
|
|
245
|
+
|
|
246
|
+
export function readBuddyDeviceToken(context?: ProviderDispatchContext): string | undefined {
|
|
247
|
+
const state = context?.credential.auth_state;
|
|
248
|
+
const value = state?.["deviceToken"] ?? state?.["device_token"];
|
|
249
|
+
if (typeof value === "string" && value.trim().length > 0) return value.trim();
|
|
250
|
+
return readDeviceTokenFile();
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* The reference `X-Device-Token` pair, per the official desktop app.
|
|
255
|
+
*
|
|
256
|
+
* The desktop client always presents one of the
|
|
257
|
+
* two on chat traffic — a real token from the TuringShield SDK, or an
|
|
258
|
+
* `X-Device-Token-Error` when the SDK cannot produce one. It never omits both,
|
|
259
|
+
* and it sends the header on every realm (Intl and CN alike).
|
|
260
|
+
*
|
|
261
|
+
* The TuringShield SDK was a proprietary native addon shipped under
|
|
262
|
+
* `vendor/turing-sdk/`; it has been removed. The fallback path below is the
|
|
263
|
+
* captured token (auth_state / `CARTETHYIA_DEVICE_TOKEN_FILE`) and then the
|
|
264
|
+
* official failure state.
|
|
265
|
+
*
|
|
266
|
+
* - Legacy token (auth_state/file) → used when no SDK is available.
|
|
267
|
+
* - CLI identity never carries a device token (the CLI has no device).
|
|
268
|
+
*/
|
|
269
|
+
export async function buddyDeviceTokenHeaders(args: {
|
|
270
|
+
realm: "intl" | "cn";
|
|
271
|
+
context: ProviderDispatchContext | undefined;
|
|
272
|
+
cliIdentity: boolean | undefined;
|
|
273
|
+
}): Promise<Record<string, string>> {
|
|
274
|
+
const { context, cliIdentity } = args;
|
|
275
|
+
void args.realm; // the desktop client sends the token on both realms
|
|
276
|
+
if (resolveBuddyIdentity(context, cliIdentity) === "cli") return {};
|
|
277
|
+
const token = readBuddyDeviceToken(context);
|
|
278
|
+
if (token !== undefined) return { "x-device-token": token };
|
|
279
|
+
return { "x-device-token-error": "sdk_not_initialized" };
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
function readDeviceTokenFile(): string | undefined {
|
|
283
|
+
const now = Date.now();
|
|
284
|
+
if (deviceTokenFileCache !== undefined && now - deviceTokenFileCache.readAt < DEVICE_TOKEN_FILE_TTL_MS) {
|
|
285
|
+
return deviceTokenFileCache.value;
|
|
286
|
+
}
|
|
287
|
+
const path = process.env["CARTETHYIA_DEVICE_TOKEN_FILE"] ?? "/app/data/device_token";
|
|
288
|
+
let value: string | undefined;
|
|
289
|
+
try {
|
|
290
|
+
const raw = readFileSync(path);
|
|
291
|
+
if (raw.byteLength > 0 && raw.byteLength <= DEVICE_TOKEN_FILE_MAX_BYTES) {
|
|
292
|
+
const text = raw.toString("utf8").trim();
|
|
293
|
+
if (text.length > 0) value = text;
|
|
294
|
+
}
|
|
295
|
+
} catch {
|
|
296
|
+
value = undefined;
|
|
297
|
+
}
|
|
298
|
+
deviceTokenFileCache = { value, readAt: now };
|
|
299
|
+
return value;
|
|
300
|
+
}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Buddy-family media generation: image and video.
|
|
3
3
|
*
|
|
4
|
-
* CodeBuddy (intl
|
|
5
|
-
* request shaping lives here. Their image endpoint can differ by
|
|
4
|
+
* CodeBuddy (intl + CN) serves media through the same facade, so shared
|
|
5
|
+
* request shaping lives here. Their image endpoint can differ by realm;
|
|
6
6
|
* identity headers come from {@link codebuddyHeaders} keyed on the variant.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* path. The configured provider path selects the wire format.
|
|
8
|
+
* The image path is CodeBuddy's native `/images/generations` API. The
|
|
9
|
+
* configured provider path selects the wire format.
|
|
11
10
|
*
|
|
12
11
|
* - **Video** (`seedance-2.5`) is implemented as an async task: submission
|
|
13
12
|
* expects a task ID, then the adapter polls a sibling task URL until a clip
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The buddy-family device-login mechanism (`cb`, `cbcn
|
|
2
|
+
* The buddy-family device-login mechanism (`cb`, `cbcn`).
|
|
3
3
|
*
|
|
4
4
|
* All three complete device login against the same plugin auth endpoints: a
|
|
5
5
|
* state POST, a token poll that answers the pending code `11217` until the user
|
|
@@ -64,7 +64,7 @@ export function strictResponseCode(payload: unknown): number | undefined {
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
/**
|
|
67
|
-
* Reads the envelope `code` through `Number()`, which is how the
|
|
67
|
+
* Reads the envelope `code` through `Number()`, which is how the buddy
|
|
68
68
|
* gateway is read. Looser than `strictResponseCode` on a malformed payload: a
|
|
69
69
|
* `null` code coerces to `0`, i.e. success, and `true` to `1`. Kept verbatim
|
|
70
70
|
* rather than tightened because nothing here shows what that gateway sends for
|
|
@@ -2,7 +2,7 @@ import { asNumber as sharedAsNumber } from "../../../shared/coerce";
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Shared Tencent billing-meter parsing for the CodeBuddy family
|
|
5
|
-
* (`cb`, `cbcn
|
|
5
|
+
* (`cb`, `cbcn`).
|
|
6
6
|
*
|
|
7
7
|
* All three read the same endpoint shape — POST
|
|
8
8
|
* `{base}/v2/billing/meter/get-user-resource` answering
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Real credit deductions for the Tencent "buddy" family (`cb`, `cbcn
|
|
3
|
-
* `workbuddy`, `workbuddycn`).
|
|
4
|
-
*
|
|
2
|
+
* Real credit deductions for the Tencent "buddy" family (`cb`, `cbcn`). *
|
|
5
3
|
* Every provider in the family reads the same usage-detail endpoint —
|
|
6
4
|
* `POST {billingHost}/billing/meter/get-user-request-usage` — which answers the
|
|
7
5
|
* actual per-request deductions the billing meter recorded: when the request
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
// dynamic-import-ok: lazy per-realm capability map. Each buddy regional
|
|
2
|
-
// product (cb/cbcn
|
|
3
|
-
//
|
|
4
|
-
// drags the others into memory.
|
|
2
|
+
// product (cb/cbcn) imports its adapter + oauth + discovery on first use so a
|
|
3
|
+
// deployment that only serves one realm never drags the others into memory.
|
|
5
4
|
import type { ProviderModuleCapabilities } from "../../provider-capabilities";
|
|
6
5
|
import { oauthCapability, quotaCapability } from "../../provider-capabilities";
|
|
7
6
|
|
|
8
|
-
type BuddyProviderId = "cb" | "cbcn"
|
|
7
|
+
type BuddyProviderId = "cb" | "cbcn";
|
|
9
8
|
|
|
10
9
|
/**
|
|
11
|
-
* Lazy capability declarations for Buddy's
|
|
10
|
+
* Lazy capability declarations for Buddy's two independently identified
|
|
12
11
|
* regional products.
|
|
13
12
|
*/
|
|
14
13
|
export const BUDDY_PROVIDER_CAPABILITIES = {
|
|
@@ -48,40 +47,4 @@ export const BUDDY_PROVIDER_CAPABILITIES = {
|
|
|
48
47
|
"fetchCodeBuddyCnQuota",
|
|
49
48
|
),
|
|
50
49
|
},
|
|
51
|
-
workbuddy: {
|
|
52
|
-
loadAdapter: async () => (await import("./workbuddy/provider")).createWorkBuddyAdapter(),
|
|
53
|
-
loadModels: async () => (await import("./workbuddy/provider")).WORKBUDDY_MODELS,
|
|
54
|
-
loadModelDiscovery: async () => async ({ credential, fetcher }) =>
|
|
55
|
-
(await import("./workbuddy/provider")).discoverWorkBuddyModels({
|
|
56
|
-
credential,
|
|
57
|
-
...(fetcher === undefined ? {} : { fetcher }),
|
|
58
|
-
}),
|
|
59
|
-
loadAuthentication: oauthCapability(
|
|
60
|
-
() => import("./workbuddy/oauth"),
|
|
61
|
-
"workBuddyOAuthClient",
|
|
62
|
-
{ withRefresher: true },
|
|
63
|
-
),
|
|
64
|
-
loadQuotaCollector: quotaCapability(
|
|
65
|
-
() => import("./workbuddy/quota"),
|
|
66
|
-
"fetchWorkBuddyQuota",
|
|
67
|
-
),
|
|
68
|
-
},
|
|
69
|
-
workbuddycn: {
|
|
70
|
-
loadAdapter: async () => (await import("./workbuddy/cn-provider")).createWorkBuddyCnAdapter(),
|
|
71
|
-
loadModels: async () => (await import("./workbuddy/cn-provider")).WORKBUDDY_CN_MODELS,
|
|
72
|
-
loadModelDiscovery: async () => async ({ credential, fetcher }) =>
|
|
73
|
-
(await import("./workbuddy/cn-provider")).discoverWorkBuddyCnModels({
|
|
74
|
-
credential,
|
|
75
|
-
...(fetcher === undefined ? {} : { fetcher }),
|
|
76
|
-
}),
|
|
77
|
-
loadAuthentication: oauthCapability(
|
|
78
|
-
() => import("./workbuddy/cn-oauth"),
|
|
79
|
-
"workBuddyCnOAuthClient",
|
|
80
|
-
{ withRefresher: true },
|
|
81
|
-
),
|
|
82
|
-
loadQuotaCollector: quotaCapability(
|
|
83
|
-
() => import("./workbuddy/quota"),
|
|
84
|
-
"fetchWorkBuddyCnQuota",
|
|
85
|
-
),
|
|
86
|
-
},
|
|
87
50
|
} satisfies Readonly<Record<BuddyProviderId, ProviderModuleCapabilities>>;
|
|
@@ -24,7 +24,8 @@ export const CODEBUDDY_CN_RAW: readonly BuddyRawEntry[] = [
|
|
|
24
24
|
["kimi-k2.8-preview", "Kimi K2.8 Preview", true, true, 1_000_000, 64_000],
|
|
25
25
|
["kimi-k3.1-pro", "Kimi K3.1 Pro", true, true, 1_000_000, 32_000],
|
|
26
26
|
["hy3", "Hy3", true, true, 192_000, 64_000],
|
|
27
|
-
["hy4
|
|
27
|
+
["hy4", "Hy4", true, true, 960_000, 64_000],
|
|
28
|
+
["hy4free", "Hy4 Free", true, true, 960_000, 64_000],
|
|
28
29
|
["space-bunny", "Space Bunny", true, true, 1_000_000, 128_000],
|
|
29
30
|
["step-5-preview", "Step 5 Preview", true, true, 1_000_000, 64_000],
|
|
30
31
|
["deepseek-v4-pro", "DeepSeek V4 Pro", true, true, 1_000_000, 128_000],
|
|
@@ -20,7 +20,9 @@ import { CODEBUDDY_CN_RAW } from "./cn-catalog";
|
|
|
20
20
|
import { CODEBUDDY_SYSTEM_PROMPT } from "./provider";
|
|
21
21
|
import {
|
|
22
22
|
BUDDY_CN_IMAGE_MODEL_ID_SET,
|
|
23
|
+
BUDDY_CN_VIDEO_MODEL_ID_SET,
|
|
23
24
|
makeBuddyCnImageModels,
|
|
25
|
+
makeBuddyCnVideoModels,
|
|
24
26
|
makeBuddyModel,
|
|
25
27
|
} from "../buddy-catalog-shared";
|
|
26
28
|
import { BUDDY_CN_MODELS_PATH, fetchBuddyDirectoryModels } from "../buddy-discovery-shared";
|
|
@@ -115,11 +117,28 @@ export const CODEBUDDY_CN_IMAGE_MODELS: readonly ModelDefinition[] = makeBuddyCn
|
|
|
115
117
|
"/images/generations",
|
|
116
118
|
);
|
|
117
119
|
|
|
120
|
+
/**
|
|
121
|
+
* CN's video-generation rows (`kling-video-v3`, `minimax-video-h3`).
|
|
122
|
+
*
|
|
123
|
+
* Reached through the native video route like the intl rows. The video ids
|
|
124
|
+
* are filtered out of the chat pass so one id never appears under two service
|
|
125
|
+
* kinds.
|
|
126
|
+
*/
|
|
127
|
+
export const CODEBUDDY_CN_VIDEO_MODELS: readonly ModelDefinition[] = makeBuddyCnVideoModels(
|
|
128
|
+
CODEBUDDY_CN_PROVIDER_ID,
|
|
129
|
+
"/videos/generations",
|
|
130
|
+
);
|
|
131
|
+
|
|
118
132
|
export const CODEBUDDY_CN_MODELS: readonly ModelDefinition[] = [
|
|
119
|
-
...CODEBUDDY_CN_RAW.filter(
|
|
133
|
+
...CODEBUDDY_CN_RAW.filter(
|
|
134
|
+
(entry) =>
|
|
135
|
+
!BUDDY_CN_IMAGE_MODEL_ID_SET.has(entry[0]) &&
|
|
136
|
+
!BUDDY_CN_VIDEO_MODEL_ID_SET.has(entry[0]),
|
|
137
|
+
).map((entry) =>
|
|
120
138
|
makeBuddyModel(entry, CODEBUDDY_CN_PROVIDER_ID, undefined, "cn"),
|
|
121
139
|
),
|
|
122
140
|
...CODEBUDDY_CN_IMAGE_MODELS,
|
|
141
|
+
...CODEBUDDY_CN_VIDEO_MODELS,
|
|
123
142
|
];
|
|
124
143
|
|
|
125
144
|
/** Reads the CodeBuddy CN console directory (same envelope as the intl site). */
|
|
@@ -84,7 +84,7 @@ function codeBuddyIntlPrePayload(
|
|
|
84
84
|
void request;
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
// Model catalog — shared CodeBuddy
|
|
87
|
+
// Model catalog — shared CodeBuddy international roster
|
|
88
88
|
|
|
89
89
|
const CODEBUDDY_INTL_RAW: readonly BuddyRawEntry[] = BUDDY_SHARED_RAW;
|
|
90
90
|
|
|
@@ -95,7 +95,7 @@ const CODEBUDDY_INTL_RAW: readonly BuddyRawEntry[] = BUDDY_SHARED_RAW;
|
|
|
95
95
|
* why they were unreachable as image models: nothing downstream could tell a
|
|
96
96
|
* chat model from one that returns an image, so `mediaGeneration` was false for
|
|
97
97
|
* every catalog row. The roster and the declared capabilities come from
|
|
98
|
-
* {@link makeBuddyImageModels} so cb and
|
|
98
|
+
* {@link makeBuddyImageModels} so cb and cbcn cannot drift.
|
|
99
99
|
*/
|
|
100
100
|
export const CODEBUDDY_IMAGE_MODELS: readonly ModelDefinition[] = makeBuddyImageModels(
|
|
101
101
|
"cb",
|
|
@@ -13,8 +13,7 @@ import {
|
|
|
13
13
|
resolveBuddyIdentity,
|
|
14
14
|
} from "../buddy-identity";
|
|
15
15
|
import { buildCodeBuddyUserAgent, getCodeBuddyCnVersion, getCodeBuddyVersion } from "../../../operations/client-versions";
|
|
16
|
-
import { buddyDeviceTokenHeaders } from "../
|
|
17
|
-
import { CODEBUDDY_TURING_CONFIG } from "../turing-device-token";
|
|
16
|
+
import { buddyDeviceTokenHeaders } from "../buddy-identity";
|
|
18
17
|
import { buddyCliHeaders, buddyCliTraceHeaders } from "../buddy-cli-headers";
|
|
19
18
|
|
|
20
19
|
/** Client identity variant behind the per-request CodeBuddy headers. */
|
|
@@ -105,25 +104,22 @@ export async function codebuddyHeaders(
|
|
|
105
104
|
// The reference does not invent `conversation`; it sends the purpose only
|
|
106
105
|
// when one exists.
|
|
107
106
|
...(purpose === undefined ? {} : { "X-Agent-Purpose": purpose }),
|
|
108
|
-
//
|
|
109
|
-
//
|
|
110
|
-
// missing conversation id.
|
|
107
|
+
// The upstream's channel check reads the turn-level aggregation key, and a
|
|
108
|
+
// chat request without it is refused for a missing conversation id.
|
|
111
109
|
...conversation,
|
|
112
110
|
// Per-account device binding (qimei36) — distinct device per account.
|
|
113
111
|
...(() => {
|
|
114
112
|
const binding = resolveBuddyDeviceBinding(context);
|
|
115
113
|
return binding === undefined ? {} : { "X-Device-Id-List": JSON.stringify({ qimei36: binding }) };
|
|
116
114
|
})(),
|
|
117
|
-
// The desktop client sends the device-token pair on both realms.
|
|
118
|
-
// token
|
|
119
|
-
// placeholder.
|
|
120
|
-
// distinct product identity). (CLI branch above already returned without
|
|
115
|
+
// The desktop client sends the device-token pair on both realms. Captured
|
|
116
|
+
// token (auth_state / device-token file) when present, otherwise the
|
|
117
|
+
// official failure placeholder. (CLI branch above already returned without
|
|
121
118
|
// device headers.)
|
|
122
119
|
...(await buddyDeviceTokenHeaders({
|
|
123
120
|
realm: identity === "IDE" ? "intl" : "cn",
|
|
124
121
|
context,
|
|
125
122
|
cliIdentity,
|
|
126
|
-
turingConfig: CODEBUDDY_TURING_CONFIG,
|
|
127
123
|
})),
|
|
128
124
|
};
|
|
129
125
|
}
|
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
FALLBACK_CLIENT_VERSION,
|
|
20
20
|
SERVER_CONFIG_PATH,
|
|
21
21
|
normalizeAgentRunOrigin,
|
|
22
|
+
resolveCursorTimezone,
|
|
22
23
|
} from "./cursor-shared";
|
|
23
24
|
import { createCursorChecksumHeader, resolveCursorDeviceIds } from "./cursor-identity";
|
|
24
25
|
|
|
@@ -66,6 +67,7 @@ async function unaryHeaders(
|
|
|
66
67
|
"x-cursor-checksum": createCursorChecksumHeader(machineId, macMachineId),
|
|
67
68
|
"x-ghost-mode": "true",
|
|
68
69
|
"x-request-id": crypto.randomUUID(),
|
|
70
|
+
...(resolveCursorTimezone() === "" ? {} : { "x-cursor-timezone": resolveCursorTimezone() }),
|
|
69
71
|
};
|
|
70
72
|
}
|
|
71
73
|
|