@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.
Files changed (1027) hide show
  1. package/LICENSE +21 -0
  2. package/client/dist/assets/am-TQ7Jmdqe.js +1 -0
  3. package/client/dist/assets/ar-Bf5a7yfC.js +1 -0
  4. package/client/dist/assets/az-CrosE1xH.js +1 -0
  5. package/client/dist/assets/bg-BvWnmcUz.js +1 -0
  6. package/client/dist/assets/bn-ams5TsJp.js +1 -0
  7. package/client/dist/assets/cs-Dh67CaJ_.js +1 -0
  8. package/client/dist/assets/da-9WlT8Iq7.js +1 -0
  9. package/client/dist/assets/de-lWhJJzz7.js +1 -0
  10. package/client/dist/assets/el-Cu7_GhNq.js +1 -0
  11. package/client/dist/assets/es-BZuzsBcP.js +1 -0
  12. package/client/dist/assets/fa-Dwdn-jKS.js +1 -0
  13. package/client/dist/assets/fi-BFrFyOTy.js +1 -0
  14. package/client/dist/assets/fr-XhbtmPpj.js +1 -0
  15. package/client/dist/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  16. package/client/dist/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  17. package/client/dist/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  18. package/client/dist/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  19. package/client/dist/assets/geist-mono-cyrillic-ext-wght-normal-I4S5GZfc.woff2 +0 -0
  20. package/client/dist/assets/geist-mono-cyrillic-wght-normal-BmXc_FBt.woff2 +0 -0
  21. package/client/dist/assets/geist-mono-latin-ext-wght-normal-DrnZ1wKl.woff2 +0 -0
  22. package/client/dist/assets/geist-mono-latin-wght-normal-B_7UjwxQ.woff2 +0 -0
  23. package/client/dist/assets/geist-mono-symbols2-wght-normal-GZpp1pK2.woff2 +0 -0
  24. package/client/dist/assets/geist-mono-vietnamese-wght-normal-D8KDMBhC.woff2 +0 -0
  25. package/client/dist/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  26. package/client/dist/assets/gu-D0uhLUB8.js +1 -0
  27. package/client/dist/assets/ha-CVlm9pqp.js +1 -0
  28. package/client/dist/assets/he-CMIFeoWr.js +1 -0
  29. package/client/dist/assets/hi-ENTwhBpn.js +1 -0
  30. package/client/dist/assets/hr-fc03vMy_.js +1 -0
  31. package/client/dist/assets/hu-YBo2BIYt.js +1 -0
  32. package/client/dist/assets/id-BEWXYX69.js +1 -0
  33. package/client/dist/assets/ig-BKLZFKka.js +1 -0
  34. package/client/dist/assets/index-D9I4KtvR.js +145 -0
  35. package/client/dist/assets/index-txhEmCdb.css +2 -0
  36. package/client/dist/assets/it-Bzmei1Y2.js +1 -0
  37. package/client/dist/assets/ja-BfcpuqEl.js +1 -0
  38. package/client/dist/assets/ka-CnWjRgLo.js +1 -0
  39. package/client/dist/assets/km-BAjPR3Qj.js +1 -0
  40. package/client/dist/assets/kn-B15WKU5m.js +1 -0
  41. package/client/dist/assets/ko-C61fAB-w.js +1 -0
  42. package/client/dist/assets/lt-CYTr4_YW.js +1 -0
  43. package/client/dist/assets/ml-CtqxgyH3.js +1 -0
  44. package/client/dist/assets/mr-X5TMY7aR.js +1 -0
  45. package/client/dist/assets/ms-DSg8RqPS.js +1 -0
  46. package/client/dist/assets/my-D7RqR8uE.js +1 -0
  47. package/client/dist/assets/ne-DaflxkDj.js +1 -0
  48. package/client/dist/assets/nl-BOqqtsC8.js +1 -0
  49. package/client/dist/assets/no-BSHp_StB.js +1 -0
  50. package/client/dist/assets/or-BkLR9Vub.js +1 -0
  51. package/client/dist/assets/pa-CarJ2XgI.js +1 -0
  52. package/client/dist/assets/pl-C2n0V-0k.js +1 -0
  53. package/client/dist/assets/pt-BR-CqJdNhg2.js +1 -0
  54. package/client/dist/assets/pt-PT-C_HpMyKz.js +1 -0
  55. package/client/dist/assets/ro-DVRZqSAS.js +1 -0
  56. package/client/dist/assets/ru-DwAJG7VC.js +1 -0
  57. package/client/dist/assets/si-BxUezXm0.js +1 -0
  58. package/client/dist/assets/sk-eI1VcIfY.js +1 -0
  59. package/client/dist/assets/sr-CJF3auCr.js +1 -0
  60. package/client/dist/assets/srouter-logo-C6ZfjGIi.svg +14 -0
  61. package/client/dist/assets/sv-nqvwHAq_.js +1 -0
  62. package/client/dist/assets/sw-DWynE2pW.js +1 -0
  63. package/client/dist/assets/ta-BVM12knC.js +1 -0
  64. package/client/dist/assets/te-oyzEkF7_.js +1 -0
  65. package/client/dist/assets/th-COVeE0ZQ.js +1 -0
  66. package/client/dist/assets/tl-DsJANnQz.js +1 -0
  67. package/client/dist/assets/tr-B-Fl-urO.js +1 -0
  68. package/client/dist/assets/uk-C5qketAO.js +1 -0
  69. package/client/dist/assets/ur-QU9KugfV.js +1 -0
  70. package/client/dist/assets/uz-DL9cG_mY.js +1 -0
  71. package/client/dist/assets/vi-CQiVy3Pu.js +1 -0
  72. package/client/dist/assets/yo-DqazMdrZ.js +1 -0
  73. package/client/dist/assets/zh-CN-DnYL_Kio.js +1 -0
  74. package/client/dist/assets/zh-TW-5bdbosKj.js +1 -0
  75. package/client/dist/favicon.svg +14 -0
  76. package/client/dist/icons.svg +24 -0
  77. package/client/dist/index.html +37 -0
  78. package/dist/app.d.ts +4 -0
  79. package/dist/app.d.ts.map +1 -0
  80. package/dist/app.js +372 -0
  81. package/dist/app.js.map +1 -0
  82. package/dist/db/index.d.ts +49 -0
  83. package/dist/db/index.d.ts.map +1 -0
  84. package/dist/db/index.js +203 -0
  85. package/dist/db/index.js.map +1 -0
  86. package/dist/db/migrate/TEMPLATE.d.ts +4 -0
  87. package/dist/db/migrate/TEMPLATE.d.ts.map +1 -0
  88. package/dist/db/migrate/TEMPLATE.js +18 -0
  89. package/dist/db/migrate/TEMPLATE.js.map +1 -0
  90. package/dist/db/migrate/cli.d.ts +2 -0
  91. package/dist/db/migrate/cli.d.ts.map +1 -0
  92. package/dist/db/migrate/cli.js +177 -0
  93. package/dist/db/migrate/cli.js.map +1 -0
  94. package/dist/db/migrate/defaults.d.ts +52 -0
  95. package/dist/db/migrate/defaults.d.ts.map +1 -0
  96. package/dist/db/migrate/defaults.js +126 -0
  97. package/dist/db/migrate/defaults.js.map +1 -0
  98. package/dist/db/migrate/runner.d.ts +16 -0
  99. package/dist/db/migrate/runner.d.ts.map +1 -0
  100. package/dist/db/migrate/runner.js +178 -0
  101. package/dist/db/migrate/runner.js.map +1 -0
  102. package/dist/db/migrations/20260101_000000_legacy_baseline.d.ts +4 -0
  103. package/dist/db/migrations/20260101_000000_legacy_baseline.d.ts.map +1 -0
  104. package/dist/db/migrations/20260101_000000_legacy_baseline.js +2240 -0
  105. package/dist/db/migrations/20260101_000000_legacy_baseline.js.map +1 -0
  106. package/dist/db/migrations/20260627_000001_custom_provider_modalities.d.ts +4 -0
  107. package/dist/db/migrations/20260627_000001_custom_provider_modalities.d.ts.map +1 -0
  108. package/dist/db/migrations/20260627_000001_custom_provider_modalities.js +27 -0
  109. package/dist/db/migrations/20260627_000001_custom_provider_modalities.js.map +1 -0
  110. package/dist/db/migrations/20260627_000002_catalog_model_state.d.ts +4 -0
  111. package/dist/db/migrations/20260627_000002_catalog_model_state.d.ts.map +1 -0
  112. package/dist/db/migrations/20260627_000002_catalog_model_state.js +30 -0
  113. package/dist/db/migrations/20260627_000002_catalog_model_state.js.map +1 -0
  114. package/dist/db/migrations/20260628_120000_request_aggregates.d.ts +6 -0
  115. package/dist/db/migrations/20260628_120000_request_aggregates.d.ts.map +1 -0
  116. package/dist/db/migrations/20260628_120000_request_aggregates.js +104 -0
  117. package/dist/db/migrations/20260628_120000_request_aggregates.js.map +1 -0
  118. package/dist/db/migrations/20260630_000001_github_gpt41_context.d.ts +9 -0
  119. package/dist/db/migrations/20260630_000001_github_gpt41_context.d.ts.map +1 -0
  120. package/dist/db/migrations/20260630_000001_github_gpt41_context.js +22 -0
  121. package/dist/db/migrations/20260630_000001_github_gpt41_context.js.map +1 -0
  122. package/dist/db/migrations/20260706_000001_request_client_info.d.ts +4 -0
  123. package/dist/db/migrations/20260706_000001_request_client_info.d.ts.map +1 -0
  124. package/dist/db/migrations/20260706_000001_request_client_info.js +30 -0
  125. package/dist/db/migrations/20260706_000001_request_client_info.js.map +1 -0
  126. package/dist/db/migrations/20260706_000002_custom_model_tool_support.d.ts +17 -0
  127. package/dist/db/migrations/20260706_000002_custom_model_tool_support.d.ts.map +1 -0
  128. package/dist/db/migrations/20260706_000002_custom_model_tool_support.js +20 -0
  129. package/dist/db/migrations/20260706_000002_custom_model_tool_support.js.map +1 -0
  130. package/dist/db/migrations/20260714_000001_profile_chain_backfill.d.ts +12 -0
  131. package/dist/db/migrations/20260714_000001_profile_chain_backfill.d.ts.map +1 -0
  132. package/dist/db/migrations/20260714_000001_profile_chain_backfill.js +45 -0
  133. package/dist/db/migrations/20260714_000001_profile_chain_backfill.js.map +1 -0
  134. package/dist/db/migrations/20260720_000001_key_health_error.d.ts +5 -0
  135. package/dist/db/migrations/20260720_000001_key_health_error.d.ts.map +1 -0
  136. package/dist/db/migrations/20260720_000001_key_health_error.js +16 -0
  137. package/dist/db/migrations/20260720_000001_key_health_error.js.map +1 -0
  138. package/dist/db/migrations/20260726_000001_cooldown_probe_provenance.d.ts +4 -0
  139. package/dist/db/migrations/20260726_000001_cooldown_probe_provenance.d.ts.map +1 -0
  140. package/dist/db/migrations/20260726_000001_cooldown_probe_provenance.js +38 -0
  141. package/dist/db/migrations/20260726_000001_cooldown_probe_provenance.js.map +1 -0
  142. package/dist/db/migrations/20260726_000002_request_attempts.d.ts +4 -0
  143. package/dist/db/migrations/20260726_000002_request_attempts.d.ts.map +1 -0
  144. package/dist/db/migrations/20260726_000002_request_attempts.js +43 -0
  145. package/dist/db/migrations/20260726_000002_request_attempts.js.map +1 -0
  146. package/dist/db/migrations/20260726_000003_model_source_provenance.d.ts +4 -0
  147. package/dist/db/migrations/20260726_000003_model_source_provenance.d.ts.map +1 -0
  148. package/dist/db/migrations/20260726_000003_model_source_provenance.js +80 -0
  149. package/dist/db/migrations/20260726_000003_model_source_provenance.js.map +1 -0
  150. package/dist/db/migrations/20260726_000004_media_model_meta.d.ts +4 -0
  151. package/dist/db/migrations/20260726_000004_media_model_meta.d.ts.map +1 -0
  152. package/dist/db/migrations/20260726_000004_media_model_meta.js +34 -0
  153. package/dist/db/migrations/20260726_000004_media_model_meta.js.map +1 -0
  154. package/dist/db/migrations/20260726_000005_request_served_model.d.ts +4 -0
  155. package/dist/db/migrations/20260726_000005_request_served_model.d.ts.map +1 -0
  156. package/dist/db/migrations/20260726_000005_request_served_model.js +31 -0
  157. package/dist/db/migrations/20260726_000005_request_served_model.js.map +1 -0
  158. package/dist/db/migrations/20260726_000006_attempt_error_summary.d.ts +4 -0
  159. package/dist/db/migrations/20260726_000006_attempt_error_summary.d.ts.map +1 -0
  160. package/dist/db/migrations/20260726_000006_attempt_error_summary.js +29 -0
  161. package/dist/db/migrations/20260726_000006_attempt_error_summary.js.map +1 -0
  162. package/dist/db/migrations/20260727_000001_agent_compatibility.d.ts +4 -0
  163. package/dist/db/migrations/20260727_000001_agent_compatibility.d.ts.map +1 -0
  164. package/dist/db/migrations/20260727_000001_agent_compatibility.js +41 -0
  165. package/dist/db/migrations/20260727_000001_agent_compatibility.js.map +1 -0
  166. package/dist/db/migrations/20260728_000001_tombstone_provenance.d.ts +12 -0
  167. package/dist/db/migrations/20260728_000001_tombstone_provenance.d.ts.map +1 -0
  168. package/dist/db/migrations/20260728_000001_tombstone_provenance.js +37 -0
  169. package/dist/db/migrations/20260728_000001_tombstone_provenance.js.map +1 -0
  170. package/dist/db/migrations/20260729_000001_custom_model_endpoint_identity.d.ts +4 -0
  171. package/dist/db/migrations/20260729_000001_custom_model_endpoint_identity.d.ts.map +1 -0
  172. package/dist/db/migrations/20260729_000001_custom_model_endpoint_identity.js +145 -0
  173. package/dist/db/migrations/20260729_000001_custom_model_endpoint_identity.js.map +1 -0
  174. package/dist/db/migrations/20260802_000001_custom_endpoint_host_labels.d.ts +6 -0
  175. package/dist/db/migrations/20260802_000001_custom_endpoint_host_labels.d.ts.map +1 -0
  176. package/dist/db/migrations/20260802_000001_custom_endpoint_host_labels.js +52 -0
  177. package/dist/db/migrations/20260802_000001_custom_endpoint_host_labels.js.map +1 -0
  178. package/dist/db/migrations/20260805_000001_key_model_scope.d.ts +6 -0
  179. package/dist/db/migrations/20260805_000001_key_model_scope.d.ts.map +1 -0
  180. package/dist/db/migrations/20260805_000001_key_model_scope.js +17 -0
  181. package/dist/db/migrations/20260805_000001_key_model_scope.js.map +1 -0
  182. package/dist/db/migrations/20260805_000002_client_profiles.d.ts +4 -0
  183. package/dist/db/migrations/20260805_000002_client_profiles.d.ts.map +1 -0
  184. package/dist/db/migrations/20260805_000002_client_profiles.js +33 -0
  185. package/dist/db/migrations/20260805_000002_client_profiles.js.map +1 -0
  186. package/dist/db/migrations/20260810_000001_api_key_proxy.d.ts +4 -0
  187. package/dist/db/migrations/20260810_000001_api_key_proxy.d.ts.map +1 -0
  188. package/dist/db/migrations/20260810_000001_api_key_proxy.js +33 -0
  189. package/dist/db/migrations/20260810_000001_api_key_proxy.js.map +1 -0
  190. package/dist/db/migrations/20260819_000001_custom_model_tombstones.d.ts +4 -0
  191. package/dist/db/migrations/20260819_000001_custom_model_tombstones.d.ts.map +1 -0
  192. package/dist/db/migrations/20260819_000001_custom_model_tombstones.js +19 -0
  193. package/dist/db/migrations/20260819_000001_custom_model_tombstones.js.map +1 -0
  194. package/dist/db/migrations/20260820_000001_playground_conversations.d.ts +4 -0
  195. package/dist/db/migrations/20260820_000001_playground_conversations.d.ts.map +1 -0
  196. package/dist/db/migrations/20260820_000001_playground_conversations.js +47 -0
  197. package/dist/db/migrations/20260820_000001_playground_conversations.js.map +1 -0
  198. package/dist/db/migrations/20260823_000001_server_logs.d.ts +4 -0
  199. package/dist/db/migrations/20260823_000001_server_logs.d.ts.map +1 -0
  200. package/dist/db/migrations/20260823_000001_server_logs.js +53 -0
  201. package/dist/db/migrations/20260823_000001_server_logs.js.map +1 -0
  202. package/dist/db/migrations/20260823_000002_backups_table.d.ts +8 -0
  203. package/dist/db/migrations/20260823_000002_backups_table.d.ts.map +1 -0
  204. package/dist/db/migrations/20260823_000002_backups_table.js +22 -0
  205. package/dist/db/migrations/20260823_000002_backups_table.js.map +1 -0
  206. package/dist/db/migrations/20260823_000003_attempt_key_label.d.ts +19 -0
  207. package/dist/db/migrations/20260823_000003_attempt_key_label.d.ts.map +1 -0
  208. package/dist/db/migrations/20260823_000003_attempt_key_label.js +28 -0
  209. package/dist/db/migrations/20260823_000003_attempt_key_label.js.map +1 -0
  210. package/dist/db/migrations/20260823_000004_profile_auto_include.d.ts +14 -0
  211. package/dist/db/migrations/20260823_000004_profile_auto_include.d.ts.map +1 -0
  212. package/dist/db/migrations/20260823_000004_profile_auto_include.js +25 -0
  213. package/dist/db/migrations/20260823_000004_profile_auto_include.js.map +1 -0
  214. package/dist/db/migrations/20260901_000001_idempotency_claims.d.ts +4 -0
  215. package/dist/db/migrations/20260901_000001_idempotency_claims.d.ts.map +1 -0
  216. package/dist/db/migrations/20260901_000001_idempotency_claims.js +46 -0
  217. package/dist/db/migrations/20260901_000001_idempotency_claims.js.map +1 -0
  218. package/dist/db/migrations/20260901_000002_quota_observation_lookup.d.ts +4 -0
  219. package/dist/db/migrations/20260901_000002_quota_observation_lookup.d.ts.map +1 -0
  220. package/dist/db/migrations/20260901_000002_quota_observation_lookup.js +37 -0
  221. package/dist/db/migrations/20260901_000002_quota_observation_lookup.js.map +1 -0
  222. package/dist/db/migrations/20260901_000003_request_caller.d.ts +4 -0
  223. package/dist/db/migrations/20260901_000003_request_caller.d.ts.map +1 -0
  224. package/dist/db/migrations/20260901_000003_request_caller.js +27 -0
  225. package/dist/db/migrations/20260901_000003_request_caller.js.map +1 -0
  226. package/dist/db/migrations/20260902_000001_analytics_latency_percentile_index.d.ts +4 -0
  227. package/dist/db/migrations/20260902_000001_analytics_latency_percentile_index.d.ts.map +1 -0
  228. package/dist/db/migrations/20260902_000001_analytics_latency_percentile_index.js +35 -0
  229. package/dist/db/migrations/20260902_000001_analytics_latency_percentile_index.js.map +1 -0
  230. package/dist/db/migrations/20260903_000001_mcp_enabled_default.d.ts +4 -0
  231. package/dist/db/migrations/20260903_000001_mcp_enabled_default.d.ts.map +1 -0
  232. package/dist/db/migrations/20260903_000001_mcp_enabled_default.js +37 -0
  233. package/dist/db/migrations/20260903_000001_mcp_enabled_default.js.map +1 -0
  234. package/dist/db/migrations/20260903_000002_response_cache.d.ts +4 -0
  235. package/dist/db/migrations/20260903_000002_response_cache.d.ts.map +1 -0
  236. package/dist/db/migrations/20260903_000002_response_cache.js +53 -0
  237. package/dist/db/migrations/20260903_000002_response_cache.js.map +1 -0
  238. package/dist/db/migrations/20260904_000001_key_monthly_budget.d.ts +13 -0
  239. package/dist/db/migrations/20260904_000001_key_monthly_budget.d.ts.map +1 -0
  240. package/dist/db/migrations/20260904_000001_key_monthly_budget.js +35 -0
  241. package/dist/db/migrations/20260904_000001_key_monthly_budget.js.map +1 -0
  242. package/dist/db/migrations/20260913_000001_request_model_attribution.d.ts +4 -0
  243. package/dist/db/migrations/20260913_000001_request_model_attribution.d.ts.map +1 -0
  244. package/dist/db/migrations/20260913_000001_request_model_attribution.js +68 -0
  245. package/dist/db/migrations/20260913_000001_request_model_attribution.js.map +1 -0
  246. package/dist/db/migrations/20260914_000001_key_monthly_usage.d.ts +5 -0
  247. package/dist/db/migrations/20260914_000001_key_monthly_usage.d.ts.map +1 -0
  248. package/dist/db/migrations/20260914_000001_key_monthly_usage.js +37 -0
  249. package/dist/db/migrations/20260914_000001_key_monthly_usage.js.map +1 -0
  250. package/dist/db/migrations/20260915_000001_quota_snapshot_freshness.d.ts +4 -0
  251. package/dist/db/migrations/20260915_000001_quota_snapshot_freshness.d.ts.map +1 -0
  252. package/dist/db/migrations/20260915_000001_quota_snapshot_freshness.js +28 -0
  253. package/dist/db/migrations/20260915_000001_quota_snapshot_freshness.js.map +1 -0
  254. package/dist/db/migrations/20261004_000001_unified_key_sr_prefix.d.ts +4 -0
  255. package/dist/db/migrations/20261004_000001_unified_key_sr_prefix.d.ts.map +1 -0
  256. package/dist/db/migrations/20261004_000001_unified_key_sr_prefix.js +25 -0
  257. package/dist/db/migrations/20261004_000001_unified_key_sr_prefix.js.map +1 -0
  258. package/dist/db/migrations/20261005_000001_key_budget_period.d.ts +10 -0
  259. package/dist/db/migrations/20261005_000001_key_budget_period.d.ts.map +1 -0
  260. package/dist/db/migrations/20261005_000001_key_budget_period.js +78 -0
  261. package/dist/db/migrations/20261005_000001_key_budget_period.js.map +1 -0
  262. package/dist/db/migrations/20261005_000002_key_budget_period_auto.d.ts +21 -0
  263. package/dist/db/migrations/20261005_000002_key_budget_period_auto.d.ts.map +1 -0
  264. package/dist/db/migrations/20261005_000002_key_budget_period_auto.js +41 -0
  265. package/dist/db/migrations/20261005_000002_key_budget_period_auto.js.map +1 -0
  266. package/dist/db/model-pricing.d.ts +39 -0
  267. package/dist/db/model-pricing.d.ts.map +1 -0
  268. package/dist/db/model-pricing.js +274 -0
  269. package/dist/db/model-pricing.js.map +1 -0
  270. package/dist/db/node-sqlite.d.ts +9 -0
  271. package/dist/db/node-sqlite.d.ts.map +1 -0
  272. package/dist/db/node-sqlite.js +87 -0
  273. package/dist/db/node-sqlite.js.map +1 -0
  274. package/dist/db/types.d.ts +22 -0
  275. package/dist/db/types.d.ts.map +1 -0
  276. package/dist/db/types.js +2 -0
  277. package/dist/db/types.js.map +1 -0
  278. package/dist/docs/docs-page.d.ts +2 -0
  279. package/dist/docs/docs-page.d.ts.map +1 -0
  280. package/dist/docs/docs-page.js +319 -0
  281. package/dist/docs/docs-page.js.map +1 -0
  282. package/dist/docs/openapi.d.ts +1896 -0
  283. package/dist/docs/openapi.d.ts.map +1 -0
  284. package/dist/docs/openapi.js +1096 -0
  285. package/dist/docs/openapi.js.map +1 -0
  286. package/dist/env.d.ts +2 -0
  287. package/dist/env.d.ts.map +1 -0
  288. package/dist/env.js +9 -0
  289. package/dist/env.js.map +1 -0
  290. package/dist/index.d.ts +2 -0
  291. package/dist/index.d.ts.map +1 -0
  292. package/dist/index.js +144 -0
  293. package/dist/index.js.map +1 -0
  294. package/dist/lib/anthropic-documents.d.ts +41 -0
  295. package/dist/lib/anthropic-documents.d.ts.map +1 -0
  296. package/dist/lib/anthropic-documents.js +132 -0
  297. package/dist/lib/anthropic-documents.js.map +1 -0
  298. package/dist/lib/app-version.d.ts +5 -0
  299. package/dist/lib/app-version.d.ts.map +1 -0
  300. package/dist/lib/app-version.js +61 -0
  301. package/dist/lib/app-version.js.map +1 -0
  302. package/dist/lib/attempt-trace.d.ts +23 -0
  303. package/dist/lib/attempt-trace.d.ts.map +1 -0
  304. package/dist/lib/attempt-trace.js +32 -0
  305. package/dist/lib/attempt-trace.js.map +1 -0
  306. package/dist/lib/budget.d.ts +6 -0
  307. package/dist/lib/budget.d.ts.map +1 -0
  308. package/dist/lib/budget.js +40 -0
  309. package/dist/lib/budget.js.map +1 -0
  310. package/dist/lib/client-classifier.d.ts +10 -0
  311. package/dist/lib/client-classifier.d.ts.map +1 -0
  312. package/dist/lib/client-classifier.js +126 -0
  313. package/dist/lib/client-classifier.js.map +1 -0
  314. package/dist/lib/client-context.d.ts +10 -0
  315. package/dist/lib/client-context.d.ts.map +1 -0
  316. package/dist/lib/client-context.js +39 -0
  317. package/dist/lib/client-context.js.map +1 -0
  318. package/dist/lib/config.d.ts +33 -0
  319. package/dist/lib/config.d.ts.map +1 -0
  320. package/dist/lib/config.js +94 -0
  321. package/dist/lib/config.js.map +1 -0
  322. package/dist/lib/content.d.ts +33 -0
  323. package/dist/lib/content.d.ts.map +1 -0
  324. package/dist/lib/content.js +201 -0
  325. package/dist/lib/content.js.map +1 -0
  326. package/dist/lib/credential.d.ts +11 -0
  327. package/dist/lib/credential.d.ts.map +1 -0
  328. package/dist/lib/credential.js +18 -0
  329. package/dist/lib/credential.js.map +1 -0
  330. package/dist/lib/crypto.d.ts +31 -0
  331. package/dist/lib/crypto.d.ts.map +1 -0
  332. package/dist/lib/crypto.js +206 -0
  333. package/dist/lib/crypto.js.map +1 -0
  334. package/dist/lib/custom-provider-cleanup.d.ts +13 -0
  335. package/dist/lib/custom-provider-cleanup.d.ts.map +1 -0
  336. package/dist/lib/custom-provider-cleanup.js +43 -0
  337. package/dist/lib/custom-provider-cleanup.js.map +1 -0
  338. package/dist/lib/db-backup.d.ts +31 -0
  339. package/dist/lib/db-backup.d.ts.map +1 -0
  340. package/dist/lib/db-backup.js +255 -0
  341. package/dist/lib/db-backup.js.map +1 -0
  342. package/dist/lib/endpoint-scope.d.ts +42 -0
  343. package/dist/lib/endpoint-scope.d.ts.map +1 -0
  344. package/dist/lib/endpoint-scope.js +95 -0
  345. package/dist/lib/endpoint-scope.js.map +1 -0
  346. package/dist/lib/env-drift.d.ts +17 -0
  347. package/dist/lib/env-drift.d.ts.map +1 -0
  348. package/dist/lib/env-drift.js +108 -0
  349. package/dist/lib/env-drift.js.map +1 -0
  350. package/dist/lib/error-classify.d.ts +40 -0
  351. package/dist/lib/error-classify.d.ts.map +1 -0
  352. package/dist/lib/error-classify.js +687 -0
  353. package/dist/lib/error-classify.js.map +1 -0
  354. package/dist/lib/error-redaction.d.ts +8 -0
  355. package/dist/lib/error-redaction.d.ts.map +1 -0
  356. package/dist/lib/error-redaction.js +45 -0
  357. package/dist/lib/error-redaction.js.map +1 -0
  358. package/dist/lib/fallback-loop.d.ts +306 -0
  359. package/dist/lib/fallback-loop.d.ts.map +1 -0
  360. package/dist/lib/fallback-loop.js +1336 -0
  361. package/dist/lib/fallback-loop.js.map +1 -0
  362. package/dist/lib/file-permissions.d.ts +98 -0
  363. package/dist/lib/file-permissions.d.ts.map +1 -0
  364. package/dist/lib/file-permissions.js +159 -0
  365. package/dist/lib/file-permissions.js.map +1 -0
  366. package/dist/lib/gemini-wire.d.ts +76 -0
  367. package/dist/lib/gemini-wire.d.ts.map +1 -0
  368. package/dist/lib/gemini-wire.js +392 -0
  369. package/dist/lib/gemini-wire.js.map +1 -0
  370. package/dist/lib/guardrails.d.ts +37 -0
  371. package/dist/lib/guardrails.d.ts.map +1 -0
  372. package/dist/lib/guardrails.js +106 -0
  373. package/dist/lib/guardrails.js.map +1 -0
  374. package/dist/lib/header-value.d.ts +8 -0
  375. package/dist/lib/header-value.d.ts.map +1 -0
  376. package/dist/lib/header-value.js +55 -0
  377. package/dist/lib/header-value.js.map +1 -0
  378. package/dist/lib/image-normalize.d.ts +21 -0
  379. package/dist/lib/image-normalize.d.ts.map +1 -0
  380. package/dist/lib/image-normalize.js +218 -0
  381. package/dist/lib/image-normalize.js.map +1 -0
  382. package/dist/lib/inbound-chat.d.ts +48 -0
  383. package/dist/lib/inbound-chat.d.ts.map +1 -0
  384. package/dist/lib/inbound-chat.js +406 -0
  385. package/dist/lib/inbound-chat.js.map +1 -0
  386. package/dist/lib/key-parser.d.ts +79 -0
  387. package/dist/lib/key-parser.d.ts.map +1 -0
  388. package/dist/lib/key-parser.js +701 -0
  389. package/dist/lib/key-parser.js.map +1 -0
  390. package/dist/lib/key-proxy.d.ts +49 -0
  391. package/dist/lib/key-proxy.d.ts.map +1 -0
  392. package/dist/lib/key-proxy.js +92 -0
  393. package/dist/lib/key-proxy.js.map +1 -0
  394. package/dist/lib/log-redaction.d.ts +28 -0
  395. package/dist/lib/log-redaction.d.ts.map +1 -0
  396. package/dist/lib/log-redaction.js +166 -0
  397. package/dist/lib/log-redaction.js.map +1 -0
  398. package/dist/lib/model-scope.d.ts +9 -0
  399. package/dist/lib/model-scope.d.ts.map +1 -0
  400. package/dist/lib/model-scope.js +29 -0
  401. package/dist/lib/model-scope.js.map +1 -0
  402. package/dist/lib/one-time-code.d.ts +15 -0
  403. package/dist/lib/one-time-code.d.ts.map +1 -0
  404. package/dist/lib/one-time-code.js +41 -0
  405. package/dist/lib/one-time-code.js.map +1 -0
  406. package/dist/lib/output-cap.d.ts +24 -0
  407. package/dist/lib/output-cap.d.ts.map +1 -0
  408. package/dist/lib/output-cap.js +80 -0
  409. package/dist/lib/output-cap.js.map +1 -0
  410. package/dist/lib/password.d.ts +3 -0
  411. package/dist/lib/password.d.ts.map +1 -0
  412. package/dist/lib/password.js +27 -0
  413. package/dist/lib/password.js.map +1 -0
  414. package/dist/lib/process-safety-net.d.ts +32 -0
  415. package/dist/lib/process-safety-net.d.ts.map +1 -0
  416. package/dist/lib/process-safety-net.js +123 -0
  417. package/dist/lib/process-safety-net.js.map +1 -0
  418. package/dist/lib/provider-identity.d.ts +37 -0
  419. package/dist/lib/provider-identity.d.ts.map +1 -0
  420. package/dist/lib/provider-identity.js +110 -0
  421. package/dist/lib/provider-identity.js.map +1 -0
  422. package/dist/lib/provider-size-parser.d.ts +6 -0
  423. package/dist/lib/provider-size-parser.d.ts.map +1 -0
  424. package/dist/lib/provider-size-parser.js +72 -0
  425. package/dist/lib/provider-size-parser.js.map +1 -0
  426. package/dist/lib/provider-timeout.d.ts +17 -0
  427. package/dist/lib/provider-timeout.d.ts.map +1 -0
  428. package/dist/lib/provider-timeout.js +70 -0
  429. package/dist/lib/provider-timeout.js.map +1 -0
  430. package/dist/lib/proxy.d.ts +180 -0
  431. package/dist/lib/proxy.d.ts.map +1 -0
  432. package/dist/lib/proxy.js +1002 -0
  433. package/dist/lib/proxy.js.map +1 -0
  434. package/dist/lib/request-log.d.ts +4 -0
  435. package/dist/lib/request-log.d.ts.map +1 -0
  436. package/dist/lib/request-log.js +161 -0
  437. package/dist/lib/request-log.js.map +1 -0
  438. package/dist/lib/reset-code.d.ts +5 -0
  439. package/dist/lib/reset-code.d.ts.map +1 -0
  440. package/dist/lib/reset-code.js +39 -0
  441. package/dist/lib/reset-code.js.map +1 -0
  442. package/dist/lib/retry-hint.d.ts +14 -0
  443. package/dist/lib/retry-hint.d.ts.map +1 -0
  444. package/dist/lib/retry-hint.js +36 -0
  445. package/dist/lib/retry-hint.js.map +1 -0
  446. package/dist/lib/route-live.d.ts +29 -0
  447. package/dist/lib/route-live.d.ts.map +1 -0
  448. package/dist/lib/route-live.js +97 -0
  449. package/dist/lib/route-live.js.map +1 -0
  450. package/dist/lib/sampling-params.d.ts +183 -0
  451. package/dist/lib/sampling-params.d.ts.map +1 -0
  452. package/dist/lib/sampling-params.js +386 -0
  453. package/dist/lib/sampling-params.js.map +1 -0
  454. package/dist/lib/scheduler.d.ts +13 -0
  455. package/dist/lib/scheduler.d.ts.map +1 -0
  456. package/dist/lib/scheduler.js +11 -0
  457. package/dist/lib/scheduler.js.map +1 -0
  458. package/dist/lib/served-model.d.ts +16 -0
  459. package/dist/lib/served-model.d.ts.map +1 -0
  460. package/dist/lib/served-model.js +0 -0
  461. package/dist/lib/served-model.js.map +1 -0
  462. package/dist/lib/server-logs.d.ts +132 -0
  463. package/dist/lib/server-logs.d.ts.map +1 -0
  464. package/dist/lib/server-logs.js +473 -0
  465. package/dist/lib/server-logs.js.map +1 -0
  466. package/dist/lib/setup-code.d.ts +5 -0
  467. package/dist/lib/setup-code.d.ts.map +1 -0
  468. package/dist/lib/setup-code.js +35 -0
  469. package/dist/lib/setup-code.js.map +1 -0
  470. package/dist/lib/structured-output.d.ts +9 -0
  471. package/dist/lib/structured-output.d.ts.map +1 -0
  472. package/dist/lib/structured-output.js +72 -0
  473. package/dist/lib/structured-output.js.map +1 -0
  474. package/dist/lib/system-prompt.d.ts +30 -0
  475. package/dist/lib/system-prompt.d.ts.map +1 -0
  476. package/dist/lib/system-prompt.js +66 -0
  477. package/dist/lib/system-prompt.js.map +1 -0
  478. package/dist/lib/task-type.d.ts +18 -0
  479. package/dist/lib/task-type.d.ts.map +1 -0
  480. package/dist/lib/task-type.js +92 -0
  481. package/dist/lib/task-type.js.map +1 -0
  482. package/dist/lib/think-tags.d.ts +37 -0
  483. package/dist/lib/think-tags.d.ts.map +1 -0
  484. package/dist/lib/think-tags.js +203 -0
  485. package/dist/lib/think-tags.js.map +1 -0
  486. package/dist/lib/tool-args.d.ts +36 -0
  487. package/dist/lib/tool-args.d.ts.map +1 -0
  488. package/dist/lib/tool-args.js +190 -0
  489. package/dist/lib/tool-args.js.map +1 -0
  490. package/dist/lib/tool-call-rescue.d.ts +62 -0
  491. package/dist/lib/tool-call-rescue.d.ts.map +1 -0
  492. package/dist/lib/tool-call-rescue.js +258 -0
  493. package/dist/lib/tool-call-rescue.js.map +1 -0
  494. package/dist/lib/tool-capability.d.ts +13 -0
  495. package/dist/lib/tool-capability.d.ts.map +1 -0
  496. package/dist/lib/tool-capability.js +70 -0
  497. package/dist/lib/tool-capability.js.map +1 -0
  498. package/dist/lib/tool-validate.d.ts +44 -0
  499. package/dist/lib/tool-validate.d.ts.map +1 -0
  500. package/dist/lib/tool-validate.js +165 -0
  501. package/dist/lib/tool-validate.js.map +1 -0
  502. package/dist/lib/ttfb-budget.d.ts +13 -0
  503. package/dist/lib/ttfb-budget.d.ts.map +1 -0
  504. package/dist/lib/ttfb-budget.js +153 -0
  505. package/dist/lib/ttfb-budget.js.map +1 -0
  506. package/dist/lib/url-guard.d.ts +47 -0
  507. package/dist/lib/url-guard.d.ts.map +1 -0
  508. package/dist/lib/url-guard.js +229 -0
  509. package/dist/lib/url-guard.js.map +1 -0
  510. package/dist/lib/wake-detect.d.ts +12 -0
  511. package/dist/lib/wake-detect.d.ts.map +1 -0
  512. package/dist/lib/wake-detect.js +99 -0
  513. package/dist/lib/wake-detect.js.map +1 -0
  514. package/dist/middleware/errorHandler.d.ts +3 -0
  515. package/dist/middleware/errorHandler.d.ts.map +1 -0
  516. package/dist/middleware/errorHandler.js +45 -0
  517. package/dist/middleware/errorHandler.js.map +1 -0
  518. package/dist/middleware/rateLimit.d.ts +4 -0
  519. package/dist/middleware/rateLimit.d.ts.map +1 -0
  520. package/dist/middleware/rateLimit.js +125 -0
  521. package/dist/middleware/rateLimit.js.map +1 -0
  522. package/dist/middleware/requireAuth.d.ts +3 -0
  523. package/dist/middleware/requireAuth.d.ts.map +1 -0
  524. package/dist/middleware/requireAuth.js +17 -0
  525. package/dist/middleware/requireAuth.js.map +1 -0
  526. package/dist/providers/aclide.d.ts +18 -0
  527. package/dist/providers/aclide.d.ts.map +1 -0
  528. package/dist/providers/aclide.js +174 -0
  529. package/dist/providers/aclide.js.map +1 -0
  530. package/dist/providers/aihorde.d.ts +42 -0
  531. package/dist/providers/aihorde.d.ts.map +1 -0
  532. package/dist/providers/aihorde.js +192 -0
  533. package/dist/providers/aihorde.js.map +1 -0
  534. package/dist/providers/airforce.d.ts +11 -0
  535. package/dist/providers/airforce.d.ts.map +1 -0
  536. package/dist/providers/airforce.js +32 -0
  537. package/dist/providers/airforce.js.map +1 -0
  538. package/dist/providers/base.d.ts +177 -0
  539. package/dist/providers/base.d.ts.map +1 -0
  540. package/dist/providers/base.js +354 -0
  541. package/dist/providers/base.js.map +1 -0
  542. package/dist/providers/blaze.d.ts +11 -0
  543. package/dist/providers/blaze.d.ts.map +1 -0
  544. package/dist/providers/blaze.js +33 -0
  545. package/dist/providers/blaze.js.map +1 -0
  546. package/dist/providers/blockrun.d.ts +14 -0
  547. package/dist/providers/blockrun.d.ts.map +1 -0
  548. package/dist/providers/blockrun.js +36 -0
  549. package/dist/providers/blockrun.js.map +1 -0
  550. package/dist/providers/clod.d.ts +11 -0
  551. package/dist/providers/clod.d.ts.map +1 -0
  552. package/dist/providers/clod.js +39 -0
  553. package/dist/providers/clod.js.map +1 -0
  554. package/dist/providers/cloudflare.d.ts +15 -0
  555. package/dist/providers/cloudflare.d.ts.map +1 -0
  556. package/dist/providers/cloudflare.js +175 -0
  557. package/dist/providers/cloudflare.js.map +1 -0
  558. package/dist/providers/cohere.d.ts +11 -0
  559. package/dist/providers/cohere.d.ts.map +1 -0
  560. package/dist/providers/cohere.js +117 -0
  561. package/dist/providers/cohere.js.map +1 -0
  562. package/dist/providers/dreamprompting.d.ts +11 -0
  563. package/dist/providers/dreamprompting.d.ts.map +1 -0
  564. package/dist/providers/dreamprompting.js +41 -0
  565. package/dist/providers/dreamprompting.js.map +1 -0
  566. package/dist/providers/electronhub.d.ts +10 -0
  567. package/dist/providers/electronhub.d.ts.map +1 -0
  568. package/dist/providers/electronhub.js +56 -0
  569. package/dist/providers/electronhub.js.map +1 -0
  570. package/dist/providers/experiential.d.ts +10 -0
  571. package/dist/providers/experiential.d.ts.map +1 -0
  572. package/dist/providers/experiential.js +33 -0
  573. package/dist/providers/experiential.js.map +1 -0
  574. package/dist/providers/gizmo.d.ts +15 -0
  575. package/dist/providers/gizmo.d.ts.map +1 -0
  576. package/dist/providers/gizmo.js +54 -0
  577. package/dist/providers/gizmo.js.map +1 -0
  578. package/dist/providers/google.d.ts +30 -0
  579. package/dist/providers/google.d.ts.map +1 -0
  580. package/dist/providers/google.js +766 -0
  581. package/dist/providers/google.js.map +1 -0
  582. package/dist/providers/index.d.ts +13 -0
  583. package/dist/providers/index.d.ts.map +1 -0
  584. package/dist/providers/index.js +561 -0
  585. package/dist/providers/index.js.map +1 -0
  586. package/dist/providers/llmtr.d.ts +15 -0
  587. package/dist/providers/llmtr.d.ts.map +1 -0
  588. package/dist/providers/llmtr.js +51 -0
  589. package/dist/providers/llmtr.js.map +1 -0
  590. package/dist/providers/logfare.d.ts +11 -0
  591. package/dist/providers/logfare.d.ts.map +1 -0
  592. package/dist/providers/logfare.js +33 -0
  593. package/dist/providers/logfare.js.map +1 -0
  594. package/dist/providers/lucidity.d.ts +11 -0
  595. package/dist/providers/lucidity.d.ts.map +1 -0
  596. package/dist/providers/lucidity.js +37 -0
  597. package/dist/providers/lucidity.js.map +1 -0
  598. package/dist/providers/modelscope.d.ts +50 -0
  599. package/dist/providers/modelscope.d.ts.map +1 -0
  600. package/dist/providers/modelscope.js +143 -0
  601. package/dist/providers/modelscope.js.map +1 -0
  602. package/dist/providers/moondream.d.ts +17 -0
  603. package/dist/providers/moondream.d.ts.map +1 -0
  604. package/dist/providers/moondream.js +140 -0
  605. package/dist/providers/moondream.js.map +1 -0
  606. package/dist/providers/openai-compat.d.ts +140 -0
  607. package/dist/providers/openai-compat.d.ts.map +1 -0
  608. package/dist/providers/openai-compat.js +537 -0
  609. package/dist/providers/openai-compat.js.map +1 -0
  610. package/dist/providers/opencode-free.d.ts +24 -0
  611. package/dist/providers/opencode-free.d.ts.map +1 -0
  612. package/dist/providers/opencode-free.js +262 -0
  613. package/dist/providers/opencode-free.js.map +1 -0
  614. package/dist/providers/pollinations.d.ts +32 -0
  615. package/dist/providers/pollinations.d.ts.map +1 -0
  616. package/dist/providers/pollinations.js +65 -0
  617. package/dist/providers/pollinations.js.map +1 -0
  618. package/dist/providers/router9.d.ts +16 -0
  619. package/dist/providers/router9.d.ts.map +1 -0
  620. package/dist/providers/router9.js +42 -0
  621. package/dist/providers/router9.js.map +1 -0
  622. package/dist/providers/sail.d.ts +44 -0
  623. package/dist/providers/sail.d.ts.map +1 -0
  624. package/dist/providers/sail.js +302 -0
  625. package/dist/providers/sail.js.map +1 -0
  626. package/dist/providers/septor.d.ts +10 -0
  627. package/dist/providers/septor.d.ts.map +1 -0
  628. package/dist/providers/septor.js +36 -0
  629. package/dist/providers/septor.js.map +1 -0
  630. package/dist/providers/speechify.d.ts +14 -0
  631. package/dist/providers/speechify.d.ts.map +1 -0
  632. package/dist/providers/speechify.js +28 -0
  633. package/dist/providers/speechify.js.map +1 -0
  634. package/dist/providers/speka.d.ts +12 -0
  635. package/dist/providers/speka.d.ts.map +1 -0
  636. package/dist/providers/speka.js +37 -0
  637. package/dist/providers/speka.js.map +1 -0
  638. package/dist/providers/waterfall.d.ts +11 -0
  639. package/dist/providers/waterfall.d.ts.map +1 -0
  640. package/dist/providers/waterfall.js +33 -0
  641. package/dist/providers/waterfall.js.map +1 -0
  642. package/dist/providers/xkiro.d.ts +71 -0
  643. package/dist/providers/xkiro.d.ts.map +1 -0
  644. package/dist/providers/xkiro.js +119 -0
  645. package/dist/providers/xkiro.js.map +1 -0
  646. package/dist/providers/zhipu.d.ts +43 -0
  647. package/dist/providers/zhipu.d.ts.map +1 -0
  648. package/dist/providers/zhipu.js +95 -0
  649. package/dist/providers/zhipu.js.map +1 -0
  650. package/dist/routes/analytics.d.ts +2 -0
  651. package/dist/routes/analytics.d.ts.map +1 -0
  652. package/dist/routes/analytics.js +738 -0
  653. package/dist/routes/analytics.js.map +1 -0
  654. package/dist/routes/anthropic.d.ts +7 -0
  655. package/dist/routes/anthropic.d.ts.map +1 -0
  656. package/dist/routes/anthropic.js +1076 -0
  657. package/dist/routes/anthropic.js.map +1 -0
  658. package/dist/routes/auth.d.ts +2 -0
  659. package/dist/routes/auth.d.ts.map +1 -0
  660. package/dist/routes/auth.js +310 -0
  661. package/dist/routes/auth.js.map +1 -0
  662. package/dist/routes/backups.d.ts +2 -0
  663. package/dist/routes/backups.d.ts.map +1 -0
  664. package/dist/routes/backups.js +127 -0
  665. package/dist/routes/backups.js.map +1 -0
  666. package/dist/routes/cache.d.ts +2 -0
  667. package/dist/routes/cache.d.ts.map +1 -0
  668. package/dist/routes/cache.js +40 -0
  669. package/dist/routes/cache.js.map +1 -0
  670. package/dist/routes/client-profiles.d.ts +2 -0
  671. package/dist/routes/client-profiles.d.ts.map +1 -0
  672. package/dist/routes/client-profiles.js +128 -0
  673. package/dist/routes/client-profiles.js.map +1 -0
  674. package/dist/routes/compression.d.ts +2 -0
  675. package/dist/routes/compression.d.ts.map +1 -0
  676. package/dist/routes/compression.js +82 -0
  677. package/dist/routes/compression.js.map +1 -0
  678. package/dist/routes/conversations.d.ts +3 -0
  679. package/dist/routes/conversations.d.ts.map +1 -0
  680. package/dist/routes/conversations.js +215 -0
  681. package/dist/routes/conversations.js.map +1 -0
  682. package/dist/routes/docs.d.ts +2 -0
  683. package/dist/routes/docs.d.ts.map +1 -0
  684. package/dist/routes/docs.js +21 -0
  685. package/dist/routes/docs.js.map +1 -0
  686. package/dist/routes/embeddings.d.ts +2 -0
  687. package/dist/routes/embeddings.d.ts.map +1 -0
  688. package/dist/routes/embeddings.js +255 -0
  689. package/dist/routes/embeddings.js.map +1 -0
  690. package/dist/routes/fallback.d.ts +2 -0
  691. package/dist/routes/fallback.d.ts.map +1 -0
  692. package/dist/routes/fallback.js +631 -0
  693. package/dist/routes/fallback.js.map +1 -0
  694. package/dist/routes/free-tier.d.ts +22 -0
  695. package/dist/routes/free-tier.d.ts.map +1 -0
  696. package/dist/routes/free-tier.js +175 -0
  697. package/dist/routes/free-tier.js.map +1 -0
  698. package/dist/routes/gemini.d.ts +2 -0
  699. package/dist/routes/gemini.d.ts.map +1 -0
  700. package/dist/routes/gemini.js +218 -0
  701. package/dist/routes/gemini.js.map +1 -0
  702. package/dist/routes/health.d.ts +2 -0
  703. package/dist/routes/health.d.ts.map +1 -0
  704. package/dist/routes/health.js +72 -0
  705. package/dist/routes/health.js.map +1 -0
  706. package/dist/routes/keys.d.ts +17 -0
  707. package/dist/routes/keys.d.ts.map +1 -0
  708. package/dist/routes/keys.js +1787 -0
  709. package/dist/routes/keys.js.map +1 -0
  710. package/dist/routes/logs.d.ts +2 -0
  711. package/dist/routes/logs.d.ts.map +1 -0
  712. package/dist/routes/logs.js +88 -0
  713. package/dist/routes/logs.js.map +1 -0
  714. package/dist/routes/mcp.d.ts +4 -0
  715. package/dist/routes/mcp.d.ts.map +1 -0
  716. package/dist/routes/mcp.js +563 -0
  717. package/dist/routes/mcp.js.map +1 -0
  718. package/dist/routes/media.d.ts +2 -0
  719. package/dist/routes/media.d.ts.map +1 -0
  720. package/dist/routes/media.js +180 -0
  721. package/dist/routes/media.js.map +1 -0
  722. package/dist/routes/models.d.ts +2 -0
  723. package/dist/routes/models.d.ts.map +1 -0
  724. package/dist/routes/models.js +439 -0
  725. package/dist/routes/models.js.map +1 -0
  726. package/dist/routes/ollama.d.ts +7 -0
  727. package/dist/routes/ollama.d.ts.map +1 -0
  728. package/dist/routes/ollama.js +595 -0
  729. package/dist/routes/ollama.js.map +1 -0
  730. package/dist/routes/profiles.d.ts +3 -0
  731. package/dist/routes/profiles.d.ts.map +1 -0
  732. package/dist/routes/profiles.js +431 -0
  733. package/dist/routes/profiles.js.map +1 -0
  734. package/dist/routes/proxy.d.ts +32 -0
  735. package/dist/routes/proxy.d.ts.map +1 -0
  736. package/dist/routes/proxy.js +2793 -0
  737. package/dist/routes/proxy.js.map +1 -0
  738. package/dist/routes/responses.d.ts +1161 -0
  739. package/dist/routes/responses.d.ts.map +1 -0
  740. package/dist/routes/responses.js +1521 -0
  741. package/dist/routes/responses.js.map +1 -0
  742. package/dist/routes/settings.d.ts +2 -0
  743. package/dist/routes/settings.d.ts.map +1 -0
  744. package/dist/routes/settings.js +549 -0
  745. package/dist/routes/settings.js.map +1 -0
  746. package/dist/routes/status.d.ts +3 -0
  747. package/dist/routes/status.d.ts.map +1 -0
  748. package/dist/routes/status.js +214 -0
  749. package/dist/routes/status.js.map +1 -0
  750. package/dist/routes/update.d.ts +31 -0
  751. package/dist/routes/update.d.ts.map +1 -0
  752. package/dist/routes/update.js +536 -0
  753. package/dist/routes/update.js.map +1 -0
  754. package/dist/routes/url-tokens.d.ts +2 -0
  755. package/dist/routes/url-tokens.d.ts.map +1 -0
  756. package/dist/routes/url-tokens.js +31 -0
  757. package/dist/routes/url-tokens.js.map +1 -0
  758. package/dist/scripts/export-catalog.d.ts +2 -0
  759. package/dist/scripts/export-catalog.d.ts.map +1 -0
  760. package/dist/scripts/export-catalog.js +114 -0
  761. package/dist/scripts/export-catalog.js.map +1 -0
  762. package/dist/scripts/rotate-encryption-key.d.ts +81 -0
  763. package/dist/scripts/rotate-encryption-key.d.ts.map +1 -0
  764. package/dist/scripts/rotate-encryption-key.js +232 -0
  765. package/dist/scripts/rotate-encryption-key.js.map +1 -0
  766. package/dist/scripts/routing-sim.d.ts +2 -0
  767. package/dist/scripts/routing-sim.d.ts.map +1 -0
  768. package/dist/scripts/routing-sim.js +130 -0
  769. package/dist/scripts/routing-sim.js.map +1 -0
  770. package/dist/scripts/test-all-models.d.ts +2 -0
  771. package/dist/scripts/test-all-models.d.ts.map +1 -0
  772. package/dist/scripts/test-all-models.js +56 -0
  773. package/dist/scripts/test-all-models.js.map +1 -0
  774. package/dist/services/anthropic-map.d.ts +39 -0
  775. package/dist/services/anthropic-map.d.ts.map +1 -0
  776. package/dist/services/anthropic-map.js +138 -0
  777. package/dist/services/anthropic-map.js.map +1 -0
  778. package/dist/services/auth.d.ts +30 -0
  779. package/dist/services/auth.d.ts.map +1 -0
  780. package/dist/services/auth.js +124 -0
  781. package/dist/services/auth.js.map +1 -0
  782. package/dist/services/auto-discover.d.ts +77 -0
  783. package/dist/services/auto-discover.d.ts.map +1 -0
  784. package/dist/services/auto-discover.js +1047 -0
  785. package/dist/services/auto-discover.js.map +1 -0
  786. package/dist/services/backups.d.ts +67 -0
  787. package/dist/services/backups.d.ts.map +1 -0
  788. package/dist/services/backups.js +444 -0
  789. package/dist/services/backups.js.map +1 -0
  790. package/dist/services/builtin-model-discovery.d.ts +107 -0
  791. package/dist/services/builtin-model-discovery.d.ts.map +1 -0
  792. package/dist/services/builtin-model-discovery.js +296 -0
  793. package/dist/services/builtin-model-discovery.js.map +1 -0
  794. package/dist/services/cache.d.ts +190 -0
  795. package/dist/services/cache.d.ts.map +1 -0
  796. package/dist/services/cache.js +617 -0
  797. package/dist/services/cache.js.map +1 -0
  798. package/dist/services/catalog-sync.d.ts +257 -0
  799. package/dist/services/catalog-sync.d.ts.map +1 -0
  800. package/dist/services/catalog-sync.js +1041 -0
  801. package/dist/services/catalog-sync.js.map +1 -0
  802. package/dist/services/compression/config.d.ts +33 -0
  803. package/dist/services/compression/config.d.ts.map +1 -0
  804. package/dist/services/compression/config.js +158 -0
  805. package/dist/services/compression/config.js.map +1 -0
  806. package/dist/services/compression/engines/aging.d.ts +2 -0
  807. package/dist/services/compression/engines/aging.d.ts.map +1 -0
  808. package/dist/services/compression/engines/aging.js +53 -0
  809. package/dist/services/compression/engines/aging.js.map +1 -0
  810. package/dist/services/compression/engines/custom-filters.d.ts +4 -0
  811. package/dist/services/compression/engines/custom-filters.d.ts.map +1 -0
  812. package/dist/services/compression/engines/custom-filters.js +49 -0
  813. package/dist/services/compression/engines/custom-filters.js.map +1 -0
  814. package/dist/services/compression/engines/dedup.d.ts +2 -0
  815. package/dist/services/compression/engines/dedup.d.ts.map +1 -0
  816. package/dist/services/compression/engines/dedup.js +61 -0
  817. package/dist/services/compression/engines/dedup.js.map +1 -0
  818. package/dist/services/compression/engines/filter-definitions.d.ts +75 -0
  819. package/dist/services/compression/engines/filter-definitions.d.ts.map +1 -0
  820. package/dist/services/compression/engines/filter-definitions.js +45 -0
  821. package/dist/services/compression/engines/filter-definitions.js.map +1 -0
  822. package/dist/services/compression/engines/hard-budget.d.ts +2 -0
  823. package/dist/services/compression/engines/hard-budget.d.ts.map +1 -0
  824. package/dist/services/compression/engines/hard-budget.js +52 -0
  825. package/dist/services/compression/engines/hard-budget.js.map +1 -0
  826. package/dist/services/compression/engines/index.d.ts +9 -0
  827. package/dist/services/compression/engines/index.d.ts.map +1 -0
  828. package/dist/services/compression/engines/index.js +9 -0
  829. package/dist/services/compression/engines/index.js.map +1 -0
  830. package/dist/services/compression/engines/jsoncompact.d.ts +3 -0
  831. package/dist/services/compression/engines/jsoncompact.d.ts.map +1 -0
  832. package/dist/services/compression/engines/jsoncompact.js +145 -0
  833. package/dist/services/compression/engines/jsoncompact.js.map +1 -0
  834. package/dist/services/compression/engines/lite.d.ts +2 -0
  835. package/dist/services/compression/engines/lite.d.ts.map +1 -0
  836. package/dist/services/compression/engines/lite.js +34 -0
  837. package/dist/services/compression/engines/lite.js.map +1 -0
  838. package/dist/services/compression/engines/read-lifecycle.d.ts +2 -0
  839. package/dist/services/compression/engines/read-lifecycle.d.ts.map +1 -0
  840. package/dist/services/compression/engines/read-lifecycle.js +70 -0
  841. package/dist/services/compression/engines/read-lifecycle.js.map +1 -0
  842. package/dist/services/compression/engines/relevance.d.ts +2 -0
  843. package/dist/services/compression/engines/relevance.d.ts.map +1 -0
  844. package/dist/services/compression/engines/relevance.js +74 -0
  845. package/dist/services/compression/engines/relevance.js.map +1 -0
  846. package/dist/services/compression/engines/toolfilter.d.ts +2 -0
  847. package/dist/services/compression/engines/toolfilter.d.ts.map +1 -0
  848. package/dist/services/compression/engines/toolfilter.js +195 -0
  849. package/dist/services/compression/engines/toolfilter.js.map +1 -0
  850. package/dist/services/compression/fidelity-gate.d.ts +12 -0
  851. package/dist/services/compression/fidelity-gate.d.ts.map +1 -0
  852. package/dist/services/compression/fidelity-gate.js +90 -0
  853. package/dist/services/compression/fidelity-gate.js.map +1 -0
  854. package/dist/services/compression/helpers.d.ts +9 -0
  855. package/dist/services/compression/helpers.d.ts.map +1 -0
  856. package/dist/services/compression/helpers.js +52 -0
  857. package/dist/services/compression/helpers.js.map +1 -0
  858. package/dist/services/compression/pipeline.d.ts +7 -0
  859. package/dist/services/compression/pipeline.d.ts.map +1 -0
  860. package/dist/services/compression/pipeline.js +245 -0
  861. package/dist/services/compression/pipeline.js.map +1 -0
  862. package/dist/services/compression/preservation.d.ts +27 -0
  863. package/dist/services/compression/preservation.d.ts.map +1 -0
  864. package/dist/services/compression/preservation.js +109 -0
  865. package/dist/services/compression/preservation.js.map +1 -0
  866. package/dist/services/compression/registry.d.ts +6 -0
  867. package/dist/services/compression/registry.d.ts.map +1 -0
  868. package/dist/services/compression/registry.js +16 -0
  869. package/dist/services/compression/registry.js.map +1 -0
  870. package/dist/services/compression/stats.d.ts +29 -0
  871. package/dist/services/compression/stats.d.ts.map +1 -0
  872. package/dist/services/compression/stats.js +55 -0
  873. package/dist/services/compression/stats.js.map +1 -0
  874. package/dist/services/compression/types.d.ts +90 -0
  875. package/dist/services/compression/types.d.ts.map +1 -0
  876. package/dist/services/compression/types.js +2 -0
  877. package/dist/services/compression/types.js.map +1 -0
  878. package/dist/services/context-handoff.d.ts +22 -0
  879. package/dist/services/context-handoff.d.ts.map +1 -0
  880. package/dist/services/context-handoff.js +164 -0
  881. package/dist/services/context-handoff.js.map +1 -0
  882. package/dist/services/cooldown-probe.d.ts +24 -0
  883. package/dist/services/cooldown-probe.d.ts.map +1 -0
  884. package/dist/services/cooldown-probe.js +181 -0
  885. package/dist/services/cooldown-probe.js.map +1 -0
  886. package/dist/services/custom-endpoint.d.ts +58 -0
  887. package/dist/services/custom-endpoint.d.ts.map +1 -0
  888. package/dist/services/custom-endpoint.js +167 -0
  889. package/dist/services/custom-endpoint.js.map +1 -0
  890. package/dist/services/custom-media-register.d.ts +22 -0
  891. package/dist/services/custom-media-register.d.ts.map +1 -0
  892. package/dist/services/custom-media-register.js +45 -0
  893. package/dist/services/custom-media-register.js.map +1 -0
  894. package/dist/services/custom-model-register.d.ts +50 -0
  895. package/dist/services/custom-model-register.d.ts.map +1 -0
  896. package/dist/services/custom-model-register.js +103 -0
  897. package/dist/services/custom-model-register.js.map +1 -0
  898. package/dist/services/custom-model-seed.d.ts +18 -0
  899. package/dist/services/custom-model-seed.d.ts.map +1 -0
  900. package/dist/services/custom-model-seed.js +42 -0
  901. package/dist/services/custom-model-seed.js.map +1 -0
  902. package/dist/services/custom-model-sync.d.ts +37 -0
  903. package/dist/services/custom-model-sync.d.ts.map +1 -0
  904. package/dist/services/custom-model-sync.js +118 -0
  905. package/dist/services/custom-model-sync.js.map +1 -0
  906. package/dist/services/custom-model-tombstone.d.ts +5 -0
  907. package/dist/services/custom-model-tombstone.d.ts.map +1 -0
  908. package/dist/services/custom-model-tombstone.js +30 -0
  909. package/dist/services/custom-model-tombstone.js.map +1 -0
  910. package/dist/services/declarative-config.d.ts +356 -0
  911. package/dist/services/declarative-config.d.ts.map +1 -0
  912. package/dist/services/declarative-config.js +427 -0
  913. package/dist/services/declarative-config.js.map +1 -0
  914. package/dist/services/degradation.d.ts +40 -0
  915. package/dist/services/degradation.d.ts.map +1 -0
  916. package/dist/services/degradation.js +119 -0
  917. package/dist/services/degradation.js.map +1 -0
  918. package/dist/services/embeddings.d.ts +76 -0
  919. package/dist/services/embeddings.d.ts.map +1 -0
  920. package/dist/services/embeddings.js +319 -0
  921. package/dist/services/embeddings.js.map +1 -0
  922. package/dist/services/fusion.d.ts +162 -0
  923. package/dist/services/fusion.d.ts.map +1 -0
  924. package/dist/services/fusion.js +789 -0
  925. package/dist/services/fusion.js.map +1 -0
  926. package/dist/services/gemini-map.d.ts +14 -0
  927. package/dist/services/gemini-map.d.ts.map +1 -0
  928. package/dist/services/gemini-map.js +78 -0
  929. package/dist/services/gemini-map.js.map +1 -0
  930. package/dist/services/health.d.ts +52 -0
  931. package/dist/services/health.d.ts.map +1 -0
  932. package/dist/services/health.js +352 -0
  933. package/dist/services/health.js.map +1 -0
  934. package/dist/services/idempotency.d.ts +49 -0
  935. package/dist/services/idempotency.d.ts.map +1 -0
  936. package/dist/services/idempotency.js +140 -0
  937. package/dist/services/idempotency.js.map +1 -0
  938. package/dist/services/key-budget.d.ts +74 -0
  939. package/dist/services/key-budget.d.ts.map +1 -0
  940. package/dist/services/key-budget.js +200 -0
  941. package/dist/services/key-budget.js.map +1 -0
  942. package/dist/services/media.d.ts +123 -0
  943. package/dist/services/media.d.ts.map +1 -0
  944. package/dist/services/media.js +954 -0
  945. package/dist/services/media.js.map +1 -0
  946. package/dist/services/model-discovery.d.ts +126 -0
  947. package/dist/services/model-discovery.d.ts.map +1 -0
  948. package/dist/services/model-discovery.js +662 -0
  949. package/dist/services/model-discovery.js.map +1 -0
  950. package/dist/services/model-groups.d.ts +149 -0
  951. package/dist/services/model-groups.d.ts.map +1 -0
  952. package/dist/services/model-groups.js +314 -0
  953. package/dist/services/model-groups.js.map +1 -0
  954. package/dist/services/model-listing.d.ts +18 -0
  955. package/dist/services/model-listing.d.ts.map +1 -0
  956. package/dist/services/model-listing.js +94 -0
  957. package/dist/services/model-listing.js.map +1 -0
  958. package/dist/services/model-retirement.d.ts +29 -0
  959. package/dist/services/model-retirement.d.ts.map +1 -0
  960. package/dist/services/model-retirement.js +86 -0
  961. package/dist/services/model-retirement.js.map +1 -0
  962. package/dist/services/model-state.d.ts +90 -0
  963. package/dist/services/model-state.d.ts.map +1 -0
  964. package/dist/services/model-state.js +342 -0
  965. package/dist/services/model-state.js.map +1 -0
  966. package/dist/services/model-weight-overrides.d.ts +48 -0
  967. package/dist/services/model-weight-overrides.d.ts.map +1 -0
  968. package/dist/services/model-weight-overrides.js +127 -0
  969. package/dist/services/model-weight-overrides.js.map +1 -0
  970. package/dist/services/notification-emitter.d.ts +50 -0
  971. package/dist/services/notification-emitter.d.ts.map +1 -0
  972. package/dist/services/notification-emitter.js +177 -0
  973. package/dist/services/notification-emitter.js.map +1 -0
  974. package/dist/services/opencode-free-sync.d.ts +29 -0
  975. package/dist/services/opencode-free-sync.d.ts.map +1 -0
  976. package/dist/services/opencode-free-sync.js +206 -0
  977. package/dist/services/opencode-free-sync.js.map +1 -0
  978. package/dist/services/penalty-inspector.d.ts +56 -0
  979. package/dist/services/penalty-inspector.d.ts.map +1 -0
  980. package/dist/services/penalty-inspector.js +167 -0
  981. package/dist/services/penalty-inspector.js.map +1 -0
  982. package/dist/services/profile-models.d.ts +5 -0
  983. package/dist/services/profile-models.d.ts.map +1 -0
  984. package/dist/services/profile-models.js +62 -0
  985. package/dist/services/profile-models.js.map +1 -0
  986. package/dist/services/provider-credential.d.ts +19 -0
  987. package/dist/services/provider-credential.d.ts.map +1 -0
  988. package/dist/services/provider-credential.js +51 -0
  989. package/dist/services/provider-credential.js.map +1 -0
  990. package/dist/services/provider-quota.d.ts +64 -0
  991. package/dist/services/provider-quota.d.ts.map +1 -0
  992. package/dist/services/provider-quota.js +563 -0
  993. package/dist/services/provider-quota.js.map +1 -0
  994. package/dist/services/quirks.d.ts +0 -0
  995. package/dist/services/quirks.d.ts.map +1 -0
  996. package/dist/services/quirks.js +0 -0
  997. package/dist/services/quirks.js.map +1 -0
  998. package/dist/services/quota-forecast.d.ts +50 -0
  999. package/dist/services/quota-forecast.d.ts.map +1 -0
  1000. package/dist/services/quota-forecast.js +150 -0
  1001. package/dist/services/quota-forecast.js.map +1 -0
  1002. package/dist/services/quota-outlook.d.ts +4 -0
  1003. package/dist/services/quota-outlook.d.ts.map +1 -0
  1004. package/dist/services/quota-outlook.js +92 -0
  1005. package/dist/services/quota-outlook.js.map +1 -0
  1006. package/dist/services/ratelimit.d.ts +249 -0
  1007. package/dist/services/ratelimit.d.ts.map +1 -0
  1008. package/dist/services/ratelimit.js +1182 -0
  1009. package/dist/services/ratelimit.js.map +1 -0
  1010. package/dist/services/request-retention.d.ts +60 -0
  1011. package/dist/services/request-retention.d.ts.map +1 -0
  1012. package/dist/services/request-retention.js +229 -0
  1013. package/dist/services/request-retention.js.map +1 -0
  1014. package/dist/services/router.d.ts +384 -0
  1015. package/dist/services/router.d.ts.map +1 -0
  1016. package/dist/services/router.js +1986 -0
  1017. package/dist/services/router.js.map +1 -0
  1018. package/dist/services/scoring.d.ts +156 -0
  1019. package/dist/services/scoring.d.ts.map +1 -0
  1020. package/dist/services/scoring.js +435 -0
  1021. package/dist/services/scoring.js.map +1 -0
  1022. package/dist/services/url-tokens.d.ts +15 -0
  1023. package/dist/services/url-tokens.d.ts.map +1 -0
  1024. package/dist/services/url-tokens.js +55 -0
  1025. package/dist/services/url-tokens.js.map +1 -0
  1026. package/package.json +77 -4
  1027. 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,4 @@
