omniroute 3.7.2 → 3.7.3

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 (362) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/app-path-routes-manifest.json +15 -15
  3. package/app/.next/build-manifest.json +3 -3
  4. package/app/.next/prerender-manifest.json +3 -3
  5. package/app/.next/react-loadable-manifest.json +3 -3
  6. package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/audit/page_client-reference-manifest.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/batch/page_client-reference-manifest.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/cache/media/page.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/cache/media/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/cache/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/logs/page.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/memory/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  31. package/app/.next/server/app/(dashboard)/dashboard/search-tools/page_client-reference-manifest.js +1 -1
  32. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  33. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  34. package/app/.next/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  35. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  37. package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
  38. package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
  40. package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
  41. package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
  42. package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
  43. package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
  44. package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
  45. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  46. package/app/.next/server/app/_global-error.html +1 -1
  47. package/app/.next/server/app/_global-error.rsc +1 -1
  48. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  49. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  50. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  51. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  52. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  53. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  54. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  55. package/app/.next/server/app/api/acp/agents/route.js.nft.json +1 -1
  56. package/app/.next/server/app/api/auth/login/route.js.nft.json +1 -1
  57. package/app/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  58. package/app/.next/server/app/api/batches/route.js.nft.json +1 -1
  59. package/app/.next/server/app/api/cache/entries/route.js.nft.json +1 -1
  60. package/app/.next/server/app/api/cache/reasoning/route.js.nft.json +1 -1
  61. package/app/.next/server/app/api/cache/route.js.nft.json +1 -1
  62. package/app/.next/server/app/api/cache/stats/route.js.nft.json +1 -1
  63. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  64. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  65. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  66. package/app/.next/server/app/api/cli-tools/backups/route.js +2 -2
  67. package/app/.next/server/app/api/cli-tools/backups/route.js.nft.json +1 -1
  68. package/app/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
  69. package/app/.next/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  70. package/app/.next/server/app/api/cli-tools/cline-settings/route.js +1 -1
  71. package/app/.next/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  72. package/app/.next/server/app/api/cli-tools/codex-profiles/route.js +1 -1
  73. package/app/.next/server/app/api/cli-tools/codex-profiles/route.js.nft.json +1 -1
  74. package/app/.next/server/app/api/cli-tools/codex-settings/route.js +2 -2
  75. package/app/.next/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  76. package/app/.next/server/app/api/cli-tools/droid-settings/route.js +1 -1
  77. package/app/.next/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  78. package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route.js.nft.json +1 -1
  79. package/app/.next/server/app/api/cli-tools/keys/route.js.nft.json +1 -1
  80. package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +1 -1
  81. package/app/.next/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  82. package/app/.next/server/app/api/cli-tools/openclaw/auto-order/route.js.nft.json +1 -1
  83. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +1 -1
  84. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  85. package/app/.next/server/app/api/cli-tools/qwen-settings/route.js +1 -1
  86. package/app/.next/server/app/api/cli-tools/qwen-settings/route.js.nft.json +1 -1
  87. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route.js +2 -2
  88. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route.js.nft.json +1 -1
  89. package/app/.next/server/app/api/cli-tools/status/route.js +1 -1
  90. package/app/.next/server/app/api/cli-tools/status/route.js.nft.json +1 -1
  91. package/app/.next/server/app/api/cloud/auth/route.js.nft.json +1 -1
  92. package/app/.next/server/app/api/cloud/credentials/update/route.js.nft.json +1 -1
  93. package/app/.next/server/app/api/cloud/model/resolve/route.js.nft.json +1 -1
  94. package/app/.next/server/app/api/cloud/models/alias/route.js.nft.json +1 -1
  95. package/app/.next/server/app/api/combos/[id]/route.js +1 -1
  96. package/app/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
  97. package/app/.next/server/app/api/combos/builder/options/route.js.nft.json +1 -1
  98. package/app/.next/server/app/api/combos/metrics/route.js.nft.json +1 -1
  99. package/app/.next/server/app/api/combos/reorder/route.js.nft.json +1 -1
  100. package/app/.next/server/app/api/combos/route.js +1 -1
  101. package/app/.next/server/app/api/combos/route.js.nft.json +1 -1
  102. package/app/.next/server/app/api/combos/test/route.js +1 -1
  103. package/app/.next/server/app/api/combos/test/route.js.nft.json +1 -1
  104. package/app/.next/server/app/api/compliance/audit-log/route.js.nft.json +1 -1
  105. package/app/.next/server/app/api/db-backups/export/route.js.nft.json +1 -1
  106. package/app/.next/server/app/api/db-backups/exportAll/route.js.nft.json +1 -1
  107. package/app/.next/server/app/api/db-backups/import/route.js.nft.json +1 -1
  108. package/app/.next/server/app/api/db-backups/route.js.nft.json +1 -1
  109. package/app/.next/server/app/api/evals/[suiteId]/route.js.nft.json +1 -1
  110. package/app/.next/server/app/api/evals/route.js.nft.json +1 -1
  111. package/app/.next/server/app/api/evals/scorecard/route.js.nft.json +1 -1
  112. package/app/.next/server/app/api/evals/suites/[suiteId]/route.js.nft.json +1 -1
  113. package/app/.next/server/app/api/evals/suites/route.js.nft.json +1 -1
  114. package/app/.next/server/app/api/fallback/chains/route.js.nft.json +1 -1
  115. package/app/.next/server/app/api/files/[id]/content/route.js.nft.json +1 -1
  116. package/app/.next/server/app/api/files/route.js.nft.json +1 -1
  117. package/app/.next/server/app/api/init/route.js.nft.json +1 -1
  118. package/app/.next/server/app/api/internal/codex-responses-ws/route.js.nft.json +1 -1
  119. package/app/.next/server/app/api/keys/[id]/reveal/route.js.nft.json +1 -1
  120. package/app/.next/server/app/api/keys/[id]/route.js.nft.json +1 -1
  121. package/app/.next/server/app/api/keys/route.js.nft.json +1 -1
  122. package/app/.next/server/app/api/logs/active/route.js.nft.json +1 -1
  123. package/app/.next/server/app/api/logs/console/route.js.nft.json +1 -1
  124. package/app/.next/server/app/api/logs/detail/route.js.nft.json +1 -1
  125. package/app/.next/server/app/api/logs/export/route.js.nft.json +1 -1
  126. package/app/.next/server/app/api/mcp/sse/route.js.nft.json +1 -1
  127. package/app/.next/server/app/api/mcp/status/route.js.nft.json +1 -1
  128. package/app/.next/server/app/api/mcp/stream/route.js.nft.json +1 -1
  129. package/app/.next/server/app/api/memory/[id]/route.js.nft.json +1 -1
  130. package/app/.next/server/app/api/memory/health/route.js.nft.json +1 -1
  131. package/app/.next/server/app/api/memory/route.js.nft.json +1 -1
  132. package/app/.next/server/app/api/model-combo-mappings/[id]/route.js.nft.json +1 -1
  133. package/app/.next/server/app/api/model-combo-mappings/route.js.nft.json +1 -1
  134. package/app/.next/server/app/api/models/alias/route.js.nft.json +1 -1
  135. package/app/.next/server/app/api/models/catalog/route.js.nft.json +1 -1
  136. package/app/.next/server/app/api/models/openrouter-catalog/route.js.nft.json +1 -1
  137. package/app/.next/server/app/api/models/route.js.nft.json +1 -1
  138. package/app/.next/server/app/api/models/test/route.js.nft.json +1 -1
  139. package/app/.next/server/app/api/monitoring/health/route.js +1 -1
  140. package/app/.next/server/app/api/monitoring/health/route.js.nft.json +1 -1
  141. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  142. package/app/.next/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  143. package/app/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  144. package/app/.next/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  145. package/app/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  146. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  147. package/app/.next/server/app/api/openapi/try/route.js.nft.json +1 -1
  148. package/app/.next/server/app/api/policies/route.js.nft.json +1 -1
  149. package/app/.next/server/app/api/pricing/models/route.js.nft.json +1 -1
  150. package/app/.next/server/app/api/pricing/route.js.nft.json +1 -1
  151. package/app/.next/server/app/api/pricing/sync/route.js.nft.json +1 -1
  152. package/app/.next/server/app/api/provider-metrics/route.js.nft.json +1 -1
  153. package/app/.next/server/app/api/provider-models/route.js.nft.json +1 -1
  154. package/app/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  155. package/app/.next/server/app/api/provider-nodes/route.js.nft.json +1 -1
  156. package/app/.next/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  157. package/app/.next/server/app/api/providers/[id]/codex-auth/apply-local/route.js.nft.json +1 -1
  158. package/app/.next/server/app/api/providers/[id]/codex-auth/export/route.js.nft.json +1 -1
  159. package/app/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  160. package/app/.next/server/app/api/providers/[id]/refresh/route.js.nft.json +1 -1
  161. package/app/.next/server/app/api/providers/[id]/route.js.nft.json +1 -1
  162. package/app/.next/server/app/api/providers/[id]/sync-models/route.js.nft.json +1 -1
  163. package/app/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  164. package/app/.next/server/app/api/providers/client/route.js.nft.json +1 -1
  165. package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
  166. package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
  167. package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  168. package/app/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
  169. package/app/.next/server/app/api/providers/zed/import/route.js.nft.json +1 -1
  170. package/app/.next/server/app/api/rate-limits/route.js.nft.json +1 -1
  171. package/app/.next/server/app/api/resilience/reset/route.js.nft.json +1 -1
  172. package/app/.next/server/app/api/resilience/route.js.nft.json +1 -1
  173. package/app/.next/server/app/api/restart/route.js.nft.json +1 -1
  174. package/app/.next/server/app/api/search/providers/route.js.nft.json +1 -1
  175. package/app/.next/server/app/api/search/stats/route.js.nft.json +1 -1
  176. package/app/.next/server/app/api/settings/auto-disable-accounts/route.js.nft.json +1 -1
  177. package/app/.next/server/app/api/settings/background-degradation/route.js.nft.json +1 -1
  178. package/app/.next/server/app/api/settings/cache-config/route.js.nft.json +1 -1
  179. package/app/.next/server/app/api/settings/cache-metrics/route.js.nft.json +1 -1
  180. package/app/.next/server/app/api/settings/combo-defaults/route.js.nft.json +1 -1
  181. package/app/.next/server/app/api/settings/export-json/route.js.nft.json +1 -1
  182. package/app/.next/server/app/api/settings/favicon/route.js.nft.json +1 -1
  183. package/app/.next/server/app/api/settings/import-json/route.js.nft.json +1 -1
  184. package/app/.next/server/app/api/settings/ip-filter/route.js.nft.json +1 -1
  185. package/app/.next/server/app/api/settings/lkgp-cache/route.js.nft.json +1 -1
  186. package/app/.next/server/app/api/settings/memory/route.js.nft.json +1 -1
  187. package/app/.next/server/app/api/settings/model-aliases/route.js.nft.json +1 -1
  188. package/app/.next/server/app/api/settings/models-dev/route.js.nft.json +1 -1
  189. package/app/.next/server/app/api/settings/payload-rules/route.js.nft.json +1 -1
  190. package/app/.next/server/app/api/settings/proxies/assignments/route.js.nft.json +1 -1
  191. package/app/.next/server/app/api/settings/proxies/bulk-assign/route.js.nft.json +1 -1
  192. package/app/.next/server/app/api/settings/proxies/health/route.js.nft.json +1 -1
  193. package/app/.next/server/app/api/settings/proxies/migrate/route.js.nft.json +1 -1
  194. package/app/.next/server/app/api/settings/proxies/route.js.nft.json +1 -1
  195. package/app/.next/server/app/api/settings/proxy/route.js.nft.json +1 -1
  196. package/app/.next/server/app/api/settings/proxy/test/route.js.nft.json +1 -1
  197. package/app/.next/server/app/api/settings/purge-logs/route.js.nft.json +1 -1
  198. package/app/.next/server/app/api/settings/require-login/route.js.nft.json +1 -1
  199. package/app/.next/server/app/api/settings/route.js.nft.json +1 -1
  200. package/app/.next/server/app/api/settings/system-prompt/route.js.nft.json +1 -1
  201. package/app/.next/server/app/api/settings/task-routing/route.js.nft.json +1 -1
  202. package/app/.next/server/app/api/settings/thinking-budget/route.js.nft.json +1 -1
  203. package/app/.next/server/app/api/shutdown/route.js.nft.json +1 -1
  204. package/app/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
  205. package/app/.next/server/app/api/skills/executions/route.js.nft.json +1 -1
  206. package/app/.next/server/app/api/skills/install/route.js.nft.json +1 -1
  207. package/app/.next/server/app/api/skills/marketplace/install/route.js.nft.json +1 -1
  208. package/app/.next/server/app/api/skills/marketplace/route.js.nft.json +1 -1
  209. package/app/.next/server/app/api/skills/route.js.nft.json +1 -1
  210. package/app/.next/server/app/api/skills/skillssh/install/route.js.nft.json +1 -1
  211. package/app/.next/server/app/api/skills/skillssh/route.js.nft.json +1 -1
  212. package/app/.next/server/app/api/storage/health/route.js.nft.json +1 -1
  213. package/app/.next/server/app/api/sync/bundle/route.js.nft.json +1 -1
  214. package/app/.next/server/app/api/sync/cloud/route.js.nft.json +1 -1
  215. package/app/.next/server/app/api/sync/initialize/route.js.nft.json +1 -1
  216. package/app/.next/server/app/api/sync/tokens/[id]/route.js.nft.json +1 -1
  217. package/app/.next/server/app/api/sync/tokens/route.js.nft.json +1 -1
  218. package/app/.next/server/app/api/synced-available-models/route.js.nft.json +1 -1
  219. package/app/.next/server/app/api/system/env/repair/route.js.nft.json +1 -1
  220. package/app/.next/server/app/api/system/version/route.js +1 -1
  221. package/app/.next/server/app/api/system/version/route.js.nft.json +1 -1
  222. package/app/.next/server/app/api/token-health/route.js.nft.json +1 -1
  223. package/app/.next/server/app/api/translator/save/route.js.nft.json +1 -1
  224. package/app/.next/server/app/api/translator/send/route.js.nft.json +1 -1
  225. package/app/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
  226. package/app/.next/server/app/api/tunnels/cloudflared/route.js.nft.json +1 -1
  227. package/app/.next/server/app/api/tunnels/tailscale/check/route.js.nft.json +1 -1
  228. package/app/.next/server/app/api/tunnels/tailscale/disable/route.js.nft.json +1 -1
  229. package/app/.next/server/app/api/tunnels/tailscale/enable/route.js.nft.json +1 -1
  230. package/app/.next/server/app/api/tunnels/tailscale/install/route.js.nft.json +1 -1
  231. package/app/.next/server/app/api/tunnels/tailscale/login/route.js.nft.json +1 -1
  232. package/app/.next/server/app/api/tunnels/tailscale/route.js.nft.json +1 -1
  233. package/app/.next/server/app/api/tunnels/tailscale/start-daemon/route.js.nft.json +1 -1
  234. package/app/.next/server/app/api/upstream-proxy/[providerId]/route.js.nft.json +1 -1
  235. package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  236. package/app/.next/server/app/api/usage/analytics/route.js.nft.json +1 -1
  237. package/app/.next/server/app/api/usage/budget/route.js.nft.json +1 -1
  238. package/app/.next/server/app/api/usage/call-logs/[id]/route.js.nft.json +1 -1
  239. package/app/.next/server/app/api/usage/call-logs/route.js.nft.json +1 -1
  240. package/app/.next/server/app/api/usage/combo-health/route.js +1 -1
  241. package/app/.next/server/app/api/usage/combo-health/route.js.nft.json +1 -1
  242. package/app/.next/server/app/api/usage/history/route.js.nft.json +1 -1
  243. package/app/.next/server/app/api/usage/logs/route.js.nft.json +1 -1
  244. package/app/.next/server/app/api/usage/provider-limits/route.js.nft.json +1 -1
  245. package/app/.next/server/app/api/usage/proxy-logs/route.js.nft.json +1 -1
  246. package/app/.next/server/app/api/usage/quota/route.js.nft.json +1 -1
  247. package/app/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  248. package/app/.next/server/app/api/usage/utilization/route.js.nft.json +1 -1
  249. package/app/.next/server/app/api/v1/accounts/[id]/limits/route.js.nft.json +1 -1
  250. package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  251. package/app/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  252. package/app/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  253. package/app/.next/server/app/api/v1/batches/[id]/cancel/route.js.nft.json +1 -1
  254. package/app/.next/server/app/api/v1/batches/[id]/route.js.nft.json +1 -1
  255. package/app/.next/server/app/api/v1/batches/route.js.nft.json +1 -1
  256. package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  257. package/app/.next/server/app/api/v1/completions/route.js.nft.json +1 -1
  258. package/app/.next/server/app/api/v1/db/health/route.js.nft.json +1 -1
  259. package/app/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  260. package/app/.next/server/app/api/v1/files/[id]/content/route.js.nft.json +1 -1
  261. package/app/.next/server/app/api/v1/files/[id]/route.js.nft.json +1 -1
  262. package/app/.next/server/app/api/v1/files/route.js.nft.json +1 -1
  263. package/app/.next/server/app/api/v1/images/edits/route.js.nft.json +1 -1
  264. package/app/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  265. package/app/.next/server/app/api/v1/issues/report/route.js.nft.json +1 -1
  266. package/app/.next/server/app/api/v1/management/proxies/assignments/route.js.nft.json +1 -1
  267. package/app/.next/server/app/api/v1/management/proxies/bulk-assign/route.js.nft.json +1 -1
  268. package/app/.next/server/app/api/v1/management/proxies/health/route.js.nft.json +1 -1
  269. package/app/.next/server/app/api/v1/management/proxies/route.js.nft.json +1 -1
  270. package/app/.next/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  271. package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
  272. package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
  273. package/app/.next/server/app/api/v1/moderations/route.js.nft.json +1 -1
  274. package/app/.next/server/app/api/v1/music/generations/route.js.nft.json +1 -1
  275. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js.nft.json +1 -1
  276. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js.nft.json +1 -1
  277. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js.nft.json +1 -1
  278. package/app/.next/server/app/api/v1/providers/[provider]/limits/route.js.nft.json +1 -1
  279. package/app/.next/server/app/api/v1/quotas/check/route.js.nft.json +1 -1
  280. package/app/.next/server/app/api/v1/registered-keys/[id]/revoke/route.js.nft.json +1 -1
  281. package/app/.next/server/app/api/v1/registered-keys/[id]/route.js.nft.json +1 -1
  282. package/app/.next/server/app/api/v1/registered-keys/route.js.nft.json +1 -1
  283. package/app/.next/server/app/api/v1/rerank/route.js.nft.json +1 -1
  284. package/app/.next/server/app/api/v1/responses/[...path]/route.js.nft.json +1 -1
  285. package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
  286. package/app/.next/server/app/api/v1/route.js.nft.json +1 -1
  287. package/app/.next/server/app/api/v1/search/analytics/route.js.nft.json +1 -1
  288. package/app/.next/server/app/api/v1/search/route.js.nft.json +1 -1
  289. package/app/.next/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
  290. package/app/.next/server/app/api/v1/ws/route.js.nft.json +1 -1
  291. package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  292. package/app/.next/server/app/api/v1beta/models/route.js.nft.json +1 -1
  293. package/app/.next/server/app/api/version-manager/check-update/route.js +1 -1
  294. package/app/.next/server/app/api/version-manager/check-update/route.js.nft.json +1 -1
  295. package/app/.next/server/app/api/version-manager/install/route.js +1 -1
  296. package/app/.next/server/app/api/version-manager/install/route.js.nft.json +1 -1
  297. package/app/.next/server/app/api/version-manager/restart/route.js +1 -1
  298. package/app/.next/server/app/api/version-manager/restart/route.js.nft.json +1 -1
  299. package/app/.next/server/app/api/version-manager/start/route.js +1 -1
  300. package/app/.next/server/app/api/version-manager/start/route.js.nft.json +1 -1
  301. package/app/.next/server/app/api/version-manager/status/route.js +1 -1
  302. package/app/.next/server/app/api/version-manager/status/route.js.nft.json +1 -1
  303. package/app/.next/server/app/api/version-manager/stop/route.js +1 -1
  304. package/app/.next/server/app/api/version-manager/stop/route.js.nft.json +1 -1
  305. package/app/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  306. package/app/.next/server/app/api/webhooks/[id]/test/route.js.nft.json +1 -1
  307. package/app/.next/server/app/api/webhooks/route.js.nft.json +1 -1
  308. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  309. package/app/.next/server/app/docs/page.js +1 -1
  310. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  311. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  312. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  313. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  314. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  315. package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
  316. package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  317. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  318. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  319. package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
  320. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  321. package/app/.next/server/app-paths-manifest.json +15 -15
  322. package/app/.next/server/chunks/12767.js +1 -1
  323. package/app/.next/server/chunks/19849.js +1 -1
  324. package/app/.next/server/chunks/20236.js +1 -1
  325. package/app/.next/server/chunks/36040.js +4 -4
  326. package/app/.next/server/chunks/3832.js +1 -1
  327. package/app/.next/server/chunks/39548.js +1 -1
  328. package/app/.next/server/chunks/39859.js +1 -1
  329. package/app/.next/server/chunks/44088.js +1 -1
  330. package/app/.next/server/chunks/45415.js +1 -1
  331. package/app/.next/server/chunks/55672.js +1 -0
  332. package/app/.next/server/chunks/59092.js +2 -2
  333. package/app/.next/server/chunks/66094.js +1 -1
  334. package/app/.next/server/chunks/69105.js +1 -1
  335. package/app/.next/server/chunks/75225.js +1 -1
  336. package/app/.next/server/chunks/77044.js +1 -1
  337. package/app/.next/server/chunks/83648.js +1 -1
  338. package/app/.next/server/chunks/93831.js +4 -4
  339. package/app/.next/server/chunks/9679.js +3 -3
  340. package/app/.next/server/chunks/99168.js +2 -2
  341. package/app/.next/server/middleware-build-manifest.js +1 -1
  342. package/app/.next/server/middleware-react-loadable-manifest.js +1 -1
  343. package/app/.next/server/middleware.js +2 -2
  344. package/app/.next/server/pages/500.html +1 -1
  345. package/app/.next/server/server-reference-manifest.js +1 -1
  346. package/app/.next/server/server-reference-manifest.json +1 -1
  347. package/app/.next/static/chunks/{1999-fefe90c60eaa3b23.js → 1999-8cf58c233346f980.js} +1 -1
  348. package/app/.next/static/chunks/app/(dashboard)/dashboard/cache/media/page-ad8091c5b7536b7a.js +1 -0
  349. package/app/.next/static/chunks/app/(dashboard)/dashboard/logs/page-ccc65d29bbb19d51.js +1 -0
  350. package/app/.next/static/chunks/app/{layout-3e3b043f9b52bb80.js → layout-fbebdd84c4996160.js} +1 -1
  351. package/app/.next/static/chunks/{webpack-117eac5998a94c69.js → webpack-ea5983ad4b51e934.js} +1 -1
  352. package/app/.next/static/css/7caa8a6802c65def.css +1 -0
  353. package/app/docs/openapi.yaml +1 -1
  354. package/app/open-sse/mcp-server/server.js +15 -1
  355. package/app/package.json +1 -1
  356. package/package.json +1 -1
  357. package/app/.next/server/chunks/80812.js +0 -1
  358. package/app/.next/static/chunks/app/(dashboard)/dashboard/cache/media/page-f0289617f824bbf2.js +0 -1
  359. package/app/.next/static/chunks/app/(dashboard)/dashboard/logs/page-f24fde8a3f731108.js +0 -1
  360. package/app/.next/static/css/8d36e4e21725013b.css +0 -1
  361. /package/app/.next/static/{yvJ6rPtn4eb7sOBUCBGrF → qmeYzerLcoUXZ06JXgit3}/_buildManifest.js +0 -0
  362. /package/app/.next/static/{yvJ6rPtn4eb7sOBUCBGrF → qmeYzerLcoUXZ06JXgit3}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=93831,exports.ids=[93831],exports.modules={68274:(a,b,c)=>{c.d(b,{Gp:()=>l,IZ:()=>k,UJ:()=>j,g8:()=>e});var d=c(77042);let e={AUTO:"auto",PASSTHROUGH:"passthrough",CUSTOM:"custom",ADAPTIVE:"adaptive"},f={none:0,low:1024,medium:10240,high:131072,max:131072,xhigh:131072},g={none:0,low:4096,medium:8192,high:24576,max:131072,xhigh:131072},h={mode:e.PASSTHROUGH,customBudget:10240,effortLevel:"medium"},i={...h};function j(a){i={...h,...a}}function k(){return{...i}}function l(a,b=null){let c=b||i;if(!a||"object"!=typeof a)return a;let h="string"==typeof a.model?a.model:"";if(h&&!(0,d.t5)(h))return m(a);let j=function(a){if(!a||"object"!=typeof a)return a;let b={...a},c=b.thinkingLevel||b.thinking_level;if("string"==typeof c&&void 0!==g[c.toLowerCase()]){let a=g[c.toLowerCase()],e=(0,d.kG)(b.model||"",a);b.thinking={type:e>0?"enabled":"disabled",budget_tokens:e},delete b.thinkingLevel,delete b.thinking_level}let e=b.generationConfig?.thinkingConfig?.thinkingLevel||b.generationConfig?.thinking_config?.thinkingLevel;if("string"==typeof e&&void 0!==g[e.toLowerCase()]){let a=g[e.toLowerCase()],c=(0,d.kG)(b.model||"",a);b.generationConfig={...b.generationConfig,thinkingConfig:{...b.generationConfig.thinkingConfig,thinkingBudget:c}},b.generationConfig.thinkingConfig&&delete b.generationConfig.thinkingConfig.thinkingLevel,b.generationConfig.thinking_config&&delete b.generationConfig.thinking_config}return b}(a);switch(j=function(a){if(!a||"object"!=typeof a)return a;let b=a.model||"";if(!b.endsWith("-thinking")||a.thinking)return a;let c={...a};return c.thinking={type:"enabled",budget_tokens:(0,d.d)(b)||f.medium},c}(j),c.mode){case e.AUTO:return m(j);case e.PASSTHROUGH:return j;case e.CUSTOM:return n(j,c.customBudget);case e.ADAPTIVE:return function(a,b){let c=a.messages||a.input||[],e=c.length,g=(a.tools||[]).length,h=0;for(let a=c.length-1;a>=0;a--){let b=c[a];if("user"===b.role){h="string"==typeof b.content?b.content.length:JSON.stringify(b.content||"").length;break}}let i=1;e>10&&(i+=.5),g>3&&(i+=.5),h>2e3&&(i+=.3);let j=f[b.effortLevel]||(0,d.d)(a.model||"")||f.medium,k=(0,d.kG)(a.model||"",Math.ceil(j*i));return n(a,k)}(j,c);default:return j}}function m(a){let b={...a};return delete b.thinking,delete b.reasoning_effort,delete b.reasoning,b.generationConfig&&(b.generationConfig={...b.generationConfig},delete b.generationConfig.thinking_config,delete b.generationConfig.thinkingConfig),b}function n(a,b){let c,e,f={...a};return(f.thinking||(c=f.model||"",!0===(e=(0,d.w8)(c)).supportsThinking||!1!==e.supportsThinking&&(c.includes("claude")||c.includes("o1")||c.includes("o3")||c.includes("o4")||c.includes("gemini")||c.endsWith("-thinking")||c.includes("thinking"))))&&(f.thinking={type:b>0?"enabled":"disabled",budget_tokens:b}),(void 0!==f.reasoning_effort||void 0!==f.reasoning)&&(b<=0?(delete f.reasoning_effort,delete f.reasoning):b<=1024?f.reasoning_effort="low":b<=10240?f.reasoning_effort="medium":b<131072?f.reasoning_effort="high":f.reasoning_effort="max"),(f.generationConfig?.thinking_config||f.generationConfig?.thinkingConfig)&&(f.generationConfig={...f.generationConfig,thinking_config:{thinking_budget:b}}),f}},93831:(a,b,c)=>{let d;c.d(b,{T1:()=>D,kn:()=>t,t6:()=>q,IM:()=>r,H5:()=>s});var e=c(88791),f=c(39859);let g=`You are Codex, based on GPT-5. You are running as a coding agent in the Codex CLI on a user's computer.
1
+ "use strict";exports.id=93831,exports.ids=[93831],exports.modules={68274:(a,b,c)=>{c.d(b,{Gp:()=>l,IZ:()=>k,UJ:()=>j,g8:()=>e});var d=c(77042);let e={AUTO:"auto",PASSTHROUGH:"passthrough",CUSTOM:"custom",ADAPTIVE:"adaptive"},f={none:0,low:1024,medium:10240,high:131072,max:131072,xhigh:131072},g={none:0,low:4096,medium:8192,high:24576,max:131072,xhigh:131072},h={mode:e.PASSTHROUGH,customBudget:10240,effortLevel:"medium"},i={...h};function j(a){i={...h,...a}}function k(){return{...i}}function l(a,b=null){let c=b||i;if(!a||"object"!=typeof a)return a;let h="string"==typeof a.model?a.model:"";if(h&&!(0,d.t5)(h))return m(a);let j=function(a){if(!a||"object"!=typeof a)return a;let b={...a},c=b.thinkingLevel||b.thinking_level;if("string"==typeof c&&void 0!==g[c.toLowerCase()]){let a=g[c.toLowerCase()],e=(0,d.kG)(b.model||"",a);b.thinking={type:e>0?"enabled":"disabled",budget_tokens:e},delete b.thinkingLevel,delete b.thinking_level}let e=b.generationConfig?.thinkingConfig?.thinkingLevel||b.generationConfig?.thinking_config?.thinkingLevel;if("string"==typeof e&&void 0!==g[e.toLowerCase()]){let a=g[e.toLowerCase()],c=(0,d.kG)(b.model||"",a);b.generationConfig={...b.generationConfig,thinkingConfig:{...b.generationConfig.thinkingConfig,thinkingBudget:c}},b.generationConfig.thinkingConfig&&delete b.generationConfig.thinkingConfig.thinkingLevel,b.generationConfig.thinking_config&&delete b.generationConfig.thinking_config}return b}(a);switch(j=function(a){if(!a||"object"!=typeof a)return a;let b=a.model||"";if(!b.endsWith("-thinking")||a.thinking)return a;let c={...a};return c.thinking={type:"enabled",budget_tokens:(0,d.d)(b)||f.medium},c}(j),c.mode){case e.AUTO:return m(j);case e.PASSTHROUGH:return j;case e.CUSTOM:return n(j,c.customBudget);case e.ADAPTIVE:return function(a,b){let c=a.messages||a.input||[],e=c.length,g=(a.tools||[]).length,h=0;for(let a=c.length-1;a>=0;a--){let b=c[a];if("user"===b.role){h="string"==typeof b.content?b.content.length:JSON.stringify(b.content||"").length;break}}let i=1;e>10&&(i+=.5),g>3&&(i+=.5),h>2e3&&(i+=.3);let j=f[b.effortLevel]||(0,d.d)(a.model||"")||f.medium,k=(0,d.kG)(a.model||"",Math.ceil(j*i));return n(a,k)}(j,c);default:return j}}function m(a){let b={...a};return delete b.thinking,delete b.reasoning_effort,delete b.reasoning,b.generationConfig&&(b.generationConfig={...b.generationConfig},delete b.generationConfig.thinking_config,delete b.generationConfig.thinkingConfig),b}function n(a,b){let c,e,f={...a};return(f.thinking||(c=f.model||"",!0===(e=(0,d.w8)(c)).supportsThinking||!1!==e.supportsThinking&&(c.includes("claude")||c.includes("o1")||c.includes("o3")||c.includes("o4")||c.includes("gemini")||c.endsWith("-thinking")||c.includes("thinking"))))&&(f.thinking={type:b>0?"enabled":"disabled",budget_tokens:b}),(void 0!==f.reasoning_effort||void 0!==f.reasoning)&&(b<=0?(delete f.reasoning_effort,delete f.reasoning):b<=1024?f.reasoning_effort="low":b<=10240?f.reasoning_effort="medium":b<131072?f.reasoning_effort="high":f.reasoning_effort="max"),(f.generationConfig?.thinking_config||f.generationConfig?.thinkingConfig)&&(f.generationConfig={...f.generationConfig,thinking_config:{thinking_budget:b}}),f}},93831:(a,b,c)=>{let d;c.d(b,{T1:()=>E,kn:()=>t,t6:()=>q,IM:()=>r,H5:()=>s});var e=c(88791),f=c(39859);let g=`You are Codex, based on GPT-5. You are running as a coding agent in the Codex CLI on a user's computer.
2
2
 
3
3
  ## General
4
4
 
@@ -114,10 +114,10 @@ You are producing plain text that will later be styled by the CLI. Follow these
114
114
  * Optionally include line/column (1‑based): :line[:column] or #Lline[Ccolumn] (column defaults to 1).
115
115
  * Do not use URIs like file://, vscode://, or https://.
116
116
  * Do not provide range of lines
117
- * Examples: src/app.ts, src/app.ts:42, b/server/index.js#L10, C:\\repo\\project\\main.rs:12:5`;var h=c(60293),i=c(21832),j=c(87068),k=c(68274),l=c(95982);let m=null,n=!1;function o(){if(void 0!==d)return d;if(n)return m;n=!0;try{let a=c(3725);m="function"==typeof a.websocket?a.websocket:null}catch{m=null}return m}let p=[{pattern:"codex-spark",scope:"spark"},{pattern:"spark",scope:"spark"},{pattern:"codex",scope:"codex"},{pattern:"gpt-5",scope:"codex"}];function q(a){let b=a.toLowerCase();for(let{pattern:a,scope:c}of p)if(b.includes(a))return c;return"codex"}function r(a,b){return`${a}:${q(b)}`}function s(a){let b=a.get("x-codex-5h-usage"),c=a.get("x-codex-5h-limit"),d=a.get("x-codex-5h-reset-at"),e=a.get("x-codex-7d-usage"),f=a.get("x-codex-7d-limit"),g=a.get("x-codex-7d-reset-at");return b||c||d||e||f||g?{usage5h:b?parseFloat(b):0,limit5h:c?parseFloat(c):1/0,resetAt5h:d??null,usage7d:e?parseFloat(e):0,limit7d:f?parseFloat(f):1/0,resetAt7d:g??null}:null}function t(a,b=.95){let c=Date.now(),d=a.limit7d>0&&Number.isFinite(a.limit7d)?a.usage7d/a.limit7d:0,e=a.limit5h>0&&Number.isFinite(a.limit5h)?a.usage5h/a.limit5h:0;if(d>=b&&a.resetAt7d){let b=new Date(a.resetAt7d).getTime();if(b>c)return{cooldownMs:b-c,window:"7d"}}if(e>=b&&a.resetAt5h){let b=new Date(a.resetAt5h).getTime();if(b>c)return{cooldownMs:b-c,window:"5h"}}return{cooldownMs:0,window:"none"}}let u=["none","low","medium","high","xhigh"],v="wss://chatgpt.com/backend-api/codex/responses";function w(a){let b="string"==typeof a?a:"";for(let a of u)if(b.endsWith(`-${a}`))return{baseModel:b.slice(0,-`-${a}`.length),effort:a};return{baseModel:b,effort:null}}function x(a){let b=String(a||"").replace(/\/+$/,"").match(/(?:^|\/)responses(?:(\/.*))?$/i);return b?b[1]||"":null}function y(a){return x(a)?.toLowerCase()==="/compact"}let z={"gpt-5.3-codex":"xhigh","gpt-5.2-codex":"xhigh","gpt-5.1-codex-max":"xhigh","gpt-5-mini":"high","gpt-5.1-mini":"high","gpt-4.1-mini":"high"};function A(a,b){let c=z[a]??"xhigh";return u.indexOf(b)>u.indexOf(c)?(console.debug(`[Codex] clampEffort: "${b}" → "${c}" (model: ${a})`),c):b}function B(a){if("string"==typeof a)return a.trim().toLowerCase()||void 0}function C(a){if("number"==typeof a&&Number.isInteger(a)&&a>=400&&a<=599)return a;if("string"==typeof a&&/^\d{3}$/.test(a.trim())){let b=Number(a.trim());return b>=400&&b<=599?b:null}return null}class D extends f.Hv{constructor(){super("codex",h.xq.codex)}async execute(a){var b;let c;if(a.model,c=(b=a.credentials)&&"object"==typeof b?b.providerSpecificData:null,!(c?.codexTransport==="websocket"&&o()))return super.execute(a);let d=function(a){let b={};for(let[c,d]of Object.entries(a)){let a=c.toLowerCase();"host"!==a&&"connection"!==a&&"upgrade"!==a&&"sec-websocket-key"!==a&&"sec-websocket-version"!==a&&"sec-websocket-extensions"!==a&&(b[c]=d)}return b.Origin="https://chatgpt.com",b}(this.buildHeaders(a.credentials,!0));(0,f._F)(d,a.upstreamExtraHeaders);let e=await this.transformRequest(a.model,a.body,!0,a.credentials);e.model=w(e.model||a.model).baseModel,delete e.stream,delete e.stream_options;let g=JSON.stringify({type:"response.create",...e}),h=o();if(!h)return{response:new Response(JSON.stringify({error:{code:"wreq_unavailable",message:"Codex WebSocket transport unavailable: wreq-js native module is missing for this platform"}}),{status:503,headers:{"Content-Type":"application/json",...l.$}}),url:v,headers:d,transformedBody:e};let i=new TextEncoder,j=!1,k=null,m=null,n=null,p=({reason:b,emitDone:c=!0,closeController:d=!0,closeSocket:e=!0})=>{if(j)return;j=!0,n&&(a.signal?.removeEventListener("abort",n),n=null),e&&(a=>{try{k?.close(1e3,a)}catch{}})(b);let f=m;if(f&&d){if(c)try{f.enqueue(i.encode("data: [DONE]\n\n"))}catch{}try{f.close()}catch{}}},q=(a,b)=>{if(j)return;let c=m,d=JSON.stringify({type:"response.failed",response:{id:null,status:"failed",error:{code:a,message:b}}});try{c?.enqueue(i.encode(`event: response.failed
117
+ * Examples: src/app.ts, src/app.ts:42, b/server/index.js#L10, C:\\repo\\project\\main.rs:12:5`;var h=c(60293),i=c(21832),j=c(87068),k=c(68274),l=c(95982);let m=null,n=!1;function o(){if(void 0!==d)return d;if(n)return m;n=!0;try{let a=c(3725);m="function"==typeof a.websocket?a.websocket:null}catch{m=null}return m}let p=[{pattern:"codex-spark",scope:"spark"},{pattern:"spark",scope:"spark"},{pattern:"codex",scope:"codex"},{pattern:"gpt-5",scope:"codex"}];function q(a){let b=a.toLowerCase();for(let{pattern:a,scope:c}of p)if(b.includes(a))return c;return"codex"}function r(a,b){return`${a}:${q(b)}`}function s(a){let b=a.get("x-codex-5h-usage"),c=a.get("x-codex-5h-limit"),d=a.get("x-codex-5h-reset-at"),e=a.get("x-codex-7d-usage"),f=a.get("x-codex-7d-limit"),g=a.get("x-codex-7d-reset-at");return b||c||d||e||f||g?{usage5h:b?parseFloat(b):0,limit5h:c?parseFloat(c):1/0,resetAt5h:d??null,usage7d:e?parseFloat(e):0,limit7d:f?parseFloat(f):1/0,resetAt7d:g??null}:null}function t(a,b=.95){let c=Date.now(),d=a.limit7d>0&&Number.isFinite(a.limit7d)?a.usage7d/a.limit7d:0,e=a.limit5h>0&&Number.isFinite(a.limit5h)?a.usage5h/a.limit5h:0;if(d>=b&&a.resetAt7d){let b=new Date(a.resetAt7d).getTime();if(b>c)return{cooldownMs:b-c,window:"7d"}}if(e>=b&&a.resetAt5h){let b=new Date(a.resetAt5h).getTime();if(b>c)return{cooldownMs:b-c,window:"5h"}}return{cooldownMs:0,window:"none"}}let u=["none","low","medium","high","xhigh"],v="wss://chatgpt.com/backend-api/codex/responses";function w(a){let b="string"==typeof a?a:"";for(let a of u)if(b.endsWith(`-${a}`))return{baseModel:b.slice(0,-`-${a}`.length),effort:a};return{baseModel:b,effort:null}}let x=new Set(["image_generation","web_search","web_search_preview","file_search","computer","computer_use_preview","code_interpreter","mcp","local_shell"]);function y(a){let b=String(a||"").replace(/\/+$/,"").match(/(?:^|\/)responses(?:(\/.*))?$/i);return b?b[1]||"":null}function z(a){return y(a)?.toLowerCase()==="/compact"}let A={"gpt-5.3-codex":"xhigh","gpt-5.2-codex":"xhigh","gpt-5.1-codex-max":"xhigh","gpt-5-mini":"high","gpt-5.1-mini":"high","gpt-4.1-mini":"high"};function B(a,b){let c=A[a]??"xhigh";return u.indexOf(b)>u.indexOf(c)?(console.debug(`[Codex] clampEffort: "${b}" → "${c}" (model: ${a})`),c):b}function C(a){if("string"==typeof a)return a.trim().toLowerCase()||void 0}function D(a){if("number"==typeof a&&Number.isInteger(a)&&a>=400&&a<=599)return a;if("string"==typeof a&&/^\d{3}$/.test(a.trim())){let b=Number(a.trim());return b>=400&&b<=599?b:null}return null}class E extends f.Hv{constructor(){super("codex",h.xq.codex)}async execute(a){var b;let c;if(a.model,c=(b=a.credentials)&&"object"==typeof b?b.providerSpecificData:null,!(c?.codexTransport==="websocket"&&o()))return super.execute(a);let d=function(a){let b={};for(let[c,d]of Object.entries(a)){let a=c.toLowerCase();"host"!==a&&"connection"!==a&&"upgrade"!==a&&"sec-websocket-key"!==a&&"sec-websocket-version"!==a&&"sec-websocket-extensions"!==a&&(b[c]=d)}return b.Origin="https://chatgpt.com",b}(this.buildHeaders(a.credentials,!0));(0,f._F)(d,a.upstreamExtraHeaders);let e=await this.transformRequest(a.model,a.body,!0,a.credentials);e.model=w(e.model||a.model).baseModel,delete e.stream,delete e.stream_options;let g=JSON.stringify({type:"response.create",...e}),h=o();if(!h)return{response:new Response(JSON.stringify({error:{code:"wreq_unavailable",message:"Codex WebSocket transport unavailable: wreq-js native module is missing for this platform"}}),{status:503,headers:{"Content-Type":"application/json",...l.$}}),url:v,headers:d,transformedBody:e};let i=new TextEncoder,j=!1,k=null,m=null,n=null,p=({reason:b,emitDone:c=!0,closeController:d=!0,closeSocket:e=!0})=>{if(j)return;j=!0,n&&(a.signal?.removeEventListener("abort",n),n=null),e&&(a=>{try{k?.close(1e3,a)}catch{}})(b);let f=m;if(f&&d){if(c)try{f.enqueue(i.encode("data: [DONE]\n\n"))}catch{}try{f.close()}catch{}}},q=(a,b)=>{if(j)return;let c=m,d=JSON.stringify({type:"response.failed",response:{id:null,status:"failed",error:{code:a,message:b}}});try{c?.enqueue(i.encode(`event: response.failed
118
118
  data: ${d}
119
119
 
120
- `))}catch{}p({reason:"upstream_failed"})},r=new ReadableStream({async start(b){m=b,n=()=>{p({reason:"client_aborted"})},a.signal?.addEventListener("abort",n,{once:!0});try{if(k=await h(v.startsWith("wss://")||v.startsWith("ws://")?v:v.startsWith("https://")?`wss://${v.slice(8)}`:v.startsWith("http://")?`ws://${v.slice(7)}`:v,{browser:"chrome_142",os:"windows",headers:d}),j)return;if(a.signal?.aborted)return void p({reason:"client_aborted"});k.onmessage=a=>{if(j)return;let c="string"==typeof a.data?a.data:Buffer.from(a.data).toString("utf8"),d=function(a){let b="message",c=a,d=!1;try{let e=JSON.parse(a);if(e&&"string"==typeof e.type&&e.type.trim()){if(b=e.type.trim(),"error"===b||"response.failed"===b){let a,d,f,g,h,i,j,k,l=(a=e.response&&"object"==typeof e.response&&!Array.isArray(e.response)?e.response:null,d=a?.error&&"object"==typeof a.error&&!Array.isArray(a.error)?a.error:e.error&&"object"==typeof e.error&&!Array.isArray(e.error)?e.error:e,f="string"==typeof d.code?d.code:"string"==typeof d.type?d.type:"upstream_error",g="string"==typeof d.type?d.type:"",h="string"==typeof d.message&&d.message.trim()?d.message:"Codex upstream error",i={code:f,message:h},k=C(e.status_code)??C(e.status)??C(a?.status_code)??C(a?.status)??C(d.status_code)??C(d.status)??((j=`${f} ${g} ${h}`.toLowerCase()).includes("usage_limit_reached")||j.includes("rate_limit")||j.includes("rate limit")||j.includes("quota")||j.includes("too many requests")||j.includes("limit has been reached")||j.includes("limit reached")?429:null),g&&(i.type=g),null!==k&&(i.status_code=k),{type:"response.failed",response:{id:"string"==typeof a?.id?a.id:null,status:"failed",error:i}});c=JSON.stringify(l),b="response.failed"}d="response.completed"===b||"response.failed"===b}}catch{}return{sse:`event: ${b}
120
+ `))}catch{}p({reason:"upstream_failed"})},r=new ReadableStream({async start(b){m=b,n=()=>{p({reason:"client_aborted"})},a.signal?.addEventListener("abort",n,{once:!0});try{if(k=await h(v.startsWith("wss://")||v.startsWith("ws://")?v:v.startsWith("https://")?`wss://${v.slice(8)}`:v.startsWith("http://")?`ws://${v.slice(7)}`:v,{browser:"chrome_142",os:"windows",headers:d}),j)return;if(a.signal?.aborted)return void p({reason:"client_aborted"});k.onmessage=a=>{if(j)return;let c="string"==typeof a.data?a.data:Buffer.from(a.data).toString("utf8"),d=function(a){let b="message",c=a,d=!1;try{let e=JSON.parse(a);if(e&&"string"==typeof e.type&&e.type.trim()){if(b=e.type.trim(),"error"===b||"response.failed"===b){let a,d,f,g,h,i,j,k,l=(a=e.response&&"object"==typeof e.response&&!Array.isArray(e.response)?e.response:null,d=a?.error&&"object"==typeof a.error&&!Array.isArray(a.error)?a.error:e.error&&"object"==typeof e.error&&!Array.isArray(e.error)?e.error:e,f="string"==typeof d.code?d.code:"string"==typeof d.type?d.type:"upstream_error",g="string"==typeof d.type?d.type:"",h="string"==typeof d.message&&d.message.trim()?d.message:"Codex upstream error",i={code:f,message:h},k=D(e.status_code)??D(e.status)??D(a?.status_code)??D(a?.status)??D(d.status_code)??D(d.status)??((j=`${f} ${g} ${h}`.toLowerCase()).includes("usage_limit_reached")||j.includes("rate_limit")||j.includes("rate limit")||j.includes("quota")||j.includes("too many requests")||j.includes("limit has been reached")||j.includes("limit reached")?429:null),g&&(i.type=g),null!==k&&(i.status_code=k),{type:"response.failed",response:{id:"string"==typeof a?.id?a.id:null,status:"failed",error:i}});c=JSON.stringify(l),b="response.failed"}d="response.completed"===b||"response.failed"===b}}catch{}return{sse:`event: ${b}
121
121
  data: ${c}
122
122
 
123
- `,terminal:d}}(c);if(!j){try{b.enqueue(i.encode(d.sse))}catch{p({reason:"downstream_closed",emitDone:!1,closeController:!1});return}d.terminal&&p({reason:"terminal_event"})}},k.onerror=a=>{q("upstream_websocket_error",a.message||"Codex upstream WebSocket error")},k.onclose=()=>{p({reason:"upstream_closed",closeSocket:!1})},j||k.send(g)}catch(a){q("upstream_websocket_connect_failed",a instanceof Error?a.message:String(a))}},cancel(){p({reason:"client_cancelled",emitDone:!1,closeController:!1})}});return{response:new Response(r,{status:200,headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}}),url:v,headers:d,transformedBody:e}}buildUrl(a,b,c=0,d=null){let e=x(d?.requestEndpointPath);if(null!==e){let a=String(this.config.baseUrl||"").replace(/\/$/,"");return a.endsWith("/responses")?`${a}${e}`:`${a}/responses${e}`}return super.buildUrl(a,b,c,d)}buildHeaders(a,b=!0){let c=y(a?.requestEndpointPath),d=super.buildHeaders(a,!c);d.Version=(0,i.zq)(),(0,f.Uv)(d,(0,i.EQ)());let e=a?.providerSpecificData?.workspaceId;e&&(d["chatgpt-account-id"]=e),d.originator="codex_cli_rs";let g=this.getPromptCacheSessionId(a,null);return g&&(d.session_id=g),d}getPromptCacheSessionId(a,b){let c=b?.session_id??b?.conversation_id;return"string"==typeof c&&c.length>0?c:a?.providerSpecificData?.workspaceId||null}async refreshCredentials(a,b){if(!a?.refreshToken)return b?.warn?.("TOKEN_REFRESH","Codex: no refresh token available, re-authentication required"),null;let c=await (0,j.iD)("codex",a,b);return!c||c.error?(b?.warn?.("TOKEN_REFRESH",`Codex: token refresh failed${c?.error?` (${c.error})`:""} — re-authentication required`),null):c}transformRequest(a,b,c,d){b=b&&"object"==typeof b?structuredClone(b):{};let f=b?._nativeCodexPassthrough===!0,h=y(d?.requestEndpointPath),i=(0,e.vr)(d?.providerSpecificData),j=(0,k.IZ)().mode===k.g8.PASSTHROUGH;(m=b)._omnirouteResponsesStore,delete m._omnirouteResponsesStore,h?(delete b.stream,delete b.stream_options):b.stream=!0,delete b._nativeCodexPassthrough;let l=function(a){if("string"!=typeof a)return;let b=a.trim().toLowerCase();if(b)return"fast"===b?"priority":b}(b.service_tier);l?b.service_tier=l:i.serviceTier&&(b.service_tier=i.serviceTier);var m,n=b;if(Array.isArray(n.input))for(let a of n.input){if(!a||"object"!=typeof a||Array.isArray(a))continue;let b="string"==typeof a.role?a.role:"",c="string"==typeof a.type?a.type:"";"system"!==b||c&&"message"!==c||(a.role="developer")}if(f)b.instructions&&("string"!=typeof b.instructions||""!==b.instructions.trim())||(b.instructions="Follow the developer instructions in the conversation.");else{let a=Array.isArray(b.tools)&&b.tools.length>0;b.instructions&&("string"!=typeof b.instructions||""!==b.instructions.trim())||(a?b.instructions=g:delete b.instructions)}!0===(d?.providerSpecificData&&"object"==typeof d.providerSpecificData&&!Array.isArray(d.providerSpecificData)?d.providerSpecificData.openaiStoreEnabled:void 0)?b.store=!0:b.store=!1,function(a){if(!Array.isArray(a.tools))return;let b=new Set;if(a.tools=a.tools.filter(a=>{if(!a||"object"!=typeof a||Array.isArray(a)||"function"!==a.type)return!1;let c=("string"==typeof a.name?a.name:a.function&&"object"==typeof a.function&&!Array.isArray(a.function)&&"string"==typeof a.function.name?a.function.name:"").trim();return!!c&&(b.add(c),!0)}),a.tool_choice&&"object"==typeof a.tool_choice&&!Array.isArray(a.tool_choice)){let c=a.tool_choice;if("function"===c.type){let d="string"==typeof c.name?c.name.trim():"";d&&b.has(d)||delete a.tool_choice}}}(b),function(a){if(delete a.previous_response_id,!Array.isArray(a.input))return;let b=/^(rs|fc|resp|msg)_/,c=0;a.input=a.input.filter(a=>"string"==typeof a&&b.test(a)||a&&"object"==typeof a&&!Array.isArray(a)&&"item_reference"===a.type?(c++,!1):(a&&"object"==typeof a&&!Array.isArray(a)&&"string"==typeof a.id&&b.test(a.id)&&(delete a.id,c++),!0)),c>0&&console.debug(`[Codex] stripStoredItemReferences: sanitized ${c} server-generated ID(s) from input`)}(b),delete b.messages,delete b.prompt;let o=null,p="string"==typeof b.model?b.model:a,q=w(p);q.effort&&(o=q.effort,b.model=q.baseModel,p=b.model);let r=B(b?.reasoning?.effort),s=B(b.reasoning_effort),t=j?i.reasoningEffort||"medium":void 0,u=r||s||o||t;if(r?b.reasoning={...b.reasoning&&"object"==typeof b.reasoning?b.reasoning:{},effort:A(p,r)}:u&&(b.reasoning={...b.reasoning&&"object"==typeof b.reasoning?b.reasoning:{},effort:A(p,u)}),delete b.reasoning_effort,delete b.max_tokens,delete b.max_output_tokens,delete b.background,!b.prompt_cache_key){let a=this.getPromptCacheSessionId(d,b);a&&(b.prompt_cache_key=a)}return delete b.session_id,delete b.conversation_id,f||(delete b.temperature,delete b.top_p,delete b.frequency_penalty,delete b.presence_penalty,delete b.logprobs,delete b.top_logprobs,delete b.n,delete b.seed,delete b.user,delete b.prompt_cache_retention,delete b.metadata,delete b.stream_options,delete b.safety_identifier),b}}},95982:(a,b,c)=>{c.d(b,{$:()=>d});let d={"Access-Control-Allow-Methods":"GET, POST, PUT, DELETE, PATCH, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization, x-api-key, anthropic-version, x-omniroute-connection, x-internal-test, accept"}}};
123
+ `,terminal:d}}(c);if(!j){try{b.enqueue(i.encode(d.sse))}catch{p({reason:"downstream_closed",emitDone:!1,closeController:!1});return}d.terminal&&p({reason:"terminal_event"})}},k.onerror=a=>{q("upstream_websocket_error",a.message||"Codex upstream WebSocket error")},k.onclose=()=>{p({reason:"upstream_closed",closeSocket:!1})},j||k.send(g)}catch(a){q("upstream_websocket_connect_failed",a instanceof Error?a.message:String(a))}},cancel(){p({reason:"client_cancelled",emitDone:!1,closeController:!1})}});return{response:new Response(r,{status:200,headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}}),url:v,headers:d,transformedBody:e}}buildUrl(a,b,c=0,d=null){let e=y(d?.requestEndpointPath);if(null!==e){let a=String(this.config.baseUrl||"").replace(/\/$/,"");return a.endsWith("/responses")?`${a}${e}`:`${a}/responses${e}`}return super.buildUrl(a,b,c,d)}buildHeaders(a,b=!0){let c=z(a?.requestEndpointPath),d=super.buildHeaders(a,!c);d.Version=(0,i.zq)(),(0,f.Uv)(d,(0,i.EQ)());let e=a?.providerSpecificData?.workspaceId;e&&(d["chatgpt-account-id"]=e),d.originator="codex_cli_rs";let g=this.getPromptCacheSessionId(a,null);return g&&(d.session_id=g),d}getPromptCacheSessionId(a,b){let c=b?.session_id??b?.conversation_id;return"string"==typeof c&&c.length>0?c:a?.providerSpecificData?.workspaceId||null}async refreshCredentials(a,b){if(!a?.refreshToken)return b?.warn?.("TOKEN_REFRESH","Codex: no refresh token available, re-authentication required"),null;let c=await (0,j.iD)("codex",a,b);return!c||c.error?(b?.warn?.("TOKEN_REFRESH",`Codex: token refresh failed${c?.error?` (${c.error})`:""} — re-authentication required`),null):c}transformRequest(a,b,c,d){b=b&&"object"==typeof b?structuredClone(b):{};let f=b?._nativeCodexPassthrough===!0,h=z(d?.requestEndpointPath),i=(0,e.vr)(d?.providerSpecificData),j=(0,k.IZ)().mode===k.g8.PASSTHROUGH;(m=b)._omnirouteResponsesStore,delete m._omnirouteResponsesStore,h?(delete b.stream,delete b.stream_options):b.stream=!0,delete b._nativeCodexPassthrough;let l=function(a){if("string"!=typeof a)return;let b=a.trim().toLowerCase();if(b)return"fast"===b?"priority":b}(b.service_tier);l?b.service_tier=l:i.serviceTier&&(b.service_tier=i.serviceTier);var m,n=b;if(Array.isArray(n.input))for(let a of n.input){if(!a||"object"!=typeof a||Array.isArray(a))continue;let b="string"==typeof a.role?a.role:"",c="string"==typeof a.type?a.type:"";"system"!==b||c&&"message"!==c||(a.role="developer")}if(f)b.instructions&&("string"!=typeof b.instructions||""!==b.instructions.trim())||(b.instructions="Follow the developer instructions in the conversation.");else{let a=Array.isArray(b.tools)&&b.tools.length>0;b.instructions&&("string"!=typeof b.instructions||""!==b.instructions.trim())||(a?b.instructions=g:b.instructions="You are a ChatGPT agent.")}!0===(d?.providerSpecificData&&"object"==typeof d.providerSpecificData&&!Array.isArray(d.providerSpecificData)?d.providerSpecificData.openaiStoreEnabled:void 0)?b.store=!0:b.store=!1,function(a){if(!Array.isArray(a.tools))return;let b=new Set;if(a.tools=a.tools.filter(a=>{if(!a||"object"!=typeof a||Array.isArray(a))return!1;let c="string"==typeof a.type?a.type:"";if("namespace"===c){if(Array.isArray(a.tools)){for(let c of a.tools)if(c&&"object"==typeof c&&!Array.isArray(c)){let a="string"==typeof c.name?c.name.trim():"";a&&b.add(a)}}return!0}if("function"!==c){let b=a.function&&"object"==typeof a.function,d="string"==typeof a.name;return!!c&&!b&&!d&&(!!x.has(c)||(console.debug(`[Codex] dropping unknown hosted tool type: ${c}`),!1))}let d=("string"==typeof a.name?a.name:a.function&&"object"==typeof a.function&&!Array.isArray(a.function)&&"string"==typeof a.function.name?a.function.name:"").trim();return!!d&&(b.add(d),!0)}),a.tool_choice&&"object"==typeof a.tool_choice&&!Array.isArray(a.tool_choice)){let c=a.tool_choice;if("function"===c.type){let d="string"==typeof c.name?c.name.trim():"";d&&b.has(d)||delete a.tool_choice}}}(b),function(a){if(delete a.previous_response_id,!Array.isArray(a.input))return;let b=/^(rs|fc|resp|msg)_/,c=0;a.input=a.input.filter(a=>"string"==typeof a&&b.test(a)||a&&"object"==typeof a&&!Array.isArray(a)&&"item_reference"===a.type?(c++,!1):(a&&"object"==typeof a&&!Array.isArray(a)&&"string"==typeof a.id&&b.test(a.id)&&(delete a.id,c++),!0)),c>0&&console.debug(`[Codex] stripStoredItemReferences: sanitized ${c} server-generated ID(s) from input`)}(b),delete b.messages,delete b.prompt;let o=null,p="string"==typeof b.model?b.model:a,q=w(p);q.effort&&(o=q.effort,b.model=q.baseModel,p=b.model);let r=C(b?.reasoning?.effort),s=C(b.reasoning_effort),t=j?i.reasoningEffort||"medium":void 0,u=r||s||o||t;if(r?b.reasoning={...b.reasoning&&"object"==typeof b.reasoning?b.reasoning:{},effort:B(p,r)}:u&&(b.reasoning={...b.reasoning&&"object"==typeof b.reasoning?b.reasoning:{},effort:B(p,u)}),delete b.reasoning_effort,delete b.max_tokens,delete b.max_output_tokens,delete b.background,!b.prompt_cache_key){let a=this.getPromptCacheSessionId(d,b);a&&(b.prompt_cache_key=a)}return delete b.session_id,delete b.conversation_id,f||(delete b.temperature,delete b.top_p,delete b.frequency_penalty,delete b.presence_penalty,delete b.logprobs,delete b.top_logprobs,delete b.n,delete b.seed,delete b.user,delete b.prompt_cache_retention,delete b.metadata,delete b.stream_options,delete b.safety_identifier),b}}},95982:(a,b,c)=>{c.d(b,{$:()=>d});let d={"Access-Control-Allow-Methods":"GET, POST, PUT, DELETE, PATCH, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization, x-api-key, anthropic-version, x-omniroute-connection, x-internal-test, accept"}}};
@@ -47,10 +47,10 @@
47
47
  (id, name, type, host, port, username, password, region, notes, status, created_at, updated_at)
