cartethyia 2.7.3 → 2.7.5
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 +2 -0
- package/README.md +17 -5
- package/dist/dashboard/assets/{BannedPage-2TJD37Hb.js → BannedPage-Cj15GsMp.js} +1 -1
- package/dist/dashboard/assets/BannedPage-Cj15GsMp.js.gz +0 -0
- package/dist/dashboard/assets/ClaimGiftsButton-D83pBJ6J.js +1 -0
- package/dist/dashboard/assets/ClaimGiftsButton-D83pBJ6J.js.gz +0 -0
- package/dist/dashboard/assets/{CliToolDetailPage-xefJNRmJ.js → CliToolDetailPage-DZKmVuJN.js} +1 -1
- package/dist/dashboard/assets/CliToolDetailPage-DZKmVuJN.js.gz +0 -0
- package/dist/dashboard/assets/{CliToolsPage-Rj9iHQ3F.js → CliToolsPage-BIccZmeL.js} +1 -1
- package/dist/dashboard/assets/CliToolsPage-BIccZmeL.js.gz +0 -0
- package/dist/dashboard/assets/CombosPage-DEEKkYD-.js +1 -0
- package/dist/dashboard/assets/CombosPage-DEEKkYD-.js.gz +0 -0
- package/dist/dashboard/assets/ConsoleLogPage-D5rol2j2.js +1 -0
- package/dist/dashboard/assets/ConsoleLogPage-D5rol2j2.js.gz +0 -0
- package/dist/dashboard/assets/CustomizationPage-BKj_r0rp.js +1 -0
- package/dist/dashboard/assets/CustomizationPage-BKj_r0rp.js.gz +0 -0
- package/dist/dashboard/assets/InjectSystemPromptPanel-B5nZvmf0.js +656 -0
- package/dist/dashboard/assets/InjectSystemPromptPanel-B5nZvmf0.js.gz +0 -0
- package/dist/dashboard/assets/{LoginPage-C4w7vea-.js → LoginPage-DkXb6dx-.js} +1 -1
- package/dist/dashboard/assets/LoginPage-DkXb6dx-.js.gz +0 -0
- package/dist/dashboard/assets/{ModelPicker-BtPcAfot.js → ModelPicker-DnQPSIA8.js} +1 -1
- package/dist/dashboard/assets/ModelPicker-DnQPSIA8.js.gz +0 -0
- package/dist/dashboard/assets/OverviewPage-Ci2wQKUz.js +1 -0
- package/dist/dashboard/assets/OverviewPage-Ci2wQKUz.js.gz +0 -0
- package/dist/dashboard/assets/ProviderDetailPage-odlgYrOg.js +5 -0
- package/dist/dashboard/assets/ProviderDetailPage-odlgYrOg.js.gz +0 -0
- package/dist/dashboard/assets/ProviderIcon-EfeloBn4.js +1 -0
- package/dist/dashboard/assets/ProviderIcon-EfeloBn4.js.gz +0 -0
- package/dist/dashboard/assets/ProvidersPage-CqFBQEB8.js +1 -0
- package/dist/dashboard/assets/ProvidersPage-CqFBQEB8.js.gz +0 -0
- package/dist/dashboard/assets/ProxyPage-5SnUSy3j.js +9 -0
- package/dist/dashboard/assets/ProxyPage-5SnUSy3j.js.gz +0 -0
- package/dist/dashboard/assets/QuotaPage-CmnMDzhP.js +1 -0
- package/dist/dashboard/assets/QuotaPage-CmnMDzhP.js.gz +0 -0
- package/dist/dashboard/assets/SettingsPage-BJtRZ4qD.js +1 -0
- package/dist/dashboard/assets/SettingsPage-BJtRZ4qD.js.gz +0 -0
- package/dist/dashboard/assets/{SetupPage-BQS0Rx_u.js → SetupPage-WTa0sktC.js} +1 -1
- package/dist/dashboard/assets/SetupPage-WTa0sktC.js.gz +0 -0
- package/dist/dashboard/assets/{StudioPage-TP7voAQ0.js → StudioPage-BfAb5-o_.js} +3 -3
- package/dist/dashboard/assets/StudioPage-BfAb5-o_.js.gz +0 -0
- package/dist/dashboard/assets/UsagePage-BNzeZ2Vk.js +56 -0
- package/dist/dashboard/assets/UsagePage-BNzeZ2Vk.js.gz +0 -0
- package/dist/dashboard/assets/api-keys-l29JROPv.js +1 -0
- package/dist/dashboard/assets/api-keys-l29JROPv.js.gz +0 -0
- package/dist/dashboard/assets/app--PJWq8_C.css +2 -0
- package/dist/dashboard/assets/app--PJWq8_C.css.gz +0 -0
- package/dist/dashboard/assets/{assert-C0YYuZJ4.js → assert-C0K-c4eo.js} +1 -1
- package/dist/dashboard/assets/assert-C0K-c4eo.js.gz +0 -0
- package/dist/dashboard/assets/{badge-B_DMpMJN.js → badge-DfbhQU4k.js} +1 -1
- package/dist/dashboard/assets/badge-DfbhQU4k.js.gz +0 -0
- package/dist/dashboard/assets/{banner-DMrMPmth.js → banner-BllT4LcF.js} +1 -1
- package/dist/dashboard/assets/banner-BllT4LcF.js.gz +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/{card-Be5Uzamx.js → card-CtkX66Wd.js} +1 -1
- package/dist/dashboard/assets/card-CtkX66Wd.js.gz +0 -0
- package/dist/dashboard/assets/chevron-left-Bf6CaTSJ.js +1 -0
- package/dist/dashboard/assets/chevron-left-Bf6CaTSJ.js.gz +0 -0
- package/dist/dashboard/assets/{cli-tools-muFRphDu.js → cli-tools-CQXVMn4P.js} +1 -1
- package/dist/dashboard/assets/cli-tools-CQXVMn4P.js.gz +0 -0
- package/dist/dashboard/assets/{clipboard-button-DOfrVmsi.js → clipboard-button-BQqBQd2n.js} +1 -1
- package/dist/dashboard/assets/clipboard-button-BQqBQd2n.js.gz +0 -0
- package/dist/dashboard/assets/{dialog-C9omdjQt.js → dialog-BEK7KP0H.js} +1 -1
- package/dist/dashboard/assets/dialog-BEK7KP0H.js.gz +0 -0
- package/dist/dashboard/assets/{drawer-Bm8WKaGY.js → drawer-BrTEZ8zu.js} +1 -1
- package/dist/dashboard/assets/drawer-BrTEZ8zu.js.gz +0 -0
- package/dist/dashboard/assets/entry-CHWxbS56.js +1 -0
- package/dist/dashboard/assets/entry-CHWxbS56.js.gz +0 -0
- package/dist/dashboard/assets/{entry-q5HwZ8nN.js → entry-EBHJ3DrE.js} +1 -1
- package/dist/dashboard/assets/entry-EBHJ3DrE.js.gz +0 -0
- package/dist/dashboard/assets/entry-LCS85hiq.js +4 -0
- package/dist/dashboard/assets/entry-LCS85hiq.js.gz +0 -0
- package/dist/dashboard/assets/{formatters-BTScrQpe.js → formatters-BAACA727.js} +1 -1
- package/dist/dashboard/assets/formatters-BAACA727.js.gz +0 -0
- package/dist/dashboard/assets/{github-badge-Orjuzemr.js → github-badge-YSCE4UC2.js} +1 -1
- package/dist/dashboard/assets/github-badge-YSCE4UC2.js.gz +0 -0
- package/dist/dashboard/assets/{index-cPrX5vn6.js → index-FQlj0HUT.js} +2 -2
- package/dist/dashboard/assets/index-FQlj0HUT.js.gz +0 -0
- package/dist/dashboard/assets/{inline-Dvux8w-0.js → inline-C4gU5iOL.js} +1 -1
- package/dist/dashboard/assets/inline-C4gU5iOL.js.gz +0 -0
- package/dist/dashboard/assets/{input-CU1Rgf3p.js → input-BHHX_Tmm.js} +1 -1
- package/dist/dashboard/assets/input-BHHX_Tmm.js.gz +0 -0
- package/dist/dashboard/assets/{layout-C_7A6H55.js → layout-CajrYUnD.js} +1 -1
- package/dist/dashboard/assets/{layout-C_7A6H55.js.gz → layout-CajrYUnD.js.gz} +0 -0
- package/dist/dashboard/assets/{list-row-CzFvogbj.js → list-row-Bx2I7XUe.js} +1 -1
- package/dist/dashboard/assets/list-row-Bx2I7XUe.js.gz +0 -0
- package/dist/dashboard/assets/live-DNNqRbj2.js +1 -0
- package/dist/dashboard/assets/live-DNNqRbj2.js.gz +0 -0
- package/dist/dashboard/assets/minimize-2-BTmMTK4o.js +1 -0
- package/dist/dashboard/assets/minimize-2-BTmMTK4o.js.gz +0 -0
- package/dist/dashboard/assets/{mutation-JJGQm8TD.js → mutation-Rr0TIvcj.js} +1 -1
- package/dist/dashboard/assets/mutation-Rr0TIvcj.js.gz +0 -0
- package/dist/dashboard/assets/network-C5UBACrJ.js +1 -0
- package/dist/dashboard/assets/network-C5UBACrJ.js.gz +0 -0
- package/dist/dashboard/assets/numbers-CUWAZK4J.js +2 -0
- package/dist/dashboard/assets/numbers-CUWAZK4J.js.gz +0 -0
- package/dist/dashboard/assets/pagination-Xsi9Qx04.js +1 -0
- package/dist/dashboard/assets/pagination-Xsi9Qx04.js.gz +0 -0
- package/dist/dashboard/assets/{query-keys-CLaNz8Xz.js → query-keys-BloKtaXJ.js} +1 -1
- package/dist/dashboard/assets/query-keys-BloKtaXJ.js.gz +0 -0
- package/dist/dashboard/assets/quota-DvQbD_sr.js +1 -0
- package/dist/dashboard/assets/quota-DvQbD_sr.js.gz +0 -0
- package/dist/dashboard/assets/{routing-BEH32QOC.js → routing-in0f_IfK.js} +1 -1
- package/dist/dashboard/assets/routing-in0f_IfK.js.gz +0 -0
- package/dist/dashboard/assets/{select-B3iTetHN.js → select-BLULNqTp.js} +2 -2
- package/dist/dashboard/assets/select-BLULNqTp.js.gz +0 -0
- package/dist/dashboard/assets/settings-CcGczj6I.js +1 -0
- package/dist/dashboard/assets/settings-CcGczj6I.js.gz +0 -0
- package/dist/dashboard/assets/shield-BMQNxORh.js +1 -0
- package/dist/dashboard/assets/shield-BMQNxORh.js.gz +0 -0
- package/dist/dashboard/assets/{stack-KrOrm7JZ.js → stack-D2lIR0tg.js} +1 -1
- package/dist/dashboard/assets/stack-D2lIR0tg.js.gz +0 -0
- package/dist/dashboard/assets/{state-DLS7IDMy.js → state-DTARjfiW.js} +1 -1
- package/dist/dashboard/assets/state-DTARjfiW.js.gz +0 -0
- package/dist/dashboard/assets/{switch-42ItvbAs.js → switch-c0oPSnqW.js} +1 -1
- package/dist/dashboard/assets/switch-c0oPSnqW.js.gz +0 -0
- package/dist/dashboard/assets/{useMutation-Dmnfh1Ue.js → useMutation-m8WGNPrz.js} +1 -1
- package/dist/dashboard/assets/useMutation-m8WGNPrz.js.gz +0 -0
- package/dist/dashboard/console-backgrounds.jpg +0 -0
- package/dist/dashboard/console-backgrounds_initial.jpg +0 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/dashboard/index.html.gz +0 -0
- package/dist/dashboard/precompressed-assets.json +59 -57
- package/migrations/full-postgres/0027_qoder_identity_genuine_seed.sql +9 -10
- package/migrations/full-postgres/0032_add_provider_pool_accounts.sql +53 -0
- package/migrations/full-postgres/0033_add_api_key_ban.sql +9 -0
- package/migrations/full-postgres/0034_add_api_key_ban_until.sql +7 -0
- package/migrations/full-postgres/0035_align_pool_account_status_enum.sql +21 -0
- package/migrations/full-postgres/0036_system_prompt_presets_refs.sql +10 -0
- package/migrations/full-postgres/0037_share_concurrency_scope.sql +3 -0
- package/migrations/full-postgres/0038_add_accounts_quota_snapshot.sql +7 -0
- package/migrations/full-postgres/0039_add_telemetry_provider_model_indexes.sql +13 -0
- package/migrations/full-postgres/0040_add_models_dialect.sql +3 -0
- package/migrations/full-postgres/0041_add_daily_checkin_ledger_account_fk.sql +7 -0
- package/migrations/lite-sqlite3/0027_qoder_identity_genuine_seed.sql +9 -10
- package/migrations/lite-sqlite3/0032_add_provider_pool_accounts.sql +44 -0
- package/migrations/lite-sqlite3/0033_add_api_key_ban.sql +8 -0
- package/migrations/lite-sqlite3/0034_add_api_key_ban_until.sql +5 -0
- package/migrations/lite-sqlite3/0035_align_pool_account_status_enum.sql +6 -0
- package/migrations/lite-sqlite3/0036_system_prompt_presets_refs.sql +14 -0
- package/migrations/lite-sqlite3/0037_share_concurrency_scope.sql +3 -0
- package/migrations/lite-sqlite3/0038_add_accounts_quota_snapshot.sql +4 -0
- package/migrations/lite-sqlite3/0039_add_telemetry_provider_model_indexes.sql +6 -0
- package/migrations/lite-sqlite3/0040_add_models_dialect.sql +3 -0
- package/migrations/lite-sqlite3/0041_add_daily_checkin_ledger_account_fk.sql +26 -0
- package/package.json +4 -5
- package/scripts/cli/update.ts +15 -41
- package/src/boot/app.ts +67 -10
- package/src/boot/dependencies.ts +786 -732
- package/src/boot/lifecycle.ts +11 -12
- package/src/config/cooldowns.ts +34 -55
- package/src/config/network.ts +8 -4
- package/src/config/package-paths.ts +1 -1
- package/src/config/providers.ts +13 -14
- package/src/config/resources.ts +0 -5
- package/src/config/runtime.ts +2 -5
- package/src/config/spec.ts +26 -6
- package/src/console/api-keys/ban-constants.ts +38 -0
- package/src/console/api-keys/contracts.ts +92 -31
- package/src/console/api-keys/routes.ts +131 -6
- package/src/console/audit/routes.ts +3 -3
- package/src/console/auth/access.ts +4 -4
- package/src/console/auth/account-reset.ts +5 -5
- package/src/console/auth/audit-recorder.ts +1 -1
- package/src/console/auth/lockout.ts +7 -3
- package/src/console/auth/row-coercion.ts +57 -12
- package/src/console/auth/session-resolver.ts +1 -1
- package/src/console/auth/session-service.ts +8 -2
- package/src/console/auth/session.ts +40 -34
- package/src/console/auth/setup-service.ts +4 -3
- package/src/console/auth/user-store.ts +1 -1
- package/src/console/backup/9router-map.ts +0 -3
- package/src/console/backup/contracts.ts +11 -9
- package/src/console/backup/export-endpoint.ts +11 -12
- package/src/console/backup/nine-router.ts +1 -7
- package/src/console/backup/routes.ts +32 -36
- package/src/console/backup/service.ts +468 -468
- package/src/console/backup/store.ts +47 -29
- package/src/console/backup/validate.ts +11 -1
- package/src/console/cli-tools/contracts.ts +7 -7
- package/src/console/cli-tools/injectors/cline.ts +110 -110
- package/src/console/cli-tools/injectors/codex.ts +181 -181
- package/src/console/cli-tools/injectors/copilot.ts +108 -108
- package/src/console/cli-tools/injectors/driver.ts +247 -247
- package/src/console/cli-tools/injectors/jcode.ts +115 -115
- package/src/console/cli-tools/injectors/openclaw.ts +161 -161
- package/src/console/cli-tools/injectors/opencode.ts +153 -153
- package/src/console/cli-tools/routes.ts +4 -4
- package/src/console/cli-tools/service.ts +1 -1
- package/src/console/cli-tools/store.ts +2 -2
- package/src/console/console-router-guards.ts +2 -2
- package/src/console/console-router.ts +36 -4
- package/src/console/dashboard-assets.ts +9 -9
- package/src/console/data-management/routes.ts +3 -3
- package/src/console/domain-registration.ts +18 -4
- package/src/console/inferhub/client.ts +0 -7
- package/src/console/inferhub/key-store.ts +1 -1
- package/src/console/inferhub/normalize.ts +2 -2
- package/src/console/inferhub/routes.ts +1 -1
- package/src/console/inferhub/types.ts +1 -1
- package/src/console/observability/contracts.ts +5 -1
- package/src/console/observability/live.ts +34 -21
- package/src/console/observability/logs.ts +4 -4
- package/src/console/observability/performance.ts +3 -3
- package/src/console/observability/routes.ts +3 -3
- package/src/console/observability/sse.ts +62 -8
- package/src/console/observability/store.ts +36 -20
- package/src/console/providers/catalog/catalog-projections.ts +1 -1
- package/src/console/providers/catalog/contracts.ts +82 -22
- package/src/console/providers/catalog/model-operations.ts +1 -1
- package/src/console/providers/catalog/provider-operations.ts +110 -17
- package/src/console/providers/catalog/public-model-store.ts +0 -0
- package/src/console/providers/catalog/routes.ts +30 -6
- package/src/console/providers/catalog/store-helpers.ts +349 -326
- package/src/console/providers/catalog/store.ts +1662 -1292
- package/src/console/providers/detail/routes.ts +4 -4
- package/src/console/providers/oauth/callback-listener.ts +100 -18
- package/src/console/providers/oauth/routes.ts +95 -16
- package/src/console/quota/account-quota-global.ts +41 -3
- package/src/console/quota/account-quota-shared.ts +10 -3
- package/src/console/quota/account-quota-tenant.ts +285 -67
- package/src/console/quota/account-test-egress.ts +4 -4
- package/src/console/quota/daily-growth-job.ts +308 -0
- package/src/console/quota/native-identity.ts +2 -2
- package/src/console/quota/quota-view.ts +1 -1
- package/src/console/remote-support/routes.ts +1 -1
- package/src/console/remote-support/service.ts +2 -2
- package/src/console/routing/model/contracts.ts +1 -1
- package/src/console/routing/model/routes.ts +3 -3
- package/src/console/routing/pools/contracts.ts +13 -10
- package/src/console/routing/pools/import-parse.ts +3 -3
- package/src/console/routing/pools/operations.ts +14 -7
- package/src/console/routing/pools/probe-verdict.ts +8 -3
- package/src/console/routing/pools/relay-deploy.ts +12 -12
- package/src/console/routing/pools/routes.ts +3 -3
- package/src/console/routing/pools/store.ts +21 -1
- package/src/console/settings/contracts.ts +29 -2
- package/src/console/settings/routes.ts +3 -3
- package/src/console/settings/store.ts +20 -0
- package/src/console/share/share-router.ts +112 -44
- package/src/console/share/share-stats.ts +109 -39
- package/src/console/share/share-usage.ts +1 -1
- package/src/console/shared/errors.ts +2 -2
- package/src/console/shared/object.ts +18 -0
- package/src/console/shared/read-through-cache.ts +42 -6
- package/src/console/shared/transaction.ts +14 -0
- package/src/console/system-prompt/contracts.ts +89 -12
- package/src/console/system-prompt/routes.ts +98 -45
- package/src/console/updates/apply-update.ts +244 -0
- package/src/console/updates/routes.ts +256 -98
- package/src/main.ts +11 -5
- package/src/network/http2-bidi.ts +1 -1
- package/src/network/ip-utils.ts +298 -0
- package/src/network/outbound-fetch.ts +76 -5
- package/src/network/pool/agent.ts +7 -6
- package/src/network/pool/byte-accounting.ts +1 -1
- package/src/network/pool/resolver.ts +55 -51
- package/src/network/pool/selector.ts +150 -136
- package/src/network/pool-cooldown-store.ts +71 -16
- package/src/network/pool-health-machine.ts +22 -2
- package/src/network/rate-limit-verdict.ts +68 -0
- package/src/network/retry.ts +1 -1
- package/src/network/ssrf.ts +24 -75
- package/src/observability/event-log.ts +2 -2
- package/src/observability/event-query.ts +286 -214
- package/src/observability/log-sanitize.ts +1 -1
- package/src/observability/metrics.ts +4 -4
- package/src/observability/payload-capture.ts +6 -5
- package/src/observability/payload-store.ts +1 -1
- package/src/observability/runtime-metrics.ts +1 -1
- package/src/observability/telemetry-buffer.ts +12 -3
- package/src/observability/telemetry-reconciliation.ts +3 -3
- package/src/observability/telemetry-status.ts +1 -1
- package/src/observability/token-speed.ts +1 -1
- package/src/persistence/connection-url.ts +1 -1
- package/src/persistence/db-handle.ts +1 -1
- package/src/persistence/db-pg.ts +2 -2
- package/src/persistence/db-sqlite.ts +10 -5
- package/src/persistence/dialect.ts +5 -1
- package/src/persistence/readiness.ts +19 -7
- package/src/persistence/redis.ts +1 -1
- package/src/persistence/schema.ts +177 -45
- package/src/persistence/shared-cache.ts +2 -2
- package/src/persistence/sort-order.ts +1 -1
- package/src/persistence/stores/api-key-store.ts +109 -4
- package/src/persistence/stores/share-store.ts +20 -8
- package/src/persistence/stores/telemetry-store.ts +1 -1
- package/src/persistence/system-prompt-store.ts +63 -18
- package/src/persistence/tenant-preferences.ts +1 -1
- package/src/persistence/ttl-cache.ts +3 -3
- package/src/persistence/usage-flush.ts +7 -2
- package/src/protocol/canonical-model.ts +1 -1
- package/src/protocol/codecs.ts +12 -16
- package/src/protocol/dsml.ts +3 -49
- package/src/protocol/gateway-error.ts +6 -3
- package/src/protocol/image-clamp.ts +2 -2
- package/src/protocol/image-generation.ts +2 -2
- package/src/protocol/reasoning-text.ts +1 -1
- package/src/protocol/reasoning.ts +7 -52
- package/src/protocol/registry.ts +50 -15
- package/src/protocol/request/chat.ts +46 -19
- package/src/protocol/request/codex.ts +1 -1
- package/src/protocol/request/messages.ts +46 -14
- package/src/protocol/request/responses.ts +19 -10
- package/src/protocol/response/chat.ts +27 -12
- package/src/protocol/response/codex.ts +2 -2
- package/src/protocol/response/gemini.ts +1 -1
- package/src/protocol/response/messages.ts +6 -6
- package/src/protocol/response/omp-tool-call-markup.ts +1 -1
- package/src/protocol/response/responses.ts +3 -3
- package/src/protocol/sse-decoder.ts +64 -4
- package/src/protocol/stop-reason.ts +2 -2
- package/src/protocol/think-split.ts +347 -0
- package/src/protocol/translation/attachment-integrity.ts +3 -3
- package/src/protocol/translation/cache-controls.ts +8 -20
- package/src/protocol/translation/capabilities.ts +8 -8
- package/src/protocol/translation/dialect/deepseek.ts +10 -0
- package/src/protocol/translation/dialect/inband.ts +39 -0
- package/src/protocol/translation/dialect/model-thinking.ts +89 -0
- package/src/protocol/translation/dialect/qwen.ts +114 -0
- package/src/protocol/translation/dialect/resolver.ts +83 -0
- package/src/protocol/translation/dialect/rules.ts +93 -0
- package/src/protocol/translation/dialect/thinking-ladder.ts +245 -0
- package/src/protocol/translation/dialect/types.ts +58 -0
- package/src/protocol/translation/quirks.ts +18 -4
- package/src/protocol/translation/thinking.ts +12 -252
- package/src/protocol/translation/tool-id.ts +3 -3
- package/src/protocol/translation/tool-repair.ts +1 -1
- package/src/protocol/upstream/post-json.ts +6 -1
- package/src/protocol/upstream/send-claude-messages.ts +3 -3
- package/src/providers/adapters/base-adapter.ts +1 -1
- package/src/providers/adapters/compatible-adapter.ts +44 -5
- package/src/providers/authentication/jwt-validator.ts +0 -5
- package/src/providers/authentication/oauth-client.ts +254 -253
- package/src/providers/authentication/oauth-flow-store.ts +42 -7
- package/src/providers/authentication/oauth-refresh-service.ts +2 -2
- package/src/providers/bundled-discovery-providers.ts +6 -30
- package/src/providers/configured-openai-providers.ts +82 -97
- package/src/providers/configured-provider.ts +1 -1
- package/src/providers/default-registry.ts +23 -35
- package/src/providers/discovery/catalog/catalog-format.ts +13 -2
- package/src/providers/discovery/discovery-types.ts +0 -1
- package/src/providers/discovery/openai-model-discovery.ts +2 -2
- package/src/providers/discovery/probe-phases.ts +50 -15
- package/src/providers/discovery/probing-service.ts +18 -20
- package/src/providers/integrations/agentrouter/agentrouter.ts +14 -5
- package/src/providers/integrations/alibabacp/alibabacp.ts +2 -2
- package/src/providers/integrations/anthropic.ts +4 -11
- package/src/providers/integrations/antigravity/antigravity-oauth.ts +0 -1
- package/src/providers/integrations/antigravity/antigravity-protocol.ts +0 -14
- package/src/providers/integrations/antigravity/antigravity.ts +15 -26
- package/src/providers/integrations/buddy/buddy-catalog-shared.ts +2 -2
- package/src/providers/integrations/buddy/buddy-chat-shared.ts +20 -4
- package/src/providers/integrations/buddy/buddy-cli-headers.ts +19 -52
- package/src/providers/integrations/buddy/buddy-discovery-shared.ts +37 -6
- package/src/providers/integrations/buddy/buddy-identity.ts +108 -1
- package/src/providers/integrations/buddy/buddy-media.ts +16 -16
- package/src/providers/integrations/buddy/buddy-oauth-shared.ts +1 -1
- package/src/providers/integrations/buddy/codebuddy/cn-provider.ts +1 -2
- package/src/providers/integrations/buddy/codebuddy/provider.ts +5 -16
- package/src/providers/integrations/buddy/codebuddy/shared.ts +30 -9
- package/src/providers/integrations/buddy/workbuddy/provider.ts +6 -10
- package/src/providers/integrations/buddy/workbuddy/shared.ts +21 -3
- package/src/providers/integrations/claude/claude-betas.ts +1 -1
- package/src/providers/integrations/claude/claude-cch.ts +148 -148
- package/src/providers/integrations/claude/claude-credentials.ts +1 -1
- package/src/providers/integrations/claude/claude-slow-lane-retry.ts +1 -1
- package/src/providers/integrations/claude/claude.ts +3 -10
- package/src/providers/integrations/claude/fallback-credit.ts +3 -7
- package/src/providers/integrations/cline/cline.ts +2 -2
- package/src/providers/integrations/cloudflareai/cloudflareai.ts +4 -7
- package/src/providers/integrations/codex/codex-device-code.ts +101 -101
- package/src/providers/integrations/codex/codex-errors.ts +1 -1
- package/src/providers/integrations/codex/codex-oauth.ts +0 -1
- package/src/providers/integrations/codex/codex.ts +14 -15
- package/src/providers/integrations/commandcode/commandcode.ts +76 -116
- package/src/providers/integrations/commandcode/quota.ts +132 -48
- package/src/providers/integrations/cursor/cursor-http2.ts +11 -14
- package/src/providers/integrations/cursor/cursor-quota.ts +2 -6
- package/src/providers/integrations/cursor/cursor-request.ts +0 -87
- package/src/providers/integrations/cursor/cursor-shared.ts +0 -4
- package/src/providers/integrations/cursor/cursor.ts +53 -20
- package/src/providers/integrations/cursor/protocol/framing.ts +0 -56
- package/src/providers/integrations/cursor/protocol/messages.ts +0 -96
- package/src/providers/integrations/factory/factory.ts +13 -13
- package/src/providers/integrations/gemini.ts +11 -11
- package/src/providers/integrations/github/github-discovery.ts +55 -10
- package/src/providers/integrations/github/github-oauth.ts +6 -5
- package/src/providers/integrations/github/github.ts +47 -20
- package/src/providers/integrations/grok/grok-oauth.ts +261 -261
- package/src/providers/integrations/grok/grok-quota-frame.ts +1 -1
- package/src/providers/integrations/grok/grok-quota.ts +16 -7
- package/src/providers/integrations/grok/grok-ratelimit-store.ts +0 -5
- package/src/providers/integrations/grok/grok-ratelimit.ts +3 -0
- package/src/providers/integrations/grok/grok.ts +88 -42
- package/src/providers/integrations/inferhub.ts +4 -11
- package/src/providers/integrations/kilo/kilo-oauth.ts +1 -1
- package/src/providers/integrations/kimi/kimi.ts +4 -11
- package/src/providers/integrations/kiro/kiro-cache.ts +31 -0
- package/src/providers/integrations/kiro/kiro-catalog.ts +31 -5
- package/src/providers/integrations/kiro/kiro-discovery.ts +47 -43
- package/src/providers/integrations/kiro/kiro-machine-id.ts +6 -3
- package/src/providers/integrations/kiro/kiro-oauth.ts +523 -255
- package/src/providers/integrations/kiro/kiro-quota.ts +35 -47
- package/src/providers/integrations/kiro/kiro-request.ts +8 -11
- package/src/providers/integrations/kiro/kiro-stream.ts +13 -0
- package/src/providers/integrations/kiro/kiro.ts +91 -78
- package/src/providers/integrations/muse/muse-oauth.ts +0 -1
- package/src/providers/integrations/muse/muse-quota.ts +0 -4
- package/src/providers/integrations/muse/muse.ts +6 -9
- package/src/providers/integrations/opencode/fingerprint.ts +7 -5
- package/src/providers/integrations/opencode/provider.ts +17 -24
- package/src/providers/integrations/perplexity.ts +2 -2
- package/src/providers/integrations/qoder/qoder-catalog.ts +132 -17
- package/src/providers/integrations/qoder/qoder-checkin.ts +26 -8
- package/src/providers/integrations/qoder/qoder-native-identity-store.ts +9 -8
- package/src/providers/integrations/qoder/qoder-oauth.ts +165 -25
- package/src/providers/integrations/qoder/qoder-quota.ts +48 -6
- package/src/providers/integrations/qoder/qoder-realm.ts +22 -28
- package/src/providers/integrations/qoder/qoder-sse.ts +159 -0
- package/src/providers/integrations/qoder/qoder-umid.ts +33 -38
- package/src/providers/integrations/qoder/qoder-virtual.ts +14 -2
- package/src/providers/integrations/qoder/qoder.ts +521 -63
- package/src/providers/integrations/shared/connect.ts +0 -54
- package/src/providers/integrations/shared/hash.ts +15 -0
- package/src/providers/integrations/shared/session-cache.ts +136 -0
- package/src/providers/integrations/tokenharbor.ts +2 -2
- package/src/providers/integrations/trae/trae-cache.ts +7 -87
- package/src/providers/integrations/trae/trae-catalog.ts +1 -6
- package/src/providers/integrations/trae/trae-protocol.ts +17 -8
- package/src/providers/integrations/trae/trae-realm.ts +0 -7
- package/src/providers/integrations/trae/trae.ts +59 -19
- package/src/providers/integrations/xai/xai-oauth.ts +5 -5
- package/src/providers/integrations/zcode/oauth.ts +1 -1
- package/src/providers/integrations/zcode-start-plan/gifts.ts +265 -0
- package/src/providers/integrations/zcode-start-plan/oauth.ts +154 -0
- package/src/providers/integrations/zcode-start-plan/provider.ts +131 -0
- package/src/providers/integrations/zcode-start-plan/quota.ts +152 -0
- package/src/providers/integrations/zcode-start-plan/zcode_prompt.json +10 -0
- package/src/providers/operations/account-error-classification.ts +131 -116
- package/src/providers/operations/account-health-service.ts +31 -39
- package/src/providers/operations/account-reset-service.ts +58 -1
- package/src/providers/operations/cli-platform.ts +31 -5
- package/src/providers/operations/client-version-resolver.ts +4 -6
- package/src/providers/operations/client-versions.ts +10 -7
- package/src/providers/operations/provider-catalog-seeder.ts +2 -0
- package/src/providers/operations/provider-catalog-service.ts +22 -6
- package/src/providers/operations/provider-credential-service.ts +35 -6
- package/src/providers/operations/upstream-deadline.ts +3 -3
- package/src/providers/provider-contracts.ts +65 -10
- package/src/providers/provider-credential-resolver.ts +1 -1
- package/src/providers/provider-metadata.ts +17 -2
- package/src/providers/provider-model-definition.ts +22 -1
- package/src/providers/provider-probe.ts +4 -2
- package/src/providers/provider-registry.ts +4 -4
- package/src/providers/provider-usage.ts +81 -16
- package/src/providers/quota/cache.ts +29 -0
- package/src/providers/quota/quota-contracts.ts +28 -10
- package/src/providers/quota/refresh.ts +29 -6
- package/src/providers/quota/snapshot.ts +94 -0
- package/src/providers/search/search-provider.ts +6 -8
- package/src/providers/search/search-providers.ts +2 -1
- package/src/security/abuse.ts +8 -8
- package/src/security/admission/reasons.ts +17 -17
- package/src/security/admission/service.ts +2 -2
- package/src/security/admission/ttl.ts +61 -61
- package/src/security/api-key-auth.ts +20 -8
- package/src/security/client-router-fingerprint.ts +4 -4
- package/src/security/credential-codec.ts +3 -3
- package/src/security/csrf.ts +2 -2
- package/src/security/ip-boundary.ts +16 -189
- package/src/security/model-access-rule.ts +1 -1
- package/src/security/outbound-headers.ts +18 -0
- package/src/shared/coerce.ts +19 -0
- package/src/shared/invoke-guard.ts +47 -0
- package/src/transport/contracts.ts +13 -4
- package/src/transport/dispatch/attempt-finalize.ts +5 -4
- package/src/transport/dispatch/attempt-loop.ts +10 -7
- package/src/transport/dispatch/capture-policy.ts +34 -37
- package/src/transport/dispatch/empty-stream.ts +28 -25
- package/src/transport/dispatch/generation.ts +33 -53
- package/src/transport/dispatch/leases.ts +8 -8
- package/src/transport/dispatch/native-shared.ts +127 -0
- package/src/transport/dispatch/proxy-request.ts +10 -8
- package/src/transport/dispatch/responses-compact.ts +35 -56
- package/src/transport/dispatch/retry-policy.ts +4 -67
- package/src/transport/dispatch/stream-bridge.ts +1 -1
- package/src/transport/dispatch/streaming/encoder.ts +18 -72
- package/src/transport/dispatch/streaming/finalize.ts +11 -10
- package/src/transport/dispatch/streaming/stream.ts +7 -3
- package/src/transport/dispatch/streaming/thinking-loop.ts +1 -1
- package/src/transport/dispatch/systemone.ts +27 -55
- package/src/transport/dispatch/token-count.ts +49 -46
- package/src/transport/dispatch/websearch.ts +24 -50
- package/src/transport/drain-endpoint.ts +3 -3
- package/src/transport/failure-policy.ts +19 -6
- package/src/transport/guards/auth-guard.ts +6 -11
- package/src/transport/guards/body-policy.ts +7 -7
- package/src/transport/guards/error-lifecycle.ts +18 -3
- package/src/transport/guards/guard-errors.ts +7 -3
- package/src/transport/guards/headroom-guard.ts +2 -2
- package/src/transport/guards/pipeline.ts +7 -7
- package/src/transport/guards/readiness-guard.ts +16 -2
- package/src/transport/guards/request-context.ts +15 -20
- package/src/transport/request/preparer.ts +306 -27
- package/src/transport/request/rtk/compress-request.ts +3 -3
- package/src/transport/request/rtk/rtk-constants.ts +2 -2
- package/src/transport/request/rtk/rtk-filters.ts +8 -8
- package/src/transport/request/state.ts +5 -20
- package/src/transport/request/system-prompt-injection.ts +74 -11
- package/src/transport/request/tenant-preferences.ts +22 -0
- package/src/transport/routing/candidate-index.ts +2 -2
- package/src/transport/routing/round-robin.ts +1 -1
- package/src/transport/routing/route-catalog.ts +113 -19
- package/src/transport/routing/route-model.ts +131 -38
- package/src/transport/routing/router.ts +154 -39
- package/src/transport/shutdown-notice.ts +21 -9
- package/src/transport/surface/adapters.ts +3 -3
- package/src/transport/surface/chat/encode.ts +7 -7
- package/src/transport/surface/chat/parse.ts +7 -7
- package/src/transport/surface/completion.ts +3 -3
- package/src/transport/surface/content-parts.ts +1 -1
- package/src/transport/surface/dialects.ts +2 -2
- package/src/transport/surface/messages/encode.ts +1 -1
- package/src/transport/surface/messages/parse.ts +3 -3
- package/src/transport/surface/responses/adapter.ts +1 -1
- package/src/transport/surface/responses/errors.ts +0 -9
- package/src/transport/vision-handoff-cache.ts +58 -0
- package/src/transport/vision-handoff.ts +376 -0
- package/src/workers/account-identity-sweep.ts +2 -2
- package/src/workers/buddy-growth-tasks.ts +392 -346
- package/src/workers/daily-checkin.ts +102 -49
- package/src/workers/maintenance-lease.ts +2 -35
- package/src/workers/oauth-refresh-sweep.ts +8 -1
- package/src/workers/quota-refresh-sweep.ts +120 -82
- package/src/workers/scheduler.ts +67 -4
- package/src/workers/sweep-runner.ts +24 -5
- package/src/workers/zcode-gift-claim.ts +108 -0
- package/dist/dashboard/assets/AccountCooldown-Bjo92Qat.js +0 -1
- package/dist/dashboard/assets/AccountCooldown-Bjo92Qat.js.gz +0 -0
- package/dist/dashboard/assets/BannedPage-2TJD37Hb.js.gz +0 -0
- package/dist/dashboard/assets/CliToolDetailPage-xefJNRmJ.js.gz +0 -0
- package/dist/dashboard/assets/CliToolsPage-Rj9iHQ3F.js.gz +0 -0
- package/dist/dashboard/assets/CombosPage-JEbYJFxw.js +0 -1
- package/dist/dashboard/assets/CombosPage-JEbYJFxw.js.gz +0 -0
- package/dist/dashboard/assets/ConsoleLogPage-C3xx_inM.js +0 -1
- package/dist/dashboard/assets/ConsoleLogPage-C3xx_inM.js.gz +0 -0
- package/dist/dashboard/assets/CustomizationPage-Dw306gJU.js +0 -1
- package/dist/dashboard/assets/CustomizationPage-Dw306gJU.js.gz +0 -0
- package/dist/dashboard/assets/HealthEventsModal-jaBo1TWV.js +0 -1
- package/dist/dashboard/assets/HealthEventsModal-jaBo1TWV.js.gz +0 -0
- package/dist/dashboard/assets/LoginPage-C4w7vea-.js.gz +0 -0
- package/dist/dashboard/assets/ModelPicker-BtPcAfot.js.gz +0 -0
- package/dist/dashboard/assets/OverviewPage-CGC5gNs1.js +0 -1
- package/dist/dashboard/assets/OverviewPage-CGC5gNs1.js.gz +0 -0
- package/dist/dashboard/assets/ProviderDetailPage-DQcthNGt.js +0 -4
- package/dist/dashboard/assets/ProviderDetailPage-DQcthNGt.js.gz +0 -0
- package/dist/dashboard/assets/ProviderIcon-FB6yS4v1.js +0 -1
- package/dist/dashboard/assets/ProviderIcon-FB6yS4v1.js.gz +0 -0
- package/dist/dashboard/assets/ProvidersPage-0OsXRGXe.js +0 -1
- package/dist/dashboard/assets/ProvidersPage-0OsXRGXe.js.gz +0 -0
- package/dist/dashboard/assets/ProxyPage-DdPc8slb.js +0 -9
- package/dist/dashboard/assets/ProxyPage-DdPc8slb.js.gz +0 -0
- package/dist/dashboard/assets/QuotaPage-Ci5O4BnH.js +0 -1
- package/dist/dashboard/assets/QuotaPage-Ci5O4BnH.js.gz +0 -0
- package/dist/dashboard/assets/SettingsPage-CDZjTt87.js +0 -1
- package/dist/dashboard/assets/SettingsPage-CDZjTt87.js.gz +0 -0
- package/dist/dashboard/assets/SetupPage-BQS0Rx_u.js.gz +0 -0
- package/dist/dashboard/assets/SortableList-BAL5npBC.js +0 -1
- package/dist/dashboard/assets/SortableList-BAL5npBC.js.gz +0 -0
- package/dist/dashboard/assets/StudioPage-TP7voAQ0.js.gz +0 -0
- package/dist/dashboard/assets/UsagePage-Cj_fEzhg.js +0 -56
- package/dist/dashboard/assets/UsagePage-Cj_fEzhg.js.gz +0 -0
- package/dist/dashboard/assets/api-keys-MbI7e7rt.js +0 -1
- package/dist/dashboard/assets/api-keys-MbI7e7rt.js.gz +0 -0
- package/dist/dashboard/assets/app-B2vyPoII.css +0 -2
- package/dist/dashboard/assets/app-B2vyPoII.css.gz +0 -0
- package/dist/dashboard/assets/assert-C0YYuZJ4.js.gz +0 -0
- package/dist/dashboard/assets/badge-B_DMpMJN.js.gz +0 -0
- package/dist/dashboard/assets/banner-DMrMPmth.js.gz +0 -0
- package/dist/dashboard/assets/card-Be5Uzamx.js.gz +0 -0
- package/dist/dashboard/assets/cli-tools-muFRphDu.js.gz +0 -0
- package/dist/dashboard/assets/clipboard-button-DOfrVmsi.js.gz +0 -0
- package/dist/dashboard/assets/dialog-C9omdjQt.js.gz +0 -0
- package/dist/dashboard/assets/drawer-Bm8WKaGY.js.gz +0 -0
- package/dist/dashboard/assets/entry-DS90gUks.js +0 -1
- package/dist/dashboard/assets/entry-DS90gUks.js.gz +0 -0
- package/dist/dashboard/assets/entry-j40LJotO.js +0 -4
- package/dist/dashboard/assets/entry-j40LJotO.js.gz +0 -0
- package/dist/dashboard/assets/entry-q5HwZ8nN.js.gz +0 -0
- package/dist/dashboard/assets/formatters-BTScrQpe.js.gz +0 -0
- package/dist/dashboard/assets/github-badge-Orjuzemr.js.gz +0 -0
- package/dist/dashboard/assets/index-cPrX5vn6.js.gz +0 -0
- package/dist/dashboard/assets/inline-Dvux8w-0.js.gz +0 -0
- package/dist/dashboard/assets/input-CU1Rgf3p.js.gz +0 -0
- package/dist/dashboard/assets/list-row-CzFvogbj.js.gz +0 -0
- package/dist/dashboard/assets/live-KaG15HLQ.js +0 -1
- package/dist/dashboard/assets/live-KaG15HLQ.js.gz +0 -0
- package/dist/dashboard/assets/minimize-2-D-MN8W8a.js +0 -1
- package/dist/dashboard/assets/minimize-2-D-MN8W8a.js.gz +0 -0
- package/dist/dashboard/assets/mutation-JJGQm8TD.js.gz +0 -0
- package/dist/dashboard/assets/numbers-BNDZnsUE.js +0 -2
- package/dist/dashboard/assets/numbers-BNDZnsUE.js.gz +0 -0
- package/dist/dashboard/assets/query-keys-CLaNz8Xz.js.gz +0 -0
- package/dist/dashboard/assets/quota-DZGyp0N5.js +0 -1
- package/dist/dashboard/assets/quota-DZGyp0N5.js.gz +0 -0
- package/dist/dashboard/assets/routing-BEH32QOC.js.gz +0 -0
- package/dist/dashboard/assets/select-B3iTetHN.js.gz +0 -0
- package/dist/dashboard/assets/settings-Dt3Eqbnq.js +0 -1
- package/dist/dashboard/assets/settings-Dt3Eqbnq.js.gz +0 -0
- package/dist/dashboard/assets/stack-KrOrm7JZ.js.gz +0 -0
- package/dist/dashboard/assets/state-DLS7IDMy.js.gz +0 -0
- package/dist/dashboard/assets/stream-retry-5QnVuSSo.js +0 -1
- package/dist/dashboard/assets/stream-retry-5QnVuSSo.js.gz +0 -0
- package/dist/dashboard/assets/switch-42ItvbAs.js.gz +0 -0
- package/dist/dashboard/assets/useMutation-Dmnfh1Ue.js.gz +0 -0
- package/src/network/response-headers.ts +0 -39
- package/src/protocol/response/dsml.ts +0 -38
- package/src/providers/integrations/xiaomi-mimo/think-stream.ts +0 -229
- /package/dist/dashboard/assets/{app-wvwCi4Eh.js → app-Bgd3zANQ.js} +0 -0
- /package/dist/dashboard/assets/{app-wvwCi4Eh.js.gz → app-Bgd3zANQ.js.gz} +0 -0
- /package/dist/dashboard/assets/brand/{og_bansos.webp → og_bansos_initial.webp} +0 -0
- /package/dist/dashboard/assets/brand/{og_image.webp → og_image_initial.webp} +0 -0
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Command Code quota, read from the
|
|
2
|
+
* Command Code quota, read from the billing endpoints its client reads.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* renders still expects windows, so the balance is reported as one independent
|
|
7
|
-
* window — the honest reading, since credits are the only thing consumed.
|
|
4
|
+
* Monthly allowance and purchased/free credits are separate pooled windows:
|
|
5
|
+
* the monthly cap and reset do not limit or expire the additional balance.
|
|
8
6
|
*
|
|
9
7
|
* The endpoints, all on `https://api.commandcode.ai` (not the Provider API
|
|
10
8
|
* origin the model catalog lives on):
|
|
@@ -12,17 +10,42 @@
|
|
|
12
10
|
* `/alpha/whoami` identity, and the `orgId` when one exists
|
|
13
11
|
* `/alpha/billing/credits` the balance and any window limits
|
|
14
12
|
* `/alpha/billing/subscriptions` the plan, when there is one
|
|
15
|
-
* `/alpha/usage/summary` spend in the period, for context
|
|
16
13
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* balance has already got the answer even if the usage summary never came back.
|
|
14
|
+
* Identity resolves the organization before billing is read. Billing reads are
|
|
15
|
+
* independent: retain the balance or subscription when the other is unavailable.
|
|
20
16
|
*/
|
|
21
17
|
import type { FetchLike, ProviderQuotaResult, ProviderQuotaWindow } from "../../quota/quota-contracts";
|
|
22
18
|
|
|
23
19
|
const COMMANDCODE_API_BASE = "https://api.commandcode.ai" as const;
|
|
24
20
|
const REQUEST_TIMEOUT_MS = 15_000;
|
|
25
21
|
|
|
22
|
+
const PLAN_CAPS: Readonly<Record<string, number>> = {
|
|
23
|
+
"individual-go": 10,
|
|
24
|
+
"individual-goat": 70,
|
|
25
|
+
"individual-pro": 30,
|
|
26
|
+
"individual-provider": 15,
|
|
27
|
+
"individual-max": 150,
|
|
28
|
+
"individual-ultra": 300,
|
|
29
|
+
"teams-pro": 40,
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const PLAN_CAP_OVERRIDES: Readonly<Record<string, number>> = {
|
|
33
|
+
"individual-pro-v1": 80,
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
function commandCodePlan(planId: string): { readonly label: string; readonly cap: number | null } {
|
|
37
|
+
const [scope, tier] = planId.toLowerCase().split("-");
|
|
38
|
+
if ((scope !== "individual" && scope !== "teams") || !tier) {
|
|
39
|
+
return { label: planId, cap: PLAN_CAP_OVERRIDES[planId] ?? PLAN_CAPS[planId] ?? null };
|
|
40
|
+
}
|
|
41
|
+
const tierLabel = tier === "goat" ? "GOAT" : `${tier[0]?.toUpperCase() ?? ""}${tier.slice(1)}`;
|
|
42
|
+
const normalizedId = `${scope}-${tier}`;
|
|
43
|
+
return {
|
|
44
|
+
label: `CommandCode ${scope === "teams" ? "Teams " : ""}${tierLabel}`,
|
|
45
|
+
cap: PLAN_CAP_OVERRIDES[planId] ?? PLAN_CAPS[normalizedId] ?? null,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
26
49
|
interface RequestOk {
|
|
27
50
|
readonly ok: true;
|
|
28
51
|
readonly value: unknown;
|
|
@@ -57,27 +80,69 @@ function recordValue(value: unknown): Record<string, unknown> | undefined {
|
|
|
57
80
|
}
|
|
58
81
|
|
|
59
82
|
function numberOrNull(value: unknown): number | null {
|
|
60
|
-
|
|
83
|
+
if (typeof value === "number" && Number.isFinite(value)) return value;
|
|
84
|
+
if (typeof value === "string" && value.trim() && Number.isFinite(Number(value))) {
|
|
85
|
+
return Number(value);
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function isoTimestamp(value: unknown): string | null {
|
|
91
|
+
const numeric = numberOrNull(value);
|
|
92
|
+
if (numeric !== null) {
|
|
93
|
+
if (numeric <= 0) return null;
|
|
94
|
+
const date = new Date(numeric > 1_000_000_000_000 ? numeric : numeric * 1000);
|
|
95
|
+
return Number.isFinite(date.getTime()) ? date.toISOString() : null;
|
|
96
|
+
}
|
|
97
|
+
if (typeof value !== "string" || !Number.isFinite(Date.parse(value))) return null;
|
|
98
|
+
return new Date(value).toISOString();
|
|
61
99
|
}
|
|
62
100
|
|
|
63
|
-
|
|
64
|
-
|
|
101
|
+
function withQuery(path: string, params: Readonly<Record<string, string | null>>): string {
|
|
102
|
+
const query = new URLSearchParams(
|
|
103
|
+
Object.entries(params).filter((entry): entry is [string, string] => entry[1] !== null),
|
|
104
|
+
).toString();
|
|
105
|
+
return query ? `${path}?${query}` : path;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** Only monthly credits share the subscription allowance and reset. */
|
|
109
|
+
function creditWindows(
|
|
110
|
+
credits: Record<string, unknown>,
|
|
111
|
+
planCap: number | null,
|
|
112
|
+
resetsAt: string | null,
|
|
113
|
+
): readonly ProviderQuotaWindow[] {
|
|
65
114
|
const monthly = numberOrNull(credits["monthlyCredits"]) ?? 0;
|
|
66
115
|
const purchased = numberOrNull(credits["purchasedCredits"]) ?? 0;
|
|
67
116
|
const free = numberOrNull(credits["freeCredits"]) ?? 0;
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
117
|
+
const used = planCap === null ? null : Math.max(0, planCap - monthly);
|
|
118
|
+
const usedPercent = planCap !== null && planCap > 0 && used !== null
|
|
119
|
+
? Math.min(100, Math.max(0, (used / planCap) * 100))
|
|
120
|
+
: null;
|
|
121
|
+
const windows: ProviderQuotaWindow[] = [{
|
|
73
122
|
kind: "credits",
|
|
74
|
-
label: "
|
|
75
|
-
accounting: "
|
|
76
|
-
usedPercent
|
|
77
|
-
remainingPercent: null,
|
|
78
|
-
resetsAt
|
|
79
|
-
|
|
80
|
-
|
|
123
|
+
label: "Monthly credits",
|
|
124
|
+
accounting: "pooled",
|
|
125
|
+
usedPercent,
|
|
126
|
+
remainingPercent: usedPercent === null ? null : Math.max(0, 100 - usedPercent),
|
|
127
|
+
resetsAt,
|
|
128
|
+
used,
|
|
129
|
+
limit: planCap,
|
|
130
|
+
remaining: monthly,
|
|
131
|
+
}];
|
|
132
|
+
if (purchased + free > 0) {
|
|
133
|
+
windows.push({
|
|
134
|
+
kind: "additional_credits",
|
|
135
|
+
label: "Purchased/free credits",
|
|
136
|
+
accounting: "pooled",
|
|
137
|
+
usedPercent: null,
|
|
138
|
+
remainingPercent: null,
|
|
139
|
+
resetsAt: null,
|
|
140
|
+
used: null,
|
|
141
|
+
limit: null,
|
|
142
|
+
remaining: purchased + free,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
return windows;
|
|
81
146
|
}
|
|
82
147
|
|
|
83
148
|
function windowLimits(
|
|
@@ -88,17 +153,25 @@ function windowLimits(
|
|
|
88
153
|
const weekly = recordValue(limits["weekly"]);
|
|
89
154
|
const push = (source: Record<string, unknown> | undefined, kind: string, label: string) => {
|
|
90
155
|
if (source === undefined) return;
|
|
156
|
+
const used = numberOrNull(source["used"]) ?? 0;
|
|
157
|
+
const limit = numberOrNull(source["cap"]);
|
|
158
|
+
if ((limit === null || limit <= 0) && used <= 0) return;
|
|
159
|
+
const usedPercent = limit !== null && limit > 0
|
|
160
|
+
? Math.min(100, Math.max(0, (used / limit) * 100))
|
|
161
|
+
: null;
|
|
91
162
|
out.push({
|
|
92
163
|
kind,
|
|
93
164
|
label,
|
|
94
165
|
accounting: "independent",
|
|
95
|
-
usedPercent
|
|
96
|
-
remainingPercent:
|
|
97
|
-
resetsAt:
|
|
98
|
-
|
|
166
|
+
usedPercent,
|
|
167
|
+
remainingPercent: usedPercent === null ? null : Math.max(0, 100 - usedPercent),
|
|
168
|
+
resetsAt: isoTimestamp(source["resetAt"]),
|
|
169
|
+
used,
|
|
170
|
+
limit,
|
|
171
|
+
remaining: limit === null ? null : Math.max(0, limit - used),
|
|
99
172
|
});
|
|
100
173
|
};
|
|
101
|
-
push(fiveHour, "five_hour", "
|
|
174
|
+
push(fiveHour, "five_hour", "Session (5h)");
|
|
102
175
|
push(weekly, "weekly", "Weekly");
|
|
103
176
|
return out;
|
|
104
177
|
}
|
|
@@ -108,12 +181,8 @@ export async function fetchCommandCodeQuota(
|
|
|
108
181
|
fetcher: FetchLike,
|
|
109
182
|
): Promise<ProviderQuotaResult> {
|
|
110
183
|
const source = "commandcode";
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
readJson("/alpha/billing/credits", credential, fetcher),
|
|
114
|
-
readJson("/alpha/billing/subscriptions", credential, fetcher),
|
|
115
|
-
]);
|
|
116
|
-
if (!whoami.ok && !creditsRaw.ok) {
|
|
184
|
+
const whoami = await readJson(withQuery("/alpha/whoami", { limits: "1" }), credential, fetcher);
|
|
185
|
+
if (!whoami.ok) {
|
|
117
186
|
return {
|
|
118
187
|
source,
|
|
119
188
|
plan: null,
|
|
@@ -124,32 +193,47 @@ export async function fetchCommandCodeQuota(
|
|
|
124
193
|
|
|
125
194
|
const whoamiBody = whoami.ok ? recordValue(whoami.value) : undefined;
|
|
126
195
|
const user = recordValue(whoamiBody?.["user"]);
|
|
196
|
+
const organization = recordValue(whoamiBody?.["org"]);
|
|
197
|
+
const orgId = typeof organization?.["id"] === "string" ? organization["id"] : null;
|
|
127
198
|
const accountLabel =
|
|
128
199
|
(typeof user?.["email"] === "string" && user["email"]) ||
|
|
129
200
|
(typeof user?.["userName"] === "string" && user["userName"]) ||
|
|
201
|
+
(typeof user?.["name"] === "string" && user["name"]) ||
|
|
130
202
|
undefined;
|
|
131
203
|
|
|
204
|
+
const [creditsRaw, subscriptionRaw] = await Promise.all([
|
|
205
|
+
readJson(withQuery("/alpha/billing/credits", { orgId }), credential, fetcher),
|
|
206
|
+
readJson(withQuery("/alpha/billing/subscriptions", { orgId }), credential, fetcher),
|
|
207
|
+
]);
|
|
208
|
+
if (!creditsRaw.ok && !subscriptionRaw.ok) {
|
|
209
|
+
return {
|
|
210
|
+
source,
|
|
211
|
+
plan: null,
|
|
212
|
+
windows: [],
|
|
213
|
+
error: "Command Code did not answer its billing endpoints",
|
|
214
|
+
...(accountLabel === undefined ? {} : { accountLabel }),
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
const subscriptionBody = subscriptionRaw.ok ? recordValue(subscriptionRaw.value) : undefined;
|
|
219
|
+
const planRecord = recordValue(subscriptionBody?.["data"]);
|
|
220
|
+
const planId = typeof planRecord?.["planId"] === "string" ? planRecord["planId"] : null;
|
|
221
|
+
const parsedPlan = planId === null ? null : commandCodePlan(planId);
|
|
222
|
+
const plan =
|
|
223
|
+
parsedPlan?.label ??
|
|
224
|
+
(typeof planRecord?.["name"] === "string" ? planRecord["name"] : null) ??
|
|
225
|
+
(creditsRaw.ok ? "Credits" : null);
|
|
226
|
+
const periodEnd = isoTimestamp(planRecord?.["currentPeriodEnd"]);
|
|
227
|
+
|
|
132
228
|
const creditsBody = creditsRaw.ok ? recordValue(creditsRaw.value) : undefined;
|
|
133
229
|
const windows: ProviderQuotaWindow[] = [];
|
|
134
230
|
if (creditsBody !== undefined) {
|
|
135
231
|
const credits = recordValue(creditsBody["credits"]);
|
|
136
|
-
if (credits !== undefined)
|
|
137
|
-
const window = creditWindow(credits);
|
|
138
|
-
if (window !== null) windows.push(window);
|
|
139
|
-
}
|
|
232
|
+
if (credits !== undefined) windows.push(...creditWindows(credits, parsedPlan?.cap ?? null, periodEnd));
|
|
140
233
|
const limits = recordValue(creditsBody["windowLimits"]);
|
|
141
234
|
if (limits !== undefined) windows.push(...windowLimits(limits));
|
|
142
235
|
}
|
|
143
236
|
|
|
144
|
-
const subscriptionBody = subscriptionRaw.ok ? recordValue(subscriptionRaw.value) : undefined;
|
|
145
|
-
const planRecord = recordValue(subscriptionBody?.["data"]);
|
|
146
|
-
const plan =
|
|
147
|
-
typeof planRecord?.["name"] === "string"
|
|
148
|
-
? planRecord["name"]
|
|
149
|
-
: creditsRaw.ok
|
|
150
|
-
? "Credits"
|
|
151
|
-
: null;
|
|
152
|
-
|
|
153
237
|
return {
|
|
154
238
|
source,
|
|
155
239
|
plan,
|
|
@@ -46,7 +46,7 @@ function connectErrorEnvelope(payload: Uint8Array): GatewayError | undefined {
|
|
|
46
46
|
return new GatewayError(
|
|
47
47
|
"quota_exceeded",
|
|
48
48
|
429,
|
|
49
|
-
`Cursor refused the Run: ${detail}
|
|
49
|
+
`Cursor refused the Run: ${detail} (request {requestId}). You've maxed this window — pace yourself ⏳`,
|
|
50
50
|
{ providerId: "cursor", upstreamCode: code },
|
|
51
51
|
"upstream",
|
|
52
52
|
);
|
|
@@ -54,7 +54,7 @@ function connectErrorEnvelope(payload: Uint8Array): GatewayError | undefined {
|
|
|
54
54
|
return new GatewayError(
|
|
55
55
|
"platform_unavailable",
|
|
56
56
|
502,
|
|
57
|
-
`Cursor refused the Run: ${detail}
|
|
57
|
+
`Cursor refused the Run: ${detail} (request {requestId}). The upstream came back empty-handed — retry 🌙`,
|
|
58
58
|
{ providerId: "cursor", upstreamCode: code },
|
|
59
59
|
"upstream",
|
|
60
60
|
);
|
|
@@ -126,7 +126,7 @@ export async function openCursorRun(input: {
|
|
|
126
126
|
throw new GatewayError(
|
|
127
127
|
"invalid_request",
|
|
128
128
|
400,
|
|
129
|
-
"Cursor Run requires an allowlisted Cursor agent origin",
|
|
129
|
+
"Cursor Run requires an allowlisted Cursor agent origin (request {requestId}). All roads blocked — time to find a new route 🗺️",
|
|
130
130
|
{ origin: input.origin },
|
|
131
131
|
);
|
|
132
132
|
}
|
|
@@ -153,7 +153,7 @@ function grpcError(status: string, message: string | undefined): GatewayError {
|
|
|
153
153
|
return new GatewayError(
|
|
154
154
|
"authentication_failed",
|
|
155
155
|
401,
|
|
156
|
-
`Cursor refused the credential${detail}
|
|
156
|
+
`Cursor refused the credential${detail} (request {requestId}). Wrong key, right door — check the credential 🔑`,
|
|
157
157
|
{ grpcStatus: status },
|
|
158
158
|
"upstream",
|
|
159
159
|
);
|
|
@@ -162,7 +162,7 @@ function grpcError(status: string, message: string | undefined): GatewayError {
|
|
|
162
162
|
return new GatewayError(
|
|
163
163
|
"quota_exceeded",
|
|
164
164
|
429,
|
|
165
|
-
`Cursor refused the Run${detail}
|
|
165
|
+
`Cursor refused the Run${detail} (request {requestId}). You've maxed this window — pace yourself ⏳`,
|
|
166
166
|
{ grpcStatus: status },
|
|
167
167
|
"upstream",
|
|
168
168
|
);
|
|
@@ -171,7 +171,7 @@ function grpcError(status: string, message: string | undefined): GatewayError {
|
|
|
171
171
|
return new GatewayError(
|
|
172
172
|
"deadline_exceeded",
|
|
173
173
|
504,
|
|
174
|
-
`Cursor Run ended before it finished${detail}
|
|
174
|
+
`Cursor Run ended before it finished${detail} (request {requestId}). Some things just take longer 🐢`,
|
|
175
175
|
{ grpcStatus: status },
|
|
176
176
|
"upstream",
|
|
177
177
|
);
|
|
@@ -179,7 +179,7 @@ function grpcError(status: string, message: string | undefined): GatewayError {
|
|
|
179
179
|
return new GatewayError(
|
|
180
180
|
"platform_unavailable",
|
|
181
181
|
502,
|
|
182
|
-
`Cursor Run failed (gRPC ${status})${detail}
|
|
182
|
+
`Cursor Run failed (gRPC ${status})${detail} (request {requestId}). The upstream came back empty-handed — retry 🌙`,
|
|
183
183
|
{ grpcStatus: status },
|
|
184
184
|
"upstream",
|
|
185
185
|
);
|
|
@@ -205,7 +205,7 @@ export function cursorRunTerminationError(input: {
|
|
|
205
205
|
: new GatewayError(
|
|
206
206
|
"transport_unavailable",
|
|
207
207
|
502,
|
|
208
|
-
`Cursor Run transport interrupted: ${input.reason.error.message}
|
|
208
|
+
`Cursor Run transport interrupted: ${input.reason.error.message} (request {requestId}). The connection ghosted us — come back in a moment 👻`,
|
|
209
209
|
{},
|
|
210
210
|
"network",
|
|
211
211
|
);
|
|
@@ -216,7 +216,7 @@ export function cursorRunTerminationError(input: {
|
|
|
216
216
|
return new GatewayError(
|
|
217
217
|
status === 401 || status === 403 ? "authentication_failed" : "platform_unavailable",
|
|
218
218
|
status === 401 || status === 403 ? 401 : 502,
|
|
219
|
-
`Cursor Run failed by remote: ${status}
|
|
219
|
+
`Cursor Run failed by remote: ${status} (request {requestId}). The upstream came back empty-handed — retry 🌙`,
|
|
220
220
|
{ httpStatus: status, ...(message === undefined ? {} : { upstreamMessage: message }) },
|
|
221
221
|
"upstream",
|
|
222
222
|
);
|
|
@@ -229,7 +229,7 @@ export function cursorRunTerminationError(input: {
|
|
|
229
229
|
return new GatewayError(
|
|
230
230
|
"platform_unavailable",
|
|
231
231
|
502,
|
|
232
|
-
"Cursor Run ended before turn_ended",
|
|
232
|
+
"Cursor Run ended before turn_ended (request {requestId}). The upstream came back empty-handed — retry 🌙",
|
|
233
233
|
{},
|
|
234
234
|
"upstream",
|
|
235
235
|
);
|
|
@@ -253,7 +253,7 @@ export async function* decodeServerMessages(
|
|
|
253
253
|
throw new GatewayError(
|
|
254
254
|
"platform_unavailable",
|
|
255
255
|
502,
|
|
256
|
-
"Cursor Run exceeded the frame buffer bound",
|
|
256
|
+
"Cursor Run exceeded the frame buffer bound (request {requestId}). The upstream sent more than we can hold — retry 🌙",
|
|
257
257
|
{},
|
|
258
258
|
"upstream",
|
|
259
259
|
);
|
|
@@ -295,6 +295,3 @@ function concat(left: Uint8Array, right: Uint8Array): Uint8Array {
|
|
|
295
295
|
out.set(right, left.byteLength);
|
|
296
296
|
return out;
|
|
297
297
|
}
|
|
298
|
-
|
|
299
|
-
/** Heartbeat cadence while a Run is held open waiting for a tool result. */
|
|
300
|
-
export const RUN_HEARTBEAT_INTERVAL_MS = 20_000;
|
|
@@ -35,6 +35,7 @@ import {
|
|
|
35
35
|
} from "../../quota/quota-contracts";
|
|
36
36
|
import type { QuotaCollectionContext } from "../../quota/quota-support";
|
|
37
37
|
import { cursorAccountIdentity } from "./cursor-auth";
|
|
38
|
+
import { fnv1a32 } from "../shared/hash";
|
|
38
39
|
import { CURSOR_API_HOST, CURSOR_WEBSITE_HOST } from "./cursor-shared";
|
|
39
40
|
|
|
40
41
|
/** Timestamp keys naming the end of the current window. */
|
|
@@ -226,12 +227,7 @@ function authStateUserId(context: QuotaCollectionContext | undefined): string |
|
|
|
226
227
|
* subject it replaces.
|
|
227
228
|
*/
|
|
228
229
|
function cursorAccountTag(credential: string): string {
|
|
229
|
-
|
|
230
|
-
for (let index = 0; index < credential.length; index += 1) {
|
|
231
|
-
hash ^= credential.charCodeAt(index);
|
|
232
|
-
hash = Math.imul(hash, 0x01000193) >>> 0;
|
|
233
|
-
}
|
|
234
|
-
return `cursor-${hash.toString(36).padStart(7, "0").slice(0, 7)}`;
|
|
230
|
+
return `cursor-${fnv1a32(credential).toString(36).padStart(7, "0").slice(0, 7)}`;
|
|
235
231
|
}
|
|
236
232
|
|
|
237
233
|
export async function fetchCursorQuota(
|
|
@@ -303,17 +303,6 @@ export function buildHeartbeat(): Uint8Array {
|
|
|
303
303
|
return encodeMessage("AgentClientMessage", { client_heartbeat: {} });
|
|
304
304
|
}
|
|
305
305
|
|
|
306
|
-
/**
|
|
307
|
-
* `ACM#5 exec_client_control_message.heartbeat{id}`: Cursor CLI sends one every
|
|
308
|
-
* few seconds for each exec it is still running. A zero id is left out, as
|
|
309
|
-
* proto3 does for a default scalar.
|
|
310
|
-
*/
|
|
311
|
-
export function buildExecHeartbeat(execId: number): Uint8Array {
|
|
312
|
-
return encodeMessage("AgentClientMessage", {
|
|
313
|
-
exec_client_control_message: { heartbeat: execId === 0 ? {} : { id: execId } },
|
|
314
|
-
});
|
|
315
|
-
}
|
|
316
|
-
|
|
317
306
|
/** `ACM#5 exec_client_control_message.stream_close{id}` after an exec result. */
|
|
318
307
|
export function buildExecStreamClose(execId: number, execIdString?: string): Uint8Array {
|
|
319
308
|
return encodeMessage("AgentClientMessage", {
|
|
@@ -424,82 +413,6 @@ export function buildMcpResult(input: {
|
|
|
424
413
|
});
|
|
425
414
|
}
|
|
426
415
|
|
|
427
|
-
/**
|
|
428
|
-
* `ACM#2 exec_client_message{shell_result|write_result|read_result}` for a host
|
|
429
|
-
* exec the canonical client executed locally.
|
|
430
|
-
*
|
|
431
|
-
* Cursor's executor replies to its own host requests with the variant's typed
|
|
432
|
-
* result frame (the generic `mcp_result` leaves the server unmatched on a frame
|
|
433
|
-
* it did rank), and after every exec result it sends `stream_close` — without
|
|
434
|
-
* it the cloud waits forever on shell execs. `is_error` keeps the failure as
|
|
435
|
-
* the variant's error/failure case rather than a crafted success.
|
|
436
|
-
*/
|
|
437
|
-
export type CursorHostExecResultVariant = "shell" | "write" | "read";
|
|
438
|
-
|
|
439
|
-
export function buildHostExecResult(input: {
|
|
440
|
-
readonly execId: number;
|
|
441
|
-
readonly execIdString?: string;
|
|
442
|
-
readonly variant: CursorHostExecResultVariant;
|
|
443
|
-
readonly text: string;
|
|
444
|
-
readonly isError: boolean;
|
|
445
|
-
readonly host: {
|
|
446
|
-
readonly command?: string;
|
|
447
|
-
readonly workingDirectory?: string;
|
|
448
|
-
readonly path?: string;
|
|
449
|
-
readonly lines?: number;
|
|
450
|
-
readonly fileSize?: number;
|
|
451
|
-
};
|
|
452
|
-
}): Uint8Array[] {
|
|
453
|
-
const id = { id: input.execId, exec_id: input.execIdString ?? "" };
|
|
454
|
-
const variant = input.variant;
|
|
455
|
-
const text = input.text;
|
|
456
|
-
let result: Record<string, unknown>;
|
|
457
|
-
if (variant === "shell") {
|
|
458
|
-
result = {
|
|
459
|
-
shell_result: input.isError
|
|
460
|
-
? { failure: { command: input.host.command ?? "", exit_code: 1, stderr: text } }
|
|
461
|
-
: {
|
|
462
|
-
success: {
|
|
463
|
-
command: input.host.command ?? "",
|
|
464
|
-
exit_code: 0,
|
|
465
|
-
stdout: text,
|
|
466
|
-
...(input.host.workingDirectory === undefined ? {} : { working_directory: input.host.workingDirectory }),
|
|
467
|
-
},
|
|
468
|
-
},
|
|
469
|
-
};
|
|
470
|
-
} else if (variant === "write") {
|
|
471
|
-
result = {
|
|
472
|
-
write_result: input.isError
|
|
473
|
-
? { error: { path: input.host.path ?? "", error: text } }
|
|
474
|
-
: {
|
|
475
|
-
success: {
|
|
476
|
-
path: input.host.path ?? "",
|
|
477
|
-
lines_created: input.host.lines ?? 0,
|
|
478
|
-
file_size: input.host.fileSize ?? 0,
|
|
479
|
-
},
|
|
480
|
-
},
|
|
481
|
-
};
|
|
482
|
-
} else {
|
|
483
|
-
result = {
|
|
484
|
-
read_result: input.isError
|
|
485
|
-
? { error: { path: input.host.path ?? "", error: text } }
|
|
486
|
-
: {
|
|
487
|
-
success: {
|
|
488
|
-
path: input.host.path ?? "",
|
|
489
|
-
content: text,
|
|
490
|
-
total_lines: text.length > 0 ? text.split("\n").length : 0,
|
|
491
|
-
},
|
|
492
|
-
},
|
|
493
|
-
};
|
|
494
|
-
}
|
|
495
|
-
return [
|
|
496
|
-
encodeMessage("AgentClientMessage", { exec_client_message: { ...id, ...result } }),
|
|
497
|
-
// The real CLI pairs every typed exec result with stream_close — the cloud
|
|
498
|
-
// waits on it for shell execs specifically.
|
|
499
|
-
buildExecStreamClose(input.execId, input.execIdString),
|
|
500
|
-
];
|
|
501
|
-
}
|
|
502
|
-
|
|
503
416
|
/**
|
|
504
417
|
* `ACM#2 exec_client_message{mcp_result}` rejecting a tool the client never
|
|
505
418
|
* declared.
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
// protocol was verified against: they are declared once so the auth flow, the
|
|
6
6
|
// unary catalog calls, and the Run stream cannot drift apart on host, path, or
|
|
7
7
|
// client id.
|
|
8
|
-
import type { WireFamily } from "../../../protocol/canonical-model";
|
|
9
8
|
|
|
10
9
|
/** Canonical bundled provider id. */
|
|
11
10
|
export const CURSOR_PROVIDER_ID = "cursor";
|
|
@@ -72,9 +71,6 @@ export const SESSION_REFRESH_TIMEOUT_MS = 20_000;
|
|
|
72
71
|
*/
|
|
73
72
|
export const RUN_IDLE_TTL_MS = 10 * 60_000;
|
|
74
73
|
|
|
75
|
-
/** Chat wire is the declared default; the adapter owns the native protocol. */
|
|
76
|
-
export const CURSOR_WIRE_FAMILY: WireFamily = "chat";
|
|
77
|
-
|
|
78
74
|
/**
|
|
79
75
|
* Any HTTPS subdomain of `cursor.sh` is an acceptable Run host: the region
|
|
80
76
|
* Cursor routes an account to varies (`agentn.*`, `agent.*`, `api5`, …).
|