1
+ import type { Db } from '../types.js';
2
+ export declare function up(db: Db): void;
3
+ export declare function down(db: Db): void;
4
+ //# sourceMappingURL=20260726_000002_request_attempts.d.ts.map
@@ -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,4 @@
1
+ import type { Db } from '../types.js';
2
+ export declare function up(db: Db): void;
3
+ export declare function down(db: Db): void;
4
+ //# sourceMappingURL=20260726_000003_model_source_provenance.d.ts.map
@@ -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,4 @@
1
+ import type { Db } from '../types.js';
2
+ export declare function up(db: Db): void;
3
+ export declare function down(db: Db): void;
4
+ //# sourceMappingURL=20260726_000004_media_model_meta.d.ts.map
@@ -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,4 @@
1
+ import type { Db } from '../types.js';
2
+ export declare function up(db: Db): void;
3
+ export declare function down(db: Db): void;
4
+ //# sourceMappingURL=20260726_000005_request_served_model.d.ts.map
@@ -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,4 @@
1
+ import type { Db } from '../types.js';
2
+ export declare function up(db: Db): void;
3
+ export declare function down(db: Db): void;
4
+ //# sourceMappingURL=20260726_000006_attempt_error_summary.d.ts.map
@@ -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,4 @@
1
+ import type { Db } from '../types.js';
2
+ export declare function up(db: Db): void;
3
+ export declare function down(db: Db): void;
4
+ //# sourceMappingURL=20260727_000001_agent_compatibility.d.ts.map
@@ -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,4 @@
1
+ import type { Db } from '../types.js';
2
+ export declare function up(db: Db): void;
3
+ export declare function down(db: Db): void;
4
+ //# sourceMappingURL=20260729_000001_custom_model_endpoint_identity.d.ts.map
@@ -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"}