@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,537 @@
1
+ import { BaseProvider, providerHttpError } from './base.js';
2
+ import { extendedBodyParams, resolveMaxTokens } from '../lib/sampling-params.js';
3
+ import { rescueInlineToolCalls } from '../lib/tool-call-rescue.js';
4
+ import { extractThinkFromMessage } from '../lib/think-tags.js';
5
+ import { repairToolArguments, toolSchemaMap } from '../lib/tool-args.js';
6
+ import { invalidToolCallReasons, isToolArgumentValidationEnabled } from '../lib/tool-validate.js';
7
+ import { recordQuotaObservationsFromResponse } from '../services/provider-quota.js';
8
+ import { providerTimeoutMs } from '../lib/provider-timeout.js';
9
+ import { isAbortLikeError } from '../lib/error-classify.js';
10
+ import { contentToString } from '../lib/content.js';
11
+ import { bearerAuthHeader } from '../lib/credential.js';
12
+ // Shared with the media/embeddings custom-endpoint paths; re-exported so
13
+ // existing imports keep working (#1331).
14
+ export { isAnonymousCredential } from '../lib/credential.js';
15
+ /** Hosts that ARE Moonshot's OpenAI-compatible API (api.moonshot.ai,
16
+ * api.moonshot.cn, api.kimi.com and their subdomains). */
17
+ const MOONSHOT_HOST_SUFFIXES = ['moonshot.ai', 'moonshot.cn', 'kimi.com'];
18
+ /**
19
+ * Whether a base URL points at Moonshot's own API. Moonshot documents an
20
+ * assistant-message `partial: true` prefill flag that no other OpenAI-compatible
21
+ * upstream understands, and there is no built-in moonshot platform — Kimi
22
+ * models are otherwise served by Groq, Cloudflare, OpenRouter, Hugging Face,
23
+ * Ollama, ... — so the flag is gated on the endpoint host, never on the model
24
+ * id. Returns false for anything that does not parse as a URL. (#1038)
25
+ */
26
+ export function isMoonshotEndpoint(baseUrl) {
27
+ let host;
28
+ try {
29
+ host = new URL(baseUrl).hostname.toLowerCase();
30
+ }
31
+ catch {
32
+ return false;
33
+ }
34
+ return MOONSHOT_HOST_SUFFIXES.some((d) => host === d || host.endsWith(`.${d}`));
35
+ }
36
+ /**
37
+ * Some free-tier upstreams (notably Pollinations) answer HTTP 200 but put an
38
+ * out-of-credits / top-up notice in the assistant message instead of returning
39
+ * a 402. That reads as a successful completion, so the fallback loop never
40
+ * rotates off the dead key (#pollinations-inband). Detect the notice so callers
41
+ * can throw a payment-required error and fail over. Kept deliberately tight —
42
+ * requires the credits phrase AND a top-up/quest/Pollinations marker — so a
43
+ * genuine reply that merely discusses credits does not trip it.
44
+ */
45
+ export function inBandCreditsError(text) {
46
+ if (!text)
47
+ return null;
48
+ const t = text.toLowerCase();
49
+ const mentionsCredits = t.includes('enough credits') || t.includes('insufficient credit');
50
+ if (!mentionsCredits)
51
+ return null;
52
+ const topUpMarker = t.includes('top up') || t.includes('top-up') ||
53
+ t.includes('complete a quest') || t.includes('pollinations');
54
+ if (!topUpMarker)
55
+ return null;
56
+ return text.trim().slice(0, 200);
57
+ }
58
+ /**
59
+ * Generic provider for platforms that use an OpenAI-compatible API.
60
+ * Covers: Groq, Cerebras, NVIDIA NIM, Mistral, OpenRouter,
61
+ * GitHub Models, Fireworks AI.
62
+ */
63
+ export class OpenAICompatProvider extends BaseProvider {
64
+ platform;
65
+ name;
66
+ baseUrl;
67
+ extraHeaders;
68
+ validateUrl;
69
+ /** Per-provider HTTP timeout override. OpenAI-compatible gateways often buffer
70
+ * non-streaming responses until generation completes, and reasoning models can
71
+ * take >15s before first byte. Default 60000. */
72
+ timeoutMs;
73
+ /** NVIDIA NIM models reject any request that permits parallel tool calls with
74
+ * `400 This model only supports single tool-calls at once!`. When set, pin
75
+ * parallel_tool_calls to false whenever tools are in play. See issue #255. */
76
+ forceSingleToolCall;
77
+ /** True only for a custom endpoint whose host is Moonshot's own API; see
78
+ * isMoonshotEndpoint(). Gates the assistant `partial` prefill flag (#1038). */
79
+ forwardsPartial;
80
+ constructor(opts) {
81
+ super();
82
+ this.platform = opts.platform;
83
+ this.name = opts.name;
84
+ this.baseUrl = opts.baseUrl;
85
+ this.extraHeaders = opts.extraHeaders ?? {};
86
+ this.validateUrl = opts.validateUrl;
87
+ // PROVIDER_TIMEOUT_<PLATFORM> wins over the registration default (#547).
88
+ this.timeoutMs = providerTimeoutMs(opts.platform, opts.timeoutMs ?? 60_000);
89
+ this.keyless = opts.keyless ?? false;
90
+ this.forceSingleToolCall = opts.forceSingleToolCall ?? false;
91
+ this.forwardsPartial = opts.platform === 'custom' && isMoonshotEndpoint(opts.baseUrl);
92
+ }
93
+ /** Resolve the parallel_tool_calls flag to send upstream. For providers that
94
+ * only accept single tool calls (NVIDIA NIM), force `false` whenever tools are
95
+ * present so the model never tries to emit two at once and 400s; otherwise pass
96
+ * the caller's value through unchanged. See issue #255. */
97
+ resolveParallelToolCalls(options) {
98
+ if (this.forceSingleToolCall && options?.tools && options.tools.length > 0)
99
+ return false;
100
+ return options?.parallel_tool_calls;
101
+ }
102
+ /** Some providers (Groq especially) reject a model's tool call with a 400
103
+ * `tool_use_failed` when the model emitted it as inline DIALECT TEXT
104
+ * (`<function=NAME{...}</function>`, Hermes/Qwen XML, etc.) that the provider's
105
+ * own parser couldn't convert — but they hand back the raw text in
106
+ * `error.failed_generation`. Weaker tool models (e.g. groq llama-3.3-70b) hit
107
+ * this constantly, dead-ending an agent's whole turn even though the call is
108
+ * perfectly recoverable. Reuse the same inline-dialect rescue the proxy already
109
+ * applies to streamed text: parse `failed_generation` into structured
110
+ * tool_calls so the turn succeeds instead of failing over (or exhausting the
111
+ * chain when every enabled tool model behaves the same way). See issue #264. */
112
+ rescueFailedGeneration(errBody, options) {
113
+ const failed = errBody?.error?.failed_generation;
114
+ if (typeof failed !== 'string' || failed.length === 0)
115
+ return null;
116
+ const toolNames = new Set((options?.tools ?? []).map(t => t.function.name));
117
+ if (toolNames.size === 0)
118
+ return null;
119
+ const rescue = rescueInlineToolCalls(failed, toolNames);
120
+ if (!rescue.detected || !rescue.calls?.length)
121
+ return null;
122
+ const schemas = toolSchemaMap(options?.tools);
123
+ const rescued = rescue.calls.map((c, i) => ({
124
+ id: `call_rescued_${i + 1}`,
125
+ type: 'function',
126
+ function: { name: c.name, arguments: repairToolArguments(c.arguments, schemas.get(c.name)) },
127
+ }));
128
+ // Opt-in schema verdict. A rescue that produces schema-invalid arguments
129
+ // has turned the provider's 400 into a "success" the client cannot use, so
130
+ // decline it instead: the original upstream error propagates and the loop
131
+ // fails over exactly as it did before the rescue existed. Declining is the
132
+ // right shape here rather than throwing our own error — we are inside the
133
+ // provider's error path already.
134
+ if (isToolArgumentValidationEnabled() && invalidToolCallReasons(rescued, schemas).length > 0) {
135
+ return null;
136
+ }
137
+ return rescued;
138
+ }
139
+ /** Extract the useful text from an upstream error body. Most providers put it
140
+ * at error.message, but NVIDIA NIM answers RFC7807-style ({"title": ...,
141
+ * "detail": "Function id '...': DEGRADED function cannot be invoked"}) — the
142
+ * old error.message-only read collapsed that to "Bad Request", so neither the
143
+ * logs nor the error classifier could ever see the DEGRADED marker (#522). */
144
+ upstreamErrorText(errBody, res) {
145
+ const e = errBody;
146
+ if (typeof e?.error?.message === 'string' && e.error.message)
147
+ return e.error.message;
148
+ if (typeof e?.detail === 'string' && e.detail)
149
+ return e.detail;
150
+ if (typeof e?.title === 'string' && e.title)
151
+ return e.title;
152
+ return res.statusText;
153
+ }
154
+ /** Anonymous access sends NO Authorization header: keyless providers
155
+ * (Kilo's anonymous free tier) holding the stored `no-key` sentinel, and
156
+ * custom endpoints whose stored credential is the same sentinel with auth
157
+ * off. Sending `Bearer no-key` upstream is never right — upstreams read it
158
+ * as an invalid key. A REAL key saved on a keyless platform is used instead
159
+ * of the anonymous path, and a real key on a custom endpoint still gets its
160
+ * bearer (#1331): the presence of a credential decides at request time —
161
+ * Kilo, OVH and AI Horde all accept both modes per their docs. */
162
+ authHeader(apiKey) {
163
+ return bearerAuthHeader(apiKey);
164
+ }
165
+ /** Requesty's Leanstral route rejects greedy sampling when temperature=0.
166
+ * Omitting that value and supplying a neutral top_p keeps the caller's intent
167
+ * deterministic enough while using the provider's supported sampling path. */
168
+ samplingForModel(modelId, options) {
169
+ if (this.platform === 'requesty' &&
170
+ modelId === 'mistral/leanstral-1-5' &&
171
+ options?.temperature === 0) {
172
+ return { temperature: undefined, topP: options.top_p ?? 1 };
173
+ }
174
+ return { temperature: options?.temperature, topP: options?.top_p };
175
+ }
176
+ /**
177
+ * OpenAI-compatible endpoints that are strict about unknown nested fields:
178
+ * Mistral returns 422 for provider-private replay fields, Groq rejects
179
+ * assistant `reasoning_content` with 400 (verified in production, #1070),
180
+ * and Cerebras rejects it too — `property 'messages.N.assistant.
181
+ * reasoning_content' is unsupported` (confirmed via vercel/ai#15042 and
182
+ * opencode#26762, and by Cerebras' own docs, which use a `reasoning` field
183
+ * instead). Other gateways ignore the fields, so keep the OpenAI wire
184
+ * shape but strip our internal reasoning / thought-signature extensions
185
+ * before sending to these platforms.
186
+ */
187
+ static STRICT_PLATFORMS = new Set(['mistral', 'groq', 'cerebras']);
188
+ messagesForPlatform(messages, modelId) {
189
+ if (OpenAICompatProvider.STRICT_PLATFORMS.has(this.platform)) {
190
+ // Rebuild every message from a whitelist of keys, so `partial` and the
191
+ // reasoning extensions never reach these platforms.
192
+ return messages.map((m) => {
193
+ if (m.role === 'assistant') {
194
+ return {
195
+ role: m.role,
196
+ content: m.content,
197
+ ...(m.name ? { name: m.name } : {}),
198
+ ...(m.tool_calls && m.tool_calls.length > 0 ? {
199
+ tool_calls: m.tool_calls.map((tc) => ({
200
+ id: tc.id,
201
+ type: tc.type,
202
+ function: {
203
+ name: tc.function.name,
204
+ arguments: tc.function.arguments,
205
+ },
206
+ })),
207
+ } : {}),
208
+ };
209
+ }
210
+ if (m.role === 'tool') {
211
+ return {
212
+ role: m.role,
213
+ content: m.content,
214
+ ...(m.tool_call_id ? { tool_call_id: m.tool_call_id } : {}),
215
+ ...(m.name ? { name: m.name } : {}),
216
+ };
217
+ }
218
+ return {
219
+ role: m.role,
220
+ content: m.content,
221
+ ...(m.name ? { name: m.name } : {}),
222
+ };
223
+ });
224
+ }
225
+ // Moonshot's assistant `partial` prefill flag only survives to the wire
226
+ // when this provider IS Moonshot's own API (a custom endpoint on a
227
+ // Moonshot/Kimi host). Every other OpenAI-compatible gateway — including
228
+ // the ones that serve Kimi models, like Groq, Cloudflare or OpenRouter —
229
+ // gets it stripped, since strict upstreams 400/422 on unknown message keys
230
+ // and the rest would ignore it anyway. (#1038)
231
+ const sanitized = this.forwardsPartial ? messages : messages.map((m) => {
232
+ if (m.role === 'assistant' && m.partial !== undefined) {
233
+ const { partial: _partial, ...rest } = m;
234
+ return rest;
235
+ }
236
+ return m;
237
+ });
238
+ // Qwen3.8-Flash-Next accepts exactly one system message, and only at index
239
+ // zero. Profiles can prepend a gateway system prompt to a client's own
240
+ // system message, so coalesce every system instruction before dispatch
241
+ // instead of letting an otherwise valid request fail upstream.
242
+ if (this.platform === 'radeon' && modelId === 'Qwen3.8-Flash-Next') {
243
+ const systems = sanitized.filter(m => m.role === 'system');
244
+ if (systems.length === 1 && sanitized[0]?.role === 'system')
245
+ return sanitized;
246
+ const systemText = systems.map(m => contentToString(m.content)).filter(Boolean).join('\n\n');
247
+ const rest = sanitized.filter(m => m.role !== 'system');
248
+ return systemText ? [{ role: 'system', content: systemText }, ...rest] : rest;
249
+ }
250
+ return sanitized;
251
+ }
252
+ async chatCompletion(apiKey, messages, modelId, options, quotaContext) {
253
+ const sampling = this.samplingForModel(modelId, options);
254
+ const res = await this.fetchWithTimeout(`${this.baseUrl}/chat/completions`, {
255
+ method: 'POST',
256
+ headers: {
257
+ ...this.authHeader(apiKey),
258
+ 'Content-Type': 'application/json',
259
+ ...this.extraHeaders,
260
+ },
261
+ body: JSON.stringify({
262
+ model: modelId,
263
+ messages: this.messagesForPlatform(messages, modelId),
264
+ temperature: sampling.temperature,
265
+ max_tokens: resolveMaxTokens(this.platform, options?.max_tokens, options?.contextBudget),
266
+ top_p: sampling.topP,
267
+ stop: options?.stop,
268
+ tools: options?.tools,
269
+ tool_choice: options?.tool_choice,
270
+ parallel_tool_calls: this.resolveParallelToolCalls(options),
271
+ ...extendedBodyParams(this.platform, options),
272
+ }),
273
+ // 'request' bounds: the deadline covers the body read too, so a 200
274
+ // whose body hangs aborts instead of stalling res.json() forever.
275
+ }, options?.timeoutMs ?? this.timeoutMs, { signal: options?.signal, timeoutBounds: 'request' });
276
+ recordQuotaObservationsFromResponse(res, {
277
+ platform: this.platform,
278
+ keyId: quotaContext?.keyId,
279
+ providerAccountId: quotaContext?.providerAccountId,
280
+ modelId,
281
+ quotaPoolKey: quotaContext?.quotaPoolKey,
282
+ endpoint: 'chat/completions',
283
+ });
284
+ if (!res.ok) {
285
+ const err = await res.json().catch(() => ({}));
286
+ const rescued = this.rescueFailedGeneration(err, options);
287
+ if (rescued) {
288
+ console.log(`[${this.name}] Rescued ${rescued.length} inline tool call(s) from a ${res.status} tool_use_failed (#264)`);
289
+ const out = {
290
+ id: `chatcmpl-rescued-${Date.now()}`,
291
+ object: 'chat.completion',
292
+ created: Math.floor(Date.now() / 1000),
293
+ model: modelId,
294
+ choices: [{ index: 0, message: { role: 'assistant', content: null, tool_calls: rescued }, finish_reason: 'tool_calls' }],
295
+ usage: { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 },
296
+ };
297
+ out._routed_via = { platform: this.platform, model: modelId };
298
+ return out;
299
+ }
300
+ throw providerHttpError(res, `${this.name} API error ${res.status}: ${this.upstreamErrorText(err, res)}`, err);
301
+ }
302
+ let data;
303
+ let parseErr;
304
+ try {
305
+ data = await res.json();
306
+ }
307
+ catch (err) {
308
+ // An aborted body read (per-attempt deadline, client disconnect) is not
309
+ // a malformed body — rethrow so it keeps its abort classification
310
+ // instead of reading as a "non-OpenAI-compatible endpoint" below.
311
+ if (isAbortLikeError(err))
312
+ throw err;
313
+ parseErr = err;
314
+ data = undefined;
315
+ }
316
+ if (!data) {
317
+ // A 200 whose body isn't a single JSON document. Two distinct causes:
318
+ // (1) base URL points at a non-OpenAI-compatible API (Ollama's native
319
+ // NDJSON /api endpoints, llama.cpp's non-/v1 server, etc., #189).
320
+ // Typical signals: Content-Type is application/x-ndjson or
321
+ // text/event-stream; parser sees a SECOND JSON object after the
322
+ // first one ends ("Unexpected non-whitespace character after JSON
323
+ // at position <n> (line <n> column <n>)") where <n> sits inside
324
+ // the whitespace between two valid JSON documents.
325
+ // (2) the upstream connection was cut short mid-response — most often
326
+ // Cloudflare's 600-second edge idle keepalive dropping a slow
327
+ // free-tier queue (Kilo provider, NVIDIA nemotron / Poolside
328
+ // Laguna models on Cloudflare-fronted upstreams). Signals: body
329
+ // ends inside a string or mid-token, parser sees
330
+ // "Unexpected end of JSON input"; Content-Type is application/json
331
+ // (CF proxies it transparently); latency_ms ≈ 600000.
332
+ // Without this split every Cloudflare-truncated request was logged as
333
+ // "endpoint is not OpenAI-compatible", which sent operators chasing a
334
+ // base-URL config bug that doesn't exist (#430).
335
+ const msg = parseErr instanceof Error ? parseErr.message : String(parseErr);
336
+ const contentType = (res.headers?.get?.('content-type') ?? '').toLowerCase();
337
+ const looksLikeNdjson = /ndjson|text\/event-stream|x-ndjson/.test(contentType);
338
+ const looksLikeJson = /application\/json/.test(contentType);
339
+ // Truncation = body parsed cleanly until mid-stream EOF/mid-token garbage.
340
+ // Only attribute it to a CDN keepalive when the upstream claims to be
341
+ // sending JSON (Content-Type: application/json). Without that hint,
342
+ // the parser is more likely choking on NDJSON, native API output, or
343
+ // HTML — all "wrong endpoint" cases. This is the safe default.
344
+ const looksTruncated = /Unexpected end of JSON input/.test(msg) ||
345
+ (/Unexpected non-whitespace character after JSON at position/.test(msg) && looksLikeJson && !looksLikeNdjson);
346
+ if (looksTruncated) {
347
+ throw new Error(`${this.name} returned 200 but the response body was truncated mid-stream ` +
348
+ `(likely an idle-keepalive timeout at an upstream proxy or CDN, e.g. Cloudflare's ` +
349
+ `600s edge limit). Retry, or switch to a faster model/upstream.`);
350
+ }
351
+ throw new Error(`${this.name} returned 200 with a non-JSON body — the endpoint is not OpenAI-compatible. ` +
352
+ `Check the base URL (for Ollama use http://host:11434/v1, for llama.cpp/vLLM/LM Studio the /v1 path).`);
353
+ }
354
+ normalizeChoices(data);
355
+ // #pollinations-inband: a 200 whose body is really an out-of-credits notice
356
+ // must fail over, not be returned as the answer. The "402 ... insufficient
357
+ // credit" wording makes isPaymentRequiredError classify it as retryable and
358
+ // bench the key with the day-long payment-required cooldown.
359
+ const creditsNotice = inBandCreditsError((data.choices ?? []).map(c => contentToString(c.message?.content)).join('\n'));
360
+ if (creditsNotice) {
361
+ throw new Error(`${this.name} API error 402: insufficient credit (upstream returned 200 with an out-of-credits notice): ${creditsNotice}`);
362
+ }
363
+ data._routed_via = { platform: this.platform, model: modelId };
364
+ return data;
365
+ }
366
+ async *streamChatCompletion(apiKey, messages, modelId, options, quotaContext) {
367
+ const sampling = this.samplingForModel(modelId, options);
368
+ const res = await this.fetchWithTimeout(`${this.baseUrl}/chat/completions`, {
369
+ method: 'POST',
370
+ headers: {
371
+ ...this.authHeader(apiKey),
372
+ 'Content-Type': 'application/json',
373
+ ...this.extraHeaders,
374
+ },
375
+ body: JSON.stringify({
376
+ model: modelId,
377
+ messages: this.messagesForPlatform(messages, modelId),
378
+ temperature: sampling.temperature,
379
+ max_tokens: resolveMaxTokens(this.platform, options?.max_tokens, options?.contextBudget),
380
+ top_p: sampling.topP,
381
+ stop: options?.stop,
382
+ tools: options?.tools,
383
+ tool_choice: options?.tool_choice,
384
+ parallel_tool_calls: this.resolveParallelToolCalls(options),
385
+ ...extendedBodyParams(this.platform, options),
386
+ stream: true,
387
+ stream_options: options?.stream_options,
388
+ }),
389
+ // Default 'headers' bounds: the deadline dies at response headers, and
390
+ // the client signal + stall watchdog own the stream from there.
391
+ }, options?.timeoutMs ?? this.timeoutMs, { signal: options?.signal });
392
+ recordQuotaObservationsFromResponse(res, {
393
+ platform: this.platform,
394
+ keyId: quotaContext?.keyId,
395
+ providerAccountId: quotaContext?.providerAccountId,
396
+ modelId,
397
+ quotaPoolKey: quotaContext?.quotaPoolKey,
398
+ endpoint: 'chat/completions',
399
+ });
400
+ if (!res.ok) {
401
+ const err = await res.json().catch(() => ({}));
402
+ const rescued = this.rescueFailedGeneration(err, options);
403
+ if (rescued) {
404
+ console.log(`[${this.name}] Rescued ${rescued.length} inline tool call(s) from a ${res.status} tool_use_failed (stream, #264)`);
405
+ const base = { id: `chatcmpl-rescued-${Date.now()}`, object: 'chat.completion.chunk', created: Math.floor(Date.now() / 1000), model: modelId };
406
+ yield { ...base, choices: [{ index: 0, delta: { role: 'assistant' }, finish_reason: null }] };
407
+ yield { ...base, choices: [{ index: 0, delta: { tool_calls: rescued.map((c, i) => ({ index: i, ...c })) }, finish_reason: null }] };
408
+ yield { ...base, choices: [{ index: 0, delta: {}, finish_reason: 'tool_calls' }] };
409
+ return;
410
+ }
411
+ throw providerHttpError(res, `${this.name} API error ${res.status}: ${this.upstreamErrorText(err, res)}`, err);
412
+ }
413
+ // First-byte grace (#584): the same chat timeout that bounded the headers
414
+ // also budgets the first stream read — NIM-style providers send SSE
415
+ // headers instantly, then prefill long prompts for minutes.
416
+ yield* this.guardInBandCreditsError(this.readSseStream(res, { firstByteTimeoutMs: options?.timeoutMs ?? this.timeoutMs }));
417
+ }
418
+ /**
419
+ * #pollinations-inband: wrap a chat stream so an in-band out-of-credits notice
420
+ * (a 200 that streams the top-up message as content) fails over instead of
421
+ * being shown as the answer. Only the FIRST content-bearing chunk is inspected
422
+ * — a Pollinations credits notice arrives as a single canned message — so the
423
+ * stream is otherwise byte-for-byte unchanged: reasoning/role chunks pass
424
+ * straight through (first-token ttfb intact) and every chunk after the first
425
+ * content one is untouched. Throwing on that first content chunk happens before
426
+ * it reaches the proxy's commit point, so the fallback loop can still rotate.
427
+ */
428
+ async *guardInBandCreditsError(src) {
429
+ let sawContent = false;
430
+ for await (const chunk of src) {
431
+ if (!sawContent) {
432
+ const content = (chunk.choices ?? [])
433
+ .map(c => c.delta?.content)
434
+ .filter((c) => typeof c === 'string')
435
+ .join('');
436
+ if (content) {
437
+ sawContent = true;
438
+ const notice = inBandCreditsError(content);
439
+ if (notice) {
440
+ throw new Error(`${this.name} API error 402: insufficient credit (upstream streamed an out-of-credits notice): ${notice}`);
441
+ }
442
+ }
443
+ }
444
+ yield chunk;
445
+ }
446
+ }
447
+ /** This provider's OpenAI-style model catalog URL. */
448
+ get modelsUrl() {
449
+ return `${this.baseUrl}/models`;
450
+ }
451
+ /**
452
+ * GET a catalog-style endpoint with this provider's auth header, extra
453
+ * headers, proxy routing, timeout policy and quota bookkeeping. Shared by
454
+ * validateKey (which only reads the status) and custom-endpoint model
455
+ * discovery (#488), which also reads the body — one place owns how we talk
456
+ * to a provider's /models route.
457
+ *
458
+ * Note: transport errors (DNS / timeout / TLS) propagate to the caller.
459
+ * health.ts catches them and marks status='error' WITHOUT incrementing the
460
+ * consecutive-failure counter — only confirmed 401/403 disables a key.
461
+ */
462
+ fetchCatalogEndpoint(url, apiKey, quotaContext) {
463
+ // 30s (not 10s): some upstreams return a large /v1/models catalog that
464
+ // takes >10s from high-latency regions (e.g. NVIDIA NIM measured ~11.2s
465
+ // from India). A 10s cap aborted those calls and health.ts marked a
466
+ // perfectly good key status='error'. 30s aligns with chatCompletion's
467
+ // own slow-upstream allowance and costs nothing for fast providers.
468
+ return this.fetchWithTimeout(url, {
469
+ method: 'GET',
470
+ headers: {
471
+ ...this.authHeader(apiKey),
472
+ ...this.extraHeaders,
473
+ },
474
+ // 'request' bounds: a catalog body that hangs mid-transfer must not
475
+ // stall the health cycle past the deadline.
476
+ }, 30000, { timeoutBounds: 'request' }).then(res => {
477
+ recordQuotaObservationsFromResponse(res, {
478
+ platform: this.platform,
479
+ keyId: quotaContext?.keyId,
480
+ providerAccountId: quotaContext?.providerAccountId,
481
+ quotaPoolKey: quotaContext?.quotaPoolKey,
482
+ endpoint: 'models',
483
+ });
484
+ return res;
485
+ });
486
+ }
487
+ /** The raw `${baseUrl}/models` response, body unread. Used by custom-endpoint
488
+ * model discovery (#488); unlike validateKey it always hits /models, never a
489
+ * provider-specific validateUrl, because the caller wants the catalog. */
490
+ fetchModelCatalog(apiKey, quotaContext) {
491
+ return this.fetchCatalogEndpoint(this.modelsUrl, apiKey, quotaContext);
492
+ }
493
+ async validateKey(apiKey, quotaContext) {
494
+ const res = await this.fetchCatalogEndpoint(this.validateUrl ?? this.modelsUrl, apiKey, quotaContext);
495
+ return this.validationResult(res);
496
+ }
497
+ }
498
+ /**
499
+ * Some providers (Z.ai glm-4.5-flash, Cloudflare DeepSeek-R1-distill, others)
500
+ * return reasoning models' actual answer in `message.reasoning_content` with
501
+ * `message.content === ""`. Fold reasoning_content into content so OpenAI-
502
+ * compatible clients see a non-empty assistant message.
503
+ *
504
+ * Other providers (Mistral magistral-medium) return `message.content` as an
505
+ * array of text segments instead of a string. Flatten to string.
506
+ */
507
+ function normalizeChoices(data) {
508
+ for (const choice of data.choices ?? []) {
509
+ const msg = choice.message;
510
+ // Flatten array content (Mistral magistral) → join text segments.
511
+ if (Array.isArray(msg.content)) {
512
+ msg.content = msg.content
513
+ .map(seg => (typeof seg === 'string' ? seg : (seg.text ?? '')))
514
+ .join('');
515
+ }
516
+ // Inline `<think>…</think>` extraction (DeepSeek-style) BEFORE the fold
517
+ // below: a leading think block moves out of content into
518
+ // reasoning_content. Runs before the fold so a think-only message (no
519
+ // answer after the block) still folds back into content and is never
520
+ // returned as an empty assistant message.
521
+ extractThinkFromMessage(msg);
522
+ // Fold reasoning into content if content is empty AND there are no
523
+ // tool_calls. With tool_calls present, content=null is the correct OpenAI
524
+ // shape; folding reasoning would confuse clients that branch on content.
525
+ // Field naming varies by provider: Z.ai uses `reasoning_content`, Ollama
526
+ // uses `reasoning`. Prefer `reasoning_content` when both are set.
527
+ const hasToolCalls = Array.isArray(msg.tool_calls) && msg.tool_calls.length > 0;
528
+ if (!hasToolCalls && (msg.content === '' || msg.content == null)) {
529
+ const fold = (typeof msg.reasoning_content === 'string' && msg.reasoning_content.length > 0)
530
+ ? msg.reasoning_content
531
+ : (typeof msg.reasoning === 'string' && msg.reasoning.length > 0 ? msg.reasoning : null);
532
+ if (fold !== null)
533
+ msg.content = fold;
534
+ }
535
+ }
536
+ }
537
+ //# sourceMappingURL=openai-compat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-compat.js","sourceRoot":"","sources":["../../src/providers/openai-compat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { ChatCompletionChunk, ChatCompletionResponse, ChatMessage } from '@srouter/shared/types.js';
2
+ import { BaseProvider, type CompletionOptions, type KeyValidationResult } from './base.js';
3
+ import { type QuotaObservationContext } from '../services/provider-quota.js';
4
+ /**
5
+ * OpenCode Free � keyless provider that spoofs the official OpenCode CLI
6
+ * identity to access the zen free tier without a real API key.
7
+ *
8
+ * The upstream ALWAYS requires stream: true; stream: false or omitted
9
+ * results in 403 FreeTierError. Non-streaming callers get a synthetic
10
+ * single-chunk response assembled from the SSE stream.
11
+ */
12
+ export declare class OpenCodeFreeProvider extends BaseProvider {
13
+ readonly platform: "opencode-free";
14
+ readonly name = "OpenCode Free";
15
+ keyless: boolean;
16
+ private identityHeaders;
17
+ validateKey(_apiKey: string, _quotaContext?: QuotaObservationContext): Promise<KeyValidationResult>;
18
+ private buildBody;
19
+ private fetchChat;
20
+ chatCompletion(_apiKey: string, messages: ChatMessage[], modelId: string, options?: CompletionOptions, quotaContext?: QuotaObservationContext): Promise<ChatCompletionResponse>;
21
+ streamChatCompletion(_apiKey: string, messages: ChatMessage[], modelId: string, options?: CompletionOptions, quotaContext?: QuotaObservationContext): AsyncGenerator<ChatCompletionChunk>;
22
+ private assembleResponse;
23
+ }
24
+ //# sourceMappingURL=opencode-free.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-free.d.ts","sourceRoot":"","sources":["../../src/providers/opencode-free.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,sBAAsB,EACtB,WAAW,EAEZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,YAAY,EAEZ,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACzB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAuC,KAAK,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AA+FlH;;;;;;;GAOG;AACH,qBAAa,oBAAqB,SAAQ,YAAY;IACpD,QAAQ,CAAC,QAAQ,EAAG,eAAe,CAAU;IAC7C,QAAQ,CAAC,IAAI,mBAAmB;IACvB,OAAO,UAAQ;IAIxB,OAAO,CAAC,eAAe;IAgBjB,WAAW,CACf,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,uBAAuB,GACtC,OAAO,CAAC,mBAAmB,CAAC;IAiB/B,OAAO,CAAC,SAAS;YA2BH,SAAS;IAkCjB,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,iBAAiB,EAC3B,YAAY,CAAC,EAAE,uBAAuB,GACrC,OAAO,CAAC,sBAAsB,CAAC;IAsB3B,oBAAoB,CACzB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,iBAAiB,EAC3B,YAAY,CAAC,EAAE,uBAAuB,GACrC,cAAc,CAAC,mBAAmB,CAAC;IAkBtC,OAAO,CAAC,gBAAgB;CAoEzB"}