@srouterhq/server 0.0.0-stage → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/client/dist/assets/am-TQ7Jmdqe.js +1 -0
- package/client/dist/assets/ar-Bf5a7yfC.js +1 -0
- package/client/dist/assets/az-CrosE1xH.js +1 -0
- package/client/dist/assets/bg-BvWnmcUz.js +1 -0
- package/client/dist/assets/bn-ams5TsJp.js +1 -0
- package/client/dist/assets/cs-Dh67CaJ_.js +1 -0
- package/client/dist/assets/da-9WlT8Iq7.js +1 -0
- package/client/dist/assets/de-lWhJJzz7.js +1 -0
- package/client/dist/assets/el-Cu7_GhNq.js +1 -0
- package/client/dist/assets/es-BZuzsBcP.js +1 -0
- package/client/dist/assets/fa-Dwdn-jKS.js +1 -0
- package/client/dist/assets/fi-BFrFyOTy.js +1 -0
- package/client/dist/assets/fr-XhbtmPpj.js +1 -0
- package/client/dist/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/client/dist/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/client/dist/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/client/dist/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/client/dist/assets/geist-mono-cyrillic-ext-wght-normal-I4S5GZfc.woff2 +0 -0
- package/client/dist/assets/geist-mono-cyrillic-wght-normal-BmXc_FBt.woff2 +0 -0
- package/client/dist/assets/geist-mono-latin-ext-wght-normal-DrnZ1wKl.woff2 +0 -0
- package/client/dist/assets/geist-mono-latin-wght-normal-B_7UjwxQ.woff2 +0 -0
- package/client/dist/assets/geist-mono-symbols2-wght-normal-GZpp1pK2.woff2 +0 -0
- package/client/dist/assets/geist-mono-vietnamese-wght-normal-D8KDMBhC.woff2 +0 -0
- package/client/dist/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/client/dist/assets/gu-D0uhLUB8.js +1 -0
- package/client/dist/assets/ha-CVlm9pqp.js +1 -0
- package/client/dist/assets/he-CMIFeoWr.js +1 -0
- package/client/dist/assets/hi-ENTwhBpn.js +1 -0
- package/client/dist/assets/hr-fc03vMy_.js +1 -0
- package/client/dist/assets/hu-YBo2BIYt.js +1 -0
- package/client/dist/assets/id-BEWXYX69.js +1 -0
- package/client/dist/assets/ig-BKLZFKka.js +1 -0
- package/client/dist/assets/index-D9I4KtvR.js +145 -0
- package/client/dist/assets/index-txhEmCdb.css +2 -0
- package/client/dist/assets/it-Bzmei1Y2.js +1 -0
- package/client/dist/assets/ja-BfcpuqEl.js +1 -0
- package/client/dist/assets/ka-CnWjRgLo.js +1 -0
- package/client/dist/assets/km-BAjPR3Qj.js +1 -0
- package/client/dist/assets/kn-B15WKU5m.js +1 -0
- package/client/dist/assets/ko-C61fAB-w.js +1 -0
- package/client/dist/assets/lt-CYTr4_YW.js +1 -0
- package/client/dist/assets/ml-CtqxgyH3.js +1 -0
- package/client/dist/assets/mr-X5TMY7aR.js +1 -0
- package/client/dist/assets/ms-DSg8RqPS.js +1 -0
- package/client/dist/assets/my-D7RqR8uE.js +1 -0
- package/client/dist/assets/ne-DaflxkDj.js +1 -0
- package/client/dist/assets/nl-BOqqtsC8.js +1 -0
- package/client/dist/assets/no-BSHp_StB.js +1 -0
- package/client/dist/assets/or-BkLR9Vub.js +1 -0
- package/client/dist/assets/pa-CarJ2XgI.js +1 -0
- package/client/dist/assets/pl-C2n0V-0k.js +1 -0
- package/client/dist/assets/pt-BR-CqJdNhg2.js +1 -0
- package/client/dist/assets/pt-PT-C_HpMyKz.js +1 -0
- package/client/dist/assets/ro-DVRZqSAS.js +1 -0
- package/client/dist/assets/ru-DwAJG7VC.js +1 -0
- package/client/dist/assets/si-BxUezXm0.js +1 -0
- package/client/dist/assets/sk-eI1VcIfY.js +1 -0
- package/client/dist/assets/sr-CJF3auCr.js +1 -0
- package/client/dist/assets/srouter-logo-C6ZfjGIi.svg +14 -0
- package/client/dist/assets/sv-nqvwHAq_.js +1 -0
- package/client/dist/assets/sw-DWynE2pW.js +1 -0
- package/client/dist/assets/ta-BVM12knC.js +1 -0
- package/client/dist/assets/te-oyzEkF7_.js +1 -0
- package/client/dist/assets/th-COVeE0ZQ.js +1 -0
- package/client/dist/assets/tl-DsJANnQz.js +1 -0
- package/client/dist/assets/tr-B-Fl-urO.js +1 -0
- package/client/dist/assets/uk-C5qketAO.js +1 -0
- package/client/dist/assets/ur-QU9KugfV.js +1 -0
- package/client/dist/assets/uz-DL9cG_mY.js +1 -0
- package/client/dist/assets/vi-CQiVy3Pu.js +1 -0
- package/client/dist/assets/yo-DqazMdrZ.js +1 -0
- package/client/dist/assets/zh-CN-DnYL_Kio.js +1 -0
- package/client/dist/assets/zh-TW-5bdbosKj.js +1 -0
- package/client/dist/favicon.svg +14 -0
- package/client/dist/icons.svg +24 -0
- package/client/dist/index.html +37 -0
- package/dist/app.d.ts +4 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +372 -0
- package/dist/app.js.map +1 -0
- package/dist/db/index.d.ts +49 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +203 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrate/TEMPLATE.d.ts +4 -0
- package/dist/db/migrate/TEMPLATE.d.ts.map +1 -0
- package/dist/db/migrate/TEMPLATE.js +18 -0
- package/dist/db/migrate/TEMPLATE.js.map +1 -0
- package/dist/db/migrate/cli.d.ts +2 -0
- package/dist/db/migrate/cli.d.ts.map +1 -0
- package/dist/db/migrate/cli.js +177 -0
- package/dist/db/migrate/cli.js.map +1 -0
- package/dist/db/migrate/defaults.d.ts +52 -0
- package/dist/db/migrate/defaults.d.ts.map +1 -0
- package/dist/db/migrate/defaults.js +126 -0
- package/dist/db/migrate/defaults.js.map +1 -0
- package/dist/db/migrate/runner.d.ts +16 -0
- package/dist/db/migrate/runner.d.ts.map +1 -0
- package/dist/db/migrate/runner.js +178 -0
- package/dist/db/migrate/runner.js.map +1 -0
- package/dist/db/migrations/20260101_000000_legacy_baseline.d.ts +4 -0
- package/dist/db/migrations/20260101_000000_legacy_baseline.d.ts.map +1 -0
- package/dist/db/migrations/20260101_000000_legacy_baseline.js +2240 -0
- package/dist/db/migrations/20260101_000000_legacy_baseline.js.map +1 -0
- package/dist/db/migrations/20260627_000001_custom_provider_modalities.d.ts +4 -0
- package/dist/db/migrations/20260627_000001_custom_provider_modalities.d.ts.map +1 -0
- package/dist/db/migrations/20260627_000001_custom_provider_modalities.js +27 -0
- package/dist/db/migrations/20260627_000001_custom_provider_modalities.js.map +1 -0
- package/dist/db/migrations/20260627_000002_catalog_model_state.d.ts +4 -0
- package/dist/db/migrations/20260627_000002_catalog_model_state.d.ts.map +1 -0
- package/dist/db/migrations/20260627_000002_catalog_model_state.js +30 -0
- package/dist/db/migrations/20260627_000002_catalog_model_state.js.map +1 -0
- package/dist/db/migrations/20260628_120000_request_aggregates.d.ts +6 -0
- package/dist/db/migrations/20260628_120000_request_aggregates.d.ts.map +1 -0
- package/dist/db/migrations/20260628_120000_request_aggregates.js +104 -0
- package/dist/db/migrations/20260628_120000_request_aggregates.js.map +1 -0
- package/dist/db/migrations/20260630_000001_github_gpt41_context.d.ts +9 -0
- package/dist/db/migrations/20260630_000001_github_gpt41_context.d.ts.map +1 -0
- package/dist/db/migrations/20260630_000001_github_gpt41_context.js +22 -0
- package/dist/db/migrations/20260630_000001_github_gpt41_context.js.map +1 -0
- package/dist/db/migrations/20260706_000001_request_client_info.d.ts +4 -0
- package/dist/db/migrations/20260706_000001_request_client_info.d.ts.map +1 -0
- package/dist/db/migrations/20260706_000001_request_client_info.js +30 -0
- package/dist/db/migrations/20260706_000001_request_client_info.js.map +1 -0
- package/dist/db/migrations/20260706_000002_custom_model_tool_support.d.ts +17 -0
- package/dist/db/migrations/20260706_000002_custom_model_tool_support.d.ts.map +1 -0
- package/dist/db/migrations/20260706_000002_custom_model_tool_support.js +20 -0
- package/dist/db/migrations/20260706_000002_custom_model_tool_support.js.map +1 -0
- package/dist/db/migrations/20260714_000001_profile_chain_backfill.d.ts +12 -0
- package/dist/db/migrations/20260714_000001_profile_chain_backfill.d.ts.map +1 -0
- package/dist/db/migrations/20260714_000001_profile_chain_backfill.js +45 -0
- package/dist/db/migrations/20260714_000001_profile_chain_backfill.js.map +1 -0
- package/dist/db/migrations/20260720_000001_key_health_error.d.ts +5 -0
- package/dist/db/migrations/20260720_000001_key_health_error.d.ts.map +1 -0
- package/dist/db/migrations/20260720_000001_key_health_error.js +16 -0
- package/dist/db/migrations/20260720_000001_key_health_error.js.map +1 -0
- package/dist/db/migrations/20260726_000001_cooldown_probe_provenance.d.ts +4 -0
- package/dist/db/migrations/20260726_000001_cooldown_probe_provenance.d.ts.map +1 -0
- package/dist/db/migrations/20260726_000001_cooldown_probe_provenance.js +38 -0
- package/dist/db/migrations/20260726_000001_cooldown_probe_provenance.js.map +1 -0
- package/dist/db/migrations/20260726_000002_request_attempts.d.ts +4 -0
- package/dist/db/migrations/20260726_000002_request_attempts.d.ts.map +1 -0
- package/dist/db/migrations/20260726_000002_request_attempts.js +43 -0
- package/dist/db/migrations/20260726_000002_request_attempts.js.map +1 -0
- package/dist/db/migrations/20260726_000003_model_source_provenance.d.ts +4 -0
- package/dist/db/migrations/20260726_000003_model_source_provenance.d.ts.map +1 -0
- package/dist/db/migrations/20260726_000003_model_source_provenance.js +80 -0
- package/dist/db/migrations/20260726_000003_model_source_provenance.js.map +1 -0
- package/dist/db/migrations/20260726_000004_media_model_meta.d.ts +4 -0
- package/dist/db/migrations/20260726_000004_media_model_meta.d.ts.map +1 -0
- package/dist/db/migrations/20260726_000004_media_model_meta.js +34 -0
- package/dist/db/migrations/20260726_000004_media_model_meta.js.map +1 -0
- package/dist/db/migrations/20260726_000005_request_served_model.d.ts +4 -0
- package/dist/db/migrations/20260726_000005_request_served_model.d.ts.map +1 -0
- package/dist/db/migrations/20260726_000005_request_served_model.js +31 -0
- package/dist/db/migrations/20260726_000005_request_served_model.js.map +1 -0
- package/dist/db/migrations/20260726_000006_attempt_error_summary.d.ts +4 -0
- package/dist/db/migrations/20260726_000006_attempt_error_summary.d.ts.map +1 -0
- package/dist/db/migrations/20260726_000006_attempt_error_summary.js +29 -0
- package/dist/db/migrations/20260726_000006_attempt_error_summary.js.map +1 -0
- package/dist/db/migrations/20260727_000001_agent_compatibility.d.ts +4 -0
- package/dist/db/migrations/20260727_000001_agent_compatibility.d.ts.map +1 -0
- package/dist/db/migrations/20260727_000001_agent_compatibility.js +41 -0
- package/dist/db/migrations/20260727_000001_agent_compatibility.js.map +1 -0
- package/dist/db/migrations/20260728_000001_tombstone_provenance.d.ts +12 -0
- package/dist/db/migrations/20260728_000001_tombstone_provenance.d.ts.map +1 -0
- package/dist/db/migrations/20260728_000001_tombstone_provenance.js +37 -0
- package/dist/db/migrations/20260728_000001_tombstone_provenance.js.map +1 -0
- package/dist/db/migrations/20260729_000001_custom_model_endpoint_identity.d.ts +4 -0
- package/dist/db/migrations/20260729_000001_custom_model_endpoint_identity.d.ts.map +1 -0
- package/dist/db/migrations/20260729_000001_custom_model_endpoint_identity.js +145 -0
- package/dist/db/migrations/20260729_000001_custom_model_endpoint_identity.js.map +1 -0
- package/dist/db/migrations/20260802_000001_custom_endpoint_host_labels.d.ts +6 -0
- package/dist/db/migrations/20260802_000001_custom_endpoint_host_labels.d.ts.map +1 -0
- package/dist/db/migrations/20260802_000001_custom_endpoint_host_labels.js +52 -0
- package/dist/db/migrations/20260802_000001_custom_endpoint_host_labels.js.map +1 -0
- package/dist/db/migrations/20260805_000001_key_model_scope.d.ts +6 -0
- package/dist/db/migrations/20260805_000001_key_model_scope.d.ts.map +1 -0
- package/dist/db/migrations/20260805_000001_key_model_scope.js +17 -0
- package/dist/db/migrations/20260805_000001_key_model_scope.js.map +1 -0
- package/dist/db/migrations/20260805_000002_client_profiles.d.ts +4 -0
- package/dist/db/migrations/20260805_000002_client_profiles.d.ts.map +1 -0
- package/dist/db/migrations/20260805_000002_client_profiles.js +33 -0
- package/dist/db/migrations/20260805_000002_client_profiles.js.map +1 -0
- package/dist/db/migrations/20260810_000001_api_key_proxy.d.ts +4 -0
- package/dist/db/migrations/20260810_000001_api_key_proxy.d.ts.map +1 -0
- package/dist/db/migrations/20260810_000001_api_key_proxy.js +33 -0
- package/dist/db/migrations/20260810_000001_api_key_proxy.js.map +1 -0
- package/dist/db/migrations/20260819_000001_custom_model_tombstones.d.ts +4 -0
- package/dist/db/migrations/20260819_000001_custom_model_tombstones.d.ts.map +1 -0
- package/dist/db/migrations/20260819_000001_custom_model_tombstones.js +19 -0
- package/dist/db/migrations/20260819_000001_custom_model_tombstones.js.map +1 -0
- package/dist/db/migrations/20260820_000001_playground_conversations.d.ts +4 -0
- package/dist/db/migrations/20260820_000001_playground_conversations.d.ts.map +1 -0
- package/dist/db/migrations/20260820_000001_playground_conversations.js +47 -0
- package/dist/db/migrations/20260820_000001_playground_conversations.js.map +1 -0
- package/dist/db/migrations/20260823_000001_server_logs.d.ts +4 -0
- package/dist/db/migrations/20260823_000001_server_logs.d.ts.map +1 -0
- package/dist/db/migrations/20260823_000001_server_logs.js +53 -0
- package/dist/db/migrations/20260823_000001_server_logs.js.map +1 -0
- package/dist/db/migrations/20260823_000002_backups_table.d.ts +8 -0
- package/dist/db/migrations/20260823_000002_backups_table.d.ts.map +1 -0
- package/dist/db/migrations/20260823_000002_backups_table.js +22 -0
- package/dist/db/migrations/20260823_000002_backups_table.js.map +1 -0
- package/dist/db/migrations/20260823_000003_attempt_key_label.d.ts +19 -0
- package/dist/db/migrations/20260823_000003_attempt_key_label.d.ts.map +1 -0
- package/dist/db/migrations/20260823_000003_attempt_key_label.js +28 -0
- package/dist/db/migrations/20260823_000003_attempt_key_label.js.map +1 -0
- package/dist/db/migrations/20260823_000004_profile_auto_include.d.ts +14 -0
- package/dist/db/migrations/20260823_000004_profile_auto_include.d.ts.map +1 -0
- package/dist/db/migrations/20260823_000004_profile_auto_include.js +25 -0
- package/dist/db/migrations/20260823_000004_profile_auto_include.js.map +1 -0
- package/dist/db/migrations/20260901_000001_idempotency_claims.d.ts +4 -0
- package/dist/db/migrations/20260901_000001_idempotency_claims.d.ts.map +1 -0
- package/dist/db/migrations/20260901_000001_idempotency_claims.js +46 -0
- package/dist/db/migrations/20260901_000001_idempotency_claims.js.map +1 -0
- package/dist/db/migrations/20260901_000002_quota_observation_lookup.d.ts +4 -0
- package/dist/db/migrations/20260901_000002_quota_observation_lookup.d.ts.map +1 -0
- package/dist/db/migrations/20260901_000002_quota_observation_lookup.js +37 -0
- package/dist/db/migrations/20260901_000002_quota_observation_lookup.js.map +1 -0
- package/dist/db/migrations/20260901_000003_request_caller.d.ts +4 -0
- package/dist/db/migrations/20260901_000003_request_caller.d.ts.map +1 -0
- package/dist/db/migrations/20260901_000003_request_caller.js +27 -0
- package/dist/db/migrations/20260901_000003_request_caller.js.map +1 -0
- package/dist/db/migrations/20260902_000001_analytics_latency_percentile_index.d.ts +4 -0
- package/dist/db/migrations/20260902_000001_analytics_latency_percentile_index.d.ts.map +1 -0
- package/dist/db/migrations/20260902_000001_analytics_latency_percentile_index.js +35 -0
- package/dist/db/migrations/20260902_000001_analytics_latency_percentile_index.js.map +1 -0
- package/dist/db/migrations/20260903_000001_mcp_enabled_default.d.ts +4 -0
- package/dist/db/migrations/20260903_000001_mcp_enabled_default.d.ts.map +1 -0
- package/dist/db/migrations/20260903_000001_mcp_enabled_default.js +37 -0
- package/dist/db/migrations/20260903_000001_mcp_enabled_default.js.map +1 -0
- package/dist/db/migrations/20260903_000002_response_cache.d.ts +4 -0
- package/dist/db/migrations/20260903_000002_response_cache.d.ts.map +1 -0
- package/dist/db/migrations/20260903_000002_response_cache.js +53 -0
- package/dist/db/migrations/20260903_000002_response_cache.js.map +1 -0
- package/dist/db/migrations/20260904_000001_key_monthly_budget.d.ts +13 -0
- package/dist/db/migrations/20260904_000001_key_monthly_budget.d.ts.map +1 -0
- package/dist/db/migrations/20260904_000001_key_monthly_budget.js +35 -0
- package/dist/db/migrations/20260904_000001_key_monthly_budget.js.map +1 -0
- package/dist/db/migrations/20260913_000001_request_model_attribution.d.ts +4 -0
- package/dist/db/migrations/20260913_000001_request_model_attribution.d.ts.map +1 -0
- package/dist/db/migrations/20260913_000001_request_model_attribution.js +68 -0
- package/dist/db/migrations/20260913_000001_request_model_attribution.js.map +1 -0
- package/dist/db/migrations/20260914_000001_key_monthly_usage.d.ts +5 -0
- package/dist/db/migrations/20260914_000001_key_monthly_usage.d.ts.map +1 -0
- package/dist/db/migrations/20260914_000001_key_monthly_usage.js +37 -0
- package/dist/db/migrations/20260914_000001_key_monthly_usage.js.map +1 -0
- package/dist/db/migrations/20260915_000001_quota_snapshot_freshness.d.ts +4 -0
- package/dist/db/migrations/20260915_000001_quota_snapshot_freshness.d.ts.map +1 -0
- package/dist/db/migrations/20260915_000001_quota_snapshot_freshness.js +28 -0
- package/dist/db/migrations/20260915_000001_quota_snapshot_freshness.js.map +1 -0
- package/dist/db/migrations/20261004_000001_unified_key_sr_prefix.d.ts +4 -0
- package/dist/db/migrations/20261004_000001_unified_key_sr_prefix.d.ts.map +1 -0
- package/dist/db/migrations/20261004_000001_unified_key_sr_prefix.js +25 -0
- package/dist/db/migrations/20261004_000001_unified_key_sr_prefix.js.map +1 -0
- package/dist/db/migrations/20261005_000001_key_budget_period.d.ts +10 -0
- package/dist/db/migrations/20261005_000001_key_budget_period.d.ts.map +1 -0
- package/dist/db/migrations/20261005_000001_key_budget_period.js +78 -0
- package/dist/db/migrations/20261005_000001_key_budget_period.js.map +1 -0
- package/dist/db/migrations/20261005_000002_key_budget_period_auto.d.ts +21 -0
- package/dist/db/migrations/20261005_000002_key_budget_period_auto.d.ts.map +1 -0
- package/dist/db/migrations/20261005_000002_key_budget_period_auto.js +41 -0
- package/dist/db/migrations/20261005_000002_key_budget_period_auto.js.map +1 -0
- package/dist/db/model-pricing.d.ts +39 -0
- package/dist/db/model-pricing.d.ts.map +1 -0
- package/dist/db/model-pricing.js +274 -0
- package/dist/db/model-pricing.js.map +1 -0
- package/dist/db/node-sqlite.d.ts +9 -0
- package/dist/db/node-sqlite.d.ts.map +1 -0
- package/dist/db/node-sqlite.js +87 -0
- package/dist/db/node-sqlite.js.map +1 -0
- package/dist/db/types.d.ts +22 -0
- package/dist/db/types.d.ts.map +1 -0
- package/dist/db/types.js +2 -0
- package/dist/db/types.js.map +1 -0
- package/dist/docs/docs-page.d.ts +2 -0
- package/dist/docs/docs-page.d.ts.map +1 -0
- package/dist/docs/docs-page.js +319 -0
- package/dist/docs/docs-page.js.map +1 -0
- package/dist/docs/openapi.d.ts +1896 -0
- package/dist/docs/openapi.d.ts.map +1 -0
- package/dist/docs/openapi.js +1096 -0
- package/dist/docs/openapi.js.map +1 -0
- package/dist/env.d.ts +2 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +9 -0
- package/dist/env.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +144 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/anthropic-documents.d.ts +41 -0
- package/dist/lib/anthropic-documents.d.ts.map +1 -0
- package/dist/lib/anthropic-documents.js +132 -0
- package/dist/lib/anthropic-documents.js.map +1 -0
- package/dist/lib/app-version.d.ts +5 -0
- package/dist/lib/app-version.d.ts.map +1 -0
- package/dist/lib/app-version.js +61 -0
- package/dist/lib/app-version.js.map +1 -0
- package/dist/lib/attempt-trace.d.ts +23 -0
- package/dist/lib/attempt-trace.d.ts.map +1 -0
- package/dist/lib/attempt-trace.js +32 -0
- package/dist/lib/attempt-trace.js.map +1 -0
- package/dist/lib/budget.d.ts +6 -0
- package/dist/lib/budget.d.ts.map +1 -0
- package/dist/lib/budget.js +40 -0
- package/dist/lib/budget.js.map +1 -0
- package/dist/lib/client-classifier.d.ts +10 -0
- package/dist/lib/client-classifier.d.ts.map +1 -0
- package/dist/lib/client-classifier.js +126 -0
- package/dist/lib/client-classifier.js.map +1 -0
- package/dist/lib/client-context.d.ts +10 -0
- package/dist/lib/client-context.d.ts.map +1 -0
- package/dist/lib/client-context.js +39 -0
- package/dist/lib/client-context.js.map +1 -0
- package/dist/lib/config.d.ts +33 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +94 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/content.d.ts +33 -0
- package/dist/lib/content.d.ts.map +1 -0
- package/dist/lib/content.js +201 -0
- package/dist/lib/content.js.map +1 -0
- package/dist/lib/credential.d.ts +11 -0
- package/dist/lib/credential.d.ts.map +1 -0
- package/dist/lib/credential.js +18 -0
- package/dist/lib/credential.js.map +1 -0
- package/dist/lib/crypto.d.ts +31 -0
- package/dist/lib/crypto.d.ts.map +1 -0
- package/dist/lib/crypto.js +206 -0
- package/dist/lib/crypto.js.map +1 -0
- package/dist/lib/custom-provider-cleanup.d.ts +13 -0
- package/dist/lib/custom-provider-cleanup.d.ts.map +1 -0
- package/dist/lib/custom-provider-cleanup.js +43 -0
- package/dist/lib/custom-provider-cleanup.js.map +1 -0
- package/dist/lib/db-backup.d.ts +31 -0
- package/dist/lib/db-backup.d.ts.map +1 -0
- package/dist/lib/db-backup.js +255 -0
- package/dist/lib/db-backup.js.map +1 -0
- package/dist/lib/endpoint-scope.d.ts +42 -0
- package/dist/lib/endpoint-scope.d.ts.map +1 -0
- package/dist/lib/endpoint-scope.js +95 -0
- package/dist/lib/endpoint-scope.js.map +1 -0
- package/dist/lib/env-drift.d.ts +17 -0
- package/dist/lib/env-drift.d.ts.map +1 -0
- package/dist/lib/env-drift.js +108 -0
- package/dist/lib/env-drift.js.map +1 -0
- package/dist/lib/error-classify.d.ts +40 -0
- package/dist/lib/error-classify.d.ts.map +1 -0
- package/dist/lib/error-classify.js +687 -0
- package/dist/lib/error-classify.js.map +1 -0
- package/dist/lib/error-redaction.d.ts +8 -0
- package/dist/lib/error-redaction.d.ts.map +1 -0
- package/dist/lib/error-redaction.js +45 -0
- package/dist/lib/error-redaction.js.map +1 -0
- package/dist/lib/fallback-loop.d.ts +306 -0
- package/dist/lib/fallback-loop.d.ts.map +1 -0
- package/dist/lib/fallback-loop.js +1336 -0
- package/dist/lib/fallback-loop.js.map +1 -0
- package/dist/lib/file-permissions.d.ts +98 -0
- package/dist/lib/file-permissions.d.ts.map +1 -0
- package/dist/lib/file-permissions.js +159 -0
- package/dist/lib/file-permissions.js.map +1 -0
- package/dist/lib/gemini-wire.d.ts +76 -0
- package/dist/lib/gemini-wire.d.ts.map +1 -0
- package/dist/lib/gemini-wire.js +392 -0
- package/dist/lib/gemini-wire.js.map +1 -0
- package/dist/lib/guardrails.d.ts +37 -0
- package/dist/lib/guardrails.d.ts.map +1 -0
- package/dist/lib/guardrails.js +106 -0
- package/dist/lib/guardrails.js.map +1 -0
- package/dist/lib/header-value.d.ts +8 -0
- package/dist/lib/header-value.d.ts.map +1 -0
- package/dist/lib/header-value.js +55 -0
- package/dist/lib/header-value.js.map +1 -0
- package/dist/lib/image-normalize.d.ts +21 -0
- package/dist/lib/image-normalize.d.ts.map +1 -0
- package/dist/lib/image-normalize.js +218 -0
- package/dist/lib/image-normalize.js.map +1 -0
- package/dist/lib/inbound-chat.d.ts +48 -0
- package/dist/lib/inbound-chat.d.ts.map +1 -0
- package/dist/lib/inbound-chat.js +406 -0
- package/dist/lib/inbound-chat.js.map +1 -0
- package/dist/lib/key-parser.d.ts +79 -0
- package/dist/lib/key-parser.d.ts.map +1 -0
- package/dist/lib/key-parser.js +701 -0
- package/dist/lib/key-parser.js.map +1 -0
- package/dist/lib/key-proxy.d.ts +49 -0
- package/dist/lib/key-proxy.d.ts.map +1 -0
- package/dist/lib/key-proxy.js +92 -0
- package/dist/lib/key-proxy.js.map +1 -0
- package/dist/lib/log-redaction.d.ts +28 -0
- package/dist/lib/log-redaction.d.ts.map +1 -0
- package/dist/lib/log-redaction.js +166 -0
- package/dist/lib/log-redaction.js.map +1 -0
- package/dist/lib/model-scope.d.ts +9 -0
- package/dist/lib/model-scope.d.ts.map +1 -0
- package/dist/lib/model-scope.js +29 -0
- package/dist/lib/model-scope.js.map +1 -0
- package/dist/lib/one-time-code.d.ts +15 -0
- package/dist/lib/one-time-code.d.ts.map +1 -0
- package/dist/lib/one-time-code.js +41 -0
- package/dist/lib/one-time-code.js.map +1 -0
- package/dist/lib/output-cap.d.ts +24 -0
- package/dist/lib/output-cap.d.ts.map +1 -0
- package/dist/lib/output-cap.js +80 -0
- package/dist/lib/output-cap.js.map +1 -0
- package/dist/lib/password.d.ts +3 -0
- package/dist/lib/password.d.ts.map +1 -0
- package/dist/lib/password.js +27 -0
- package/dist/lib/password.js.map +1 -0
- package/dist/lib/process-safety-net.d.ts +32 -0
- package/dist/lib/process-safety-net.d.ts.map +1 -0
- package/dist/lib/process-safety-net.js +123 -0
- package/dist/lib/process-safety-net.js.map +1 -0
- package/dist/lib/provider-identity.d.ts +37 -0
- package/dist/lib/provider-identity.d.ts.map +1 -0
- package/dist/lib/provider-identity.js +110 -0
- package/dist/lib/provider-identity.js.map +1 -0
- package/dist/lib/provider-size-parser.d.ts +6 -0
- package/dist/lib/provider-size-parser.d.ts.map +1 -0
- package/dist/lib/provider-size-parser.js +72 -0
- package/dist/lib/provider-size-parser.js.map +1 -0
- package/dist/lib/provider-timeout.d.ts +17 -0
- package/dist/lib/provider-timeout.d.ts.map +1 -0
- package/dist/lib/provider-timeout.js +70 -0
- package/dist/lib/provider-timeout.js.map +1 -0
- package/dist/lib/proxy.d.ts +180 -0
- package/dist/lib/proxy.d.ts.map +1 -0
- package/dist/lib/proxy.js +1002 -0
- package/dist/lib/proxy.js.map +1 -0
- package/dist/lib/request-log.d.ts +4 -0
- package/dist/lib/request-log.d.ts.map +1 -0
- package/dist/lib/request-log.js +161 -0
- package/dist/lib/request-log.js.map +1 -0
- package/dist/lib/reset-code.d.ts +5 -0
- package/dist/lib/reset-code.d.ts.map +1 -0
- package/dist/lib/reset-code.js +39 -0
- package/dist/lib/reset-code.js.map +1 -0
- package/dist/lib/retry-hint.d.ts +14 -0
- package/dist/lib/retry-hint.d.ts.map +1 -0
- package/dist/lib/retry-hint.js +36 -0
- package/dist/lib/retry-hint.js.map +1 -0
- package/dist/lib/route-live.d.ts +29 -0
- package/dist/lib/route-live.d.ts.map +1 -0
- package/dist/lib/route-live.js +97 -0
- package/dist/lib/route-live.js.map +1 -0
- package/dist/lib/sampling-params.d.ts +183 -0
- package/dist/lib/sampling-params.d.ts.map +1 -0
- package/dist/lib/sampling-params.js +386 -0
- package/dist/lib/sampling-params.js.map +1 -0
- package/dist/lib/scheduler.d.ts +13 -0
- package/dist/lib/scheduler.d.ts.map +1 -0
- package/dist/lib/scheduler.js +11 -0
- package/dist/lib/scheduler.js.map +1 -0
- package/dist/lib/served-model.d.ts +16 -0
- package/dist/lib/served-model.d.ts.map +1 -0
- package/dist/lib/served-model.js +0 -0
- package/dist/lib/served-model.js.map +1 -0
- package/dist/lib/server-logs.d.ts +132 -0
- package/dist/lib/server-logs.d.ts.map +1 -0
- package/dist/lib/server-logs.js +473 -0
- package/dist/lib/server-logs.js.map +1 -0
- package/dist/lib/setup-code.d.ts +5 -0
- package/dist/lib/setup-code.d.ts.map +1 -0
- package/dist/lib/setup-code.js +35 -0
- package/dist/lib/setup-code.js.map +1 -0
- package/dist/lib/structured-output.d.ts +9 -0
- package/dist/lib/structured-output.d.ts.map +1 -0
- package/dist/lib/structured-output.js +72 -0
- package/dist/lib/structured-output.js.map +1 -0
- package/dist/lib/system-prompt.d.ts +30 -0
- package/dist/lib/system-prompt.d.ts.map +1 -0
- package/dist/lib/system-prompt.js +66 -0
- package/dist/lib/system-prompt.js.map +1 -0
- package/dist/lib/task-type.d.ts +18 -0
- package/dist/lib/task-type.d.ts.map +1 -0
- package/dist/lib/task-type.js +92 -0
- package/dist/lib/task-type.js.map +1 -0
- package/dist/lib/think-tags.d.ts +37 -0
- package/dist/lib/think-tags.d.ts.map +1 -0
- package/dist/lib/think-tags.js +203 -0
- package/dist/lib/think-tags.js.map +1 -0
- package/dist/lib/tool-args.d.ts +36 -0
- package/dist/lib/tool-args.d.ts.map +1 -0
- package/dist/lib/tool-args.js +190 -0
- package/dist/lib/tool-args.js.map +1 -0
- package/dist/lib/tool-call-rescue.d.ts +62 -0
- package/dist/lib/tool-call-rescue.d.ts.map +1 -0
- package/dist/lib/tool-call-rescue.js +258 -0
- package/dist/lib/tool-call-rescue.js.map +1 -0
- package/dist/lib/tool-capability.d.ts +13 -0
- package/dist/lib/tool-capability.d.ts.map +1 -0
- package/dist/lib/tool-capability.js +70 -0
- package/dist/lib/tool-capability.js.map +1 -0
- package/dist/lib/tool-validate.d.ts +44 -0
- package/dist/lib/tool-validate.d.ts.map +1 -0
- package/dist/lib/tool-validate.js +165 -0
- package/dist/lib/tool-validate.js.map +1 -0
- package/dist/lib/ttfb-budget.d.ts +13 -0
- package/dist/lib/ttfb-budget.d.ts.map +1 -0
- package/dist/lib/ttfb-budget.js +153 -0
- package/dist/lib/ttfb-budget.js.map +1 -0
- package/dist/lib/url-guard.d.ts +47 -0
- package/dist/lib/url-guard.d.ts.map +1 -0
- package/dist/lib/url-guard.js +229 -0
- package/dist/lib/url-guard.js.map +1 -0
- package/dist/lib/wake-detect.d.ts +12 -0
- package/dist/lib/wake-detect.d.ts.map +1 -0
- package/dist/lib/wake-detect.js +99 -0
- package/dist/lib/wake-detect.js.map +1 -0
- package/dist/middleware/errorHandler.d.ts +3 -0
- package/dist/middleware/errorHandler.d.ts.map +1 -0
- package/dist/middleware/errorHandler.js +45 -0
- package/dist/middleware/errorHandler.js.map +1 -0
- package/dist/middleware/rateLimit.d.ts +4 -0
- package/dist/middleware/rateLimit.d.ts.map +1 -0
- package/dist/middleware/rateLimit.js +125 -0
- package/dist/middleware/rateLimit.js.map +1 -0
- package/dist/middleware/requireAuth.d.ts +3 -0
- package/dist/middleware/requireAuth.d.ts.map +1 -0
- package/dist/middleware/requireAuth.js +17 -0
- package/dist/middleware/requireAuth.js.map +1 -0
- package/dist/providers/aclide.d.ts +18 -0
- package/dist/providers/aclide.d.ts.map +1 -0
- package/dist/providers/aclide.js +174 -0
- package/dist/providers/aclide.js.map +1 -0
- package/dist/providers/aihorde.d.ts +42 -0
- package/dist/providers/aihorde.d.ts.map +1 -0
- package/dist/providers/aihorde.js +192 -0
- package/dist/providers/aihorde.js.map +1 -0
- package/dist/providers/airforce.d.ts +11 -0
- package/dist/providers/airforce.d.ts.map +1 -0
- package/dist/providers/airforce.js +32 -0
- package/dist/providers/airforce.js.map +1 -0
- package/dist/providers/base.d.ts +177 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +354 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/blaze.d.ts +11 -0
- package/dist/providers/blaze.d.ts.map +1 -0
- package/dist/providers/blaze.js +33 -0
- package/dist/providers/blaze.js.map +1 -0
- package/dist/providers/blockrun.d.ts +14 -0
- package/dist/providers/blockrun.d.ts.map +1 -0
- package/dist/providers/blockrun.js +36 -0
- package/dist/providers/blockrun.js.map +1 -0
- package/dist/providers/clod.d.ts +11 -0
- package/dist/providers/clod.d.ts.map +1 -0
- package/dist/providers/clod.js +39 -0
- package/dist/providers/clod.js.map +1 -0
- package/dist/providers/cloudflare.d.ts +15 -0
- package/dist/providers/cloudflare.d.ts.map +1 -0
- package/dist/providers/cloudflare.js +175 -0
- package/dist/providers/cloudflare.js.map +1 -0
- package/dist/providers/cohere.d.ts +11 -0
- package/dist/providers/cohere.d.ts.map +1 -0
- package/dist/providers/cohere.js +117 -0
- package/dist/providers/cohere.js.map +1 -0
- package/dist/providers/dreamprompting.d.ts +11 -0
- package/dist/providers/dreamprompting.d.ts.map +1 -0
- package/dist/providers/dreamprompting.js +41 -0
- package/dist/providers/dreamprompting.js.map +1 -0
- package/dist/providers/electronhub.d.ts +10 -0
- package/dist/providers/electronhub.d.ts.map +1 -0
- package/dist/providers/electronhub.js +56 -0
- package/dist/providers/electronhub.js.map +1 -0
- package/dist/providers/experiential.d.ts +10 -0
- package/dist/providers/experiential.d.ts.map +1 -0
- package/dist/providers/experiential.js +33 -0
- package/dist/providers/experiential.js.map +1 -0
- package/dist/providers/gizmo.d.ts +15 -0
- package/dist/providers/gizmo.d.ts.map +1 -0
- package/dist/providers/gizmo.js +54 -0
- package/dist/providers/gizmo.js.map +1 -0
- package/dist/providers/google.d.ts +30 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +766 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/index.d.ts +13 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +561 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/llmtr.d.ts +15 -0
- package/dist/providers/llmtr.d.ts.map +1 -0
- package/dist/providers/llmtr.js +51 -0
- package/dist/providers/llmtr.js.map +1 -0
- package/dist/providers/logfare.d.ts +11 -0
- package/dist/providers/logfare.d.ts.map +1 -0
- package/dist/providers/logfare.js +33 -0
- package/dist/providers/logfare.js.map +1 -0
- package/dist/providers/lucidity.d.ts +11 -0
- package/dist/providers/lucidity.d.ts.map +1 -0
- package/dist/providers/lucidity.js +37 -0
- package/dist/providers/lucidity.js.map +1 -0
- package/dist/providers/modelscope.d.ts +50 -0
- package/dist/providers/modelscope.d.ts.map +1 -0
- package/dist/providers/modelscope.js +143 -0
- package/dist/providers/modelscope.js.map +1 -0
- package/dist/providers/moondream.d.ts +17 -0
- package/dist/providers/moondream.d.ts.map +1 -0
- package/dist/providers/moondream.js +140 -0
- package/dist/providers/moondream.js.map +1 -0
- package/dist/providers/openai-compat.d.ts +140 -0
- package/dist/providers/openai-compat.d.ts.map +1 -0
- package/dist/providers/openai-compat.js +537 -0
- package/dist/providers/openai-compat.js.map +1 -0
- package/dist/providers/opencode-free.d.ts +24 -0
- package/dist/providers/opencode-free.d.ts.map +1 -0
- package/dist/providers/opencode-free.js +262 -0
- package/dist/providers/opencode-free.js.map +1 -0
- package/dist/providers/pollinations.d.ts +32 -0
- package/dist/providers/pollinations.d.ts.map +1 -0
- package/dist/providers/pollinations.js +65 -0
- package/dist/providers/pollinations.js.map +1 -0
- package/dist/providers/router9.d.ts +16 -0
- package/dist/providers/router9.d.ts.map +1 -0
- package/dist/providers/router9.js +42 -0
- package/dist/providers/router9.js.map +1 -0
- package/dist/providers/sail.d.ts +44 -0
- package/dist/providers/sail.d.ts.map +1 -0
- package/dist/providers/sail.js +302 -0
- package/dist/providers/sail.js.map +1 -0
- package/dist/providers/septor.d.ts +10 -0
- package/dist/providers/septor.d.ts.map +1 -0
- package/dist/providers/septor.js +36 -0
- package/dist/providers/septor.js.map +1 -0
- package/dist/providers/speechify.d.ts +14 -0
- package/dist/providers/speechify.d.ts.map +1 -0
- package/dist/providers/speechify.js +28 -0
- package/dist/providers/speechify.js.map +1 -0
- package/dist/providers/speka.d.ts +12 -0
- package/dist/providers/speka.d.ts.map +1 -0
- package/dist/providers/speka.js +37 -0
- package/dist/providers/speka.js.map +1 -0
- package/dist/providers/waterfall.d.ts +11 -0
- package/dist/providers/waterfall.d.ts.map +1 -0
- package/dist/providers/waterfall.js +33 -0
- package/dist/providers/waterfall.js.map +1 -0
- package/dist/providers/xkiro.d.ts +71 -0
- package/dist/providers/xkiro.d.ts.map +1 -0
- package/dist/providers/xkiro.js +119 -0
- package/dist/providers/xkiro.js.map +1 -0
- package/dist/providers/zhipu.d.ts +43 -0
- package/dist/providers/zhipu.d.ts.map +1 -0
- package/dist/providers/zhipu.js +95 -0
- package/dist/providers/zhipu.js.map +1 -0
- package/dist/routes/analytics.d.ts +2 -0
- package/dist/routes/analytics.d.ts.map +1 -0
- package/dist/routes/analytics.js +738 -0
- package/dist/routes/analytics.js.map +1 -0
- package/dist/routes/anthropic.d.ts +7 -0
- package/dist/routes/anthropic.d.ts.map +1 -0
- package/dist/routes/anthropic.js +1076 -0
- package/dist/routes/anthropic.js.map +1 -0
- package/dist/routes/auth.d.ts +2 -0
- package/dist/routes/auth.d.ts.map +1 -0
- package/dist/routes/auth.js +310 -0
- package/dist/routes/auth.js.map +1 -0
- package/dist/routes/backups.d.ts +2 -0
- package/dist/routes/backups.d.ts.map +1 -0
- package/dist/routes/backups.js +127 -0
- package/dist/routes/backups.js.map +1 -0
- package/dist/routes/cache.d.ts +2 -0
- package/dist/routes/cache.d.ts.map +1 -0
- package/dist/routes/cache.js +40 -0
- package/dist/routes/cache.js.map +1 -0
- package/dist/routes/client-profiles.d.ts +2 -0
- package/dist/routes/client-profiles.d.ts.map +1 -0
- package/dist/routes/client-profiles.js +128 -0
- package/dist/routes/client-profiles.js.map +1 -0
- package/dist/routes/compression.d.ts +2 -0
- package/dist/routes/compression.d.ts.map +1 -0
- package/dist/routes/compression.js +82 -0
- package/dist/routes/compression.js.map +1 -0
- package/dist/routes/conversations.d.ts +3 -0
- package/dist/routes/conversations.d.ts.map +1 -0
- package/dist/routes/conversations.js +215 -0
- package/dist/routes/conversations.js.map +1 -0
- package/dist/routes/docs.d.ts +2 -0
- package/dist/routes/docs.d.ts.map +1 -0
- package/dist/routes/docs.js +21 -0
- package/dist/routes/docs.js.map +1 -0
- package/dist/routes/embeddings.d.ts +2 -0
- package/dist/routes/embeddings.d.ts.map +1 -0
- package/dist/routes/embeddings.js +255 -0
- package/dist/routes/embeddings.js.map +1 -0
- package/dist/routes/fallback.d.ts +2 -0
- package/dist/routes/fallback.d.ts.map +1 -0
- package/dist/routes/fallback.js +631 -0
- package/dist/routes/fallback.js.map +1 -0
- package/dist/routes/free-tier.d.ts +22 -0
- package/dist/routes/free-tier.d.ts.map +1 -0
- package/dist/routes/free-tier.js +175 -0
- package/dist/routes/free-tier.js.map +1 -0
- package/dist/routes/gemini.d.ts +2 -0
- package/dist/routes/gemini.d.ts.map +1 -0
- package/dist/routes/gemini.js +218 -0
- package/dist/routes/gemini.js.map +1 -0
- package/dist/routes/health.d.ts +2 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +72 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/keys.d.ts +17 -0
- package/dist/routes/keys.d.ts.map +1 -0
- package/dist/routes/keys.js +1787 -0
- package/dist/routes/keys.js.map +1 -0
- package/dist/routes/logs.d.ts +2 -0
- package/dist/routes/logs.d.ts.map +1 -0
- package/dist/routes/logs.js +88 -0
- package/dist/routes/logs.js.map +1 -0
- package/dist/routes/mcp.d.ts +4 -0
- package/dist/routes/mcp.d.ts.map +1 -0
- package/dist/routes/mcp.js +563 -0
- package/dist/routes/mcp.js.map +1 -0
- package/dist/routes/media.d.ts +2 -0
- package/dist/routes/media.d.ts.map +1 -0
- package/dist/routes/media.js +180 -0
- package/dist/routes/media.js.map +1 -0
- package/dist/routes/models.d.ts +2 -0
- package/dist/routes/models.d.ts.map +1 -0
- package/dist/routes/models.js +439 -0
- package/dist/routes/models.js.map +1 -0
- package/dist/routes/ollama.d.ts +7 -0
- package/dist/routes/ollama.d.ts.map +1 -0
- package/dist/routes/ollama.js +595 -0
- package/dist/routes/ollama.js.map +1 -0
- package/dist/routes/profiles.d.ts +3 -0
- package/dist/routes/profiles.d.ts.map +1 -0
- package/dist/routes/profiles.js +431 -0
- package/dist/routes/profiles.js.map +1 -0
- package/dist/routes/proxy.d.ts +32 -0
- package/dist/routes/proxy.d.ts.map +1 -0
- package/dist/routes/proxy.js +2793 -0
- package/dist/routes/proxy.js.map +1 -0
- package/dist/routes/responses.d.ts +1161 -0
- package/dist/routes/responses.d.ts.map +1 -0
- package/dist/routes/responses.js +1521 -0
- package/dist/routes/responses.js.map +1 -0
- package/dist/routes/settings.d.ts +2 -0
- package/dist/routes/settings.d.ts.map +1 -0
- package/dist/routes/settings.js +549 -0
- package/dist/routes/settings.js.map +1 -0
- package/dist/routes/status.d.ts +3 -0
- package/dist/routes/status.d.ts.map +1 -0
- package/dist/routes/status.js +214 -0
- package/dist/routes/status.js.map +1 -0
- package/dist/routes/update.d.ts +31 -0
- package/dist/routes/update.d.ts.map +1 -0
- package/dist/routes/update.js +536 -0
- package/dist/routes/update.js.map +1 -0
- package/dist/routes/url-tokens.d.ts +2 -0
- package/dist/routes/url-tokens.d.ts.map +1 -0
- package/dist/routes/url-tokens.js +31 -0
- package/dist/routes/url-tokens.js.map +1 -0
- package/dist/scripts/export-catalog.d.ts +2 -0
- package/dist/scripts/export-catalog.d.ts.map +1 -0
- package/dist/scripts/export-catalog.js +114 -0
- package/dist/scripts/export-catalog.js.map +1 -0
- package/dist/scripts/rotate-encryption-key.d.ts +81 -0
- package/dist/scripts/rotate-encryption-key.d.ts.map +1 -0
- package/dist/scripts/rotate-encryption-key.js +232 -0
- package/dist/scripts/rotate-encryption-key.js.map +1 -0
- package/dist/scripts/routing-sim.d.ts +2 -0
- package/dist/scripts/routing-sim.d.ts.map +1 -0
- package/dist/scripts/routing-sim.js +130 -0
- package/dist/scripts/routing-sim.js.map +1 -0
- package/dist/scripts/test-all-models.d.ts +2 -0
- package/dist/scripts/test-all-models.d.ts.map +1 -0
- package/dist/scripts/test-all-models.js +56 -0
- package/dist/scripts/test-all-models.js.map +1 -0
- package/dist/services/anthropic-map.d.ts +39 -0
- package/dist/services/anthropic-map.d.ts.map +1 -0
- package/dist/services/anthropic-map.js +138 -0
- package/dist/services/anthropic-map.js.map +1 -0
- package/dist/services/auth.d.ts +30 -0
- package/dist/services/auth.d.ts.map +1 -0
- package/dist/services/auth.js +124 -0
- package/dist/services/auth.js.map +1 -0
- package/dist/services/auto-discover.d.ts +77 -0
- package/dist/services/auto-discover.d.ts.map +1 -0
- package/dist/services/auto-discover.js +1047 -0
- package/dist/services/auto-discover.js.map +1 -0
- package/dist/services/backups.d.ts +67 -0
- package/dist/services/backups.d.ts.map +1 -0
- package/dist/services/backups.js +444 -0
- package/dist/services/backups.js.map +1 -0
- package/dist/services/builtin-model-discovery.d.ts +107 -0
- package/dist/services/builtin-model-discovery.d.ts.map +1 -0
- package/dist/services/builtin-model-discovery.js +296 -0
- package/dist/services/builtin-model-discovery.js.map +1 -0
- package/dist/services/cache.d.ts +190 -0
- package/dist/services/cache.d.ts.map +1 -0
- package/dist/services/cache.js +617 -0
- package/dist/services/cache.js.map +1 -0
- package/dist/services/catalog-sync.d.ts +257 -0
- package/dist/services/catalog-sync.d.ts.map +1 -0
- package/dist/services/catalog-sync.js +1041 -0
- package/dist/services/catalog-sync.js.map +1 -0
- package/dist/services/compression/config.d.ts +33 -0
- package/dist/services/compression/config.d.ts.map +1 -0
- package/dist/services/compression/config.js +158 -0
- package/dist/services/compression/config.js.map +1 -0
- package/dist/services/compression/engines/aging.d.ts +2 -0
- package/dist/services/compression/engines/aging.d.ts.map +1 -0
- package/dist/services/compression/engines/aging.js +53 -0
- package/dist/services/compression/engines/aging.js.map +1 -0
- package/dist/services/compression/engines/custom-filters.d.ts +4 -0
- package/dist/services/compression/engines/custom-filters.d.ts.map +1 -0
- package/dist/services/compression/engines/custom-filters.js +49 -0
- package/dist/services/compression/engines/custom-filters.js.map +1 -0
- package/dist/services/compression/engines/dedup.d.ts +2 -0
- package/dist/services/compression/engines/dedup.d.ts.map +1 -0
- package/dist/services/compression/engines/dedup.js +61 -0
- package/dist/services/compression/engines/dedup.js.map +1 -0
- package/dist/services/compression/engines/filter-definitions.d.ts +75 -0
- package/dist/services/compression/engines/filter-definitions.d.ts.map +1 -0
- package/dist/services/compression/engines/filter-definitions.js +45 -0
- package/dist/services/compression/engines/filter-definitions.js.map +1 -0
- package/dist/services/compression/engines/hard-budget.d.ts +2 -0
- package/dist/services/compression/engines/hard-budget.d.ts.map +1 -0
- package/dist/services/compression/engines/hard-budget.js +52 -0
- package/dist/services/compression/engines/hard-budget.js.map +1 -0
- package/dist/services/compression/engines/index.d.ts +9 -0
- package/dist/services/compression/engines/index.d.ts.map +1 -0
- package/dist/services/compression/engines/index.js +9 -0
- package/dist/services/compression/engines/index.js.map +1 -0
- package/dist/services/compression/engines/jsoncompact.d.ts +3 -0
- package/dist/services/compression/engines/jsoncompact.d.ts.map +1 -0
- package/dist/services/compression/engines/jsoncompact.js +145 -0
- package/dist/services/compression/engines/jsoncompact.js.map +1 -0
- package/dist/services/compression/engines/lite.d.ts +2 -0
- package/dist/services/compression/engines/lite.d.ts.map +1 -0
- package/dist/services/compression/engines/lite.js +34 -0
- package/dist/services/compression/engines/lite.js.map +1 -0
- package/dist/services/compression/engines/read-lifecycle.d.ts +2 -0
- package/dist/services/compression/engines/read-lifecycle.d.ts.map +1 -0
- package/dist/services/compression/engines/read-lifecycle.js +70 -0
- package/dist/services/compression/engines/read-lifecycle.js.map +1 -0
- package/dist/services/compression/engines/relevance.d.ts +2 -0
- package/dist/services/compression/engines/relevance.d.ts.map +1 -0
- package/dist/services/compression/engines/relevance.js +74 -0
- package/dist/services/compression/engines/relevance.js.map +1 -0
- package/dist/services/compression/engines/toolfilter.d.ts +2 -0
- package/dist/services/compression/engines/toolfilter.d.ts.map +1 -0
- package/dist/services/compression/engines/toolfilter.js +195 -0
- package/dist/services/compression/engines/toolfilter.js.map +1 -0
- package/dist/services/compression/fidelity-gate.d.ts +12 -0
- package/dist/services/compression/fidelity-gate.d.ts.map +1 -0
- package/dist/services/compression/fidelity-gate.js +90 -0
- package/dist/services/compression/fidelity-gate.js.map +1 -0
- package/dist/services/compression/helpers.d.ts +9 -0
- package/dist/services/compression/helpers.d.ts.map +1 -0
- package/dist/services/compression/helpers.js +52 -0
- package/dist/services/compression/helpers.js.map +1 -0
- package/dist/services/compression/pipeline.d.ts +7 -0
- package/dist/services/compression/pipeline.d.ts.map +1 -0
- package/dist/services/compression/pipeline.js +245 -0
- package/dist/services/compression/pipeline.js.map +1 -0
- package/dist/services/compression/preservation.d.ts +27 -0
- package/dist/services/compression/preservation.d.ts.map +1 -0
- package/dist/services/compression/preservation.js +109 -0
- package/dist/services/compression/preservation.js.map +1 -0
- package/dist/services/compression/registry.d.ts +6 -0
- package/dist/services/compression/registry.d.ts.map +1 -0
- package/dist/services/compression/registry.js +16 -0
- package/dist/services/compression/registry.js.map +1 -0
- package/dist/services/compression/stats.d.ts +29 -0
- package/dist/services/compression/stats.d.ts.map +1 -0
- package/dist/services/compression/stats.js +55 -0
- package/dist/services/compression/stats.js.map +1 -0
- package/dist/services/compression/types.d.ts +90 -0
- package/dist/services/compression/types.d.ts.map +1 -0
- package/dist/services/compression/types.js +2 -0
- package/dist/services/compression/types.js.map +1 -0
- package/dist/services/context-handoff.d.ts +22 -0
- package/dist/services/context-handoff.d.ts.map +1 -0
- package/dist/services/context-handoff.js +164 -0
- package/dist/services/context-handoff.js.map +1 -0
- package/dist/services/cooldown-probe.d.ts +24 -0
- package/dist/services/cooldown-probe.d.ts.map +1 -0
- package/dist/services/cooldown-probe.js +181 -0
- package/dist/services/cooldown-probe.js.map +1 -0
- package/dist/services/custom-endpoint.d.ts +58 -0
- package/dist/services/custom-endpoint.d.ts.map +1 -0
- package/dist/services/custom-endpoint.js +167 -0
- package/dist/services/custom-endpoint.js.map +1 -0
- package/dist/services/custom-media-register.d.ts +22 -0
- package/dist/services/custom-media-register.d.ts.map +1 -0
- package/dist/services/custom-media-register.js +45 -0
- package/dist/services/custom-media-register.js.map +1 -0
- package/dist/services/custom-model-register.d.ts +50 -0
- package/dist/services/custom-model-register.d.ts.map +1 -0
- package/dist/services/custom-model-register.js +103 -0
- package/dist/services/custom-model-register.js.map +1 -0
- package/dist/services/custom-model-seed.d.ts +18 -0
- package/dist/services/custom-model-seed.d.ts.map +1 -0
- package/dist/services/custom-model-seed.js +42 -0
- package/dist/services/custom-model-seed.js.map +1 -0
- package/dist/services/custom-model-sync.d.ts +37 -0
- package/dist/services/custom-model-sync.d.ts.map +1 -0
- package/dist/services/custom-model-sync.js +118 -0
- package/dist/services/custom-model-sync.js.map +1 -0
- package/dist/services/custom-model-tombstone.d.ts +5 -0
- package/dist/services/custom-model-tombstone.d.ts.map +1 -0
- package/dist/services/custom-model-tombstone.js +30 -0
- package/dist/services/custom-model-tombstone.js.map +1 -0
- package/dist/services/declarative-config.d.ts +356 -0
- package/dist/services/declarative-config.d.ts.map +1 -0
- package/dist/services/declarative-config.js +427 -0
- package/dist/services/declarative-config.js.map +1 -0
- package/dist/services/degradation.d.ts +40 -0
- package/dist/services/degradation.d.ts.map +1 -0
- package/dist/services/degradation.js +119 -0
- package/dist/services/degradation.js.map +1 -0
- package/dist/services/embeddings.d.ts +76 -0
- package/dist/services/embeddings.d.ts.map +1 -0
- package/dist/services/embeddings.js +319 -0
- package/dist/services/embeddings.js.map +1 -0
- package/dist/services/fusion.d.ts +162 -0
- package/dist/services/fusion.d.ts.map +1 -0
- package/dist/services/fusion.js +789 -0
- package/dist/services/fusion.js.map +1 -0
- package/dist/services/gemini-map.d.ts +14 -0
- package/dist/services/gemini-map.d.ts.map +1 -0
- package/dist/services/gemini-map.js +78 -0
- package/dist/services/gemini-map.js.map +1 -0
- package/dist/services/health.d.ts +52 -0
- package/dist/services/health.d.ts.map +1 -0
- package/dist/services/health.js +352 -0
- package/dist/services/health.js.map +1 -0
- package/dist/services/idempotency.d.ts +49 -0
- package/dist/services/idempotency.d.ts.map +1 -0
- package/dist/services/idempotency.js +140 -0
- package/dist/services/idempotency.js.map +1 -0
- package/dist/services/key-budget.d.ts +74 -0
- package/dist/services/key-budget.d.ts.map +1 -0
- package/dist/services/key-budget.js +200 -0
- package/dist/services/key-budget.js.map +1 -0
- package/dist/services/media.d.ts +123 -0
- package/dist/services/media.d.ts.map +1 -0
- package/dist/services/media.js +954 -0
- package/dist/services/media.js.map +1 -0
- package/dist/services/model-discovery.d.ts +126 -0
- package/dist/services/model-discovery.d.ts.map +1 -0
- package/dist/services/model-discovery.js +662 -0
- package/dist/services/model-discovery.js.map +1 -0
- package/dist/services/model-groups.d.ts +149 -0
- package/dist/services/model-groups.d.ts.map +1 -0
- package/dist/services/model-groups.js +314 -0
- package/dist/services/model-groups.js.map +1 -0
- package/dist/services/model-listing.d.ts +18 -0
- package/dist/services/model-listing.d.ts.map +1 -0
- package/dist/services/model-listing.js +94 -0
- package/dist/services/model-listing.js.map +1 -0
- package/dist/services/model-retirement.d.ts +29 -0
- package/dist/services/model-retirement.d.ts.map +1 -0
- package/dist/services/model-retirement.js +86 -0
- package/dist/services/model-retirement.js.map +1 -0
- package/dist/services/model-state.d.ts +90 -0
- package/dist/services/model-state.d.ts.map +1 -0
- package/dist/services/model-state.js +342 -0
- package/dist/services/model-state.js.map +1 -0
- package/dist/services/model-weight-overrides.d.ts +48 -0
- package/dist/services/model-weight-overrides.d.ts.map +1 -0
- package/dist/services/model-weight-overrides.js +127 -0
- package/dist/services/model-weight-overrides.js.map +1 -0
- package/dist/services/notification-emitter.d.ts +50 -0
- package/dist/services/notification-emitter.d.ts.map +1 -0
- package/dist/services/notification-emitter.js +177 -0
- package/dist/services/notification-emitter.js.map +1 -0
- package/dist/services/opencode-free-sync.d.ts +29 -0
- package/dist/services/opencode-free-sync.d.ts.map +1 -0
- package/dist/services/opencode-free-sync.js +206 -0
- package/dist/services/opencode-free-sync.js.map +1 -0
- package/dist/services/penalty-inspector.d.ts +56 -0
- package/dist/services/penalty-inspector.d.ts.map +1 -0
- package/dist/services/penalty-inspector.js +167 -0
- package/dist/services/penalty-inspector.js.map +1 -0
- package/dist/services/profile-models.d.ts +5 -0
- package/dist/services/profile-models.d.ts.map +1 -0
- package/dist/services/profile-models.js +62 -0
- package/dist/services/profile-models.js.map +1 -0
- package/dist/services/provider-credential.d.ts +19 -0
- package/dist/services/provider-credential.d.ts.map +1 -0
- package/dist/services/provider-credential.js +51 -0
- package/dist/services/provider-credential.js.map +1 -0
- package/dist/services/provider-quota.d.ts +64 -0
- package/dist/services/provider-quota.d.ts.map +1 -0
- package/dist/services/provider-quota.js +563 -0
- package/dist/services/provider-quota.js.map +1 -0
- package/dist/services/quirks.d.ts +0 -0
- package/dist/services/quirks.d.ts.map +1 -0
- package/dist/services/quirks.js +0 -0
- package/dist/services/quirks.js.map +1 -0
- package/dist/services/quota-forecast.d.ts +50 -0
- package/dist/services/quota-forecast.d.ts.map +1 -0
- package/dist/services/quota-forecast.js +150 -0
- package/dist/services/quota-forecast.js.map +1 -0
- package/dist/services/quota-outlook.d.ts +4 -0
- package/dist/services/quota-outlook.d.ts.map +1 -0
- package/dist/services/quota-outlook.js +92 -0
- package/dist/services/quota-outlook.js.map +1 -0
- package/dist/services/ratelimit.d.ts +249 -0
- package/dist/services/ratelimit.d.ts.map +1 -0
- package/dist/services/ratelimit.js +1182 -0
- package/dist/services/ratelimit.js.map +1 -0
- package/dist/services/request-retention.d.ts +60 -0
- package/dist/services/request-retention.d.ts.map +1 -0
- package/dist/services/request-retention.js +229 -0
- package/dist/services/request-retention.js.map +1 -0
- package/dist/services/router.d.ts +384 -0
- package/dist/services/router.d.ts.map +1 -0
- package/dist/services/router.js +1986 -0
- package/dist/services/router.js.map +1 -0
- package/dist/services/scoring.d.ts +156 -0
- package/dist/services/scoring.d.ts.map +1 -0
- package/dist/services/scoring.js +435 -0
- package/dist/services/scoring.js.map +1 -0
- package/dist/services/url-tokens.d.ts +15 -0
- package/dist/services/url-tokens.d.ts.map +1 -0
- package/dist/services/url-tokens.js +55 -0
- package/dist/services/url-tokens.js.map +1 -0
- package/package.json +77 -4
- package/README.md +0 -3
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// Migration: cooldown provenance for probe-based early recovery
|
|
2
|
+
// Created: 2026-07-26
|
|
3
|
+
//
|
|
4
|
+
// DOWN: reversible
|
|
5
|
+
//
|
|
6
|
+
// The cooldown-probe recovery job (services/cooldown-probe.ts) may only probe
|
|
7
|
+
// cooldowns that are OUR OWN guesses. A cooldown backed by an authoritative
|
|
8
|
+
// retry time (explicit Retry-After, daily-quota reset) is a fact the provider
|
|
9
|
+
// told us; probing those wastes validate calls and can never legitimately clear
|
|
10
|
+
// them early. `source` records that provenance at setCooldown time; `set_at_ms`
|
|
11
|
+
// records when the bench started, so the prober can wait out a fraction of the
|
|
12
|
+
// bench before the first probe instead of probing a seconds-old cooldown.
|
|
13
|
+
function hasColumn(db, table, column) {
|
|
14
|
+
const columns = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
15
|
+
return columns.some((candidate) => candidate.name === column);
|
|
16
|
+
}
|
|
17
|
+
export function up(db) {
|
|
18
|
+
if (!hasColumn(db, 'rate_limit_cooldowns', 'source')) {
|
|
19
|
+
// Pre-existing rows default to 'heuristic' (probe-eligible): before this
|
|
20
|
+
// migration every cooldown kind was mixed together, and a spurious probe on
|
|
21
|
+
// an old authoritative row costs one cheap validate call at worst.
|
|
22
|
+
db.prepare("ALTER TABLE rate_limit_cooldowns ADD COLUMN source TEXT NOT NULL DEFAULT 'heuristic'").run();
|
|
23
|
+
}
|
|
24
|
+
if (!hasColumn(db, 'rate_limit_cooldowns', 'set_at_ms')) {
|
|
25
|
+
// Nullable: rows written before this migration have an unknown start time,
|
|
26
|
+
// which the prober treats as "old enough to probe".
|
|
27
|
+
db.prepare('ALTER TABLE rate_limit_cooldowns ADD COLUMN set_at_ms INTEGER').run();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function down(db) {
|
|
31
|
+
if (hasColumn(db, 'rate_limit_cooldowns', 'source')) {
|
|
32
|
+
db.prepare('ALTER TABLE rate_limit_cooldowns DROP COLUMN source').run();
|
|
33
|
+
}
|
|
34
|
+
if (hasColumn(db, 'rate_limit_cooldowns', 'set_at_ms')) {
|
|
35
|
+
db.prepare('ALTER TABLE rate_limit_cooldowns DROP COLUMN set_at_ms').run();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=20260726_000001_cooldown_probe_provenance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20260726_000001_cooldown_probe_provenance.js","sourceRoot":"","sources":["../../../src/db/migrations/20260726_000001_cooldown_probe_provenance.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,EAAE;AACF,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAC9E,gFAAgF;AAChF,gFAAgF;AAChF,+EAA+E;AAC/E,0EAA0E;AAI1E,SAAS,SAAS,CAAC,EAAM,EAAE,KAAa,EAAE,MAAc;IACtD,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC,GAAG,EAAwB,CAAC;IACtF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,EAAE,CAAC,EAAM;IACvB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,sBAAsB,EAAE,QAAQ,CAAC,EAAE,CAAC;QACrD,yEAAyE;QACzE,4EAA4E;QAC5E,mEAAmE;QACnE,EAAE,CAAC,OAAO,CAAC,sFAAsF,CAAC,CAAC,GAAG,EAAE,CAAC;IAC3G,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,sBAAsB,EAAE,WAAW,CAAC,EAAE,CAAC;QACxD,2EAA2E;QAC3E,oDAAoD;QACpD,EAAE,CAAC,OAAO,CAAC,+DAA+D,CAAC,CAAC,GAAG,EAAE,CAAC;IACpF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,EAAM;IACzB,IAAI,SAAS,CAAC,EAAE,EAAE,sBAAsB,EAAE,QAAQ,CAAC,EAAE,CAAC;QACpD,EAAE,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC,GAAG,EAAE,CAAC;IAC1E,CAAC;IACD,IAAI,SAAS,CAAC,EAAE,EAAE,sBAAsB,EAAE,WAAW,CAAC,EAAE,CAAC;QACvD,EAAE,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAC,GAAG,EAAE,CAAC;IAC7E,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20260726_000002_request_attempts.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/20260726_000002_request_attempts.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEtC,wBAAgB,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAiB/B;AAED,wBAAgB,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAKjC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Migration: per-attempt routing traces (request_attempts)
|
|
2
|
+
// Created: 2026-07-26
|
|
3
|
+
//
|
|
4
|
+
// DOWN: reversible
|
|
5
|
+
//
|
|
6
|
+
// When a request walks the failover ladder (groq 429 → google timeout →
|
|
7
|
+
// cerebras ok), the `requests` table records isolated rows with no linkage,
|
|
8
|
+
// ordering, or per-attempt timing — the journey that explains "why was this
|
|
9
|
+
// slow/failed" is invisible. `request_attempts` stores one row per dispatched
|
|
10
|
+
// attempt (including the successful final one), keyed to the TERMINAL
|
|
11
|
+
// `requests` row of the ladder: provider, model, per-request key ordinal
|
|
12
|
+
// (never the internal key id), outcome class, start offset from the ladder's
|
|
13
|
+
// start, and duration.
|
|
14
|
+
//
|
|
15
|
+
// ON DELETE CASCADE ties child rows to the requests retention prune
|
|
16
|
+
// (services/request-retention.ts): the connection opens with
|
|
17
|
+
// PRAGMA foreign_keys = ON (db/index.ts), so pruning a parent removes its
|
|
18
|
+
// attempts with no extra query and no unbounded growth.
|
|
19
|
+
export function up(db) {
|
|
20
|
+
db.exec(`
|
|
21
|
+
CREATE TABLE IF NOT EXISTS request_attempts (
|
|
22
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
23
|
+
request_id INTEGER NOT NULL REFERENCES requests(id) ON DELETE CASCADE,
|
|
24
|
+
ordinal INTEGER NOT NULL,
|
|
25
|
+
platform TEXT NOT NULL,
|
|
26
|
+
model_id TEXT NOT NULL,
|
|
27
|
+
key_ordinal INTEGER NOT NULL,
|
|
28
|
+
outcome TEXT NOT NULL,
|
|
29
|
+
start_offset_ms INTEGER NOT NULL DEFAULT 0,
|
|
30
|
+
duration_ms INTEGER NOT NULL DEFAULT 0
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
CREATE INDEX IF NOT EXISTS idx_request_attempts_request_id
|
|
34
|
+
ON request_attempts(request_id, ordinal);
|
|
35
|
+
`);
|
|
36
|
+
}
|
|
37
|
+
export function down(db) {
|
|
38
|
+
db.exec(`
|
|
39
|
+
DROP INDEX IF EXISTS idx_request_attempts_request_id;
|
|
40
|
+
DROP TABLE IF EXISTS request_attempts;
|
|
41
|
+
`);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=20260726_000002_request_attempts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20260726_000002_request_attempts.js","sourceRoot":"","sources":["../../../src/db/migrations/20260726_000002_request_attempts.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,EAAE;AACF,wEAAwE;AACxE,4EAA4E;AAC5E,4EAA4E;AAC5E,8EAA8E;AAC9E,sEAAsE;AACtE,yEAAyE;AACzE,6EAA6E;AAC7E,uBAAuB;AACvB,EAAE;AACF,oEAAoE;AACpE,6DAA6D;AAC7D,0EAA0E;AAC1E,wDAAwD;AAIxD,MAAM,UAAU,EAAE,CAAC,EAAM;IACvB,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;GAeP,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,EAAM;IACzB,EAAE,CAAC,IAAI,CAAC;;;GAGP,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20260726_000003_model_source_provenance.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/20260726_000003_model_source_provenance.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAOtC,wBAAgB,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAgD/B;AAED,wBAAgB,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAIjC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// Migration: models.source provenance (catalog vs user) for the sync delete guard
|
|
2
|
+
// Created: 2026-07-26
|
|
3
|
+
//
|
|
4
|
+
// DOWN: reversible
|
|
5
|
+
//
|
|
6
|
+
// catalog-sync prunes chat models that the published catalog no longer lists.
|
|
7
|
+
// Before this column the prune had to GUESS which rows it owned from
|
|
8
|
+
// platform/key_id/size_label heuristics, so a hand-added model on a native
|
|
9
|
+
// platform (declarative config's `models:` entries, admin edits) could be
|
|
10
|
+
// silently deleted or clobbered on the next sync as soon as its size_label
|
|
11
|
+
// stopped matching the 'User'/'Custom' convention. `source` records who
|
|
12
|
+
// created the row at insert time:
|
|
13
|
+
// 'catalog' — catalog sync or the bundled baseline migrations
|
|
14
|
+
// 'user' — dashboard, custom endpoints, declarative config
|
|
15
|
+
//
|
|
16
|
+
// The column DEFAULT is 'catalog' on purpose: the baseline migration's
|
|
17
|
+
// INSERT OR IGNORE re-seeds (run on every fresh migrations table) must stay
|
|
18
|
+
// catalog-owned so reapplyCachedCatalog can prune them again after boot.
|
|
19
|
+
// Every user-facing write path sets 'user' explicitly.
|
|
20
|
+
function hasColumn(db, table, column) {
|
|
21
|
+
const columns = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
22
|
+
return columns.some((candidate) => candidate.name === column);
|
|
23
|
+
}
|
|
24
|
+
export function up(db) {
|
|
25
|
+
if (!hasColumn(db, 'models', 'source')) {
|
|
26
|
+
db.prepare("ALTER TABLE models ADD COLUMN source TEXT NOT NULL DEFAULT 'catalog'").run();
|
|
27
|
+
}
|
|
28
|
+
// Backfill pre-existing rows, strongest signal first: everything the old
|
|
29
|
+
// prune guard already treated as user-owned is user-owned.
|
|
30
|
+
db.prepare(`
|
|
31
|
+
UPDATE models
|
|
32
|
+
SET source = 'user'
|
|
33
|
+
WHERE platform = 'custom'
|
|
34
|
+
OR key_id IS NOT NULL
|
|
35
|
+
OR size_label IN ('User', 'Custom')
|
|
36
|
+
`).run();
|
|
37
|
+
// Then consult the currently-applied catalog (the signed document cached by
|
|
38
|
+
// catalog-sync in settings.catalog_applied_json). A surviving row that the
|
|
39
|
+
// applied catalog does not list — and that the heuristics above did not
|
|
40
|
+
// claim — can only have been added locally: sync prunes catalog-owned
|
|
41
|
+
// leftovers on every apply, so catalog rows absent from the catalog do not
|
|
42
|
+
// linger. With no applied catalog (fresh install, never synced) every
|
|
43
|
+
// remaining row came from the bundled baseline, so the 'catalog' default
|
|
44
|
+
// stands.
|
|
45
|
+
try {
|
|
46
|
+
const setting = db
|
|
47
|
+
.prepare("SELECT value FROM settings WHERE key = 'catalog_applied_json'")
|
|
48
|
+
.get();
|
|
49
|
+
if (!setting)
|
|
50
|
+
return;
|
|
51
|
+
const parsed = JSON.parse(setting.value);
|
|
52
|
+
if (!parsed || !Array.isArray(parsed.models))
|
|
53
|
+
return;
|
|
54
|
+
const inCatalog = new Set();
|
|
55
|
+
for (const m of parsed.models) {
|
|
56
|
+
if (typeof m?.platform === 'string' && typeof m?.modelId === 'string') {
|
|
57
|
+
inCatalog.add(`${m.platform}:${m.modelId}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const rows = db
|
|
61
|
+
.prepare("SELECT id, platform, model_id FROM models WHERE source = 'catalog'")
|
|
62
|
+
.all();
|
|
63
|
+
const markUser = db.prepare("UPDATE models SET source = 'user' WHERE id = ?");
|
|
64
|
+
for (const row of rows) {
|
|
65
|
+
if (!inCatalog.has(`${row.platform}:${row.model_id}`))
|
|
66
|
+
markUser.run(row.id);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// A corrupt cached catalog must not block the migration; rows keep the
|
|
71
|
+
// heuristic-based backfill above, which errs on the side the old guard
|
|
72
|
+
// already enforced.
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export function down(db) {
|
|
76
|
+
if (hasColumn(db, 'models', 'source')) {
|
|
77
|
+
db.prepare('ALTER TABLE models DROP COLUMN source').run();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=20260726_000003_model_source_provenance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20260726_000003_model_source_provenance.js","sourceRoot":"","sources":["../../../src/db/migrations/20260726_000003_model_source_provenance.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,EAAE;AACF,8EAA8E;AAC9E,qEAAqE;AACrE,2EAA2E;AAC3E,0EAA0E;AAC1E,2EAA2E;AAC3E,wEAAwE;AACxE,kCAAkC;AAClC,gEAAgE;AAChE,gEAAgE;AAChE,EAAE;AACF,uEAAuE;AACvE,4EAA4E;AAC5E,yEAAyE;AACzE,uDAAuD;AAIvD,SAAS,SAAS,CAAC,EAAM,EAAE,KAAa,EAAE,MAAc;IACtD,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC,GAAG,EAAwB,CAAC;IACtF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,EAAE,CAAC,EAAM;IACvB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;QACvC,EAAE,CAAC,OAAO,CAAC,sEAAsE,CAAC,CAAC,GAAG,EAAE,CAAC;IAC3F,CAAC;IAED,yEAAyE;IACzE,2DAA2D;IAC3D,EAAE,CAAC,OAAO,CAAC;;;;;;GAMV,CAAC,CAAC,GAAG,EAAE,CAAC;IAET,4EAA4E;IAC5E,2EAA2E;IAC3E,wEAAwE;IACxE,sEAAsE;IACtE,2EAA2E;IAC3E,sEAAsE;IACtE,yEAAyE;IACzE,UAAU;IACV,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE;aACf,OAAO,CAAC,+DAA+D,CAAC;aACxE,GAAG,EAAmC,CAAC;QAC1C,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAyB,CAAC;QACjE,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;YAAE,OAAO;QACrD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAqD,EAAE,CAAC;YAC7E,IAAI,OAAO,CAAC,EAAE,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,EAAE,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACtE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,EAAE;aACZ,OAAO,CAAC,oEAAoE,CAAC;aAC7E,GAAG,EAA0D,CAAC;QACjE,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC;QAC9E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;QACvE,uEAAuE;QACvE,oBAAoB;IACtB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,EAAM;IACzB,IAAI,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;QACtC,EAAE,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC,GAAG,EAAE,CAAC;IAC5D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20260726_000004_media_model_meta.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/20260726_000004_media_model_meta.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAOtC,wBAAgB,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAI/B;AAED,wBAAgB,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAIjC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// Migration: media_models.meta_json — per-model adapter metadata from the catalog
|
|
2
|
+
// Created: 2026-07-26
|
|
3
|
+
//
|
|
4
|
+
// DOWN: reversible
|
|
5
|
+
//
|
|
6
|
+
// The transcription (STT) registry moves out of code and into the published
|
|
7
|
+
// catalog's `transcriptionModels` array, landing in media_models with
|
|
8
|
+
// modality='transcription'. Unlike image/TTS rows, transcription rows carry
|
|
9
|
+
// per-model facts the adapters need at request time:
|
|
10
|
+
// - subtitleFormats: subtitle formats the provider produces natively (vtt)
|
|
11
|
+
// - maxBytes: provider upload ceiling in bytes
|
|
12
|
+
// - requestStyle: adapter request flavor where one platform hosts more
|
|
13
|
+
// than one deployment style (cloudflare 'json' = base64
|
|
14
|
+
// JSON body, 'binary' = raw bytes)
|
|
15
|
+
// These ride in one nullable JSON column rather than three sparse columns:
|
|
16
|
+
// they are opaque to SQL (never filtered or joined on), only parsed by the
|
|
17
|
+
// media service, and future modalities can reuse the column without another
|
|
18
|
+
// migration. NULL / absent keys mean "no special capability", which is the
|
|
19
|
+
// correct default for every pre-existing image/audio row.
|
|
20
|
+
function hasColumn(db, table, column) {
|
|
21
|
+
const columns = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
22
|
+
return columns.some((candidate) => candidate.name === column);
|
|
23
|
+
}
|
|
24
|
+
export function up(db) {
|
|
25
|
+
if (!hasColumn(db, 'media_models', 'meta_json')) {
|
|
26
|
+
db.prepare('ALTER TABLE media_models ADD COLUMN meta_json TEXT').run();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function down(db) {
|
|
30
|
+
if (hasColumn(db, 'media_models', 'meta_json')) {
|
|
31
|
+
db.prepare('ALTER TABLE media_models DROP COLUMN meta_json').run();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=20260726_000004_media_model_meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20260726_000004_media_model_meta.js","sourceRoot":"","sources":["../../../src/db/migrations/20260726_000004_media_model_meta.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,EAAE;AACF,4EAA4E;AAC5E,sEAAsE;AACtE,4EAA4E;AAC5E,qDAAqD;AACrD,6EAA6E;AAC7E,wDAAwD;AACxD,4EAA4E;AAC5E,6EAA6E;AAC7E,wDAAwD;AACxD,2EAA2E;AAC3E,2EAA2E;AAC3E,4EAA4E;AAC5E,2EAA2E;AAC3E,0DAA0D;AAI1D,SAAS,SAAS,CAAC,EAAM,EAAE,KAAa,EAAE,MAAc;IACtD,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC,GAAG,EAAwB,CAAC;IACtF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,EAAE,CAAC,EAAM;IACvB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,EAAE,WAAW,CAAC,EAAE,CAAC;QAChD,EAAE,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC,GAAG,EAAE,CAAC;IACzE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,EAAM;IACzB,IAAI,SAAS,CAAC,EAAE,EAAE,cAAc,EAAE,WAAW,CAAC,EAAE,CAAC;QAC/C,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,GAAG,EAAE,CAAC;IACrE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20260726_000005_request_served_model.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/20260726_000005_request_served_model.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAOtC,wBAAgB,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAI/B;AAED,wBAAgB,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAIjC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Migration: requests.served_model — upstream-reported model when it drifts
|
|
2
|
+
// Created: 2026-07-26
|
|
3
|
+
//
|
|
4
|
+
// DOWN: reversible
|
|
5
|
+
//
|
|
6
|
+
// The proxy overwrites the upstream `model` field with the routed id before
|
|
7
|
+
// the caller sees it (the gateway contract), which also destroyed the only
|
|
8
|
+
// evidence when a provider silently serves a DIFFERENT model than requested
|
|
9
|
+
// (#534 — verified live: kilo-auto/small serving Gemma). The served-model
|
|
10
|
+
// guard (lib/served-model.ts) now captures the raw upstream value before the
|
|
11
|
+
// overwrite; this column persists it — but ONLY when it genuinely differs
|
|
12
|
+
// from the routed model id after cosmetic normalization (case, provider
|
|
13
|
+
// prefix, ":free"-style tier suffixes). NULL means "matched (or upstream
|
|
14
|
+
// reported nothing usable)", which keeps the column empty in the healthy case
|
|
15
|
+
// and makes drifted rows trivially queryable:
|
|
16
|
+
// SELECT ... FROM requests WHERE served_model IS NOT NULL;
|
|
17
|
+
function hasColumn(db, table, column) {
|
|
18
|
+
const columns = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
19
|
+
return columns.some((candidate) => candidate.name === column);
|
|
20
|
+
}
|
|
21
|
+
export function up(db) {
|
|
22
|
+
if (!hasColumn(db, 'requests', 'served_model')) {
|
|
23
|
+
db.prepare('ALTER TABLE requests ADD COLUMN served_model TEXT').run();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export function down(db) {
|
|
27
|
+
if (hasColumn(db, 'requests', 'served_model')) {
|
|
28
|
+
db.prepare('ALTER TABLE requests DROP COLUMN served_model').run();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=20260726_000005_request_served_model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20260726_000005_request_served_model.js","sourceRoot":"","sources":["../../../src/db/migrations/20260726_000005_request_served_model.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,4EAA4E;AAC5E,0EAA0E;AAC1E,6EAA6E;AAC7E,0EAA0E;AAC1E,wEAAwE;AACxE,yEAAyE;AACzE,8EAA8E;AAC9E,8CAA8C;AAC9C,6DAA6D;AAI7D,SAAS,SAAS,CAAC,EAAM,EAAE,KAAa,EAAE,MAAc;IACtD,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC,GAAG,EAAwB,CAAC;IACtF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,EAAE,CAAC,EAAM;IACvB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC;QAC/C,EAAE,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC,GAAG,EAAE,CAAC;IACxE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,EAAM;IACzB,IAAI,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC;QAC9C,EAAE,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC,GAAG,EAAE,CAAC;IACpE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20260726_000006_attempt_error_summary.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/20260726_000006_attempt_error_summary.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAOtC,wBAAgB,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAI/B;AAED,wBAAgB,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAIjC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// Migration: request_attempts.error_summary — per-hop error text for the ladder
|
|
2
|
+
// Created: 2026-07-26
|
|
3
|
+
//
|
|
4
|
+
// DOWN: reversible
|
|
5
|
+
//
|
|
6
|
+
// The failover-ladder drill-down (issue #335) renders WHY each hop failed, but
|
|
7
|
+
// the `outcome` class alone loses the provider's actual words ("rate limit
|
|
8
|
+
// reached for llama-3.3-70b, retry in 7m12s" collapses to 'rate_limited').
|
|
9
|
+
// This nullable column stores a short, REDACTED summary of the per-attempt
|
|
10
|
+
// error — sanitized through lib/error-redaction.ts (same rules as the error
|
|
11
|
+
// text on the parent `requests` row: keys/tokens/URLs scrubbed) and capped at
|
|
12
|
+
// 200 chars at write time (lib/fallback-loop.ts). NULL for successful hops
|
|
13
|
+
// ('ok'/'committed') and for every pre-existing row, where the detail is
|
|
14
|
+
// simply unknown.
|
|
15
|
+
function hasColumn(db, table, column) {
|
|
16
|
+
const columns = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
17
|
+
return columns.some((candidate) => candidate.name === column);
|
|
18
|
+
}
|
|
19
|
+
export function up(db) {
|
|
20
|
+
if (!hasColumn(db, 'request_attempts', 'error_summary')) {
|
|
21
|
+
db.prepare('ALTER TABLE request_attempts ADD COLUMN error_summary TEXT').run();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function down(db) {
|
|
25
|
+
if (hasColumn(db, 'request_attempts', 'error_summary')) {
|
|
26
|
+
db.prepare('ALTER TABLE request_attempts DROP COLUMN error_summary').run();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=20260726_000006_attempt_error_summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20260726_000006_attempt_error_summary.js","sourceRoot":"","sources":["../../../src/db/migrations/20260726_000006_attempt_error_summary.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,EAAE;AACF,+EAA+E;AAC/E,2EAA2E;AAC3E,2EAA2E;AAC3E,2EAA2E;AAC3E,4EAA4E;AAC5E,8EAA8E;AAC9E,2EAA2E;AAC3E,yEAAyE;AACzE,kBAAkB;AAIlB,SAAS,SAAS,CAAC,EAAM,EAAE,KAAa,EAAE,MAAc;IACtD,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC,GAAG,EAAwB,CAAC;IACtF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,EAAE,CAAC,EAAM;IACvB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,kBAAkB,EAAE,eAAe,CAAC,EAAE,CAAC;QACxD,EAAE,CAAC,OAAO,CAAC,4DAA4D,CAAC,CAAC,GAAG,EAAE,CAAC;IACjF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,EAAM;IACzB,IAAI,SAAS,CAAC,EAAE,EAAE,kBAAkB,EAAE,eAAe,CAAC,EAAE,CAAC;QACvD,EAAE,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAC,GAAG,EAAE,CAAC;IAC7E,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20260727_000001_agent_compatibility.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/20260727_000001_agent_compatibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAOtC,wBAAgB,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CA4B/B;AAED,wBAAgB,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAcjC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
function hasColumn(db, table, column) {
|
|
2
|
+
const columns = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
3
|
+
return columns.some(entry => entry.name === column);
|
|
4
|
+
}
|
|
5
|
+
export function up(db) {
|
|
6
|
+
if (!hasColumn(db, 'requests', 'client_agent')) {
|
|
7
|
+
db.prepare('ALTER TABLE requests ADD COLUMN client_agent TEXT').run();
|
|
8
|
+
}
|
|
9
|
+
db.prepare('CREATE INDEX IF NOT EXISTS idx_requests_client_agent_created ON requests(client_agent, created_at)').run();
|
|
10
|
+
db.exec(`
|
|
11
|
+
CREATE TABLE IF NOT EXISTS url_tokens (
|
|
12
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
13
|
+
token_hash TEXT NOT NULL UNIQUE,
|
|
14
|
+
label TEXT NOT NULL DEFAULT '',
|
|
15
|
+
token_prefix TEXT NOT NULL,
|
|
16
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
17
|
+
last_used_at TEXT,
|
|
18
|
+
revoked_at TEXT
|
|
19
|
+
);
|
|
20
|
+
CREATE INDEX IF NOT EXISTS idx_url_tokens_active
|
|
21
|
+
ON url_tokens(token_hash, revoked_at);
|
|
22
|
+
`);
|
|
23
|
+
db.prepare("INSERT INTO settings (key, value) VALUES ('ollama_emulation', 'off') ON CONFLICT(key) DO NOTHING").run();
|
|
24
|
+
db.prepare("INSERT INTO settings (key, value) VALUES ('expose_cc_discovery_aliases', '0') ON CONFLICT(key) DO NOTHING").run();
|
|
25
|
+
}
|
|
26
|
+
export function down(db) {
|
|
27
|
+
db.prepare('DROP TABLE IF EXISTS url_tokens').run();
|
|
28
|
+
db.prepare('DROP INDEX IF EXISTS idx_requests_client_agent_created').run();
|
|
29
|
+
if (hasColumn(db, 'requests', 'client_agent')) {
|
|
30
|
+
db.prepare('ALTER TABLE requests DROP COLUMN client_agent').run();
|
|
31
|
+
}
|
|
32
|
+
db.prepare(`
|
|
33
|
+
DELETE FROM settings
|
|
34
|
+
WHERE key IN (
|
|
35
|
+
'ollama_emulation',
|
|
36
|
+
'expose_cc_discovery_aliases',
|
|
37
|
+
'gemini_model_map'
|
|
38
|
+
)
|
|
39
|
+
`).run();
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=20260727_000001_agent_compatibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20260727_000001_agent_compatibility.js","sourceRoot":"","sources":["../../../src/db/migrations/20260727_000001_agent_compatibility.ts"],"names":[],"mappings":"AAEA,SAAS,SAAS,CAAC,EAAM,EAAE,KAAa,EAAE,MAAc;IACtD,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC,GAAG,EAAwB,CAAC;IACtF,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,EAAE,CAAC,EAAM;IACvB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC;QAC/C,EAAE,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC,GAAG,EAAE,CAAC;IACxE,CAAC;IACD,EAAE,CAAC,OAAO,CACR,oGAAoG,CACrG,CAAC,GAAG,EAAE,CAAC;IAER,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;GAYP,CAAC,CAAC;IAEH,EAAE,CAAC,OAAO,CACR,kGAAkG,CACnG,CAAC,GAAG,EAAE,CAAC;IACR,EAAE,CAAC,OAAO,CACR,2GAA2G,CAC5G,CAAC,GAAG,EAAE,CAAC;AACV,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,EAAM;IACzB,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,GAAG,EAAE,CAAC;IACpD,EAAE,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAC,GAAG,EAAE,CAAC;IAC3E,IAAI,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC;QAC9C,EAAE,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC,GAAG,EAAE,CAAC;IACpE,CAAC;IACD,EAAE,CAAC,OAAO,CAAC;;;;;;;GAOV,CAAC,CAAC,GAAG,EAAE,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Db } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Tombstones used to mean exactly one thing: "the user deleted this catalog
|
|
4
|
+
* model, keep it deleted across syncs". Issue #634 adds a second, machine-made
|
|
5
|
+
* kind — "the provider retired this model upstream (410 / end of life)" — which
|
|
6
|
+
* disables the row instead of deleting it and carries the upstream wording so
|
|
7
|
+
* the dashboard can say why. `source` keeps the two apart ('user' is the
|
|
8
|
+
* backfill for every pre-existing row); `reason` is the redacted provider text.
|
|
9
|
+
*/
|
|
10
|
+
export declare function up(db: Db): void;
|
|
11
|
+
export declare function down(db: Db): void;
|
|
12
|
+
//# sourceMappingURL=20260728_000001_tombstone_provenance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20260728_000001_tombstone_provenance.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/20260728_000001_tombstone_provenance.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAOtC;;;;;;;GAOG;AACH,wBAAgB,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAO/B;AAED,wBAAgB,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAUjC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Migration: record WHY a catalog model was tombstoned
|
|
2
|
+
// Created: 2026-07-28
|
|
3
|
+
//
|
|
4
|
+
// DOWN: reversible — drops the two added columns (every existing tombstone is
|
|
5
|
+
// a user deletion, which is the default the columns backfill to).
|
|
6
|
+
function hasColumn(db, table, column) {
|
|
7
|
+
const columns = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
8
|
+
return columns.some((candidate) => candidate.name === column);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Tombstones used to mean exactly one thing: "the user deleted this catalog
|
|
12
|
+
* model, keep it deleted across syncs". Issue #634 adds a second, machine-made
|
|
13
|
+
* kind — "the provider retired this model upstream (410 / end of life)" — which
|
|
14
|
+
* disables the row instead of deleting it and carries the upstream wording so
|
|
15
|
+
* the dashboard can say why. `source` keeps the two apart ('user' is the
|
|
16
|
+
* backfill for every pre-existing row); `reason` is the redacted provider text.
|
|
17
|
+
*/
|
|
18
|
+
export function up(db) {
|
|
19
|
+
if (!hasColumn(db, 'catalog_model_tombstones', 'source')) {
|
|
20
|
+
db.prepare("ALTER TABLE catalog_model_tombstones ADD COLUMN source TEXT NOT NULL DEFAULT 'user'").run();
|
|
21
|
+
}
|
|
22
|
+
if (!hasColumn(db, 'catalog_model_tombstones', 'reason')) {
|
|
23
|
+
db.prepare('ALTER TABLE catalog_model_tombstones ADD COLUMN reason TEXT').run();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export function down(db) {
|
|
27
|
+
// Upstream-retirement tombstones have no meaning without their source column,
|
|
28
|
+
// and leaving them behind would silently delete live models on the next sync.
|
|
29
|
+
db.prepare("DELETE FROM catalog_model_tombstones WHERE source = 'upstream_eol'").run();
|
|
30
|
+
if (hasColumn(db, 'catalog_model_tombstones', 'reason')) {
|
|
31
|
+
db.prepare('ALTER TABLE catalog_model_tombstones DROP COLUMN reason').run();
|
|
32
|
+
}
|
|
33
|
+
if (hasColumn(db, 'catalog_model_tombstones', 'source')) {
|
|
34
|
+
db.prepare('ALTER TABLE catalog_model_tombstones DROP COLUMN source').run();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=20260728_000001_tombstone_provenance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20260728_000001_tombstone_provenance.js","sourceRoot":"","sources":["../../../src/db/migrations/20260728_000001_tombstone_provenance.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,sBAAsB;AACtB,EAAE;AACF,8EAA8E;AAC9E,kEAAkE;AAIlE,SAAS,SAAS,CAAC,EAAM,EAAE,KAAa,EAAE,MAAc;IACtD,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC,GAAG,EAAwB,CAAC;IACtF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,EAAE,CAAC,EAAM;IACvB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,0BAA0B,EAAE,QAAQ,CAAC,EAAE,CAAC;QACzD,EAAE,CAAC,OAAO,CAAC,qFAAqF,CAAC,CAAC,GAAG,EAAE,CAAC;IAC1G,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,0BAA0B,EAAE,QAAQ,CAAC,EAAE,CAAC;QACzD,EAAE,CAAC,OAAO,CAAC,6DAA6D,CAAC,CAAC,GAAG,EAAE,CAAC;IAClF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,EAAM;IACzB,8EAA8E;IAC9E,8EAA8E;IAC9E,EAAE,CAAC,OAAO,CAAC,oEAAoE,CAAC,CAAC,GAAG,EAAE,CAAC;IACvF,IAAI,SAAS,CAAC,EAAE,EAAE,0BAA0B,EAAE,QAAQ,CAAC,EAAE,CAAC;QACxD,EAAE,CAAC,OAAO,CAAC,yDAAyD,CAAC,CAAC,GAAG,EAAE,CAAC;IAC9E,CAAC;IACD,IAAI,SAAS,CAAC,EAAE,EAAE,0BAA0B,EAAE,QAAQ,CAAC,EAAE,CAAC;QACxD,EAAE,CAAC,OAAO,CAAC,yDAAyD,CAAC,CAAC,GAAG,EAAE,CAAC;IAC9E,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20260729_000001_custom_model_endpoint_identity.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/20260729_000001_custom_model_endpoint_identity.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AA0FtC,wBAAgB,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CA0B/B;AAED,wBAAgB,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAkBjC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// Migration: per-endpoint identity for custom relay models (#651)
|
|
2
|
+
// Created: 2026-07-29
|
|
3
|
+
//
|
|
4
|
+
// DOWN: reversible (throws when duplicates exist — see below)
|
|
5
|
+
//
|
|
6
|
+
// `models` was unique on (platform, model_id). Every custom relay is stored
|
|
7
|
+
// under platform = 'custom', so two relays offering the same model id could not
|
|
8
|
+
// coexist: the second registration silently rebound the first one's row. One
|
|
9
|
+
// enabled flag, one set of ranks, one stats bucket — turning the model off
|
|
10
|
+
// because relay A was broken turned it off for relay B as well (#619).
|
|
11
|
+
//
|
|
12
|
+
// This adds `endpoint_scope` (the endpoint's normalized base_url, '' for every
|
|
13
|
+
// catalog platform) and moves uniqueness to (platform, model_id,
|
|
14
|
+
// endpoint_scope). Catalog rows all share the '' scope, so their constraint is
|
|
15
|
+
// bit-for-bit the old one; only custom rows gain room for a sibling.
|
|
16
|
+
//
|
|
17
|
+
// SQLite cannot drop a table-level UNIQUE, so `models` is rebuilt. Two details
|
|
18
|
+
// make that safe on a live DB:
|
|
19
|
+
// - row ids are copied verbatim, so fallback_config / profile_models /
|
|
20
|
+
// saved fusion configs keep pointing at the same models;
|
|
21
|
+
// - `PRAGMA foreign_keys` is a no-op inside a transaction and the migration
|
|
22
|
+
// runner wraps up() in one, so the child rows are parked in temp tables
|
|
23
|
+
// across the DROP and restored after the rename. Renaming `models` itself
|
|
24
|
+
// is avoided on purpose: with foreign keys on, a rename rewrites the
|
|
25
|
+
// REFERENCES clauses of every child table to the new name.
|
|
26
|
+
//
|
|
27
|
+
// Schema only — no catalog data.
|
|
28
|
+
// The models table as of this migration, plus the new column. Written out in
|
|
29
|
+
// full rather than derived, so the rebuilt schema is auditable here and
|
|
30
|
+
// identical on every run.
|
|
31
|
+
const MODELS_COLUMNS = `
|
|
32
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
33
|
+
platform TEXT NOT NULL,
|
|
34
|
+
model_id TEXT NOT NULL,
|
|
35
|
+
display_name TEXT NOT NULL,
|
|
36
|
+
intelligence_rank INTEGER NOT NULL,
|
|
37
|
+
speed_rank INTEGER NOT NULL,
|
|
38
|
+
size_label TEXT NOT NULL DEFAULT '',
|
|
39
|
+
rpm_limit INTEGER,
|
|
40
|
+
rpd_limit INTEGER,
|
|
41
|
+
tpm_limit INTEGER,
|
|
42
|
+
tpd_limit INTEGER,
|
|
43
|
+
monthly_token_budget TEXT NOT NULL DEFAULT '',
|
|
44
|
+
context_window INTEGER,
|
|
45
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
46
|
+
supports_vision INTEGER NOT NULL DEFAULT 0,
|
|
47
|
+
key_id INTEGER,
|
|
48
|
+
supports_tools INTEGER NOT NULL DEFAULT 0,
|
|
49
|
+
paid_input_per_m REAL,
|
|
50
|
+
paid_output_per_m REAL,
|
|
51
|
+
source TEXT NOT NULL DEFAULT 'catalog'`;
|
|
52
|
+
const CARRIED_COLUMNS = [
|
|
53
|
+
'id', 'platform', 'model_id', 'display_name', 'intelligence_rank', 'speed_rank',
|
|
54
|
+
'size_label', 'rpm_limit', 'rpd_limit', 'tpm_limit', 'tpd_limit',
|
|
55
|
+
'monthly_token_budget', 'context_window', 'enabled', 'supports_vision', 'key_id',
|
|
56
|
+
'supports_tools', 'paid_input_per_m', 'paid_output_per_m', 'source',
|
|
57
|
+
].join(', ');
|
|
58
|
+
// Tables whose rows must survive the DROP. Discovered from the schema rather
|
|
59
|
+
// than hard-coded, so a table added later that references models is carried too.
|
|
60
|
+
function childTablesOfModels(db) {
|
|
61
|
+
const tables = db.prepare(`
|
|
62
|
+
SELECT name FROM sqlite_master
|
|
63
|
+
WHERE type = 'table' AND name NOT LIKE 'sqlite_%' AND name <> 'models'
|
|
64
|
+
ORDER BY name
|
|
65
|
+
`).all();
|
|
66
|
+
return tables
|
|
67
|
+
.filter(t => db.prepare(`PRAGMA foreign_key_list("${t.name}")`).all()
|
|
68
|
+
.some(fk => fk.table === 'models'))
|
|
69
|
+
.map(t => t.name);
|
|
70
|
+
}
|
|
71
|
+
function rebuildModels(db, extraColumns, copiedColumns, unique) {
|
|
72
|
+
const children = childTablesOfModels(db);
|
|
73
|
+
// AUTOINCREMENT's high-water mark. DROP TABLE takes the sqlite_sequence row
|
|
74
|
+
// with it, and copying rows back only pushes the counter to the highest id
|
|
75
|
+
// PRESENT — so a table whose top rows were deleted (catalog sync prunes
|
|
76
|
+
// models routinely) would start handing out ids it has already used. Stale
|
|
77
|
+
// fallback_config / profile_models rows pointing at a deleted model would
|
|
78
|
+
// then silently adopt an unrelated new one.
|
|
79
|
+
const seqRow = db.prepare("SELECT seq FROM sqlite_sequence WHERE name = 'models'")
|
|
80
|
+
.get();
|
|
81
|
+
for (const child of children) {
|
|
82
|
+
db.exec(`CREATE TEMP TABLE "_endpoint_identity_${child}" AS SELECT * FROM "${child}"`);
|
|
83
|
+
db.exec(`DELETE FROM "${child}"`);
|
|
84
|
+
}
|
|
85
|
+
db.exec(`
|
|
86
|
+
CREATE TABLE models_endpoint_identity (${MODELS_COLUMNS}${extraColumns},
|
|
87
|
+
${unique}
|
|
88
|
+
);
|
|
89
|
+
INSERT INTO models_endpoint_identity (${copiedColumns})
|
|
90
|
+
SELECT ${copiedColumns} FROM models;
|
|
91
|
+
DROP TABLE models;
|
|
92
|
+
ALTER TABLE models_endpoint_identity RENAME TO models;
|
|
93
|
+
`);
|
|
94
|
+
if (seqRow) {
|
|
95
|
+
// sqlite_sequence has no unique index, so no upsert: update the row the
|
|
96
|
+
// rename carried over, or re-create it if the table was empty.
|
|
97
|
+
const restored = db.prepare("UPDATE sqlite_sequence SET seq = ? WHERE name = 'models' AND seq < ?")
|
|
98
|
+
.run(seqRow.seq, seqRow.seq);
|
|
99
|
+
if (restored.changes === 0
|
|
100
|
+
&& !db.prepare("SELECT 1 FROM sqlite_sequence WHERE name = 'models'").get()) {
|
|
101
|
+
db.prepare("INSERT INTO sqlite_sequence (name, seq) VALUES ('models', ?)").run(seqRow.seq);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
for (const child of children) {
|
|
105
|
+
db.exec(`INSERT INTO "${child}" SELECT * FROM "_endpoint_identity_${child}"`);
|
|
106
|
+
db.exec(`DROP TABLE "_endpoint_identity_${child}"`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
export function up(db) {
|
|
110
|
+
rebuildModels(db, `,\n endpoint_scope TEXT NOT NULL DEFAULT ''`, CARRIED_COLUMNS, 'UNIQUE(platform, model_id, endpoint_scope)');
|
|
111
|
+
// Backfill: a custom row's scope is the base_url of the key it is bound to.
|
|
112
|
+
// Rows whose key is gone (or that predate per-endpoint binding) keep '' —
|
|
113
|
+
// exactly the identity they have today, so nothing about them changes.
|
|
114
|
+
const bound = db.prepare(`
|
|
115
|
+
SELECT m.id AS id, k.base_url AS base_url
|
|
116
|
+
FROM models m
|
|
117
|
+
JOIN api_keys k ON k.id = m.key_id AND k.platform = 'custom'
|
|
118
|
+
WHERE m.platform = 'custom' AND k.base_url IS NOT NULL AND k.base_url <> ''
|
|
119
|
+
`).all();
|
|
120
|
+
const setScope = db.prepare('UPDATE models SET endpoint_scope = ? WHERE id = ?');
|
|
121
|
+
for (const row of bound) {
|
|
122
|
+
setScope.run(row.base_url.trim().replace(/\/+$/, ''), row.id);
|
|
123
|
+
}
|
|
124
|
+
db.exec(`
|
|
125
|
+
CREATE INDEX IF NOT EXISTS idx_models_endpoint_scope
|
|
126
|
+
ON models(endpoint_scope) WHERE endpoint_scope <> '';
|
|
127
|
+
`);
|
|
128
|
+
}
|
|
129
|
+
export function down(db) {
|
|
130
|
+
// Going back means two relays' copies of one model id would have to share a
|
|
131
|
+
// row again, and there is no honest way to pick which endpoint's settings
|
|
132
|
+
// survive. Refuse rather than silently discard one.
|
|
133
|
+
const collisions = db.prepare(`
|
|
134
|
+
SELECT platform, model_id, COUNT(*) AS n
|
|
135
|
+
FROM models GROUP BY platform, model_id HAVING COUNT(*) > 1
|
|
136
|
+
`).all();
|
|
137
|
+
if (collisions.length > 0) {
|
|
138
|
+
const sample = collisions.slice(0, 3).map(c => `${c.platform}/${c.model_id} (${c.n})`).join(', ');
|
|
139
|
+
throw new Error(`Cannot revert per-endpoint model identity: ${collisions.length} model id(s) exist on more than one endpoint — ${sample}. ` +
|
|
140
|
+
'Delete the duplicate rows (or the extra endpoint) first.');
|
|
141
|
+
}
|
|
142
|
+
db.exec('DROP INDEX IF EXISTS idx_models_endpoint_scope;');
|
|
143
|
+
rebuildModels(db, '', CARRIED_COLUMNS, 'UNIQUE(platform, model_id)');
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=20260729_000001_custom_model_endpoint_identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20260729_000001_custom_model_endpoint_identity.js","sourceRoot":"","sources":["../../../src/db/migrations/20260729_000001_custom_model_endpoint_identity.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,sBAAsB;AACtB,EAAE;AACF,8DAA8D;AAC9D,EAAE;AACF,4EAA4E;AAC5E,gFAAgF;AAChF,6EAA6E;AAC7E,2EAA2E;AAC3E,uEAAuE;AACvE,EAAE;AACF,+EAA+E;AAC/E,iEAAiE;AACjE,+EAA+E;AAC/E,qEAAqE;AACrE,EAAE;AACF,+EAA+E;AAC/E,+BAA+B;AAC/B,yEAAyE;AACzE,6DAA6D;AAC7D,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAC9E,yEAAyE;AACzE,+DAA+D;AAC/D,EAAE;AACF,iCAAiC;AAIjC,6EAA6E;AAC7E,wEAAwE;AACxE,0BAA0B;AAC1B,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;6CAoBsB,CAAC;AAE9C,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,mBAAmB,EAAE,YAAY;IAC/E,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW;IAChE,sBAAsB,EAAE,gBAAgB,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ;IAChF,gBAAgB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,QAAQ;CACpE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,6EAA6E;AAC7E,iFAAiF;AACjF,SAAS,mBAAmB,CAAC,EAAM;IACjC,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;;;;GAIzB,CAAC,CAAC,GAAG,EAAwB,CAAC;IAC/B,OAAO,MAAM;SACV,MAAM,CAAC,CAAC,CAAC,EAAE,CAAE,EAAE,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,EAA0B;SAC3F,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;SACpC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,aAAa,CAAC,EAAM,EAAE,YAAoB,EAAE,aAAqB,EAAE,MAAc;IACxF,MAAM,QAAQ,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACzC,4EAA4E;IAC5E,2EAA2E;IAC3E,wEAAwE;IACxE,2EAA2E;IAC3E,0EAA0E;IAC1E,4CAA4C;IAC5C,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,uDAAuD,CAAC;SAC/E,GAAG,EAAiC,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,EAAE,CAAC,IAAI,CAAC,yCAAyC,KAAK,uBAAuB,KAAK,GAAG,CAAC,CAAC;QACvF,EAAE,CAAC,IAAI,CAAC,gBAAgB,KAAK,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,EAAE,CAAC,IAAI,CAAC;6CACmC,cAAc,GAAG,YAAY;QAClE,MAAM;;4CAE8B,aAAa;eAC1C,aAAa;;;GAGzB,CAAC,CAAC;IAEH,IAAI,MAAM,EAAE,CAAC;QACX,wEAAwE;QACxE,+DAA+D;QAC/D,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,sEAAsE,CAAC;aAChG,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,QAAQ,CAAC,OAAO,KAAK,CAAC;eACrB,CAAC,EAAE,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;YAC9E,EAAE,CAAC,OAAO,CAAC,8DAA8D,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,EAAE,CAAC,IAAI,CAAC,gBAAgB,KAAK,uCAAuC,KAAK,GAAG,CAAC,CAAC;QAC9E,EAAE,CAAC,IAAI,CAAC,kCAAkC,KAAK,GAAG,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,EAAE,CAAC,EAAM;IACvB,aAAa,CACX,EAAE,EACF,kDAAkD,EAClD,eAAe,EACf,4CAA4C,CAC7C,CAAC;IAEF,4EAA4E;IAC5E,0EAA0E;IAC1E,uEAAuE;IACvE,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;GAKxB,CAAC,CAAC,GAAG,EAAwC,CAAC;IAC/C,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC;IACjF,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,EAAE,CAAC,IAAI,CAAC;;;GAGP,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,EAAM;IACzB,4EAA4E;IAC5E,0EAA0E;IAC1E,oDAAoD;IACpD,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAG7B,CAAC,CAAC,GAAG,EAAyD,CAAC;IAChE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClG,MAAM,IAAI,KAAK,CACb,8CAA8C,UAAU,CAAC,MAAM,kDAAkD,MAAM,IAAI;YAC3H,0DAA0D,CAC3D,CAAC;IACJ,CAAC;IAED,EAAE,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IAC3D,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,4BAA4B,CAAC,CAAC;AACvE,CAAC"}
|