48
48
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(c,a.name,a.type,a.host,Number(a.port),a.username||"",a.password||"",a.region||null,a.notes||null,a.status||"active",g,g),(0,f.lR)("pre-write"),n(c,{includeSecrets:!1})}async function p(a,b){let c=(0,e.sm)(),d=await n(a,{includeSecrets:!0});if(!d)return null;let g="string"==typeof b.username?b.username.trim():void 0,h="string"==typeof b.password?b.password.trim():void 0,i={...d,...b,username:void 0===g||0===g.length?d.username:g,password:void 0===h||0===h.length?d.password:h,updatedAt:new Date().toISOString()};return c.prepare(`UPDATE proxy_registry
49
49
  SET name = ?, type = ?, host = ?, port = ?, username = ?, password = ?, region = ?, notes = ?, status = ?, updated_at = ?
50
- WHERE id = ?`).run(i.name,i.type,i.host,Number(i.port),i.username||"",i.password||"",i.region||null,i.notes||null,i.status||"active",i.updatedAt,a),(0,f.lR)("pre-write"),n(a,{includeSecrets:!1})}async function q(a){let b=(0,e.sm)();return a?.proxyId?b.prepare("SELECT id, proxy_id, scope, scope_id, created_at, updated_at FROM proxy_assignments WHERE proxy_id = ? ORDER BY scope, scope_id").all(a.proxyId).map(i):a?.scope?b.prepare("SELECT id, proxy_id, scope, scope_id, created_at, updated_at FROM proxy_assignments WHERE scope = ? ORDER BY scope_id").all(j(a.scope)).map(i):b.prepare("SELECT id, proxy_id, scope, scope_id, created_at, updated_at FROM proxy_assignments ORDER BY scope, scope_id").all().map(i)}async function r(a){let b=(0,e.sm)().prepare("SELECT id, proxy_id, scope, scope_id, created_at, updated_at FROM proxy_assignments WHERE proxy_id = ? ORDER BY scope, scope_id").all(a).map(i);return{count:b.length,assignments:b}}async function s(a,b,c){let d=j(a),g="global"===d?"__global__":b,h=(0,e.sm)();if(!c)return h.prepare("DELETE FROM proxy_assignments WHERE scope = ? AND scope_id IS ?").run(d,g),(0,f.lR)("pre-write"),null;if(!await n(c,{includeSecrets:!0})){let a=Error(`Proxy not found: ${c}`);throw a.status=404,a}let k=new Date().toISOString();h.prepare(`INSERT INTO proxy_assignments (proxy_id, scope, scope_id, created_at, updated_at)
50
+ WHERE id = ?`).run(i.name,i.type,i.host,Number(i.port),i.username||"",i.password||"",i.region||null,i.notes||null,i.status||"active",i.updatedAt,a),(0,f.lR)("pre-write"),n(a,{includeSecrets:!1})}async function q(a){try{let b=(0,e.sm)();if(a?.proxyId)return b.prepare("SELECT id, proxy_id, scope, scope_id, created_at, updated_at FROM proxy_assignments WHERE proxy_id = ? ORDER BY scope, scope_id").all(a.proxyId).map(i);if(a?.scope)return b.prepare("SELECT id, proxy_id, scope, scope_id, created_at, updated_at FROM proxy_assignments WHERE scope = ? ORDER BY scope_id").all(j(a.scope)).map(i);return b.prepare("SELECT id, proxy_id, scope, scope_id, created_at, updated_at FROM proxy_assignments ORDER BY scope, scope_id").all().map(i)}catch(a){if((a instanceof Error?a.message:String(a)).includes("no such table"))return[];throw a}}async function r(a){let b=(0,e.sm)().prepare("SELECT id, proxy_id, scope, scope_id, created_at, updated_at FROM proxy_assignments WHERE proxy_id = ? ORDER BY scope, scope_id").all(a).map(i);return{count:b.length,assignments:b}}async function s(a,b,c){let d=j(a),g="global"===d?"__global__":b,h=(0,e.sm)();if(!c)return h.prepare("DELETE FROM proxy_assignments WHERE scope = ? AND scope_id IS ?").run(d,g),(0,f.lR)("pre-write"),null;if(!await n(c,{includeSecrets:!0})){let a=Error(`Proxy not found: ${c}`);throw a.status=404,a}let k=new Date().toISOString();h.prepare(`INSERT INTO proxy_assignments (proxy_id, scope, scope_id, created_at, updated_at)
51
51
  VALUES (?, ?, ?, ?, ?)
52
52
  ON CONFLICT(scope, scope_id)
53
- DO UPDATE SET proxy_id = excluded.proxy_id, updated_at = excluded.updated_at`).run(c,d,g,k,k),(0,f.lR)("pre-write");let l=h.prepare("SELECT id, proxy_id, scope, scope_id, created_at, updated_at FROM proxy_assignments WHERE scope = ? AND scope_id IS ?").get(d,g);return l?i(l):null}async function t(a,b){let c=b?.force===!0,d=(0,e.sm)(),g=await r(a);if(!c&&g.count>0){let a=Error("Proxy is still assigned. Remove assignments first or use force=true");throw a.status=409,a.code="proxy_in_use",a}c&&g.count>0&&d.prepare("DELETE FROM proxy_assignments WHERE proxy_id = ?").run(a);let h=d.prepare("DELETE FROM proxy_registry WHERE id = ?").run(a);return(0,f.lR)("pre-write"),h.changes>0}async function u(a){let b=(0,e.sm)(),c=b.prepare("SELECT p.id, p.type, p.host, p.port, p.username, p.password FROM proxy_assignments a JOIN proxy_registry p ON p.id = a.proxy_id WHERE a.scope = 'account' AND a.scope_id = ? LIMIT 1").get(a);if(c){let b=g(c);return{proxy:{type:b.type,host:b.host,port:b.port,username:b.username,password:b.password},level:"account",levelId:a,source:"registry"}}let d=b.prepare("SELECT provider FROM provider_connections WHERE id = ?").get(a);if(d?.provider){let a=b.prepare("SELECT p.id, p.type, p.host, p.port, p.username, p.password FROM proxy_assignments a JOIN proxy_registry p ON p.id = a.proxy_id WHERE a.scope = 'provider' AND a.scope_id = ? LIMIT 1").get(d.provider);if(a){let b=g(a);return{proxy:{type:b.type,host:b.host,port:b.port,username:b.username,password:b.password},level:"provider",levelId:d.provider,source:"registry"}}}let f=b.prepare("SELECT p.id, p.type, p.host, p.port, p.username, p.password FROM proxy_assignments a JOIN proxy_registry p ON p.id = a.proxy_id WHERE a.scope = 'global' LIMIT 1").get();if(f){let a=g(f);return{proxy:{type:a.type,host:a.host,port:a.port,username:a.username,password:a.password},level:"global",levelId:null,source:"registry"}}return null}async function v(a){let b=a?.force===!0,c=(0,e.sm)(),d=c.prepare("SELECT COUNT(*) AS cnt FROM proxy_registry").get(),f=Number(d?.cnt||0);if(!b&&f>0)return{migrated:0,skipped:!0,reason:"registry_not_empty"};let g=c.prepare("SELECT key, value FROM key_value WHERE namespace = 'proxyConfig'").all(),h={};for(let a of g)if(a?.key&&"string"==typeof a.value)try{h[a.key]=JSON.parse(a.value)}catch{}let i=0;if(h.global){let a=k(h.global,"Legacy Global Proxy");if(a){let b=await o(a);b?.id&&(await s("global",null,b.id),i++)}}for(let[a,b]of Object.entries(h.providers||{})){let c=k(b,`Legacy Provider Proxy (${a})`);if(!c)continue;let d=await o(c);d?.id&&(await s("provider",a,d.id),i++)}for(let[a,b]of Object.entries(h.combos||{})){let c=k(b,`Legacy Combo Proxy (${a})`);if(!c)continue;let d=await o(c);d?.id&&(await s("combo",a,d.id),i++)}for(let[a,b]of Object.entries(h.keys||{})){let c=k(b,`Legacy Account Proxy (${a})`);if(!c)continue;let d=await o(c);d?.id&&(await s("account",a,d.id),i++)}return{migrated:i,skipped:!1}}async function w(a){let b=(0,e.sm)(),c=Math.max(1,Math.min(720,Number(a?.hours||24))),d=new Date(Date.now()-60*c*6e4).toISOString();return b.prepare(`SELECT
53
+ DO UPDATE SET proxy_id = excluded.proxy_id, updated_at = excluded.updated_at`).run(c,d,g,k,k),(0,f.lR)("pre-write");let l=h.prepare("SELECT id, proxy_id, scope, scope_id, created_at, updated_at FROM proxy_assignments WHERE scope = ? AND scope_id IS ?").get(d,g);return l?i(l):null}async function t(a,b){let c=b?.force===!0,d=(0,e.sm)(),g=await r(a);if(!c&&g.count>0){let a=Error("Proxy is still assigned. Remove assignments first or use force=true");throw a.status=409,a.code="proxy_in_use",a}c&&g.count>0&&d.prepare("DELETE FROM proxy_assignments WHERE proxy_id = ?").run(a);let h=d.prepare("DELETE FROM proxy_registry WHERE id = ?").run(a);return(0,f.lR)("pre-write"),h.changes>0}async function u(a){try{let b=(0,e.sm)(),c=b.prepare("SELECT p.id, p.type, p.host, p.port, p.username, p.password FROM proxy_assignments a JOIN proxy_registry p ON p.id = a.proxy_id WHERE a.scope = 'account' AND a.scope_id = ? LIMIT 1").get(a);if(c){let b=g(c);return{proxy:{type:b.type,host:b.host,port:b.port,username:b.username,password:b.password},level:"account",levelId:a,source:"registry"}}let d=b.prepare("SELECT provider FROM provider_connections WHERE id = ?").get(a);if(d?.provider){let a=b.prepare("SELECT p.id, p.type, p.host, p.port, p.username, p.password FROM proxy_assignments a JOIN proxy_registry p ON p.id = a.proxy_id WHERE a.scope = 'provider' AND a.scope_id = ? LIMIT 1").get(d.provider);if(a){let b=g(a);return{proxy:{type:b.type,host:b.host,port:b.port,username:b.username,password:b.password},level:"provider",levelId:d.provider,source:"registry"}}}let f=b.prepare("SELECT p.id, p.type, p.host, p.port, p.username, p.password FROM proxy_assignments a JOIN proxy_registry p ON p.id = a.proxy_id WHERE a.scope = 'global' LIMIT 1").get();if(f){let a=g(f);return{proxy:{type:a.type,host:a.host,port:a.port,username:a.username,password:a.password},level:"global",levelId:null,source:"registry"}}return null}catch(a){if((a instanceof Error?a.message:String(a)).includes("no such table"))return null;throw a}}async function v(a){let b=a?.force===!0,c=(0,e.sm)(),d=c.prepare("SELECT COUNT(*) AS cnt FROM proxy_registry").get(),f=Number(d?.cnt||0);if(!b&&f>0)return{migrated:0,skipped:!0,reason:"registry_not_empty"};let g=c.prepare("SELECT key, value FROM key_value WHERE namespace = 'proxyConfig'").all(),h={};for(let a of g)if(a?.key&&"string"==typeof a.value)try{h[a.key]=JSON.parse(a.value)}catch{}let i=0;if(h.global){let a=k(h.global,"Legacy Global Proxy");if(a){let b=await o(a);b?.id&&(await s("global",null,b.id),i++)}}for(let[a,b]of Object.entries(h.providers||{})){let c=k(b,`Legacy Provider Proxy (${a})`);if(!c)continue;let d=await o(c);d?.id&&(await s("provider",a,d.id),i++)}for(let[a,b]of Object.entries(h.combos||{})){let c=k(b,`Legacy Combo Proxy (${a})`);if(!c)continue;let d=await o(c);d?.id&&(await s("combo",a,d.id),i++)}for(let[a,b]of Object.entries(h.keys||{})){let c=k(b,`Legacy Account Proxy (${a})`);if(!c)continue;let d=await o(c);d?.id&&(await s("account",a,d.id),i++)}return{migrated:i,skipped:!1}}async function w(a){let b=(0,e.sm)(),c=Math.max(1,Math.min(720,Number(a?.hours||24))),d=new Date(Date.now()-60*c*6e4).toISOString();return b.prepare(`SELECT
54
54
  p.id as proxy_id,
55
55
  p.name as proxy_name,
56
56
  p.type as proxy_type,
@@ -69,4 +69,4 @@
69
69
  AND l.proxy_port = p.port
70
70
  AND l.timestamp >= ?
71
71
  GROUP BY p.id, p.name, p.type, p.host, p.port
72
- ORDER BY p.name ASC`).all(d).map(a=>{let b=Number(a.total_requests||0),c=Number(a.success_count||0),d=Number(a.error_count||0),e=Number(a.timeout_count||0),f=b>0?Math.round(c/b*1e4)/100:null;return{proxyId:String(a.proxy_id||""),name:String(a.proxy_name||""),type:String(a.proxy_type||"http"),host:String(a.proxy_host||""),port:Number(a.proxy_port||0),totalRequests:b,successCount:c,errorCount:d,timeoutCount:e,successRate:f,avgLatencyMs:null===a.avg_latency_ms||void 0===a.avg_latency_ms?null:Math.round(Number(a.avg_latency_ms)),lastSeenAt:a.last_seen_at?String(a.last_seen_at):null}})}async function x(a,b,c){let d=[...new Set((b||[]).map(a=>String(a).trim()).filter(Boolean))],e=[],f=0;if("global"===a)return await s("global",null,c),{updated:1,failed:[]};for(let b of d)try{await s(a,b,c),f++}catch(a){e.push({scopeId:b,reason:a instanceof Error?a.message:"Unknown error"})}return{updated:f,failed:e}}async function y(a){let b=(0,e.sm)(),c=b.prepare("SELECT p.id, p.type, p.host, p.port, p.username, p.password FROM proxy_assignments a JOIN proxy_registry p ON p.id = a.proxy_id WHERE a.scope = 'provider' AND a.scope_id = ? LIMIT 1").get(a);if(c){let a=g(c);return{type:a.type,host:a.host,port:a.port,username:a.username,password:a.password}}let d=b.prepare("SELECT p.id, p.type, p.host, p.port, p.username, p.password FROM proxy_assignments a JOIN proxy_registry p ON p.id = a.proxy_id WHERE a.scope = 'global' LIMIT 1").get();if(d){let a=g(d);return{type:a.type,host:a.host,port:a.port,username:a.username,password:a.password}}return null}}};
72
+ ORDER BY p.name ASC`).all(d).map(a=>{let b=Number(a.total_requests||0),c=Number(a.success_count||0),d=Number(a.error_count||0),e=Number(a.timeout_count||0),f=b>0?Math.round(c/b*1e4)/100:null;return{proxyId:String(a.proxy_id||""),name:String(a.proxy_name||""),type:String(a.proxy_type||"http"),host:String(a.proxy_host||""),port:Number(a.proxy_port||0),totalRequests:b,successCount:c,errorCount:d,timeoutCount:e,successRate:f,avgLatencyMs:null===a.avg_latency_ms||void 0===a.avg_latency_ms?null:Math.round(Number(a.avg_latency_ms)),lastSeenAt:a.last_seen_at?String(a.last_seen_at):null}})}async function x(a,b,c){let d=[...new Set((b||[]).map(a=>String(a).trim()).filter(Boolean))],e=[],f=0;if("global"===a)return await s("global",null,c),{updated:1,failed:[]};for(let b of d)try{await s(a,b,c),f++}catch(a){e.push({scopeId:b,reason:a instanceof Error?a.message:"Unknown error"})}return{updated:f,failed:e}}async function y(a){try{let b=(0,e.sm)(),c=b.prepare("SELECT p.id, p.type, p.host, p.port, p.username, p.password FROM proxy_assignments a JOIN proxy_registry p ON p.id = a.proxy_id WHERE a.scope = 'provider' AND a.scope_id = ? LIMIT 1").get(a);if(c){let a=g(c);return{type:a.type,host:a.host,port:a.port,username:a.username,password:a.password}}let d=b.prepare("SELECT p.id, p.type, p.host, p.port, p.username, p.password FROM proxy_assignments a JOIN proxy_registry p ON p.id = a.proxy_id WHERE a.scope = 'global' LIMIT 1").get();if(d){let a=g(d);return{type:a.type,host:a.host,port:a.port,username:a.username,password:a.password}}return null}catch(a){if((a instanceof Error?a.message:String(a)).includes("no such table"))return null;throw a}}}};
@@ -50,8 +50,8 @@ ${c}
50
50
  You are continuing a conversation that was transferred from another account due to quota limits.
51
51
  The context above contains a concise summary of the prior work. Continue seamlessly from where the session left off.`);if(Object.prototype.hasOwnProperty.call(a,"input")||Object.prototype.hasOwnProperty.call(a,"instructions")){let b="string"==typeof a.instructions&&a.instructions.trim().length>0?a.instructions:"",c={...a,instructions:b?`${e}
52
52
 
53
- ${b}`:e};if(Array.isArray(c.messages)&&0===c.messages.length){let{messages:a,...b}=c;return b}return c}let f=Array.isArray(a.messages)?[...a.messages]:[];return{...a,messages:[{role:"system",content:e},...f]}}},99168:(a,b,c)=>{c.d(b,{Pr:()=>aB,resolveComboTargets:()=>aA});var d=c(19454),e=c(86648);function f(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function g(){return{requests:0,successes:0,failures:0,totalLatencyMs:0,lastStatus:null,lastUsedAt:null}}function h(a){return{totalRequests:0,totalSuccesses:0,totalFailures:0,totalFallbacks:0,totalLatencyMs:0,strategy:a,lastUsedAt:null,intentCounts:{},byModel:{},byTarget:{}}}function i(a,b,c,d){if(a.requests++,a.totalLatencyMs+=c,a.lastUsedAt=d,b){a.successes++,a.lastStatus="ok";return}a.failures++,a.lastStatus="error"}function j(a){return{...a,avgLatencyMs:a.requests>0?Math.round(a.totalLatencyMs/a.requests):0,successRate:a.requests>0?Math.round(a.successes/a.requests*100):0}}let k=new Map;function l(a,b,{success:c,latencyMs:d,fallbackCount:e=0,strategy:j="priority",target:m}){var n;let o,p;k.has(a)||k.set(a,h(j));let q=k.get(a);if(!q)return;let r=new Date().toISOString();if(q.totalRequests++,q.totalLatencyMs+=d,q.totalFallbacks+=e,q.lastUsedAt=r,q.strategy=j,c?q.totalSuccesses++:q.totalFailures++,!b)return;q.byModel[b]||(q.byModel[b]=g()),i(q.byModel[b],c,d,r);let s=(o=f((n=m||{}).executionKey)||f(b),p=f(b),o&&p?{executionKey:o,stepId:f(n.stepId),model:p,provider:f(n.provider)||function(a){let b=f(a);if(!b)return null;let[c]=b.split("/");return f(c)}(p),providerId:f(n.providerId),connectionId:null===n.connectionId?null:f(n.connectionId)??null,label:null===n.label?null:f(n.label)??null,...g()}:null);if(!s)return;q.byTarget[s.executionKey]||(q.byTarget[s.executionKey]=s);let t=q.byTarget[s.executionKey];t.stepId=s.stepId||t.stepId,t.provider=s.provider||t.provider,t.providerId=s.providerId||t.providerId,t.connectionId=m?.connectionId===null?null:s.connectionId??t.connectionId,t.label=m?.label===null?null:s.label??t.label,i(t,c,d,r)}function m(a){let b=k.get(a);return b?{...b,avgLatencyMs:b.totalRequests>0?Math.round(b.totalLatencyMs/b.totalRequests):0,successRate:b.totalRequests>0?Math.round(b.totalSuccesses/b.totalRequests*100):0,fallbackRate:b.totalRequests>0?Math.round(b.totalFallbacks/b.totalRequests*100):0,intentCounts:{...b.intentCounts},byModel:Object.fromEntries(Object.entries(b.byModel).map(([a,b])=>[a,j(b)])),byTarget:Object.fromEntries(Object.entries(b.byTarget).map(([a,b])=>[a,j(b)]))}:null}var n=c(49877),o=c(93798),p=c(88709);let q=new Map;function r(a,b=3){q.has(a)||q.set(a,{running:0,max:b,queue:[],rateLimitedUntil:null});let c=q.get(a);return c.max=b,c}function s(a){return!!a.rateLimitedUntil&&(!(Date.now()>=a.rateLimitedUntil)||(a.rateLimitedUntil=null,!1))}function t(a){let b=q.get(a);if(b)for(;b.queue.length>0&&b.running<b.max&&!s(b);){let c=b.queue.shift();clearTimeout(c.timer),b.running++,c.resolve(u(a))}}function u(a){let b=!1;return()=>{if(b)return;b=!0;let c=q.get(a);c&&c.running>0&&(c.running--,t(a))}}var v=c(73159),w=c(60),x=c(41966);let y=/(?:\\n|\n|\r)*<omniModel>([^<]+)<\/omniModel>(?:\\n|\n|\r)*/,z=["function","class","import","def","SELECT","async","await","const","let","var","return","```","algorithm","compile","debug","refactor","typescript","python","javascript","code","implement","write a","create a component","endpoint","repository","deploy","install","script","api","database","query","schema","interface","generic","enum","module","package","dependency","fun\xe7\xe3o","classe","importar","definir","consulta","ass\xedncrono","aguardar","constante","vari\xe1vel","retornar","algoritmo","compilar","depurar","refatorar","c\xf3digo","implementar","criar um","componente","como fazer","reposit\xf3rio","configurar","instalar","banco de dados","escrever uma fun\xe7\xe3o","criar uma classe","funci\xf3n","clase","importar","definir","consulta","as\xedncrono","esperar","constante","variable","retornar","algoritmo","compilar","depurar","refactorizar","c\xf3digo","implementar","函数","类","导入","定义","查询","异步","等待","常量","变量","返回","算法","编译","调试","代码","関数","クラス","インポート","非同期","定数","変数","コード","アルゴリズム","функция","класс","импорт","запрос","асинхронный","константа","переменная","алгоритм","код","funktion","klasse","importieren","abfrage","asynchron","konstante","variable","algorithmus","code","함수","클래스","가져오기","정의","쿼리","비동기","대기","상수","변수","반환","코드","دالة","فئة","استيراد","استعلام","غير متزامن","ثابت","متغير","كود","خوارزمية"],A=["prove","theorem","derive","step by step","chain of thought","formally","mathematical","proof","logically","analyze","reasoning","deduce","infer","hypothesis","convergence","provar","teorema","derivar","passo a passo","cadeia de pensamento","formalmente","matem\xe1tico","prova","logicamente","analisar","racioc\xednio","deduzir","inferir","hip\xf3tese","demonstrar","c\xe1lculo","equa\xe7\xe3o diferencial","integral","otimiza\xe7\xe3o","demostrar","teorema","derivar","paso a paso","formalmente","matem\xe1tico","l\xf3gicamente","证明","定理","推导","逐步","思维链","数学","逻辑","分析","証明","定理","導出","論理的","分析","доказать","теорема","шаг за шагом","математически","логически","beweisen","theorem","schritt f\xfcr schritt","mathematisch","logisch","증명","정리","단계별","수학적","논리적","إثبات","نظرية","خطوة بخطوة","رياضي","منطقياً"],B=["what is","define","translate","hello","yes or no","summarize","list","tell me","who is","o que \xe9","definir","traduzir","ol\xe1","oi","sim ou n\xe3o","resumir","listar","me diga","quem \xe9","quando foi","onde fica","explique brevemente","de forma simples","qu\xe9 es","definir","traducir","hola","resumir","listar","什么是","定义","翻译","你好","总结","列出","что такое","определить","перевести","привет","резюмировать","was ist","definieren","\xfcbersetzen","hallo","zusammenfassen","이란","정의","번역","안녕","요약","ما هو","تعريف","ترجمة","مرحبا","ملخص"],C={enabled:!0,simpleMaxWords:60};var D=c(7176);let E={quota:.2,health:.25,costInv:.2,latencyInv:.15,taskFit:.1,stability:.05,tierPriority:.05};function F(a,b){return b.quota*a.quota+b.health*a.health+b.costInv*a.costInv+b.latencyInv*a.latencyInv+b.taskFit*a.taskFit+b.stability*a.stability+b.tierPriority*a.tierPriority}function G(a,b,c,d){var e,f;let g=Math.max(...b.map(a=>a.costPer1MTokens),.001),h=Math.max(...b.map(a=>a.p95LatencyMs),1),i=Math.max(...b.map(a=>a.latencyStdDev),.001);return{quota:Math.min(1,a.quotaRemaining/100),health:"CLOSED"===a.circuitBreakerState?1:.5*("HALF_OPEN"===a.circuitBreakerState),costInv:1-a.costPer1MTokens/g,latencyInv:1-a.p95LatencyMs/h,taskFit:d(a.model,c),stability:1-a.latencyStdDev/i,tierPriority:(e=a.accountTier,f=a.quotaResetIntervalSecs,Math.min(1,.8*(({ultra:1,pro:.67,standard:.33,free:0})[e?.toLowerCase()??""]??.33)+.2*(null!=f&&f>0?Math.max(0,1-f/2592e3):0)))}}function H(a,b,c=E,d=()=>.5){return a.map(e=>{let f=G(e,a,b,d);return{provider:e.provider,model:e.model,score:F(f,c),factors:f}}).sort((a,b)=>b.score-a.score)}let I={coding:{"claude-sonnet":.95,"claude-opus":.92,"claude-haiku":.78,"gpt-4o":.9,"gpt-4o-mini":.8,"gpt-4-turbo":.88,o1:.93,o3:.95,"o4-mini":.88,codex:.98,"gemini-pro":.85,"gemini-flash":.8,"gemini-2.5-pro":.92,"gemini-2.5-flash":.82,"deepseek-coder":.9,"deepseek-v3":.85,"deepseek-r1":.88,"deepseek-chat":.84,"deepseek-v3.2":.86,qwen:.78,llama:.72,mistral:.75,mixtral:.77,"grok-4-fast":.8,"grok-4":.82,"grok-3":.8,"kimi-k2":.82,"glm-5.1":.78,"glm-5":.78,"minimax-m2.5":.75,"minimax-m2":.72},review:{"claude-sonnet":.92,"claude-opus":.95,"claude-haiku":.7,"gpt-4o":.88,"gpt-4o-mini":.72,o1:.9,o3:.92,"gemini-pro":.9,"gemini-2.5-pro":.93,"gemini-flash":.75,"deepseek-r1":.85,"deepseek-v3":.8},planning:{"claude-opus":.95,"claude-sonnet":.9,"gpt-4o":.88,o1:.92,o3:.95,"gemini-2.5-pro":.93,"gemini-pro":.88,"deepseek-r1":.85},analysis:{"claude-opus":.95,"claude-sonnet":.92,"gemini-2.5-pro":.95,"gemini-pro":.88,"gemini-3.1-pro":.95,"gpt-4o":.85,o1:.9,o3:.93,"deepseek-r1":.88,"deepseek-chat":.8,"kimi-k2":.82,"glm-5.1":.82,"glm-5":.78,"minimax-m2.5":.76},debugging:{"claude-sonnet":.93,"claude-opus":.9,"gpt-4o":.88,o1:.85,"deepseek-coder":.9,"deepseek-v3":.82,"gemini-flash":.78,codex:.92},documentation:{"claude-sonnet":.9,"claude-opus":.88,"gpt-4o":.92,"gpt-4o-mini":.85,"gemini-pro":.88,"gemini-flash":.82,"deepseek-v3":.78},default:{"claude-sonnet":.85,"claude-opus":.85,"gpt-4o":.85,"gemini-pro":.8,"gemini-3.1-pro":.85,"deepseek-v3":.75,"deepseek-chat":.74,"gemini-flash":.72,"grok-4-fast":.72,"grok-4":.74,"grok-3":.73,"kimi-k2":.76,"glm-5.1":.75,"glm-5":.7,"minimax-m2.5":.7}},J=[{pattern:"coder",taskType:"coding",boost:.15},{pattern:"code",taskType:"coding",boost:.1},{pattern:"fast",taskType:"coding",boost:.05},{pattern:"thinking",taskType:"planning",boost:.1},{pattern:"thinking",taskType:"analysis",boost:.1}];function K(a,b){let c=a.toLowerCase(),d=b.toLowerCase();for(let[a,b]of Object.entries(I[d]||I.default))if(c.includes(a))return b;let e=.5;for(let a of J)c.includes(a.pattern)&&d===a.taskType&&(e+=a.boost);return Math.min(1,e)}let L={"ship-fast":{quota:.15,health:.3,costInv:.05,latencyInv:.35,taskFit:.1,stability:0,tierPriority:.05},"cost-saver":{quota:.15,health:.2,costInv:.4,latencyInv:.05,taskFit:.1,stability:.05,tierPriority:.05},"quality-first":{quota:.1,health:.2,costInv:.05,latencyInv:.05,taskFit:.4,stability:.15,tierPriority:.05},"offline-friendly":{quota:.4,health:.3,costInv:.1,latencyInv:.05,taskFit:0,stability:.1,tierPriority:.05}};class M{isExcluded(a){let b=this.exclusions.get(a);return!(!b||Date.now()-b.excludedAt>b.cooldownMs)}evaluate(a,b,c){let d=this.exclusions.get(a);if(d&&b>=.3&&Date.now()-d.excludedAt>d.cooldownMs)return this.exclusions.delete(a),{excluded:!1,reason:`Re-admitted: score ${b.toFixed(2)} >= 0.3`};if(this.isExcluded(a))return"HALF_OPEN"===c&&d?(d.probeCount++,{excluded:!1,isProbe:!0,reason:`Probe request #${d.probeCount}`}):{excluded:!0,reason:d?.reason||"Excluded"};if(b<.2){let c=d?Math.min(2*d.cooldownMs,18e5):3e5;return this.exclusions.set(a,{provider:a,excludedAt:Date.now(),cooldownMs:c,reason:`Score ${b.toFixed(2)} < 0.2`,probeCount:0}),{excluded:!0,reason:`Excluded: score ${b.toFixed(2)} below threshold`}}return"OPEN"===c?(this.exclusions.set(a,{provider:a,excludedAt:Date.now(),cooldownMs:3e5,reason:"Circuit breaker OPEN",probeCount:0}),{excluded:!0,reason:"Circuit breaker OPEN"}):{excluded:!1}}recordProbeResult(a,b){let c=this.exclusions.get(a);c&&(b&&c.probeCount>=3?this.exclusions.delete(a):b||(c.cooldownMs=Math.min(2*c.cooldownMs,18e5),c.excludedAt=Date.now(),c.probeCount=0))}updateIncidentMode(a){let b=a.length;if(0===b)return this.incidentMode=!1,!1;let c=a.filter(a=>"OPEN"===a).length;return this.incidentMode=c/b>.5,this.incidentMode}isInIncidentMode(){return this.incidentMode}getExclusions(){return[...this.exclusions.values()]}getStatus(){let a=Date.now();return{exclusionCount:this.exclusions.size,incidentMode:this.incidentMode,exclusions:[...this.exclusions.values()].map(b=>({provider:b.provider,reason:b.reason,remainingMs:Math.max(0,b.cooldownMs-(a-b.excludedAt))}))}}constructor(){this.exclusions=new Map,this.incidentMode=!1}}let N=null;class O{select(a,b){let c=a.filter(a=>"OPEN"!==a.circuitBreakerState),d=H(c.length>0?c:a,b.taskType,void 0,K),e=d[0];if(!e)throw Error("[RulesStrategy] No candidates to score");return{provider:e.provider,model:e.model,strategy:this.name,reason:`RulesStrategy: score=${e.score.toFixed(3)} (quota=${e.factors.quota.toFixed(2)}, health=${e.factors.health.toFixed(2)}, cost=${e.factors.costInv.toFixed(2)}, taskFit=${e.factors.taskFit.toFixed(2)})`,candidatesConsidered:d.length,finalScore:e.score}}constructor(){this.name="rules",this.description="6-factor weighted scoring: quota, health, cost, latency, taskFit, stability"}}class P{select(a,b){let c=a.filter(a=>"OPEN"!==a.circuitBreakerState),d=c.length>0?c:a,e=[...d].sort((a,b)=>a.costPer1MTokens-b.costPer1MTokens)[0];if(!e)throw Error("[CostStrategy] No candidates available");return{provider:e.provider,model:e.model,strategy:this.name,reason:`CostStrategy: cheapest at $${e.costPer1MTokens.toFixed(3)}/1M tokens`,candidatesConsidered:d.length,finalScore:0===e.costPer1MTokens?1:1/e.costPer1MTokens}}constructor(){this.name="cost",this.description="Always selects cheapest available provider (by costPer1MTokens)"}}class Q{select(a,b){let c=a.filter(a=>"OPEN"!==a.circuitBreakerState),d=c.length>0?c:a,e=[...d].sort((a,b)=>{let c=1e3*a.errorRate,d=1e3*b.errorRate;return a.p95LatencyMs+c-(b.p95LatencyMs+d)})[0];if(!e)throw Error("[LatencyStrategy] No candidates available");let f=e.p95LatencyMs>0?Math.max(.001,1e4/e.p95LatencyMs):1,g=Math.max(0,1-e.errorRate);return{provider:e.provider,model:e.model,strategy:this.name,reason:`LatencyStrategy: p95=${e.p95LatencyMs}ms, errorRate=${(100*e.errorRate).toFixed(2)}%`,candidatesConsidered:d.length,finalScore:.7*f+.3*g}}constructor(){this.name="latency",this.description="Prioritizes lowest p95 latency with reliability weighting"}}class R{select(a,b){if(!1===b.lkgpEnabled)return X("rules").select(a,b);if(b.lastKnownGoodProvider){let c=a.find(a=>a.provider===b.lastKnownGoodProvider&&"OPEN"!==a.circuitBreakerState);if(c)return{provider:c.provider,model:c.model,strategy:this.name,reason:`LKGP: using last known good provider ${c.provider}`,candidatesConsidered:1,finalScore:1}}return X("rules").select(a,b)}constructor(){this.name="lkgp",this.description="Tries last known good provider first, then falls back to rules"}}let S=new Map,T=new O,U=new P,V=new Q,W=new R;function X(a){let b=S.get(a);return b||(console.warn(`[RouterStrategy] Strategy '${a}' not found, falling back to 'rules'`),T)}S.set("rules",T),S.set("cost",U),S.set("eco",U),S.set("latency",V),S.set("fast",V),S.set("lkgp",W);var Y=c(56757),Z=c(93786),$=c(42476),_=c(20561),aa=c(98506);function ab(a,b){return"open"===a.headers.get("x-omniroute-provider-breaker")||b?.error?.code==="provider_circuit_open"}let ac=[429,502,503,504],ad=[/\bprohibited_content\b/i,/request blocked by .*api/i,/provided message roles? is not valid/i,/unsupported .*message role/i,/no such tool available/i,/unsupported content part type/i,/tool(?:_call|_use)? .* not (?:available|found)/i,/third-party apps/i,D.tJ,/no provider supported/i,/model not found/i,/model not available/i,/unsupported model/i,/model.*has no provider/i,/function\.?arguments.*(must be|should be|\u5fc5\u987b).*(json|JSON)/i,/tool.*arguments.*invalid/i,/function.*parameter.*(invalid|format)/i,/range of input length/i,/input length should be/i,/\u670d\u52a1\u9047\u5230\u4e86\u4e00\u70b9\u5c0f\u72b6\u51b5/i,/\u62b1\u6b49.*?\u654f\u611f\u5185\u5bb9.*?\u8bf7\u68c0\u67e5/i,/\u5185\u5bb9.*?\u654f\u611f.*?(?:\u65e0\u6cd5|\u8fc7\u6ee4)/i,/\u65e0\u6cd5\u54cd\u5e94.*?\u8bf7\u6c42/i,/\u7a0d\u540e\u91cd\u8bd5/i,/temporary.*error/i,/transient.*error/i,/service.*unavailable/i,/please.*try.*again/i,/\brate.?-?limit.?(?:exceeded|reached|hit)/i,/too many requests/i,/\u8bf7\u6c42\u8fc7\u4e8e\u9891\u7e41/i,/\bfunction'?s? name (?:can't|can not|is|has) (?:blank|empty|missing)/i,/function.*name.*(?:blank|empty|missing)/i,/tool_call.*name.*(?:blank|empty|missing)/i,/invalid.*signature.*thinking/i],ae=[/unavailable/i,/service temporarily unavailable/i];function af(a){return(0,e.yj)(404,a)}let ag={"grok-4-fast-non-reasoning":1143,"grok-4-1-fast-non-reasoning":1244,"gemini-2.5-flash":1238,"kimi-k2.5":1646,"gpt-4o-mini":2764,"claude-sonnet-4.6":4e3,"claude-opus-4.6":6e3,"deepseek-chat":2e3};function ah(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function ai(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}async function aj(a,b,c){let d,e,f;if(b)return{valid:!0};let g=a.headers.get("content-type")||"";if(!g.includes("application/json")&&!g.includes("text/"))return{valid:!0};try{d=a.clone()}catch{return{valid:!0}}try{e=await d.text()}catch{return{valid:!0}}if(!e||0===e.trim().length)return{valid:!1,reason:"empty response body"};try{f=JSON.parse(e)}catch{if(e.startsWith("data:"))return{valid:!0};return{valid:!1,reason:"response is not valid JSON"}}let h=f?.choices;if(!Array.isArray(h)||0===h.length){if(f?.output||f?.result||f?.data||f?.response)return{valid:!0};if(f?.error){let a=f.error;return{valid:!1,reason:`upstream error in 200 body: ${a?.message||JSON.stringify(f.error).substring(0,200)}`}}return{valid:!0}}let i=h[0],j=i?.message||i?.delta;if(!j)return{valid:!1,reason:"choice has no message object"};let k=j.content,l=j.tool_calls,m=Array.isArray(l)&&l.length>0;return null!=k&&""!==k||m?{valid:!0,clonedResponse:new Response(e,{status:a.status,statusText:a.statusText,headers:a.headers})}:{valid:!1,reason:"empty content and no tool_calls in response"}}let ak=new Map;function al(a){if(!a||"object"!=typeof a)return!1;let b=a.error;return!!b&&"object"==typeof b&&"STREAM_READINESS_TIMEOUT"===b.code}function am(a){return{executionKey:a.executionKey,stepId:a.stepId,provider:a.provider,providerId:a.providerId,connectionId:a.connectionId,label:a.label}}function an(a,b,c,d,e=[]){var f;let g,h=(0,_.Sw)(a,{comboName:b,index:c,allCombos:d});if(!h)return null;let i=[...e,h.id].join(">"),j="string"==typeof h.label?h.label:null,k=h.weight||0;if("combo-ref"===h.kind)return{kind:"combo-ref",stepId:h.id,executionKey:i,comboName:h.comboName,weight:k,label:j};let l=(0,_.Dx)(h);return l?{kind:"model",stepId:h.id,executionKey:i,modelStr:l,provider:(f=h.providerId,g=(0,x.parseModel)(l),f||g.provider||g.providerAlias||"unknown"),providerId:h.providerId||null,connectionId:h.connectionId||null,weight:k,label:j}:null}function ao(a){let b=ah(a?.config)?a.config.compositeTiers:null;if(!ah(b))return[];let c=ai(b.defaultTier),d=ah(b.tiers)?b.tiers:null;if(!c||!d)return[];let e=[],f=new Set,g=new Set,h=new Map(Object.entries(d).map(([a,b])=>{if(!ah(b))return null;let c=ai(a),d=ai(b.stepId),e=ai(b.fallbackTier);return c&&d?[c,{stepId:d,fallbackTier:e}]:null}).filter(Boolean)),i=c;for(;i&&h.has(i)&&!f.has(i);){f.add(i);let a=h.get(i);if(!a)break;g.has(a.stepId)||(e.push(a.stepId),g.add(a.stepId)),i=a.fallbackTier}for(let a of h.values())g.has(a.stepId)||(e.push(a.stepId),g.add(a.stepId));return e}function ap(a,b,c=[]){return function(a,b){let c=ao(b);if(0===c.length)return a;let d=new Map(a.map(a=>[a.stepId,a])),e=new Set,f=[];for(let a of c){let b=d.get(a);!b||e.has(b.stepId)||(f.push(b),e.add(b.stepId))}for(let b of a)e.has(b.stepId)||(f.push(b),e.add(b.stepId));return f}(function(a,b,c=[]){return(a.models||[]).map((d,e)=>an(d,a.name,e,b,c)).filter(a=>null!==a)}(a,b,c),a)}function aq(a,b,c=new Set,d=0,e=[]){if("model"===a.kind)return[a];if(d>3)return[];let f=Array.isArray(b)?b:b?.combos||[],g=f.find(b=>b.name===a.comboName);return!g||c.has(a.comboName)?[]:ar(g,f,new Set(c),d+1,[...e,a.stepId])}function ar(a,b,c=new Set,d=0,e=[]){let f=(a.models||[]).map((b,c)=>an(b,a.name,c,null,e)).filter(a=>a?.kind==="model");if(d>3)return f;if(c.has(a.name))return[];c.add(a.name);let g=ap(a,b,e),h=[];for(let a of g){if("combo-ref"===a.kind){h.push(...aq(a,b,new Set(c),d,e));continue}h.push(a)}return h}async function as(a){try{let{getPricingForModel:b}=await Promise.resolve().then(c.bind(c,73671)),d=await Promise.all(a.map(async a=>{let c=(0,x.parseModel)(a),d=c.provider||c.providerAlias||"unknown",e=c.model||a;try{let c=await b(d,e);return{modelStr:a,cost:c?.input??1/0}}catch{return{modelStr:a,cost:1/0}}}));return d.sort((a,b)=>a.cost-b.cost),d.map(a=>a.modelStr)}catch{return a}}async function at(a){let b=await as(a.map(a=>a.modelStr)),c=new Map;for(let b of a){let a=c.get(b.modelStr)||[];a.push(b),c.set(b.modelStr,a)}return b.map(a=>{let b=c.get(a);return b?.shift()||null}).filter(a=>null!==a)}function au(a,b){if(400!==a||!b)return!1;let c=String(b);return ad.some(a=>a.test(c))}function av(a){return Array.isArray(a)?a.map(a=>"string"==typeof a?a.trim():"").filter(Boolean):"string"==typeof a?a.split(",").map(a=>a.trim()).filter(Boolean):[]}function aw(a){return ag[String(a||"").toLowerCase()]??1500}async function ax(a,b){let d=m(b),{getPricingForModel:e}=await Promise.resolve().then(c.bind(c,73671)),f={};try{let{getModelLatencyStats:a}=await Promise.resolve().then(c.bind(c,11283));f=await a({windowHours:24,minSamples:3,maxRows:1e4})}catch{}return await Promise.all(a.map(async a=>{let b=a.modelStr,c=(0,x.parseModel)(b),g=a.provider||c.provider||c.providerAlias||"unknown",h=c.model||b,i=f[`${g}/${h}`]||null,j=Number(i?.totalRequests),k=Number.isFinite(j)&&j>=10,l=1;try{let a=await e(g,h),b=Number(a?.input);Number.isFinite(b)&&b>=0&&(l=b)}catch{}let m=d?.byModel?.[b]||null,n=Number(m?.avgLatencyMs),o=Number(m?.successRate),p=Number(i?.p95LatencyMs),q=Number(i?.latencyStdDev),r=Number(i?.successRate),s=k?Number.isFinite(p)&&p>0?p:aw(h):Number.isFinite(n)&&n>0?n:aw(h),t=k?Number.isFinite(r)&&r>=0&&r<=1?1-r:.05:Number.isFinite(o)&&o>=0&&o<=100?1-o/100:.05,u=k&&Number.isFinite(q)&&q>0?Math.max(10,q):Math.max(10,.1*s),w=(0,v.qF)(g)?.getStatus?.()?.state;return{stepId:a.stepId,executionKey:a.executionKey,modelStr:b,provider:g,model:h,quotaRemaining:100,quotaTotal:100,circuitBreakerState:"OPEN"===w||"HALF_OPEN"===w?w:"CLOSED",costPer1MTokens:l,p95LatencyMs:s,latencyStdDev:u,errorRate:t,accountTier:"standard",quotaResetIntervalSecs:86400}}))}function ay(a){let b=new Set;return a.filter(a=>!b.has(a.executionKey)&&(b.add(a.executionKey),!0))}async function az(a,b,c){let{tags:d,matchMode:e}=(0,aa.VZ)(b);if(0===d.length||0===a.length)return a;let f=Array.from(new Set(a.map(a=>a.providerId||a.provider))).filter(a=>"string"==typeof a&&a.length>0),g=new Map;await Promise.all(f.map(async a=>{try{let b=await (0,$.getProviderConnections)({provider:a,isActive:!0});g.set(a,Array.isArray(b)?b:[])}catch(b){c.warn?.("COMBO",`Tag routing failed to load connections for provider=${a}: ${b instanceof Error?b.message:String(b)}`),g.set(a,[])}}));let h=a.reduce((a,b)=>{let c=b.providerId||b.provider,f=(g.get(c)?.filter(a=>{let c="string"==typeof a.id&&a.id.trim().length>0?a.id:null;return!!c&&(!b.connectionId||c===b.connectionId)})||[]).filter(a=>(0,aa.RG)((0,aa.WL)(a.providerSpecificData),d,e)).map(a=>a.id).filter(a=>"string"==typeof a);return 0===f.length||(b.connectionId?a.push(b):a.push({...b,allowedConnectionIds:Array.from(new Set(f))})),a},[]);return 0===h.length?(c.info?.("COMBO",`Tag routing matched 0/${a.length} targets for [${d.join(", ")}] (${e}); falling back to the full target set`),a):(c.info?.("COMBO",`Tag routing matched ${h.length}/${a.length} targets for [${d.join(", ")}] (${e})`),h)}function aA(a,b){return b?ar(a,b):ap(a,null).filter(a=>a?.kind==="model")}async function aB({body:a,combo:b,handleSingleModel:f,isModelAvailable:g,log:i,settings:j,allCombos:q,relayOptions:r,signal:s}){let t=b.strategy||"priority",u="context-relay"===t?(0,o.fX)(r?.config||null):null,{body:v,pinnedModel:D}=function(a,b){var c;if(!b)return{body:a,pinnedModel:null};let d=Array.isArray(a.messages)?[...a.messages]:[],e=null;b.context_cache_protection&&(e=function(a){for(let b=a.length-1;b>=0;b--){let c=a[b];if("assistant"===c.role&&"string"==typeof c.content){let a=y.exec(c.content);if(a)return a[1]}}return null}(d))&&(a={...a,model:e}),b.system_message&&b.system_message.trim()&&(c=d,d=[{role:"system",content:b.system_message},...c.filter(a=>"system"!==a.role)]);let f=function(a,b){let c;if(!a||!b)return a;try{c=new RegExp(b)}catch{return console.warn(`[ComboAgent] Invalid tool_filter_regex: "${b}"`),a}return a.filter(a=>{let b=a.function?.name??a.name??"";return c.test(String(b))})}(a.tools,b.tool_filter_regex);return d=d.map(a=>"string"==typeof a.content&&y.test(a.content)?{...a,content:a.content.replace(y,"").trimEnd()}:a),{body:{...a,messages:d,...f!==a.tools&&{tools:f}},pinnedModel:e}}(a,b);a=v,D&&i.info("COMBO",`[#401] Context caching: pinned model=${D}`);let I=a?.stream===!0,J=b.context_cache_protection?async(a,b,c)=>{let d=await f(a,b,c);if(!d.ok)return d;if(!a.stream){try{let a=await d.clone().json(),c=a?.choices?.[0];if(c?.message){let e=function(a,b){let c=a.map(a=>"assistant"===a.role&&"string"==typeof a.content?{...a,content:a.content.replace(y,"").trimEnd()}:a),d=c.map(a=>a.role).lastIndexOf("assistant");if(-1===d)return[...c,{role:"assistant",content:`<omniModel>${b}</omniModel>`}];let e=c[d];if("string"!=typeof e.content)return[...c,{role:"assistant",content:`<omniModel>${b}</omniModel>`}];let f=[...c];return f[d]={...e,content:`${e.content}<omniModel>${b}</omniModel>`},f}([c.message],b),f=e[e.length-1],g={...a,choices:[{...c,message:f},...a.choices?.slice(1)||[]]};return new Response(JSON.stringify(g),{status:d.status,headers:d.headers})}}catch{}return d}if(!d.body)return d;let e=`<omniModel>${b}</omniModel>`,g=new TextEncoder,h=new TextDecoder,i=!1,j=new TransformStream({transform(a,b){if(i)return void b.enqueue(a);let c=h.decode(a,{stream:!0});if(c.match(/"content":"([^"]+)/)){let a=c.replace(/"content":"([^"]+)/,`"content":"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}$1`);i=!0,b.enqueue(g.encode(a));return}if(c.includes('"finish_reason"')&&!c.includes('"finish_reason":null')){let c=`data: ${JSON.stringify({choices:[{delta:{content:e},index:0,finish_reason:null}]})}
53
+ ${b}`:e};if(Array.isArray(c.messages)&&0===c.messages.length){let{messages:a,...b}=c;return b}return c}let f=Array.isArray(a.messages)?[...a.messages]:[];return{...a,messages:[{role:"system",content:e},...f]}}},99168:(a,b,c)=>{c.d(b,{Pr:()=>ax,resolveComboTargets:()=>aw});var d=c(19454),e=c(86648);function f(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function g(){return{requests:0,successes:0,failures:0,totalLatencyMs:0,lastStatus:null,lastUsedAt:null}}function h(a){return{totalRequests:0,totalSuccesses:0,totalFailures:0,totalFallbacks:0,totalLatencyMs:0,strategy:a,lastUsedAt:null,intentCounts:{},byModel:{},byTarget:{}}}function i(a,b,c,d){if(a.requests++,a.totalLatencyMs+=c,a.lastUsedAt=d,b){a.successes++,a.lastStatus="ok";return}a.failures++,a.lastStatus="error"}function j(a){return{...a,avgLatencyMs:a.requests>0?Math.round(a.totalLatencyMs/a.requests):0,successRate:a.requests>0?Math.round(a.successes/a.requests*100):0}}let k=new Map;function l(a,b,{success:c,latencyMs:d,fallbackCount:e=0,strategy:j="priority",target:m}){var n;let o,p;k.has(a)||k.set(a,h(j));let q=k.get(a);if(!q)return;let r=new Date().toISOString();if(q.totalRequests++,q.totalLatencyMs+=d,q.totalFallbacks+=e,q.lastUsedAt=r,q.strategy=j,c?q.totalSuccesses++:q.totalFailures++,!b)return;q.byModel[b]||(q.byModel[b]=g()),i(q.byModel[b],c,d,r);let s=(o=f((n=m||{}).executionKey)||f(b),p=f(b),o&&p?{executionKey:o,stepId:f(n.stepId),model:p,provider:f(n.provider)||function(a){let b=f(a);if(!b)return null;let[c]=b.split("/");return f(c)}(p),providerId:f(n.providerId),connectionId:null===n.connectionId?null:f(n.connectionId)??null,label:null===n.label?null:f(n.label)??null,...g()}:null);if(!s)return;q.byTarget[s.executionKey]||(q.byTarget[s.executionKey]=s);let t=q.byTarget[s.executionKey];t.stepId=s.stepId||t.stepId,t.provider=s.provider||t.provider,t.providerId=s.providerId||t.providerId,t.connectionId=m?.connectionId===null?null:s.connectionId??t.connectionId,t.label=m?.label===null?null:s.label??t.label,i(t,c,d,r)}function m(a){let b=k.get(a);return b?{...b,avgLatencyMs:b.totalRequests>0?Math.round(b.totalLatencyMs/b.totalRequests):0,successRate:b.totalRequests>0?Math.round(b.totalSuccesses/b.totalRequests*100):0,fallbackRate:b.totalRequests>0?Math.round(b.totalFallbacks/b.totalRequests*100):0,intentCounts:{...b.intentCounts},byModel:Object.fromEntries(Object.entries(b.byModel).map(([a,b])=>[a,j(b)])),byTarget:Object.fromEntries(Object.entries(b.byTarget).map(([a,b])=>[a,j(b)]))}:null}var n=c(49877),o=c(93798),p=c(88709);let q=new Map;function r(a,b=3){q.has(a)||q.set(a,{running:0,max:b,queue:[],rateLimitedUntil:null});let c=q.get(a);return c.max=b,c}function s(a){return!!a.rateLimitedUntil&&(!(Date.now()>=a.rateLimitedUntil)||(a.rateLimitedUntil=null,!1))}function t(a){let b=q.get(a);if(b)for(;b.queue.length>0&&b.running<b.max&&!s(b);){let c=b.queue.shift();clearTimeout(c.timer),b.running++,c.resolve(u(a))}}function u(a){let b=!1;return()=>{if(b)return;b=!0;let c=q.get(a);c&&c.running>0&&(c.running--,t(a))}}var v=c(73159),w=c(60),x=c(41966);let y=/(?:\\n|\n|\r)*<omniModel>([^<]+)<\/omniModel>(?:\\n|\n|\r)*/,z=["function","class","import","def","SELECT","async","await","const","let","var","return","```","algorithm","compile","debug","refactor","typescript","python","javascript","code","implement","write a","create a component","endpoint","repository","deploy","install","script","api","database","query","schema","interface","generic","enum","module","package","dependency","fun\xe7\xe3o","classe","importar","definir","consulta","ass\xedncrono","aguardar","constante","vari\xe1vel","retornar","algoritmo","compilar","depurar","refatorar","c\xf3digo","implementar","criar um","componente","como fazer","reposit\xf3rio","configurar","instalar","banco de dados","escrever uma fun\xe7\xe3o","criar uma classe","funci\xf3n","clase","importar","definir","consulta","as\xedncrono","esperar","constante","variable","retornar","algoritmo","compilar","depurar","refactorizar","c\xf3digo","implementar","函数","类","导入","定义","查询","异步","等待","常量","变量","返回","算法","编译","调试","代码","関数","クラス","インポート","非同期","定数","変数","コード","アルゴリズム","функция","класс","импорт","запрос","асинхронный","константа","переменная","алгоритм","код","funktion","klasse","importieren","abfrage","asynchron","konstante","variable","algorithmus","code","함수","클래스","가져오기","정의","쿼리","비동기","대기","상수","변수","반환","코드","دالة","فئة","استيراد","استعلام","غير متزامن","ثابت","متغير","كود","خوارزمية"],A=["prove","theorem","derive","step by step","chain of thought","formally","mathematical","proof","logically","analyze","reasoning","deduce","infer","hypothesis","convergence","provar","teorema","derivar","passo a passo","cadeia de pensamento","formalmente","matem\xe1tico","prova","logicamente","analisar","racioc\xednio","deduzir","inferir","hip\xf3tese","demonstrar","c\xe1lculo","equa\xe7\xe3o diferencial","integral","otimiza\xe7\xe3o","demostrar","teorema","derivar","paso a paso","formalmente","matem\xe1tico","l\xf3gicamente","证明","定理","推导","逐步","思维链","数学","逻辑","分析","証明","定理","導出","論理的","分析","доказать","теорема","шаг за шагом","математически","логически","beweisen","theorem","schritt f\xfcr schritt","mathematisch","logisch","증명","정리","단계별","수학적","논리적","إثبات","نظرية","خطوة بخطوة","رياضي","منطقياً"],B=["what is","define","translate","hello","yes or no","summarize","list","tell me","who is","o que \xe9","definir","traduzir","ol\xe1","oi","sim ou n\xe3o","resumir","listar","me diga","quem \xe9","quando foi","onde fica","explique brevemente","de forma simples","qu\xe9 es","definir","traducir","hola","resumir","listar","什么是","定义","翻译","你好","总结","列出","что такое","определить","перевести","привет","резюмировать","was ist","definieren","\xfcbersetzen","hallo","zusammenfassen","이란","정의","번역","안녕","요약","ما هو","تعريف","ترجمة","مرحبا","ملخص"],C={enabled:!0,simpleMaxWords:60},D={quota:.2,health:.25,costInv:.2,latencyInv:.15,taskFit:.1,stability:.05,tierPriority:.05};function E(a,b){return b.quota*a.quota+b.health*a.health+b.costInv*a.costInv+b.latencyInv*a.latencyInv+b.taskFit*a.taskFit+b.stability*a.stability+b.tierPriority*a.tierPriority}function F(a,b,c,d){var e,f;let g=Math.max(...b.map(a=>a.costPer1MTokens),.001),h=Math.max(...b.map(a=>a.p95LatencyMs),1),i=Math.max(...b.map(a=>a.latencyStdDev),.001);return{quota:Math.min(1,a.quotaRemaining/100),health:"CLOSED"===a.circuitBreakerState?1:.5*("HALF_OPEN"===a.circuitBreakerState),costInv:1-a.costPer1MTokens/g,latencyInv:1-a.p95LatencyMs/h,taskFit:d(a.model,c),stability:1-a.latencyStdDev/i,tierPriority:(e=a.accountTier,f=a.quotaResetIntervalSecs,Math.min(1,.8*(({ultra:1,pro:.67,standard:.33,free:0})[e?.toLowerCase()??""]??.33)+.2*(null!=f&&f>0?Math.max(0,1-f/2592e3):0)))}}function G(a,b,c=D,d=()=>.5){return a.map(e=>{let f=F(e,a,b,d);return{provider:e.provider,model:e.model,score:E(f,c),factors:f}}).sort((a,b)=>b.score-a.score)}let H={coding:{"claude-sonnet":.95,"claude-opus":.92,"claude-haiku":.78,"gpt-4o":.9,"gpt-4o-mini":.8,"gpt-4-turbo":.88,o1:.93,o3:.95,"o4-mini":.88,codex:.98,"gemini-pro":.85,"gemini-flash":.8,"gemini-2.5-pro":.92,"gemini-2.5-flash":.82,"deepseek-coder":.9,"deepseek-v3":.85,"deepseek-r1":.88,"deepseek-chat":.84,"deepseek-v3.2":.86,qwen:.78,llama:.72,mistral:.75,mixtral:.77,"grok-4-fast":.8,"grok-4":.82,"grok-3":.8,"kimi-k2":.82,"glm-5.1":.78,"glm-5":.78,"minimax-m2.5":.75,"minimax-m2":.72},review:{"claude-sonnet":.92,"claude-opus":.95,"claude-haiku":.7,"gpt-4o":.88,"gpt-4o-mini":.72,o1:.9,o3:.92,"gemini-pro":.9,"gemini-2.5-pro":.93,"gemini-flash":.75,"deepseek-r1":.85,"deepseek-v3":.8},planning:{"claude-opus":.95,"claude-sonnet":.9,"gpt-4o":.88,o1:.92,o3:.95,"gemini-2.5-pro":.93,"gemini-pro":.88,"deepseek-r1":.85},analysis:{"claude-opus":.95,"claude-sonnet":.92,"gemini-2.5-pro":.95,"gemini-pro":.88,"gemini-3.1-pro":.95,"gpt-4o":.85,o1:.9,o3:.93,"deepseek-r1":.88,"deepseek-chat":.8,"kimi-k2":.82,"glm-5.1":.82,"glm-5":.78,"minimax-m2.5":.76},debugging:{"claude-sonnet":.93,"claude-opus":.9,"gpt-4o":.88,o1:.85,"deepseek-coder":.9,"deepseek-v3":.82,"gemini-flash":.78,codex:.92},documentation:{"claude-sonnet":.9,"claude-opus":.88,"gpt-4o":.92,"gpt-4o-mini":.85,"gemini-pro":.88,"gemini-flash":.82,"deepseek-v3":.78},default:{"claude-sonnet":.85,"claude-opus":.85,"gpt-4o":.85,"gemini-pro":.8,"gemini-3.1-pro":.85,"deepseek-v3":.75,"deepseek-chat":.74,"gemini-flash":.72,"grok-4-fast":.72,"grok-4":.74,"grok-3":.73,"kimi-k2":.76,"glm-5.1":.75,"glm-5":.7,"minimax-m2.5":.7}},I=[{pattern:"coder",taskType:"coding",boost:.15},{pattern:"code",taskType:"coding",boost:.1},{pattern:"fast",taskType:"coding",boost:.05},{pattern:"thinking",taskType:"planning",boost:.1},{pattern:"thinking",taskType:"analysis",boost:.1}];function J(a,b){let c=a.toLowerCase(),d=b.toLowerCase();for(let[a,b]of Object.entries(H[d]||H.default))if(c.includes(a))return b;let e=.5;for(let a of I)c.includes(a.pattern)&&d===a.taskType&&(e+=a.boost);return Math.min(1,e)}let K={"ship-fast":{quota:.15,health:.3,costInv:.05,latencyInv:.35,taskFit:.1,stability:0,tierPriority:.05},"cost-saver":{quota:.15,health:.2,costInv:.4,latencyInv:.05,taskFit:.1,stability:.05,tierPriority:.05},"quality-first":{quota:.1,health:.2,costInv:.05,latencyInv:.05,taskFit:.4,stability:.15,tierPriority:.05},"offline-friendly":{quota:.4,health:.3,costInv:.1,latencyInv:.05,taskFit:0,stability:.1,tierPriority:.05}};class L{isExcluded(a){let b=this.exclusions.get(a);return!(!b||Date.now()-b.excludedAt>b.cooldownMs)}evaluate(a,b,c){let d=this.exclusions.get(a);if(d&&b>=.3&&Date.now()-d.excludedAt>d.cooldownMs)return this.exclusions.delete(a),{excluded:!1,reason:`Re-admitted: score ${b.toFixed(2)} >= 0.3`};if(this.isExcluded(a))return"HALF_OPEN"===c&&d?(d.probeCount++,{excluded:!1,isProbe:!0,reason:`Probe request #${d.probeCount}`}):{excluded:!0,reason:d?.reason||"Excluded"};if(b<.2){let c=d?Math.min(2*d.cooldownMs,18e5):3e5;return this.exclusions.set(a,{provider:a,excludedAt:Date.now(),cooldownMs:c,reason:`Score ${b.toFixed(2)} < 0.2`,probeCount:0}),{excluded:!0,reason:`Excluded: score ${b.toFixed(2)} below threshold`}}return"OPEN"===c?(this.exclusions.set(a,{provider:a,excludedAt:Date.now(),cooldownMs:3e5,reason:"Circuit breaker OPEN",probeCount:0}),{excluded:!0,reason:"Circuit breaker OPEN"}):{excluded:!1}}recordProbeResult(a,b){let c=this.exclusions.get(a);c&&(b&&c.probeCount>=3?this.exclusions.delete(a):b||(c.cooldownMs=Math.min(2*c.cooldownMs,18e5),c.excludedAt=Date.now(),c.probeCount=0))}updateIncidentMode(a){let b=a.length;if(0===b)return this.incidentMode=!1,!1;let c=a.filter(a=>"OPEN"===a).length;return this.incidentMode=c/b>.5,this.incidentMode}isInIncidentMode(){return this.incidentMode}getExclusions(){return[...this.exclusions.values()]}getStatus(){let a=Date.now();return{exclusionCount:this.exclusions.size,incidentMode:this.incidentMode,exclusions:[...this.exclusions.values()].map(b=>({provider:b.provider,reason:b.reason,remainingMs:Math.max(0,b.cooldownMs-(a-b.excludedAt))}))}}constructor(){this.exclusions=new Map,this.incidentMode=!1}}let M=null;class N{select(a,b){let c=a.filter(a=>"OPEN"!==a.circuitBreakerState),d=G(c.length>0?c:a,b.taskType,void 0,J),e=d[0];if(!e)throw Error("[RulesStrategy] No candidates to score");return{provider:e.provider,model:e.model,strategy:this.name,reason:`RulesStrategy: score=${e.score.toFixed(3)} (quota=${e.factors.quota.toFixed(2)}, health=${e.factors.health.toFixed(2)}, cost=${e.factors.costInv.toFixed(2)}, taskFit=${e.factors.taskFit.toFixed(2)})`,candidatesConsidered:d.length,finalScore:e.score}}constructor(){this.name="rules",this.description="6-factor weighted scoring: quota, health, cost, latency, taskFit, stability"}}class O{select(a,b){let c=a.filter(a=>"OPEN"!==a.circuitBreakerState),d=c.length>0?c:a,e=[...d].sort((a,b)=>a.costPer1MTokens-b.costPer1MTokens)[0];if(!e)throw Error("[CostStrategy] No candidates available");return{provider:e.provider,model:e.model,strategy:this.name,reason:`CostStrategy: cheapest at $${e.costPer1MTokens.toFixed(3)}/1M tokens`,candidatesConsidered:d.length,finalScore:0===e.costPer1MTokens?1:1/e.costPer1MTokens}}constructor(){this.name="cost",this.description="Always selects cheapest available provider (by costPer1MTokens)"}}class P{select(a,b){let c=a.filter(a=>"OPEN"!==a.circuitBreakerState),d=c.length>0?c:a,e=[...d].sort((a,b)=>{let c=1e3*a.errorRate,d=1e3*b.errorRate;return a.p95LatencyMs+c-(b.p95LatencyMs+d)})[0];if(!e)throw Error("[LatencyStrategy] No candidates available");let f=e.p95LatencyMs>0?Math.max(.001,1e4/e.p95LatencyMs):1,g=Math.max(0,1-e.errorRate);return{provider:e.provider,model:e.model,strategy:this.name,reason:`LatencyStrategy: p95=${e.p95LatencyMs}ms, errorRate=${(100*e.errorRate).toFixed(2)}%`,candidatesConsidered:d.length,finalScore:.7*f+.3*g}}constructor(){this.name="latency",this.description="Prioritizes lowest p95 latency with reliability weighting"}}class Q{select(a,b){if(!1===b.lkgpEnabled)return W("rules").select(a,b);if(b.lastKnownGoodProvider){let c=a.find(a=>a.provider===b.lastKnownGoodProvider&&"OPEN"!==a.circuitBreakerState);if(c)return{provider:c.provider,model:c.model,strategy:this.name,reason:`LKGP: using last known good provider ${c.provider}`,candidatesConsidered:1,finalScore:1}}return W("rules").select(a,b)}constructor(){this.name="lkgp",this.description="Tries last known good provider first, then falls back to rules"}}let R=new Map,S=new N,T=new O,U=new P,V=new Q;function W(a){let b=R.get(a);return b||(console.warn(`[RouterStrategy] Strategy '${a}' not found, falling back to 'rules'`),S)}R.set("rules",S),R.set("cost",T),R.set("eco",T),R.set("latency",U),R.set("fast",U),R.set("lkgp",V);var X=c(56757),Y=c(93786),Z=c(42476),$=c(20561),_=c(98506);let aa=[429,502,503,504],ab=[/unavailable/i,/service temporarily unavailable/i];function ac(a){return(0,e.yj)(404,a)}let ad={"grok-4-fast-non-reasoning":1143,"grok-4-1-fast-non-reasoning":1244,"gemini-2.5-flash":1238,"kimi-k2.5":1646,"gpt-4o-mini":2764,"claude-sonnet-4.6":4e3,"claude-opus-4.6":6e3,"deepseek-chat":2e3};function ae(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function af(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}async function ag(a,b,c){let d,e,f;if(b)return{valid:!0};let g=a.headers.get("content-type")||"";if(!g.includes("application/json")&&!g.includes("text/"))return{valid:!0};try{d=a.clone()}catch{return{valid:!0}}try{e=await d.text()}catch{return{valid:!0}}if(!e||0===e.trim().length)return{valid:!1,reason:"empty response body"};try{f=JSON.parse(e)}catch{if(e.startsWith("data:"))return{valid:!0};return{valid:!1,reason:"response is not valid JSON"}}let h=f?.choices;if(!Array.isArray(h)||0===h.length){if(f?.output||f?.result||f?.data||f?.response)return{valid:!0};if(f?.error){let a=f.error;return{valid:!1,reason:`upstream error in 200 body: ${a?.message||JSON.stringify(f.error).substring(0,200)}`}}return{valid:!0}}let i=h[0],j=i?.message||i?.delta;if(!j)return{valid:!1,reason:"choice has no message object"};let k=j.content,l=j.tool_calls,m=Array.isArray(l)&&l.length>0;return null!=k&&""!==k||m?{valid:!0,clonedResponse:new Response(e,{status:a.status,statusText:a.statusText,headers:a.headers})}:{valid:!1,reason:"empty content and no tool_calls in response"}}let ah=new Map;function ai(a){if(!a||"object"!=typeof a)return!1;let b=a.error;return!!b&&"object"==typeof b&&"STREAM_READINESS_TIMEOUT"===b.code}function aj(a){return{executionKey:a.executionKey,stepId:a.stepId,provider:a.provider,providerId:a.providerId,connectionId:a.connectionId,label:a.label}}function ak(a,b,c,d,e=[]){var f;let g,h=(0,$.Sw)(a,{comboName:b,index:c,allCombos:d});if(!h)return null;let i=[...e,h.id].join(">"),j="string"==typeof h.label?h.label:null,k=h.weight||0;if("combo-ref"===h.kind)return{kind:"combo-ref",stepId:h.id,executionKey:i,comboName:h.comboName,weight:k,label:j};let l=(0,$.Dx)(h);return l?{kind:"model",stepId:h.id,executionKey:i,modelStr:l,provider:(f=h.providerId,g=(0,x.parseModel)(l),f||g.provider||g.providerAlias||"unknown"),providerId:h.providerId||null,connectionId:h.connectionId||null,weight:k,label:j}:null}function al(a){let b=ae(a?.config)?a.config.compositeTiers:null;if(!ae(b))return[];let c=af(b.defaultTier),d=ae(b.tiers)?b.tiers:null;if(!c||!d)return[];let e=[],f=new Set,g=new Set,h=new Map(Object.entries(d).map(([a,b])=>{if(!ae(b))return null;let c=af(a),d=af(b.stepId),e=af(b.fallbackTier);return c&&d?[c,{stepId:d,fallbackTier:e}]:null}).filter(Boolean)),i=c;for(;i&&h.has(i)&&!f.has(i);){f.add(i);let a=h.get(i);if(!a)break;g.has(a.stepId)||(e.push(a.stepId),g.add(a.stepId)),i=a.fallbackTier}for(let a of h.values())g.has(a.stepId)||(e.push(a.stepId),g.add(a.stepId));return e}function am(a,b,c=[]){return function(a,b){let c=al(b);if(0===c.length)return a;let d=new Map(a.map(a=>[a.stepId,a])),e=new Set,f=[];for(let a of c){let b=d.get(a);!b||e.has(b.stepId)||(f.push(b),e.add(b.stepId))}for(let b of a)e.has(b.stepId)||(f.push(b),e.add(b.stepId));return f}(function(a,b,c=[]){return(a.models||[]).map((d,e)=>ak(d,a.name,e,b,c)).filter(a=>null!==a)}(a,b,c),a)}function an(a,b,c=new Set,d=0,e=[]){if("model"===a.kind)return[a];if(d>3)return[];let f=Array.isArray(b)?b:b?.combos||[],g=f.find(b=>b.name===a.comboName);return!g||c.has(a.comboName)?[]:ao(g,f,new Set(c),d+1,[...e,a.stepId])}function ao(a,b,c=new Set,d=0,e=[]){let f=(a.models||[]).map((b,c)=>ak(b,a.name,c,null,e)).filter(a=>a?.kind==="model");if(d>3)return f;if(c.has(a.name))return[];c.add(a.name);let g=am(a,b,e),h=[];for(let a of g){if("combo-ref"===a.kind){h.push(...an(a,b,new Set(c),d,e));continue}h.push(a)}return h}async function ap(a){try{let{getPricingForModel:b}=await Promise.resolve().then(c.bind(c,73671)),d=await Promise.all(a.map(async a=>{let c=(0,x.parseModel)(a),d=c.provider||c.providerAlias||"unknown",e=c.model||a;try{let c=await b(d,e);return{modelStr:a,cost:c?.input??1/0}}catch{return{modelStr:a,cost:1/0}}}));return d.sort((a,b)=>a.cost-b.cost),d.map(a=>a.modelStr)}catch{return a}}async function aq(a){let b=await ap(a.map(a=>a.modelStr)),c=new Map;for(let b of a){let a=c.get(b.modelStr)||[];a.push(b),c.set(b.modelStr,a)}return b.map(a=>{let b=c.get(a);return b?.shift()||null}).filter(a=>null!==a)}function ar(a){return Array.isArray(a)?a.map(a=>"string"==typeof a?a.trim():"").filter(Boolean):"string"==typeof a?a.split(",").map(a=>a.trim()).filter(Boolean):[]}function as(a){return ad[String(a||"").toLowerCase()]??1500}async function at(a,b){let d=m(b),{getPricingForModel:e}=await Promise.resolve().then(c.bind(c,73671)),f={};try{let{getModelLatencyStats:a}=await Promise.resolve().then(c.bind(c,11283));f=await a({windowHours:24,minSamples:3,maxRows:1e4})}catch{}return await Promise.all(a.map(async a=>{let b=a.modelStr,c=(0,x.parseModel)(b),g=a.provider||c.provider||c.providerAlias||"unknown",h=c.model||b,i=f[`${g}/${h}`]||null,j=Number(i?.totalRequests),k=Number.isFinite(j)&&j>=10,l=1;try{let a=await e(g,h),b=Number(a?.input);Number.isFinite(b)&&b>=0&&(l=b)}catch{}let m=d?.byModel?.[b]||null,n=Number(m?.avgLatencyMs),o=Number(m?.successRate),p=Number(i?.p95LatencyMs),q=Number(i?.latencyStdDev),r=Number(i?.successRate),s=k?Number.isFinite(p)&&p>0?p:as(h):Number.isFinite(n)&&n>0?n:as(h),t=k?Number.isFinite(r)&&r>=0&&r<=1?1-r:.05:Number.isFinite(o)&&o>=0&&o<=100?1-o/100:.05,u=k&&Number.isFinite(q)&&q>0?Math.max(10,q):Math.max(10,.1*s),w=(0,v.qF)(g)?.getStatus?.()?.state;return{stepId:a.stepId,executionKey:a.executionKey,modelStr:b,provider:g,model:h,quotaRemaining:100,quotaTotal:100,circuitBreakerState:"OPEN"===w||"HALF_OPEN"===w?w:"CLOSED",costPer1MTokens:l,p95LatencyMs:s,latencyStdDev:u,errorRate:t,accountTier:"standard",quotaResetIntervalSecs:86400}}))}function au(a){let b=new Set;return a.filter(a=>!b.has(a.executionKey)&&(b.add(a.executionKey),!0))}async function av(a,b,c){let{tags:d,matchMode:e}=(0,_.VZ)(b);if(0===d.length||0===a.length)return a;let f=Array.from(new Set(a.map(a=>a.providerId||a.provider))).filter(a=>"string"==typeof a&&a.length>0),g=new Map;await Promise.all(f.map(async a=>{try{let b=await (0,Z.getProviderConnections)({provider:a,isActive:!0});g.set(a,Array.isArray(b)?b:[])}catch(b){c.warn?.("COMBO",`Tag routing failed to load connections for provider=${a}: ${b instanceof Error?b.message:String(b)}`),g.set(a,[])}}));let h=a.reduce((a,b)=>{let c=b.providerId||b.provider,f=(g.get(c)?.filter(a=>{let c="string"==typeof a.id&&a.id.trim().length>0?a.id:null;return!!c&&(!b.connectionId||c===b.connectionId)})||[]).filter(a=>(0,_.RG)((0,_.WL)(a.providerSpecificData),d,e)).map(a=>a.id).filter(a=>"string"==typeof a);return 0===f.length||(b.connectionId?a.push(b):a.push({...b,allowedConnectionIds:Array.from(new Set(f))})),a},[]);return 0===h.length?(c.info?.("COMBO",`Tag routing matched 0/${a.length} targets for [${d.join(", ")}] (${e}); falling back to the full target set`),a):(c.info?.("COMBO",`Tag routing matched ${h.length}/${a.length} targets for [${d.join(", ")}] (${e})`),h)}function aw(a,b){return b?ao(a,b):am(a,null).filter(a=>a?.kind==="model")}async function ax({body:a,combo:b,handleSingleModel:f,isModelAvailable:g,log:i,settings:j,allCombos:q,relayOptions:r,signal:s}){let t=b.strategy||"priority",u="context-relay"===t?(0,o.fX)(r?.config||null):null,{body:v,pinnedModel:H}=function(a,b){var c;if(!b)return{body:a,pinnedModel:null};let d=Array.isArray(a.messages)?[...a.messages]:[],e=null;b.context_cache_protection&&(e=function(a){for(let b=a.length-1;b>=0;b--){let c=a[b];if("assistant"===c.role&&"string"==typeof c.content){let a=y.exec(c.content);if(a)return a[1]}}return null}(d))&&(a={...a,model:e}),b.system_message&&b.system_message.trim()&&(c=d,d=[{role:"system",content:b.system_message},...c.filter(a=>"system"!==a.role)]);let f=function(a,b){let c;if(!a||!b)return a;try{c=new RegExp(b)}catch{return console.warn(`[ComboAgent] Invalid tool_filter_regex: "${b}"`),a}return a.filter(a=>{let b=a.function?.name??a.name??"";return c.test(String(b))})}(a.tools,b.tool_filter_regex);return d=d.map(a=>"string"==typeof a.content&&y.test(a.content)?{...a,content:a.content.replace(y,"").trimEnd()}:a),{body:{...a,messages:d,...f!==a.tools&&{tools:f}},pinnedModel:e}}(a,b);a=v,H&&i.info("COMBO",`[#401] Context caching: pinned model=${H}`);let I=a?.stream===!0,N=b.context_cache_protection?async(a,b,c)=>{let d=await f(a,b,c);if(!d.ok)return d;if(!a.stream){try{let a=await d.clone().json(),c=a?.choices?.[0];if(c?.message){let e=function(a,b){let c=a.map(a=>"assistant"===a.role&&"string"==typeof a.content?{...a,content:a.content.replace(y,"").trimEnd()}:a),d=c.map(a=>a.role).lastIndexOf("assistant");if(-1===d)return[...c,{role:"assistant",content:`<omniModel>${b}</omniModel>`}];let e=c[d];if("string"!=typeof e.content)return[...c,{role:"assistant",content:`<omniModel>${b}</omniModel>`}];let f=[...c];return f[d]={...e,content:`${e.content}<omniModel>${b}</omniModel>`},f}([c.message],b),f=e[e.length-1],g={...a,choices:[{...c,message:f},...a.choices?.slice(1)||[]]};return new Response(JSON.stringify(g),{status:d.status,headers:d.headers})}}catch{}return d}if(!d.body)return d;let e=`<omniModel>${b}</omniModel>`,g=new TextEncoder,h=new TextDecoder,i=!1,j=new TransformStream({transform(a,b){if(i)return void b.enqueue(a);let c=h.decode(a,{stream:!0});if(c.match(/"content":"([^"]+)/)){let a=c.replace(/"content":"([^"]+)/,`"content":"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}$1`);i=!0,b.enqueue(g.encode(a));return}if(c.includes('"finish_reason"')&&!c.includes('"finish_reason":null')){let c=`data: ${JSON.stringify({choices:[{delta:{content:e},index:0,finish_reason:null}]})}
54
54
 
55
55
  `;i=!0,b.enqueue(g.encode(c)),b.enqueue(a);return}b.enqueue(a)},flush(a){if(!i){let b=`data: ${JSON.stringify({choices:[{delta:{content:e},index:0,finish_reason:null}]})}
56
56
 
57
- `;a.enqueue(g.encode(b))}}}),k=new TextDecoder,l=new TransformStream({transform(a,b){let c=k.decode(a,{stream:!0});if(c)if(c.includes("<omniModel>")){let a=c.replace(/(?:\\n|\n|\r)*<omniModel>[^<]+<\/omniModel>(?:\\n|\n|\r)*/g,"");a&&b.enqueue(g.encode(a))}else b.enqueue(g.encode(c))},flush(a){let b=k.decode();if(b)if(b.includes("<omniModel>")){let c=b.replace(/(?:\\n|\n|\r)*<omniModel>[^<]+<\/omniModel>(?:\\n|\n|\r)*/g,"");c&&a.enqueue(g.encode(c))}else a.enqueue(g.encode(b))}}),m=d.body.pipeThrough(j).pipeThrough(l),n=new Headers(d.headers);return n.set("X-OmniRoute-Model",b),new Response(m,{status:d.status,headers:n})}:f;if(D)return i.info("COMBO",`Bypassing strategy — routing directly to pinned context model: ${D}`),J(a,D);if("round-robin"===t)return aC({body:a,combo:b,handleSingleModel:J,isModelAvailable:g,log:i,settings:j,allCombos:q,signal:s});let O=j?(0,n.Z)(b,j):{...(0,n.E)(),...b.config||{}},P=O.maxRetries??1,Q=O.retryDelayMs??2e3,R="weighted"===t?function(a,b){let c=ap(a,b);if(0===c.length)return{orderedTargets:[],selectedStep:null};let d=function(a){if(0===a.length)return null;let b=a.reduce((a,b)=>a+(b.weight||0),0);if(b<=0)return a[Math.floor(Math.random()*a.length)];let c=Math.random()*b;for(let b of a)if((c-=b.weight||0)<=0)return b;return a[a.length-1]}(c);return d?{orderedTargets:ay((function(a,b,c=!1){let d=a.find(a=>a.executionKey===b),e=a.filter(a=>a.executionKey!==b);return c||e.sort((a,b)=>b.weight-a.weight),[d,...e].filter(Boolean)})(c,d.executionKey,ao(a).length>0).flatMap(c=>b?aq(c,b,new Set([a.name])):"model"===c.kind?[c]:[])),selectedStep:d}:{orderedTargets:[],selectedStep:null}}(b,q)?.orderedTargets||[]:aA(b,q);if(R=await az(R,a,i),"weighted"===t?i.info("COMBO",`Weighted selection${q?" with nested resolution":""}: ${R.length} total targets`):q&&i.info("COMBO",`${t} with nested resolution: ${R.length} total targets`),"auto"===t){var S;let d,e,f=Array.isArray(a?.tools)&&a.tools.length>0,g=[...R];if(f){let a=g.filter(a=>(0,Y.P5)(a.modelStr));a.length>0?g=a:i.warn("COMBO","Auto strategy: all candidates filtered by tool-calling policy, falling back to full pool")}let l=function(a){if(!a||"object"!=typeof a)return"";let b=Array.isArray(a.messages)?[...a.messages].reverse().find(a=>a&&"object"==typeof a&&"user"===a.role):null;if(b){var c;return"string"==typeof(c=b.content)?c:Array.isArray(c)?c.map(a=>a&&"object"==typeof a&&"string"==typeof a.text?a.text:"").join("\n"):""}if("string"==typeof a.input)return a.input;if(Array.isArray(a.input)){let b=a.input.map(a=>a&&"object"==typeof a?"string"==typeof a.content?a.content:"string"==typeof a.text?a.text:"":"").filter(Boolean).join("\n");if(b)return b}return"string"==typeof a.prompt?a.prompt:""}(a),m="string"==typeof b?.system_message?b.system_message:void 0,n=function(a,b,c){if(!b.enabled)return"medium";let d=`${c??""} ${a}`.toLowerCase(),e=a.trim().split(/\s+/).length,f=b.simpleMaxWords??60,g=[...z,...b.extraCodeKeywords??[]],h=[...A,...b.extraReasoningKeywords??[]],i=[...B,...b.extraSimpleKeywords??[]];for(let a of g)if(d.includes(a.toLowerCase()))return"code";for(let a of h)if(d.includes(a.toLowerCase()))return"reasoning";if(e<f){for(let a of i)if(d.includes(a.toLowerCase()))return"simple"}return"medium"}(l,(e=b?.autoConfig?.intentConfig||b?.config?.auto?.intentConfig||b?.config?.intentConfig||{},{...C,...e,..."boolean"==typeof j?.intentDetectionEnabled?{enabled:j.intentDetectionEnabled}:{},...Number.isFinite(Number(j?.intentSimpleMaxWords))?{simpleMaxWords:Number(j.intentSimpleMaxWords)}:{},...av(j?.intentExtraCodeKeywords).length>0?{extraCodeKeywords:av(j.intentExtraCodeKeywords)}:{},...av(j?.intentExtraReasoningKeywords).length>0?{extraReasoningKeywords:av(j.intentExtraReasoningKeywords)}:{},...av(j?.intentExtraSimpleKeywords).length>0?{extraSimpleKeywords:av(j.intentExtraSimpleKeywords)}:{}}),m);!function(a,b){k.has(a)||k.set(a,h("priority"));let c=k.get(a);if(!c)return;let d=String(b||"unknown");c.intentCounts[d]=(c.intentCounts[d]||0)+1}(b.name,n);let o=function(a){switch(a){case"code":return"coding";case"reasoning":return"analysis";default:return"default"}}(n),p=b?.autoConfig||b?.config?.auto||b?.config||{},q="string"==typeof p.routingStrategy?p.routingStrategy:"string"==typeof p.strategyName?p.strategyName:"rules",r=Array.isArray(p.candidatePool)?p.candidatePool:[...new Set(g.map(a=>a.provider))],s=p.weights&&"object"==typeof p.weights?p.weights:E,t=Number.isFinite(Number(p.explorationRate))?Number(p.explorationRate):.05,u=Number.isFinite(Number(p.budgetCap))?Number(p.budgetCap):void 0,v="string"==typeof p.modePack?p.modePack:void 0;try{let{getLKGP:a}=await Promise.resolve().then(c.bind(c,73671)),e=await a(b.name,b.id||b.name);e&&(d=e)}catch(a){i.warn("COMBO","Failed to retrieve Last Known Good Provider. This is non-fatal.",{err:a})}let w=await ax(g,b.name);if(w.length>0){let a,c=null,e=null,h="";if("rules"!==q)try{let a=function(a,b,c="rules"){return X(c).select(a,b)}(w,{taskType:o,requestHasTools:f,lastKnownGoodProvider:d},q);c=a.provider,e=a.model,h=a.reason}catch(a){i.warn("COMBO",`Auto strategy '${q}' failed (${a?.message||"unknown"}), falling back to rules`)}if(!c||!e){let a=function(a,b,c="default"){let d,e=(N||(N=new M),N),f=a.weights;if(a.modePack){let b=L[a.modePack];b&&(f=b)}.01>Math.abs(Object.values(f).reduce((a,b)=>a+b,0)-1)||(f=E);let g=[],h=b.filter(b=>(!(a.candidatePool.length>0)||!!a.candidatePool.includes(b.provider))&&(!e.evaluate(b.provider,.5,b.circuitBreakerState).excluded||(g.push(b.provider),!1)));0===h.length&&(h.push(...b),g.length=0);let i=H(h,c,f,K),j=i.filter(a=>!e.evaluate(a.provider,a.score,"CLOSED").excluded||(g.push(a.provider),!1)),k=j.length>0?j:i,l=Math.random()<(e.isInIncidentMode()?0:a.explorationRate)&&k.length>1;if(l){let a=Math.floor(Math.random()*k.length);d=k[a]}else d=k[0];if(a.budgetCap){let c=b.find(a=>a.provider===d.provider);if(c&&c.costPer1MTokens/1e6*1e3>a.budgetCap){let a=k.map(a=>({...a,cost:b.find(b=>b.provider===a.provider)?.costPer1MTokens||0})).sort((a,b)=>a.cost-b.cost)[0];a&&(d=a)}}return{provider:d.provider,model:d.model,score:d.score,isExploration:l,factors:d.factors,excluded:g}}({id:b.id||b.name,name:b.name,type:"auto",candidatePool:r,weights:s,modePack:v,budgetCap:u,explorationRate:t},w,o);c=a.provider,e=a.model,h=`score=${a.score.toFixed(3)}${a.isExploration?" (exploration)":""}`}let j=(S=g,a=new Map(w.map(a=>[a.executionKey,a])),S.map(b=>{let c=a.get(b.executionKey);return c?{target:b,score:F(G(c,w,o,K),s)}:null}).filter(Boolean).sort((a,b)=>b.score-a.score)),k=j.map(a=>a.target),l=j.find(a=>{let b=(0,x.parseModel)(a.target.modelStr).model||a.target.modelStr;return a.target.provider===c&&b===e})?.target||k[0]||g[0];R=ay([l,...k,...g].filter(Boolean)),i.info("COMBO",`Auto selection: ${l?.modelStr||`${c}/${e}`} | intent=${n} task=${o} | strategy=${q} | ${h}`)}else i.warn("COMBO","Auto strategy has no candidates, keeping default ordering")}else if("lkgp"===t)try{let{getLKGP:a}=await Promise.resolve().then(c.bind(c,73671)),d=await a(b.name,b.id||b.name);if(d){let a=R.findIndex(a=>a.provider===d||a.modelStr.startsWith(`${d}/`));if(a>0){let[c]=R.splice(a,1);R.unshift(c),i.info("COMBO",`[LKGP] Prioritizing last known good provider ${d} for combo "${b.name}"`)}else 0===a&&i.debug("COMBO",`[LKGP] Last known good provider ${d} already first for combo "${b.name}"`)}}catch(a){i.warn("COMBO","Failed to retrieve Last Known Good Provider. This is non-fatal.",{err:a})}else if("strict-random"===t){let a=await (0,w.h$)(`combo:${b.name}`,R.map(a=>a.executionKey));R=[R.find(b=>b.executionKey===a)||null,...R.filter(b=>b.executionKey!==a)].filter(Boolean),i.info("COMBO",`Strict-random deck: ${a} selected (${R.length} targets)`)}else"random"===t?(R=(0,w.D)([...R]),i.info("COMBO",`Random shuffle: ${R.length} targets`)):"least-used"===t?(R=function(a,b){let c=function(a,b){let c=m(b);if(!c||!c.byModel)return a;let d=a.map(a=>({modelStr:a,requests:c.byModel[a]?.requests??0}));return d.sort((a,b)=>a.requests-b.requests),d.map(a=>a.modelStr)}(a.map(a=>a.modelStr),b),d=new Map;for(let b of a){let a=d.get(b.modelStr)||[];a.push(b),d.set(b.modelStr,a)}return c.map(a=>{let b=d.get(a);return b?.shift()||null}).filter(a=>null!==a)}(R,b.name),i.info("COMBO",`Least-used ordering: ${R[0]?.modelStr} has fewest requests`)):"cost-optimized"===t?(R=await at(R),i.info("COMBO",`Cost-optimized ordering: cheapest first (${R[0]?.modelStr})`)):"context-optimized"===t&&(R=function(a){let b,c=((b=a.map(a=>a.modelStr).map(a=>{let b=(0,x.parseModel)(a),c=b.provider||b.providerAlias||"unknown",d=b.model||a;return{modelStr:a,context:(0,Y.et)(c,d)??0}})).sort((a,b)=>b.context-a.context),b.map(a=>a.modelStr)),d=new Map;for(let b of a){let a=d.get(b.modelStr)||[];a.push(b),d.set(b.modelStr,a)}return c.map(a=>{let b=d.get(a);return b?.shift()||null}).filter(a=>null!==a)}(R),i.info("COMBO",`Context-optimized ordering: largest first (${R[0]?.modelStr})`));if(0===R.length)return af("Combo has no executable targets");let T=null,U=null,V=null,W=Date.now(),$=0,_=0,aa=0;for(let f=0;f<R.length;f++){let h=R[f],j=h.modelStr,k=h.provider,m=await (0,d.LN)(k);if(g&&!await g(j,h)){i.info("COMBO",`Skipping ${j} (all accounts in cooldown)`),f>0&&_++;continue}for(let g=0;g<=P;g++){if(s?.aborted)return i.info("COMBO",`Client disconnected — aborting combo loop before model ${j}`),(0,e.yj)(499,"Client disconnected");if(++$>30)return i.warn("COMBO","Maximum combo attempts (30) exceeded across all targets and fallbacks. Terminating loop to prevent runaway background requests."),(0,e.yj)(503,"Maximum combo retry limit reached");if(g>0&&(i.info("COMBO",`Retrying ${j} in ${Q}ms (attempt ${g+1}/${P+1})`),await new Promise(a=>{let b=setTimeout(a,Q);s?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),s?.aborted))return i.info("COMBO","Client disconnected during retry delay — aborting"),(0,e.yj)(499,"Client disconnected");i.info("COMBO",`Trying model ${f+1}/${R.length}: ${j}${g>0?` (retry ${g})`:""}`);let n=await J(a,j,h);if(n.ok){let d=await aj(n,I,i);if(!d.valid){i.warn("COMBO",`Model ${j} returned 200 but failed quality check: ${d.reason}`),l(b.name,j,{success:!1,latencyMs:Date.now()-W,fallbackCount:_,strategy:t,target:am(h)}),aa++,f>0&&_++;break}let e=Date.now()-W;if(i.info("COMBO",`Model ${j} succeeded (${e}ms, ${_} fallbacks)`),l(b.name,j,{success:!0,latencyMs:e,fallbackCount:_,strategy:t,target:am(h)}),aa++,"context-relay"===t&&r?.sessionId&&u&&u.handoffProviders.includes(k)&&"codex"===k){let c=(0,Z.bb)(r.sessionId);if(c){let d=await (0,p.GF)(c).catch(()=>null);if(d){let e=[d.window5h?.resetAt,d.window7d?.resetAt].filter(a=>"string"==typeof a&&a.length>0).sort(),f=Array.isArray(a?.messages)&&a.messages.length>0?a.messages:Array.isArray(a?.input)?a.input:[];(0,o.md)({sessionId:r.sessionId,comboName:b.name,connectionId:c,percentUsed:d.percentUsed,messages:f,model:j,expiresAt:e[0]||null,config:u,handleSingleModel:J})}}}if(k)try{let{setLKGP:a}=await Promise.resolve().then(c.bind(c,73671));await Promise.all([a(b.name,h.executionKey,k),a(b.name,b.id||b.name,k)])}catch(a){i.warn("COMBO","Failed to record Last Known Good Provider. This is non-fatal.",{err:a})}return d.clonedResponse??n}let q=n.statusText||"",v=null,w=null;try{let a=n.clone();try{let b=await a.text();b&&(q=b.substring(0,500),v=JSON.parse(b),q=v?.error?.message||v?.error||v?.message||q,w=v?.retryAfter||null)}catch{}}catch{}if(w&&(!U||new Date(w)<new Date(U))&&(U=w),"string"!=typeof q)try{q=JSON.stringify(q)}catch{q=String(q)}let x=ab(n,v),y=504===n.status&&al(v);if(499===n.status)return i.info("COMBO",`Client disconnected (499) during ${j} — stopping combo loop`),l(b.name,j,{success:!1,latencyMs:Date.now()-W,fallbackCount:_,strategy:t,target:am(h)}),aa++,n;if(x){T=q||String(n.status),V||(V=n.status),f>0&&_++,i.info("COMBO",`Skipping ${j}: provider circuit breaker OPEN for ${k}`);break}let{shouldFallback:z,cooldownMs:A}=(0,d.hk)(n.status,q,0,null,k,n.headers,m),B=au(n.status,q);if(!z&&!B)return i.warn("COMBO",`Model ${j} failed (no fallback)`,{status:n.status}),l(b.name,j,{success:!1,latencyMs:Date.now()-W,fallbackCount:_,strategy:t,target:am(h)}),aa++,n;B&&i.info("COMBO",`Treating provider-scoped 400 from ${j} as model-local failure; trying next combo target`);let C=!y&&[408,429,500,502,503,504].includes(n.status);if(g<P&&C)continue;l(b.name,j,{success:!1,latencyMs:Date.now()-W,fallbackCount:_,strategy:t,target:am(h)}),aa++,T=q||String(n.status),V||(V=n.status),f>0&&_++,i.warn("COMBO",`Model ${j} failed, trying next`,{status:n.status});let D=Q>0&&A>0&&A<=5e3?Math.min(A,Q):0;if([502,503,504].includes(n.status)&&D>0&&(i.info("COMBO",`Waiting ${D}ms before fallback to next model`),await new Promise(a=>{let b=setTimeout(a,D);s?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),s?.aborted))return i.info("COMBO","Client disconnected during fallback wait — aborting"),(0,e.yj)(499,"Client disconnected");break}}let ac=Date.now()-W;if(0===aa&&l(b.name,null,{success:!1,latencyMs:ac,fallbackCount:_,strategy:t}),!V)return new Response(JSON.stringify({error:{message:"Service temporarily unavailable: all upstream accounts are inactive",type:"service_unavailable",code:"ALL_ACCOUNTS_INACTIVE"}}),{status:503,headers:{"Content-Type":"application/json"}});let ad=V,ae=T||"All combo models unavailable";if(U){let a=(0,d.Qo)(U);return i.warn("COMBO",`All models failed | ${ae} (${a})`),(0,e.wO)(ad,ae,U,a)}return i.warn("COMBO",`All models failed | ${ae}`),new Response(JSON.stringify({error:{message:ae}}),{status:ad,headers:{"Content-Type":"application/json"}})}async function aC({body:a,combo:b,handleSingleModel:f,isModelAvailable:g,log:h,settings:i,allCombos:j,signal:k}){let m=i?(0,n.Z)(b,i):{...(0,n.E)(),...b.config||{}},o=m.concurrencyPerModel??3,p=m.queueTimeoutMs??3e4,q=m.maxRetries??1,v=m.retryDelayMs??2e3,w=aA(b,j),x=await az(w,a,h),y=x.length;if(0===y)return af("Round-robin combo has no executable targets");let z=ak.get(b.name)||0;ak.set(b.name,z+1);let A=z%y,B=a?.stream===!0,C=Date.now(),D=null,E=null,F=null,G=0,H=0,I=0;for(let i=0;i<y;i++){let j,m=x[(A+i)%y],n=m.modelStr,w=m.provider,J=await (0,d.LN)(w),K=`combo:${b.name}:${m.executionKey}`;if(g&&!await g(n,m)){h.info("COMBO-RR",`Skipping ${n} (all accounts in cooldown)`),i>0&&H++;continue}try{j=await function(a,{maxConcurrency:b=3,timeoutMs:c=3e4}={}){let d=r(a,b);return d.running<d.max&&!s(d)?(d.running++,Promise.resolve(u(a))):new Promise((b,e)=>{let f=setTimeout(()=>{let b=d.queue.findIndex(a=>a.timer===f);-1!==b&&d.queue.splice(b,1);let g=Error(`Semaphore timeout after ${c}ms for ${a}`);g.code="SEMAPHORE_TIMEOUT",e(g)},c);d.queue.push({resolve:b,reject:e,timer:f})})}(K,{maxConcurrency:o,timeoutMs:p})}catch(a){if("SEMAPHORE_TIMEOUT"===a.code){h.warn("COMBO-RR",`Semaphore timeout for ${n}, trying next model`),i>0&&H++;continue}throw a}try{for(let g=0;g<=q;g++){if(++G>30)return h.warn("COMBO-RR","Maximum combo attempts (30) exceeded. Terminating loop to prevent runaway requests."),(0,e.yj)(503,"Maximum combo retry limit reached");g>0&&(h.info("COMBO-RR",`Retrying ${n} in ${v}ms (attempt ${g+1}/${q+1})`),await new Promise(a=>setTimeout(a,v))),h.info("COMBO-RR",`[RR #${z}] → ${n}${i>0?` (fallback +${i})`:""}${g>0?` (retry ${g})`:""}`);let j=await f(a,n,m);if(j.ok){let a=await aj(j,B,h);if(!a.valid){h.warn("COMBO-RR",`${n} returned 200 but failed quality check: ${a.reason}`),l(b.name,n,{success:!1,latencyMs:Date.now()-C,fallbackCount:H,strategy:"round-robin",target:am(m)}),I++,i>0&&H++;break}let d=Date.now()-C;if(h.info("COMBO-RR",`${n} succeeded (${d}ms, ${H} fallbacks)`),l(b.name,n,{success:!0,latencyMs:d,fallbackCount:H,strategy:"round-robin",target:am(m)}),I++,w)try{let{setLKGP:a}=await Promise.resolve().then(c.bind(c,73671));await Promise.all([a(b.name,m.executionKey,w),a(b.name,b.id||b.name,w)])}catch(a){h.warn("COMBO-RR","Failed to record Last Known Good Provider. This is non-fatal.",{err:a})}return j}let o=j.statusText||"",p=null,s=null;try{let a=j.clone();try{let b=await a.text();b&&(o=b.substring(0,500),s=JSON.parse(b),o=s?.error?.message||s?.error||s?.message||o,p=s?.retryAfter||null)}catch{}}catch{}if(499===j.status)return h.info("COMBO-RR",`Client disconnected (499) during ${n} — stopping combo loop`),l(b.name,n,{success:!1,latencyMs:Date.now()-C,fallbackCount:H,strategy:"round-robin",target:am(m)}),I++,j;if(p&&(!F||new Date(p)<new Date(F))&&(F=p),"string"!=typeof o)try{o=JSON.stringify(o)}catch{o=String(o)}if(ab(j,s)){D=o||String(j.status),E||(E=j.status),i>0&&H++,h.info("COMBO-RR",`Skipping ${n}: provider circuit breaker OPEN for ${w}`);break}let u=504===j.status&&al(s),{shouldFallback:x,cooldownMs:y}=(0,d.hk)(j.status,o,0,null,w,j.headers,J),A=au(j.status,o),L=function(a,b,c){return 503===a&&!!b?.includes("application/json")&&ae.some(a=>a.test(c))}(j.status,j.headers?.get("content-type")??null,o);if(ac.includes(j.status)&&y>0&&(!function(a,b){let c=r(a);c.rateLimitedUntil=Date.now()+b,setTimeout(()=>{c.rateLimitedUntil&&Date.now()>=c.rateLimitedUntil&&(c.rateLimitedUntil=null,t(a))},b+50)}(K,y),h.warn("COMBO-RR",`${n} error ${j.status}, cooldown ${y}ms`)),L)h.info("COMBO",`All accounts rate-limited for ${n}, falling back to next model`);else if(!x&&!A)return h.warn("COMBO-RR",`${n} failed (no fallback)`,{status:j.status}),l(b.name,n,{success:!1,latencyMs:Date.now()-C,fallbackCount:H,strategy:"round-robin",target:am(m)}),I++,j;A&&h.info("COMBO-RR",`Treating provider-scoped 400 from ${n} as model-local failure; trying next model`);let M=!u&&[408,429,500,502,503,504].includes(j.status);if(g<q&&M)continue;l(b.name,n,{success:!1,latencyMs:Date.now()-C,fallbackCount:H,strategy:"round-robin",target:am(m)}),I++,D=o||String(j.status),E||(E=j.status),i>0&&H++,h.warn("COMBO-RR",`${n} failed, trying next model`,{status:j.status});let N=v>0&&y>0&&y<=5e3?Math.min(y,v):0;if([502,503,504].includes(j.status)&&N>0&&(h.info("COMBO-RR",`Waiting ${N}ms before fallback to next model`),await new Promise(a=>{let b=setTimeout(a,N);k?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),k?.aborted))return h.info("COMBO-RR","Client disconnected during fallback wait — aborting"),(0,e.yj)(499,"Client disconnected");break}}finally{j()}}let J=Date.now()-C;if(0===I&&l(b.name,null,{success:!1,latencyMs:J,fallbackCount:H,strategy:"round-robin"}),!E)return new Response(JSON.stringify({error:{message:"Service temporarily unavailable: all upstream accounts are inactive",type:"service_unavailable",code:"ALL_ACCOUNTS_INACTIVE"}}),{status:503,headers:{"Content-Type":"application/json"}});let K=E,L=D||"All round-robin combo models unavailable";if(F){let a=(0,d.Qo)(F);return h.warn("COMBO-RR",`All models failed | ${L} (${a})`),(0,e.wO)(K,L,F,a)}return h.warn("COMBO-RR",`All models failed | ${L}`),new Response(JSON.stringify({error:{message:L}}),{status:K,headers:{"Content-Type":"application/json"}})}}};
57
+ `;a.enqueue(g.encode(b))}}}),k=new TextDecoder,l=new TransformStream({transform(a,b){let c=k.decode(a,{stream:!0});if(c)if(c.includes("<omniModel>")){let a=c.replace(/(?:\\n|\n|\r)*<omniModel>[^<]+<\/omniModel>(?:\\n|\n|\r)*/g,"");a&&b.enqueue(g.encode(a))}else b.enqueue(g.encode(c))},flush(a){let b=k.decode();if(b)if(b.includes("<omniModel>")){let c=b.replace(/(?:\\n|\n|\r)*<omniModel>[^<]+<\/omniModel>(?:\\n|\n|\r)*/g,"");c&&a.enqueue(g.encode(c))}else a.enqueue(g.encode(b))}}),m=d.body.pipeThrough(j).pipeThrough(l),n=new Headers(d.headers);return n.set("X-OmniRoute-Model",b),new Response(m,{status:d.status,headers:n})}:f;if(H)return i.info("COMBO",`Bypassing strategy — routing directly to pinned context model: ${H}`),N(a,H);if("round-robin"===t)return ay({body:a,combo:b,handleSingleModel:N,isModelAvailable:g,log:i,settings:j,allCombos:q,signal:s});let O=j?(0,n.Z)(b,j):{...(0,n.E)(),...b.config||{}},P=O.maxRetries??1,Q=O.retryDelayMs??2e3,R="weighted"===t?function(a,b){let c=am(a,b);if(0===c.length)return{orderedTargets:[],selectedStep:null};let d=function(a){if(0===a.length)return null;let b=a.reduce((a,b)=>a+(b.weight||0),0);if(b<=0)return a[Math.floor(Math.random()*a.length)];let c=Math.random()*b;for(let b of a)if((c-=b.weight||0)<=0)return b;return a[a.length-1]}(c);return d?{orderedTargets:au((function(a,b,c=!1){let d=a.find(a=>a.executionKey===b),e=a.filter(a=>a.executionKey!==b);return c||e.sort((a,b)=>b.weight-a.weight),[d,...e].filter(Boolean)})(c,d.executionKey,al(a).length>0).flatMap(c=>b?an(c,b,new Set([a.name])):"model"===c.kind?[c]:[])),selectedStep:d}:{orderedTargets:[],selectedStep:null}}(b,q)?.orderedTargets||[]:aw(b,q);if(R=await av(R,a,i),"weighted"===t?i.info("COMBO",`Weighted selection${q?" with nested resolution":""}: ${R.length} total targets`):q&&i.info("COMBO",`${t} with nested resolution: ${R.length} total targets`),"auto"===t){var S;let d,e,f=Array.isArray(a?.tools)&&a.tools.length>0,g=[...R];if(f){let a=g.filter(a=>(0,X.P5)(a.modelStr));a.length>0?g=a:i.warn("COMBO","Auto strategy: all candidates filtered by tool-calling policy, falling back to full pool")}let l=function(a){if(!a||"object"!=typeof a)return"";let b=Array.isArray(a.messages)?[...a.messages].reverse().find(a=>a&&"object"==typeof a&&"user"===a.role):null;if(b){var c;return"string"==typeof(c=b.content)?c:Array.isArray(c)?c.map(a=>a&&"object"==typeof a&&"string"==typeof a.text?a.text:"").join("\n"):""}if("string"==typeof a.input)return a.input;if(Array.isArray(a.input)){let b=a.input.map(a=>a&&"object"==typeof a?"string"==typeof a.content?a.content:"string"==typeof a.text?a.text:"":"").filter(Boolean).join("\n");if(b)return b}return"string"==typeof a.prompt?a.prompt:""}(a),m="string"==typeof b?.system_message?b.system_message:void 0,n=function(a,b,c){if(!b.enabled)return"medium";let d=`${c??""} ${a}`.toLowerCase(),e=a.trim().split(/\s+/).length,f=b.simpleMaxWords??60,g=[...z,...b.extraCodeKeywords??[]],h=[...A,...b.extraReasoningKeywords??[]],i=[...B,...b.extraSimpleKeywords??[]];for(let a of g)if(d.includes(a.toLowerCase()))return"code";for(let a of h)if(d.includes(a.toLowerCase()))return"reasoning";if(e<f){for(let a of i)if(d.includes(a.toLowerCase()))return"simple"}return"medium"}(l,(e=b?.autoConfig?.intentConfig||b?.config?.auto?.intentConfig||b?.config?.intentConfig||{},{...C,...e,..."boolean"==typeof j?.intentDetectionEnabled?{enabled:j.intentDetectionEnabled}:{},...Number.isFinite(Number(j?.intentSimpleMaxWords))?{simpleMaxWords:Number(j.intentSimpleMaxWords)}:{},...ar(j?.intentExtraCodeKeywords).length>0?{extraCodeKeywords:ar(j.intentExtraCodeKeywords)}:{},...ar(j?.intentExtraReasoningKeywords).length>0?{extraReasoningKeywords:ar(j.intentExtraReasoningKeywords)}:{},...ar(j?.intentExtraSimpleKeywords).length>0?{extraSimpleKeywords:ar(j.intentExtraSimpleKeywords)}:{}}),m);!function(a,b){k.has(a)||k.set(a,h("priority"));let c=k.get(a);if(!c)return;let d=String(b||"unknown");c.intentCounts[d]=(c.intentCounts[d]||0)+1}(b.name,n);let o=function(a){switch(a){case"code":return"coding";case"reasoning":return"analysis";default:return"default"}}(n),p=b?.autoConfig||b?.config?.auto||b?.config||{},q="string"==typeof p.routingStrategy?p.routingStrategy:"string"==typeof p.strategyName?p.strategyName:"rules",r=Array.isArray(p.candidatePool)?p.candidatePool:[...new Set(g.map(a=>a.provider))],s=p.weights&&"object"==typeof p.weights?p.weights:D,t=Number.isFinite(Number(p.explorationRate))?Number(p.explorationRate):.05,u=Number.isFinite(Number(p.budgetCap))?Number(p.budgetCap):void 0,v="string"==typeof p.modePack?p.modePack:void 0;try{let{getLKGP:a}=await Promise.resolve().then(c.bind(c,73671)),e=await a(b.name,b.id||b.name);e&&(d=e)}catch(a){i.warn("COMBO","Failed to retrieve Last Known Good Provider. This is non-fatal.",{err:a})}let w=await at(g,b.name);if(w.length>0){let a,c=null,e=null,h="";if("rules"!==q)try{let a=function(a,b,c="rules"){return W(c).select(a,b)}(w,{taskType:o,requestHasTools:f,lastKnownGoodProvider:d},q);c=a.provider,e=a.model,h=a.reason}catch(a){i.warn("COMBO",`Auto strategy '${q}' failed (${a?.message||"unknown"}), falling back to rules`)}if(!c||!e){let a=function(a,b,c="default"){let d,e=(M||(M=new L),M),f=a.weights;if(a.modePack){let b=K[a.modePack];b&&(f=b)}.01>Math.abs(Object.values(f).reduce((a,b)=>a+b,0)-1)||(f=D);let g=[],h=b.filter(b=>(!(a.candidatePool.length>0)||!!a.candidatePool.includes(b.provider))&&(!e.evaluate(b.provider,.5,b.circuitBreakerState).excluded||(g.push(b.provider),!1)));0===h.length&&(h.push(...b),g.length=0);let i=G(h,c,f,J),j=i.filter(a=>!e.evaluate(a.provider,a.score,"CLOSED").excluded||(g.push(a.provider),!1)),k=j.length>0?j:i,l=Math.random()<(e.isInIncidentMode()?0:a.explorationRate)&&k.length>1;if(l){let a=Math.floor(Math.random()*k.length);d=k[a]}else d=k[0];if(a.budgetCap){let c=b.find(a=>a.provider===d.provider);if(c&&c.costPer1MTokens/1e6*1e3>a.budgetCap){let a=k.map(a=>({...a,cost:b.find(b=>b.provider===a.provider)?.costPer1MTokens||0})).sort((a,b)=>a.cost-b.cost)[0];a&&(d=a)}}return{provider:d.provider,model:d.model,score:d.score,isExploration:l,factors:d.factors,excluded:g}}({id:b.id||b.name,name:b.name,type:"auto",candidatePool:r,weights:s,modePack:v,budgetCap:u,explorationRate:t},w,o);c=a.provider,e=a.model,h=`score=${a.score.toFixed(3)}${a.isExploration?" (exploration)":""}`}let j=(S=g,a=new Map(w.map(a=>[a.executionKey,a])),S.map(b=>{let c=a.get(b.executionKey);return c?{target:b,score:E(F(c,w,o,J),s)}:null}).filter(Boolean).sort((a,b)=>b.score-a.score)),k=j.map(a=>a.target),l=j.find(a=>{let b=(0,x.parseModel)(a.target.modelStr).model||a.target.modelStr;return a.target.provider===c&&b===e})?.target||k[0]||g[0];R=au([l,...k,...g].filter(Boolean)),i.info("COMBO",`Auto selection: ${l?.modelStr||`${c}/${e}`} | intent=${n} task=${o} | strategy=${q} | ${h}`)}else i.warn("COMBO","Auto strategy has no candidates, keeping default ordering")}else if("lkgp"===t)try{let{getLKGP:a}=await Promise.resolve().then(c.bind(c,73671)),d=await a(b.name,b.id||b.name);if(d){let a=R.findIndex(a=>a.provider===d||a.modelStr.startsWith(`${d}/`));if(a>0){let[c]=R.splice(a,1);R.unshift(c),i.info("COMBO",`[LKGP] Prioritizing last known good provider ${d} for combo "${b.name}"`)}else 0===a&&i.debug("COMBO",`[LKGP] Last known good provider ${d} already first for combo "${b.name}"`)}}catch(a){i.warn("COMBO","Failed to retrieve Last Known Good Provider. This is non-fatal.",{err:a})}else if("strict-random"===t){let a=await (0,w.h$)(`combo:${b.name}`,R.map(a=>a.executionKey));R=[R.find(b=>b.executionKey===a)||null,...R.filter(b=>b.executionKey!==a)].filter(Boolean),i.info("COMBO",`Strict-random deck: ${a} selected (${R.length} targets)`)}else"random"===t?(R=(0,w.D)([...R]),i.info("COMBO",`Random shuffle: ${R.length} targets`)):"least-used"===t?(R=function(a,b){let c=function(a,b){let c=m(b);if(!c||!c.byModel)return a;let d=a.map(a=>({modelStr:a,requests:c.byModel[a]?.requests??0}));return d.sort((a,b)=>a.requests-b.requests),d.map(a=>a.modelStr)}(a.map(a=>a.modelStr),b),d=new Map;for(let b of a){let a=d.get(b.modelStr)||[];a.push(b),d.set(b.modelStr,a)}return c.map(a=>{let b=d.get(a);return b?.shift()||null}).filter(a=>null!==a)}(R,b.name),i.info("COMBO",`Least-used ordering: ${R[0]?.modelStr} has fewest requests`)):"cost-optimized"===t?(R=await aq(R),i.info("COMBO",`Cost-optimized ordering: cheapest first (${R[0]?.modelStr})`)):"context-optimized"===t&&(R=function(a){let b,c=((b=a.map(a=>a.modelStr).map(a=>{let b=(0,x.parseModel)(a),c=b.provider||b.providerAlias||"unknown",d=b.model||a;return{modelStr:a,context:(0,X.et)(c,d)??0}})).sort((a,b)=>b.context-a.context),b.map(a=>a.modelStr)),d=new Map;for(let b of a){let a=d.get(b.modelStr)||[];a.push(b),d.set(b.modelStr,a)}return c.map(a=>{let b=d.get(a);return b?.shift()||null}).filter(a=>null!==a)}(R),i.info("COMBO",`Context-optimized ordering: largest first (${R[0]?.modelStr})`));if(0===R.length)return ac("Combo has no executable targets");let T=null,U=null,V=null,Z=Date.now(),$=0,_=0,aa=0;for(let f=0;f<R.length;f++){let h=R[f],j=h.modelStr,k=h.provider,m=await (0,d.LN)(k);if(g&&!await g(j,h)){i.info("COMBO",`Skipping ${j} (all accounts in cooldown)`),f>0&&_++;continue}for(let g=0;g<=P;g++){if(s?.aborted)return i.info("COMBO",`Client disconnected — aborting combo loop before model ${j}`),(0,e.yj)(499,"Client disconnected");if(++$>30)return i.warn("COMBO","Maximum combo attempts (30) exceeded across all targets and fallbacks. Terminating loop to prevent runaway background requests."),(0,e.yj)(503,"Maximum combo retry limit reached");if(g>0&&(i.info("COMBO",`Retrying ${j} in ${Q}ms (attempt ${g+1}/${P+1})`),await new Promise(a=>{let b=setTimeout(a,Q);s?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),s?.aborted))return i.info("COMBO","Client disconnected during retry delay — aborting"),(0,e.yj)(499,"Client disconnected");i.info("COMBO",`Trying model ${f+1}/${R.length}: ${j}${g>0?` (retry ${g})`:""}`);let n=await N(a,j,h);if(n.ok){let d=await ag(n,I,i);if(!d.valid){d.reason,i.warn("COMBO",`Model ${j} returned 200 but failed quality check: ${d.reason}`),l(b.name,j,{success:!1,latencyMs:Date.now()-Z,fallbackCount:_,strategy:t,target:aj(h)}),aa++,T=`Upstream response failed quality validation: ${d.reason}`,V||(V=502),f>0&&_++;break}let e=Date.now()-Z;if(i.info("COMBO",`Model ${j} succeeded (${e}ms, ${_} fallbacks)`),l(b.name,j,{success:!0,latencyMs:e,fallbackCount:_,strategy:t,target:aj(h)}),aa++,"context-relay"===t&&r?.sessionId&&u&&u.handoffProviders.includes(k)&&"codex"===k){let c=(0,Y.bb)(r.sessionId);if(c){let d=await (0,p.GF)(c).catch(()=>null);if(d){let e=[d.window5h?.resetAt,d.window7d?.resetAt].filter(a=>"string"==typeof a&&a.length>0).sort(),f=Array.isArray(a?.messages)&&a.messages.length>0?a.messages:Array.isArray(a?.input)?a.input:[];(0,o.md)({sessionId:r.sessionId,comboName:b.name,connectionId:c,percentUsed:d.percentUsed,messages:f,model:j,expiresAt:e[0]||null,config:u,handleSingleModel:N})}}}if(k)try{let{setLKGP:a}=await Promise.resolve().then(c.bind(c,73671));await Promise.all([a(b.name,h.executionKey,k),a(b.name,b.id||b.name,k)])}catch(a){i.warn("COMBO","Failed to record Last Known Good Provider. This is non-fatal.",{err:a})}return d.clonedResponse??n}let q=n.statusText||"",v=null,w=null;try{let a=n.clone();try{let b=await a.text();b&&(q=b.substring(0,500),v=JSON.parse(b),q=v?.error?.message||v?.error||v?.message||q,w=v?.retryAfter||null)}catch{}}catch{}if(w&&(!U||new Date(w)<new Date(U))&&(U=w),"string"!=typeof q)try{q=JSON.stringify(q)}catch{q=String(q)}let x=504===n.status&&ai(v);if(499===n.status)return i.info("COMBO",`Client disconnected (499) during ${j} — stopping combo loop`),l(b.name,j,{success:!1,latencyMs:Date.now()-Z,fallbackCount:_,strategy:t,target:aj(h)}),aa++,n;let{cooldownMs:y}=(0,d.hk)(n.status,q,0,null,k,n.headers,m),z=!x&&[408,429,500,502,503,504].includes(n.status);if(g<P&&z)continue;l(b.name,j,{success:!1,latencyMs:Date.now()-Z,fallbackCount:_,strategy:t,target:aj(h)}),aa++,T=q||String(n.status),V||(V=n.status),f>0&&_++,i.warn("COMBO",`Model ${j} failed, trying next`,{status:n.status});let A=Q>0&&y>0&&y<=5e3?Math.min(y,Q):0;if([502,503,504].includes(n.status)&&A>0&&(i.info("COMBO",`Waiting ${A}ms before fallback to next model`),await new Promise(a=>{let b=setTimeout(a,A);s?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),s?.aborted))return i.info("COMBO","Client disconnected during fallback wait — aborting"),(0,e.yj)(499,"Client disconnected");break}}let ab=Date.now()-Z;if(0===aa&&l(b.name,null,{success:!1,latencyMs:ab,fallbackCount:_,strategy:t}),!V)return new Response(JSON.stringify({error:{message:"Service temporarily unavailable: all upstream accounts are inactive",type:"service_unavailable",code:"ALL_ACCOUNTS_INACTIVE"}}),{status:503,headers:{"Content-Type":"application/json"}});let ad=V,ae=T||"All combo models unavailable";if(U){let a=(0,d.Qo)(U);return i.warn("COMBO",`All models failed | ${ae} (${a})`),(0,e.wO)(ad,ae,U,a)}return i.warn("COMBO",`All models failed | ${ae}`),new Response(JSON.stringify({error:{message:ae}}),{status:ad,headers:{"Content-Type":"application/json"}})}async function ay({body:a,combo:b,handleSingleModel:f,isModelAvailable:g,log:h,settings:i,allCombos:j,signal:k}){let m=i?(0,n.Z)(b,i):{...(0,n.E)(),...b.config||{}},o=m.concurrencyPerModel??3,p=m.queueTimeoutMs??3e4,q=m.maxRetries??1,v=m.retryDelayMs??2e3,w=aw(b,j),x=await av(w,a,h),y=x.length;if(0===y)return ac("Round-robin combo has no executable targets");let z=ah.get(b.name)||0;ah.set(b.name,z+1);let A=z%y,B=a?.stream===!0,C=Date.now(),D=null,E=null,F=null,G=0,H=0,I=0;for(let i=0;i<y;i++){let j,m=x[(A+i)%y],n=m.modelStr,w=m.provider,J=await (0,d.LN)(w),K=`combo:${b.name}:${m.executionKey}`;if(g&&!await g(n,m)){h.info("COMBO-RR",`Skipping ${n} (all accounts in cooldown)`),i>0&&H++;continue}try{j=await function(a,{maxConcurrency:b=3,timeoutMs:c=3e4}={}){let d=r(a,b);return d.running<d.max&&!s(d)?(d.running++,Promise.resolve(u(a))):new Promise((b,e)=>{let f=setTimeout(()=>{let b=d.queue.findIndex(a=>a.timer===f);-1!==b&&d.queue.splice(b,1);let g=Error(`Semaphore timeout after ${c}ms for ${a}`);g.code="SEMAPHORE_TIMEOUT",e(g)},c);d.queue.push({resolve:b,reject:e,timer:f})})}(K,{maxConcurrency:o,timeoutMs:p})}catch(a){if("SEMAPHORE_TIMEOUT"===a.code){h.warn("COMBO-RR",`Semaphore timeout for ${n}, trying next model`),i>0&&H++;continue}throw a}try{for(let g=0;g<=q;g++){if(++G>30)return h.warn("COMBO-RR","Maximum combo attempts (30) exceeded. Terminating loop to prevent runaway requests."),(0,e.yj)(503,"Maximum combo retry limit reached");g>0&&(h.info("COMBO-RR",`Retrying ${n} in ${v}ms (attempt ${g+1}/${q+1})`),await new Promise(a=>setTimeout(a,v))),h.info("COMBO-RR",`[RR #${z}] → ${n}${i>0?` (fallback +${i})`:""}${g>0?` (retry ${g})`:""}`);let j=await f(a,n,m);if(j.ok){let a=await ag(j,B,h);if(!a.valid){a.reason,h.warn("COMBO-RR",`${n} returned 200 but failed quality check: ${a.reason}`),l(b.name,n,{success:!1,latencyMs:Date.now()-C,fallbackCount:H,strategy:"round-robin",target:aj(m)}),I++,D=`Upstream response failed quality validation: ${a.reason}`,E||(E=502),i>0&&H++;break}let d=Date.now()-C;if(h.info("COMBO-RR",`${n} succeeded (${d}ms, ${H} fallbacks)`),l(b.name,n,{success:!0,latencyMs:d,fallbackCount:H,strategy:"round-robin",target:aj(m)}),I++,w)try{let{setLKGP:a}=await Promise.resolve().then(c.bind(c,73671));await Promise.all([a(b.name,m.executionKey,w),a(b.name,b.id||b.name,w)])}catch(a){h.warn("COMBO-RR","Failed to record Last Known Good Provider. This is non-fatal.",{err:a})}return j}let o=j.statusText||"",p=null,s=null;try{let a=j.clone();try{let b=await a.text();b&&(o=b.substring(0,500),s=JSON.parse(b),o=s?.error?.message||s?.error||s?.message||o,p=s?.retryAfter||null)}catch{}}catch{}if(499===j.status)return h.info("COMBO-RR",`Client disconnected (499) during ${n} — stopping combo loop`),l(b.name,n,{success:!1,latencyMs:Date.now()-C,fallbackCount:H,strategy:"round-robin",target:aj(m)}),I++,j;if(p&&(!F||new Date(p)<new Date(F))&&(F=p),"string"!=typeof o)try{o=JSON.stringify(o)}catch{o=String(o)}let u=504===j.status&&ai(s),{cooldownMs:x}=(0,d.hk)(j.status,o,0,null,w,j.headers,J),y=function(a,b,c){return 503===a&&!!b?.includes("application/json")&&ab.some(a=>a.test(c))}(j.status,j.headers?.get("content-type")??null,o);aa.includes(j.status)&&x>0&&(!function(a,b){let c=r(a);c.rateLimitedUntil=Date.now()+b,setTimeout(()=>{c.rateLimitedUntil&&Date.now()>=c.rateLimitedUntil&&(c.rateLimitedUntil=null,t(a))},b+50)}(K,x),h.warn("COMBO-RR",`${n} error ${j.status}, cooldown ${x}ms`)),y&&h.info("COMBO-RR",`All accounts rate-limited for ${n}, falling back to next model`);let A=!u&&[408,429,500,502,503,504].includes(j.status);if(g<q&&A)continue;l(b.name,n,{success:!1,latencyMs:Date.now()-C,fallbackCount:H,strategy:"round-robin",target:aj(m)}),I++,D=o||String(j.status),E||(E=j.status),i>0&&H++,h.warn("COMBO-RR",`${n} failed, trying next model`,{status:j.status});let L=v>0&&x>0&&x<=5e3?Math.min(x,v):0;if([502,503,504].includes(j.status)&&L>0&&(h.info("COMBO-RR",`Waiting ${L}ms before fallback to next model`),await new Promise(a=>{let b=setTimeout(a,L);k?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),k?.aborted))return h.info("COMBO-RR","Client disconnected during fallback wait — aborting"),(0,e.yj)(499,"Client disconnected");break}}finally{j()}}let J=Date.now()-C;if(0===I&&l(b.name,null,{success:!1,latencyMs:J,fallbackCount:H,strategy:"round-robin"}),!E)return new Response(JSON.stringify({error:{message:"Service temporarily unavailable: all upstream accounts are inactive",type:"service_unavailable",code:"ALL_ACCOUNTS_INACTIVE"}}),{status:503,headers:{"Content-Type":"application/json"}});let K=E,L=D||"All round-robin combo models unavailable";if(F){let a=(0,d.Qo)(F);return h.warn("COMBO-RR",`All models failed | ${L} (${a})`),(0,e.wO)(K,L,F,a)}return h.warn("COMBO-RR",`All models failed | ${L}`),new Response(JSON.stringify({error:{message:L}}),{status:K,headers:{"Content-Type":"application/json"}})}}};
@@ -1 +1 @@
1
- globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/yvJ6rPtn4eb7sOBUCBGrF/_buildManifest.js","static/yvJ6rPtn4eb7sOBUCBGrF/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-117eac5998a94c69.js","static/chunks/4bd1b696-e356ca5ba0218e27.js","static/chunks/3794-6032dd93beec274e.js","static/chunks/main-app-c9da11a8061df107.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
1
+ globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/qmeYzerLcoUXZ06JXgit3/_buildManifest.js","static/qmeYzerLcoUXZ06JXgit3/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-ea5983ad4b51e934.js","static/chunks/4bd1b696-e356ca5ba0218e27.js","static/chunks/3794-6032dd93beec274e.js","static/chunks/main-app-c9da11a8061df107.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
@@ -1 +1 @@
1
- self.__REACT_LOADABLE_MANIFEST='{"app/(dashboard)/dashboard/combos/page.tsx -> @/shared/components/ModelSelectModal":{"id":85444,"files":["static/chunks/7173-3f906911ed8eae20.js","static/chunks/909-c35eff14d34c95a3.js","static/chunks/5444-4e411f30d88d90e9.js","static/chunks/8004.79a2690b436f8f66.js"]},"app/(dashboard)/dashboard/combos/page.tsx -> @/shared/components/ProxyConfigModal":{"id":48643,"files":["static/chunks/8643-3823518cb3fab466.js","static/chunks/4051.6116d5a46e4ba5b4.js"]},"app/(dashboard)/dashboard/playground/SearchPlayground.tsx -> @monaco-editor/react":{"id":28202,"files":["static/chunks/8202.1ffc6ce531e066ce.js"]},"app/(dashboard)/dashboard/playground/page.tsx -> ./ChatPlayground":{"id":81579,"files":["static/chunks/1579.e8b4c039ebdf04f0.js"]},"app/(dashboard)/dashboard/playground/page.tsx -> ./SearchPlayground":{"id":44301,"files":["static/chunks/4301.99c15d2923f8bb1f.js"]},"app/(dashboard)/dashboard/playground/page.tsx -> @monaco-editor/react":{"id":28202,"files":["static/chunks/8202.1ffc6ce531e066ce.js"]},"app/(dashboard)/dashboard/search-tools/SearchToolsClient.tsx -> ./components/ProviderComparison":{"id":83476,"files":["static/chunks/3476.0545ef6193c2e16e.js"]},"app/(dashboard)/dashboard/search-tools/SearchToolsClient.tsx -> ./components/RerankPanel":{"id":49581,"files":["static/chunks/8500-330f262eb4bb79e9.js","static/chunks/7173-3f906911ed8eae20.js","static/chunks/782-59fdcfc1dc4fc3c9.js","static/chunks/5831-70e09f6b227769a6.js","static/chunks/909-c35eff14d34c95a3.js","static/chunks/5444-4e411f30d88d90e9.js","static/chunks/8643-3823518cb3fab466.js","static/chunks/1366-81b93332276643a0.js","static/chunks/1999-fefe90c60eaa3b23.js","static/chunks/9581.c503409b4a21bcf8.js"]},"app/(dashboard)/dashboard/search-tools/SearchToolsClient.tsx -> ./components/ResultsPanel":{"id":89716,"files":["static/chunks/8500-330f262eb4bb79e9.js","static/chunks/7173-3f906911ed8eae20.js","static/chunks/782-59fdcfc1dc4fc3c9.js","static/chunks/5831-70e09f6b227769a6.js","static/chunks/909-c35eff14d34c95a3.js","static/chunks/5444-4e411f30d88d90e9.js","static/chunks/8643-3823518cb3fab466.js","static/chunks/1366-81b93332276643a0.js","static/chunks/1999-fefe90c60eaa3b23.js","static/chunks/9716.face4f7bcec44d69.js"]},"app/(dashboard)/dashboard/search-tools/SearchToolsClient.tsx -> ./components/SearchForm":{"id":87142,"files":["static/chunks/8500-330f262eb4bb79e9.js","static/chunks/7173-3f906911ed8eae20.js","static/chunks/782-59fdcfc1dc4fc3c9.js","static/chunks/5831-70e09f6b227769a6.js","static/chunks/909-c35eff14d34c95a3.js","static/chunks/5444-4e411f30d88d90e9.js","static/chunks/8643-3823518cb3fab466.js","static/chunks/1366-81b93332276643a0.js","static/chunks/1999-fefe90c60eaa3b23.js","static/chunks/7142.3adf4d9c3a535d95.js"]},"app/(dashboard)/dashboard/search-tools/SearchToolsClient.tsx -> ./components/SearchHistory":{"id":26056,"files":["static/chunks/6056.7929fbc566421a62.js"]},"app/(dashboard)/dashboard/search-tools/components/ResultsPanel.tsx -> @monaco-editor/react":{"id":28202,"files":["static/chunks/8202.1ffc6ce531e066ce.js"]},"app/(dashboard)/dashboard/translator/components/ChatTesterMode.tsx -> @monaco-editor/react":{"id":28202,"files":["static/chunks/8202.1ffc6ce531e066ce.js"]},"app/(dashboard)/dashboard/translator/components/PlaygroundMode.tsx -> @monaco-editor/react":{"id":28202,"files":["static/chunks/8202.1ffc6ce531e066ce.js"]}}';
1
+ self.__REACT_LOADABLE_MANIFEST='{"app/(dashboard)/dashboard/combos/page.tsx -> @/shared/components/ModelSelectModal":{"id":85444,"files":["static/chunks/7173-3f906911ed8eae20.js","static/chunks/909-c35eff14d34c95a3.js","static/chunks/5444-4e411f30d88d90e9.js","static/chunks/8004.79a2690b436f8f66.js"]},"app/(dashboard)/dashboard/combos/page.tsx -> @/shared/components/ProxyConfigModal":{"id":48643,"files":["static/chunks/8643-3823518cb3fab466.js","static/chunks/4051.6116d5a46e4ba5b4.js"]},"app/(dashboard)/dashboard/playground/SearchPlayground.tsx -> @monaco-editor/react":{"id":28202,"files":["static/chunks/8202.1ffc6ce531e066ce.js"]},"app/(dashboard)/dashboard/playground/page.tsx -> ./ChatPlayground":{"id":81579,"files":["static/chunks/1579.e8b4c039ebdf04f0.js"]},"app/(dashboard)/dashboard/playground/page.tsx -> ./SearchPlayground":{"id":44301,"files":["static/chunks/4301.99c15d2923f8bb1f.js"]},"app/(dashboard)/dashboard/playground/page.tsx -> @monaco-editor/react":{"id":28202,"files":["static/chunks/8202.1ffc6ce531e066ce.js"]},"app/(dashboard)/dashboard/search-tools/SearchToolsClient.tsx -> ./components/ProviderComparison":{"id":83476,"files":["static/chunks/3476.0545ef6193c2e16e.js"]},"app/(dashboard)/dashboard/search-tools/SearchToolsClient.tsx -> ./components/RerankPanel":{"id":49581,"files":["static/chunks/8500-330f262eb4bb79e9.js","static/chunks/7173-3f906911ed8eae20.js","static/chunks/782-59fdcfc1dc4fc3c9.js","static/chunks/5831-70e09f6b227769a6.js","static/chunks/909-c35eff14d34c95a3.js","static/chunks/5444-4e411f30d88d90e9.js","static/chunks/8643-3823518cb3fab466.js","static/chunks/1366-81b93332276643a0.js","static/chunks/1999-8cf58c233346f980.js","static/chunks/9581.c503409b4a21bcf8.js"]},"app/(dashboard)/dashboard/search-tools/SearchToolsClient.tsx -> ./components/ResultsPanel":{"id":89716,"files":["static/chunks/8500-330f262eb4bb79e9.js","static/chunks/7173-3f906911ed8eae20.js","static/chunks/782-59fdcfc1dc4fc3c9.js","static/chunks/5831-70e09f6b227769a6.js","static/chunks/909-c35eff14d34c95a3.js","static/chunks/5444-4e411f30d88d90e9.js","static/chunks/8643-3823518cb3fab466.js","static/chunks/1366-81b93332276643a0.js","static/chunks/1999-8cf58c233346f980.js","static/chunks/9716.face4f7bcec44d69.js"]},"app/(dashboard)/dashboard/search-tools/SearchToolsClient.tsx -> ./components/SearchForm":{"id":87142,"files":["static/chunks/8500-330f262eb4bb79e9.js","static/chunks/7173-3f906911ed8eae20.js","static/chunks/782-59fdcfc1dc4fc3c9.js","static/chunks/5831-70e09f6b227769a6.js","static/chunks/909-c35eff14d34c95a3.js","static/chunks/5444-4e411f30d88d90e9.js","static/chunks/8643-3823518cb3fab466.js","static/chunks/1366-81b93332276643a0.js","static/chunks/1999-8cf58c233346f980.js","static/chunks/7142.3adf4d9c3a535d95.js"]},"app/(dashboard)/dashboard/search-tools/SearchToolsClient.tsx -> ./components/SearchHistory":{"id":26056,"files":["static/chunks/6056.7929fbc566421a62.js"]},"app/(dashboard)/dashboard/search-tools/components/ResultsPanel.tsx -> @monaco-editor/react":{"id":28202,"files":["static/chunks/8202.1ffc6ce531e066ce.js"]},"app/(dashboard)/dashboard/translator/components/ChatTesterMode.tsx -> @monaco-editor/react":{"id":28202,"files":["static/chunks/8202.1ffc6ce531e066ce.js"]},"app/(dashboard)/dashboard/translator/components/PlaygroundMode.tsx -> @monaco-editor/react":{"id":28202,"files":["static/chunks/8202.1ffc6ce531e066ce.js"]}}';