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
@@ -27,11 +27,11 @@ ${c}
27
27
  You are continuing a conversation that was transferred from another account due to quota limits.
28
28
  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}
29
29
 
30
- ${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]}}},27899:(a,b,c)=>{function d(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function e(){return{requests:0,successes:0,failures:0,totalLatencyMs:0,lastStatus:null,lastUsedAt:null}}function f(a){return{totalRequests:0,totalSuccesses:0,totalFailures:0,totalFallbacks:0,totalLatencyMs:0,strategy:a,lastUsedAt:null,intentCounts:{},byModel:{},byTarget:{}}}function g(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 h(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}}c.d(b,{A5:()=>k,BS:()=>l,Go:()=>o,JF:()=>j,NZ:()=>n,WC:()=>m});let i=new Map;function j(a,b,{success:c,latencyMs:h,fallbackCount:k=0,strategy:l="priority",target:m}){var n;let o,p;i.has(a)||i.set(a,f(l));let q=i.get(a);if(!q)return;let r=new Date().toISOString();if(q.totalRequests++,q.totalLatencyMs+=h,q.totalFallbacks+=k,q.lastUsedAt=r,q.strategy=l,c?q.totalSuccesses++:q.totalFailures++,!b)return;q.byModel[b]||(q.byModel[b]=e()),g(q.byModel[b],c,h,r);let s=(o=d((n=m||{}).executionKey)||d(b),p=d(b),o&&p?{executionKey:o,stepId:d(n.stepId),model:p,provider:d(n.provider)||function(a){let b=d(a);if(!b)return null;let[c]=b.split("/");return d(c)}(p),providerId:d(n.providerId),connectionId:null===n.connectionId?null:d(n.connectionId)??null,label:null===n.label?null:d(n.label)??null,...e()}: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,g(t,c,h,r)}function k(a){let b=i.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,h(b)])),byTarget:Object.fromEntries(Object.entries(b.byTarget).map(([a,b])=>[a,h(b)]))}:null}function l(){let a={};for(let[b]of i)a[b]=k(b);return a}function m(a,b){i.has(a)||i.set(a,f("priority"));let c=i.get(a);if(!c)return;let d=String(b||"unknown");c.intentCounts[d]=(c.intentCounts[d]||0)+1}function n(a){i.delete(a)}function o(){i.clear()}},46482:(a,b,c)=>{c.d(b,{E:()=>g,Z:()=>f});let d={strategy:"priority",maxRetries:1,retryDelayMs:2e3,concurrencyPerModel:3,queueTimeoutMs:3e4,handoffThreshold:.85,handoffModel:"",handoffProviders:["codex"],maxMessagesForSummary:30,maxComboDepth:3,trackMetrics:!0},e=new Set(["timeoutMs","healthCheckEnabled","healthCheckTimeoutMs"]);function f(a,b,c){let f=b?.comboDefaults||{},g=c&&b?.providerOverrides?.[c]||{},h=a?.config||{},i=a=>Object.fromEntries(Object.entries(a).filter(([a,b])=>null!=b&&!e.has(a)));return{...d,...i(f),...i(g),...i(h)}}function g(){return{...d}}},56363:(a,b,c)=>{function d(a,b){return!0===a||!1!==a&&!function(a){if("string"!=typeof a)return!1;let b=a.toLowerCase();return b.includes("application/json")&&!b.includes("text/event-stream")}(b)}function e(a){return a&&"object"==typeof a?!0===a.streaming||!1!==a.streaming&&!0!==a.non_stream&&!0!==a.disable_stream&&!0!==a.disable_streaming&&void 0:void 0}function f(a){if("string"!=typeof a)return a;let b=a.trim().match(/^```(?:json|javascript|typescript|js|ts)?\s*\n?([\s\S]*?)\n?```\s*$/i);return b?b[1].trim():a}c.d(b,{ZA:()=>d,nV:()=>e,yN:()=>f})},59092:(a,b,c)=>{c.d(b,{Pr:()=>au,resolveComboTargets:()=>at,ov:()=>ak,Vg:()=>function a(b,c,d=new Set,e=0){if(e>3)throw Error(`Max combo nesting depth (3) exceeded at "${b}"`);if(d.has(b))throw Error(`Circular combo reference detected: ${b}`);d.add(b);let f=Array.isArray(c)?c:c?.combos||[],g=f.find(a=>a.name===b);if(g&&g.models)for(let b of g.models){let c={model:(0,U.aW)(b)||"",weight:(0,U.Zy)(b)}.model;f.find(a=>a.name===c)&&a(c,f,new Set(d),e+1)}}});var d=c(74163),e=c(71861),f=c(27899),g=c(46482),h=c(16459),i=c(64810);let j=new Map;function k(a,b=3){j.has(a)||j.set(a,{running:0,max:b,queue:[],rateLimitedUntil:null});let c=j.get(a);return c.max=b,c}function l(a){return!!a.rateLimitedUntil&&(!(Date.now()>=a.rateLimitedUntil)||(a.rateLimitedUntil=null,!1))}function m(a){let b=j.get(a);if(b)for(;b.queue.length>0&&b.running<b.max&&!l(b);){let c=b.queue.shift();clearTimeout(c.timer),b.running++,c.resolve(n(a))}}function n(a){let b=!1;return()=>{if(b)return;b=!0;let c=j.get(a);c&&c.running>0&&(c.running--,m(a))}}var o=c(12620),p=c(6689),q=c(99939);let r=/(?:\\n|\n|\r)*<omniModel>([^<]+)<\/omniModel>(?:\\n|\n|\r)*/,s=["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","함수","클래스","가져오기","정의","쿼리","비동기","대기","상수","변수","반환","코드","دالة","فئة","استيراد","استعلام","غير متزامن","ثابت","متغير","كود","خوارزمية"],t=["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","증명","정리","단계별","수학적","논리적","إثبات","نظرية","خطوة بخطوة","رياضي","منطقياً"],u=["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","이란","정의","번역","안녕","요약","ما هو","تعريف","ترجمة","مرحبا","ملخص"],v={enabled:!0,simpleMaxWords:60};var w=c(41685);let x={quota:.2,health:.25,costInv:.2,latencyInv:.15,taskFit:.1,stability:.05,tierPriority:.05};function y(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 z(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 A(a,b,c=x,d=()=>.5){return a.map(e=>{let f=z(e,a,b,d);return{provider:e.provider,model:e.model,score:y(f,c),factors:f}}).sort((a,b)=>b.score-a.score)}let B={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}},C=[{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 D(a,b){let c=a.toLowerCase(),d=b.toLowerCase();for(let[a,b]of Object.entries(B[d]||B.default))if(c.includes(a))return b;let e=.5;for(let a of C)c.includes(a.pattern)&&d===a.taskType&&(e+=a.boost);return Math.min(1,e)}let E={"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 F{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 G=null;class H{select(a,b){let c=a.filter(a=>"OPEN"!==a.circuitBreakerState),d=A(c.length>0?c:a,b.taskType,void 0,D),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 I{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 J{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 K{select(a,b){if(!1===b.lkgpEnabled)return Q("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 Q("rules").select(a,b)}constructor(){this.name="lkgp",this.description="Tries last known good provider first, then falls back to rules"}}let L=new Map,M=new H,N=new I,O=new J,P=new K;function Q(a){let b=L.get(a);return b||(console.warn(`[RouterStrategy] Strategy '${a}' not found, falling back to 'rules'`),M)}L.set("rules",M),L.set("cost",N),L.set("eco",N),L.set("latency",O),L.set("fast",O),L.set("lkgp",P);var R=c(77042),S=c(15671),T=c(56197),U=c(24166),V=c(48815);function W(a,b){return"open"===a.headers.get("x-omniroute-provider-breaker")||b?.error?.code==="provider_circuit_open"}let X=[429,502,503,504],Y=[/\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,w.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],Z=[/unavailable/i,/service temporarily unavailable/i];function $(a){return(0,e.yj)(404,a)}let _={"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 aa(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function ab(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}async function ac(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 ad=new Map;function ae(a){if(!a||"object"!=typeof a)return!1;let b=a.error;return!!b&&"object"==typeof b&&"STREAM_READINESS_TIMEOUT"===b.code}function af(a){return{executionKey:a.executionKey,stepId:a.stepId,provider:a.provider,providerId:a.providerId,connectionId:a.connectionId,label:a.label}}function ag(a,b,c,d,e=[]){var f;let g,h=(0,U.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,U.Dx)(h);return l?{kind:"model",stepId:h.id,executionKey:i,modelStr:l,provider:(f=h.providerId,g=(0,q.parseModel)(l),f||g.provider||g.providerAlias||"unknown"),providerId:h.providerId||null,connectionId:h.connectionId||null,weight:k,label:j}:null}function ah(a){let b=aa(a?.config)?a.config.compositeTiers:null;if(!aa(b))return[];let c=ab(b.defaultTier),d=aa(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(!aa(b))return null;let c=ab(a),d=ab(b.stepId),e=ab(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 ai(a,b,c=[]){return function(a,b){let c=ah(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)=>ag(d,a.name,e,b,c)).filter(a=>null!==a)}(a,b,c),a)}function aj(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)?[]:ak(g,f,new Set(c),d+1,[...e,a.stepId])}function ak(a,b,c=new Set,d=0,e=[]){let f=(a.models||[]).map((b,c)=>ag(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=ai(a,b,e),h=[];for(let a of g){if("combo-ref"===a.kind){h.push(...aj(a,b,new Set(c),d,e));continue}h.push(a)}return h}async function al(a){try{let{getPricingForModel:b}=await Promise.all([c.e(75734),c.e(9679),c.e(3598),c.e(22073),c.e(33364)]).then(c.bind(c,33364)),d=await Promise.all(a.map(async a=>{let c=(0,q.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 am(a){let b=await al(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 an(a,b){if(400!==a||!b)return!1;let c=String(b);return Y.some(a=>a.test(c))}function ao(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 ap(a){return _[String(a||"").toLowerCase()]??1500}async function aq(a,b){let d=(0,f.A5)(b),{getPricingForModel:e}=await Promise.all([c.e(75734),c.e(9679),c.e(3598),c.e(22073),c.e(33364)]).then(c.bind(c,33364)),g={};try{let{getModelLatencyStats:a}=await Promise.all([c.e(75734),c.e(9679),c.e(3598),c.e(14272)]).then(c.bind(c,14272));g=await a({windowHours:24,minSamples:3,maxRows:1e4})}catch{}return await Promise.all(a.map(async a=>{let b=a.modelStr,c=(0,q.parseModel)(b),f=a.provider||c.provider||c.providerAlias||"unknown",h=c.model||b,i=g[`${f}/${h}`]||null,j=Number(i?.totalRequests),k=Number.isFinite(j)&&j>=10,l=1;try{let a=await e(f,h),b=Number(a?.input);Number.isFinite(b)&&b>=0&&(l=b)}catch{}let m=d?.byModel?.[b]||null,n=Number(m?.avgLatencyMs),p=Number(m?.successRate),r=Number(i?.p95LatencyMs),s=Number(i?.latencyStdDev),t=Number(i?.successRate),u=k?Number.isFinite(r)&&r>0?r:ap(h):Number.isFinite(n)&&n>0?n:ap(h),v=k?Number.isFinite(t)&&t>=0&&t<=1?1-t:.05:Number.isFinite(p)&&p>=0&&p<=100?1-p/100:.05,w=k&&Number.isFinite(s)&&s>0?Math.max(10,s):Math.max(10,.1*u),x=(0,o.getCircuitBreaker)(f)?.getStatus?.()?.state;return{stepId:a.stepId,executionKey:a.executionKey,modelStr:b,provider:f,model:h,quotaRemaining:100,quotaTotal:100,circuitBreakerState:"OPEN"===x||"HALF_OPEN"===x?x:"CLOSED",costPer1MTokens:l,p95LatencyMs:u,latencyStdDev:w,errorRate:v,accountTier:"standard",quotaResetIntervalSecs:86400}}))}function ar(a){let b=new Set;return a.filter(a=>!b.has(a.executionKey)&&(b.add(a.executionKey),!0))}async function as(a,b,c){let{tags:d,matchMode:e}=(0,V.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,T.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,V.RG)((0,V.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 at(a,b){return b?ak(a,b):ai(a,null).filter(a=>a?.kind==="model")}async function au({body:a,combo:b,handleSingleModel:j,isModelAvailable:k,log:l,settings:m,allCombos:n,relayOptions:o,signal:w}){let B=b.strategy||"priority",C="context-relay"===B?(0,h.fX)(o?.config||null):null,{body:H,pinnedModel:I}=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=r.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&&r.test(a.content)?{...a,content:a.content.replace(r,"").trimEnd()}:a),{body:{...a,messages:d,...f!==a.tools&&{tools:f}},pinnedModel:e}}(a,b);a=H,I&&l.info("COMBO",`[#401] Context caching: pinned model=${I}`);let J=a?.stream===!0,K=b.context_cache_protection?async(a,b,c)=>{let d=await j(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(r,"").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>`,f=new TextEncoder,g=new TextDecoder,h=!1,i=new TransformStream({transform(a,b){if(h)return void b.enqueue(a);let c=g.decode(a,{stream:!0});if(c.match(/"content":"([^"]+)/)){let a=c.replace(/"content":"([^"]+)/,`"content":"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}$1`);h=!0,b.enqueue(f.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}]})}
30
+ ${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]}}},27899:(a,b,c)=>{function d(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function e(){return{requests:0,successes:0,failures:0,totalLatencyMs:0,lastStatus:null,lastUsedAt:null}}function f(a){return{totalRequests:0,totalSuccesses:0,totalFailures:0,totalFallbacks:0,totalLatencyMs:0,strategy:a,lastUsedAt:null,intentCounts:{},byModel:{},byTarget:{}}}function g(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 h(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}}c.d(b,{A5:()=>k,BS:()=>l,Go:()=>o,JF:()=>j,NZ:()=>n,WC:()=>m});let i=new Map;function j(a,b,{success:c,latencyMs:h,fallbackCount:k=0,strategy:l="priority",target:m}){var n;let o,p;i.has(a)||i.set(a,f(l));let q=i.get(a);if(!q)return;let r=new Date().toISOString();if(q.totalRequests++,q.totalLatencyMs+=h,q.totalFallbacks+=k,q.lastUsedAt=r,q.strategy=l,c?q.totalSuccesses++:q.totalFailures++,!b)return;q.byModel[b]||(q.byModel[b]=e()),g(q.byModel[b],c,h,r);let s=(o=d((n=m||{}).executionKey)||d(b),p=d(b),o&&p?{executionKey:o,stepId:d(n.stepId),model:p,provider:d(n.provider)||function(a){let b=d(a);if(!b)return null;let[c]=b.split("/");return d(c)}(p),providerId:d(n.providerId),connectionId:null===n.connectionId?null:d(n.connectionId)??null,label:null===n.label?null:d(n.label)??null,...e()}: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,g(t,c,h,r)}function k(a){let b=i.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,h(b)])),byTarget:Object.fromEntries(Object.entries(b.byTarget).map(([a,b])=>[a,h(b)]))}:null}function l(){let a={};for(let[b]of i)a[b]=k(b);return a}function m(a,b){i.has(a)||i.set(a,f("priority"));let c=i.get(a);if(!c)return;let d=String(b||"unknown");c.intentCounts[d]=(c.intentCounts[d]||0)+1}function n(a){i.delete(a)}function o(){i.clear()}},46482:(a,b,c)=>{c.d(b,{E:()=>g,Z:()=>f});let d={strategy:"priority",maxRetries:1,retryDelayMs:2e3,concurrencyPerModel:3,queueTimeoutMs:3e4,handoffThreshold:.85,handoffModel:"",handoffProviders:["codex"],maxMessagesForSummary:30,maxComboDepth:3,trackMetrics:!0},e=new Set(["timeoutMs","healthCheckEnabled","healthCheckTimeoutMs"]);function f(a,b,c){let f=b?.comboDefaults||{},g=c&&b?.providerOverrides?.[c]||{},h=a?.config||{},i=a=>Object.fromEntries(Object.entries(a).filter(([a,b])=>null!=b&&!e.has(a)));return{...d,...i(f),...i(g),...i(h)}}function g(){return{...d}}},56363:(a,b,c)=>{function d(a,b){return!0===a||!1!==a&&!function(a){if("string"!=typeof a)return!1;let b=a.toLowerCase();return b.includes("application/json")&&!b.includes("text/event-stream")}(b)}function e(a){return a&&"object"==typeof a?!0===a.streaming||!1!==a.streaming&&!0!==a.non_stream&&!0!==a.disable_stream&&!0!==a.disable_streaming&&void 0:void 0}function f(a){if("string"!=typeof a)return a;let b=a.trim().match(/^```(?:json|javascript|typescript|js|ts)?\s*\n?([\s\S]*?)\n?```\s*$/i);return b?b[1].trim():a}c.d(b,{ZA:()=>d,nV:()=>e,yN:()=>f})},59092:(a,b,c)=>{c.d(b,{Pr:()=>aq,resolveComboTargets:()=>ap,ov:()=>ah,Vg:()=>function a(b,c,d=new Set,e=0){if(e>3)throw Error(`Max combo nesting depth (3) exceeded at "${b}"`);if(d.has(b))throw Error(`Circular combo reference detected: ${b}`);d.add(b);let f=Array.isArray(c)?c:c?.combos||[],g=f.find(a=>a.name===b);if(g&&g.models)for(let b of g.models){let c={model:(0,T.aW)(b)||"",weight:(0,T.Zy)(b)}.model;f.find(a=>a.name===c)&&a(c,f,new Set(d),e+1)}}});var d=c(74163),e=c(71861),f=c(27899),g=c(46482),h=c(16459),i=c(64810);let j=new Map;function k(a,b=3){j.has(a)||j.set(a,{running:0,max:b,queue:[],rateLimitedUntil:null});let c=j.get(a);return c.max=b,c}function l(a){return!!a.rateLimitedUntil&&(!(Date.now()>=a.rateLimitedUntil)||(a.rateLimitedUntil=null,!1))}function m(a){let b=j.get(a);if(b)for(;b.queue.length>0&&b.running<b.max&&!l(b);){let c=b.queue.shift();clearTimeout(c.timer),b.running++,c.resolve(n(a))}}function n(a){let b=!1;return()=>{if(b)return;b=!0;let c=j.get(a);c&&c.running>0&&(c.running--,m(a))}}var o=c(12620),p=c(6689),q=c(99939);let r=/(?:\\n|\n|\r)*<omniModel>([^<]+)<\/omniModel>(?:\\n|\n|\r)*/,s=["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","함수","클래스","가져오기","정의","쿼리","비동기","대기","상수","변수","반환","코드","دالة","فئة","استيراد","استعلام","غير متزامن","ثابت","متغير","كود","خوارزمية"],t=["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","증명","정리","단계별","수학적","논리적","إثبات","نظرية","خطوة بخطوة","رياضي","منطقياً"],u=["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","이란","정의","번역","안녕","요약","ما هو","تعريف","ترجمة","مرحبا","ملخص"],v={enabled:!0,simpleMaxWords:60},w={quota:.2,health:.25,costInv:.2,latencyInv:.15,taskFit:.1,stability:.05,tierPriority:.05};function x(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 y(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 z(a,b,c=w,d=()=>.5){return a.map(e=>{let f=y(e,a,b,d);return{provider:e.provider,model:e.model,score:x(f,c),factors:f}}).sort((a,b)=>b.score-a.score)}let A={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}},B=[{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 C(a,b){let c=a.toLowerCase(),d=b.toLowerCase();for(let[a,b]of Object.entries(A[d]||A.default))if(c.includes(a))return b;let e=.5;for(let a of B)c.includes(a.pattern)&&d===a.taskType&&(e+=a.boost);return Math.min(1,e)}let D={"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 E{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 F=null;class G{select(a,b){let c=a.filter(a=>"OPEN"!==a.circuitBreakerState),d=z(c.length>0?c:a,b.taskType,void 0,C),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 H{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 I{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 J{select(a,b){if(!1===b.lkgpEnabled)return P("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 P("rules").select(a,b)}constructor(){this.name="lkgp",this.description="Tries last known good provider first, then falls back to rules"}}let K=new Map,L=new G,M=new H,N=new I,O=new J;function P(a){let b=K.get(a);return b||(console.warn(`[RouterStrategy] Strategy '${a}' not found, falling back to 'rules'`),L)}K.set("rules",L),K.set("cost",M),K.set("eco",M),K.set("latency",N),K.set("fast",N),K.set("lkgp",O);var Q=c(77042),R=c(15671),S=c(56197),T=c(24166),U=c(48815);let V=[429,502,503,504],W=[/unavailable/i,/service temporarily unavailable/i];function X(a){return(0,e.yj)(404,a)}let Y={"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 Z(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function $(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}async function _(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 aa=new Map;function ab(a){if(!a||"object"!=typeof a)return!1;let b=a.error;return!!b&&"object"==typeof b&&"STREAM_READINESS_TIMEOUT"===b.code}function ac(a){return{executionKey:a.executionKey,stepId:a.stepId,provider:a.provider,providerId:a.providerId,connectionId:a.connectionId,label:a.label}}function ad(a,b,c,d,e=[]){var f;let g,h=(0,T.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,T.Dx)(h);return l?{kind:"model",stepId:h.id,executionKey:i,modelStr:l,provider:(f=h.providerId,g=(0,q.parseModel)(l),f||g.provider||g.providerAlias||"unknown"),providerId:h.providerId||null,connectionId:h.connectionId||null,weight:k,label:j}:null}function ae(a){let b=Z(a?.config)?a.config.compositeTiers:null;if(!Z(b))return[];let c=$(b.defaultTier),d=Z(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(!Z(b))return null;let c=$(a),d=$(b.stepId),e=$(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 af(a,b,c=[]){return function(a,b){let c=ae(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)=>ad(d,a.name,e,b,c)).filter(a=>null!==a)}(a,b,c),a)}function ag(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)?[]:ah(g,f,new Set(c),d+1,[...e,a.stepId])}function ah(a,b,c=new Set,d=0,e=[]){let f=(a.models||[]).map((b,c)=>ad(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=af(a,b,e),h=[];for(let a of g){if("combo-ref"===a.kind){h.push(...ag(a,b,new Set(c),d,e));continue}h.push(a)}return h}async function ai(a){try{let{getPricingForModel:b}=await Promise.all([c.e(75734),c.e(9679),c.e(3598),c.e(22073),c.e(33364)]).then(c.bind(c,33364)),d=await Promise.all(a.map(async a=>{let c=(0,q.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 aj(a){let b=await ai(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 ak(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 al(a){return Y[String(a||"").toLowerCase()]??1500}async function am(a,b){let d=(0,f.A5)(b),{getPricingForModel:e}=await Promise.all([c.e(75734),c.e(9679),c.e(3598),c.e(22073),c.e(33364)]).then(c.bind(c,33364)),g={};try{let{getModelLatencyStats:a}=await Promise.all([c.e(75734),c.e(9679),c.e(3598),c.e(14272)]).then(c.bind(c,14272));g=await a({windowHours:24,minSamples:3,maxRows:1e4})}catch{}return await Promise.all(a.map(async a=>{let b=a.modelStr,c=(0,q.parseModel)(b),f=a.provider||c.provider||c.providerAlias||"unknown",h=c.model||b,i=g[`${f}/${h}`]||null,j=Number(i?.totalRequests),k=Number.isFinite(j)&&j>=10,l=1;try{let a=await e(f,h),b=Number(a?.input);Number.isFinite(b)&&b>=0&&(l=b)}catch{}let m=d?.byModel?.[b]||null,n=Number(m?.avgLatencyMs),p=Number(m?.successRate),r=Number(i?.p95LatencyMs),s=Number(i?.latencyStdDev),t=Number(i?.successRate),u=k?Number.isFinite(r)&&r>0?r:al(h):Number.isFinite(n)&&n>0?n:al(h),v=k?Number.isFinite(t)&&t>=0&&t<=1?1-t:.05:Number.isFinite(p)&&p>=0&&p<=100?1-p/100:.05,w=k&&Number.isFinite(s)&&s>0?Math.max(10,s):Math.max(10,.1*u),x=(0,o.getCircuitBreaker)(f)?.getStatus?.()?.state;return{stepId:a.stepId,executionKey:a.executionKey,modelStr:b,provider:f,model:h,quotaRemaining:100,quotaTotal:100,circuitBreakerState:"OPEN"===x||"HALF_OPEN"===x?x:"CLOSED",costPer1MTokens:l,p95LatencyMs:u,latencyStdDev:w,errorRate:v,accountTier:"standard",quotaResetIntervalSecs:86400}}))}function an(a){let b=new Set;return a.filter(a=>!b.has(a.executionKey)&&(b.add(a.executionKey),!0))}async function ao(a,b,c){let{tags:d,matchMode:e}=(0,U.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,S.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,U.RG)((0,U.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 ap(a,b){return b?ah(a,b):af(a,null).filter(a=>a?.kind==="model")}async function aq({body:a,combo:b,handleSingleModel:j,isModelAvailable:k,log:l,settings:m,allCombos:n,relayOptions:o,signal:A}){let B=b.strategy||"priority",G="context-relay"===B?(0,h.fX)(o?.config||null):null,{body:H,pinnedModel:I}=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=r.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&&r.test(a.content)?{...a,content:a.content.replace(r,"").trimEnd()}:a),{body:{...a,messages:d,...f!==a.tools&&{tools:f}},pinnedModel:e}}(a,b);a=H,I&&l.info("COMBO",`[#401] Context caching: pinned model=${I}`);let J=a?.stream===!0,K=b.context_cache_protection?async(a,b,c)=>{let d=await j(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(r,"").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>`,f=new TextEncoder,g=new TextDecoder,h=!1,i=new TransformStream({transform(a,b){if(h)return void b.enqueue(a);let c=g.decode(a,{stream:!0});if(c.match(/"content":"([^"]+)/)){let a=c.replace(/"content":"([^"]+)/,`"content":"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}$1`);h=!0,b.enqueue(f.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}]})}
31
31
 
32
32
  `;h=!0,b.enqueue(f.encode(c)),b.enqueue(a);return}b.enqueue(a)},flush(a){if(!h){let b=`data: ${JSON.stringify({choices:[{delta:{content:e},index:0,finish_reason:null}]})}
33
33
 
34
- `;a.enqueue(f.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(f.encode(a))}else b.enqueue(f.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(f.encode(c))}else a.enqueue(f.encode(b))}}),m=d.body.pipeThrough(i).pipeThrough(l),n=new Headers(d.headers);return n.set("X-OmniRoute-Model",b),new Response(m,{status:d.status,headers:n})}:j;if(I)return l.info("COMBO",`Bypassing strategy — routing directly to pinned context model: ${I}`),K(a,I);if("round-robin"===B)return av({body:a,combo:b,handleSingleModel:K,isModelAvailable:k,log:l,settings:m,allCombos:n,signal:w});let L=m?(0,g.Z)(b,m):{...(0,g.E)(),...b.config||{}},M=L.maxRetries??1,N=L.retryDelayMs??2e3,O="weighted"===B?function(a,b){let c=ai(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:ar((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,ah(a).length>0).flatMap(c=>b?aj(c,b,new Set([a.name])):"model"===c.kind?[c]:[])),selectedStep:d}:{orderedTargets:[],selectedStep:null}}(b,n)?.orderedTargets||[]:at(b,n);if(O=await as(O,a,l),"weighted"===B?l.info("COMBO",`Weighted selection${n?" with nested resolution":""}: ${O.length} total targets`):n&&l.info("COMBO",`${B} with nested resolution: ${O.length} total targets`),"auto"===B){var P;let d,e,g=Array.isArray(a?.tools)&&a.tools.length>0,h=[...O];if(g){let a=h.filter(a=>(0,R.P5)(a.modelStr));a.length>0?h=a:l.warn("COMBO","Auto strategy: all candidates filtered by tool-calling policy, falling back to full pool")}let i=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),j="string"==typeof b?.system_message?b.system_message:void 0,k=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=[...s,...b.extraCodeKeywords??[]],h=[...t,...b.extraReasoningKeywords??[]],i=[...u,...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"}(i,(e=b?.autoConfig?.intentConfig||b?.config?.auto?.intentConfig||b?.config?.intentConfig||{},{...v,...e,..."boolean"==typeof m?.intentDetectionEnabled?{enabled:m.intentDetectionEnabled}:{},...Number.isFinite(Number(m?.intentSimpleMaxWords))?{simpleMaxWords:Number(m.intentSimpleMaxWords)}:{},...ao(m?.intentExtraCodeKeywords).length>0?{extraCodeKeywords:ao(m.intentExtraCodeKeywords)}:{},...ao(m?.intentExtraReasoningKeywords).length>0?{extraReasoningKeywords:ao(m.intentExtraReasoningKeywords)}:{},...ao(m?.intentExtraSimpleKeywords).length>0?{extraSimpleKeywords:ao(m.intentExtraSimpleKeywords)}:{}}),j);(0,f.WC)(b.name,k);let n=function(a){switch(a){case"code":return"coding";case"reasoning":return"analysis";default:return"default"}}(k),o=b?.autoConfig||b?.config?.auto||b?.config||{},p="string"==typeof o.routingStrategy?o.routingStrategy:"string"==typeof o.strategyName?o.strategyName:"rules",r=Array.isArray(o.candidatePool)?o.candidatePool:[...new Set(h.map(a=>a.provider))],w=o.weights&&"object"==typeof o.weights?o.weights:x,B=Number.isFinite(Number(o.explorationRate))?Number(o.explorationRate):.05,C=Number.isFinite(Number(o.budgetCap))?Number(o.budgetCap):void 0,H="string"==typeof o.modePack?o.modePack:void 0;try{let{getLKGP:a}=await Promise.all([c.e(75734),c.e(9679),c.e(3598),c.e(22073),c.e(33364)]).then(c.bind(c,33364)),e=await a(b.name,b.id||b.name);e&&(d=e)}catch(a){l.warn("COMBO","Failed to retrieve Last Known Good Provider. This is non-fatal.",{err:a})}let I=await aq(h,b.name);if(I.length>0){let a,c=null,e=null,f="";if("rules"!==p)try{let a=function(a,b,c="rules"){return Q(c).select(a,b)}(I,{taskType:n,requestHasTools:g,lastKnownGoodProvider:d},p);c=a.provider,e=a.model,f=a.reason}catch(a){l.warn("COMBO",`Auto strategy '${p}' failed (${a?.message||"unknown"}), falling back to rules`)}if(!c||!e){let a=function(a,b,c="default"){let d,e=(G||(G=new F),G),f=a.weights;if(a.modePack){let b=E[a.modePack];b&&(f=b)}.01>Math.abs(Object.values(f).reduce((a,b)=>a+b,0)-1)||(f=x);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=A(h,c,f,D),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:w,modePack:H,budgetCap:C,explorationRate:B},I,n);c=a.provider,e=a.model,f=`score=${a.score.toFixed(3)}${a.isExploration?" (exploration)":""}`}let i=(P=h,a=new Map(I.map(a=>[a.executionKey,a])),P.map(b=>{let c=a.get(b.executionKey);return c?{target:b,score:y(z(c,I,n,D),w)}:null}).filter(Boolean).sort((a,b)=>b.score-a.score)),j=i.map(a=>a.target),m=i.find(a=>{let b=(0,q.parseModel)(a.target.modelStr).model||a.target.modelStr;return a.target.provider===c&&b===e})?.target||j[0]||h[0];O=ar([m,...j,...h].filter(Boolean)),l.info("COMBO",`Auto selection: ${m?.modelStr||`${c}/${e}`} | intent=${k} task=${n} | strategy=${p} | ${f}`)}else l.warn("COMBO","Auto strategy has no candidates, keeping default ordering")}else if("lkgp"===B)try{let{getLKGP:a}=await Promise.all([c.e(75734),c.e(9679),c.e(3598),c.e(22073),c.e(33364)]).then(c.bind(c,33364)),d=await a(b.name,b.id||b.name);if(d){let a=O.findIndex(a=>a.provider===d||a.modelStr.startsWith(`${d}/`));if(a>0){let[c]=O.splice(a,1);O.unshift(c),l.info("COMBO",`[LKGP] Prioritizing last known good provider ${d} for combo "${b.name}"`)}else 0===a&&l.debug("COMBO",`[LKGP] Last known good provider ${d} already first for combo "${b.name}"`)}}catch(a){l.warn("COMBO","Failed to retrieve Last Known Good Provider. This is non-fatal.",{err:a})}else if("strict-random"===B){let a=await (0,p.h$)(`combo:${b.name}`,O.map(a=>a.executionKey));O=[O.find(b=>b.executionKey===a)||null,...O.filter(b=>b.executionKey!==a)].filter(Boolean),l.info("COMBO",`Strict-random deck: ${a} selected (${O.length} targets)`)}else"random"===B?(O=(0,p.D)([...O]),l.info("COMBO",`Random shuffle: ${O.length} targets`)):"least-used"===B?(O=function(a,b){let c=function(a,b){let c=(0,f.A5)(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)}(O,b.name),l.info("COMBO",`Least-used ordering: ${O[0]?.modelStr} has fewest requests`)):"cost-optimized"===B?(O=await am(O),l.info("COMBO",`Cost-optimized ordering: cheapest first (${O[0]?.modelStr})`)):"context-optimized"===B&&(O=function(a){let b,c=((b=a.map(a=>a.modelStr).map(a=>{let b=(0,q.parseModel)(a),c=b.provider||b.providerAlias||"unknown",d=b.model||a;return{modelStr:a,context:(0,R.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)}(O),l.info("COMBO",`Context-optimized ordering: largest first (${O[0]?.modelStr})`));if(0===O.length)return $("Combo has no executable targets");let T=null,U=null,V=null,X=Date.now(),Y=0,Z=0,_=0;for(let g=0;g<O.length;g++){let j=O[g],m=j.modelStr,n=j.provider,p=await (0,d.LN)(n);if(k&&!await k(m,j)){l.info("COMBO",`Skipping ${m} (all accounts in cooldown)`),g>0&&Z++;continue}for(let k=0;k<=M;k++){if(w?.aborted)return l.info("COMBO",`Client disconnected — aborting combo loop before model ${m}`),(0,e.yj)(499,"Client disconnected");if(++Y>30)return l.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(k>0&&(l.info("COMBO",`Retrying ${m} in ${N}ms (attempt ${k+1}/${M+1})`),await new Promise(a=>{let b=setTimeout(a,N);w?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),w?.aborted))return l.info("COMBO","Client disconnected during retry delay — aborting"),(0,e.yj)(499,"Client disconnected");l.info("COMBO",`Trying model ${g+1}/${O.length}: ${m}${k>0?` (retry ${k})`:""}`);let q=await K(a,m,j);if(q.ok){let d=await ac(q,J,l);if(!d.valid){l.warn("COMBO",`Model ${m} returned 200 but failed quality check: ${d.reason}`),(0,f.JF)(b.name,m,{success:!1,latencyMs:Date.now()-X,fallbackCount:Z,strategy:B,target:af(j)}),_++,g>0&&Z++;break}let e=Date.now()-X;if(l.info("COMBO",`Model ${m} succeeded (${e}ms, ${Z} fallbacks)`),(0,f.JF)(b.name,m,{success:!0,latencyMs:e,fallbackCount:Z,strategy:B,target:af(j)}),_++,"context-relay"===B&&o?.sessionId&&C&&C.handoffProviders.includes(n)&&"codex"===n){let c=(0,S.bb)(o.sessionId);if(c){let d=await (0,i.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,h.md)({sessionId:o.sessionId,comboName:b.name,connectionId:c,percentUsed:d.percentUsed,messages:f,model:m,expiresAt:e[0]||null,config:C,handleSingleModel:K})}}}if(n)try{let{setLKGP:a}=await Promise.all([c.e(75734),c.e(9679),c.e(3598),c.e(22073),c.e(33364)]).then(c.bind(c,33364));await Promise.all([a(b.name,j.executionKey,n),a(b.name,b.id||b.name,n)])}catch(a){l.warn("COMBO","Failed to record Last Known Good Provider. This is non-fatal.",{err:a})}return d.clonedResponse??q}let r=q.statusText||"",s=null,t=null;try{let a=q.clone();try{let b=await a.text();b&&(r=b.substring(0,500),s=JSON.parse(b),r=s?.error?.message||s?.error||s?.message||r,t=s?.retryAfter||null)}catch{}}catch{}if(t&&(!U||new Date(t)<new Date(U))&&(U=t),"string"!=typeof r)try{r=JSON.stringify(r)}catch{r=String(r)}let u=W(q,s),v=504===q.status&&ae(s);if(499===q.status)return l.info("COMBO",`Client disconnected (499) during ${m} — stopping combo loop`),(0,f.JF)(b.name,m,{success:!1,latencyMs:Date.now()-X,fallbackCount:Z,strategy:B,target:af(j)}),_++,q;if(u){T=r||String(q.status),V||(V=q.status),g>0&&Z++,l.info("COMBO",`Skipping ${m}: provider circuit breaker OPEN for ${n}`);break}let{shouldFallback:x,cooldownMs:y}=(0,d.hk)(q.status,r,0,null,n,q.headers,p),z=an(q.status,r);if(!x&&!z)return l.warn("COMBO",`Model ${m} failed (no fallback)`,{status:q.status}),(0,f.JF)(b.name,m,{success:!1,latencyMs:Date.now()-X,fallbackCount:Z,strategy:B,target:af(j)}),_++,q;z&&l.info("COMBO",`Treating provider-scoped 400 from ${m} as model-local failure; trying next combo target`);let A=!v&&[408,429,500,502,503,504].includes(q.status);if(k<M&&A)continue;(0,f.JF)(b.name,m,{success:!1,latencyMs:Date.now()-X,fallbackCount:Z,strategy:B,target:af(j)}),_++,T=r||String(q.status),V||(V=q.status),g>0&&Z++,l.warn("COMBO",`Model ${m} failed, trying next`,{status:q.status});let D=N>0&&y>0&&y<=5e3?Math.min(y,N):0;if([502,503,504].includes(q.status)&&D>0&&(l.info("COMBO",`Waiting ${D}ms before fallback to next model`),await new Promise(a=>{let b=setTimeout(a,D);w?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),w?.aborted))return l.info("COMBO","Client disconnected during fallback wait — aborting"),(0,e.yj)(499,"Client disconnected");break}}let aa=Date.now()-X;if(0===_&&(0,f.JF)(b.name,null,{success:!1,latencyMs:aa,fallbackCount:Z,strategy:B}),!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 ab=V,ad=T||"All combo models unavailable";if(U){let a=(0,d.Qo)(U);return l.warn("COMBO",`All models failed | ${ad} (${a})`),(0,e.wO)(ab,ad,U,a)}return l.warn("COMBO",`All models failed | ${ad}`),new Response(JSON.stringify({error:{message:ad}}),{status:ab,headers:{"Content-Type":"application/json"}})}async function av({body:a,combo:b,handleSingleModel:h,isModelAvailable:i,log:j,settings:o,allCombos:p,signal:q}){let r=o?(0,g.Z)(b,o):{...(0,g.E)(),...b.config||{}},s=r.concurrencyPerModel??3,t=r.queueTimeoutMs??3e4,u=r.maxRetries??1,v=r.retryDelayMs??2e3,w=at(b,p),x=await as(w,a,j),y=x.length;if(0===y)return $("Round-robin combo has no executable targets");let z=ad.get(b.name)||0;ad.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 g=0;g<y;g++){let o,p=x[(A+g)%y],r=p.modelStr,w=p.provider,J=await (0,d.LN)(w),K=`combo:${b.name}:${p.executionKey}`;if(i&&!await i(r,p)){j.info("COMBO-RR",`Skipping ${r} (all accounts in cooldown)`),g>0&&H++;continue}try{o=await function(a,{maxConcurrency:b=3,timeoutMs:c=3e4}={}){let d=k(a,b);return d.running<d.max&&!l(d)?(d.running++,Promise.resolve(n(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:s,timeoutMs:t})}catch(a){if("SEMAPHORE_TIMEOUT"===a.code){j.warn("COMBO-RR",`Semaphore timeout for ${r}, trying next model`),g>0&&H++;continue}throw a}try{for(let i=0;i<=u;i++){if(++G>30)return j.warn("COMBO-RR","Maximum combo attempts (30) exceeded. Terminating loop to prevent runaway requests."),(0,e.yj)(503,"Maximum combo retry limit reached");i>0&&(j.info("COMBO-RR",`Retrying ${r} in ${v}ms (attempt ${i+1}/${u+1})`),await new Promise(a=>setTimeout(a,v))),j.info("COMBO-RR",`[RR #${z}] → ${r}${g>0?` (fallback +${g})`:""}${i>0?` (retry ${i})`:""}`);let l=await h(a,r,p);if(l.ok){let a=await ac(l,B,j);if(!a.valid){j.warn("COMBO-RR",`${r} returned 200 but failed quality check: ${a.reason}`),(0,f.JF)(b.name,r,{success:!1,latencyMs:Date.now()-C,fallbackCount:H,strategy:"round-robin",target:af(p)}),I++,g>0&&H++;break}let d=Date.now()-C;if(j.info("COMBO-RR",`${r} succeeded (${d}ms, ${H} fallbacks)`),(0,f.JF)(b.name,r,{success:!0,latencyMs:d,fallbackCount:H,strategy:"round-robin",target:af(p)}),I++,w)try{let{setLKGP:a}=await Promise.all([c.e(75734),c.e(9679),c.e(3598),c.e(22073),c.e(33364)]).then(c.bind(c,33364));await Promise.all([a(b.name,p.executionKey,w),a(b.name,b.id||b.name,w)])}catch(a){j.warn("COMBO-RR","Failed to record Last Known Good Provider. This is non-fatal.",{err:a})}return l}let n=l.statusText||"",o=null,s=null;try{let a=l.clone();try{let b=await a.text();b&&(n=b.substring(0,500),s=JSON.parse(b),n=s?.error?.message||s?.error||s?.message||n,o=s?.retryAfter||null)}catch{}}catch{}if(499===l.status)return j.info("COMBO-RR",`Client disconnected (499) during ${r} — stopping combo loop`),(0,f.JF)(b.name,r,{success:!1,latencyMs:Date.now()-C,fallbackCount:H,strategy:"round-robin",target:af(p)}),I++,l;if(o&&(!F||new Date(o)<new Date(F))&&(F=o),"string"!=typeof n)try{n=JSON.stringify(n)}catch{n=String(n)}if(W(l,s)){D=n||String(l.status),E||(E=l.status),g>0&&H++,j.info("COMBO-RR",`Skipping ${r}: provider circuit breaker OPEN for ${w}`);break}let t=504===l.status&&ae(s),{shouldFallback:x,cooldownMs:y}=(0,d.hk)(l.status,n,0,null,w,l.headers,J),A=an(l.status,n),L=function(a,b,c){return 503===a&&!!b?.includes("application/json")&&Z.some(a=>a.test(c))}(l.status,l.headers?.get("content-type")??null,n);if(X.includes(l.status)&&y>0&&(!function(a,b){let c=k(a);c.rateLimitedUntil=Date.now()+b,setTimeout(()=>{c.rateLimitedUntil&&Date.now()>=c.rateLimitedUntil&&(c.rateLimitedUntil=null,m(a))},b+50)}(K,y),j.warn("COMBO-RR",`${r} error ${l.status}, cooldown ${y}ms`)),L)j.info("COMBO",`All accounts rate-limited for ${r}, falling back to next model`);else if(!x&&!A)return j.warn("COMBO-RR",`${r} failed (no fallback)`,{status:l.status}),(0,f.JF)(b.name,r,{success:!1,latencyMs:Date.now()-C,fallbackCount:H,strategy:"round-robin",target:af(p)}),I++,l;A&&j.info("COMBO-RR",`Treating provider-scoped 400 from ${r} as model-local failure; trying next model`);let M=!t&&[408,429,500,502,503,504].includes(l.status);if(i<u&&M)continue;(0,f.JF)(b.name,r,{success:!1,latencyMs:Date.now()-C,fallbackCount:H,strategy:"round-robin",target:af(p)}),I++,D=n||String(l.status),E||(E=l.status),g>0&&H++,j.warn("COMBO-RR",`${r} failed, trying next model`,{status:l.status});let N=v>0&&y>0&&y<=5e3?Math.min(y,v):0;if([502,503,504].includes(l.status)&&N>0&&(j.info("COMBO-RR",`Waiting ${N}ms before fallback to next model`),await new Promise(a=>{let b=setTimeout(a,N);q?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),q?.aborted))return j.info("COMBO-RR","Client disconnected during fallback wait — aborting"),(0,e.yj)(499,"Client disconnected");break}}finally{o()}}let J=Date.now()-C;if(0===I&&(0,f.JF)(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 j.warn("COMBO-RR",`All models failed | ${L} (${a})`),(0,e.wO)(K,L,F,a)}return j.warn("COMBO-RR",`All models failed | ${L}`),new Response(JSON.stringify({error:{message:L}}),{status:K,headers:{"Content-Type":"application/json"}})}},64810:(a,b,c)=>{c.d(b,{GF:()=>j,tg:()=>n,u_:()=>o,zU:()=>i});var d=c(30675),e=c(29210);let f=new Map,g=setInterval(()=>{let a=Date.now();for(let[b,c]of f)a-c.fetchedAt>3e5&&f.delete(b)},3e5);"object"==typeof g&&"unref"in g&&g.unref?.();let h=new Map;function i(a,b){h.set(a,b)}async function j(a,b){let c=f.get(a);if(c&&Date.now()-c.fetchedAt<6e4)return c.quota;let d=function(a,b){if(b&&"object"==typeof b){let c=b.providerSpecificData&&"object"==typeof b.providerSpecificData&&!Array.isArray(b.providerSpecificData)?b.providerSpecificData:{},d="string"==typeof b.accessToken&&b.accessToken.trim().length>0?b.accessToken:null,e="string"==typeof c.workspaceId&&c.workspaceId.trim().length>0?c.workspaceId:void 0;if(d){let b={accessToken:d,...e?{workspaceId:e}:{}};return h.set(a,b),b}}return h.get(a)||null}(a,b);if(!d?.accessToken)return null;try{let b={Authorization:`Bearer ${d.accessToken}`,"Content-Type":"application/json",Accept:"application/json"};d.workspaceId&&(b["chatgpt-account-id"]=d.workspaceId);let c=await fetch("https://chatgpt.com/backend-api/wham/usage",{method:"GET",headers:b,signal:AbortSignal.timeout(8e3)});if(!c.ok)return(401===c.status||403===c.status)&&(f.delete(a),h.delete(a)),null;let e=await c.json(),g=function(a){var b;let c=l(a),d=l(c.rate_limit??c.rateLimit),e=l(d.primary_window??d.primaryWindow),f=l(d.secondary_window??d.secondaryWindow),g=Object.keys(e).length>0,h=Object.keys(f).length>0;if(!g&&!h)return null;let i=g?k(e.used_percent??e.usedPercent,0):0,j=g?m(e):null,n=h?k(f.used_percent??f.usedPercent,0):0,o=h?m(f):null,p=Math.max(i,n),q=!!(d.limit_reached??d.limitReached);return{used:p,total:100,percentUsed:p/100,resetAt:(b={window5h:{percentUsed:i/100,resetAt:j},window7d:{percentUsed:n/100,resetAt:o}}).window7d.percentUsed>b.window5h.percentUsed?b.window7d.resetAt||b.window5h.resetAt:b.window5h.percentUsed>b.window7d.percentUsed?b.window5h.resetAt||b.window7d.resetAt:b.window7d.resetAt||b.window5h.resetAt,window5h:{percentUsed:i/100,resetAt:j},window7d:{percentUsed:n/100,resetAt:o},limitReached:q}}(e);if(!g)return null;return f.set(a,{quota:g,fetchedAt:Date.now()}),g}catch{return null}}function k(a,b=0){if("number"==typeof a&&Number.isFinite(a))return a;if("string"==typeof a){let b=parseFloat(a);if(Number.isFinite(b))return b}return b}function l(a){return a&&"object"==typeof a&&!Array.isArray(a)?a:{}}function m(a){let b=k(a.reset_at??a.resetAt,0);if(b>0)return new Date(1e3*b).toISOString();let c=k(a.reset_after_seconds??a.resetAfterSeconds,0);return c>0?new Date(Date.now()+1e3*c).toISOString():null}function n(a){f.delete(a)}function o(){(0,d.Zd)("codex",j),(0,e.br)("codex",j)}},71861:(a,b,c)=>{c.d(b,{A1:()=>k,Mt:()=>m,lR:()=>o,q8:()=>n,wO:()=>l,xJ:()=>f,yj:()=>g,zL:()=>j});var d=c(44444),e=c(30032);function f(a,b){let c=(0,d.B1)(a);return{error:{message:b||(0,d.nZ)(a),type:c.type,code:c.code}}}function g(a,b){return new Response(JSON.stringify(f(a,b)),{status:a,headers:{"Content-Type":"application/json"}})}function h(a){if("number"==typeof a&&Number.isFinite(a)){if(a>0&&a<1e9)return Math.max(Math.ceil(a),1);let b=new Date(a).getTime();if(Number.isFinite(b))return Math.max(Math.ceil((b-Date.now())/1e3),1)}if(a instanceof Date||"string"==typeof a){let b=new Date(a).getTime();if(Number.isFinite(b))return Math.max(Math.ceil((b-Date.now())/1e3),1)}return 1}function i(a){if("string"!=typeof a)return null;let b=a.match(/reset after (\d+h)?(\d+m)?(\d+s)?/i);if(!b)return null;let c=0;return b[1]&&(c+=60*parseInt(b[1])*6e4),b[2]&&(c+=60*parseInt(b[2])*1e3),b[3]&&(c+=1e3*parseInt(b[3])),c>0?c:null}async function j(a,b=null){let c="",d=null,f=null;try{let b=await a.text();f=(0,e.xm)(b);try{let a=JSON.parse(b);c=a.error?.message||a.message||a.error||b}catch{c=b}}catch{f={_rawText:c=`Upstream error: ${a.status}`}}let g="string"==typeof c?c:JSON.stringify(c),h=a.headers?.get?.("retry-after");if(h&&!d){let a=Number.parseInt(h,10);if(Number.isFinite(a)&&a>0)d=1e3*a;else{let a=new Date(h).getTime();Number.isFinite(a)&&a>Date.now()&&(d=a-Date.now())}}if("antigravity"===b&&429===a.status&&(d=i(g)),429!==a.status||d||(d=i(g)),429===a.status&&!d){let a=g.match(/retry\s+after\s+(\d+)\s*s/i);a&&(d=1e3*Number.parseInt(a[1],10))}return d&&d>864e5&&(d=864e5),{statusCode:a.status,message:g,retryAfterMs:d,responseBody:f}}function k(a,b,c=null){let d={success:!1,status:a,error:b,response:g(a,b)};return c&&(d.retryAfterMs=c),d}function l(a,b,c,d){let e=h(c);return new Response(JSON.stringify({error:{message:d?`${b} (${d})`:b}}),{status:a,headers:{"Content-Type":"application/json","Retry-After":String(e)}})}function m(a,b){let c=h(b);return new Response(JSON.stringify({error:{message:`Provider ${a} circuit breaker is open`,type:"server_error",code:"provider_circuit_open",provider:a,retry_after:c}}),{status:503,headers:{"Content-Type":"application/json","Retry-After":String(c),"X-OmniRoute-Provider-Breaker":"open"}})}function n({model:a,retryAfter:b}){let c=h(b);return new Response(JSON.stringify(function({model:a,retryAfterSec:b}){let c="string"==typeof a&&a.trim().length>0?a.trim():null;return{error:{message:c?`All credentials for model ${c} are cooling down`:"All credentials for the requested model are cooling down",type:"rate_limit_error",code:"model_cooldown",...c?{model:c}:{},reset_seconds:Math.max(Math.ceil(b),1)}}}({model:a,retryAfterSec:c})),{status:429,headers:{"Content-Type":"application/json","Retry-After":String(c)}})}function o(a,b,c,d){let e=d||a.code||"FETCH_FAILED",f=a.message||"Unknown error";return`[${e}]: ${f}`}},85248:(a,b,c)=>{c.d(b,{AF:()=>i,Pu:()=>h,Wk:()=>g,fd:()=>k,jc:()=>j});var d=c(77044);let e=0;function f(a){if(Array.isArray(a))return a.map(a=>"string"==typeof a?a:String(a)).filter(Boolean);if("string"!=typeof a||0===a.trim().length)return[];try{let b=JSON.parse(a);return Array.isArray(b)?b.map(a=>"string"==typeof a?a:String(a)).filter(Boolean):[]}catch{return[]}}function g(a){let b=(0,d.sm)(),c=new Date().toISOString();b.prepare(`INSERT INTO context_handoffs
34
+ `;a.enqueue(f.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(f.encode(a))}else b.enqueue(f.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(f.encode(c))}else a.enqueue(f.encode(b))}}),m=d.body.pipeThrough(i).pipeThrough(l),n=new Headers(d.headers);return n.set("X-OmniRoute-Model",b),new Response(m,{status:d.status,headers:n})}:j;if(I)return l.info("COMBO",`Bypassing strategy — routing directly to pinned context model: ${I}`),K(a,I);if("round-robin"===B)return ar({body:a,combo:b,handleSingleModel:K,isModelAvailable:k,log:l,settings:m,allCombos:n,signal:A});let L=m?(0,g.Z)(b,m):{...(0,g.E)(),...b.config||{}},M=L.maxRetries??1,N=L.retryDelayMs??2e3,O="weighted"===B?function(a,b){let c=af(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:an((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,ae(a).length>0).flatMap(c=>b?ag(c,b,new Set([a.name])):"model"===c.kind?[c]:[])),selectedStep:d}:{orderedTargets:[],selectedStep:null}}(b,n)?.orderedTargets||[]:ap(b,n);if(O=await ao(O,a,l),"weighted"===B?l.info("COMBO",`Weighted selection${n?" with nested resolution":""}: ${O.length} total targets`):n&&l.info("COMBO",`${B} with nested resolution: ${O.length} total targets`),"auto"===B){var S;let d,e,g=Array.isArray(a?.tools)&&a.tools.length>0,h=[...O];if(g){let a=h.filter(a=>(0,Q.P5)(a.modelStr));a.length>0?h=a:l.warn("COMBO","Auto strategy: all candidates filtered by tool-calling policy, falling back to full pool")}let i=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),j="string"==typeof b?.system_message?b.system_message:void 0,k=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=[...s,...b.extraCodeKeywords??[]],h=[...t,...b.extraReasoningKeywords??[]],i=[...u,...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"}(i,(e=b?.autoConfig?.intentConfig||b?.config?.auto?.intentConfig||b?.config?.intentConfig||{},{...v,...e,..."boolean"==typeof m?.intentDetectionEnabled?{enabled:m.intentDetectionEnabled}:{},...Number.isFinite(Number(m?.intentSimpleMaxWords))?{simpleMaxWords:Number(m.intentSimpleMaxWords)}:{},...ak(m?.intentExtraCodeKeywords).length>0?{extraCodeKeywords:ak(m.intentExtraCodeKeywords)}:{},...ak(m?.intentExtraReasoningKeywords).length>0?{extraReasoningKeywords:ak(m.intentExtraReasoningKeywords)}:{},...ak(m?.intentExtraSimpleKeywords).length>0?{extraSimpleKeywords:ak(m.intentExtraSimpleKeywords)}:{}}),j);(0,f.WC)(b.name,k);let n=function(a){switch(a){case"code":return"coding";case"reasoning":return"analysis";default:return"default"}}(k),o=b?.autoConfig||b?.config?.auto||b?.config||{},p="string"==typeof o.routingStrategy?o.routingStrategy:"string"==typeof o.strategyName?o.strategyName:"rules",r=Array.isArray(o.candidatePool)?o.candidatePool:[...new Set(h.map(a=>a.provider))],A=o.weights&&"object"==typeof o.weights?o.weights:w,B=Number.isFinite(Number(o.explorationRate))?Number(o.explorationRate):.05,G=Number.isFinite(Number(o.budgetCap))?Number(o.budgetCap):void 0,H="string"==typeof o.modePack?o.modePack:void 0;try{let{getLKGP:a}=await Promise.all([c.e(75734),c.e(9679),c.e(3598),c.e(22073),c.e(33364)]).then(c.bind(c,33364)),e=await a(b.name,b.id||b.name);e&&(d=e)}catch(a){l.warn("COMBO","Failed to retrieve Last Known Good Provider. This is non-fatal.",{err:a})}let I=await am(h,b.name);if(I.length>0){let a,c=null,e=null,f="";if("rules"!==p)try{let a=function(a,b,c="rules"){return P(c).select(a,b)}(I,{taskType:n,requestHasTools:g,lastKnownGoodProvider:d},p);c=a.provider,e=a.model,f=a.reason}catch(a){l.warn("COMBO",`Auto strategy '${p}' failed (${a?.message||"unknown"}), falling back to rules`)}if(!c||!e){let a=function(a,b,c="default"){let d,e=(F||(F=new E),F),f=a.weights;if(a.modePack){let b=D[a.modePack];b&&(f=b)}.01>Math.abs(Object.values(f).reduce((a,b)=>a+b,0)-1)||(f=w);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=z(h,c,f,C),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:A,modePack:H,budgetCap:G,explorationRate:B},I,n);c=a.provider,e=a.model,f=`score=${a.score.toFixed(3)}${a.isExploration?" (exploration)":""}`}let i=(S=h,a=new Map(I.map(a=>[a.executionKey,a])),S.map(b=>{let c=a.get(b.executionKey);return c?{target:b,score:x(y(c,I,n,C),A)}:null}).filter(Boolean).sort((a,b)=>b.score-a.score)),j=i.map(a=>a.target),m=i.find(a=>{let b=(0,q.parseModel)(a.target.modelStr).model||a.target.modelStr;return a.target.provider===c&&b===e})?.target||j[0]||h[0];O=an([m,...j,...h].filter(Boolean)),l.info("COMBO",`Auto selection: ${m?.modelStr||`${c}/${e}`} | intent=${k} task=${n} | strategy=${p} | ${f}`)}else l.warn("COMBO","Auto strategy has no candidates, keeping default ordering")}else if("lkgp"===B)try{let{getLKGP:a}=await Promise.all([c.e(75734),c.e(9679),c.e(3598),c.e(22073),c.e(33364)]).then(c.bind(c,33364)),d=await a(b.name,b.id||b.name);if(d){let a=O.findIndex(a=>a.provider===d||a.modelStr.startsWith(`${d}/`));if(a>0){let[c]=O.splice(a,1);O.unshift(c),l.info("COMBO",`[LKGP] Prioritizing last known good provider ${d} for combo "${b.name}"`)}else 0===a&&l.debug("COMBO",`[LKGP] Last known good provider ${d} already first for combo "${b.name}"`)}}catch(a){l.warn("COMBO","Failed to retrieve Last Known Good Provider. This is non-fatal.",{err:a})}else if("strict-random"===B){let a=await (0,p.h$)(`combo:${b.name}`,O.map(a=>a.executionKey));O=[O.find(b=>b.executionKey===a)||null,...O.filter(b=>b.executionKey!==a)].filter(Boolean),l.info("COMBO",`Strict-random deck: ${a} selected (${O.length} targets)`)}else"random"===B?(O=(0,p.D)([...O]),l.info("COMBO",`Random shuffle: ${O.length} targets`)):"least-used"===B?(O=function(a,b){let c=function(a,b){let c=(0,f.A5)(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)}(O,b.name),l.info("COMBO",`Least-used ordering: ${O[0]?.modelStr} has fewest requests`)):"cost-optimized"===B?(O=await aj(O),l.info("COMBO",`Cost-optimized ordering: cheapest first (${O[0]?.modelStr})`)):"context-optimized"===B&&(O=function(a){let b,c=((b=a.map(a=>a.modelStr).map(a=>{let b=(0,q.parseModel)(a),c=b.provider||b.providerAlias||"unknown",d=b.model||a;return{modelStr:a,context:(0,Q.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)}(O),l.info("COMBO",`Context-optimized ordering: largest first (${O[0]?.modelStr})`));if(0===O.length)return X("Combo has no executable targets");let T=null,U=null,V=null,W=Date.now(),Y=0,Z=0,$=0;for(let g=0;g<O.length;g++){let j=O[g],m=j.modelStr,n=j.provider,p=await (0,d.LN)(n);if(k&&!await k(m,j)){l.info("COMBO",`Skipping ${m} (all accounts in cooldown)`),g>0&&Z++;continue}for(let k=0;k<=M;k++){if(A?.aborted)return l.info("COMBO",`Client disconnected — aborting combo loop before model ${m}`),(0,e.yj)(499,"Client disconnected");if(++Y>30)return l.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(k>0&&(l.info("COMBO",`Retrying ${m} in ${N}ms (attempt ${k+1}/${M+1})`),await new Promise(a=>{let b=setTimeout(a,N);A?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),A?.aborted))return l.info("COMBO","Client disconnected during retry delay — aborting"),(0,e.yj)(499,"Client disconnected");l.info("COMBO",`Trying model ${g+1}/${O.length}: ${m}${k>0?` (retry ${k})`:""}`);let q=await K(a,m,j);if(q.ok){let d=await _(q,J,l);if(!d.valid){d.reason,l.warn("COMBO",`Model ${m} returned 200 but failed quality check: ${d.reason}`),(0,f.JF)(b.name,m,{success:!1,latencyMs:Date.now()-W,fallbackCount:Z,strategy:B,target:ac(j)}),$++,T=`Upstream response failed quality validation: ${d.reason}`,V||(V=502),g>0&&Z++;break}let e=Date.now()-W;if(l.info("COMBO",`Model ${m} succeeded (${e}ms, ${Z} fallbacks)`),(0,f.JF)(b.name,m,{success:!0,latencyMs:e,fallbackCount:Z,strategy:B,target:ac(j)}),$++,"context-relay"===B&&o?.sessionId&&G&&G.handoffProviders.includes(n)&&"codex"===n){let c=(0,R.bb)(o.sessionId);if(c){let d=await (0,i.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,h.md)({sessionId:o.sessionId,comboName:b.name,connectionId:c,percentUsed:d.percentUsed,messages:f,model:m,expiresAt:e[0]||null,config:G,handleSingleModel:K})}}}if(n)try{let{setLKGP:a}=await Promise.all([c.e(75734),c.e(9679),c.e(3598),c.e(22073),c.e(33364)]).then(c.bind(c,33364));await Promise.all([a(b.name,j.executionKey,n),a(b.name,b.id||b.name,n)])}catch(a){l.warn("COMBO","Failed to record Last Known Good Provider. This is non-fatal.",{err:a})}return d.clonedResponse??q}let r=q.statusText||"",s=null,t=null;try{let a=q.clone();try{let b=await a.text();b&&(r=b.substring(0,500),s=JSON.parse(b),r=s?.error?.message||s?.error||s?.message||r,t=s?.retryAfter||null)}catch{}}catch{}if(t&&(!U||new Date(t)<new Date(U))&&(U=t),"string"!=typeof r)try{r=JSON.stringify(r)}catch{r=String(r)}let u=504===q.status&&ab(s);if(499===q.status)return l.info("COMBO",`Client disconnected (499) during ${m} — stopping combo loop`),(0,f.JF)(b.name,m,{success:!1,latencyMs:Date.now()-W,fallbackCount:Z,strategy:B,target:ac(j)}),$++,q;let{cooldownMs:v}=(0,d.hk)(q.status,r,0,null,n,q.headers,p),w=!u&&[408,429,500,502,503,504].includes(q.status);if(k<M&&w)continue;(0,f.JF)(b.name,m,{success:!1,latencyMs:Date.now()-W,fallbackCount:Z,strategy:B,target:ac(j)}),$++,T=r||String(q.status),V||(V=q.status),g>0&&Z++,l.warn("COMBO",`Model ${m} failed, trying next`,{status:q.status});let x=N>0&&v>0&&v<=5e3?Math.min(v,N):0;if([502,503,504].includes(q.status)&&x>0&&(l.info("COMBO",`Waiting ${x}ms before fallback to next model`),await new Promise(a=>{let b=setTimeout(a,x);A?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),A?.aborted))return l.info("COMBO","Client disconnected during fallback wait — aborting"),(0,e.yj)(499,"Client disconnected");break}}let aa=Date.now()-W;if(0===$&&(0,f.JF)(b.name,null,{success:!1,latencyMs:aa,fallbackCount:Z,strategy:B}),!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,ah=T||"All combo models unavailable";if(U){let a=(0,d.Qo)(U);return l.warn("COMBO",`All models failed | ${ah} (${a})`),(0,e.wO)(ad,ah,U,a)}return l.warn("COMBO",`All models failed | ${ah}`),new Response(JSON.stringify({error:{message:ah}}),{status:ad,headers:{"Content-Type":"application/json"}})}async function ar({body:a,combo:b,handleSingleModel:h,isModelAvailable:i,log:j,settings:o,allCombos:p,signal:q}){let r=o?(0,g.Z)(b,o):{...(0,g.E)(),...b.config||{}},s=r.concurrencyPerModel??3,t=r.queueTimeoutMs??3e4,u=r.maxRetries??1,v=r.retryDelayMs??2e3,w=ap(b,p),x=await ao(w,a,j),y=x.length;if(0===y)return X("Round-robin combo has no executable targets");let z=aa.get(b.name)||0;aa.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 g=0;g<y;g++){let o,p=x[(A+g)%y],r=p.modelStr,w=p.provider,J=await (0,d.LN)(w),K=`combo:${b.name}:${p.executionKey}`;if(i&&!await i(r,p)){j.info("COMBO-RR",`Skipping ${r} (all accounts in cooldown)`),g>0&&H++;continue}try{o=await function(a,{maxConcurrency:b=3,timeoutMs:c=3e4}={}){let d=k(a,b);return d.running<d.max&&!l(d)?(d.running++,Promise.resolve(n(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:s,timeoutMs:t})}catch(a){if("SEMAPHORE_TIMEOUT"===a.code){j.warn("COMBO-RR",`Semaphore timeout for ${r}, trying next model`),g>0&&H++;continue}throw a}try{for(let i=0;i<=u;i++){if(++G>30)return j.warn("COMBO-RR","Maximum combo attempts (30) exceeded. Terminating loop to prevent runaway requests."),(0,e.yj)(503,"Maximum combo retry limit reached");i>0&&(j.info("COMBO-RR",`Retrying ${r} in ${v}ms (attempt ${i+1}/${u+1})`),await new Promise(a=>setTimeout(a,v))),j.info("COMBO-RR",`[RR #${z}] → ${r}${g>0?` (fallback +${g})`:""}${i>0?` (retry ${i})`:""}`);let l=await h(a,r,p);if(l.ok){let a=await _(l,B,j);if(!a.valid){a.reason,j.warn("COMBO-RR",`${r} returned 200 but failed quality check: ${a.reason}`),(0,f.JF)(b.name,r,{success:!1,latencyMs:Date.now()-C,fallbackCount:H,strategy:"round-robin",target:ac(p)}),I++,D=`Upstream response failed quality validation: ${a.reason}`,E||(E=502),g>0&&H++;break}let d=Date.now()-C;if(j.info("COMBO-RR",`${r} succeeded (${d}ms, ${H} fallbacks)`),(0,f.JF)(b.name,r,{success:!0,latencyMs:d,fallbackCount:H,strategy:"round-robin",target:ac(p)}),I++,w)try{let{setLKGP:a}=await Promise.all([c.e(75734),c.e(9679),c.e(3598),c.e(22073),c.e(33364)]).then(c.bind(c,33364));await Promise.all([a(b.name,p.executionKey,w),a(b.name,b.id||b.name,w)])}catch(a){j.warn("COMBO-RR","Failed to record Last Known Good Provider. This is non-fatal.",{err:a})}return l}let n=l.statusText||"",o=null,s=null;try{let a=l.clone();try{let b=await a.text();b&&(n=b.substring(0,500),s=JSON.parse(b),n=s?.error?.message||s?.error||s?.message||n,o=s?.retryAfter||null)}catch{}}catch{}if(499===l.status)return j.info("COMBO-RR",`Client disconnected (499) during ${r} — stopping combo loop`),(0,f.JF)(b.name,r,{success:!1,latencyMs:Date.now()-C,fallbackCount:H,strategy:"round-robin",target:ac(p)}),I++,l;if(o&&(!F||new Date(o)<new Date(F))&&(F=o),"string"!=typeof n)try{n=JSON.stringify(n)}catch{n=String(n)}let t=504===l.status&&ab(s),{cooldownMs:x}=(0,d.hk)(l.status,n,0,null,w,l.headers,J),y=function(a,b,c){return 503===a&&!!b?.includes("application/json")&&W.some(a=>a.test(c))}(l.status,l.headers?.get("content-type")??null,n);V.includes(l.status)&&x>0&&(!function(a,b){let c=k(a);c.rateLimitedUntil=Date.now()+b,setTimeout(()=>{c.rateLimitedUntil&&Date.now()>=c.rateLimitedUntil&&(c.rateLimitedUntil=null,m(a))},b+50)}(K,x),j.warn("COMBO-RR",`${r} error ${l.status}, cooldown ${x}ms`)),y&&j.info("COMBO-RR",`All accounts rate-limited for ${r}, falling back to next model`);let A=!t&&[408,429,500,502,503,504].includes(l.status);if(i<u&&A)continue;(0,f.JF)(b.name,r,{success:!1,latencyMs:Date.now()-C,fallbackCount:H,strategy:"round-robin",target:ac(p)}),I++,D=n||String(l.status),E||(E=l.status),g>0&&H++,j.warn("COMBO-RR",`${r} failed, trying next model`,{status:l.status});let L=v>0&&x>0&&x<=5e3?Math.min(x,v):0;if([502,503,504].includes(l.status)&&L>0&&(j.info("COMBO-RR",`Waiting ${L}ms before fallback to next model`),await new Promise(a=>{let b=setTimeout(a,L);q?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),q?.aborted))return j.info("COMBO-RR","Client disconnected during fallback wait — aborting"),(0,e.yj)(499,"Client disconnected");break}}finally{o()}}let J=Date.now()-C;if(0===I&&(0,f.JF)(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 j.warn("COMBO-RR",`All models failed | ${L} (${a})`),(0,e.wO)(K,L,F,a)}return j.warn("COMBO-RR",`All models failed | ${L}`),new Response(JSON.stringify({error:{message:L}}),{status:K,headers:{"Content-Type":"application/json"}})}},64810:(a,b,c)=>{c.d(b,{GF:()=>j,tg:()=>n,u_:()=>o,zU:()=>i});var d=c(30675),e=c(29210);let f=new Map,g=setInterval(()=>{let a=Date.now();for(let[b,c]of f)a-c.fetchedAt>3e5&&f.delete(b)},3e5);"object"==typeof g&&"unref"in g&&g.unref?.();let h=new Map;function i(a,b){h.set(a,b)}async function j(a,b){let c=f.get(a);if(c&&Date.now()-c.fetchedAt<6e4)return c.quota;let d=function(a,b){if(b&&"object"==typeof b){let c=b.providerSpecificData&&"object"==typeof b.providerSpecificData&&!Array.isArray(b.providerSpecificData)?b.providerSpecificData:{},d="string"==typeof b.accessToken&&b.accessToken.trim().length>0?b.accessToken:null,e="string"==typeof c.workspaceId&&c.workspaceId.trim().length>0?c.workspaceId:void 0;if(d){let b={accessToken:d,...e?{workspaceId:e}:{}};return h.set(a,b),b}}return h.get(a)||null}(a,b);if(!d?.accessToken)return null;try{let b={Authorization:`Bearer ${d.accessToken}`,"Content-Type":"application/json",Accept:"application/json"};d.workspaceId&&(b["chatgpt-account-id"]=d.workspaceId);let c=await fetch("https://chatgpt.com/backend-api/wham/usage",{method:"GET",headers:b,signal:AbortSignal.timeout(8e3)});if(!c.ok)return(401===c.status||403===c.status)&&(f.delete(a),h.delete(a)),null;let e=await c.json(),g=function(a){var b;let c=l(a),d=l(c.rate_limit??c.rateLimit),e=l(d.primary_window??d.primaryWindow),f=l(d.secondary_window??d.secondaryWindow),g=Object.keys(e).length>0,h=Object.keys(f).length>0;if(!g&&!h)return null;let i=g?k(e.used_percent??e.usedPercent,0):0,j=g?m(e):null,n=h?k(f.used_percent??f.usedPercent,0):0,o=h?m(f):null,p=Math.max(i,n),q=!!(d.limit_reached??d.limitReached);return{used:p,total:100,percentUsed:p/100,resetAt:(b={window5h:{percentUsed:i/100,resetAt:j},window7d:{percentUsed:n/100,resetAt:o}}).window7d.percentUsed>b.window5h.percentUsed?b.window7d.resetAt||b.window5h.resetAt:b.window5h.percentUsed>b.window7d.percentUsed?b.window5h.resetAt||b.window7d.resetAt:b.window7d.resetAt||b.window5h.resetAt,window5h:{percentUsed:i/100,resetAt:j},window7d:{percentUsed:n/100,resetAt:o},limitReached:q}}(e);if(!g)return null;return f.set(a,{quota:g,fetchedAt:Date.now()}),g}catch{return null}}function k(a,b=0){if("number"==typeof a&&Number.isFinite(a))return a;if("string"==typeof a){let b=parseFloat(a);if(Number.isFinite(b))return b}return b}function l(a){return a&&"object"==typeof a&&!Array.isArray(a)?a:{}}function m(a){let b=k(a.reset_at??a.resetAt,0);if(b>0)return new Date(1e3*b).toISOString();let c=k(a.reset_after_seconds??a.resetAfterSeconds,0);return c>0?new Date(Date.now()+1e3*c).toISOString():null}function n(a){f.delete(a)}function o(){(0,d.Zd)("codex",j),(0,e.br)("codex",j)}},71861:(a,b,c)=>{c.d(b,{A1:()=>k,Mt:()=>m,lR:()=>o,q8:()=>n,wO:()=>l,xJ:()=>f,yj:()=>g,zL:()=>j});var d=c(44444),e=c(30032);function f(a,b){let c=(0,d.B1)(a);return{error:{message:b||(0,d.nZ)(a),type:c.type,code:c.code}}}function g(a,b){return new Response(JSON.stringify(f(a,b)),{status:a,headers:{"Content-Type":"application/json"}})}function h(a){if("number"==typeof a&&Number.isFinite(a)){if(a>0&&a<1e9)return Math.max(Math.ceil(a),1);let b=new Date(a).getTime();if(Number.isFinite(b))return Math.max(Math.ceil((b-Date.now())/1e3),1)}if(a instanceof Date||"string"==typeof a){let b=new Date(a).getTime();if(Number.isFinite(b))return Math.max(Math.ceil((b-Date.now())/1e3),1)}return 1}function i(a){if("string"!=typeof a)return null;let b=a.match(/reset after (\d+h)?(\d+m)?(\d+s)?/i);if(!b)return null;let c=0;return b[1]&&(c+=60*parseInt(b[1])*6e4),b[2]&&(c+=60*parseInt(b[2])*1e3),b[3]&&(c+=1e3*parseInt(b[3])),c>0?c:null}async function j(a,b=null){let c="",d=null,f=null;try{let b=await a.text();f=(0,e.xm)(b);try{let a=JSON.parse(b);c=a.error?.message||a.message||a.error||b}catch{c=b}}catch{f={_rawText:c=`Upstream error: ${a.status}`}}let g="string"==typeof c?c:JSON.stringify(c),h=a.headers?.get?.("retry-after");if(h&&!d){let a=Number.parseInt(h,10);if(Number.isFinite(a)&&a>0)d=1e3*a;else{let a=new Date(h).getTime();Number.isFinite(a)&&a>Date.now()&&(d=a-Date.now())}}if("antigravity"===b&&429===a.status&&(d=i(g)),429!==a.status||d||(d=i(g)),429===a.status&&!d){let a=g.match(/retry\s+after\s+(\d+)\s*s/i);a&&(d=1e3*Number.parseInt(a[1],10))}return d&&d>864e5&&(d=864e5),{statusCode:a.status,message:g,retryAfterMs:d,responseBody:f}}function k(a,b,c=null){let d={success:!1,status:a,error:b,response:g(a,b)};return c&&(d.retryAfterMs=c),d}function l(a,b,c,d){let e=h(c);return new Response(JSON.stringify({error:{message:d?`${b} (${d})`:b}}),{status:a,headers:{"Content-Type":"application/json","Retry-After":String(e)}})}function m(a,b){let c=h(b);return new Response(JSON.stringify({error:{message:`Provider ${a} circuit breaker is open`,type:"server_error",code:"provider_circuit_open",provider:a,retry_after:c}}),{status:503,headers:{"Content-Type":"application/json","Retry-After":String(c),"X-OmniRoute-Provider-Breaker":"open"}})}function n({model:a,retryAfter:b}){let c=h(b);return new Response(JSON.stringify(function({model:a,retryAfterSec:b}){let c="string"==typeof a&&a.trim().length>0?a.trim():null;return{error:{message:c?`All credentials for model ${c} are cooling down`:"All credentials for the requested model are cooling down",type:"rate_limit_error",code:"model_cooldown",...c?{model:c}:{},reset_seconds:Math.max(Math.ceil(b),1)}}}({model:a,retryAfterSec:c})),{status:429,headers:{"Content-Type":"application/json","Retry-After":String(c)}})}function o(a,b,c,d){let e=d||a.code||"FETCH_FAILED",f=a.message||"Unknown error";return`[${e}]: ${f}`}},85248:(a,b,c)=>{c.d(b,{AF:()=>i,Pu:()=>h,Wk:()=>g,fd:()=>k,jc:()=>j});var d=c(77044);let e=0;function f(a){if(Array.isArray(a))return a.map(a=>"string"==typeof a?a:String(a)).filter(Boolean);if("string"!=typeof a||0===a.trim().length)return[];try{let b=JSON.parse(a);return Array.isArray(b)?b.map(a=>"string"==typeof a?a:String(a)).filter(Boolean):[]}catch{return[]}}function g(a){let b=(0,d.sm)(),c=new Date().toISOString();b.prepare(`INSERT INTO context_handoffs
35
35
  (session_id, combo_name, from_account, summary, key_decisions,
36
36
  task_progress, active_entities, message_count, model,
37
37
  warning_threshold_pct, generated_at, expires_at, created_at)