cartethyia 2.7.4 → 2.7.6
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 +5 -0
- package/README.md +18 -6
- package/dist/dashboard/assets/BannedPage-B1N603cM.js +1 -0
- package/dist/dashboard/assets/BannedPage-B1N603cM.js.gz +0 -0
- package/dist/dashboard/assets/CliToolDetailPage-9q4_4NoK.js +3 -0
- package/dist/dashboard/assets/CliToolDetailPage-9q4_4NoK.js.gz +0 -0
- package/dist/dashboard/assets/CliToolsPage-DwshGtK-.js +1 -0
- package/dist/dashboard/assets/CliToolsPage-DwshGtK-.js.gz +0 -0
- package/dist/dashboard/assets/CombosPage-D762MIkp.js +1 -0
- package/dist/dashboard/assets/CombosPage-D762MIkp.js.gz +0 -0
- package/dist/dashboard/assets/ConsoleLogPage-KRYjHZsX.js +1 -0
- package/dist/dashboard/assets/ConsoleLogPage-KRYjHZsX.js.gz +0 -0
- package/dist/dashboard/assets/CustomizationPage-DXsxk5uM.js +1 -0
- package/dist/dashboard/assets/CustomizationPage-DXsxk5uM.js.gz +0 -0
- package/dist/dashboard/assets/HealthEventsModal-BEjAjD4F.js +1 -0
- package/dist/dashboard/assets/HealthEventsModal-BEjAjD4F.js.gz +0 -0
- package/dist/dashboard/assets/InjectSystemPromptPanel-d5v3K_Yc.js +899 -0
- package/dist/dashboard/assets/InjectSystemPromptPanel-d5v3K_Yc.js.gz +0 -0
- package/dist/dashboard/assets/LoginPage-Ccv4tjNS.js +1 -0
- package/dist/dashboard/assets/LoginPage-Ccv4tjNS.js.gz +0 -0
- package/dist/dashboard/assets/{ModelPicker-BMS2t8BA.js → ModelPicker-C6WlpU5E.js} +1 -1
- package/dist/dashboard/assets/ModelPicker-C6WlpU5E.js.gz +0 -0
- package/dist/dashboard/assets/OverviewPage-DN9fYNWA.js +1 -0
- package/dist/dashboard/assets/OverviewPage-DN9fYNWA.js.gz +0 -0
- package/dist/dashboard/assets/ProviderDetailPage-BY0ieUgz.js +5 -0
- package/dist/dashboard/assets/ProviderDetailPage-BY0ieUgz.js.gz +0 -0
- package/dist/dashboard/assets/ProviderIcon-jjqXJDA3.js +1 -0
- package/dist/dashboard/assets/ProviderIcon-jjqXJDA3.js.gz +0 -0
- package/dist/dashboard/assets/ProvidersPage-DNsbfea2.js +1 -0
- package/dist/dashboard/assets/ProvidersPage-DNsbfea2.js.gz +0 -0
- package/dist/dashboard/assets/{ProxyPage-lsrx7NYg.js → ProxyPage-DxjvUzSD.js} +1 -1
- package/dist/dashboard/assets/ProxyPage-DxjvUzSD.js.gz +0 -0
- package/dist/dashboard/assets/QuotaPage-OaHScjpX.js +1 -0
- package/dist/dashboard/assets/QuotaPage-OaHScjpX.js.gz +0 -0
- package/dist/dashboard/assets/SettingsPage-BW4AKj2H.js +1 -0
- package/dist/dashboard/assets/SettingsPage-BW4AKj2H.js.gz +0 -0
- package/dist/dashboard/assets/SetupPage-44BZrxFC.js +1 -0
- package/dist/dashboard/assets/SetupPage-44BZrxFC.js.gz +0 -0
- package/dist/dashboard/assets/{StudioPage-Cq5tW7hW.js → StudioPage-DRPavCdU.js} +4 -4
- package/dist/dashboard/assets/StudioPage-DRPavCdU.js.gz +0 -0
- package/dist/dashboard/assets/ToolIcon-CfeLA-Z_.js +1 -0
- package/dist/dashboard/assets/ToolIcon-CfeLA-Z_.js.gz +0 -0
- package/dist/dashboard/assets/UsagePage-B7M7LvMM.js +56 -0
- package/dist/dashboard/assets/UsagePage-B7M7LvMM.js.gz +0 -0
- package/dist/dashboard/assets/api-keys-KvX83mRe.js +1 -0
- package/dist/dashboard/assets/api-keys-KvX83mRe.js.gz +0 -0
- package/dist/dashboard/assets/app-DRnQLhsc.js +9 -0
- package/dist/dashboard/assets/app-DRnQLhsc.js.gz +0 -0
- package/dist/dashboard/assets/app-mweRcsKp.css +2 -0
- package/dist/dashboard/assets/app-mweRcsKp.css.gz +0 -0
- package/dist/dashboard/assets/assert-CidQVoNo.js +1 -0
- package/dist/dashboard/assets/assert-CidQVoNo.js.gz +0 -0
- package/dist/dashboard/assets/{badge-D9CS6dZk.js → badge-BaX2GTrn.js} +1 -1
- package/dist/dashboard/assets/badge-BaX2GTrn.js.gz +0 -0
- package/dist/dashboard/assets/{banner-DympBNq4.js → banner-DFH4Bkte.js} +1 -1
- package/dist/dashboard/assets/banner-DFH4Bkte.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-ibRWU_uT.js → card-CxDw0lK6.js} +1 -1
- package/dist/dashboard/assets/card-CxDw0lK6.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/circle-question-mark-Cz4un8sH.js +1 -0
- package/dist/dashboard/assets/circle-question-mark-Cz4un8sH.js.gz +0 -0
- package/dist/dashboard/assets/cli-tools-Bwv5-zGZ.js +1 -0
- package/dist/dashboard/assets/cli-tools-Bwv5-zGZ.js.gz +0 -0
- package/dist/dashboard/assets/{clipboard-button-DJm-9pz7.js → clipboard-button-DfS1ntiq.js} +1 -1
- package/dist/dashboard/assets/clipboard-button-DfS1ntiq.js.gz +0 -0
- package/dist/dashboard/assets/dialog-BK-NRr5u.js +1 -0
- package/dist/dashboard/assets/dialog-BK-NRr5u.js.gz +0 -0
- package/dist/dashboard/assets/{drawer-CqGYeOrd.js → drawer-QqPul6sC.js} +1 -1
- package/dist/dashboard/assets/drawer-QqPul6sC.js.gz +0 -0
- package/dist/dashboard/assets/entry-BMlYJVFj.js +1 -0
- package/dist/dashboard/assets/entry-BMlYJVFj.js.gz +0 -0
- package/dist/dashboard/assets/entry-D6WvojeD.js +4 -0
- package/dist/dashboard/assets/entry-D6WvojeD.js.gz +0 -0
- package/dist/dashboard/assets/entry-Dmx7gBiN.js +1 -0
- package/dist/dashboard/assets/entry-Dmx7gBiN.js.gz +0 -0
- package/dist/dashboard/assets/{formatters-D-MTJxMr.js → formatters-u7JPB5BX.js} +1 -1
- package/dist/dashboard/assets/formatters-u7JPB5BX.js.gz +0 -0
- package/dist/dashboard/assets/house-h9AZlJuT.js +1 -0
- package/dist/dashboard/assets/house-h9AZlJuT.js.gz +0 -0
- package/dist/dashboard/assets/{index-DBNPOfhV.js → index-Ko4dLRnV.js} +2 -2
- package/dist/dashboard/assets/index-Ko4dLRnV.js.gz +0 -0
- package/dist/dashboard/assets/{inline-BT0zntEr.js → inline-CHJQwxLa.js} +1 -1
- package/dist/dashboard/assets/inline-CHJQwxLa.js.gz +0 -0
- package/dist/dashboard/assets/{input-Da2ZViWg.js → input-BlmlizVV.js} +1 -1
- package/dist/dashboard/assets/input-BlmlizVV.js.gz +0 -0
- package/dist/dashboard/assets/{layout-BXNeLw6M.js → layout-Bz93I-yE.js} +1 -1
- package/dist/dashboard/assets/layout-Bz93I-yE.js.gz +0 -0
- package/dist/dashboard/assets/{list-row-BycOrrIV.js → list-row-Ml16KCfu.js} +1 -1
- package/dist/dashboard/assets/list-row-Ml16KCfu.js.gz +0 -0
- package/dist/dashboard/assets/live-7_QpnYGu.js +1 -0
- package/dist/dashboard/assets/live-7_QpnYGu.js.gz +0 -0
- package/dist/dashboard/assets/{mutation-Rr0TIvcj.js → mutation-GU7XdEjz.js} +1 -1
- package/dist/dashboard/assets/mutation-GU7XdEjz.js.gz +0 -0
- package/dist/dashboard/assets/network-CuMDaTzT.js +1 -0
- package/dist/dashboard/assets/network-CuMDaTzT.js.gz +0 -0
- package/dist/dashboard/assets/numbers-CoqpaDMx.js +2 -0
- package/dist/dashboard/assets/numbers-CoqpaDMx.js.gz +0 -0
- package/dist/dashboard/assets/pagination-B5aOoweZ.js +1 -0
- package/dist/dashboard/assets/pagination-B5aOoweZ.js.gz +0 -0
- package/dist/dashboard/assets/providers/zai.webp +0 -0
- package/dist/dashboard/assets/providers/zcode.webp +0 -0
- package/dist/dashboard/assets/{query-keys-BloKtaXJ.js → query-keys-YSoQOUh6.js} +1 -1
- package/dist/dashboard/assets/{query-keys-BloKtaXJ.js.gz → query-keys-YSoQOUh6.js.gz} +0 -0
- package/dist/dashboard/assets/quota-DJ1QlAOq.js +1 -0
- package/dist/dashboard/assets/quota-DJ1QlAOq.js.gz +0 -0
- package/dist/dashboard/assets/routing-fnCsxgNO.js +1 -0
- package/dist/dashboard/assets/routing-fnCsxgNO.js.gz +0 -0
- package/dist/dashboard/assets/{select-BIYIBkMU.js → select-BHqpd-bg.js} +2 -2
- package/dist/dashboard/assets/select-BHqpd-bg.js.gz +0 -0
- package/dist/dashboard/assets/settings-BxslsErn.js +1 -0
- package/dist/dashboard/assets/settings-BxslsErn.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-DfgnFDWY.js → stack-j7cXjgYX.js} +1 -1
- package/dist/dashboard/assets/stack-j7cXjgYX.js.gz +0 -0
- package/dist/dashboard/assets/{state-CkfdYWel.js → state-DHmEnLa2.js} +1 -1
- package/dist/dashboard/assets/state-DHmEnLa2.js.gz +0 -0
- package/dist/dashboard/assets/{switch-SYm237HG.js → switch-DmZcyTIC.js} +1 -1
- package/dist/dashboard/assets/switch-DmZcyTIC.js.gz +0 -0
- package/dist/dashboard/assets/{useMutation-BQqCRNIi.js → useMutation-CbCP4w1o.js} +1 -1
- 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/index.html +2 -2
- package/dist/dashboard/index.html.gz +0 -0
- package/dist/dashboard/precompressed-assets.json +60 -59
- 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/full-postgres/0042_add_telemetry_degenerate_stop.sql +14 -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/migrations/lite-sqlite3/0042_add_telemetry_degenerate_stop.sql +12 -0
- package/package.json +4 -6
- package/scripts/cli/update.ts +15 -41
- package/src/boot/app.ts +58 -2
- package/src/boot/dependencies.ts +794 -732
- package/src/boot/lifecycle.ts +11 -12
- package/src/config/cooldowns.ts +34 -55
- package/src/config/network.ts +1 -1
- package/src/config/package-paths.ts +1 -1
- package/src/config/providers.ts +19 -14
- package/src/config/resources.ts +0 -5
- package/src/config/runtime.ts +2 -5
- package/src/config/spec.ts +33 -6
- package/src/config/usage.ts +27 -0
- package/src/console/api-keys/ban-constants.ts +38 -0
- package/src/console/api-keys/contracts.ts +71 -62
- package/src/console/api-keys/routes.ts +56 -24
- package/src/console/auth/access.ts +4 -4
- package/src/console/auth/account-reset.ts +1 -1
- 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 +37 -31
- 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 +9 -9
- package/src/console/backup/export-endpoint.ts +5 -6
- package/src/console/backup/nine-router.ts +1 -7
- package/src/console/backup/routes.ts +29 -33
- 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 +43 -299
- package/src/console/cli-tools/fs-ops.ts +29 -0
- package/src/console/cli-tools/injectors/claude.ts +3 -3
- package/src/console/cli-tools/injectors/codex.ts +181 -181
- package/src/console/cli-tools/injectors/driver.ts +150 -247
- package/src/console/cli-tools/injectors/kilo.ts +146 -21
- package/src/console/cli-tools/injectors/opencode.ts +176 -153
- package/src/console/cli-tools/routes.ts +7 -1
- package/src/console/cli-tools/service.ts +8 -7
- package/src/console/cli-tools/store.ts +2 -2
- package/src/console/console-router.ts +32 -0
- package/src/console/dashboard-assets.ts +9 -9
- package/src/console/domain-registration.ts +16 -2
- 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 +7 -1
- package/src/console/observability/live.ts +31 -18
- package/src/console/observability/logs.ts +1 -1
- package/src/console/observability/sse.ts +62 -8
- package/src/console/observability/store.ts +23 -4
- package/src/console/providers/catalog/catalog-projections.ts +1 -1
- package/src/console/providers/catalog/contracts.ts +39 -0
- package/src/console/providers/catalog/model-operations.ts +1 -1
- package/src/console/providers/catalog/provider-operations.ts +95 -17
- package/src/console/providers/catalog/public-model-store.ts +0 -0
- package/src/console/providers/catalog/routes.ts +27 -3
- package/src/console/providers/catalog/store.ts +147 -8
- package/src/console/providers/detail/routes.ts +1 -1
- package/src/console/providers/oauth/callback-listener.ts +100 -18
- package/src/console/providers/oauth/routes.ts +92 -13
- 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 +259 -66
- 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/pools/contracts.ts +2 -2
- package/src/console/routing/pools/import-parse.ts +3 -3
- package/src/console/routing/pools/relay-deploy.ts +3 -3
- package/src/console/settings/contracts.ts +29 -2
- package/src/console/settings/store.ts +20 -0
- package/src/console/share/share-router.ts +100 -32
- package/src/console/share/share-stats.ts +11 -13
- 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 +4 -4
- 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 +252 -97
- 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 +1 -1
- package/src/network/pool/agent.ts +7 -6
- package/src/network/pool/byte-accounting.ts +1 -1
- package/src/network/pool/resolver.ts +16 -12
- package/src/network/pool/selector.ts +150 -136
- package/src/network/pool-health-machine.ts +1 -1
- package/src/network/rate-limit-verdict.ts +1 -1
- package/src/network/retry.ts +1 -1
- package/src/network/ssrf.ts +20 -71
- package/src/observability/event-log.ts +9 -2
- package/src/observability/event-query.ts +61 -291
- 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 +19 -3
- package/src/observability/telemetry-reconciliation.ts +3 -3
- 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 +3 -3
- package/src/persistence/dialect.ts +5 -1
- package/src/persistence/readiness.ts +1 -1
- package/src/persistence/redis.ts +1 -1
- package/src/persistence/schema.ts +121 -40
- package/src/persistence/shared-cache.ts +2 -2
- package/src/persistence/sort-order.ts +1 -1
- package/src/persistence/stores/api-key-store.ts +29 -2
- package/src/persistence/stores/share-store.ts +20 -8
- 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 +6 -10
- package/src/protocol/dsml.ts +8 -125
- package/src/protocol/image-clamp.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 +25 -10
- package/src/protocol/response/codex.ts +1 -1
- package/src/protocol/response/messages.ts +1 -1
- package/src/protocol/response/omp-tool-call-markup.ts +1 -1
- package/src/protocol/response/responses.ts +1 -1
- package/src/protocol/sse-decoder.ts +50 -1
- 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 +6 -6
- 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/providers/adapters/compatible-adapter.ts +71 -4
- 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/bundled-discovery-providers.ts +6 -30
- package/src/providers/configured-openai-providers.ts +82 -97
- package/src/providers/default-registry.ts +35 -37
- 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 +48 -13
- package/src/providers/discovery/probing-service.ts +6 -8
- package/src/providers/integrations/agentrouter/agentrouter.ts +12 -2
- package/src/providers/integrations/antigravity/antigravity-oauth.ts +0 -1
- package/src/providers/integrations/antigravity/antigravity-protocol.ts +88 -28
- package/src/providers/integrations/antigravity/antigravity-quota.ts +18 -6
- package/src/providers/integrations/antigravity/antigravity.ts +22 -13
- package/src/providers/integrations/buddy/buddy-catalog-shared.ts +1 -1
- 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-identity.ts +86 -0
- 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 +4 -15
- package/src/providers/integrations/buddy/codebuddy/shared.ts +30 -9
- package/src/providers/integrations/buddy/workbuddy/provider.ts +5 -9
- package/src/providers/integrations/buddy/workbuddy/shared.ts +21 -3
- package/src/providers/integrations/claude/claude-cch.ts +148 -148
- package/src/providers/integrations/claude/fallback-credit.ts +3 -7
- package/src/providers/integrations/cline/cline.ts +1 -1
- package/src/providers/integrations/codex/codex-device-code.ts +101 -101
- package/src/providers/integrations/codex/codex-oauth.ts +0 -1
- package/src/providers/integrations/commandcode/commandcode.ts +75 -115
- package/src/providers/integrations/commandcode/quota.ts +131 -51
- package/src/providers/integrations/cursor/cursor-http2.ts +0 -3
- 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 +35 -3
- 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 +9 -9
- package/src/providers/integrations/github/github-discovery.ts +70 -12
- package/src/providers/integrations/github/github-oauth.ts +184 -14
- package/src/providers/integrations/github/github.ts +134 -26
- 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 +86 -36
- package/src/providers/integrations/kilo/kilo-oauth.ts +1 -1
- 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 +80 -68
- package/src/providers/integrations/muse/muse-oauth.ts +0 -1
- package/src/providers/integrations/muse/muse-quota.ts +0 -4
- package/src/providers/integrations/opencode/fingerprint.ts +7 -5
- package/src/providers/integrations/opencode/provider.ts +17 -24
- package/src/providers/integrations/qoder/qoder-catalog.ts +94 -11
- 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 +10 -31
- package/src/providers/integrations/qoder/qoder-sse.ts +159 -0
- package/src/providers/integrations/qoder/qoder-umid.ts +21 -25
- package/src/providers/integrations/qoder/qoder-virtual.ts +12 -0
- package/src/providers/integrations/qoder/qoder.ts +422 -71
- 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/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 +51 -8
- package/src/providers/integrations/xai/xai-oauth.ts +5 -5
- 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 +198 -133
- package/src/providers/operations/account-health-service.ts +31 -39
- package/src/providers/operations/account-reset-service.ts +58 -1
- package/src/providers/operations/byok-wire-profile.ts +19 -15
- 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 +18 -2
- package/src/providers/operations/provider-credential-service.ts +19 -2
- package/src/providers/provider-contracts.ts +18 -7
- 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-usage.ts +50 -19
- package/src/providers/quota/cache.ts +29 -0
- package/src/providers/quota/quota-contracts.ts +4 -0
- package/src/providers/quota/refresh.ts +27 -4
- package/src/providers/quota/snapshot.ts +94 -0
- package/src/providers/search/search-provider.ts +1 -3
- package/src/providers/search/search-providers.ts +2 -1
- package/src/security/abuse.ts +4 -4
- package/src/security/admission/service.ts +13 -6
- package/src/security/admission/ttl.ts +61 -61
- package/src/security/api-key-auth.ts +17 -3
- 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/invoke-guard.ts +47 -0
- package/src/transport/contracts.ts +13 -4
- package/src/transport/dispatch/attempt-finalize.ts +70 -22
- package/src/transport/dispatch/attempt-loop.ts +22 -0
- package/src/transport/dispatch/capture-policy.ts +34 -37
- package/src/transport/dispatch/empty-stream.ts +23 -20
- package/src/transport/dispatch/generation.ts +25 -45
- package/src/transport/dispatch/native-shared.ts +127 -0
- package/src/transport/dispatch/proxy-request.ts +3 -1
- package/src/transport/dispatch/responses-compact.ts +25 -46
- package/src/transport/dispatch/streaming/encoder.ts +18 -72
- package/src/transport/dispatch/streaming/finalize.ts +2 -2
- 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 +20 -48
- package/src/transport/dispatch/token-count.ts +41 -38
- package/src/transport/dispatch/websearch.ts +19 -45
- package/src/transport/drain-endpoint.ts +1 -1
- package/src/transport/failure-policy.ts +21 -1
- package/src/transport/guards/auth-guard.ts +0 -6
- package/src/transport/guards/body-policy.ts +3 -3
- package/src/transport/guards/error-lifecycle.ts +4 -0
- package/src/transport/guards/headroom-guard.ts +1 -1
- package/src/transport/guards/pipeline.ts +1 -1
- package/src/transport/guards/request-context.ts +12 -17
- package/src/transport/request/preparer.ts +286 -7
- 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 +7 -13
- 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 +17 -18
- package/src/transport/routing/route-model.ts +126 -33
- package/src/transport/routing/router.ts +159 -37
- package/src/transport/shutdown-notice.ts +2 -2
- 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 +2 -2
- package/src/transport/surface/content-parts.ts +1 -1
- package/src/transport/surface/dialects.ts +2 -2
- package/src/transport/surface/messages/parse.ts +3 -3
- package/src/transport/surface/reasoning-summary.ts +9 -14
- 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 +431 -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-ChG5svFb.js +0 -1
- package/dist/dashboard/assets/BannedPage-ChG5svFb.js.gz +0 -0
- package/dist/dashboard/assets/CliToolDetailPage-BIcWQun7.js +0 -1
- package/dist/dashboard/assets/CliToolDetailPage-BIcWQun7.js.gz +0 -0
- package/dist/dashboard/assets/CliToolsPage-Bf2VelDe.js +0 -1
- package/dist/dashboard/assets/CliToolsPage-Bf2VelDe.js.gz +0 -0
- package/dist/dashboard/assets/CombosPage-DCgm5g6g.js +0 -1
- package/dist/dashboard/assets/CombosPage-DCgm5g6g.js.gz +0 -0
- package/dist/dashboard/assets/ConsoleLogPage-a8mD0QF1.js +0 -1
- package/dist/dashboard/assets/ConsoleLogPage-a8mD0QF1.js.gz +0 -0
- package/dist/dashboard/assets/CustomizationPage-ggeMSjte.js +0 -1
- package/dist/dashboard/assets/CustomizationPage-ggeMSjte.js.gz +0 -0
- package/dist/dashboard/assets/HealthEventsModal-DzSWzE_j.js +0 -1
- package/dist/dashboard/assets/HealthEventsModal-DzSWzE_j.js.gz +0 -0
- package/dist/dashboard/assets/LoginPage-U6AKaJcF.js +0 -1
- package/dist/dashboard/assets/LoginPage-U6AKaJcF.js.gz +0 -0
- package/dist/dashboard/assets/ModelPicker-BMS2t8BA.js.gz +0 -0
- package/dist/dashboard/assets/OverviewPage-D2D4IiHl.js +0 -1
- package/dist/dashboard/assets/OverviewPage-D2D4IiHl.js.gz +0 -0
- package/dist/dashboard/assets/ProviderDetailPage-CrNf7j_X.js +0 -5
- package/dist/dashboard/assets/ProviderDetailPage-CrNf7j_X.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-BSDbquc1.js +0 -1
- package/dist/dashboard/assets/ProvidersPage-BSDbquc1.js.gz +0 -0
- package/dist/dashboard/assets/ProxyPage-lsrx7NYg.js.gz +0 -0
- package/dist/dashboard/assets/QuotaPage-L0skzML8.js +0 -1
- package/dist/dashboard/assets/QuotaPage-L0skzML8.js.gz +0 -0
- package/dist/dashboard/assets/SettingsPage-CmAbjRHW.js +0 -1
- package/dist/dashboard/assets/SettingsPage-CmAbjRHW.js.gz +0 -0
- package/dist/dashboard/assets/SetupPage-f0DE1h0-.js +0 -1
- package/dist/dashboard/assets/SetupPage-f0DE1h0-.js.gz +0 -0
- package/dist/dashboard/assets/SortableList-ClzpwyET.js +0 -1
- package/dist/dashboard/assets/SortableList-ClzpwyET.js.gz +0 -0
- package/dist/dashboard/assets/StudioPage-Cq5tW7hW.js.gz +0 -0
- package/dist/dashboard/assets/ToolIcon-K1ckcDKg.js +0 -1
- package/dist/dashboard/assets/ToolIcon-K1ckcDKg.js.gz +0 -0
- package/dist/dashboard/assets/UsagePage-Dfc9rWQn.js +0 -56
- package/dist/dashboard/assets/UsagePage-Dfc9rWQn.js.gz +0 -0
- package/dist/dashboard/assets/api-keys-C38iXoO4.js +0 -1
- package/dist/dashboard/assets/api-keys-C38iXoO4.js.gz +0 -0
- package/dist/dashboard/assets/app-BayTTy01.js +0 -9
- package/dist/dashboard/assets/app-BayTTy01.js.gz +0 -0
- package/dist/dashboard/assets/app-a159k0ub.css +0 -2
- package/dist/dashboard/assets/app-a159k0ub.css.gz +0 -0
- package/dist/dashboard/assets/assert-DbRA8EG2.js +0 -15
- package/dist/dashboard/assets/assert-DbRA8EG2.js.gz +0 -0
- package/dist/dashboard/assets/badge-D9CS6dZk.js.gz +0 -0
- package/dist/dashboard/assets/banner-DympBNq4.js.gz +0 -0
- package/dist/dashboard/assets/card-ibRWU_uT.js.gz +0 -0
- package/dist/dashboard/assets/cli-tools-63qBGaRw.js +0 -1
- package/dist/dashboard/assets/cli-tools-63qBGaRw.js.gz +0 -0
- package/dist/dashboard/assets/clipboard-button-DJm-9pz7.js.gz +0 -0
- package/dist/dashboard/assets/dialog-8fiE6tec.js +0 -1
- package/dist/dashboard/assets/dialog-8fiE6tec.js.gz +0 -0
- package/dist/dashboard/assets/drawer-CqGYeOrd.js.gz +0 -0
- package/dist/dashboard/assets/entry-BSAsYsmV.js +0 -1
- package/dist/dashboard/assets/entry-BSAsYsmV.js.gz +0 -0
- package/dist/dashboard/assets/entry-CiIQULZD.js +0 -4
- package/dist/dashboard/assets/entry-CiIQULZD.js.gz +0 -0
- package/dist/dashboard/assets/entry-Daz0lJ-W.js +0 -1
- package/dist/dashboard/assets/entry-Daz0lJ-W.js.gz +0 -0
- package/dist/dashboard/assets/formatters-D-MTJxMr.js.gz +0 -0
- package/dist/dashboard/assets/github-badge-CPK47xQx.js +0 -1
- package/dist/dashboard/assets/github-badge-CPK47xQx.js.gz +0 -0
- package/dist/dashboard/assets/index-DBNPOfhV.js.gz +0 -0
- package/dist/dashboard/assets/inline-BT0zntEr.js.gz +0 -0
- package/dist/dashboard/assets/input-Da2ZViWg.js.gz +0 -0
- package/dist/dashboard/assets/layout-BXNeLw6M.js.gz +0 -0
- package/dist/dashboard/assets/list-row-BycOrrIV.js.gz +0 -0
- package/dist/dashboard/assets/live-DCQNZpF7.js +0 -1
- package/dist/dashboard/assets/live-DCQNZpF7.js.gz +0 -0
- package/dist/dashboard/assets/mutation-Rr0TIvcj.js.gz +0 -0
- package/dist/dashboard/assets/network-9Yj2ZyLo.js +0 -1
- package/dist/dashboard/assets/network-9Yj2ZyLo.js.gz +0 -0
- package/dist/dashboard/assets/numbers-CEagj6ZZ.js +0 -2
- package/dist/dashboard/assets/numbers-CEagj6ZZ.js.gz +0 -0
- package/dist/dashboard/assets/providers/zai-coding-plan.svg +0 -6
- package/dist/dashboard/assets/providers/zai-coding-plan.svg.gz +0 -0
- package/dist/dashboard/assets/quota-Caw7wqci.js +0 -1
- package/dist/dashboard/assets/quota-Caw7wqci.js.gz +0 -0
- package/dist/dashboard/assets/routing-CO9zCUus.js +0 -1
- package/dist/dashboard/assets/routing-CO9zCUus.js.gz +0 -0
- package/dist/dashboard/assets/select-BIYIBkMU.js.gz +0 -0
- package/dist/dashboard/assets/settings-jS3-PNSA.js +0 -1
- package/dist/dashboard/assets/settings-jS3-PNSA.js.gz +0 -0
- package/dist/dashboard/assets/stack-DfgnFDWY.js.gz +0 -0
- package/dist/dashboard/assets/state-CkfdYWel.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-SYm237HG.js.gz +0 -0
- package/dist/dashboard/assets/useMutation-BQqCRNIi.js.gz +0 -0
- package/src/console/cli-tools/injectors/cline.ts +0 -110
- package/src/console/cli-tools/injectors/copilot.ts +0 -108
- package/src/console/cli-tools/injectors/cowork.ts +0 -64
- package/src/console/cli-tools/injectors/deepseek-tui.ts +0 -85
- package/src/console/cli-tools/injectors/droid.ts +0 -96
- package/src/console/cli-tools/injectors/grok-build.ts +0 -70
- package/src/console/cli-tools/injectors/hermes.ts +0 -101
- package/src/console/cli-tools/injectors/jcode.ts +0 -115
- package/src/console/cli-tools/injectors/openclaw.ts +0 -161
- 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/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,75 +1,77 @@
|
|
|
1
1
|
{
|
|
2
|
-
"count":
|
|
2
|
+
"count": 119,
|
|
3
3
|
"assets": [
|
|
4
|
-
"assets/
|
|
5
|
-
"assets/
|
|
6
|
-
"assets/
|
|
7
|
-
"assets/
|
|
8
|
-
"assets/
|
|
9
|
-
"assets/
|
|
10
|
-
"assets/
|
|
11
|
-
"assets/
|
|
12
|
-
"assets/LoginPage-
|
|
13
|
-
"assets/ModelPicker-
|
|
14
|
-
"assets/OverviewPage-
|
|
15
|
-
"assets/ProviderDetailPage-
|
|
16
|
-
"assets/ProviderIcon-
|
|
17
|
-
"assets/ProvidersPage-
|
|
18
|
-
"assets/ProxyPage-
|
|
19
|
-
"assets/QuotaPage-
|
|
20
|
-
"assets/SettingsPage-
|
|
21
|
-
"assets/SetupPage-
|
|
22
|
-
"assets/
|
|
23
|
-
"assets/
|
|
24
|
-
"assets/
|
|
25
|
-
"assets/
|
|
26
|
-
"assets/
|
|
27
|
-
"assets/app-
|
|
28
|
-
"assets/app-a159k0ub.css",
|
|
4
|
+
"assets/BannedPage-B1N603cM.js",
|
|
5
|
+
"assets/CliToolDetailPage-9q4_4NoK.js",
|
|
6
|
+
"assets/CliToolsPage-DwshGtK-.js",
|
|
7
|
+
"assets/CombosPage-D762MIkp.js",
|
|
8
|
+
"assets/ConsoleLogPage-KRYjHZsX.js",
|
|
9
|
+
"assets/CustomizationPage-DXsxk5uM.js",
|
|
10
|
+
"assets/HealthEventsModal-BEjAjD4F.js",
|
|
11
|
+
"assets/InjectSystemPromptPanel-d5v3K_Yc.js",
|
|
12
|
+
"assets/LoginPage-Ccv4tjNS.js",
|
|
13
|
+
"assets/ModelPicker-C6WlpU5E.js",
|
|
14
|
+
"assets/OverviewPage-DN9fYNWA.js",
|
|
15
|
+
"assets/ProviderDetailPage-BY0ieUgz.js",
|
|
16
|
+
"assets/ProviderIcon-jjqXJDA3.js",
|
|
17
|
+
"assets/ProvidersPage-DNsbfea2.js",
|
|
18
|
+
"assets/ProxyPage-DxjvUzSD.js",
|
|
19
|
+
"assets/QuotaPage-OaHScjpX.js",
|
|
20
|
+
"assets/SettingsPage-BW4AKj2H.js",
|
|
21
|
+
"assets/SetupPage-44BZrxFC.js",
|
|
22
|
+
"assets/StudioPage-DRPavCdU.js",
|
|
23
|
+
"assets/ToolIcon-CfeLA-Z_.js",
|
|
24
|
+
"assets/UsagePage-B7M7LvMM.js",
|
|
25
|
+
"assets/api-keys-KvX83mRe.js",
|
|
26
|
+
"assets/app-DRnQLhsc.js",
|
|
27
|
+
"assets/app-mweRcsKp.css",
|
|
29
28
|
"assets/arrow-left-CpBxkoxI.js",
|
|
30
29
|
"assets/arrow-right-Dl5yKnp8.js",
|
|
31
30
|
"assets/arrow-up-59ms1iiT.js",
|
|
32
|
-
"assets/assert-
|
|
31
|
+
"assets/assert-CidQVoNo.js",
|
|
33
32
|
"assets/backup-file-gdKIlg8U.js",
|
|
34
|
-
"assets/badge-
|
|
35
|
-
"assets/banner-
|
|
33
|
+
"assets/badge-BaX2GTrn.js",
|
|
34
|
+
"assets/banner-DFH4Bkte.js",
|
|
36
35
|
"assets/brain-Cwed_72z.js",
|
|
37
|
-
"assets/card-
|
|
36
|
+
"assets/card-CxDw0lK6.js",
|
|
37
|
+
"assets/chevron-left-Bf6CaTSJ.js",
|
|
38
38
|
"assets/chevron-right-BXIy5l3h.js",
|
|
39
39
|
"assets/circle-alert-CntYHV5v.js",
|
|
40
40
|
"assets/circle-check-BU3v_mFW.js",
|
|
41
|
-
"assets/
|
|
42
|
-
"assets/
|
|
41
|
+
"assets/circle-question-mark-Cz4un8sH.js",
|
|
42
|
+
"assets/cli-tools-Bwv5-zGZ.js",
|
|
43
|
+
"assets/clipboard-button-DfS1ntiq.js",
|
|
43
44
|
"assets/database-Dz9N3zGd.js",
|
|
44
|
-
"assets/dialog-
|
|
45
|
+
"assets/dialog-BK-NRr5u.js",
|
|
45
46
|
"assets/dialog-actions-B1axpEg7.js",
|
|
46
47
|
"assets/download-dRFo5_Wu.js",
|
|
47
|
-
"assets/drawer-
|
|
48
|
-
"assets/entry-
|
|
49
|
-
"assets/entry-
|
|
50
|
-
"assets/entry-
|
|
48
|
+
"assets/drawer-QqPul6sC.js",
|
|
49
|
+
"assets/entry-BMlYJVFj.js",
|
|
50
|
+
"assets/entry-D6WvojeD.js",
|
|
51
|
+
"assets/entry-Dmx7gBiN.js",
|
|
51
52
|
"assets/eye-C_hawfH4.js",
|
|
52
53
|
"assets/eye-off-Bk5g2luF.js",
|
|
53
54
|
"assets/fingerprint-pattern-BWuHtbW4.js",
|
|
54
|
-
"assets/formatters-
|
|
55
|
+
"assets/formatters-u7JPB5BX.js",
|
|
55
56
|
"assets/gauge-BbIMy7MB.js",
|
|
56
|
-
"assets/
|
|
57
|
+
"assets/house-h9AZlJuT.js",
|
|
57
58
|
"assets/image-BPaouViG.js",
|
|
58
|
-
"assets/index-
|
|
59
|
-
"assets/inline-
|
|
60
|
-
"assets/input-
|
|
59
|
+
"assets/index-Ko4dLRnV.js",
|
|
60
|
+
"assets/inline-CHJQwxLa.js",
|
|
61
|
+
"assets/input-BlmlizVV.js",
|
|
61
62
|
"assets/jsx-runtime-CXUMngI_.js",
|
|
62
63
|
"assets/key-round-UkavsGxp.js",
|
|
63
64
|
"assets/layers-2-glBbjl.js",
|
|
64
|
-
"assets/layout-
|
|
65
|
-
"assets/list-row-
|
|
66
|
-
"assets/live-
|
|
65
|
+
"assets/layout-Bz93I-yE.js",
|
|
66
|
+
"assets/list-row-Ml16KCfu.js",
|
|
67
|
+
"assets/live-7_QpnYGu.js",
|
|
67
68
|
"assets/log-in-BmRjy60c.js",
|
|
68
69
|
"assets/message-circle-CCxGwRvv.js",
|
|
69
70
|
"assets/minimize-2-BTmMTK4o.js",
|
|
70
|
-
"assets/mutation-
|
|
71
|
-
"assets/network-
|
|
72
|
-
"assets/numbers-
|
|
71
|
+
"assets/mutation-GU7XdEjz.js",
|
|
72
|
+
"assets/network-CuMDaTzT.js",
|
|
73
|
+
"assets/numbers-CoqpaDMx.js",
|
|
74
|
+
"assets/pagination-B5aOoweZ.js",
|
|
73
75
|
"assets/pencil-768ysRAr.js",
|
|
74
76
|
"assets/plus-DIdX_g-x.js",
|
|
75
77
|
"assets/power-off-Yjw9GMJh.js",
|
|
@@ -91,23 +93,22 @@
|
|
|
91
93
|
"assets/providers/openai-light.svg",
|
|
92
94
|
"assets/providers/parallel.svg",
|
|
93
95
|
"assets/providers/tokenharbor.svg",
|
|
94
|
-
"assets/
|
|
95
|
-
"assets/
|
|
96
|
-
"assets/quota-Caw7wqci.js",
|
|
96
|
+
"assets/query-keys-YSoQOUh6.js",
|
|
97
|
+
"assets/quota-DJ1QlAOq.js",
|
|
97
98
|
"assets/refresh-cw-BqJFk4sU.js",
|
|
98
99
|
"assets/rotate-ccw-CufcqITi.js",
|
|
99
100
|
"assets/route-CNSNj9Zm.js",
|
|
100
|
-
"assets/routing-
|
|
101
|
+
"assets/routing-fnCsxgNO.js",
|
|
101
102
|
"assets/scaling-nWE4Cx8f.js",
|
|
102
103
|
"assets/search-JOKus9rb.js",
|
|
103
|
-
"assets/select-
|
|
104
|
+
"assets/select-BHqpd-bg.js",
|
|
104
105
|
"assets/settings-2-Ds9DQp0t.js",
|
|
105
|
-
"assets/settings-
|
|
106
|
+
"assets/settings-BxslsErn.js",
|
|
107
|
+
"assets/shield-BMQNxORh.js",
|
|
106
108
|
"assets/shield-check-DVS0Foqh.js",
|
|
107
|
-
"assets/stack-
|
|
108
|
-
"assets/state-
|
|
109
|
-
"assets/
|
|
110
|
-
"assets/switch-SYm237HG.js",
|
|
109
|
+
"assets/stack-j7cXjgYX.js",
|
|
110
|
+
"assets/state-DHmEnLa2.js",
|
|
111
|
+
"assets/switch-DmZcyTIC.js",
|
|
111
112
|
"assets/terminal-0_IjPWTk.js",
|
|
112
113
|
"assets/tokens-COzario9.js",
|
|
113
114
|
"assets/trash-Cppn5c3R.js",
|
|
@@ -115,7 +116,7 @@
|
|
|
115
116
|
"assets/use-modal-focus-By7oJoGd.js",
|
|
116
117
|
"assets/use-reduced-motion-C4B0R6Sz.js",
|
|
117
118
|
"assets/use-timeout-BwcBBRrT.js",
|
|
118
|
-
"assets/useMutation-
|
|
119
|
+
"assets/useMutation-CbCP4w1o.js",
|
|
119
120
|
"assets/wrench-B6E1oEuY.js",
|
|
120
121
|
"assets/zap-C4EeVW4q.js",
|
|
121
122
|
"index.html"
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
-- Tenant system-prompt injection: presets + combo/alias scopes + scope refs.
|
|
2
|
+
--
|
|
3
|
+
-- Legacy shape: `providers` (followGlobal + optional inline setting), `models`
|
|
4
|
+
-- (providerId::modelId -> setting). New shape: every scope map stores a
|
|
5
|
+
-- reference, and a named preset collection is introduced. Legacy rows remain
|
|
6
|
+
-- readable (the store's defensive reader normalizes them); this migration only
|
|
7
|
+
-- adds the new columns so the new shapes can be written.
|
|
8
|
+
ALTER TABLE "tenant_system_prompts" ADD COLUMN "presets" jsonb NOT NULL DEFAULT '{}';
|
|
9
|
+
ALTER TABLE "tenant_system_prompts" ADD COLUMN "combos" jsonb NOT NULL DEFAULT '{}';
|
|
10
|
+
ALTER TABLE "tenant_system_prompts" ADD COLUMN "aliases" jsonb NOT NULL DEFAULT '{}';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
-- Last successful quota read, persisted as JSON so an account's balance
|
|
2
|
+
-- survives a process restart (the in-process quota cache does not).
|
|
3
|
+
--
|
|
4
|
+
-- Only a successful read is stored; a failed fetch leaves the previous
|
|
5
|
+
-- snapshot in place, mirroring `quota_plan`.
|
|
6
|
+
ALTER TABLE "provider_accounts"
|
|
7
|
+
ADD COLUMN IF NOT EXISTS "quota_snapshot" jsonb;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
-- Indexes for the console's per-provider and per-model telemetry aggregates.
|
|
2
|
+
--
|
|
3
|
+
-- The provider usage matrix and `breakdownTelemetry("provider")` filter on
|
|
4
|
+
-- `tenant_id` + `provider_id` and aggregate over `created_at`; the top-model
|
|
5
|
+
-- breakdown does the same for `requested_model`. These queries used the
|
|
6
|
+
-- tenant-range index, which scanned every event in the window for one
|
|
7
|
+
-- provider/model card. Each new index turns the card into an index-only range
|
|
8
|
+
-- scan.
|
|
9
|
+
CREATE INDEX IF NOT EXISTS "telemetry_events_tenant_provider_created_idx"
|
|
10
|
+
ON "telemetry_events" USING btree ("tenant_id", "provider_id", "created_at");
|
|
11
|
+
|
|
12
|
+
CREATE INDEX IF NOT EXISTS "telemetry_events_tenant_model_created_idx"
|
|
13
|
+
ON "telemetry_events" USING btree ("tenant_id", "requested_model", "created_at");
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
-- `daily_checkin_ledger.account_id` referenced `provider_accounts.id` only by
|
|
2
|
+
-- convention; deleting an account left orphan ledger rows behind. This adds the
|
|
3
|
+
-- missing FK with `ON DELETE CASCADE` so a deleted account's daily check-in
|
|
4
|
+
-- markers go with it.
|
|
5
|
+
ALTER TABLE "daily_checkin_ledger"
|
|
6
|
+
ADD CONSTRAINT "daily_checkin_ledger_account_id_provider_accounts_id_fk"
|
|
7
|
+
FOREIGN KEY ("account_id") REFERENCES "provider_accounts" ("id") ON DELETE CASCADE;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
-- Adds `telemetry_events.degenerate_stop` (boolean, nullable).
|
|
2
|
+
--
|
|
3
|
+
-- Marked on completed requests whose output is far smaller than the model's
|
|
4
|
+
-- ceiling and which ended with an ordinary `stop`. This is the signature of a
|
|
5
|
+
-- model truncating itself on a cached prefix: a short, cut-off reply that the
|
|
6
|
+
-- upstream reported as a clean stop. The column lets an operator measure how
|
|
7
|
+
-- often that happens instead of having to eyeball request detail.
|
|
8
|
+
--
|
|
9
|
+
-- NULL means the row predates this column (or the request never reached a
|
|
10
|
+
-- completed outcome). Only completed requests can carry a value.
|
|
11
|
+
--
|
|
12
|
+
-- `ADD COLUMN IF NOT EXISTS` keeps the file idempotent: a database built from a
|
|
13
|
+
-- newer baseline that already carries the column must not fail startup.
|
|
14
|
+
ALTER TABLE "telemetry_events" ADD COLUMN IF NOT EXISTS "degenerate_stop" boolean;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
-- Tenant system-prompt injection: presets + combo/alias scopes + scope refs.
|
|
2
|
+
--
|
|
3
|
+
-- Legacy shape: `providers` (followGlobal + optional inline setting), `models`
|
|
4
|
+
-- (providerId::modelId -> setting). New shape: every scope map stores a
|
|
5
|
+
-- reference, and a named preset collection is introduced. Legacy rows remain
|
|
6
|
+
-- readable (the store's defensive reader normalizes them); this migration only
|
|
7
|
+
-- adds the new columns so the new shapes can be written.
|
|
8
|
+
--
|
|
9
|
+
-- SQLite stores JSON as TEXT, so the new maps are TEXT columns with an
|
|
10
|
+
-- empty-object default, mirroring the existing `providers`/`models` TEXT
|
|
11
|
+
-- columns.
|
|
12
|
+
ALTER TABLE "tenant_system_prompts" ADD COLUMN "presets" TEXT NOT NULL DEFAULT '{}';
|
|
13
|
+
ALTER TABLE "tenant_system_prompts" ADD COLUMN "combos" TEXT NOT NULL DEFAULT '{}';
|
|
14
|
+
ALTER TABLE "tenant_system_prompts" ADD COLUMN "aliases" TEXT NOT NULL DEFAULT '{}';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
-- SQLite mirror of `full-postgres/0039_add_telemetry_provider_model_indexes.sql`.
|
|
2
|
+
CREATE INDEX IF NOT EXISTS "telemetry_events_tenant_provider_created_idx"
|
|
3
|
+
ON "telemetry_events" ("tenant_id", "provider_id", "created_at");
|
|
4
|
+
|
|
5
|
+
CREATE INDEX IF NOT EXISTS "telemetry_events_tenant_model_created_idx"
|
|
6
|
+
ON "telemetry_events" ("tenant_id", "requested_model", "created_at");
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
-- `daily_checkin_ledger.account_id` referenced `provider_accounts.id` only by
|
|
2
|
+
-- convention; deleting an account left orphan ledger rows behind. This adds the
|
|
3
|
+
-- missing FK with `ON DELETE CASCADE` so a deleted account's daily check-in
|
|
4
|
+
-- markers go with it.
|
|
5
|
+
--
|
|
6
|
+
-- SQLite cannot add a FK to an existing table in place, so the ledger is
|
|
7
|
+
-- rebuilt with the constraint. The runner wraps the file in a transaction, so
|
|
8
|
+
-- `PRAGMA foreign_keys = OFF` is unusable (a no-op inside a transaction);
|
|
9
|
+
-- `defer_foreign_keys` postpones enforcement to commit time instead, letting
|
|
10
|
+
-- the drop/rename complete mid-rebuild.
|
|
11
|
+
|
|
12
|
+
PRAGMA defer_foreign_keys = ON;
|
|
13
|
+
|
|
14
|
+
CREATE TABLE "daily_checkin_ledger__new" (
|
|
15
|
+
"day_key" text NOT NULL,
|
|
16
|
+
"account_id" text NOT NULL,
|
|
17
|
+
"claimed_at" text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')) NOT NULL,
|
|
18
|
+
CONSTRAINT "daily_checkin_ledger_day_key_account_id_pk" PRIMARY KEY("day_key", "account_id"),
|
|
19
|
+
CONSTRAINT "daily_checkin_ledger_account_id_provider_accounts_id_fk" FOREIGN KEY ("account_id") REFERENCES "provider_accounts"("id") ON DELETE cascade
|
|
20
|
+
);
|
|
21
|
+
INSERT INTO "daily_checkin_ledger__new" ("day_key", "account_id", "claimed_at")
|
|
22
|
+
SELECT "day_key", "account_id", "claimed_at" FROM "daily_checkin_ledger";
|
|
23
|
+
DROP TABLE "daily_checkin_ledger";
|
|
24
|
+
ALTER TABLE "daily_checkin_ledger__new" RENAME TO "daily_checkin_ledger";
|
|
25
|
+
|
|
26
|
+
PRAGMA defer_foreign_keys = OFF;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
-- Adds `telemetry_events.degenerate_stop` (boolean, nullable) — see the
|
|
2
|
+
-- identically named PostgreSQL migration for why. Both backends must apply the
|
|
3
|
+
-- same behavior; SQLite stores it as integer (0/1).
|
|
4
|
+
--
|
|
5
|
+
-- Idempotency comes from the migration ledger, not from the statement: the
|
|
6
|
+
-- runner records the file inside the same transaction, so a file that has
|
|
7
|
+
-- already run is never re-executed. The baseline is generated from
|
|
8
|
+
-- `0000_baseline.sql` alone and does not carry this column.
|
|
9
|
+
--
|
|
10
|
+
-- NOTE: the runner already wraps each migration in a transaction, so this file
|
|
11
|
+
-- must NOT issue BEGIN/COMMIT.
|
|
12
|
+
ALTER TABLE "telemetry_events" ADD COLUMN "degenerate_stop" integer;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cartethyia",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.6",
|
|
4
4
|
"description": "A powerful, self-hosted reverse proxy for OpenAI- and Anthropic-compatible AI clients, powered by native Bun and Elysia. It serves both protocols from a single server, routes every model across any configured provider, and translates requests and responses in real time — streaming and prompt caching included. Underneath it runs a full delivery engine: per-account health tracking, quota and cooldown enforcement, automatic failover across pools and providers, usage accounting, and telemetry. Point OpenCode, Cline, Claude Code, Codex, or any compatible client at Cartethyia and it keeps its native protocol while the gateway absorbs every provider-specific difference behind it. Runs on embedded SQLite or external PostgreSQL with optional Redis coordination, ships as a global CLI with a system-tray console, and needs only Bun 1.4+ alongside Node.js/npm.",
|
|
5
5
|
"license": "GPL-3.0-only",
|
|
6
6
|
"type": "module",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"bun": ">=1.4.0"
|
|
40
40
|
},
|
|
41
41
|
"scripts": {
|
|
42
|
-
"dev": "bun run dev:
|
|
42
|
+
"dev": "bun run dev:watch",
|
|
43
43
|
"dev:watch": "bun run scripts/dev/supervisor.ts",
|
|
44
44
|
"test": "bun run scripts/test/run.ts",
|
|
45
45
|
"build": "bun run scripts/build/build.ts",
|
|
@@ -47,15 +47,13 @@
|
|
|
47
47
|
"setup": "bun run scripts/cli/setup.ts",
|
|
48
48
|
"start": "bun run scripts/cli/main.ts start",
|
|
49
49
|
"doctor": "bun run scripts/cli/doctor.ts",
|
|
50
|
-
"probe:egress": "bun run scripts/tools/probe-egress.ts",
|
|
51
|
-
"probe:qoder": "bun run scripts/provider-probing/qoder/probe-qoder.ts",
|
|
52
50
|
"restart": "bun run scripts/build/restart.ts",
|
|
53
51
|
"build:aot": "bun run scripts/build/aot.ts",
|
|
54
52
|
"dev:stack": "concurrently -n BACKEND,DASHBOARD -c cyan,magenta --kill-others-on-fail \"bun run dev:backend\" \"bun run dashboard:dev\"",
|
|
55
53
|
"typecheck": "tsc --noEmit",
|
|
56
54
|
"test:watch": "bun run scripts/test/run.ts --watch",
|
|
57
55
|
"test-db:up": "docker compose -f docker-compose.test.yml up -d --wait postgres-test",
|
|
58
|
-
"dev:backend": "bun run
|
|
56
|
+
"dev:backend": "bun run src/main.ts",
|
|
59
57
|
"dev:console-auth": "bun run scripts/test/console-session.ts",
|
|
60
58
|
"dev:visual-baseline": "bun run scripts/test/visual-baseline.ts",
|
|
61
59
|
"build:binary": "bun run scripts/build/compile.ts",
|
|
@@ -79,7 +77,6 @@
|
|
|
79
77
|
"jsonrepair": "^3.15.0",
|
|
80
78
|
"pg": "8.23.0",
|
|
81
79
|
"pino": "^10.3.1",
|
|
82
|
-
"pino-pretty": "^13.1.3",
|
|
83
80
|
"protobufjs": "^7.6.5",
|
|
84
81
|
"socks-proxy-agent": "^10.1.0",
|
|
85
82
|
"systray2": "2.1.4",
|
|
@@ -92,6 +89,7 @@
|
|
|
92
89
|
"bun-types": "1.4.0",
|
|
93
90
|
"concurrently": "^10.0.5",
|
|
94
91
|
"drizzle-kit": "^0.31.11",
|
|
92
|
+
"pino-pretty": "^13.1.3",
|
|
95
93
|
"typescript": "5.9.2"
|
|
96
94
|
}
|
|
97
95
|
}
|
package/scripts/cli/update.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The update path
|
|
2
|
+
* The update path — CLI-side wrapper over the shared detached-install flow in
|
|
3
|
+
* `src/console/updates/apply-update.ts`.
|
|
3
4
|
*
|
|
4
5
|
* npm cannot replace this package's directory while a process is executing out
|
|
5
6
|
* of it (EBUSY on Windows). So we spawn the installer as a detached process,
|
|
@@ -8,50 +9,20 @@
|
|
|
8
9
|
* `cartethyia start`), so the new version comes up automatically.
|
|
9
10
|
* Cross-OS: uses npm.cmd on Windows.
|
|
10
11
|
*/
|
|
11
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
spawnDetachedUpdate,
|
|
14
|
+
UPDATE_INSTALL_COMMAND,
|
|
15
|
+
type UpdateStatus,
|
|
16
|
+
} from "../../src/console/updates/apply-update";
|
|
12
17
|
|
|
13
18
|
export function updateCommand(): string {
|
|
14
|
-
return
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Processes still running out of the package directory, so npm can rename it.
|
|
19
|
-
*
|
|
20
|
-
* The rename is the whole install on Windows, and it fails with EBUSY while
|
|
21
|
-
* anything holds the directory — including a hold that outlives the process
|
|
22
|
-
* that took it. `carte` itself runs from that directory, so the install has to
|
|
23
|
-
* wait until this process is gone; these are the others.
|
|
24
|
-
*/
|
|
25
|
-
function stopHoldingProcesses(): void {
|
|
26
|
-
if (process.platform !== "win32") return;
|
|
27
|
-
// `taskkill` filters on the window title and image name only, so it is asked
|
|
28
|
-
// for the two processes this CLI can leave behind. /T takes the tree, so a
|
|
29
|
-
// detached gateway started by a tray goes with it.
|
|
30
|
-
for (const image of ["cartethyia.exe", "carte.exe"]) {
|
|
31
|
-
try {
|
|
32
|
-
spawn("taskkill", ["/F", "/T", "/IM", image], { stdio: "ignore" }).unref();
|
|
33
|
-
} catch {
|
|
34
|
-
// A missing taskkill is not the install's problem; npm will report the
|
|
35
|
-
// hold if one is left.
|
|
36
|
-
}
|
|
37
|
-
}
|
|
19
|
+
return UPDATE_INSTALL_COMMAND;
|
|
38
20
|
}
|
|
39
21
|
|
|
40
22
|
export function runDetachedUpdate(): void {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const restart = isWin
|
|
45
|
-
? "cartethyia start"
|
|
46
|
-
: "systemctl restart cartethyia 2>/dev/null || cartethyia start";
|
|
47
|
-
const script = `${install} && ${restart}`;
|
|
48
|
-
const args = isWin ? ["/c", script] : ["-c", script];
|
|
49
|
-
stopHoldingProcesses();
|
|
50
|
-
const child = spawn(shell, args, {
|
|
51
|
-
detached: true,
|
|
52
|
-
stdio: "ignore",
|
|
53
|
-
});
|
|
54
|
-
child.unref();
|
|
23
|
+
// The shared module owns stopHoldingProcesses, the wrapper, the status file,
|
|
24
|
+
// and the update.log redirection; the CLI only prints.
|
|
25
|
+
spawnDetachedUpdate({});
|
|
55
26
|
}
|
|
56
27
|
|
|
57
28
|
export function printUpdateInstructions(from: string, to: string | null): void {
|
|
@@ -73,4 +44,7 @@ export function printUpdateInstructions(from: string, to: string | null): void {
|
|
|
73
44
|
console.log("If `carte` still shows the old version afterwards, run:");
|
|
74
45
|
console.log(` ${updateCommand()}`);
|
|
75
46
|
console.log("");
|
|
76
|
-
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** Status shape the shared module writes; re-exported for CLI readers. */
|
|
50
|
+
export type { UpdateStatus };
|
package/src/boot/app.ts
CHANGED
|
@@ -27,6 +27,8 @@ import type { ByokUpstreamHost } from "../providers/operations/provider-catalog-
|
|
|
27
27
|
import type { NetworkPoolSelector } from "../network/pool/selector";
|
|
28
28
|
import type { ProxyRequestPreparer } from "../transport/request/preparer";
|
|
29
29
|
import { ProxyRequestStateStore } from "../transport/request/state";
|
|
30
|
+
import { resolveTenantVisionHandoffModels } from "../transport/request/tenant-preferences";
|
|
31
|
+
import { tryVisionHandoff, type VisionHandoffDeps } from "../transport/vision-handoff";
|
|
30
32
|
import { fastPathname } from "../transport/pathname";
|
|
31
33
|
import {
|
|
32
34
|
handleProviderProxyRequest,
|
|
@@ -60,6 +62,7 @@ import type { ValidatedNetworkBindingFactory } from "../network/pool/resolver";
|
|
|
60
62
|
import { metrics } from "../observability/metrics";
|
|
61
63
|
import type { RuntimeMetricsSampler } from "../observability/runtime-metrics";
|
|
62
64
|
import { API_CONTENT_SECURITY_POLICY, X_FRAME_OPTIONS } from "../security/outbound-headers";
|
|
65
|
+
import { setProxyBusySource } from "../shared/invoke-guard";
|
|
63
66
|
|
|
64
67
|
|
|
65
68
|
import type { TelemetryBatchBuffer } from "../observability/telemetry-buffer";
|
|
@@ -105,7 +108,7 @@ interface GatewayShellDeps {
|
|
|
105
108
|
* `runtime/dependencies.ts` either supplies it or the app does not boot, so
|
|
106
109
|
* there is no runtime shape check to fall through.
|
|
107
110
|
*/
|
|
108
|
-
|
|
111
|
+
interface ProductionAppDeps {
|
|
109
112
|
readonly mode: "production";
|
|
110
113
|
readonly db: CartethyiaDatabase;
|
|
111
114
|
readonly proxyPreparer: ProxyRequestPreparer;
|
|
@@ -158,6 +161,23 @@ export interface ProductionAppDeps {
|
|
|
158
161
|
/** Either app mode. The discriminant decides which builder path runs. */
|
|
159
162
|
type GatewayAppDeps = GatewayShellDeps | ProductionAppDeps;
|
|
160
163
|
|
|
164
|
+
/**
|
|
165
|
+
* Adapts the static handler's `Uint8Array | undefined` body to `BodyInit`.
|
|
166
|
+
*
|
|
167
|
+
* Typed-array buffers are `ArrayBufferLike` (may be a SharedArrayBuffer), but
|
|
168
|
+
* `BodyInit` only accepts `ArrayBuffer`-backed views, so a direct assignment
|
|
169
|
+
* does not type-check. The common case reuses the same bytes without copying;
|
|
170
|
+
* the exotic SharedArrayBuffer case falls back to a copy. This replaces the
|
|
171
|
+
* old `as unknown as BodyInit` double cast with a structural guard.
|
|
172
|
+
*/
|
|
173
|
+
function staticBodyToInit(body: Uint8Array | undefined): BodyInit | null {
|
|
174
|
+
if (body === undefined) return null;
|
|
175
|
+
if (body.buffer instanceof ArrayBuffer) {
|
|
176
|
+
return new Uint8Array(body.buffer, body.byteOffset, body.byteLength);
|
|
177
|
+
}
|
|
178
|
+
return new Uint8Array(body);
|
|
179
|
+
}
|
|
180
|
+
|
|
161
181
|
function checkDatabaseConnection(): Promise<void> {
|
|
162
182
|
return getDbHandle()
|
|
163
183
|
.query("SELECT 1")
|
|
@@ -204,7 +224,7 @@ export function createGatewayApp(deps: GatewayAppDeps) {
|
|
|
204
224
|
// The client's `accept-encoding` is what decides whether a precompressed
|
|
205
225
|
// `.gz` sibling can be served instead of the plain asset.
|
|
206
226
|
const result = await staticHandler(pathname, request.headers.get("accept-encoding"));
|
|
207
|
-
return new Response(
|
|
227
|
+
return new Response(staticBodyToInit(result.body), {
|
|
208
228
|
status: result.status,
|
|
209
229
|
headers: result.headers,
|
|
210
230
|
});
|
|
@@ -241,6 +261,38 @@ export function createGatewayApp(deps: GatewayAppDeps) {
|
|
|
241
261
|
deps.mode === "production" ? deps.shutdownCoordinator : undefined,
|
|
242
262
|
);
|
|
243
263
|
deps.runtimeMetricsSampler?.bindInFlight(() => requestStateStore.inFlightCount());
|
|
264
|
+
// G-03 InvokeGuard: expose the proxy plane's live in-flight count as the
|
|
265
|
+
// "foreground busy" source the scheduled worker registry consults before a
|
|
266
|
+
// tick. Bound once here, where the request store exists; a proxy invoke in
|
|
267
|
+
// progress (or a page-open console poll) keeps background sweeps from
|
|
268
|
+
// contending for the single event loop.
|
|
269
|
+
setProxyBusySource(() => requestStateStore.inFlightCount() > 0);
|
|
270
|
+
// Vision handoff runs as an internal sub-dispatch when the tenant configured
|
|
271
|
+
// an ordered list of vision models. Wire the preparer's runner here, where
|
|
272
|
+
// the request state store and the full dispatch dependency surface exist.
|
|
273
|
+
if (deps.mode === "production") {
|
|
274
|
+
deps.proxyPreparer.bindVisionHandoff(async (input) => {
|
|
275
|
+
const models = await resolveTenantVisionHandoffModels(
|
|
276
|
+
deps.db,
|
|
277
|
+
input.authorization.tenantId,
|
|
278
|
+
);
|
|
279
|
+
if (models.length === 0) return [];
|
|
280
|
+
const runnerDeps: VisionHandoffDeps = {
|
|
281
|
+
db: deps.db,
|
|
282
|
+
stateStore: requestStateStore,
|
|
283
|
+
proxyPreparer: deps.proxyPreparer,
|
|
284
|
+
resolveProviderAdapter: deps.resolveProviderAdapter,
|
|
285
|
+
byokUpstreamHosts: deps.byokUpstreamHosts,
|
|
286
|
+
networkBindingFactory: deps.networkBindingFactory,
|
|
287
|
+
snapshotService: deps.snapshotService,
|
|
288
|
+
telemetryBuffer: deps.telemetryBuffer,
|
|
289
|
+
resolveOAuthRefresher: deps.resolveOAuthRefresher,
|
|
290
|
+
oauthRefreshService: deps.oauthRefreshService,
|
|
291
|
+
poolSelector: deps.poolSelector,
|
|
292
|
+
};
|
|
293
|
+
return tryVisionHandoff(runnerDeps, input, models);
|
|
294
|
+
});
|
|
295
|
+
}
|
|
244
296
|
// Shutdown ordering: abort in-flight proxy controllers first so the
|
|
245
297
|
// bounded drain observes cancellation and finalizers run before
|
|
246
298
|
// telemetry flush and pool close. The reason is threaded through so the
|
|
@@ -635,6 +687,10 @@ export function createGatewayApp(deps: GatewayAppDeps) {
|
|
|
635
687
|
stateStore: requestStateStore,
|
|
636
688
|
resolvePeerAddress: (request) => peerAddresses.get(request) ?? null,
|
|
637
689
|
trustedProxyBoundary: deps.trustedProxyBoundary,
|
|
690
|
+
// The update apply route drains through the process coordinator
|
|
691
|
+
// before exiting, so the destructive path cannot skip telemetry
|
|
692
|
+
// flush and pool close.
|
|
693
|
+
shutdownCoordinator: deps.shutdownCoordinator,
|
|
638
694
|
}),
|
|
639
695
|
);
|
|
640
696
|
}
|