omniroute 2.5.1 → 2.5.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 (669) hide show
  1. package/app/.env +122 -0
  2. package/app/.next/BUILD_ID +1 -1
  3. package/app/.next/app-path-routes-manifest.json +46 -46
  4. package/app/.next/build-manifest.json +3 -3
  5. package/app/.next/prerender-manifest.json +3 -3
  6. package/app/.next/required-server-files.json +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/a2a/page.js +2 -2
  8. package/app/.next/server/app/(dashboard)/dashboard/a2a/page.js.nft.json +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/a2a/page_client-reference-manifest.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/agents/page.js +2 -2
  11. package/app/.next/server/app/(dashboard)/dashboard/agents/page.js.nft.json +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/analytics/page.js +2 -2
  14. package/app/.next/server/app/(dashboard)/dashboard/analytics/page.js.nft.json +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page.js +2 -2
  17. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page.js.nft.json +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page.js +2 -2
  20. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page.js.nft.json +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page.js +2 -2
  23. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page.js.nft.json +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +4 -4
  26. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -2
  29. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  31. package/app/.next/server/app/(dashboard)/dashboard/costs/page.js +2 -2
  32. package/app/.next/server/app/(dashboard)/dashboard/costs/page.js.nft.json +1 -1
  33. package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
  34. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  35. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  36. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  37. package/app/.next/server/app/(dashboard)/dashboard/health/page.js +2 -2
  38. package/app/.next/server/app/(dashboard)/dashboard/health/page.js.nft.json +1 -1
  39. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  40. package/app/.next/server/app/(dashboard)/dashboard/limits/page.js +2 -2
  41. package/app/.next/server/app/(dashboard)/dashboard/limits/page.js.nft.json +1 -1
  42. package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
  43. package/app/.next/server/app/(dashboard)/dashboard/logs/page.js +2 -2
  44. package/app/.next/server/app/(dashboard)/dashboard/logs/page.js.nft.json +1 -1
  45. package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  46. package/app/.next/server/app/(dashboard)/dashboard/mcp/page.js +2 -2
  47. package/app/.next/server/app/(dashboard)/dashboard/mcp/page.js.nft.json +1 -1
  48. package/app/.next/server/app/(dashboard)/dashboard/mcp/page_client-reference-manifest.js +1 -1
  49. package/app/.next/server/app/(dashboard)/dashboard/media/page.js +2 -2
  50. package/app/.next/server/app/(dashboard)/dashboard/media/page.js.nft.json +1 -1
  51. package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
  52. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js +2 -2
  53. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js.nft.json +1 -1
  54. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  55. package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
  56. package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  57. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  58. package/app/.next/server/app/(dashboard)/dashboard/playground/page.js +3 -3
  59. package/app/.next/server/app/(dashboard)/dashboard/playground/page.js.nft.json +1 -1
  60. package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  61. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -2
  62. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  63. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  64. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  65. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  66. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  67. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
  68. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  69. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  70. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  71. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  72. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  73. package/app/.next/server/app/(dashboard)/dashboard/settings/page.js +2 -2
  74. package/app/.next/server/app/(dashboard)/dashboard/settings/page.js.nft.json +1 -1
  75. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  76. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page.js +2 -2
  77. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page.js.nft.json +1 -1
  78. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  79. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +3 -3
  80. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  81. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  82. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  83. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  84. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  85. package/app/.next/server/app/.well-known/agent.json/route.js +1 -1
  86. package/app/.next/server/app/.well-known/agent.json/route_client-reference-manifest.js +1 -1
  87. package/app/.next/server/app/400/page.js +2 -2
  88. package/app/.next/server/app/400/page.js.nft.json +1 -1
  89. package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
  90. package/app/.next/server/app/401/page.js +2 -2
  91. package/app/.next/server/app/401/page.js.nft.json +1 -1
  92. package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
  93. package/app/.next/server/app/403/page.js +2 -2
  94. package/app/.next/server/app/403/page.js.nft.json +1 -1
  95. package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
  96. package/app/.next/server/app/408/page.js +2 -2
  97. package/app/.next/server/app/408/page.js.nft.json +1 -1
  98. package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
  99. package/app/.next/server/app/429/page.js +2 -2
  100. package/app/.next/server/app/429/page.js.nft.json +1 -1
  101. package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
  102. package/app/.next/server/app/500/page.js +2 -2
  103. package/app/.next/server/app/500/page.js.nft.json +1 -1
  104. package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
  105. package/app/.next/server/app/502/page.js +2 -2
  106. package/app/.next/server/app/502/page.js.nft.json +1 -1
  107. package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
  108. package/app/.next/server/app/503/page.js +2 -2
  109. package/app/.next/server/app/503/page.js.nft.json +1 -1
  110. package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
  111. package/app/.next/server/app/_global-error/page.js +3 -3
  112. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  113. package/app/.next/server/app/_global-error.html +2 -2
  114. package/app/.next/server/app/_global-error.rsc +5 -5
  115. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +5 -5
  116. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  117. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  118. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  119. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +4 -4
  120. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  121. package/app/.next/server/app/_not-found/page.js +2 -2
  122. package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
  123. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  124. package/app/.next/server/app/a2a/route.js +2 -2
  125. package/app/.next/server/app/a2a/route_client-reference-manifest.js +1 -1
  126. package/app/.next/server/app/api/a2a/status/route.js +1 -1
  127. package/app/.next/server/app/api/a2a/status/route_client-reference-manifest.js +1 -1
  128. package/app/.next/server/app/api/a2a/tasks/[id]/cancel/route.js +1 -1
  129. package/app/.next/server/app/api/a2a/tasks/[id]/cancel/route_client-reference-manifest.js +1 -1
  130. package/app/.next/server/app/api/a2a/tasks/[id]/route.js +1 -1
  131. package/app/.next/server/app/api/a2a/tasks/[id]/route_client-reference-manifest.js +1 -1
  132. package/app/.next/server/app/api/a2a/tasks/route.js +1 -1
  133. package/app/.next/server/app/api/a2a/tasks/route_client-reference-manifest.js +1 -1
  134. package/app/.next/server/app/api/acp/agents/route.js +1 -1
  135. package/app/.next/server/app/api/acp/agents/route.js.nft.json +1 -1
  136. package/app/.next/server/app/api/acp/agents/route_client-reference-manifest.js +1 -1
  137. package/app/.next/server/app/api/auth/login/route.js +1 -1
  138. package/app/.next/server/app/api/auth/login/route.js.nft.json +1 -1
  139. package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  140. package/app/.next/server/app/api/auth/logout/route.js +1 -1
  141. package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  142. package/app/.next/server/app/api/auth/status/route.js +1 -1
  143. package/app/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  144. package/app/.next/server/app/api/cache/route.js +1 -1
  145. package/app/.next/server/app/api/cache/route.js.nft.json +1 -1
  146. package/app/.next/server/app/api/cache/route_client-reference-manifest.js +1 -1
  147. package/app/.next/server/app/api/cache/stats/route.js +1 -1
  148. package/app/.next/server/app/api/cache/stats/route_client-reference-manifest.js +1 -1
  149. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  150. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  151. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  152. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +2 -2
  153. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  154. package/app/.next/server/app/api/cli-tools/backups/route.js +2 -2
  155. package/app/.next/server/app/api/cli-tools/backups/route_client-reference-manifest.js +1 -1
  156. package/app/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
  157. package/app/.next/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  158. package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  159. package/app/.next/server/app/api/cli-tools/cline-settings/route.js +2 -2
  160. package/app/.next/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  161. package/app/.next/server/app/api/cli-tools/cline-settings/route_client-reference-manifest.js +1 -1
  162. package/app/.next/server/app/api/cli-tools/codex-profiles/route.js +2 -2
  163. package/app/.next/server/app/api/cli-tools/codex-profiles/route_client-reference-manifest.js +1 -1
  164. package/app/.next/server/app/api/cli-tools/codex-settings/route.js +2 -2
  165. package/app/.next/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  166. package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  167. package/app/.next/server/app/api/cli-tools/droid-settings/route.js +2 -2
  168. package/app/.next/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  169. package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  170. package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route.js +1 -1
  171. package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route_client-reference-manifest.js +1 -1
  172. package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  173. package/app/.next/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  174. package/app/.next/server/app/api/cli-tools/kilo-settings/route_client-reference-manifest.js +1 -1
  175. package/app/.next/server/app/api/cli-tools/openclaw/auto-order/route.js +1 -1
  176. package/app/.next/server/app/api/cli-tools/openclaw/auto-order/route_client-reference-manifest.js +1 -1
  177. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +1 -1
  178. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  179. package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  180. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route.js +2 -2
  181. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route_client-reference-manifest.js +1 -1
  182. package/app/.next/server/app/api/cli-tools/status/route.js +2 -2
  183. package/app/.next/server/app/api/cli-tools/status/route.js.nft.json +1 -1
  184. package/app/.next/server/app/api/cli-tools/status/route_client-reference-manifest.js +1 -1
  185. package/app/.next/server/app/api/cloud/auth/route.js +1 -1
  186. package/app/.next/server/app/api/cloud/auth/route.js.nft.json +1 -1
  187. package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
  188. package/app/.next/server/app/api/cloud/credentials/update/route.js +1 -1
  189. package/app/.next/server/app/api/cloud/credentials/update/route.js.nft.json +1 -1
  190. package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
  191. package/app/.next/server/app/api/cloud/model/resolve/route.js +1 -1
  192. package/app/.next/server/app/api/cloud/model/resolve/route.js.nft.json +1 -1
  193. package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
  194. package/app/.next/server/app/api/cloud/models/alias/route.js +1 -1
  195. package/app/.next/server/app/api/cloud/models/alias/route.js.nft.json +1 -1
  196. package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
  197. package/app/.next/server/app/api/combos/[id]/route.js +1 -1
  198. package/app/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
  199. package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
  200. package/app/.next/server/app/api/combos/auto/route.js +1 -1
  201. package/app/.next/server/app/api/combos/auto/route_client-reference-manifest.js +1 -1
  202. package/app/.next/server/app/api/combos/metrics/route.js +1 -1
  203. package/app/.next/server/app/api/combos/metrics/route_client-reference-manifest.js +1 -1
  204. package/app/.next/server/app/api/combos/route.js +1 -1
  205. package/app/.next/server/app/api/combos/route.js.nft.json +1 -1
  206. package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
  207. package/app/.next/server/app/api/combos/test/route.js +1 -1
  208. package/app/.next/server/app/api/combos/test/route.js.nft.json +1 -1
  209. package/app/.next/server/app/api/combos/test/route_client-reference-manifest.js +1 -1
  210. package/app/.next/server/app/api/compliance/audit-log/route.js +1 -1
  211. package/app/.next/server/app/api/compliance/audit-log/route.js.nft.json +1 -1
  212. package/app/.next/server/app/api/compliance/audit-log/route_client-reference-manifest.js +1 -1
  213. package/app/.next/server/app/api/db-backups/export/route.js +1 -1
  214. package/app/.next/server/app/api/db-backups/export/route.js.nft.json +1 -1
  215. package/app/.next/server/app/api/db-backups/export/route_client-reference-manifest.js +1 -1
  216. package/app/.next/server/app/api/db-backups/exportAll/route.js +1 -1
  217. package/app/.next/server/app/api/db-backups/exportAll/route.js.nft.json +1 -1
  218. package/app/.next/server/app/api/db-backups/exportAll/route_client-reference-manifest.js +1 -1
  219. package/app/.next/server/app/api/db-backups/import/route.js +1 -1
  220. package/app/.next/server/app/api/db-backups/import/route.js.nft.json +1 -1
  221. package/app/.next/server/app/api/db-backups/import/route_client-reference-manifest.js +1 -1
  222. package/app/.next/server/app/api/db-backups/route.js +1 -1
  223. package/app/.next/server/app/api/db-backups/route.js.nft.json +1 -1
  224. package/app/.next/server/app/api/db-backups/route_client-reference-manifest.js +1 -1
  225. package/app/.next/server/app/api/evals/[suiteId]/route.js +1 -1
  226. package/app/.next/server/app/api/evals/[suiteId]/route_client-reference-manifest.js +1 -1
  227. package/app/.next/server/app/api/evals/route.js +1 -1
  228. package/app/.next/server/app/api/evals/route_client-reference-manifest.js +1 -1
  229. package/app/.next/server/app/api/fallback/chains/route.js +2 -2
  230. package/app/.next/server/app/api/fallback/chains/route.js.nft.json +1 -1
  231. package/app/.next/server/app/api/fallback/chains/route_client-reference-manifest.js +1 -1
  232. package/app/.next/server/app/api/init/route.js +1 -1
  233. package/app/.next/server/app/api/init/route.js.nft.json +1 -1
  234. package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  235. package/app/.next/server/app/api/keys/[id]/route.js +1 -1
  236. package/app/.next/server/app/api/keys/[id]/route.js.nft.json +1 -1
  237. package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  238. package/app/.next/server/app/api/keys/route.js +1 -1
  239. package/app/.next/server/app/api/keys/route.js.nft.json +1 -1
  240. package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
  241. package/app/.next/server/app/api/logs/console/route.js +1 -1
  242. package/app/.next/server/app/api/logs/console/route_client-reference-manifest.js +1 -1
  243. package/app/.next/server/app/api/mcp/audit/route.js +2 -2
  244. package/app/.next/server/app/api/mcp/audit/route.js.nft.json +1 -1
  245. package/app/.next/server/app/api/mcp/audit/route_client-reference-manifest.js +1 -1
  246. package/app/.next/server/app/api/mcp/audit/stats/route.js +2 -2
  247. package/app/.next/server/app/api/mcp/audit/stats/route.js.nft.json +1 -1
  248. package/app/.next/server/app/api/mcp/audit/stats/route_client-reference-manifest.js +1 -1
  249. package/app/.next/server/app/api/mcp/sse/route.js +1 -1
  250. package/app/.next/server/app/api/mcp/sse/route.js.nft.json +1 -1
  251. package/app/.next/server/app/api/mcp/sse/route_client-reference-manifest.js +1 -1
  252. package/app/.next/server/app/api/mcp/status/route.js +1 -1
  253. package/app/.next/server/app/api/mcp/status/route.js.nft.json +1 -1
  254. package/app/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  255. package/app/.next/server/app/api/mcp/stream/route.js +1 -1
  256. package/app/.next/server/app/api/mcp/stream/route.js.nft.json +1 -1
  257. package/app/.next/server/app/api/mcp/stream/route_client-reference-manifest.js +1 -1
  258. package/app/.next/server/app/api/mcp/tools/route.js +1 -1
  259. package/app/.next/server/app/api/mcp/tools/route_client-reference-manifest.js +1 -1
  260. package/app/.next/server/app/api/models/alias/route.js +1 -1
  261. package/app/.next/server/app/api/models/alias/route.js.nft.json +1 -1
  262. package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  263. package/app/.next/server/app/api/models/availability/route.js +1 -1
  264. package/app/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -1
  265. package/app/.next/server/app/api/models/catalog/route.js +1 -1
  266. package/app/.next/server/app/api/models/catalog/route.js.nft.json +1 -1
  267. package/app/.next/server/app/api/models/catalog/route_client-reference-manifest.js +1 -1
  268. package/app/.next/server/app/api/models/openrouter-catalog/route.js +1 -1
  269. package/app/.next/server/app/api/models/openrouter-catalog/route.js.nft.json +1 -1
  270. package/app/.next/server/app/api/models/openrouter-catalog/route_client-reference-manifest.js +1 -1
  271. package/app/.next/server/app/api/models/route.js +1 -1
  272. package/app/.next/server/app/api/models/route.js.nft.json +1 -1
  273. package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  274. package/app/.next/server/app/api/monitoring/health/route.js +1 -1
  275. package/app/.next/server/app/api/monitoring/health/route.js.nft.json +1 -1
  276. package/app/.next/server/app/api/monitoring/health/route_client-reference-manifest.js +1 -1
  277. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  278. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  279. package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
  280. package/app/.next/server/app/api/oauth/cursor/auto-import/route.js +1 -1
  281. package/app/.next/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  282. package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
  283. package/app/.next/server/app/api/oauth/cursor/import/route.js +1 -1
  284. package/app/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  285. package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
  286. package/app/.next/server/app/api/oauth/kiro/auto-import/route.js +1 -1
  287. package/app/.next/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  288. package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
  289. package/app/.next/server/app/api/oauth/kiro/import/route.js +1 -1
  290. package/app/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  291. package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
  292. package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  293. package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
  294. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  295. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  296. package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
  297. package/app/.next/server/app/api/policies/route.js +2 -2
  298. package/app/.next/server/app/api/policies/route.js.nft.json +1 -1
  299. package/app/.next/server/app/api/policies/route_client-reference-manifest.js +1 -1
  300. package/app/.next/server/app/api/pricing/defaults/route.js +1 -1
  301. package/app/.next/server/app/api/pricing/defaults/route_client-reference-manifest.js +1 -1
  302. package/app/.next/server/app/api/pricing/models/route.js +1 -1
  303. package/app/.next/server/app/api/pricing/models/route.js.nft.json +1 -1
  304. package/app/.next/server/app/api/pricing/models/route_client-reference-manifest.js +1 -1
  305. package/app/.next/server/app/api/pricing/route.js +1 -1
  306. package/app/.next/server/app/api/pricing/route.js.nft.json +1 -1
  307. package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
  308. package/app/.next/server/app/api/pricing/sync/route.js +1 -1
  309. package/app/.next/server/app/api/pricing/sync/route.js.nft.json +1 -1
  310. package/app/.next/server/app/api/pricing/sync/route_client-reference-manifest.js +1 -1
  311. package/app/.next/server/app/api/provider-metrics/route.js +2 -2
  312. package/app/.next/server/app/api/provider-metrics/route.js.nft.json +1 -1
  313. package/app/.next/server/app/api/provider-metrics/route_client-reference-manifest.js +1 -1
  314. package/app/.next/server/app/api/provider-models/route.js +1 -1
  315. package/app/.next/server/app/api/provider-models/route.js.nft.json +1 -1
  316. package/app/.next/server/app/api/provider-models/route_client-reference-manifest.js +1 -1
  317. package/app/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
  318. package/app/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  319. package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
  320. package/app/.next/server/app/api/provider-nodes/route.js +2 -2
  321. package/app/.next/server/app/api/provider-nodes/route.js.nft.json +1 -1
  322. package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
  323. package/app/.next/server/app/api/provider-nodes/validate/route.js +1 -1
  324. package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
  325. package/app/.next/server/app/api/providers/[id]/models/route.js +1 -1
  326. package/app/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  327. package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
  328. package/app/.next/server/app/api/providers/[id]/refresh/route.js +1 -1
  329. package/app/.next/server/app/api/providers/[id]/refresh/route.js.nft.json +1 -1
  330. package/app/.next/server/app/api/providers/[id]/refresh/route_client-reference-manifest.js +1 -1
  331. package/app/.next/server/app/api/providers/[id]/route.js +1 -1
  332. package/app/.next/server/app/api/providers/[id]/route.js.nft.json +1 -1
  333. package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
  334. package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
  335. package/app/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  336. package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
  337. package/app/.next/server/app/api/providers/client/route.js +1 -1
  338. package/app/.next/server/app/api/providers/client/route.js.nft.json +1 -1
  339. package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  340. package/app/.next/server/app/api/providers/route.js +1 -1
  341. package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
  342. package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
  343. package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
  344. package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  345. package/app/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
  346. package/app/.next/server/app/api/providers/validate/route.js +1 -1
  347. package/app/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
  348. package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
  349. package/app/.next/server/app/api/rate-limit/route.js +1 -1
  350. package/app/.next/server/app/api/rate-limit/route_client-reference-manifest.js +1 -1
  351. package/app/.next/server/app/api/rate-limits/route.js +1 -1
  352. package/app/.next/server/app/api/rate-limits/route.js.nft.json +1 -1
  353. package/app/.next/server/app/api/rate-limits/route_client-reference-manifest.js +1 -1
  354. package/app/.next/server/app/api/resilience/reset/route.js +1 -1
  355. package/app/.next/server/app/api/resilience/reset/route.js.nft.json +1 -1
  356. package/app/.next/server/app/api/resilience/reset/route_client-reference-manifest.js +1 -1
  357. package/app/.next/server/app/api/resilience/route.js +1 -1
  358. package/app/.next/server/app/api/resilience/route.js.nft.json +1 -1
  359. package/app/.next/server/app/api/resilience/route_client-reference-manifest.js +1 -1
  360. package/app/.next/server/app/api/restart/route.js +1 -1
  361. package/app/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  362. package/app/.next/server/app/api/sessions/route.js +1 -1
  363. package/app/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  364. package/app/.next/server/app/api/settings/background-degradation/route.js +1 -1
  365. package/app/.next/server/app/api/settings/background-degradation/route.js.nft.json +1 -1
  366. package/app/.next/server/app/api/settings/background-degradation/route_client-reference-manifest.js +1 -1
  367. package/app/.next/server/app/api/settings/codex-service-tier/route.js +1 -1
  368. package/app/.next/server/app/api/settings/codex-service-tier/route.js.nft.json +1 -1
  369. package/app/.next/server/app/api/settings/codex-service-tier/route_client-reference-manifest.js +1 -1
  370. package/app/.next/server/app/api/settings/combo-defaults/route.js +1 -1
  371. package/app/.next/server/app/api/settings/combo-defaults/route.js.nft.json +1 -1
  372. package/app/.next/server/app/api/settings/combo-defaults/route_client-reference-manifest.js +1 -1
  373. package/app/.next/server/app/api/settings/ip-filter/route.js +1 -1
  374. package/app/.next/server/app/api/settings/ip-filter/route_client-reference-manifest.js +1 -1
  375. package/app/.next/server/app/api/settings/model-aliases/route.js +1 -1
  376. package/app/.next/server/app/api/settings/model-aliases/route.js.nft.json +1 -1
  377. package/app/.next/server/app/api/settings/model-aliases/route_client-reference-manifest.js +1 -1
  378. package/app/.next/server/app/api/settings/proxy/route.js +1 -1
  379. package/app/.next/server/app/api/settings/proxy/route.js.nft.json +1 -1
  380. package/app/.next/server/app/api/settings/proxy/route_client-reference-manifest.js +1 -1
  381. package/app/.next/server/app/api/settings/proxy/test/route.js +1 -1
  382. package/app/.next/server/app/api/settings/proxy/test/route_client-reference-manifest.js +1 -1
  383. package/app/.next/server/app/api/settings/require-login/route.js +1 -1
  384. package/app/.next/server/app/api/settings/require-login/route.js.nft.json +1 -1
  385. package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
  386. package/app/.next/server/app/api/settings/route.js +1 -1
  387. package/app/.next/server/app/api/settings/route.js.nft.json +1 -1
  388. package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  389. package/app/.next/server/app/api/settings/system-prompt/route.js +1 -1
  390. package/app/.next/server/app/api/settings/system-prompt/route.js.nft.json +1 -1
  391. package/app/.next/server/app/api/settings/system-prompt/route_client-reference-manifest.js +1 -1
  392. package/app/.next/server/app/api/settings/task-routing/route.js +1 -1
  393. package/app/.next/server/app/api/settings/task-routing/route.js.nft.json +1 -1
  394. package/app/.next/server/app/api/settings/task-routing/route_client-reference-manifest.js +1 -1
  395. package/app/.next/server/app/api/settings/thinking-budget/route.js +1 -1
  396. package/app/.next/server/app/api/settings/thinking-budget/route.js.nft.json +1 -1
  397. package/app/.next/server/app/api/settings/thinking-budget/route_client-reference-manifest.js +1 -1
  398. package/app/.next/server/app/api/shutdown/route.js +1 -1
  399. package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  400. package/app/.next/server/app/api/storage/health/route.js +1 -1
  401. package/app/.next/server/app/api/storage/health/route_client-reference-manifest.js +1 -1
  402. package/app/.next/server/app/api/sync/cloud/route.js +1 -1
  403. package/app/.next/server/app/api/sync/cloud/route.js.nft.json +1 -1
  404. package/app/.next/server/app/api/sync/cloud/route_client-reference-manifest.js +1 -1
  405. package/app/.next/server/app/api/sync/initialize/route.js +1 -1
  406. package/app/.next/server/app/api/sync/initialize/route.js.nft.json +1 -1
  407. package/app/.next/server/app/api/sync/initialize/route_client-reference-manifest.js +1 -1
  408. package/app/.next/server/app/api/tags/route.js +1 -1
  409. package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
  410. package/app/.next/server/app/api/telemetry/summary/route.js +1 -1
  411. package/app/.next/server/app/api/telemetry/summary/route_client-reference-manifest.js +1 -1
  412. package/app/.next/server/app/api/token-health/route.js +1 -1
  413. package/app/.next/server/app/api/token-health/route.js.nft.json +1 -1
  414. package/app/.next/server/app/api/token-health/route_client-reference-manifest.js +1 -1
  415. package/app/.next/server/app/api/translator/detect/route.js +1 -1
  416. package/app/.next/server/app/api/translator/detect/route_client-reference-manifest.js +1 -1
  417. package/app/.next/server/app/api/translator/history/route.js +1 -1
  418. package/app/.next/server/app/api/translator/history/route_client-reference-manifest.js +1 -1
  419. package/app/.next/server/app/api/translator/load/route.js +1 -1
  420. package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
  421. package/app/.next/server/app/api/translator/save/route.js +1 -1
  422. package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
  423. package/app/.next/server/app/api/translator/send/route.js +1 -1
  424. package/app/.next/server/app/api/translator/send/route.js.nft.json +1 -1
  425. package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
  426. package/app/.next/server/app/api/translator/translate/route.js +1 -1
  427. package/app/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
  428. package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
  429. package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  430. package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  431. package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
  432. package/app/.next/server/app/api/usage/analytics/route.js +1 -1
  433. package/app/.next/server/app/api/usage/analytics/route.js.nft.json +1 -1
  434. package/app/.next/server/app/api/usage/analytics/route_client-reference-manifest.js +1 -1
  435. package/app/.next/server/app/api/usage/budget/route.js +2 -2
  436. package/app/.next/server/app/api/usage/budget/route.js.nft.json +1 -1
  437. package/app/.next/server/app/api/usage/budget/route_client-reference-manifest.js +1 -1
  438. package/app/.next/server/app/api/usage/call-logs/[id]/route.js +1 -1
  439. package/app/.next/server/app/api/usage/call-logs/[id]/route.js.nft.json +1 -1
  440. package/app/.next/server/app/api/usage/call-logs/[id]/route_client-reference-manifest.js +1 -1
  441. package/app/.next/server/app/api/usage/call-logs/route.js +1 -1
  442. package/app/.next/server/app/api/usage/call-logs/route.js.nft.json +1 -1
  443. package/app/.next/server/app/api/usage/call-logs/route_client-reference-manifest.js +1 -1
  444. package/app/.next/server/app/api/usage/history/route.js +1 -1
  445. package/app/.next/server/app/api/usage/history/route.js.nft.json +1 -1
  446. package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
  447. package/app/.next/server/app/api/usage/logs/route.js +1 -1
  448. package/app/.next/server/app/api/usage/logs/route.js.nft.json +1 -1
  449. package/app/.next/server/app/api/usage/logs/route_client-reference-manifest.js +1 -1
  450. package/app/.next/server/app/api/usage/proxy-logs/route.js +1 -1
  451. package/app/.next/server/app/api/usage/proxy-logs/route.js.nft.json +1 -1
  452. package/app/.next/server/app/api/usage/proxy-logs/route_client-reference-manifest.js +1 -1
  453. package/app/.next/server/app/api/usage/quota/route.js +1 -1
  454. package/app/.next/server/app/api/usage/quota/route.js.nft.json +1 -1
  455. package/app/.next/server/app/api/usage/quota/route_client-reference-manifest.js +1 -1
  456. package/app/.next/server/app/api/usage/request-logs/route.js +1 -1
  457. package/app/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  458. package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
  459. package/app/.next/server/app/api/v1/api/chat/route.js +1 -1
  460. package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  461. package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
  462. package/app/.next/server/app/api/v1/audio/speech/route.js +1 -1
  463. package/app/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  464. package/app/.next/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -1
  465. package/app/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
  466. package/app/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  467. package/app/.next/server/app/api/v1/audio/transcriptions/route_client-reference-manifest.js +1 -1
  468. package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
  469. package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  470. package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
  471. package/app/.next/server/app/api/v1/completions/route.js +1 -1
  472. package/app/.next/server/app/api/v1/completions/route.js.nft.json +1 -1
  473. package/app/.next/server/app/api/v1/completions/route_client-reference-manifest.js +1 -1
  474. package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
  475. package/app/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  476. package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
  477. package/app/.next/server/app/api/v1/images/generations/route.js +1 -1
  478. package/app/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  479. package/app/.next/server/app/api/v1/images/generations/route_client-reference-manifest.js +1 -1
  480. package/app/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
  481. package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
  482. package/app/.next/server/app/api/v1/messages/route.js +1 -1
  483. package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
  484. package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
  485. package/app/.next/server/app/api/v1/models/route.js +1 -1
  486. package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
  487. package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
  488. package/app/.next/server/app/api/v1/moderations/route.js +1 -1
  489. package/app/.next/server/app/api/v1/moderations/route.js.nft.json +1 -1
  490. package/app/.next/server/app/api/v1/moderations/route_client-reference-manifest.js +1 -1
  491. package/app/.next/server/app/api/v1/music/generations/route.js +1 -1
  492. package/app/.next/server/app/api/v1/music/generations/route.js.nft.json +1 -1
  493. package/app/.next/server/app/api/v1/music/generations/route_client-reference-manifest.js +1 -1
  494. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js +1 -1
  495. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js.nft.json +1 -1
  496. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route_client-reference-manifest.js +1 -1
  497. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js +1 -1
  498. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js.nft.json +1 -1
  499. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route_client-reference-manifest.js +1 -1
  500. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js +1 -1
  501. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js.nft.json +1 -1
  502. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route_client-reference-manifest.js +1 -1
  503. package/app/.next/server/app/api/v1/rerank/route.js +1 -1
  504. package/app/.next/server/app/api/v1/rerank/route.js.nft.json +1 -1
  505. package/app/.next/server/app/api/v1/rerank/route_client-reference-manifest.js +1 -1
  506. package/app/.next/server/app/api/v1/responses/route.js +1 -1
  507. package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
  508. package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
  509. package/app/.next/server/app/api/v1/route.js +1 -1
  510. package/app/.next/server/app/api/v1/route.js.nft.json +1 -1
  511. package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
  512. package/app/.next/server/app/api/v1/videos/generations/route.js +1 -1
  513. package/app/.next/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
  514. package/app/.next/server/app/api/v1/videos/generations/route_client-reference-manifest.js +1 -1
  515. package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
  516. package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  517. package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
  518. package/app/.next/server/app/api/v1beta/models/route.js +1 -1
  519. package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
  520. package/app/.next/server/app/callback/page.js +2 -2
  521. package/app/.next/server/app/callback/page.js.nft.json +1 -1
  522. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  523. package/app/.next/server/app/docs/page.js +3 -3
  524. package/app/.next/server/app/docs/page.js.nft.json +1 -1
  525. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  526. package/app/.next/server/app/forbidden/page.js +2 -2
  527. package/app/.next/server/app/forbidden/page.js.nft.json +1 -1
  528. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  529. package/app/.next/server/app/forgot-password/page.js +2 -2
  530. package/app/.next/server/app/forgot-password/page.js.nft.json +1 -1
  531. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  532. package/app/.next/server/app/landing/page.js +2 -2
  533. package/app/.next/server/app/landing/page.js.nft.json +1 -1
  534. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  535. package/app/.next/server/app/login/page.js +2 -2
  536. package/app/.next/server/app/login/page.js.nft.json +1 -1
  537. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  538. package/app/.next/server/app/maintenance/page.js +2 -2
  539. package/app/.next/server/app/maintenance/page.js.nft.json +1 -1
  540. package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
  541. package/app/.next/server/app/offline/page.js +2 -2
  542. package/app/.next/server/app/offline/page.js.nft.json +1 -1
  543. package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  544. package/app/.next/server/app/page.js +2 -2
  545. package/app/.next/server/app/page.js.nft.json +1 -1
  546. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  547. package/app/.next/server/app/privacy/page.js +2 -2
  548. package/app/.next/server/app/privacy/page.js.nft.json +1 -1
  549. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  550. package/app/.next/server/app/status/page.js +2 -2
  551. package/app/.next/server/app/status/page.js.nft.json +1 -1
  552. package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
  553. package/app/.next/server/app/terms/page.js +2 -2
  554. package/app/.next/server/app/terms/page.js.nft.json +1 -1
  555. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  556. package/app/.next/server/app-paths-manifest.json +46 -46
  557. package/app/.next/server/chunks/1909.js +2 -0
  558. package/app/.next/server/chunks/242.js +1 -1
  559. package/app/.next/server/chunks/2910.js +3 -2
  560. package/app/.next/server/chunks/3648.js +2 -2
  561. package/app/.next/server/chunks/438.js +1 -1
  562. package/app/.next/server/chunks/4488.js +3 -2
  563. package/app/.next/server/chunks/5979.js +1 -1
  564. package/app/.next/server/chunks/6743.js +1 -1
  565. package/app/.next/server/chunks/7109.js +1 -1
  566. package/app/.next/server/chunks/7167.js +1 -0
  567. package/app/.next/server/chunks/7327.js +1 -1
  568. package/app/.next/server/chunks/8020.js +3 -3
  569. package/app/.next/server/chunks/9548.js +1 -1
  570. package/app/.next/server/middleware-build-manifest.js +1 -1
  571. package/app/.next/server/middleware.js +4 -3
  572. package/app/.next/server/next-font-manifest.js +1 -1
  573. package/app/.next/server/next-font-manifest.json +1 -1
  574. package/app/.next/server/pages/500.html +2 -2
  575. package/app/.next/server/server-reference-manifest.js +1 -1
  576. package/app/.next/server/server-reference-manifest.json +1 -1
  577. package/app/.next/static/chunks/{5846-6722250590122d8a.js → 5846-63e1f1f0bd63a6ad.js} +1 -1
  578. package/app/.next/static/chunks/{647-62acab8e8736396d.js → 647-bf8bc535ac3648d0.js} +2 -2
  579. package/app/.next/static/chunks/app/(dashboard)/dashboard/a2a/page-ed1f5b1ae0e01c02.js +1 -0
  580. package/app/.next/static/chunks/app/(dashboard)/dashboard/agents/{page-94aa33336637e74c.js → page-576b27a05c09fba5.js} +1 -1
  581. package/app/.next/static/chunks/app/(dashboard)/dashboard/analytics/loading-6a2bb3ad980b05b9.js +1 -0
  582. package/app/.next/static/chunks/app/(dashboard)/dashboard/analytics/{page-bef5c045e7eae657.js → page-6ab7701da3357bb9.js} +1 -1
  583. package/app/.next/static/chunks/app/(dashboard)/dashboard/api-manager/page-8ee341b662a845dc.js +1 -0
  584. package/app/.next/static/chunks/app/(dashboard)/dashboard/audit-log/page-c9b98846b8479f3f.js +1 -0
  585. package/app/.next/static/chunks/app/(dashboard)/dashboard/auto-combo/{page-fbf2315ef6ecc87a.js → page-799e2f96e9af3fd9.js} +1 -1
  586. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-3c3f3b0b558e9302.js +15 -0
  587. package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-3ed193e882fc0438.js +1 -0
  588. package/app/.next/static/chunks/app/(dashboard)/dashboard/costs/{page-7a233357dfbd2e05.js → page-8f6233f59f5277e9.js} +1 -1
  589. package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-8b96e2f6d76d6f2d.js +1 -0
  590. package/app/.next/static/chunks/app/(dashboard)/dashboard/health/{page-66ee4e631429e0d8.js → page-1e1eb2f79d606ab2.js} +1 -1
  591. package/app/.next/static/chunks/app/(dashboard)/dashboard/limits/page-ddce876357cb3ada.js +1 -0
  592. package/app/.next/static/chunks/app/(dashboard)/dashboard/logs/{page-f08daa44ccbeb258.js → page-2d456b7ddbf3d41e.js} +1 -1
  593. package/app/.next/static/chunks/app/(dashboard)/dashboard/mcp/page-d9b5c3282ec5d809.js +1 -0
  594. package/app/.next/static/chunks/app/(dashboard)/dashboard/media/page-5ed5bdc9e926936c.js +1 -0
  595. package/app/.next/static/chunks/app/(dashboard)/dashboard/onboarding/{page-d424641c7e428be9.js → page-5378e9473a20cd6a.js} +1 -1
  596. package/app/.next/static/chunks/app/(dashboard)/dashboard/{page-fc5b6d46662747df.js → page-799001b6cea7d5bc.js} +1 -1
  597. package/app/.next/static/chunks/app/(dashboard)/dashboard/playground/{page-6d988d37ce3b0e60.js → page-0fff47edc56250ea.js} +1 -1
  598. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-389538ee27f0e405.js +1 -0
  599. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/{error-0400f175dd1372fa.js → error-a5ae03ba05400b04.js} +1 -1
  600. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/loading-7deaa9f550841465.js +1 -0
  601. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-3ef302da4b756e50.js +1 -0
  602. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/{page-adbd858f2a6cd352.js → page-fbf74ae2f3206efe.js} +1 -1
  603. package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/{error-c39d18f10fb7d3f6.js → error-ec9643134a96bbcd.js} +1 -1
  604. package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/{loading-b5faf05c78a2cc54.js → loading-3519a633b514f31a.js} +1 -1
  605. package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/page-df62bcc49944269c.js +1 -0
  606. package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/pricing/{page-0325206d05e6f375.js → page-aab023f14c6ff966.js} +1 -1
  607. package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/{page-f761c3ff75d56636.js → page-8d6f629e0e29e796.js} +2 -2
  608. package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-8c8f2d59d0cbb516.js +1 -0
  609. package/app/.next/static/chunks/app/(dashboard)/{layout-6d0afc53f5f2a538.js → layout-7ae0c66c22bee8a1.js} +1 -1
  610. package/app/.next/static/chunks/app/400/{page-3b77bf358909019a.js → page-3b9079ea400ca287.js} +1 -1
  611. package/app/.next/static/chunks/app/401/{page-3b77bf358909019a.js → page-3b9079ea400ca287.js} +1 -1
  612. package/app/.next/static/chunks/app/403/{page-3b77bf358909019a.js → page-3b9079ea400ca287.js} +1 -1
  613. package/app/.next/static/chunks/app/408/{page-3b77bf358909019a.js → page-3b9079ea400ca287.js} +1 -1
  614. package/app/.next/static/chunks/app/429/page-3b9079ea400ca287.js +1 -0
  615. package/app/.next/static/chunks/app/500/page-3b9079ea400ca287.js +1 -0
  616. package/app/.next/static/chunks/app/502/page-3b9079ea400ca287.js +1 -0
  617. package/app/.next/static/chunks/app/503/page-3b9079ea400ca287.js +1 -0
  618. package/app/.next/static/chunks/app/callback/{page-585a53f7dc6a30f1.js → page-0f0ebc0820dd18a5.js} +1 -1
  619. package/app/.next/static/chunks/app/docs/{page-9624e5fb8cabf7d8.js → page-dc88e0a01d291518.js} +1 -1
  620. package/app/.next/static/chunks/app/{error-f7f595c541537e63.js → error-32c03f14529d3920.js} +1 -1
  621. package/app/.next/static/chunks/app/forbidden/page-8d8e1709a1e32585.js +1 -0
  622. package/app/.next/static/chunks/app/forgot-password/page-d5c9b77748aa9deb.js +1 -0
  623. package/app/.next/static/chunks/app/global-error-5840b1caa830f2ec.js +1 -0
  624. package/app/.next/static/chunks/app/landing/page-8f652c1fbc33efd2.js +1 -0
  625. package/app/.next/static/chunks/app/{layout-108592eafb959363.js → layout-070972eb026af319.js} +1 -1
  626. package/app/.next/static/chunks/app/{loading-e063375d5b12a2f7.js → loading-da2f6e1471afc070.js} +1 -1
  627. package/app/.next/static/chunks/app/login/{page-cf6b82187b09a701.js → page-26d717c652d56032.js} +1 -1
  628. package/app/.next/static/chunks/app/maintenance/page-3b9079ea400ca287.js +1 -0
  629. package/app/.next/static/chunks/app/not-found-faf36d2a9a452506.js +1 -0
  630. package/app/.next/static/chunks/app/offline/page-bf68bf461af876a3.js +1 -0
  631. package/app/.next/static/chunks/app/privacy/{page-9624e5fb8cabf7d8.js → page-dc88e0a01d291518.js} +1 -1
  632. package/app/.next/static/chunks/app/status/page-29a433b40631ce12.js +1 -0
  633. package/app/.next/static/chunks/app/terms/{page-9624e5fb8cabf7d8.js → page-dc88e0a01d291518.js} +1 -1
  634. package/app/.next/static/chunks/{main-app-c9da11a8061df107.js → main-app-ae230f6bf51a5edb.js} +1 -1
  635. package/app/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
  636. package/app/package.json +1 -1
  637. package/app/server.js +1 -1
  638. package/package.json +1 -1
  639. package/app/.next/server/chunks/5248.js +0 -1
  640. package/app/.next/server/chunks/7889.js +0 -2
  641. package/app/.next/static/chunks/app/(dashboard)/dashboard/a2a/page-43d6fa6b75cca497.js +0 -1
  642. package/app/.next/static/chunks/app/(dashboard)/dashboard/analytics/loading-49ae846d72948391.js +0 -1
  643. package/app/.next/static/chunks/app/(dashboard)/dashboard/api-manager/page-71f65a8c11e24ee8.js +0 -1
  644. package/app/.next/static/chunks/app/(dashboard)/dashboard/audit-log/page-e5bf8955e7b9a4f5.js +0 -1
  645. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-1d9c62ff735ac65a.js +0 -15
  646. package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-4e4d823fdc8705f5.js +0 -1
  647. package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-81a6632af8c82919.js +0 -1
  648. package/app/.next/static/chunks/app/(dashboard)/dashboard/limits/page-5ace323bdf990976.js +0 -1
  649. package/app/.next/static/chunks/app/(dashboard)/dashboard/mcp/page-8e35334b9f393139.js +0 -1
  650. package/app/.next/static/chunks/app/(dashboard)/dashboard/media/page-4e1629fc8404b3b9.js +0 -1
  651. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-b4a67f078e2d5f8a.js +0 -1
  652. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/loading-9552383fd2e11282.js +0 -1
  653. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-d57908b59d4b482c.js +0 -1
  654. package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/page-28ee6d0fc27b6ffe.js +0 -1
  655. package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-9e20463252daf023.js +0 -1
  656. package/app/.next/static/chunks/app/429/page-3b77bf358909019a.js +0 -1
  657. package/app/.next/static/chunks/app/500/page-3b77bf358909019a.js +0 -1
  658. package/app/.next/static/chunks/app/502/page-3b77bf358909019a.js +0 -1
  659. package/app/.next/static/chunks/app/503/page-3b77bf358909019a.js +0 -1
  660. package/app/.next/static/chunks/app/forbidden/page-b33079c1573b0bfa.js +0 -1
  661. package/app/.next/static/chunks/app/forgot-password/page-90cd6259c75badfc.js +0 -1
  662. package/app/.next/static/chunks/app/global-error-1dfd1c91ad5199fe.js +0 -1
  663. package/app/.next/static/chunks/app/landing/page-90df98c27fe0b5d9.js +0 -1
  664. package/app/.next/static/chunks/app/maintenance/page-3b77bf358909019a.js +0 -1
  665. package/app/.next/static/chunks/app/not-found-511518956bcae7bc.js +0 -1
  666. package/app/.next/static/chunks/app/offline/page-9d6ea493783a0219.js +0 -1
  667. package/app/.next/static/chunks/app/status/page-4e5e9b5a513aa474.js +0 -1
  668. /package/app/.next/static/{whsp7HU8HFUikZQ7oSjYX → O9lSHUzWYvY1bYZSFuKAJ}/_buildManifest.js +0 -0
  669. /package/app/.next/static/{whsp7HU8HFUikZQ7oSjYX → O9lSHUzWYvY1bYZSFuKAJ}/_ssgManifest.js +0 -0
@@ -0,0 +1,2 @@
1
+ exports.id=1909,exports.ids=[1909],exports.modules={2143:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{LA:()=>g});var e=c(42971),f=a([e]);let h=(e=(f.then?(await f)():f)[0]).z.object({id:e.z.string().min(1),alias:e.z.string().min(1),name:e.z.string().min(1),icon:e.z.string().min(1),color:e.z.string().regex(/^#[0-9A-Fa-f]{6}$/,"Must be a valid hex color (#RRGGBB)"),textIcon:e.z.string().optional(),website:e.z.string().url().optional(),passthroughModels:e.z.boolean().optional()}),i=e.z.record(e.z.string(),h);function g(a,b){let c=i.safeParse(a);if(!c.success){let a=c.error.issues.map(a=>` ${a.path.join(".")}: ${a.message}`).join("\n");throw console.error(`[PROVIDER VALIDATION] ${b} has invalid entries:
2
+ ${a}`),Error(`Provider validation failed for ${b}`)}}d()}catch(a){d(a)}})},3845:(a,b,c)=>{var d={"./ar.json":[48464,8464],"./bg.json":[60944,944],"./da.json":[18976,8976],"./de.json":[22372,2372],"./en.json":[31960,1960],"./es.json":[87011,7011],"./fi.json":[96118,6118],"./fr.json":[53911,3911],"./he.json":[51248,1248],"./hu.json":[50496,496],"./id.json":[16930,6930],"./in.json":[30708,708],"./it.json":[32594,2594],"./ja.json":[37650,7650],"./ko.json":[79837,9837],"./ms.json":[55752,3371],"./nl.json":[35097,5097],"./no.json":[88220,8220],"./phi.json":[28706,8706],"./pl.json":[99119,9119],"./pt-BR.json":[41990,1990],"./pt.json":[11623,1623],"./ro.json":[71880,1880],"./ru.json":[61526,1526],"./sk.json":[25945,5945],"./sv.json":[85094,5094],"./th.json":[55047,5047],"./uk-UA.json":[11584,1584],"./vi.json":[22214,2214],"./zh-CN.json":[65521,5521]};function e(a){if(!c.o(d,a))return Promise.resolve().then(()=>{var b=Error("Cannot find module '"+a+"'");throw b.code="MODULE_NOT_FOUND",b});var b=d[a],e=b[0];return c.e(b[1]).then(()=>c.t(e,19))}e.keys=()=>Object.keys(d),e.id=3845,a.exports=e},8979:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/diegosouzapw/dev/proxys/9router/src/app/not-found.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/diegosouzapw/dev/proxys/9router/src/app/not-found.tsx","default")},14004:(a,b,c)=>{Promise.resolve().then(c.bind(c,81227))},14521:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,15098,23)),Promise.resolve().then(c.t.bind(c,47644,23)),Promise.resolve().then(c.t.bind(c,33859,23)),Promise.resolve().then(c.t.bind(c,98099,23)),Promise.resolve().then(c.t.bind(c,16237,23)),Promise.resolve().then(c.t.bind(c,98562,23)),Promise.resolve().then(c.t.bind(c,36675,23))},15336:(a,b,c)=>{Promise.resolve().then(c.bind(c,95127))},21280:(a,b,c)=>{"use strict";c.d(b,{S_:()=>o});var d=c(75585),e=c(87068);let f="[HealthCheck]",g=new Set(["1","true","yes","on"]);function h(a){let b=process.env[a];return!!b&&g.has(b.trim().toLowerCase())}let i=null,j=0,k=null;async function l(){if(h("OMNIROUTE_HIDE_HEALTHCHECK_LOGS"))return!0;let a=Date.now();return null!==i&&a-j<3e4?i:null!==k?k:k=(async()=>{try{let b=await (0,d.V7)();return i=!0===b.hideHealthCheckLogs,j=a,i}catch{return!1}finally{k=null}})()}function m(a,...b){l().then(c=>{c||console.log(a,...b)})}function n(a,...b){l().then(c=>{c||console.error(a,...b)})}function o(){i=null,j=0}let p=!1;async function q(){try{let a=await (0,d.getProviderConnections)({authType:"oauth"});if(!a||0===a.length)return;for(let b of a)try{await r(b)}catch(a){n(`${f} Error checking ${b.name||b.id}:`,a.message)}}catch(a){n(`${f} Sweep error:`,a.message)}}async function r(a){let b=a.healthCheckInterval??60;if(b<=0||!a.isActive||!a.refreshToken||"string"!=typeof a.refreshToken||"expired"===a.testStatus)return;if(!(0,e.Ny)(a.provider)){let b=new Date().toISOString();await (0,d.rj)(a.id,{lastHealthCheckAt:b}),m(`${f} Skipping ${a.provider}/${a.name||a.email||a.id} (refresh unsupported)`);return}let c=a.lastHealthCheckAt?new Date(a.lastHealthCheckAt).getTime():0;if(Date.now()-c<60*b*1e3)return;m(`${f} Refreshing ${a.provider}/${a.name||a.email||a.id} (interval: ${b}min)`);let g={refreshToken:a.refreshToken,accessToken:a.accessToken,expiresAt:a.tokenExpiresAt,providerSpecificData:a.providerSpecificData},h=await l(),i=await (0,e.iD)(a.provider,g,{info:(a,b)=>{h||console.log(`${f} [${a}] ${b}`)},warn:(a,b)=>{h||console.warn(`${f} [${a}] ${b}`)},error:(a,b,c)=>{h||console.error(`${f} [${a}] ${b}`,c||"")}}),j=new Date().toISOString();if((0,e.jT)(i)){await (0,d.rj)(a.id,{lastHealthCheckAt:j,testStatus:"expired",lastError:`Refresh token consumed (${i.error}). Please re-authenticate this account.`,lastErrorAt:j,lastErrorType:i.error,lastErrorSource:"oauth",errorCode:i.error,isActive:!1,refreshToken:null}),n(`${f} ✗ ${a.provider}/${a.name||a.email||a.id} — Refresh token is permanently invalid (${i.error}). Connection deactivated. Re-authenticate to restore.`);return}if(i&&i.accessToken){let b={accessToken:i.accessToken,lastHealthCheckAt:j,testStatus:"active",lastError:null,lastErrorAt:null,lastErrorType:null,lastErrorSource:null,errorCode:null};i.refreshToken&&(b.refreshToken=i.refreshToken),i.expiresIn&&(b.tokenExpiresAt=new Date(Date.now()+1e3*i.expiresIn).toISOString()),await (0,d.rj)(a.id,b),m(`${f} ✓ ${a.provider}/${a.name||a.email||a.id} refreshed`)}else await (0,d.rj)(a.id,{lastHealthCheckAt:j,testStatus:"error",lastError:"Health check: token refresh failed",lastErrorAt:j,lastErrorType:"token_refresh_failed",lastErrorSource:"oauth",errorCode:"refresh_failed"}),function(a,...b){l().then(c=>{c||console.warn(a,...b)})}(`${f} ✗ ${a.provider}/${a.name||a.email||a.id} refresh failed`)}h("OMNIROUTE_DISABLE_TOKEN_HEALTHCHECK")||(p=!0,m(`${f} Starting proactive token health-check (tick every 60s)`),setTimeout(()=>{q(),setInterval(q,6e4)},1e4))},22746:(a,b,c)=>{"use strict";c.d(b,{CardSkeleton:()=>j,PageLoading:()=>h,Skeleton:()=>i,Spinner:()=>g,default:()=>k});var d=c(48249),e=c(31846);let f={sm:"size-4",md:"size-6",lg:"size-8",xl:"size-12"};function g({size:a="md",className:b,label:c="Loading"}){return(0,d.jsxs)("span",{role:"status","aria-live":"polite","aria-label":c,className:(0,e.cn)("inline-flex",b),children:[(0,d.jsx)("span",{className:"sr-only",children:c}),(0,d.jsx)("span",{"aria-hidden":"true",className:(0,e.cn)("material-symbols-outlined text-primary animate-spin motion-reduce:animate-none",f[a]),children:"progress_activity"})]})}function h({message:a="Loading...",className:b}){return(0,d.jsxs)("div",{className:(0,e.cn)("fixed inset-0 z-50 flex flex-col items-center justify-center bg-bg px-6",b),role:"status","aria-live":"polite","aria-busy":"true",children:[(0,d.jsx)(g,{size:"xl"}),(0,d.jsx)("p",{className:"mt-4 text-text-muted text-center",children:a})]})}function i({className:a,...b}){return(0,d.jsx)("div",{"aria-hidden":"true",className:(0,e.cn)("animate-pulse motion-reduce:animate-none rounded-lg bg-border",a),...b})}function j(){return(0,d.jsxs)("div",{className:"p-6 rounded-xl border border-border bg-surface","aria-hidden":"true",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-4 gap-4",children:[(0,d.jsx)(i,{className:"h-4 w-24"}),(0,d.jsx)(i,{className:"size-10 rounded-lg"})]}),(0,d.jsx)(i,{className:"h-8 w-16 mb-2"}),(0,d.jsx)(i,{className:"h-3 w-20"})]})}function k({type:a="spinner",className:b,message:c,size:e,label:f,...k}){switch(a){case"page":return(0,d.jsx)(h,{message:c,className:b});case"skeleton":return(0,d.jsx)(i,{className:b,...k});case"card":return(0,d.jsx)(j,{});default:return(0,d.jsx)(g,{size:e,className:b,label:f})}}},30758:a=>{"use strict";a.exports={rE:"2.5.3"}},30807:(a,b,c)=>{Promise.resolve().then(c.bind(c,62626)),Promise.resolve().then(c.bind(c,75146))},31846:(a,b,c)=>{"use strict";function d(...a){return a.filter(Boolean).join(" ").replace(/\s+/g," ").trim()}c.d(b,{cn:()=>d})},32444:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call ThemeProvider() from the server but ThemeProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/diegosouzapw/dev/proxys/9router/src/shared/components/ThemeProvider.tsx","ThemeProvider")},33314:(a,b,c)=>{Promise.resolve().then(c.bind(c,64385))},45300:(a,b,c)=>{Promise.resolve().then(c.bind(c,8979))},47508:(a,b,c)=>{Promise.resolve().then(c.bind(c,73857))},47695:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{A:()=>k,F:()=>j});var e=c(31417),f=c(300),g=c(51729),h=a([g]);g=(h.then?(await h)():h)[0];let i=(0,e.v)()((0,f.Zr)((a,b)=>({theme:g.B2.defaultTheme,colorTheme:"coral",customColor:"#3b82f6",setTheme:b=>{a({theme:b})},setColorTheme:c=>{a({colorTheme:c}),b().customColor},setCustomColorTheme:b=>{let c=function(a){let b=(a||"").trim(),c=b.startsWith("#")?b:`#${b}`;return/^#([0-9a-fA-F]{6})$/.test(c)?c.toLowerCase():"#3b82f6"}(b);a({colorTheme:"custom",customColor:c})},toggleTheme:()=>{let c=b().theme,d="dark"===c?"light":"dark";a({theme:d})},initTheme:()=>{let{theme:a,colorTheme:c,customColor:d}=b()}}),{name:g.B2.storageKey})),j={coral:"#e54d5e",blue:"#3b82f6",red:"#ef4444",green:"#22c55e",violet:"#8b5cf6",orange:"#f97316",cyan:"#06b6d4"},k=i;d()}catch(a){d(a)}})},47825:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{KC:()=>e.KC,Xg:()=>e.Xg});var e=c(97319),f=c(70689),g=a([f]);f=(g.then?(await g)():g)[0],Object.entries(f.Q2).filter(([,a])=>a.passthroughModels).map(([a])=>a),Object.entries(e.vq).flatMap(([a,b])=>b.map(b=>({provider:a,model:b.id,name:b.name}))),d()}catch(a){d(a)}})},49226:(a,b,c)=>{"use strict";c.d(b,{A:()=>l});var d=c(90357),e=c(75585);let{dashboardPort:f}=(0,c(83238).z)(),g=process.env.BASE_URL||"http://localhost:20128";class h{constructor(a=null,b=15){this.machineId=a,this.intervalMinutes=b,this.intervalId=null}async initializeMachineId(){this.machineId||(this.machineId=await (0,d.Xj)())}async start(){this.intervalId||(await this.initializeMachineId(),setTimeout(()=>{this.syncWithRetry().catch(()=>{})},3e4),this.intervalId=setInterval(()=>{this.syncWithRetry().catch(()=>{})},60*this.intervalMinutes*1e3))}stop(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null)}async syncWithRetry(a=1){for(let b=1;b<=a;b++)try{return await this.sync()}catch(d){if(b===a)return null;let c=Math.min(1e3*Math.pow(2,b),1e4);await new Promise(a=>setTimeout(a,c))}}async sync(){if(!await (0,e.Nx)())return null;await this.initializeMachineId();let a=await fetch(`${g}/api/sync/cloud`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({machineId:this.machineId,action:"sync"})});if(!a.ok)throw Error((await a.json().catch(()=>({}))).error||"Sync failed");return await a.json()}isRunning(){return null!==this.intervalId}}let i=null;async function j(a=null,b=15){return i||(i=new h(a,b)),i}async function k(){try{await (0,e.bI)();let a=await j(null,15);return await a.start(),a}catch(a){throw console.error("[CloudSync] Error initializing scheduler:",a),a}}a=c.hmd(a),c.c[c.s]===a&&k().catch(a=>console.error("[CloudSync] init failed:",a));let l=k},50969:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,60440,23)),Promise.resolve().then(c.t.bind(c,84342,23)),Promise.resolve().then(c.t.bind(c,82265,23)),Promise.resolve().then(c.t.bind(c,35421,23)),Promise.resolve().then(c.t.bind(c,61335,23)),Promise.resolve().then(c.t.bind(c,70664,23)),Promise.resolve().then(c.bind(c,74661))},51466:(a,b,c)=>{Promise.resolve().then(c.bind(c,97507))},51729:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{B2:()=>j,MA:()=>f.MA,Q2:()=>f.Q2,fg:()=>f.fg,vQ:()=>i,zN:()=>f.zN});var e=c(30758),f=c(70689),g=c(47825),h=a([f,g]);[f,g]=h.then?(await h)():h;let i={name:"OmniRoute",description:"AI Gateway for Multi-Provider LLMs",version:e.rE},j={storageKey:"theme",defaultTheme:"system"};d()}catch(a){d(a)}})},61135:()=>{},62536:(a,b,c)=>{Promise.resolve().then(c.bind(c,65909))},64385:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/diegosouzapw/dev/proxys/9router/src/app/error.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/diegosouzapw/dev/proxys/9router/src/app/error.tsx","default")},65909:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>f});var d=c(48249),e=c(22746);function f(){return(0,d.jsx)(e.PageLoading,{message:"Loading OmniRoute..."})}},66740:(a,b,c)=>{Promise.resolve().then(c.bind(c,67045))},67045:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(48249);function e({error:a,reset:b}){return(0,d.jsx)("html",{lang:"en",children:(0,d.jsx)("body",{className:"flex flex-col items-center justify-center min-h-screen p-6 bg-bg text-text-main font-[system-ui,-apple-system,sans-serif] text-center m-0",children:(0,d.jsxs)("main",{role:"alert","aria-live":"assertive",className:"flex flex-col items-center",children:[(0,d.jsx)("div",{className:"text-[64px] mb-4","aria-hidden":"true",children:"⚠️"}),(0,d.jsx)("h1",{className:"text-[28px] font-bold mb-2",children:"Something went wrong"}),(0,d.jsx)("p",{className:"text-[15px] text-text-muted max-w-[400px] leading-relaxed mb-6",children:"An unexpected error occurred. This has been logged and our team will investigate."}),!1,(0,d.jsxs)("div",{className:"flex flex-col sm:flex-row gap-3",children:[(0,d.jsx)("button",{onClick:b,"aria-label":"Retry loading the page",className:"px-8 py-3 rounded-[10px] text-white border-none text-sm font-semibold cursor-pointer transition-transform duration-200 motion-reduce:transition-none motion-reduce:transform-none shadow-warm hover:-translate-y-0.5 bg-gradient-to-br from-primary to-primary-hover focus:outline-2 focus:outline-offset-2 focus:outline-primary",children:"Try Again"}),(0,d.jsx)("a",{href:"/status",className:"px-8 py-3 rounded-[10px] text-sm font-semibold border border-[var(--color-border)] hover:bg-[var(--color-bg-alt)] no-underline focus:outline-2 focus:outline-offset-2 focus:outline-primary","aria-label":"Open system status",children:"System Status"})]})]})})})}},70559:(a,b,c)=>{Promise.resolve().then(c.bind(c,86392)),Promise.resolve().then(c.bind(c,32444))},70689:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{DI:()=>o,IS:()=>k,JH:()=>n,MA:()=>q,Q2:()=>p,fg:()=>m,gb:()=>h,mq:()=>g,wG:()=>j,wb:()=>r,zN:()=>l,zt:()=>i});var e=c(2143),f=a([e]);e=(f.then?(await f)():f)[0];let k={iflow:{id:"iflow",alias:"if",name:"iFlow AI",icon:"water_drop",color:"#6366F1"},qwen:{id:"qwen",alias:"qw",name:"Qwen Code",icon:"psychology",color:"#10B981"},"gemini-cli":{id:"gemini-cli",alias:"gc",name:"Gemini CLI",icon:"terminal",color:"#4285F4"},kiro:{id:"kiro",alias:"kr",name:"Kiro AI",icon:"psychology_alt",color:"#FF6B35"}},l={claude:{id:"claude",alias:"cc",name:"Claude Code",icon:"smart_toy",color:"#D97757"},antigravity:{id:"antigravity",alias:"ag",name:"Antigravity",icon:"rocket_launch",color:"#F59E0B"},codex:{id:"codex",alias:"cx",name:"OpenAI Codex",icon:"code",color:"#3B82F6"},github:{id:"github",alias:"gh",name:"GitHub Copilot",icon:"code",color:"#333333"},cursor:{id:"cursor",alias:"cu",name:"Cursor IDE",icon:"edit_note",color:"#00D4AA"},"kimi-coding":{id:"kimi-coding",alias:"kmc",name:"Kimi Coding",icon:"psychology",color:"#1E40AF",textIcon:"KC"},kilocode:{id:"kilocode",alias:"kc",name:"Kilo Code",icon:"code",color:"#FF6B35",textIcon:"KC"},cline:{id:"cline",alias:"cl",name:"Cline",icon:"smart_toy",color:"#5B9BD5",textIcon:"CL"}},m={openrouter:{id:"openrouter",alias:"openrouter",name:"OpenRouter",icon:"router",color:"#F97316",textIcon:"OR",passthroughModels:!0,website:"https://openrouter.ai"},glm:{id:"glm",alias:"glm",name:"GLM Coding",icon:"code",color:"#2563EB",textIcon:"GL",website:"https://open.bigmodel.cn"},kimi:{id:"kimi",alias:"kimi",name:"Kimi",icon:"psychology",color:"#1E3A8A",textIcon:"KM",website:"https://kimi.moonshot.cn"},minimax:{id:"minimax",alias:"minimax",name:"Minimax Coding",icon:"memory",color:"#7C3AED",textIcon:"MM",website:"https://www.minimaxi.com"},"minimax-cn":{id:"minimax-cn",alias:"minimax-cn",name:"Minimax (China)",icon:"memory",color:"#DC2626",textIcon:"MC",website:"https://www.minimaxi.com"},openai:{id:"openai",alias:"openai",name:"OpenAI",icon:"auto_awesome",color:"#10A37F",textIcon:"OA",website:"https://platform.openai.com"},anthropic:{id:"anthropic",alias:"anthropic",name:"Anthropic",icon:"smart_toy",color:"#D97757",textIcon:"AN",website:"https://console.anthropic.com"},gemini:{id:"gemini",alias:"gemini",name:"Gemini",icon:"diamond",color:"#4285F4",textIcon:"GE",website:"https://ai.google.dev"},deepseek:{id:"deepseek",alias:"ds",name:"DeepSeek",icon:"bolt",color:"#4D6BFE",textIcon:"DS",website:"https://deepseek.com"},groq:{id:"groq",alias:"groq",name:"Groq",icon:"speed",color:"#F55036",textIcon:"GQ",website:"https://groq.com",hasFree:!0,freeNote:"Free tier: 30 RPM / 14.4K RPD — no credit card"},blackbox:{id:"blackbox",alias:"bb",name:"Blackbox AI",icon:"view_in_ar",color:"#1A1A2E",textIcon:"BB",website:"https://blackbox.ai"},xai:{id:"xai",alias:"xai",name:"xAI (Grok)",icon:"auto_awesome",color:"#1DA1F2",textIcon:"XA",website:"https://x.ai"},mistral:{id:"mistral",alias:"mistral",name:"Mistral",icon:"air",color:"#FF7000",textIcon:"MI",website:"https://mistral.ai"},perplexity:{id:"perplexity",alias:"pplx",name:"Perplexity",icon:"search",color:"#20808D",textIcon:"PP",website:"https://www.perplexity.ai"},together:{id:"together",alias:"together",name:"Together AI",icon:"group_work",color:"#0F6FFF",textIcon:"TG",website:"https://www.together.ai"},fireworks:{id:"fireworks",alias:"fireworks",name:"Fireworks AI",icon:"local_fire_department",color:"#7B2EF2",textIcon:"FW",website:"https://fireworks.ai"},cerebras:{id:"cerebras",alias:"cerebras",name:"Cerebras",icon:"memory",color:"#FF4F00",textIcon:"CB",website:"https://inference.cerebras.ai",hasFree:!0,freeNote:"Free: 1M tokens/day, 60K TPM — world's fastest inference"},cohere:{id:"cohere",alias:"cohere",name:"Cohere",icon:"hub",color:"#39594D",textIcon:"CO",website:"https://cohere.com"},nvidia:{id:"nvidia",alias:"nvidia",name:"NVIDIA NIM",icon:"developer_board",color:"#76B900",textIcon:"NV",website:"https://build.nvidia.com",hasFree:!0,freeNote:"Free dev access: ~40 RPM, 70+ models (Kimi K2.5, GLM 4.7, DeepSeek V3.2...)"},nebius:{id:"nebius",alias:"nebius",name:"Nebius AI",icon:"cloud",color:"#6C5CE7",textIcon:"NB",website:"https://nebius.com"},siliconflow:{id:"siliconflow",alias:"siliconflow",name:"SiliconFlow",icon:"cloud_queue",color:"#5B6EF5",textIcon:"SF",website:"https://cloud.siliconflow.com"},hyperbolic:{id:"hyperbolic",alias:"hyp",name:"Hyperbolic",icon:"bolt",color:"#00D4FF",textIcon:"HY",website:"https://hyperbolic.xyz"},deepgram:{id:"deepgram",alias:"dg",name:"Deepgram",icon:"mic",color:"#13EF93",textIcon:"DG",website:"https://deepgram.com"},assemblyai:{id:"assemblyai",alias:"aai",name:"AssemblyAI",icon:"record_voice_over",color:"#0062FF",textIcon:"AA",website:"https://assemblyai.com"},nanobanana:{id:"nanobanana",alias:"nb",name:"NanoBanana",icon:"image",color:"#FFD700",textIcon:"NB",website:"https://nanobananaapi.ai"},"ollama-cloud":{id:"ollama-cloud",alias:"ollamacloud",name:"Ollama Cloud",icon:"cloud",color:"#58A6FF",textIcon:"OC",website:"https://ollama.com/settings/api-keys"},elevenlabs:{id:"elevenlabs",alias:"el",name:"ElevenLabs",icon:"record_voice_over",color:"#6C47FF",textIcon:"EL",website:"https://elevenlabs.io"},cartesia:{id:"cartesia",alias:"cartesia",name:"Cartesia",icon:"spatial_audio",color:"#FF4F8B",textIcon:"CA",website:"https://cartesia.ai"},playht:{id:"playht",alias:"playht",name:"PlayHT",icon:"play_circle",color:"#00B4D8",textIcon:"PH",website:"https://play.ht"},inworld:{id:"inworld",alias:"inworld",name:"Inworld",icon:"voice_chat",color:"#7B2EF2",textIcon:"IW",website:"https://inworld.ai"},sdwebui:{id:"sdwebui",alias:"sdwebui",name:"SD WebUI",icon:"brush",color:"#FF7043",textIcon:"SD",website:"https://github.com/AUTOMATIC1111/stable-diffusion-webui"},comfyui:{id:"comfyui",alias:"comfyui",name:"ComfyUI",icon:"account_tree",color:"#4CAF50",textIcon:"CF",website:"https://github.com/comfyanonymous/ComfyUI"},huggingface:{id:"huggingface",alias:"hf",name:"HuggingFace",icon:"face",color:"#FFD21E",textIcon:"HF",website:"https://huggingface.co",hasFree:!0,freeNote:"Free Inference API for thousands of models (Whisper, VITS, SDXL…)"},vertex:{id:"vertex",alias:"vertex",name:"Vertex AI",icon:"cloud",color:"#4285F4",textIcon:"VA",website:"https://cloud.google.com/vertex-ai",authHint:"Provide Service Account JSON or OAuth access_token"}},n="openai-compatible-",o="anthropic-compatible-";function g(a){return"string"==typeof a&&a.startsWith(n)}function h(a){return"string"==typeof a&&a.startsWith(o)}let p={...k,...l,...m},q={oauth:{id:"oauth",name:"OAuth",icon:"lock"},apikey:{id:"apikey",name:"API Key",icon:"key"}};function i(a){for(let b of Object.values(p))if(b.alias===a||b.id===a)return b;return null}function j(a){let b=p[a];return b?.alias||a}Object.values(p).reduce((a,b)=>(a[b.alias]=b.id,a),{}),Object.values(p).reduce((a,b)=>(a[b.id]=b.alias,a),{});let r=["antigravity","kiro","github","codex","claude","kimi-coding"];(0,e.LA)(k,"FREE_PROVIDERS"),(0,e.LA)(l,"OAUTH_PROVIDERS"),(0,e.LA)(m,"APIKEY_PROVIDERS"),d()}catch(a){d(a)}})},73857:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g});var d=c(48249),e=c(2116),f=c.n(e);function g(){return(0,d.jsxs)("div",{className:"flex flex-col items-center justify-center min-h-screen p-6 bg-bg text-text-main text-center",role:"main","aria-labelledby":"not-found-title",children:[(0,d.jsx)("div",{className:"text-[96px] font-extrabold leading-none mb-2 bg-gradient-to-br from-primary to-primary-hover bg-clip-text text-transparent","aria-hidden":"true",children:"404"}),(0,d.jsx)("h1",{id:"not-found-title",className:"text-2xl font-semibold mb-2",children:"Page not found"}),(0,d.jsx)("p",{className:"text-[15px] text-text-muted max-w-[400px] leading-relaxed mb-8",children:"The page you're looking for doesn't exist or has been moved."}),(0,d.jsxs)("div",{className:"flex flex-col sm:flex-row items-center gap-3",children:[(0,d.jsx)(f(),{href:"/dashboard",className:"px-8 py-3 rounded-xl text-white text-sm font-medium no-underline transition-all duration-200 motion-reduce:transition-none shadow-warm hover:-translate-y-0.5 bg-gradient-to-br from-primary to-primary-hover hover:shadow-elevated focus:outline-2 focus:outline-offset-2 focus:outline-primary","aria-label":"Return to dashboard",children:"Go to Dashboard"}),(0,d.jsx)(f(),{href:"/status",className:"px-8 py-3 rounded-xl text-sm font-medium no-underline border border-border hover:bg-bg-alt transition-colors duration-200 motion-reduce:transition-none focus:outline-2 focus:outline-offset-2 focus:outline-primary","aria-label":"Open system status page",children:"System Status"})]})]})}},75146:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{ThemeProvider:()=>h});var e=c(48249);c(67484);var f=c(47695),g=a([f]);function h({children:a}){let{initTheme:b}=(0,f.A)();return(0,e.jsx)(e.Fragment,{children:a})}f=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},76537:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>m,metadata:()=>l});var d=c(5735),e=c(50609),f=c.n(e);c(61135);var g=c(32444);c(91057);var h=c(68625),i=c(62026),j=c(28440),k=c(83750);let l={title:"OmniRoute — AI Gateway for Multi-Provider LLMs",description:"OmniRoute is an AI gateway for multi-provider LLMs. One endpoint for all your AI providers.",icons:{icon:"/favicon.svg",apple:"/apple-touch-icon.svg"}};async function m({children:a}){let b=await (0,i.A)(),c=await (0,j.A)(),e=k.rB.includes(b);return(0,d.jsxs)("html",{lang:b,dir:e?"rtl":"ltr",suppressHydrationWarning:!0,children:[(0,d.jsxs)("head",{children:[(0,d.jsx)("link",{rel:"preconnect",href:"https://fonts.googleapis.com"}),(0,d.jsx)("link",{rel:"preconnect",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),(0,d.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap",rel:"stylesheet"})]}),(0,d.jsxs)("body",{className:`${f().variable} font-sans antialiased`,suppressHydrationWarning:!0,children:[(0,d.jsx)("a",{href:"#main-content",className:"sr-only focus:not-sr-only focus:absolute focus:top-2 focus:left-2 focus:z-50 focus:px-4 focus:py-2 focus:bg-[#6366f1] focus:text-white focus:rounded-lg focus:text-sm focus:font-semibold focus:shadow-lg",children:"Skip to content"}),(0,d.jsx)(h.A,{locale:b,messages:c,children:(0,d.jsx)(g.ThemeProvider,{children:a})})]})]})}},78335:()=>{},79803:(a,b,c)=>{"use strict";c.d(b,{A:()=>g});var d=c(29389),e=c(65573),f=c(83750);let g=(0,d.A)(async()=>{let a=await (0,e.UL)(),b=a.get(f.CL)?.value||"";b||(b=(await (0,e.b3)()).get("x-locale")||""),f.YZ.includes(b)||(b=f.Xn);let d=(await c(3845)(`./${b}.json`)).default;return{locale:b,messages:d}})},81227:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/diegosouzapw/dev/proxys/9router/src/app/global-error.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/diegosouzapw/dev/proxys/9router/src/app/global-error.tsx","default")},83238:(a,b,c)=>{"use strict";function d(a,b){if(!a)return b;let c=Number.parseInt(String(a),10);return!Number.isFinite(c)||c<1||c>65535?b:c}function e(){let a=d(process.env.OMNIROUTE_PORT||process.env.PORT,20128),b=!!process.env.API_PORT,c=!!process.env.DASHBOARD_PORT;return{port:a,apiPort:d(process.env.API_PORT,a),dashboardPort:d(process.env.DASHBOARD_PORT,a),apiPortExplicit:b,dashboardPortExplicit:c}}c.d(b,{z:()=>e})},83750:(a,b,c)=>{"use strict";c.d(b,{CL:()=>g,Xn:()=>e,YZ:()=>d,rB:()=>f});let d=["en","pt-BR","es","fr","it","ru","zh-CN","de","in","th","uk-UA","ar","ja","vi","bg","da","fi","he","hu","id","ko","ms","nl","no","pt","ro","pl","sk","sv","phi"],e="en",f=["ar","he"],g="NEXT_LOCALE"},90357:(a,b,c)=>{"use strict";c.d(b,{Xj:()=>e});var d=c(19713);async function e(a=null){let b=a||process.env.MACHINE_ID_SALT||"endpoint-proxy-salt";try{let a=(0,d.machineIdSync)();return(await Promise.resolve().then(c.t.bind(c,55511,23))).createHash("sha256").update(a+b).digest("hex").substring(0,16)}catch(a){return console.log("Error getting machine ID:",a),crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){let b=16*Math.random()|0;return("x"==a?b:3&b|8).toString(16)})}}},91057:(a,b,c)=>{"use strict";var d=c(49226);c(21280);let e=!1;(async function(){if(!e)try{await (0,d.A)(),e=!0}catch(a){console.error("[ServerInit] Error initializing cloud sync:",a)}return e})().catch(a=>console.error("[CloudSync] ensure failed:",a))},95127:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/diegosouzapw/dev/proxys/9router/src/app/loading.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/diegosouzapw/dev/proxys/9router/src/app/loading.tsx","default")},96487:()=>{},97319:(a,b,c)=>{"use strict";c.d(b,{Xg:()=>g,vq:()=>f,KC:()=>h});let d={claude:{id:"claude",alias:"cc",format:"claude",executor:"default",baseUrl:"https://api.anthropic.com/v1/messages",urlSuffix:"?beta=true",authType:"oauth",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14,context-management-2025-06-27","Anthropic-Dangerous-Direct-Browser-Access":"true","User-Agent":"claude-cli/1.0.83 (external, cli)","X-App":"cli","X-Stainless-Helper-Method":"stream","X-Stainless-Retry-Count":"0","X-Stainless-Runtime-Version":"v24.3.0","X-Stainless-Package-Version":"0.55.1","X-Stainless-Runtime":"node","X-Stainless-Lang":"js","X-Stainless-Arch":"arm64","X-Stainless-Os":"MacOS","X-Stainless-Timeout":"60"},oauth:{clientIdEnv:"CLAUDE_OAUTH_CLIENT_ID",clientIdDefault:"9d1c250a-e61b-44d9-88ed-5944d1962f5e",tokenUrl:"https://console.anthropic.com/v1/oauth/token"},models:[{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-opus-4-5-20251101",name:"Claude 4.5 Opus"},{id:"claude-sonnet-4-5-20250929",name:"Claude 4.5 Sonnet"},{id:"claude-haiku-4-5-20251001",name:"Claude 4.5 Haiku"}]},gemini:{id:"gemini",alias:"gemini",format:"gemini",executor:"default",baseUrl:"https://generativelanguage.googleapis.com/v1beta/models",urlBuilder:(a,b,c)=>`${a}/${b}:${c?"streamGenerateContent?alt=sse":"generateContent"}`,authType:"apikey",authHeader:"x-goog-api-key",oauth:{clientIdEnv:"GEMINI_OAUTH_CLIENT_ID",clientIdDefault:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecretEnv:"GEMINI_OAUTH_CLIENT_SECRET",clientSecretDefault:""},models:[{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro"},{id:"gemini-3.1-flash",name:"Gemini 3.1 Flash"},{id:"gemini-3-pro-preview",name:"Gemini 3.0 Pro Preview"},{id:"gemini-3-flash-preview",name:"Gemini 3.0 Flash Preview"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite"}]},"gemini-cli":{id:"gemini-cli",alias:"gc",format:"gemini-cli",executor:"gemini-cli",baseUrl:"https://cloudcode-pa.googleapis.com/v1internal",urlBuilder:(a,b,c)=>`${a}:${c?"streamGenerateContent?alt=sse":"generateContent"}`,authType:"oauth",authHeader:"bearer",oauth:{clientIdEnv:"GEMINI_CLI_OAUTH_CLIENT_ID",clientIdDefault:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecretEnv:"GEMINI_CLI_OAUTH_CLIENT_SECRET",clientSecretDefault:""},models:[{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro"},{id:"gemini-3.1-flash",name:"Gemini 3.1 Flash"},{id:"gemini-3-flash-preview",name:"Gemini 3.0 Flash Preview"},{id:"gemini-3-pro-preview",name:"Gemini 3.0 Pro Preview"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite"}]},codex:{id:"codex",alias:"cx",format:"openai-responses",executor:"codex",baseUrl:"https://chatgpt.com/backend-api/codex/responses",authType:"oauth",authHeader:"bearer",headers:{Version:"0.92.0","Openai-Beta":"responses=experimental","User-Agent":"codex-cli/0.92.0 (Windows 10.0.26100; x64)"},oauth:{clientIdEnv:"CODEX_OAUTH_CLIENT_ID",clientIdDefault:"app_EMoamEEZ73f0CkXaXp7hrann",clientSecretEnv:"CODEX_OAUTH_CLIENT_SECRET",clientSecretDefault:"",tokenUrl:"https://auth.openai.com/oauth/token"},models:[{id:"gpt-5.4",name:"GPT 5.4"},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex"},{id:"gpt-5.3-codex-xhigh",name:"GPT 5.3 Codex (xHigh)"},{id:"gpt-5.3-codex-high",name:"GPT 5.3 Codex (High)"},{id:"gpt-5.3-codex-low",name:"GPT 5.3 Codex (Low)"},{id:"gpt-5.3-codex-none",name:"GPT 5.3 Codex (None)"},{id:"gpt-5.1-codex-mini",name:"GPT 5.1 Codex Mini"},{id:"gpt-5.1-codex-mini-high",name:"GPT 5.1 Codex Mini (High)"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"},{id:"gpt-5.2",name:"GPT 5.2"},{id:"gpt-5.1-codex-max",name:"GPT 5.1 Codex Max"},{id:"gpt-5.1-codex",name:"GPT 5.1 Codex"},{id:"gpt-5.1",name:"GPT 5.1"},{id:"gpt-5-codex",name:"GPT 5 Codex"},{id:"gpt-5-codex-mini",name:"GPT 5 Codex Mini"}]},qwen:{id:"qwen",alias:"qw",format:"openai",executor:"default",baseUrl:"https://portal.qwen.ai/v1/chat/completions",authType:"oauth",authHeader:"bearer",headers:{"User-Agent":"QwenCode/0.12.3 (linux; x64)","X-Dashscope-AuthType":"qwen-oauth","X-Dashscope-CacheControl":"enable","X-Dashscope-UserAgent":"QwenCode/0.12.3 (linux; x64)","X-Stainless-Arch":"x64","X-Stainless-Lang":"js","X-Stainless-Os":"Linux","X-Stainless-Package-Version":"5.11.0","X-Stainless-Retry-Count":"1","X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":"v18.19.1",Connection:"keep-alive","Accept-Language":"*","Sec-Fetch-Mode":"cors"},oauth:{clientIdEnv:"QWEN_OAUTH_CLIENT_ID",clientIdDefault:"f0304373b74a44d2b584a3fb70ca9e56",tokenUrl:"https://chat.qwen.ai/api/v1/oauth2/token",authUrl:"https://chat.qwen.ai/api/v1/oauth2/device/code"},models:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-coder-flash",name:"Qwen3 Coder Flash"},{id:"vision-model",name:"Qwen3 Vision Model"},{id:"coder-model",name:"Qwen3.5 (Coder Model)"}]},iflow:{id:"iflow",alias:"if",format:"openai",executor:"iflow",baseUrl:"https://apis.iflow.cn/v1/chat/completions",authType:"oauth",authHeader:"bearer",headers:{"User-Agent":"iFlow-Cli"},oauth:{clientIdEnv:"IFLOW_OAUTH_CLIENT_ID",clientIdDefault:"10009311001",clientSecretEnv:"IFLOW_OAUTH_CLIENT_SECRET",clientSecretDefault:"",tokenUrl:"https://iflow.cn/oauth/token",authUrl:"https://iflow.cn/oauth"},models:[{id:"iflow-rome-30ba3b",name:"iFlow ROME"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-max",name:"Qwen3 Max"},{id:"qwen3-vl-plus",name:"Qwen3 Vision Plus"},{id:"kimi-k2-0905",name:"Kimi K2 0905"},{id:"qwen3-max-preview",name:"Qwen3 Max Preview"},{id:"kimi-k2",name:"Kimi K2"},{id:"deepseek-v3.2",name:"DeepSeek-V3.2-Exp"},{id:"deepseek-r1",name:"DeepSeek R1"},{id:"deepseek-v3",name:"DeepSeek V3"},{id:"qwen3-32b",name:"Qwen3 32B"},{id:"qwen3-235b-a22b-thinking-2507",name:"Qwen3 235B A22B Thinking 2507"},{id:"qwen3-235b-a22b-instruct",name:"Qwen3 235B A22B Instruct"},{id:"qwen3-235b",name:"Qwen3 235B"}]},antigravity:{id:"antigravity",alias:"ag",format:"antigravity",executor:"antigravity",baseUrls:["https://daily-cloudcode-pa.googleapis.com","https://cloudcode-pa.googleapis.com"],urlBuilder:(a,b,c)=>`${a}${c?"/v1internal:streamGenerateContent?alt=sse":"/v1internal:generateContent"}`,authType:"oauth",authHeader:"bearer",headers:{"User-Agent":"antigravity/1.104.0 darwin/arm64"},oauth:{clientIdEnv:"ANTIGRAVITY_OAUTH_CLIENT_ID",clientIdDefault:"1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com",clientSecretEnv:"ANTIGRAVITY_OAUTH_CLIENT_SECRET",clientSecretDefault:""},models:[{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"gemini-3.1-pro-high",name:"Gemini 3.1 Pro High"},{id:"gemini-3.1-pro-low",name:"Gemini 3.1 Pro Low"},{id:"gemini-3.1-flash",name:"Gemini 3.1 Flash"},{id:"gemini-3-flash",name:"Gemini 3.0 Flash"},{id:"gpt-oss-120b-medium",name:"GPT OSS 120B Medium"}]},github:{id:"github",alias:"gh",format:"openai",executor:"github",baseUrl:"https://api.githubcopilot.com/chat/completions",responsesBaseUrl:"https://api.githubcopilot.com/responses",authType:"oauth",authHeader:"bearer",headers:{"copilot-integration-id":"vscode-chat","editor-version":"vscode/1.107.1","editor-plugin-version":"copilot-chat/0.26.7","user-agent":"GitHubCopilotChat/0.26.7","openai-intent":"conversation-panel","x-github-api-version":"2025-04-01","x-vscode-user-agent-library-version":"electron-fetch","X-Initiator":"user",Accept:"application/json","Content-Type":"application/json"},models:[{id:"gpt-4.1",name:"GPT-4.1"},{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o Mini"},{id:"gpt-4",name:"GPT-4"},{id:"gpt-3.5-turbo",name:"GPT-3.5 Turbo"},{id:"gpt-5",name:"GPT-5"},{id:"gpt-5-mini",name:"GPT-5 Mini"},{id:"gpt-5-codex",name:"GPT-5 Codex",targetFormat:"openai-responses"},{id:"gpt-5.1",name:"GPT-5.1"},{id:"gpt-5.1-codex",name:"GPT-5.1 Codex",targetFormat:"openai-responses"},{id:"gpt-5.1-codex-mini",name:"GPT-5.1 Codex Mini",targetFormat:"openai-responses"},{id:"gpt-5.1-codex-max",name:"GPT-5.1 Codex Max",targetFormat:"openai-responses"},{id:"gpt-5.2",name:"GPT-5.2"},{id:"gpt-5.2-codex",name:"GPT-5.2 Codex",targetFormat:"openai-responses"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"},{id:"claude-opus-4.1",name:"Claude Opus 4.1"},{id:"claude-opus-4.6",name:"Claude Opus 4.6"},{id:"claude-opus-4-5-20251101",name:"Claude Opus 4.5 (Full ID)"},{id:"claude-sonnet-4",name:"Claude Sonnet 4"},{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview"},{id:"grok-code-fast-1",name:"Grok Code Fast 1"},{id:"oswe-vscode-prime",name:"Raptor Mini"}]},kiro:{id:"kiro",alias:"kr",format:"kiro",executor:"kiro",baseUrl:"https://codewhisperer.us-east-1.amazonaws.com/generateAssistantResponse",authType:"oauth",authHeader:"bearer",headers:{"Content-Type":"application/json",Accept:"application/vnd.amazon.eventstream","X-Amz-Target":"AmazonCodeWhispererStreamingService.GenerateAssistantResponse","User-Agent":"AWS-SDK-JS/3.0.0 kiro-ide/1.0.0","X-Amz-User-Agent":"aws-sdk-js/3.0.0 kiro-ide/1.0.0"},oauth:{tokenUrl:"https://prod.us-east-1.auth.desktop.kiro.dev/refreshToken",authUrl:"https://prod.us-east-1.auth.desktop.kiro.dev"},models:[{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"}]},cursor:{id:"cursor",alias:"cu",format:"cursor",executor:"cursor",baseUrl:"https://api2.cursor.sh",chatPath:"/aiserver.v1.ChatService/StreamUnifiedChatWithTools",authType:"oauth",authHeader:"bearer",headers:{"connect-accept-encoding":"gzip","connect-protocol-version":"1","Content-Type":"application/connect+proto","User-Agent":"connect-es/1.6.1"},clientVersion:"1.1.3",models:[{id:"default",name:"Auto (Server Picks)"},{id:"claude-4.5-opus-high-thinking",name:"Claude 4.5 Opus High Thinking"},{id:"claude-4.5-opus-high",name:"Claude 4.5 Opus High"},{id:"claude-4.5-sonnet-thinking",name:"Claude 4.5 Sonnet Thinking"},{id:"claude-4.5-sonnet",name:"Claude 4.5 Sonnet"},{id:"claude-4.5-haiku",name:"Claude 4.5 Haiku"},{id:"claude-4.5-opus",name:"Claude 4.5 Opus"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"}]},openai:{id:"openai",alias:"openai",format:"openai",executor:"default",baseUrl:"https://api.openai.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o Mini"},{id:"gpt-4-turbo",name:"GPT-4 Turbo"},{id:"o1",name:"O1"},{id:"o1-mini",name:"O1 Mini"}]},anthropic:{id:"anthropic",alias:"anthropic",format:"claude",executor:"default",baseUrl:"https://api.anthropic.com/v1/messages",urlSuffix:"?beta=true",authType:"apikey",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01"},models:[{id:"claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"claude-opus-4-20250514",name:"Claude Opus 4"},{id:"claude-3-5-sonnet-20241022",name:"Claude 3.5 Sonnet"}]},openrouter:{id:"openrouter",alias:"openrouter",format:"openai",executor:"default",baseUrl:"https://openrouter.ai/api/v1/chat/completions",authType:"apikey",authHeader:"bearer",headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"},models:[{id:"auto",name:"Auto (Best Available)"}]},glm:{id:"glm",alias:"glm",format:"claude",executor:"default",baseUrl:"https://api.z.ai/api/anthropic/v1/messages",urlSuffix:"?beta=true",authType:"apikey",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},models:[{id:"glm-4.7-flash",name:"GLM 4.7 Flash"},{id:"glm-4.7",name:"GLM 4.7"},{id:"glm-4.6v",name:"GLM 4.6V (Vision)"},{id:"glm-4.6",name:"GLM 4.6"},{id:"glm-4.5v",name:"GLM 4.5V (Vision)"},{id:"glm-4.5",name:"GLM 4.5"},{id:"glm-4.5-air",name:"GLM 4.5 Air"},{id:"glm-4-32b",name:"GLM 4 32B"}]},kimi:{id:"kimi",alias:"kimi",format:"openai",executor:"default",baseUrl:"https://api.moonshot.ai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"kimi-k2.5-thinking",name:"Kimi K2.5 Thinking"},{id:"kimi-latest",name:"Kimi Latest"},{id:"kimi-for-coding",name:"Kimi For Coding"}]},"kimi-coding":{id:"kimi-coding",alias:"kmc",format:"claude",executor:"default",baseUrl:"https://api.kimi.com/coding/v1/messages",urlSuffix:"?beta=true",authType:"oauth",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},oauth:{clientIdEnv:"KIMI_CODING_OAUTH_CLIENT_ID",clientIdDefault:"17e5f671-d194-4dfb-9706-5516cb48c098",tokenUrl:"https://auth.kimi.com/api/oauth/token",refreshUrl:"https://auth.kimi.com/api/oauth/token",authUrl:"https://auth.kimi.com/api/oauth/device_authorization"},models:[{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"kimi-k2.5-thinking",name:"Kimi K2.5 Thinking"},{id:"kimi-latest",name:"Kimi Latest"}]},kilocode:{id:"kilocode",alias:"kc",format:"openrouter",executor:"openrouter",baseUrl:"https://api.kilo.ai/api/openrouter/chat/completions",modelsUrl:"https://api.kilo.ai/api/openrouter/models",authType:"oauth",authHeader:"Authorization",authPrefix:"Bearer ",oauth:{initiateUrl:"https://api.kilo.ai/api/device-auth/codes",pollUrlBase:"https://api.kilo.ai/api/device-auth/codes"},models:[{id:"openrouter/free",name:"Free Models Router"},{id:"qwen/qwen3-vl-235b-a22b-thinking",name:"Qwen3 VL 235B A22B Thinking"},{id:"qwen/qwen3-235b-a22b-thinking-2507",name:"Qwen3 235B A22B Thinking 2507"},{id:"qwen/qwen3-vl-30b-a3b-thinking",name:"Qwen3 VL 30B A3B Thinking"},{id:"stepfun/step-3.5-flash:free",name:"StepFun Step 3.5 Flash"},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview"},{id:"openai/gpt-4o-mini",name:"GPT-4o Mini"},{id:"openai/gpt-4.1-nano",name:"GPT-4.1 Nano"},{id:"openai/gpt-5-nano",name:"GPT-5 Nano"},{id:"openai/gpt-5-mini",name:"GPT-5 Mini"},{id:"anthropic/claude-3-haiku",name:"Claude 3 Haiku"},{id:"google/gemini-2.0-flash",name:"Gemini 2.0 Flash"},{id:"google/gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite"},{id:"deepseek/deepseek-chat-v3.1",name:"DeepSeek V3.1"},{id:"deepseek/deepseek-v3.2",name:"DeepSeek V3.2"},{id:"meta-llama/llama-3.3-70b-instruct",name:"Llama 3.3 70B"},{id:"meta-llama/llama-4-scout",name:"Llama 4 Scout"},{id:"meta-llama/llama-4-maverick",name:"Llama 4 Maverick"},{id:"qwen/qwen3-8b",name:"Qwen3 8B"},{id:"qwen/qwen3-32b",name:"Qwen3 32B"},{id:"qwen/qwen3-coder",name:"Qwen3 Coder 480B"},{id:"qwen/qwq-32b",name:"QwQ 32B"},{id:"mistralai/mistral-small-24b-instruct-2501",name:"Mistral Small 3"},{id:"mistralai/mistral-7b-instruct",name:"Mistral 7B"},{id:"x-ai/grok-code-fast-1",name:"Grok Code Fast 1"},{id:"moonshotai/kimi-k2.5",name:"Kimi K2.5"}],passthroughModels:!0},cline:{id:"cline",alias:"cl",format:"openai",executor:"openai",baseUrl:"https://api.cline.bot/api/v1/chat/completions",authType:"oauth",authHeader:"Authorization",authPrefix:"Bearer ",oauth:{tokenUrl:"https://api.cline.bot/api/v1/auth/token",refreshUrl:"https://api.cline.bot/api/v1/auth/refresh",authUrl:"https://api.cline.bot/api/v1/auth/authorize"},extraHeaders:{"HTTP-Referer":"https://cline.bot","X-Title":"Cline"},models:[{id:"anthropic/claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"anthropic/claude-opus-4-20250514",name:"Claude Opus 4"},{id:"google/gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"google/gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"openai/gpt-4.1",name:"GPT-4.1"},{id:"openai/o3",name:"o3"},{id:"deepseek/deepseek-chat",name:"DeepSeek Chat"}],passthroughModels:!0},minimax:{id:"minimax",alias:"minimax",format:"claude",executor:"default",baseUrl:"https://api.minimax.io/anthropic/v1/messages",urlSuffix:"?beta=true",authType:"apikey",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},models:[{id:"MiniMax-M2.1",name:"MiniMax M2.1"}]},"minimax-cn":{id:"minimax-cn",alias:"minimax-cn",format:"claude",executor:"default",baseUrl:"https://api.minimaxi.com/anthropic/v1/messages",urlSuffix:"?beta=true",authType:"apikey",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},models:[{id:"MiniMax-M2.1",name:"MiniMax M2.1"}]},deepseek:{id:"deepseek",alias:"ds",format:"openai",executor:"default",baseUrl:"https://api.deepseek.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"deepseek-chat",name:"DeepSeek V3.2 Chat"},{id:"deepseek-reasoner",name:"DeepSeek V3.2 Reasoner"}]},groq:{id:"groq",alias:"groq",format:"openai",executor:"default",baseUrl:"https://api.groq.com/openai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"llama-3.3-70b-versatile",name:"Llama 3.3 70B"},{id:"meta-llama/llama-4-maverick-17b-128e-instruct",name:"Llama 4 Maverick"},{id:"qwen/qwen3-32b",name:"Qwen3 32B"},{id:"openai/gpt-oss-120b",name:"GPT-OSS 120B"}]},blackbox:{id:"blackbox",alias:"bb",format:"openai",executor:"default",baseUrl:"https://api.blackbox.ai/v1/chat/completions",modelsUrl:"https://api.blackbox.ai/v1/models",authType:"apikey",authHeader:"bearer",models:[{id:"gpt-4o",name:"GPT-4o"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"claude-sonnet-4",name:"Claude Sonnet 4"},{id:"deepseek-v3",name:"DeepSeek V3"},{id:"blackboxai",name:"Blackbox AI"},{id:"blackboxai-pro",name:"Blackbox AI Pro"}]},xai:{id:"xai",alias:"xai",format:"openai",executor:"default",baseUrl:"https://api.x.ai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"grok-4",name:"Grok 4"},{id:"grok-4-fast-reasoning",name:"Grok 4 Fast Reasoning"},{id:"grok-code-fast-1",name:"Grok Code Fast"},{id:"grok-3",name:"Grok 3"}]},mistral:{id:"mistral",alias:"mistral",format:"openai",executor:"default",baseUrl:"https://api.mistral.ai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"mistral-large-latest",name:"Mistral Large 3"},{id:"codestral-latest",name:"Codestral"},{id:"mistral-medium-latest",name:"Mistral Medium 3"}]},perplexity:{id:"perplexity",alias:"pplx",format:"openai",executor:"default",baseUrl:"https://api.perplexity.ai/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"sonar-pro",name:"Sonar Pro"},{id:"sonar",name:"Sonar"}]},together:{id:"together",alias:"together",format:"openai",executor:"default",baseUrl:"https://api.together.xyz/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"meta-llama/Llama-3.3-70B-Instruct-Turbo",name:"Llama 3.3 70B Turbo"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"Qwen/Qwen3-235B-A22B",name:"Qwen3 235B"},{id:"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8",name:"Llama 4 Maverick"}]},fireworks:{id:"fireworks",alias:"fireworks",format:"openai",executor:"default",baseUrl:"https://api.fireworks.ai/inference/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"accounts/fireworks/models/deepseek-v3p1",name:"DeepSeek V3.1"},{id:"accounts/fireworks/models/llama-v3p3-70b-instruct",name:"Llama 3.3 70B"},{id:"accounts/fireworks/models/qwen3-235b-a22b",name:"Qwen3 235B"}]},cerebras:{id:"cerebras",alias:"cerebras",format:"openai",executor:"default",baseUrl:"https://api.cerebras.ai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"gpt-oss-120b",name:"GPT OSS 120B"},{id:"zai-glm-4.7",name:"ZAI GLM 4.7"},{id:"llama-3.3-70b",name:"Llama 3.3 70B"},{id:"llama-4-scout-17b-16e-instruct",name:"Llama 4 Scout"},{id:"qwen-3-235b-a22b-instruct-2507",name:"Qwen3 235B A22B"},{id:"qwen-3-32b",name:"Qwen3 32B"}]},"ollama-cloud":{id:"ollama-cloud",alias:"ollamacloud",format:"openai",executor:"default",baseUrl:"https://api.ollama.com/v1/chat/completions",modelsUrl:"https://api.ollama.com/v1/models",authType:"apikey",authHeader:"bearer",models:[{id:"gemma3:27b",name:"Gemma 3 27B"},{id:"llama3.3:70b",name:"Llama 3.3 70B"},{id:"qwen3:72b",name:"Qwen3 72B"},{id:"devstral:24b",name:"Devstral 24B"},{id:"deepseek-r2:671b",name:"DeepSeek R2 671B"},{id:"phi4:14b",name:"Phi 4 14B"},{id:"mistral-small3.2:24b",name:"Mistral Small 3.2 24B"}],passthroughModels:!0},cohere:{id:"cohere",alias:"cohere",format:"openai",executor:"default",baseUrl:"https://api.cohere.com/v2/chat",authType:"apikey",authHeader:"bearer",models:[{id:"command-r-plus-08-2024",name:"Command R+ (Aug 2024)"},{id:"command-r-08-2024",name:"Command R (Aug 2024)"},{id:"command-a-03-2025",name:"Command A (Mar 2025)"}]},nvidia:{id:"nvidia",alias:"nvidia",format:"openai",executor:"default",baseUrl:"https://integrate.api.nvidia.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"moonshotai/kimi-k2.5",name:"Kimi K2.5"},{id:"z-ai/glm4.7",name:"GLM 4.7"},{id:"deepseek-ai/deepseek-v3.2",name:"DeepSeek V3.2"},{id:"nvidia/llama-3.3-70b-instruct",name:"Llama 3.3 70B"},{id:"meta/llama-4-maverick-17b-128e-instruct",name:"Llama 4 Maverick"},{id:"deepseek/deepseek-r1",name:"DeepSeek R1"}]},nebius:{id:"nebius",alias:"nebius",format:"openai",executor:"default",baseUrl:"https://api.tokenfactory.nebius.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B Instruct"}]},siliconflow:{id:"siliconflow",alias:"siliconflow",format:"openai",executor:"default",baseUrl:"https://api.siliconflow.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"deepseek-ai/DeepSeek-V3.2",name:"DeepSeek V3.2"},{id:"deepseek-ai/DeepSeek-V3.1",name:"DeepSeek V3.1"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"Qwen/Qwen3-235B-A22B-Instruct-2507",name:"Qwen3 235B"},{id:"Qwen/Qwen3-Coder-480B-A35B-Instruct",name:"Qwen3 Coder 480B"},{id:"Qwen/Qwen3-32B",name:"Qwen3 32B"},{id:"moonshotai/Kimi-K2.5",name:"Kimi K2.5"},{id:"zai-org/GLM-4.7",name:"GLM 4.7"},{id:"openai/gpt-oss-120b",name:"GPT OSS 120B"},{id:"baidu/ERNIE-4.5-300B-A47B",name:"ERNIE 4.5 300B"}]},hyperbolic:{id:"hyperbolic",alias:"hyp",format:"openai",executor:"default",baseUrl:"https://api.hyperbolic.xyz/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"Qwen/QwQ-32B",name:"QwQ 32B"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"deepseek-ai/DeepSeek-V3",name:"DeepSeek V3"},{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B"},{id:"meta-llama/Llama-3.2-3B-Instruct",name:"Llama 3.2 3B"},{id:"Qwen/Qwen2.5-72B-Instruct",name:"Qwen 2.5 72B"},{id:"Qwen/Qwen2.5-Coder-32B-Instruct",name:"Qwen 2.5 Coder 32B"},{id:"NousResearch/Hermes-3-Llama-3.1-70B",name:"Hermes 3 70B"}]},huggingface:{id:"huggingface",alias:"hf",format:"openai",executor:"default",baseUrl:"https://router.huggingface.co/hf-inference/models/meta-llama/Meta-Llama-3.1-70B-Instruct/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"meta-llama/Meta-Llama-3.1-70B-Instruct",name:"Llama 3.1 70B Instruct"},{id:"meta-llama/Meta-Llama-3.1-8B-Instruct",name:"Llama 3.1 8B Instruct"},{id:"Qwen/Qwen2.5-72B-Instruct",name:"Qwen 2.5 72B"},{id:"mistralai/Mistral-7B-Instruct-v0.3",name:"Mistral 7B v0.3"},{id:"microsoft/Phi-3.5-mini-instruct",name:"Phi-3.5 Mini"}]},vertex:{id:"vertex",alias:"vertex",format:"gemini",executor:"default",baseUrl:"https://us-central1-aiplatform.googleapis.com/v1/projects",urlBuilder:(a,b,c)=>`https://generativelanguage.googleapis.com/v1beta/models/${b}:${c?"streamGenerateContent?alt=sse":"generateContent"}`,authType:"apikey",authHeader:"bearer",models:[{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro (Vertex)"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash (Vertex)"},{id:"gemini-2.0-flash-thinking-exp",name:"Gemini 2.0 Flash Thinking Exp (Vertex)"},{id:"gemma-2-27b-it",name:"Gemma 2 27B (Vertex)"},{id:"claude-opus-4-5@20251101",name:"Claude Opus 4.5 (Vertex)"},{id:"claude-sonnet-4-5@20251101",name:"Claude Sonnet 4.5 (Vertex)"}]}},e=new Map;for(let a of Object.values(d))a.alias&&a.alias!==a.id&&e.set(a.alias,a);let f=function(){let a={};for(let b of Object.values(d))if(b.models&&b.models.length>0){let c=b.alias||b.id;a[c]||(a[c]=b.models)}return a}(),g=function(){let a={};for(let b of Object.values(d))a[b.id]=b.alias||b.id;return a}();function h(a){return f[g[a]||a]||[]}},97507:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(48249);function e({error:a,reset:b}){return(0,d.jsxs)("div",{className:"flex flex-col items-center justify-center min-h-[60vh] p-6 text-center",role:"alert","aria-live":"assertive",children:[(0,d.jsx)("div",{className:"text-[64px] mb-4","aria-hidden":"true",children:"\uD83D\uDD27"}),(0,d.jsx)("h1",{className:"text-[28px] font-bold mb-2 text-[var(--color-text-main)]",children:"Internal Server Error"}),(0,d.jsx)("p",{className:"text-[15px] text-[var(--color-text-muted)] max-w-[400px] leading-relaxed mb-2",children:"Something went wrong while processing your request. Our team has been notified and is working on a fix."}),a?.digest&&(0,d.jsxs)("p",{className:"text-xs text-[var(--color-text-muted)] mb-6 font-mono",children:["Error ID: ",a.digest]}),!1,(0,d.jsxs)("div",{className:"flex gap-3",children:[(0,d.jsx)("button",{onClick:b,"aria-label":"Retry loading the page",className:"px-6 py-2.5 rounded-lg text-white text-sm font-semibold cursor-pointer transition-all duration-200 motion-reduce:transition-none bg-[var(--color-accent)] hover:bg-[var(--color-accent-hover)] focus:outline-2 focus:outline-offset-2 focus:outline-[var(--color-accent)]",children:"Try Again"}),(0,d.jsx)("a",{href:"/dashboard",className:"px-6 py-2.5 rounded-lg text-[var(--color-text-main)] text-sm font-semibold cursor-pointer transition-all duration-200 motion-reduce:transition-none border border-[var(--color-border)] hover:bg-[var(--color-bg-alt)] no-underline focus:outline-2 focus:outline-offset-2 focus:outline-[var(--color-accent)]","aria-label":"Return to dashboard",children:"Go to Dashboard"}),(0,d.jsx)("a",{href:"/status",className:"px-6 py-2.5 rounded-lg text-[var(--color-text-main)] text-sm font-semibold cursor-pointer transition-all duration-200 motion-reduce:transition-none border border-[var(--color-border)] hover:bg-[var(--color-bg-alt)] no-underline focus:outline-2 focus:outline-offset-2 focus:outline-[var(--color-accent)]","aria-label":"Open system status",children:"System Status"})]})]})}}};
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=242,exports.ids=[242,9679],exports.modules={647:(a,b,c)=>{c.d(b,{Bm:()=>x,DZ:()=>u,h$:()=>y,nX:()=>t,ne:()=>A,nq:()=>v,wq:()=>z,yL:()=>s,zl:()=>w});var d=c(64926),e=c(13419);let f=process.env.OMNIROUTE_BASE_URL||"http://localhost:20128",g=process.env.OMNIROUTE_API_KEY||"";async function h(a,b={}){let c=`${f}${a}`,d={"Content-Type":"application/json",...g?{Authorization:`Bearer ${g}`}:{},...b.headers||{}},e=await fetch(c,{...b,headers:d,signal:AbortSignal.timeout(3e4)});if(!e.ok){let a=await e.text().catch(()=>"Unknown error");throw Error(`API [${e.status}]: ${a}`)}return e.json()}function i(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function j(a){return i(a)?a:{}}function k(a){return Array.isArray(a)?a.filter(i):[]}function l(a,b=""){return"string"==typeof a?a:b}function m(a,b=0){let c="number"==typeof a?a:"string"==typeof a&&a.trim().length>0?Number(a):NaN;return Number.isFinite(c)?c:b}function n(a){let b=k(a.models),c=k(j(a.data).models);return(b.length>0?b:c).map(a=>({provider:l(a.provider,"unknown"),model:l(a.model,""),inputCostPer1M:m(a.inputCostPer1M,3)}))}function o(a){if(Array.isArray(a))return a.filter(i);let b=j(a);return Array.isArray(b.combos)?b.combos.filter(i):[]}let p=null,q={aggressive:{profiles:{oauth:{transientCooldown:3e3,rateLimitCooldown:3e4,maxBackoffLevel:4,circuitBreakerThreshold:2,circuitBreakerReset:3e4},apikey:{transientCooldown:2e3,rateLimitCooldown:0,maxBackoffLevel:3,circuitBreakerThreshold:3,circuitBreakerReset:15e3}},defaults:{requestsPerMinute:180,minTimeBetweenRequests:100,concurrentRequests:16}},balanced:{profiles:{oauth:{transientCooldown:5e3,rateLimitCooldown:6e4,maxBackoffLevel:8,circuitBreakerThreshold:3,circuitBreakerReset:6e4},apikey:{transientCooldown:3e3,rateLimitCooldown:0,maxBackoffLevel:5,circuitBreakerThreshold:5,circuitBreakerReset:3e4}},defaults:{requestsPerMinute:100,minTimeBetweenRequests:200,concurrentRequests:10}},conservative:{profiles:{oauth:{transientCooldown:8e3,rateLimitCooldown:12e4,maxBackoffLevel:10,circuitBreakerThreshold:8,circuitBreakerReset:12e4},apikey:{transientCooldown:5e3,rateLimitCooldown:3e4,maxBackoffLevel:8,circuitBreakerThreshold:8,circuitBreakerReset:6e4}},defaults:{requestsPerMinute:60,minTimeBetweenRequests:350,concurrentRequests:6}}},r={coding:{preferred:["claude","deepseek","codex"],traits:["fast","code-optimized"]},review:{preferred:["claude","gemini","openai"],traits:["analytical","thorough"]},planning:{preferred:["gemini","claude","openai"],traits:["reasoning","structured"]},analysis:{preferred:["gemini","claude"],traits:["deep-reasoning","large-context"]},debugging:{preferred:["claude","deepseek","codex"],traits:["code-aware","fast"]},documentation:{preferred:["gemini","claude","openai"],traits:["clear","structured"]}};async function s(a){let b=Date.now();try{let[c,f,g]=await Promise.allSettled([h("/api/combos"),h("/api/monitoring/health"),h("/api/usage/quota")]),i="fulfilled"===c.status?o(c.value):[],m="fulfilled"===f.status?j(f.value):{},p="fulfilled"===g.status?(0,e.H)(g.value):(0,e.H)({}),q=a.combo?i.find(b=>l(b.id)===a.combo||l(b.name)===a.combo):i.find(a=>!1!==a.enabled);if(!q)return{content:[{type:"text",text:JSON.stringify({error:"No matching combo found"})}],isError:!0};let r=n(q),s=k(m.circuitBreakers),t=p.providers,u=r.map((b,c)=>{let d=s.find(a=>l(a.provider)===b.provider),e=t.find(a=>a.provider===b.provider),f=a.promptTokenEstimate/1e6*b.inputCostPer1M;return{provider:b.provider,model:b.model||a.model,probability:0===c?.85:.15/Math.max(r.length-1,1),estimatedCost:Math.round(1e4*f)/1e4,healthStatus:l(d?.state,"CLOSED"),quotaAvailable:e?.percentRemaining??100}}),v=u.map(a=>a.estimatedCost),w={simulatedPath:u,fallbackTree:{primary:u[0]?.provider||"unknown",fallbacks:u.slice(1).map(a=>a.provider),worstCaseCost:Math.max(...v,0),bestCaseCost:Math.min(...v,0)}};return await (0,d.Bv)("omniroute_simulate_route",a,w,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(w,null,2)}]}}catch(e){let c=e instanceof Error?e.message:String(e);return await (0,d.Bv)("omniroute_simulate_route",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function t(a){let b=Date.now();try{let c=0;try{let a=j(await h("/api/usage/analytics?period=session"));c=m(a.totalCost,0)}catch{}p={sessionId:`budget_${Date.now()}`,maxCost:a.maxCost,action:a.action,degradeToTier:a.degradeToTier,spent:c,createdAt:new Date().toISOString()};let e=Math.max(0,a.maxCost-c),f={sessionId:p.sessionId,budgetTotal:a.maxCost,budgetSpent:Math.round(1e4*c)/1e4,budgetRemaining:Math.round(1e4*e)/1e4,action:a.action,status:e<=0?"exceeded":e<.2*a.maxCost?"warning":"active"};return await (0,d.Bv)("omniroute_set_budget_guard",{maxCost:a.maxCost,action:a.action},f,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(f,null,2)}]}}catch(e){let c=e instanceof Error?e.message:String(e);return await (0,d.Bv)("omniroute_set_budget_guard",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function u(a){let b=Date.now();try{let c=q[a.profile];if(!c)return{content:[{type:"text",text:`Error: Invalid profile "${a.profile}"`}],isError:!0};await h("/api/resilience",{method:"PATCH",body:JSON.stringify({profiles:c.profiles,defaults:c.defaults})});let e={applied:!0,profile:a.profile,settings:c};return await (0,d.Bv)("omniroute_set_resilience_profile",a,e,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(e,null,2)}]}}catch(e){let c=e instanceof Error?e.message:String(e);return await (0,d.Bv)("omniroute_set_resilience_profile",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function v(a){let b=Date.now();try{let c=o(await h("/api/combos")).find(b=>l(b.id)===a.comboId||l(b.name)===a.comboId);if(!c)return{content:[{type:"text",text:JSON.stringify({error:`Combo "${a.comboId}" not found`})}],isError:!0};let e=n(c),f=(a.testPrompt||"Say hello").slice(0,200),g=(await Promise.allSettled(e.map(async a=>{let b=Date.now();try{let c=j(await h("/v1/chat/completions",{method:"POST",body:JSON.stringify({model:a.model||"auto",messages:[{role:"user",content:f}],max_tokens:50,stream:!1,"x-provider":a.provider})})),d=j(c.usage);return{provider:a.provider,model:a.model||l(c.model,"unknown"),success:!0,latencyMs:Date.now()-b,cost:m(c.cost,0),tokenCount:m(d.prompt_tokens,0)+m(d.completion_tokens,0)}}catch(c){return{provider:a.provider,model:a.model||"unknown",success:!1,latencyMs:Date.now()-b,cost:0,tokenCount:0,error:c instanceof Error?c.message:String(c)}}}))).map(a=>"fulfilled"===a.status?a.value:{provider:"unknown",model:"unknown",success:!1,latencyMs:0,cost:0,tokenCount:0,error:"Promise rejected"}),i=g.filter(a=>a.success),k=i.sort((a,b)=>a.latencyMs-b.latencyMs)[0],p=i.sort((a,b)=>a.cost-b.cost)[0],q={results:g,summary:{totalProviders:g.length,successful:i.length,fastestProvider:k?.provider||"none",cheapestProvider:p?.provider||"none"}};return await (0,d.Bv)("omniroute_test_combo",{comboId:a.comboId},q.summary,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(q,null,2)}]}}catch(e){let c=e instanceof Error?e.message:String(e);return await (0,d.Bv)("omniroute_test_combo",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function w(a){let b=Date.now();try{let[c,f,g]=await Promise.allSettled([h("/api/monitoring/health"),h(`/api/usage/quota?provider=${encodeURIComponent(a.provider)}`),h(`/api/usage/analytics?period=session&provider=${encodeURIComponent(a.provider)}`)]),i="fulfilled"===c.status?j(c.value):{},n="fulfilled"===f.status?(0,e.H)(f.value,{provider:a.provider}):(0,e.H)({}),o="fulfilled"===g.status?j(g.value):{},p=k(i.circuitBreakers).find(b=>l(b.provider)===a.provider),q=n.providers.find(b=>b.provider===a.provider)||null,r={provider:a.provider,successRate:m(o.successRate,1),requestCount:m(o.requestCount,0),avgLatencyMs:m(o.avgLatencyMs,0),p50LatencyMs:m(o.p50LatencyMs,0),p95LatencyMs:m(o.p95LatencyMs,0),p99LatencyMs:m(o.p99LatencyMs,0),errorRate:m(o.errorRate,0),lastError:l(o.lastError)||null,circuitBreakerState:l(p?.state,"CLOSED"),quotaInfo:q?{used:q.quotaUsed,total:q.quotaTotal,resetAt:q.resetAt}:{used:0,total:null,resetAt:null}};return await (0,d.Bv)("omniroute_get_provider_metrics",a,r,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(r,null,2)}]}}catch(e){let c=e instanceof Error?e.message:String(e);return await (0,d.Bv)("omniroute_get_provider_metrics",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function x(a){let b=Date.now();try{let c=r[a.taskType]||r.coding,e=o(await h("/api/combos")).filter(a=>!1!==a.enabled);if(0===e.length)return{content:[{type:"text",text:JSON.stringify({error:"No enabled combos available"})}],isError:!0};let f=e.map(a=>{let b=n(a),d=0;for(let a of b){let b=c.preferred.indexOf(a.provider);b>=0&&(d+=(c.preferred.length-b)*10)}let e=l(a.name).toLowerCase();for(let a of c.traits)e.includes(a)&&(d+=5);let f=e.includes("free")||b.every(a=>a.provider.toLowerCase().includes("free"));return{combo:a,score:d,isFree:f}});f.sort((a,b)=>b.score-a.score);let g=f[0],i=f.slice(1,4).map(a=>({id:a.combo.id,name:a.combo.name,tradeoff:a.isFree?"free but may have limits":a.score<.5*g.score?"cheaper but slower":"similar quality, different providers"})),j=f.find(a=>a.isFree&&a!==g),k={recommendedCombo:{id:g.combo.id,name:g.combo.name,reason:`Best match for "${a.taskType}": preferred providers (${c.preferred.slice(0,3).join(", ")})`},alternatives:i,freeAlternative:j?{id:j.combo.id,name:j.combo.name}:null};return await (0,d.Bv)("omniroute_best_combo_for_task",a,k.recommendedCombo,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(k,null,2)}]}}catch(e){let c=e instanceof Error?e.message:String(e);return await (0,d.Bv)("omniroute_best_combo_for_task",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function y(a){let b=Date.now();try{let c=null;try{c=j(await h(`/api/routing/decisions/${encodeURIComponent(a.requestId)}`))}catch{}let e=c?{requestId:a.requestId,decision:{comboUsed:c.comboUsed||"default",providerSelected:c.providerSelected||"unknown",modelUsed:c.modelUsed||"unknown",score:c.score||0,factors:c.factors||[{name:"health",value:1,weight:.3,contribution:.3},{name:"quota",value:1,weight:.25,contribution:.25},{name:"cost",value:.8,weight:.2,contribution:.16},{name:"latency",value:.9,weight:.15,contribution:.135},{name:"task_fit",value:.7,weight:.1,contribution:.07}],fallbacksTriggered:c.fallbacksTriggered||[],costActual:c.costActual||0,latencyActual:c.latencyActual||0}}:{requestId:a.requestId,decision:{comboUsed:"unknown",providerSelected:"unknown",modelUsed:"unknown",score:0,factors:[],fallbacksTriggered:[],costActual:0,latencyActual:0},note:"Routing decision not found. The /api/routing/decisions endpoint may not be implemented yet, or the requestId is invalid."};return await (0,d.Bv)("omniroute_explain_route",a,{requestId:a.requestId},Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(e,null,2)}]}}catch(e){let c=e instanceof Error?e.message:String(e);return await (0,d.Bv)("omniroute_explain_route",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function z(a){let b=Date.now();try{let c=j(await h("/api/pricing/sync",{method:"POST",body:JSON.stringify({sources:a.sources,dryRun:a.dryRun??!1})}));return await (0,d.Bv)("omniroute_sync_pricing",a,c,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(c,null,2)}]}}catch(e){let c=e instanceof Error?e.message:String(e);return await (0,d.Bv)("omniroute_sync_pricing",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function A(){let a=Date.now();try{let b=j(await h("/api/usage/analytics?period=session").catch(()=>({}))),c=j(b.tokenCount),e=k(b.byModel),f=k(b.byProvider),g={sessionStart:l(b.sessionStart,new Date().toISOString()),duration:l(b.duration,"unknown"),requestCount:m(b.requestCount,0),costTotal:m(b.totalCost,0),tokenCount:{prompt:m(c.prompt,0),completion:m(c.completion,0)},topModels:e.slice(0,5).map(a=>({model:l(a.model,"unknown"),count:m(a.requests,0)})),topProviders:f.slice(0,5).map(a=>({provider:l(a.name,"unknown"),count:m(a.requests,0)})),errors:m(b.errorCount,0),fallbacks:m(b.fallbackCount,0),budgetGuard:p?{active:!0,remaining:Math.max(0,p.maxCost-p.spent),action:p.action}:null};return await (0,d.Bv)("omniroute_get_session_snapshot",{},{requestCount:g.requestCount},Date.now()-a,!0),{content:[{type:"text",text:JSON.stringify(g,null,2)}]}}catch(c){let b=c instanceof Error?c.message:String(c);return await (0,d.Bv)("omniroute_get_session_snapshot",{},null,Date.now()-a,!1,b),{content:[{type:"text",text:`Error: ${b}`}],isError:!0}}}},954:(a,b,c)=>{c.d(b,{D:()=>e,U:()=>f});let d=new Set;function e(a){d.add(a)}function f(){for(let a of d)try{a()}catch(a){console.warn("[DB] Failed to reset module state:",a)}}},9679:(a,b,c)=>{c.d(b,{HL:()=>y,KJ:()=>o,PM:()=>A,PS:()=>n,VT:()=>q,YD:()=>z,getPricing:()=>m,getSettings:()=>j,isCloudEnabled:()=>l,o4:()=>w,ru:()=>v,updateSettings:()=>k,yF:()=>p});var d=c(42910),e=c(39948),f=c(23969),g=c(31714);function h(a){return a&&"object"==typeof a?a:{}}function i(a){return a&&"object"==typeof a?a:{}}async function j(){let a=(0,d.sm)(),b=a.prepare("SELECT key, value FROM key_value WHERE namespace = 'settings'").all(),c={cloudEnabled:!1,stickyRoundRobinLimit:3,requireLogin:!0};for(let a of b){let b=h(a),d="string"==typeof b.key?b.key:null,e="string"==typeof b.value?b.value:null;d&&null!==e&&(c[d]=JSON.parse(e))}return!c.setupComplete&&process.env.INITIAL_PASSWORD&&(c.setupComplete=!0,c.requireLogin=!0,a.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('settings', 'setupComplete', 'true')").run(),a.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('settings', 'requireLogin', 'true')").run()),c}async function k(a){let b=(0,d.sm)(),c=b.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('settings', ?, ?)");return b.transaction(()=>{for(let[b,d]of Object.entries(a))c.run(b,JSON.stringify(d))})(),(0,e.lR)("pre-write"),(0,g.Sc)("settings"),j()}async function l(){return!0===(await j()).cloudEnabled}async function m(){let a=(0,d.sm)(),{getDefaultPricing:b}=await c.e(3699).then(c.bind(c,53699)),e=b(),f=a.prepare("SELECT key, value FROM key_value WHERE namespace = 'pricing_synced'").all(),g={};for(let a of f){let b=h(a),c="string"==typeof b.key?b.key:null,d="string"==typeof b.value?b.value:null;c&&null!==d&&(g[c]=h(JSON.parse(d)))}let i=a.prepare("SELECT key, value FROM key_value WHERE namespace = 'pricing'").all(),j={};for(let a of i){let b=h(a),c="string"==typeof b.key?b.key:null,d="string"==typeof b.value?b.value:null;c&&null!==d&&(j[c]=h(JSON.parse(d)))}let k={};for(let[a,b]of Object.entries(e))k[a]={...h(b)};for(let a of[g,j])for(let[b,c]of Object.entries(a))if(k[b])for(let[a,d]of Object.entries(c))k[b][a]=k[b][a]?{...k[b][a]||{},...h(d)}:d;else k[b]={...c};return k}async function n(a,b){let d=await m();if(d[a]?.[b])return d[a][b];let{PROVIDER_ID_TO_ALIAS:e}=await Promise.resolve().then(c.bind(c,23969)),f=e[a];if(f&&d[f])return d[f][b]||null;let g=a?.replace(/-cn$/,"");return g&&g!==a&&d[g]&&d[g][b]||null}async function o(a){let b=(0,d.sm)(),c=b.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('pricing', ?, ?)"),f=b.prepare("SELECT key, value FROM key_value WHERE namespace = 'pricing'").all(),i={};for(let a of f){let b=h(a),c="string"==typeof b.key?b.key:null,d="string"==typeof b.value?b.value:null;c&&null!==d&&(i[c]=h(JSON.parse(d)))}b.transaction(()=>{for(let[b,d]of Object.entries(a))c.run(b,JSON.stringify({...i[b]||{},...d}))})(),(0,e.lR)("pre-write"),(0,g.Sc)("pricing");let j={};for(let a of b.prepare("SELECT key, value FROM key_value WHERE namespace = 'pricing'").all()){let b=h(a),c="string"==typeof b.key?b.key:null,d="string"==typeof b.value?b.value:null;c&&null!==d&&(j[c]=h(JSON.parse(d)))}return j}async function p(a,b){let c=(0,d.sm)();if(b){let d=c.prepare("SELECT value FROM key_value WHERE namespace = 'pricing' AND key = ?").get(a);if(d){let e=h(d),f=h(JSON.parse("string"==typeof e.value?e.value:"{}"));delete f[b],0===Object.keys(f).length?c.prepare("DELETE FROM key_value WHERE namespace = 'pricing' AND key = ?").run(a):c.prepare("UPDATE key_value SET value = ? WHERE namespace = 'pricing' AND key = ?").run(JSON.stringify(f),a)}}else c.prepare("DELETE FROM key_value WHERE namespace = 'pricing' AND key = ?").run(a);(0,e.lR)("pre-write");let f=c.prepare("SELECT key, value FROM key_value WHERE namespace = 'pricing'").all(),g={};for(let a of f){let b=h(a),c="string"==typeof b.key?b.key:null,d="string"==typeof b.value?b.value:null;c&&null!==d&&(g[c]=JSON.parse(d))}return g}async function q(){return(0,d.sm)().prepare("DELETE FROM key_value WHERE namespace = 'pricing'").run(),(0,e.lR)("pre-write"),{}}let r={global:null,providers:{},combos:{},keys:{}},s=Object.entries(f.PROVIDER_ID_TO_ALIAS).reduce((a,[b,c])=>(c&&(a[c]=b),a[b]=b,a),{});function t(a){return"string"!=typeof a?a:s[a]||a}function u(a){if(!a)return null;if("object"==typeof a){let b=h(a);if(b.type)return b}if("string"!=typeof a)return null;try{let b=new URL(a);return{type:b.protocol.replace(":","")||"http",host:b.hostname,port:b.port||("socks5:"===b.protocol?"1080":"https:"===b.protocol?"443":"8080"),username:b.username?decodeURIComponent(b.username):"",password:b.password?decodeURIComponent(b.password):""}}catch{let b=a.split(":");return{type:"http",host:b[0]||a,port:b[1]||"8080",username:"",password:""}}}async function v(){let a=(0,d.sm)(),b=a.prepare("SELECT key, value FROM key_value WHERE namespace = 'proxyConfig'").all(),c={...r};for(let a of b){let b=h(a),d="string"==typeof b.key?b.key:null,e="string"==typeof b.value?b.value:null;d&&null!==e&&(c[d]=JSON.parse(e))}let e=!1;if(c.global&&"string"==typeof c.global&&(c.global=u(c.global),e=!0),c.providers)for(let[a,b]of Object.entries(c.providers))"string"==typeof b&&(c.providers[a]=u(b),e=!0);if(e){let b=a.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('proxyConfig', ?, ?)");void 0!==c.global&&b.run("global",JSON.stringify(c.global)),c.providers&&b.run("providers",JSON.stringify(c.providers))}return c}async function w(a,b){let c=await v();if("global"===a)return c.global||null;let d=i(c[a+"s"]||c[a]||{});return(b?d[b]:null)||null}async function x(a,b,c){let f=(0,d.sm)(),g=await v();if("global"===a)g.global=c||null,f.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('proxyConfig', 'global', ?)").run(JSON.stringify(g.global));else{let d=a+"s",e=i(g[d]||{});c&&b?e[b]=c:b&&delete e[b],g[d]=e,f.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('proxyConfig', ?, ?)").run(d,JSON.stringify(e))}return(0,e.lR)("pre-write"),g}async function y(a,b){return x(a,b,null)}async function z(a){let b=await v();if(a&&b.keys?.[a])return{proxy:b.keys[a],level:"key",levelId:a};let c=(0,d.sm)(),e=c.prepare("SELECT provider FROM provider_connections WHERE id = ?").get(a);if(e){let a=h(e),d="string"==typeof a.provider?a.provider:null;if(b.combos&&Object.keys(b.combos).length>0)for(let a of c.prepare("SELECT id, data FROM combos").all()){let c=h(a),e="string"==typeof c.id?c.id:null;if(e&&b.combos[e])try{let a="string"==typeof c.data?c.data:null;if(!a)continue;let f=h(JSON.parse(a));if((Array.isArray(f.models)?f.models:[]).some(a=>(function(a){let b=h(a);if("string"==typeof b.provider)return t(b.provider);let c="string"==typeof a?a:"string"==typeof b.model?b.model:null;if(!c)return null;let[d]=c.split("/",1);return d?t(d):null})(a)===d))return{proxy:b.combos[e],level:"combo",levelId:e}}catch{}}if(d&&b.providers?.[d])return{proxy:b.providers[d],level:"provider",levelId:d}}return b.global?{proxy:b.global,level:"global",levelId:null}:{proxy:null,level:"direct",levelId:null}}async function A(a){if(void 0!==a.level)return x("string"==typeof a.level?a.level:"global","string"==typeof a.id?a.id:null,a.proxy||null);let b=(0,d.sm)(),c=await v(),f=b.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('proxyConfig', ?, ?)");return b.transaction(()=>{if(void 0!==a.global){var b;c.global=null===(b=a.global)||"string"==typeof b||b&&"object"==typeof b?b:null,f.run("global",JSON.stringify(c.global))}for(let b of["providers","combos","keys"])if(a[b]){let d={...i(c[b]),...i(a[b])};for(let[a,b]of Object.entries(d))b||delete d[a];c[b]=d,f.run(b,JSON.stringify(d))}})(),(0,e.lR)("pre-write"),c}},13234:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Z:()=>i,x:()=>h});var e=c(2306),f=a([e]);function g(a){if(!Array.isArray(a))return[];let b=a.filter(a=>"string"==typeof a).map(a=>a.trim()).filter(Boolean);return Array.from(new Set(b))}function h(a,b=[]){let c="string"==typeof a?.authInfo?.clientId&&a.authInfo.clientId.trim()||"string"==typeof a?.sessionId&&a.sessionId.trim()||"anonymous",d=g(a?.authInfo?.scopes);if(d.length>0)return{callerId:c,scopes:d,source:"authInfo"};let e=function(a){if(!a||"object"!=typeof a)return[];let b=g(a.scopes);if(b.length>0)return b;let c=a.auth;if(c&&"object"==typeof c){let a=g(c.scopes);if(a.length>0)return a}let d=a.omniroute;if(d&&"object"==typeof d){let a=g(d.scopes);if(a.length>0)return a}return[]}(a?._meta);if(e.length>0)return{callerId:c,scopes:e,source:"meta"};let f=g(b);return f.length>0?{callerId:c,scopes:f,source:"env"}:{callerId:c,scopes:[],source:"none"}}function i(a,b,c){let d=e.Dk[a];if(!d)return{allowed:!1,required:[],provided:Array.from(b),missing:[],reason:"tool_definition_missing"};let f=Array.isArray(d.scopes)?Array.from(d.scopes):[],h=g(b);if(!c||0===f.length)return{allowed:!0,required:f,provided:h,missing:[]};let i=f.filter(a=>!h.some(b=>(function(a,b){if("*"===a||a===b)return!0;if(a.endsWith("*")){let c=a.slice(0,-1);return b.startsWith(c)}return!1})(b,a)));return{allowed:0===i.length,required:f,provided:h,missing:i,reason:i.length>0?"missing_scopes":void 0}}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},13419:(a,b,c)=>{c.d(b,{H:()=>h,J:()=>g});let d=["valid","expiring","expired","refreshing"];function e(a){if("number"==typeof a&&Number.isFinite(a))return a;if("string"==typeof a&&""!==a.trim()){let b=Number(a);if(Number.isFinite(b))return b}return null}function f(a,b,c){return Math.min(c,Math.max(b,a))}function g(a){var b;let c=a&&"object"==typeof a?a:{},g="string"==typeof c.provider?c.provider:"unknown",h="string"==typeof c.name&&c.name.trim()?c.name:g,i="string"==typeof c.connectionId&&c.connectionId.trim()?c.connectionId:"unknown",j=e(c.quotaTotal),k=null!==j&&j>=0?j:null,l=e(c.quotaUsed)??0,m=null!==k?f(l,0,k):Math.max(0,l),n=e(c.percentRemaining);return null===n&&(n=k&&k>0?(k-m)/k*100:100),{name:h,provider:g,connectionId:i,quotaUsed:m,quotaTotal:k,percentRemaining:f(n,0,100),resetAt:"string"==typeof c.resetAt&&c.resetAt.trim()?c.resetAt:null,tokenStatus:"string"==typeof(b=c.tokenStatus)&&d.includes(b)?b:"valid"}}function h(a,b={}){let c=a&&"object"==typeof a?a:{},d=(Array.isArray(c.providers)?c.providers:Array.isArray(a)?a:[]).map(a=>g(a)),e=c.meta&&"object"==typeof c.meta?c.meta:{},f=e.filters&&"object"==typeof e.filters?e.filters:{},i=b.provider??("string"==typeof f.provider&&f.provider.trim()?f.provider:null),j=b.connectionId??("string"==typeof f.connectionId&&f.connectionId.trim()?f.connectionId:null);return{providers:d,meta:{generatedAt:"string"==typeof e.generatedAt&&e.generatedAt.trim()?e.generatedAt:new Date().toISOString(),filters:{provider:i||null,connectionId:j||null},totalProviders:d.length}}}},23969:(a,b,c)=>{c.d(b,{PROVIDER_ID_TO_ALIAS:()=>f,ux:()=>g,vq:()=>e});var d=c(83596);let e=(0,d.oD)(),f=(0,d.Qv)();function g(a,b){let c=e[a];if(!c)return null;let d=c.find(a=>a.id===b);return d?.targetFormat||null}},25755:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{c:()=>B});var e=c(10610),f=c(92827),g=c(2306),h=c(43620),i=c(64926),j=c(13234),k=c(647),l=c(13419),m=a([e,f,g,j]);[e,f,g,j]=m.then?(await m)():m;let D=process.env.OMNIROUTE_BASE_URL||"http://localhost:20128",E=process.env.OMNIROUTE_API_KEY||"",F="true"===process.env.OMNIROUTE_MCP_ENFORCE_SCOPES,G=new Set((process.env.OMNIROUTE_MCP_SCOPES||"").split(",").map(a=>a.trim()).filter(Boolean));function n(a){return a&&"object"==typeof a&&!Array.isArray(a)?a:{}}function o(a){return Array.isArray(a)?a:[]}function p(a,b=""){return"string"==typeof a?a:b}function q(a,b=0){return"number"==typeof a&&Number.isFinite(a)?a:b}async function r(a,b={}){let c=`${D}${a}`,d={"Content-Type":"application/json",...E?{Authorization:`Bearer ${E}`}:{},...b.headers||{}},e=await fetch(c,{...b,headers:d,signal:AbortSignal.timeout(1e4)});if(!e.ok){let a=await e.text().catch(()=>"Unknown error");throw Error(`OmniRoute API error [${e.status}]: ${a}`)}return e.json()}function s(a,b){return async(c,d)=>{let e=(0,j.x)(d,Array.from(G)),f=(0,j.Z)(a,e.scopes,F);if(!f.allowed){let b=f.missing.length>0?f.missing.join(", "):"unavailable",d=f.reason||"scope_check_failed",g=`Insufficient MCP scopes for ${a}. Missing: ${b}. Caller=${e.callerId}, source=${e.source}.`,h=c&&"object"==typeof c?n(c):{rawArgs:c};return await (0,i.Bv)(a,{...h,_scopeCheck:{callerId:e.callerId,source:e.source,required:f.required,provided:f.provided,missing:f.missing}},null,0,!1,`scope_denied:${d}`),{content:[{type:"text",text:`Error: ${g}`}],isError:!0}}return b(c,d)}}async function t(){let a=Date.now();try{let[b,c,d]=await Promise.allSettled([r("/api/monitoring/health"),r("/api/resilience"),r("/api/rate-limits")]),e="fulfilled"===b.status?n(b.value):{},f="fulfilled"===c.status?n(c.value):{},g="fulfilled"===d.status?n(d.value):{},h=n(e.memoryUsage),j=n(e.cacheStats),k=o(f.circuitBreakers),l=o(g.limits),m={uptime:p(e.uptime,"unknown"),version:p(e.version,"unknown"),memoryUsage:{heapUsed:q(h.heapUsed,0),heapTotal:q(h.heapTotal,0)},circuitBreakers:k,rateLimits:l,cacheStats:Object.keys(j).length>0?{hits:q(j.hits,0),misses:q(j.misses,0),hitRate:q(j.hitRate,0)}:void 0};return await (0,i.Bv)("omniroute_get_health",{},m,Date.now()-a,!0),{content:[{type:"text",text:JSON.stringify(m,null,2)}]}}catch(c){let b=c instanceof Error?c.message:String(c);return await (0,i.Bv)("omniroute_get_health",{},null,Date.now()-a,!1,b),{content:[{type:"text",text:`Error: ${b}`}],isError:!0}}}async function u(a){let b=Date.now();try{let c=await r("/api/combos"),d=n(c),e=Array.isArray(d.combos)?d.combos:Array.isArray(c)?c:[],f={};a.includeMetrics&&(f=n(await r("/api/combos/metrics").catch(()=>({}))));let g={combos:o(e).map(b=>{let c=n(b),d=n(c.data),e=p(c.id,""),g=Array.isArray(c.models)&&c.models.length>0?c.models:d.models;return{id:e,name:p(c.name,e||"unnamed"),models:o(g).map((a,b)=>{let c=n(a);return{provider:p(c.provider,"unknown"),model:p(c.model,"unknown"),priority:q(c.priority,b+1)}}),strategy:p(c.strategy,p(d.strategy,"priority")),enabled:!1!==c.enabled,...a.includeMetrics?{metrics:f[e]??null}:{}}})};return await (0,i.Bv)("omniroute_list_combos",a,g,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(g,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_list_combos",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function v(a){let b=Date.now();try{let c=await r(`/api/combos/metrics?comboId=${encodeURIComponent(a.comboId)}`);return await (0,i.Bv)("omniroute_get_combo_metrics",a,c,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(c,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_get_combo_metrics",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function w(a){let b=Date.now();try{let c=await r(`/api/combos/${encodeURIComponent(a.comboId)}`,{method:"PUT",body:JSON.stringify({isActive:a.active})});return await (0,i.Bv)("omniroute_switch_combo",a,c,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(c,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_switch_combo",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function x(a){let b=Date.now();try{let c="/api/usage/quota";a.connectionId?c+=`?connectionId=${encodeURIComponent(a.connectionId)}`:a.provider&&(c+=`?provider=${encodeURIComponent(a.provider)}`);let d=(0,l.H)(await r(c),{provider:a.provider||null,connectionId:a.connectionId||null});return await (0,i.Bv)("omniroute_check_quota",a,d,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(d,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_check_quota",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function y(a){let b=Date.now();try{let c={model:a.model,messages:a.messages,stream:!1};a.combo&&(c["x-combo"]=a.combo);let d=await r("/v1/chat/completions",{method:"POST",body:JSON.stringify(c)}),e=o(d.choices),f=n(e[0]),g=n(f.message),h=n(d.usage),j={response:{content:p(g.content,""),model:p(d.model,a.model),tokens:{prompt:q(h.prompt_tokens,0),completion:q(h.completion_tokens,0)}},routing:{provider:p(d.provider,"unknown"),combo:d.combo??null,fallbacksTriggered:q(d.fallbacksTriggered,0),cost:q(d.cost,0),latencyMs:Date.now()-b,routingExplanation:p(d.routingExplanation,"Request routed through primary provider")}};return await (0,i.Bv)("omniroute_route_request",{model:a.model,messageCount:a.messages.length},j.routing,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(j,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_route_request",{model:a.model},null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function z(a){let b=Date.now();try{let c=a.period||"session",d={session:"1d",day:"1d",week:"7d",month:"30d"}[c]||"30d",e=n(await r(`/api/usage/analytics?range=${encodeURIComponent(d)}`)),f=n(e.tokenCount),g=n(e.budget),h={period:c,totalCost:q(e.totalCost,0),requestCount:q(e.requestCount,0),tokenCount:{prompt:q(f.prompt,0),completion:q(f.completion,0)},byProvider:o(e.byProvider),byModel:o(e.byModel),budget:{limit:g.limit??null,remaining:g.remaining??null}};return await (0,i.Bv)("omniroute_cost_report",a,h,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(h,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_cost_report",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function A(a){let b=Date.now();try{let c="/v1/models",d=new URLSearchParams;a.provider&&d.set("provider",a.provider),a.capability&&d.set("capability",a.capability),d.toString()&&(c+=`?${d.toString()}`);let e=n(await r(c)),f={models:o(e.data).map(a=>{let b=n(a);return{id:p(b.id,""),provider:p(b.owned_by,p(b.provider,"unknown")),capabilities:function(a,b=[]){let c=o(a).filter(a=>"string"==typeof a);return c.length>0?c:b}(b.capabilities,["chat"]),status:p(b.status,"available"),pricing:b.pricing}})};return await (0,i.Bv)("omniroute_list_models_catalog",a,{modelCount:f.models.length},Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(f,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_list_models_catalog",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}function B(){let a=new e._({name:"omniroute",version:process.env.npm_package_version||"1.8.1"});return a.registerTool("omniroute_get_health",{description:"Returns OmniRoute health status including uptime, memory, circuit breakers, rate limits, and cache stats",inputSchema:g.nu},s("omniroute_get_health",async a=>(g.nu.parse(a??{}),t()))),a.registerTool("omniroute_list_combos",{description:"Lists all configured combos (model chains) with strategies and optional metrics",inputSchema:g.ME},s("omniroute_list_combos",a=>u(g.ME.parse(a)))),a.registerTool("omniroute_get_combo_metrics",{description:"Returns detailed performance metrics for a specific combo",inputSchema:g.Gs},s("omniroute_get_combo_metrics",a=>v(g.Gs.parse(a)))),a.registerTool("omniroute_switch_combo",{description:"Activates or deactivates a combo for routing",inputSchema:g.B1},s("omniroute_switch_combo",a=>w(g.B1.parse(a)))),a.registerTool("omniroute_check_quota",{description:"Checks remaining API quota for one or all providers",inputSchema:g.Fp},s("omniroute_check_quota",a=>x(g.Fp.parse(a)))),a.registerTool("omniroute_route_request",{description:"Sends a chat completion request through OmniRoute intelligent routing",inputSchema:g.fL},s("omniroute_route_request",a=>y(g.fL.parse(a)))),a.registerTool("omniroute_cost_report",{description:"Generates a cost report for the specified period",inputSchema:g.c},s("omniroute_cost_report",a=>z(g.c.parse(a)))),a.registerTool("omniroute_list_models_catalog",{description:"Lists all available AI models across providers with capabilities and pricing",inputSchema:g._v},s("omniroute_list_models_catalog",a=>A(g._v.parse(a)))),a.registerTool("omniroute_simulate_route",{description:"Simulates the routing path a request would take without executing it (dry-run)",inputSchema:g.gl},s("omniroute_simulate_route",a=>(0,k.yL)(g.gl.parse(a)))),a.registerTool("omniroute_set_budget_guard",{description:"Sets a session budget limit with configurable action when exceeded (degrade/block/alert)",inputSchema:g.b9},s("omniroute_set_budget_guard",a=>(0,k.nX)(g.b9.parse(a)))),a.registerTool("omniroute_set_resilience_profile",{description:"Applies a resilience profile controlling circuit breakers, retries, timeouts, and fallback depth",inputSchema:g.dE},s("omniroute_set_resilience_profile",a=>(0,k.DZ)(g.dE.parse(a)))),a.registerTool("omniroute_test_combo",{description:"Tests each provider in a combo with a real prompt, reporting latency, cost, and success per provider",inputSchema:g.n0},s("omniroute_test_combo",a=>(0,k.nq)(g.n0.parse(a)))),a.registerTool("omniroute_get_provider_metrics",{description:"Returns detailed metrics for a specific provider including latency percentiles and circuit breaker state",inputSchema:g.xs},s("omniroute_get_provider_metrics",a=>(0,k.zl)(g.xs.parse(a)))),a.registerTool("omniroute_best_combo_for_task",{description:"Recommends the best combo for a task type based on provider fitness and constraints",inputSchema:g.h0},s("omniroute_best_combo_for_task",a=>(0,k.Bm)(g.h0.parse(a)))),a.registerTool("omniroute_explain_route",{description:"Explains why a request was routed to a specific provider, showing scoring factors and fallbacks",inputSchema:g.t7},s("omniroute_explain_route",a=>(0,k.h$)(g.t7.parse(a)))),a.registerTool("omniroute_get_session_snapshot",{description:"Returns a full snapshot of the current working session: cost, tokens, top models, errors, budget status",inputSchema:g.ne},s("omniroute_get_session_snapshot",async a=>(g.ne.parse(a??{}),(0,k.ne)()))),a.registerTool("omniroute_sync_pricing",{description:"Syncs pricing data from external sources (LiteLLM) into OmniRoute without overwriting user-set prices",inputSchema:g.WO},s("omniroute_sync_pricing",a=>(0,k.wq)(g.WO.parse(a)))),a}async function C(){let a=B(),b=new f.S,c=process.env.npm_package_version||"1.8.1",d=(0,h.rs)({version:c,scopesEnforced:F,allowedScopes:Array.from(G),toolCount:g.nS.length}),e=()=>{d()};process.once("exit",e),process.once("SIGINT",e),process.once("SIGTERM",e),console.error("[MCP] OmniRoute MCP Server starting (stdio transport)...");try{await a.connect(b),console.error("[MCP] OmniRoute MCP Server connected and ready.")}finally{e(),process.off("exit",e),process.off("SIGINT",e),process.off("SIGTERM",e)}}process.argv[1]&&"file:///home/runner/work/OmniRoute/OmniRoute/open-sse/mcp-server/server.ts".endsWith(process.argv[1].replace(/\\/g,"/"))&&C().catch(a=>{console.error("[MCP] Fatal error:",a),process.exit(1)}),d()}catch(a){d(a)}})},31714:(a,b,c)=>{c.d(b,{Sc:()=>h});class d{constructor(a){this.cache=new Map,this.ttlMs=a}get(a){let b=this.cache.get(a);if(b)return Date.now()>b.expiresAt?void this.cache.delete(a):b.value}set(a,b){this.cache.set(a,{value:b,expiresAt:Date.now()+this.ttlMs})}invalidate(a){a?this.cache.delete(a):this.cache.clear()}}let e=new d(5e3),f=new d(3e4),g=new d(5e3);function h(a){a&&"settings"!==a||e.invalidate(),a&&"pricing"!==a||f.invalidate(),a&&"connections"!==a||g.invalidate()}},39948:(a,b,c)=>{c.d(b,{Dp:()=>o,eF:()=>n,lR:()=>m});var d=c(87550),e=c.n(d),f=c(76760),g=c.n(f),h=c(73024),i=c.n(h),j=c(42910),k=c(954);let l=0;function m(a="auto"){try{if(j.I8||j.m1||!j.oh||!i().existsSync(j.oh))return null;let b=i().statSync(j.oh);if(b.size<4096)return console.warn(`[DB] Backup SKIPPED — DB too small (${b.size}B)`),null;let c=Date.now();if("manual"!==a&&"pre-restore"!==a&&c-l<36e5)return null;l=c;let d=j.NJ||g().join(j.nJ,"db_backups");i().existsSync(d)||i().mkdirSync(d,{recursive:!0});let e=i().readdirSync(d).filter(a=>a.startsWith("db_")&&a.endsWith(".sqlite")).sort();if(e.length>0){let a=e[e.length-1],c=i().statSync(g().join(d,a));if(c.size>4096&&b.size<.5*c.size)return console.warn(`[DB] Backup SKIPPED — DB shrank from ${c.size}B to ${b.size}B`),null}let f=new Date().toISOString().replace(/[:.]/g,"-"),h=g().join(d,`db_${f}_${a}.sqlite`);(0,j.sm)().backup(h).then(()=>{console.log(`[DB] Backup created: ${h} (${b.size} bytes)`)}).catch(a=>{let b=a instanceof Error?a.message:String(a);console.error("[DB] Backup failed:",b)});let k=i().readdirSync(d).filter(a=>a.startsWith("db_")&&a.endsWith(".sqlite")).sort();for(;k.length>20;){let a=0,b=1/0;for(let c=0;c<k.length-1;c++)try{let e=i().statSync(g().join(d,k[c]));e.size<b&&(b=e.size,a=c)}catch{a=c;break}try{i().unlinkSync(g().join(d,k[a]))}catch{}k.splice(a,1)}return{filename:g().basename(h),size:b.size}}catch(a){return console.error("[DB] Backup failed:",a instanceof Error?a.message:String(a)),null}}async function n(){let a=j.NJ||g().join(j.nJ,"db_backups");try{if(!i().existsSync(a))return[];return i().readdirSync(a).filter(a=>a.startsWith("db_")&&a.endsWith(".sqlite")).sort().reverse().map(b=>{let c=g().join(a,b),d=i().statSync(c),f=b.match(/^db_(.+?)_([^.]+)\.sqlite$/),h=f?f[2]:"unknown",j=0;try{let a=new(e())(c,{readonly:!0}),b=a.prepare("SELECT COUNT(*) as cnt FROM provider_connections").get();j=b?.cnt||0,a.close()}catch{}return{id:b,filename:b,createdAt:d.mtime.toISOString(),size:d.size,reason:h,connectionCount:j}})}catch{return[]}}async function o(a){let b=j.NJ||g().join(j.nJ,"db_backups");if(!a.startsWith("db_")||!a.endsWith(".sqlite")||a.includes(g().sep)||a.includes("/"))throw Error("Invalid backup ID");let c=g().resolve(b,a);if(!c.startsWith(g().resolve(b)+g().sep)&&c!==g().resolve(b))throw Error("Invalid backup ID: path traversal detected");if(!i().existsSync(c))throw Error(`Backup not found: ${a}`);try{let a=new(e())(c,{readonly:!0}),b=a.pragma("integrity_check");if(a.close(),b[0]?.integrity_check!=="ok")throw Error("Backup integrity check failed")}catch(b){if(b instanceof Error&&"Backup integrity check failed"===b.message)throw b;let a=b instanceof Error?b.message:String(b);throw Error(`Backup file is corrupt: ${a}`)}l=0,m("pre-restore"),(0,j.jX)(),(0,k.U)();let d=j.oh;if(!d)throw Error("SQLITE_FILE is unavailable in local backup restore");for(let a of[d,`${d}-wal`,`${d}-shm`,`${d}-journal`])a&&i().existsSync(a)&&i().unlinkSync(a);i().copyFileSync(c,d);let f=(0,j.sm)(),h=f.prepare("SELECT COUNT(*) as cnt FROM provider_connections").get()?.cnt||0,n=f.prepare("SELECT COUNT(*) as cnt FROM provider_nodes").get()?.cnt||0,o=f.prepare("SELECT COUNT(*) as cnt FROM combos").get()?.cnt||0,p=f.prepare("SELECT COUNT(*) as cnt FROM api_keys").get()?.cnt||0;return console.log(`[DB] Restored backup: ${a} (${h} connections)`),{restored:!0,backupId:a,connectionCount:h,nodeCount:n,comboCount:o,apiKeyCount:p}}},43620:(a,b,c)=>{c.d(b,{Im:()=>n,c7:()=>i,h6:()=>l,jW:()=>m,rs:()=>k});var d=c(73024),e=c(48161),f=c(76760);let g="runtime";function h(){let a=process.env.DATA_DIR;return"string"==typeof a&&a.trim().length>0?a.trim():(0,f.join)((0,e.homedir)(),".omniroute")}function i(){return(0,f.join)(h(),g,"mcp-heartbeat.json")}async function j(a){let b=i(),c=(0,f.join)(h(),g);await d.promises.mkdir(c,{recursive:!0}),await d.promises.writeFile(b,JSON.stringify(a,null,2),"utf-8")}function k(a){let b=new Date().toISOString(),c=null,d=!1,e="number"==typeof a.intervalMs&&a.intervalMs>0?a.intervalMs:5e3,f=async()=>{if(d)return;let c={pid:process.pid,startedAt:b,lastHeartbeatAt:new Date().toISOString(),version:a.version,transport:"stdio",scopesEnforced:a.scopesEnforced,allowedScopes:[...a.allowedScopes],toolCount:a.toolCount};try{await j(c)}catch(a){console.error("[MCP Heartbeat] Failed to write heartbeat:",a instanceof Error?a.message:String(a))}};return f(),c=setInterval(()=>{f()},e),()=>{d||(d=!0,c&&(clearInterval(c),c=null),f())}}async function l(){let a=i();try{let b=await d.promises.readFile(a,"utf-8"),c=JSON.parse(b);if(!c||"object"!=typeof c||"number"!=typeof c.pid||"string"!=typeof c.startedAt||"string"!=typeof c.lastHeartbeatAt||"string"!=typeof c.version||"stdio"!==c.transport||"boolean"!=typeof c.scopesEnforced||!Array.isArray(c.allowedScopes)||"number"!=typeof c.toolCount)return null;let e=c.allowedScopes.filter(a=>"string"==typeof a);return{pid:c.pid,startedAt:c.startedAt,lastHeartbeatAt:c.lastHeartbeatAt,version:c.version,transport:"stdio",scopesEnforced:c.scopesEnforced,allowedScopes:e,toolCount:c.toolCount}}catch{return null}}function m(a){if(!Number.isFinite(a)||a<=0)return!1;try{return process.kill(a,0),!0}catch{return!1}}function n(a,b){if(!a)return!1;let c="number"==typeof b?.staleAfterMs&&b.staleAfterMs>0?b.staleAfterMs:15e3,d=Date.now()-new Date(a.lastHeartbeatAt).getTime();return!!Number.isFinite(d)&&!(d>c)&&(b?.requireLivePid===!1||m(a.pid))}},45419:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{V6:()=>j,e5:()=>k,lJ:()=>l});var e=c(77598),f=c(25755),g=c(60021),h=a([f,g]);[f,g]=h.then?(await h)():h;let m=null,n=null,o=null,p=null;function i(a){if(m&&n&&p===a)return{server:m,transport:n};if(n)try{n.close()}catch{}return m=(0,f.c)(),n=new g.a({sessionIdGenerator:()=>(0,e.randomUUID)()}),p=a,o=Date.now(),m.connect(n),console.log(`[MCP] HTTP transport started (${a})`),{server:m,transport:n}}async function j(a){let{transport:b}=i("streamable-http");try{return await b.handleRequest(a)}catch(a){return console.error("[MCP] Streamable HTTP error:",a),new Response(JSON.stringify({error:"MCP transport error"}),{status:500,headers:{"Content-Type":"application/json"}})}}async function k(a){let{transport:b}=i("sse");try{return await b.handleRequest(a)}catch(a){return console.error("[MCP] SSE error:",a),new Response(JSON.stringify({error:"MCP SSE transport error"}),{status:500,headers:{"Content-Type":"application/json"}})}}function l(){return{online:null!==n&&null!==p,transport:p,startedAt:o,uptime:o?`${Math.floor((Date.now()-o)/1e3)}s`:null}}d()}catch(a){d(a)}})},64926:(a,b,c)=>{async function d(a){let b=JSON.stringify(a),c=new TextEncoder;return Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256",c.encode(b)))).map(a=>a.toString(16).padStart(2,"0")).join("")}function e(a){return"string"==typeof a?a:null}function f(a,b){let c=i(a,b);return Number.isFinite(c)?Math.max(0,Math.floor(c)):b}function g(a){return{id:f(a.id,0),toolName:j(a.tool_name),inputHash:j(a.input_hash),outputSummary:j(a.output_summary),durationMs:i(a.duration_ms,0),apiKeyId:e(a.api_key_id),success:function(a,b=!1){return"boolean"==typeof a?a:1===a||"1"===a||0!==a&&"0"!==a&&b}(a.success,!1),errorCode:e(a.error_code),createdAt:j(a.created_at)}}c.d(b,{JY:()=>n,Bv:()=>l,Gj:()=>m});let h=null;function i(a,b=0){let c="number"==typeof a?a:"string"==typeof a&&a.trim().length>0?Number(a):NaN;return Number.isFinite(c)?c:b}function j(a){return"string"==typeof a?a:""}async function k(){if(h)return h;try{let{homedir:a}=await Promise.resolve().then(c.t.bind(c,48161,23)),{join:b}=await Promise.resolve().then(c.t.bind(c,76760,23)),{existsSync:d}=await Promise.resolve().then(c.t.bind(c,73024,23)),e=process.env.DATA_DIR?b(process.env.DATA_DIR,"storage.sqlite"):b(a(),".omniroute","storage.sqlite");if(!d(e))return console.error(`[MCP Audit] Database not found at ${e} — audit logging disabled`),null;return h=new(await Promise.resolve().then(c.t.bind(c,87550,23))).default(e)}catch(a){return console.error("[MCP Audit] Failed to connect to database:",a instanceof Error?a.message:String(a)),null}}async function l(a,b,c,e,f,g){try{let h=await k();if(!h)return;let i=await d(b),j=function(a,b=200){if(null==a)return"(null)";let c="string"==typeof a?a:JSON.stringify(a);return c.length<=b?c:c.slice(0,b)+"…"}(c),l=process.env.OMNIROUTE_API_KEY_ID||null;h.prepare(`INSERT INTO mcp_tool_audit (tool_name, input_hash, output_summary, duration_ms, api_key_id, success, error_code)
1
+ "use strict";exports.id=242,exports.ids=[242,9679],exports.modules={647:(a,b,c)=>{c.d(b,{Bm:()=>x,DZ:()=>u,h$:()=>y,nX:()=>t,ne:()=>A,nq:()=>v,wq:()=>z,yL:()=>s,zl:()=>w});var d=c(64926),e=c(13419);let f=process.env.OMNIROUTE_BASE_URL||"http://localhost:20128",g=process.env.OMNIROUTE_API_KEY||"";async function h(a,b={}){let c=`${f}${a}`,d={"Content-Type":"application/json",...g?{Authorization:`Bearer ${g}`}:{},...b.headers||{}},e=await fetch(c,{...b,headers:d,signal:AbortSignal.timeout(3e4)});if(!e.ok){let a=await e.text().catch(()=>"Unknown error");throw Error(`API [${e.status}]: ${a}`)}return e.json()}function i(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function j(a){return i(a)?a:{}}function k(a){return Array.isArray(a)?a.filter(i):[]}function l(a,b=""){return"string"==typeof a?a:b}function m(a,b=0){let c="number"==typeof a?a:"string"==typeof a&&a.trim().length>0?Number(a):NaN;return Number.isFinite(c)?c:b}function n(a){let b=k(a.models),c=k(j(a.data).models);return(b.length>0?b:c).map(a=>({provider:l(a.provider,"unknown"),model:l(a.model,""),inputCostPer1M:m(a.inputCostPer1M,3)}))}function o(a){if(Array.isArray(a))return a.filter(i);let b=j(a);return Array.isArray(b.combos)?b.combos.filter(i):[]}let p=null,q={aggressive:{profiles:{oauth:{transientCooldown:3e3,rateLimitCooldown:3e4,maxBackoffLevel:4,circuitBreakerThreshold:2,circuitBreakerReset:3e4},apikey:{transientCooldown:2e3,rateLimitCooldown:0,maxBackoffLevel:3,circuitBreakerThreshold:3,circuitBreakerReset:15e3}},defaults:{requestsPerMinute:180,minTimeBetweenRequests:100,concurrentRequests:16}},balanced:{profiles:{oauth:{transientCooldown:5e3,rateLimitCooldown:6e4,maxBackoffLevel:8,circuitBreakerThreshold:3,circuitBreakerReset:6e4},apikey:{transientCooldown:3e3,rateLimitCooldown:0,maxBackoffLevel:5,circuitBreakerThreshold:5,circuitBreakerReset:3e4}},defaults:{requestsPerMinute:100,minTimeBetweenRequests:200,concurrentRequests:10}},conservative:{profiles:{oauth:{transientCooldown:8e3,rateLimitCooldown:12e4,maxBackoffLevel:10,circuitBreakerThreshold:8,circuitBreakerReset:12e4},apikey:{transientCooldown:5e3,rateLimitCooldown:3e4,maxBackoffLevel:8,circuitBreakerThreshold:8,circuitBreakerReset:6e4}},defaults:{requestsPerMinute:60,minTimeBetweenRequests:350,concurrentRequests:6}}},r={coding:{preferred:["claude","deepseek","codex"],traits:["fast","code-optimized"]},review:{preferred:["claude","gemini","openai"],traits:["analytical","thorough"]},planning:{preferred:["gemini","claude","openai"],traits:["reasoning","structured"]},analysis:{preferred:["gemini","claude"],traits:["deep-reasoning","large-context"]},debugging:{preferred:["claude","deepseek","codex"],traits:["code-aware","fast"]},documentation:{preferred:["gemini","claude","openai"],traits:["clear","structured"]}};async function s(a){let b=Date.now();try{let[c,f,g]=await Promise.allSettled([h("/api/combos"),h("/api/monitoring/health"),h("/api/usage/quota")]),i="fulfilled"===c.status?o(c.value):[],m="fulfilled"===f.status?j(f.value):{},p="fulfilled"===g.status?(0,e.H)(g.value):(0,e.H)({}),q=a.combo?i.find(b=>l(b.id)===a.combo||l(b.name)===a.combo):i.find(a=>!1!==a.enabled);if(!q)return{content:[{type:"text",text:JSON.stringify({error:"No matching combo found"})}],isError:!0};let r=n(q),s=k(m.circuitBreakers),t=p.providers,u=r.map((b,c)=>{let d=s.find(a=>l(a.provider)===b.provider),e=t.find(a=>a.provider===b.provider),f=a.promptTokenEstimate/1e6*b.inputCostPer1M;return{provider:b.provider,model:b.model||a.model,probability:0===c?.85:.15/Math.max(r.length-1,1),estimatedCost:Math.round(1e4*f)/1e4,healthStatus:l(d?.state,"CLOSED"),quotaAvailable:e?.percentRemaining??100}}),v=u.map(a=>a.estimatedCost),w={simulatedPath:u,fallbackTree:{primary:u[0]?.provider||"unknown",fallbacks:u.slice(1).map(a=>a.provider),worstCaseCost:Math.max(...v,0),bestCaseCost:Math.min(...v,0)}};return await (0,d.Bv)("omniroute_simulate_route",a,w,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(w,null,2)}]}}catch(e){let c=e instanceof Error?e.message:String(e);return await (0,d.Bv)("omniroute_simulate_route",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function t(a){let b=Date.now();try{let c=0;try{let a=j(await h("/api/usage/analytics?period=session"));c=m(a.totalCost,0)}catch{}p={sessionId:`budget_${Date.now()}`,maxCost:a.maxCost,action:a.action,degradeToTier:a.degradeToTier,spent:c,createdAt:new Date().toISOString()};let e=Math.max(0,a.maxCost-c),f={sessionId:p.sessionId,budgetTotal:a.maxCost,budgetSpent:Math.round(1e4*c)/1e4,budgetRemaining:Math.round(1e4*e)/1e4,action:a.action,status:e<=0?"exceeded":e<.2*a.maxCost?"warning":"active"};return await (0,d.Bv)("omniroute_set_budget_guard",{maxCost:a.maxCost,action:a.action},f,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(f,null,2)}]}}catch(e){let c=e instanceof Error?e.message:String(e);return await (0,d.Bv)("omniroute_set_budget_guard",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function u(a){let b=Date.now();try{let c=q[a.profile];if(!c)return{content:[{type:"text",text:`Error: Invalid profile "${a.profile}"`}],isError:!0};await h("/api/resilience",{method:"PATCH",body:JSON.stringify({profiles:c.profiles,defaults:c.defaults})});let e={applied:!0,profile:a.profile,settings:c};return await (0,d.Bv)("omniroute_set_resilience_profile",a,e,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(e,null,2)}]}}catch(e){let c=e instanceof Error?e.message:String(e);return await (0,d.Bv)("omniroute_set_resilience_profile",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function v(a){let b=Date.now();try{let c=o(await h("/api/combos")).find(b=>l(b.id)===a.comboId||l(b.name)===a.comboId);if(!c)return{content:[{type:"text",text:JSON.stringify({error:`Combo "${a.comboId}" not found`})}],isError:!0};let e=n(c),f=(a.testPrompt||"Say hello").slice(0,200),g=(await Promise.allSettled(e.map(async a=>{let b=Date.now();try{let c=j(await h("/v1/chat/completions",{method:"POST",body:JSON.stringify({model:a.model||"auto",messages:[{role:"user",content:f}],max_tokens:50,stream:!1,"x-provider":a.provider})})),d=j(c.usage);return{provider:a.provider,model:a.model||l(c.model,"unknown"),success:!0,latencyMs:Date.now()-b,cost:m(c.cost,0),tokenCount:m(d.prompt_tokens,0)+m(d.completion_tokens,0)}}catch(c){return{provider:a.provider,model:a.model||"unknown",success:!1,latencyMs:Date.now()-b,cost:0,tokenCount:0,error:c instanceof Error?c.message:String(c)}}}))).map(a=>"fulfilled"===a.status?a.value:{provider:"unknown",model:"unknown",success:!1,latencyMs:0,cost:0,tokenCount:0,error:"Promise rejected"}),i=g.filter(a=>a.success),k=i.sort((a,b)=>a.latencyMs-b.latencyMs)[0],p=i.sort((a,b)=>a.cost-b.cost)[0],q={results:g,summary:{totalProviders:g.length,successful:i.length,fastestProvider:k?.provider||"none",cheapestProvider:p?.provider||"none"}};return await (0,d.Bv)("omniroute_test_combo",{comboId:a.comboId},q.summary,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(q,null,2)}]}}catch(e){let c=e instanceof Error?e.message:String(e);return await (0,d.Bv)("omniroute_test_combo",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function w(a){let b=Date.now();try{let[c,f,g]=await Promise.allSettled([h("/api/monitoring/health"),h(`/api/usage/quota?provider=${encodeURIComponent(a.provider)}`),h(`/api/usage/analytics?period=session&provider=${encodeURIComponent(a.provider)}`)]),i="fulfilled"===c.status?j(c.value):{},n="fulfilled"===f.status?(0,e.H)(f.value,{provider:a.provider}):(0,e.H)({}),o="fulfilled"===g.status?j(g.value):{},p=k(i.circuitBreakers).find(b=>l(b.provider)===a.provider),q=n.providers.find(b=>b.provider===a.provider)||null,r={provider:a.provider,successRate:m(o.successRate,1),requestCount:m(o.requestCount,0),avgLatencyMs:m(o.avgLatencyMs,0),p50LatencyMs:m(o.p50LatencyMs,0),p95LatencyMs:m(o.p95LatencyMs,0),p99LatencyMs:m(o.p99LatencyMs,0),errorRate:m(o.errorRate,0),lastError:l(o.lastError)||null,circuitBreakerState:l(p?.state,"CLOSED"),quotaInfo:q?{used:q.quotaUsed,total:q.quotaTotal,resetAt:q.resetAt}:{used:0,total:null,resetAt:null}};return await (0,d.Bv)("omniroute_get_provider_metrics",a,r,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(r,null,2)}]}}catch(e){let c=e instanceof Error?e.message:String(e);return await (0,d.Bv)("omniroute_get_provider_metrics",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function x(a){let b=Date.now();try{let c=r[a.taskType]||r.coding,e=o(await h("/api/combos")).filter(a=>!1!==a.enabled);if(0===e.length)return{content:[{type:"text",text:JSON.stringify({error:"No enabled combos available"})}],isError:!0};let f=e.map(a=>{let b=n(a),d=0;for(let a of b){let b=c.preferred.indexOf(a.provider);b>=0&&(d+=(c.preferred.length-b)*10)}let e=l(a.name).toLowerCase();for(let a of c.traits)e.includes(a)&&(d+=5);let f=e.includes("free")||b.every(a=>a.provider.toLowerCase().includes("free"));return{combo:a,score:d,isFree:f}});f.sort((a,b)=>b.score-a.score);let g=f[0],i=f.slice(1,4).map(a=>({id:a.combo.id,name:a.combo.name,tradeoff:a.isFree?"free but may have limits":a.score<.5*g.score?"cheaper but slower":"similar quality, different providers"})),j=f.find(a=>a.isFree&&a!==g),k={recommendedCombo:{id:g.combo.id,name:g.combo.name,reason:`Best match for "${a.taskType}": preferred providers (${c.preferred.slice(0,3).join(", ")})`},alternatives:i,freeAlternative:j?{id:j.combo.id,name:j.combo.name}:null};return await (0,d.Bv)("omniroute_best_combo_for_task",a,k.recommendedCombo,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(k,null,2)}]}}catch(e){let c=e instanceof Error?e.message:String(e);return await (0,d.Bv)("omniroute_best_combo_for_task",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function y(a){let b=Date.now();try{let c=null;try{c=j(await h(`/api/routing/decisions/${encodeURIComponent(a.requestId)}`))}catch{}let e=c?{requestId:a.requestId,decision:{comboUsed:c.comboUsed||"default",providerSelected:c.providerSelected||"unknown",modelUsed:c.modelUsed||"unknown",score:c.score||0,factors:c.factors||[{name:"health",value:1,weight:.3,contribution:.3},{name:"quota",value:1,weight:.25,contribution:.25},{name:"cost",value:.8,weight:.2,contribution:.16},{name:"latency",value:.9,weight:.15,contribution:.135},{name:"task_fit",value:.7,weight:.1,contribution:.07}],fallbacksTriggered:c.fallbacksTriggered||[],costActual:c.costActual||0,latencyActual:c.latencyActual||0}}:{requestId:a.requestId,decision:{comboUsed:"unknown",providerSelected:"unknown",modelUsed:"unknown",score:0,factors:[],fallbacksTriggered:[],costActual:0,latencyActual:0},note:"Routing decision not found. The /api/routing/decisions endpoint may not be implemented yet, or the requestId is invalid."};return await (0,d.Bv)("omniroute_explain_route",a,{requestId:a.requestId},Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(e,null,2)}]}}catch(e){let c=e instanceof Error?e.message:String(e);return await (0,d.Bv)("omniroute_explain_route",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function z(a){let b=Date.now();try{let c=j(await h("/api/pricing/sync",{method:"POST",body:JSON.stringify({sources:a.sources,dryRun:a.dryRun??!1})}));return await (0,d.Bv)("omniroute_sync_pricing",a,c,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(c,null,2)}]}}catch(e){let c=e instanceof Error?e.message:String(e);return await (0,d.Bv)("omniroute_sync_pricing",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function A(){let a=Date.now();try{let b=j(await h("/api/usage/analytics?period=session").catch(()=>({}))),c=j(b.tokenCount),e=k(b.byModel),f=k(b.byProvider),g={sessionStart:l(b.sessionStart,new Date().toISOString()),duration:l(b.duration,"unknown"),requestCount:m(b.requestCount,0),costTotal:m(b.totalCost,0),tokenCount:{prompt:m(c.prompt,0),completion:m(c.completion,0)},topModels:e.slice(0,5).map(a=>({model:l(a.model,"unknown"),count:m(a.requests,0)})),topProviders:f.slice(0,5).map(a=>({provider:l(a.name,"unknown"),count:m(a.requests,0)})),errors:m(b.errorCount,0),fallbacks:m(b.fallbackCount,0),budgetGuard:p?{active:!0,remaining:Math.max(0,p.maxCost-p.spent),action:p.action}:null};return await (0,d.Bv)("omniroute_get_session_snapshot",{},{requestCount:g.requestCount},Date.now()-a,!0),{content:[{type:"text",text:JSON.stringify(g,null,2)}]}}catch(c){let b=c instanceof Error?c.message:String(c);return await (0,d.Bv)("omniroute_get_session_snapshot",{},null,Date.now()-a,!1,b),{content:[{type:"text",text:`Error: ${b}`}],isError:!0}}}},954:(a,b,c)=>{c.d(b,{D:()=>e,U:()=>f});let d=new Set;function e(a){d.add(a)}function f(){for(let a of d)try{a()}catch(a){console.warn("[DB] Failed to reset module state:",a)}}},9679:(a,b,c)=>{c.d(b,{HL:()=>y,KJ:()=>o,PM:()=>A,PS:()=>n,VT:()=>q,YD:()=>z,getPricing:()=>m,getSettings:()=>j,isCloudEnabled:()=>l,o4:()=>w,ru:()=>v,updateSettings:()=>k,yF:()=>p});var d=c(42910),e=c(39948),f=c(23969),g=c(31714);function h(a){return a&&"object"==typeof a?a:{}}function i(a){return a&&"object"==typeof a?a:{}}async function j(){let a=(0,d.sm)(),b=a.prepare("SELECT key, value FROM key_value WHERE namespace = 'settings'").all(),c={cloudEnabled:!1,stickyRoundRobinLimit:3,requireLogin:!0};for(let a of b){let b=h(a),d="string"==typeof b.key?b.key:null,e="string"==typeof b.value?b.value:null;d&&null!==e&&(c[d]=JSON.parse(e))}return!c.setupComplete&&process.env.INITIAL_PASSWORD&&(c.setupComplete=!0,c.requireLogin=!0,a.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('settings', 'setupComplete', 'true')").run(),a.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('settings', 'requireLogin', 'true')").run()),c}async function k(a){let b=(0,d.sm)(),c=b.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('settings', ?, ?)");return b.transaction(()=>{for(let[b,d]of Object.entries(a))c.run(b,JSON.stringify(d))})(),(0,e.lR)("pre-write"),(0,g.Sc)("settings"),j()}async function l(){return!0===(await j()).cloudEnabled}async function m(){let a=(0,d.sm)(),{getDefaultPricing:b}=await c.e(3699).then(c.bind(c,53699)),e=b(),f=a.prepare("SELECT key, value FROM key_value WHERE namespace = 'pricing_synced'").all(),g={};for(let a of f){let b=h(a),c="string"==typeof b.key?b.key:null,d="string"==typeof b.value?b.value:null;c&&null!==d&&(g[c]=h(JSON.parse(d)))}let i=a.prepare("SELECT key, value FROM key_value WHERE namespace = 'pricing'").all(),j={};for(let a of i){let b=h(a),c="string"==typeof b.key?b.key:null,d="string"==typeof b.value?b.value:null;c&&null!==d&&(j[c]=h(JSON.parse(d)))}let k={};for(let[a,b]of Object.entries(e))k[a]={...h(b)};for(let a of[g,j])for(let[b,c]of Object.entries(a))if(k[b])for(let[a,d]of Object.entries(c))k[b][a]=k[b][a]?{...k[b][a]||{},...h(d)}:d;else k[b]={...c};return k}async function n(a,b){let d=await m();if(d[a]?.[b])return d[a][b];let{PROVIDER_ID_TO_ALIAS:e}=await Promise.resolve().then(c.bind(c,23969)),f=e[a];if(f&&d[f])return d[f][b]||null;let g=a?.replace(/-cn$/,"");return g&&g!==a&&d[g]&&d[g][b]||null}async function o(a){let b=(0,d.sm)(),c=b.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('pricing', ?, ?)"),f=b.prepare("SELECT key, value FROM key_value WHERE namespace = 'pricing'").all(),i={};for(let a of f){let b=h(a),c="string"==typeof b.key?b.key:null,d="string"==typeof b.value?b.value:null;c&&null!==d&&(i[c]=h(JSON.parse(d)))}b.transaction(()=>{for(let[b,d]of Object.entries(a))c.run(b,JSON.stringify({...i[b]||{},...d}))})(),(0,e.lR)("pre-write"),(0,g.Sc)("pricing");let j={};for(let a of b.prepare("SELECT key, value FROM key_value WHERE namespace = 'pricing'").all()){let b=h(a),c="string"==typeof b.key?b.key:null,d="string"==typeof b.value?b.value:null;c&&null!==d&&(j[c]=h(JSON.parse(d)))}return j}async function p(a,b){let c=(0,d.sm)();if(b){let d=c.prepare("SELECT value FROM key_value WHERE namespace = 'pricing' AND key = ?").get(a);if(d){let e=h(d),f=h(JSON.parse("string"==typeof e.value?e.value:"{}"));delete f[b],0===Object.keys(f).length?c.prepare("DELETE FROM key_value WHERE namespace = 'pricing' AND key = ?").run(a):c.prepare("UPDATE key_value SET value = ? WHERE namespace = 'pricing' AND key = ?").run(JSON.stringify(f),a)}}else c.prepare("DELETE FROM key_value WHERE namespace = 'pricing' AND key = ?").run(a);(0,e.lR)("pre-write");let f=c.prepare("SELECT key, value FROM key_value WHERE namespace = 'pricing'").all(),g={};for(let a of f){let b=h(a),c="string"==typeof b.key?b.key:null,d="string"==typeof b.value?b.value:null;c&&null!==d&&(g[c]=JSON.parse(d))}return g}async function q(){return(0,d.sm)().prepare("DELETE FROM key_value WHERE namespace = 'pricing'").run(),(0,e.lR)("pre-write"),{}}let r={global:null,providers:{},combos:{},keys:{}},s=Object.entries(f.PROVIDER_ID_TO_ALIAS).reduce((a,[b,c])=>(c&&(a[c]=b),a[b]=b,a),{});function t(a){return"string"!=typeof a?a:s[a]||a}function u(a){if(!a)return null;if("object"==typeof a){let b=h(a);if(b.type)return b}if("string"!=typeof a)return null;try{let b=new URL(a);return{type:b.protocol.replace(":","")||"http",host:b.hostname,port:b.port||("socks5:"===b.protocol?"1080":"https:"===b.protocol?"443":"8080"),username:b.username?decodeURIComponent(b.username):"",password:b.password?decodeURIComponent(b.password):""}}catch{let b=a.split(":");return{type:"http",host:b[0]||a,port:b[1]||"8080",username:"",password:""}}}async function v(){let a=(0,d.sm)(),b=a.prepare("SELECT key, value FROM key_value WHERE namespace = 'proxyConfig'").all(),c={...r};for(let a of b){let b=h(a),d="string"==typeof b.key?b.key:null,e="string"==typeof b.value?b.value:null;d&&null!==e&&(c[d]=JSON.parse(e))}let e=!1;if(c.global&&"string"==typeof c.global&&(c.global=u(c.global),e=!0),c.providers)for(let[a,b]of Object.entries(c.providers))"string"==typeof b&&(c.providers[a]=u(b),e=!0);if(e){let b=a.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('proxyConfig', ?, ?)");void 0!==c.global&&b.run("global",JSON.stringify(c.global)),c.providers&&b.run("providers",JSON.stringify(c.providers))}return c}async function w(a,b){let c=await v();if("global"===a)return c.global||null;let d=i(c[a+"s"]||c[a]||{});return(b?d[b]:null)||null}async function x(a,b,c){let f=(0,d.sm)(),g=await v();if("global"===a)g.global=c||null,f.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('proxyConfig', 'global', ?)").run(JSON.stringify(g.global));else{let d=a+"s",e=i(g[d]||{});c&&b?e[b]=c:b&&delete e[b],g[d]=e,f.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('proxyConfig', ?, ?)").run(d,JSON.stringify(e))}return(0,e.lR)("pre-write"),g}async function y(a,b){return x(a,b,null)}async function z(a){let b=await v();if(a&&b.keys?.[a])return{proxy:b.keys[a],level:"key",levelId:a};let c=(0,d.sm)(),e=c.prepare("SELECT provider FROM provider_connections WHERE id = ?").get(a);if(e){let a=h(e),d="string"==typeof a.provider?a.provider:null;if(b.combos&&Object.keys(b.combos).length>0)for(let a of c.prepare("SELECT id, data FROM combos").all()){let c=h(a),e="string"==typeof c.id?c.id:null;if(e&&b.combos[e])try{let a="string"==typeof c.data?c.data:null;if(!a)continue;let f=h(JSON.parse(a));if((Array.isArray(f.models)?f.models:[]).some(a=>(function(a){let b=h(a);if("string"==typeof b.provider)return t(b.provider);let c="string"==typeof a?a:"string"==typeof b.model?b.model:null;if(!c)return null;let[d]=c.split("/",1);return d?t(d):null})(a)===d))return{proxy:b.combos[e],level:"combo",levelId:e}}catch{}}if(d&&b.providers?.[d])return{proxy:b.providers[d],level:"provider",levelId:d}}return b.global?{proxy:b.global,level:"global",levelId:null}:{proxy:null,level:"direct",levelId:null}}async function A(a){if(void 0!==a.level)return x("string"==typeof a.level?a.level:"global","string"==typeof a.id?a.id:null,a.proxy||null);let b=(0,d.sm)(),c=await v(),f=b.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('proxyConfig', ?, ?)");return b.transaction(()=>{if(void 0!==a.global){var b;c.global=null===(b=a.global)||"string"==typeof b||b&&"object"==typeof b?b:null,f.run("global",JSON.stringify(c.global))}for(let b of["providers","combos","keys"])if(a[b]){let d={...i(c[b]),...i(a[b])};for(let[a,b]of Object.entries(d))b||delete d[a];c[b]=d,f.run(b,JSON.stringify(d))}})(),(0,e.lR)("pre-write"),c}},13234:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Z:()=>i,x:()=>h});var e=c(2306),f=a([e]);function g(a){if(!Array.isArray(a))return[];let b=a.filter(a=>"string"==typeof a).map(a=>a.trim()).filter(Boolean);return Array.from(new Set(b))}function h(a,b=[]){let c="string"==typeof a?.authInfo?.clientId&&a.authInfo.clientId.trim()||"string"==typeof a?.sessionId&&a.sessionId.trim()||"anonymous",d=g(a?.authInfo?.scopes);if(d.length>0)return{callerId:c,scopes:d,source:"authInfo"};let e=function(a){if(!a||"object"!=typeof a)return[];let b=g(a.scopes);if(b.length>0)return b;let c=a.auth;if(c&&"object"==typeof c){let a=g(c.scopes);if(a.length>0)return a}let d=a.omniroute;if(d&&"object"==typeof d){let a=g(d.scopes);if(a.length>0)return a}return[]}(a?._meta);if(e.length>0)return{callerId:c,scopes:e,source:"meta"};let f=g(b);return f.length>0?{callerId:c,scopes:f,source:"env"}:{callerId:c,scopes:[],source:"none"}}function i(a,b,c){let d=e.Dk[a];if(!d)return{allowed:!1,required:[],provided:Array.from(b),missing:[],reason:"tool_definition_missing"};let f=Array.isArray(d.scopes)?Array.from(d.scopes):[],h=g(b);if(!c||0===f.length)return{allowed:!0,required:f,provided:h,missing:[]};let i=f.filter(a=>!h.some(b=>(function(a,b){if("*"===a||a===b)return!0;if(a.endsWith("*")){let c=a.slice(0,-1);return b.startsWith(c)}return!1})(b,a)));return{allowed:0===i.length,required:f,provided:h,missing:i,reason:i.length>0?"missing_scopes":void 0}}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},13419:(a,b,c)=>{c.d(b,{H:()=>h,J:()=>g});let d=["valid","expiring","expired","refreshing"];function e(a){if("number"==typeof a&&Number.isFinite(a))return a;if("string"==typeof a&&""!==a.trim()){let b=Number(a);if(Number.isFinite(b))return b}return null}function f(a,b,c){return Math.min(c,Math.max(b,a))}function g(a){var b;let c=a&&"object"==typeof a?a:{},g="string"==typeof c.provider?c.provider:"unknown",h="string"==typeof c.name&&c.name.trim()?c.name:g,i="string"==typeof c.connectionId&&c.connectionId.trim()?c.connectionId:"unknown",j=e(c.quotaTotal),k=null!==j&&j>=0?j:null,l=e(c.quotaUsed)??0,m=null!==k?f(l,0,k):Math.max(0,l),n=e(c.percentRemaining);return null===n&&(n=k&&k>0?(k-m)/k*100:100),{name:h,provider:g,connectionId:i,quotaUsed:m,quotaTotal:k,percentRemaining:f(n,0,100),resetAt:"string"==typeof c.resetAt&&c.resetAt.trim()?c.resetAt:null,tokenStatus:"string"==typeof(b=c.tokenStatus)&&d.includes(b)?b:"valid"}}function h(a,b={}){let c=a&&"object"==typeof a?a:{},d=(Array.isArray(c.providers)?c.providers:Array.isArray(a)?a:[]).map(a=>g(a)),e=c.meta&&"object"==typeof c.meta?c.meta:{},f=e.filters&&"object"==typeof e.filters?e.filters:{},i=b.provider??("string"==typeof f.provider&&f.provider.trim()?f.provider:null),j=b.connectionId??("string"==typeof f.connectionId&&f.connectionId.trim()?f.connectionId:null);return{providers:d,meta:{generatedAt:"string"==typeof e.generatedAt&&e.generatedAt.trim()?e.generatedAt:new Date().toISOString(),filters:{provider:i||null,connectionId:j||null},totalProviders:d.length}}}},23969:(a,b,c)=>{c.d(b,{PROVIDER_ID_TO_ALIAS:()=>f,ux:()=>g,vq:()=>e});var d=c(83596);let e=(0,d.oD)(),f=(0,d.Qv)();function g(a,b){let c=e[a];if(!c)return null;let d=c.find(a=>a.id===b);return d?.targetFormat||null}},25755:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{c:()=>B});var e=c(10610),f=c(92827),g=c(2306),h=c(43620),i=c(64926),j=c(13234),k=c(647),l=c(13419),m=a([e,f,g,j]);[e,f,g,j]=m.then?(await m)():m;let D=process.env.OMNIROUTE_BASE_URL||"http://localhost:20128",E=process.env.OMNIROUTE_API_KEY||"",F="true"===process.env.OMNIROUTE_MCP_ENFORCE_SCOPES,G=new Set((process.env.OMNIROUTE_MCP_SCOPES||"").split(",").map(a=>a.trim()).filter(Boolean));function n(a){return a&&"object"==typeof a&&!Array.isArray(a)?a:{}}function o(a){return Array.isArray(a)?a:[]}function p(a,b=""){return"string"==typeof a?a:b}function q(a,b=0){return"number"==typeof a&&Number.isFinite(a)?a:b}async function r(a,b={}){let c=`${D}${a}`,d={"Content-Type":"application/json",...E?{Authorization:`Bearer ${E}`}:{},...b.headers||{}},e=await fetch(c,{...b,headers:d,signal:AbortSignal.timeout(1e4)});if(!e.ok){let a=await e.text().catch(()=>"Unknown error");throw Error(`OmniRoute API error [${e.status}]: ${a}`)}return e.json()}function s(a,b){return async(c,d)=>{let e=(0,j.x)(d,Array.from(G)),f=(0,j.Z)(a,e.scopes,F);if(!f.allowed){let b=f.missing.length>0?f.missing.join(", "):"unavailable",d=f.reason||"scope_check_failed",g=`Insufficient MCP scopes for ${a}. Missing: ${b}. Caller=${e.callerId}, source=${e.source}.`,h=c&&"object"==typeof c?n(c):{rawArgs:c};return await (0,i.Bv)(a,{...h,_scopeCheck:{callerId:e.callerId,source:e.source,required:f.required,provided:f.provided,missing:f.missing}},null,0,!1,`scope_denied:${d}`),{content:[{type:"text",text:`Error: ${g}`}],isError:!0}}return b(c,d)}}async function t(){let a=Date.now();try{let[b,c,d]=await Promise.allSettled([r("/api/monitoring/health"),r("/api/resilience"),r("/api/rate-limits")]),e="fulfilled"===b.status?n(b.value):{},f="fulfilled"===c.status?n(c.value):{},g="fulfilled"===d.status?n(d.value):{},h=n(e.memoryUsage),j=n(e.cacheStats),k=o(f.circuitBreakers),l=o(g.limits),m={uptime:p(e.uptime,"unknown"),version:p(e.version,"unknown"),memoryUsage:{heapUsed:q(h.heapUsed,0),heapTotal:q(h.heapTotal,0)},circuitBreakers:k,rateLimits:l,cacheStats:Object.keys(j).length>0?{hits:q(j.hits,0),misses:q(j.misses,0),hitRate:q(j.hitRate,0)}:void 0};return await (0,i.Bv)("omniroute_get_health",{},m,Date.now()-a,!0),{content:[{type:"text",text:JSON.stringify(m,null,2)}]}}catch(c){let b=c instanceof Error?c.message:String(c);return await (0,i.Bv)("omniroute_get_health",{},null,Date.now()-a,!1,b),{content:[{type:"text",text:`Error: ${b}`}],isError:!0}}}async function u(a){let b=Date.now();try{let c=await r("/api/combos"),d=n(c),e=Array.isArray(d.combos)?d.combos:Array.isArray(c)?c:[],f={};a.includeMetrics&&(f=n(await r("/api/combos/metrics").catch(()=>({}))));let g={combos:o(e).map(b=>{let c=n(b),d=n(c.data),e=p(c.id,""),g=Array.isArray(c.models)&&c.models.length>0?c.models:d.models;return{id:e,name:p(c.name,e||"unnamed"),models:o(g).map((a,b)=>{let c=n(a);return{provider:p(c.provider,"unknown"),model:p(c.model,"unknown"),priority:q(c.priority,b+1)}}),strategy:p(c.strategy,p(d.strategy,"priority")),enabled:!1!==c.enabled,...a.includeMetrics?{metrics:f[e]??null}:{}}})};return await (0,i.Bv)("omniroute_list_combos",a,g,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(g,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_list_combos",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function v(a){let b=Date.now();try{let c=await r(`/api/combos/metrics?comboId=${encodeURIComponent(a.comboId)}`);return await (0,i.Bv)("omniroute_get_combo_metrics",a,c,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(c,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_get_combo_metrics",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function w(a){let b=Date.now();try{let c=await r(`/api/combos/${encodeURIComponent(a.comboId)}`,{method:"PUT",body:JSON.stringify({isActive:a.active})});return await (0,i.Bv)("omniroute_switch_combo",a,c,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(c,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_switch_combo",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function x(a){let b=Date.now();try{let c="/api/usage/quota";a.connectionId?c+=`?connectionId=${encodeURIComponent(a.connectionId)}`:a.provider&&(c+=`?provider=${encodeURIComponent(a.provider)}`);let d=(0,l.H)(await r(c),{provider:a.provider||null,connectionId:a.connectionId||null});return await (0,i.Bv)("omniroute_check_quota",a,d,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(d,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_check_quota",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function y(a){let b=Date.now();try{let c={model:a.model,messages:a.messages,stream:!1};a.combo&&(c["x-combo"]=a.combo);let d=await r("/v1/chat/completions",{method:"POST",body:JSON.stringify(c)}),e=o(d.choices),f=n(e[0]),g=n(f.message),h=n(d.usage),j={response:{content:p(g.content,""),model:p(d.model,a.model),tokens:{prompt:q(h.prompt_tokens,0),completion:q(h.completion_tokens,0)}},routing:{provider:p(d.provider,"unknown"),combo:d.combo??null,fallbacksTriggered:q(d.fallbacksTriggered,0),cost:q(d.cost,0),latencyMs:Date.now()-b,routingExplanation:p(d.routingExplanation,"Request routed through primary provider")}};return await (0,i.Bv)("omniroute_route_request",{model:a.model,messageCount:a.messages.length},j.routing,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(j,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_route_request",{model:a.model},null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function z(a){let b=Date.now();try{let c=a.period||"session",d={session:"1d",day:"1d",week:"7d",month:"30d"}[c]||"30d",e=n(await r(`/api/usage/analytics?range=${encodeURIComponent(d)}`)),f=n(e.tokenCount),g=n(e.budget),h={period:c,totalCost:q(e.totalCost,0),requestCount:q(e.requestCount,0),tokenCount:{prompt:q(f.prompt,0),completion:q(f.completion,0)},byProvider:o(e.byProvider),byModel:o(e.byModel),budget:{limit:g.limit??null,remaining:g.remaining??null}};return await (0,i.Bv)("omniroute_cost_report",a,h,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(h,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_cost_report",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function A(a){let b=Date.now();try{let c="/v1/models",d=new URLSearchParams;a.provider&&d.set("provider",a.provider),a.capability&&d.set("capability",a.capability),d.toString()&&(c+=`?${d.toString()}`);let e=n(await r(c)),f={models:o(e.data).map(a=>{let b=n(a);return{id:p(b.id,""),provider:p(b.owned_by,p(b.provider,"unknown")),capabilities:function(a,b=[]){let c=o(a).filter(a=>"string"==typeof a);return c.length>0?c:b}(b.capabilities,["chat"]),status:p(b.status,"available"),pricing:b.pricing}})};return await (0,i.Bv)("omniroute_list_models_catalog",a,{modelCount:f.models.length},Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(f,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_list_models_catalog",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}function B(){let a=new e._({name:"omniroute",version:process.env.npm_package_version||"1.8.1"});return a.registerTool("omniroute_get_health",{description:"Returns OmniRoute health status including uptime, memory, circuit breakers, rate limits, and cache stats",inputSchema:g.nu},s("omniroute_get_health",async a=>(g.nu.parse(a??{}),t()))),a.registerTool("omniroute_list_combos",{description:"Lists all configured combos (model chains) with strategies and optional metrics",inputSchema:g.ME},s("omniroute_list_combos",a=>u(g.ME.parse(a)))),a.registerTool("omniroute_get_combo_metrics",{description:"Returns detailed performance metrics for a specific combo",inputSchema:g.Gs},s("omniroute_get_combo_metrics",a=>v(g.Gs.parse(a)))),a.registerTool("omniroute_switch_combo",{description:"Activates or deactivates a combo for routing",inputSchema:g.B1},s("omniroute_switch_combo",a=>w(g.B1.parse(a)))),a.registerTool("omniroute_check_quota",{description:"Checks remaining API quota for one or all providers",inputSchema:g.Fp},s("omniroute_check_quota",a=>x(g.Fp.parse(a)))),a.registerTool("omniroute_route_request",{description:"Sends a chat completion request through OmniRoute intelligent routing",inputSchema:g.fL},s("omniroute_route_request",a=>y(g.fL.parse(a)))),a.registerTool("omniroute_cost_report",{description:"Generates a cost report for the specified period",inputSchema:g.c},s("omniroute_cost_report",a=>z(g.c.parse(a)))),a.registerTool("omniroute_list_models_catalog",{description:"Lists all available AI models across providers with capabilities and pricing",inputSchema:g._v},s("omniroute_list_models_catalog",a=>A(g._v.parse(a)))),a.registerTool("omniroute_simulate_route",{description:"Simulates the routing path a request would take without executing it (dry-run)",inputSchema:g.gl},s("omniroute_simulate_route",a=>(0,k.yL)(g.gl.parse(a)))),a.registerTool("omniroute_set_budget_guard",{description:"Sets a session budget limit with configurable action when exceeded (degrade/block/alert)",inputSchema:g.b9},s("omniroute_set_budget_guard",a=>(0,k.nX)(g.b9.parse(a)))),a.registerTool("omniroute_set_resilience_profile",{description:"Applies a resilience profile controlling circuit breakers, retries, timeouts, and fallback depth",inputSchema:g.dE},s("omniroute_set_resilience_profile",a=>(0,k.DZ)(g.dE.parse(a)))),a.registerTool("omniroute_test_combo",{description:"Tests each provider in a combo with a real prompt, reporting latency, cost, and success per provider",inputSchema:g.n0},s("omniroute_test_combo",a=>(0,k.nq)(g.n0.parse(a)))),a.registerTool("omniroute_get_provider_metrics",{description:"Returns detailed metrics for a specific provider including latency percentiles and circuit breaker state",inputSchema:g.xs},s("omniroute_get_provider_metrics",a=>(0,k.zl)(g.xs.parse(a)))),a.registerTool("omniroute_best_combo_for_task",{description:"Recommends the best combo for a task type based on provider fitness and constraints",inputSchema:g.h0},s("omniroute_best_combo_for_task",a=>(0,k.Bm)(g.h0.parse(a)))),a.registerTool("omniroute_explain_route",{description:"Explains why a request was routed to a specific provider, showing scoring factors and fallbacks",inputSchema:g.t7},s("omniroute_explain_route",a=>(0,k.h$)(g.t7.parse(a)))),a.registerTool("omniroute_get_session_snapshot",{description:"Returns a full snapshot of the current working session: cost, tokens, top models, errors, budget status",inputSchema:g.ne},s("omniroute_get_session_snapshot",async a=>(g.ne.parse(a??{}),(0,k.ne)()))),a.registerTool("omniroute_sync_pricing",{description:"Syncs pricing data from external sources (LiteLLM) into OmniRoute without overwriting user-set prices",inputSchema:g.WO},s("omniroute_sync_pricing",a=>(0,k.wq)(g.WO.parse(a)))),a}async function C(){let a=B(),b=new f.S,c=process.env.npm_package_version||"1.8.1",d=(0,h.rs)({version:c,scopesEnforced:F,allowedScopes:Array.from(G),toolCount:g.nS.length}),e=()=>{d()};process.once("exit",e),process.once("SIGINT",e),process.once("SIGTERM",e),console.error("[MCP] OmniRoute MCP Server starting (stdio transport)...");try{await a.connect(b),console.error("[MCP] OmniRoute MCP Server connected and ready.")}finally{e(),process.off("exit",e),process.off("SIGINT",e),process.off("SIGTERM",e)}}process.argv[1]&&"file:///home/diegosouzapw/dev/proxys/9router/open-sse/mcp-server/server.ts".endsWith(process.argv[1].replace(/\\/g,"/"))&&C().catch(a=>{console.error("[MCP] Fatal error:",a),process.exit(1)}),d()}catch(a){d(a)}})},31714:(a,b,c)=>{c.d(b,{Sc:()=>h});class d{constructor(a){this.cache=new Map,this.ttlMs=a}get(a){let b=this.cache.get(a);if(b)return Date.now()>b.expiresAt?void this.cache.delete(a):b.value}set(a,b){this.cache.set(a,{value:b,expiresAt:Date.now()+this.ttlMs})}invalidate(a){a?this.cache.delete(a):this.cache.clear()}}let e=new d(5e3),f=new d(3e4),g=new d(5e3);function h(a){a&&"settings"!==a||e.invalidate(),a&&"pricing"!==a||f.invalidate(),a&&"connections"!==a||g.invalidate()}},39948:(a,b,c)=>{c.d(b,{Dp:()=>o,eF:()=>n,lR:()=>m});var d=c(87550),e=c.n(d),f=c(76760),g=c.n(f),h=c(73024),i=c.n(h),j=c(42910),k=c(954);let l=0;function m(a="auto"){try{if(j.I8||j.m1||!j.oh||!i().existsSync(j.oh))return null;let b=i().statSync(j.oh);if(b.size<4096)return console.warn(`[DB] Backup SKIPPED — DB too small (${b.size}B)`),null;let c=Date.now();if("manual"!==a&&"pre-restore"!==a&&c-l<36e5)return null;l=c;let d=j.NJ||g().join(j.nJ,"db_backups");i().existsSync(d)||i().mkdirSync(d,{recursive:!0});let e=i().readdirSync(d).filter(a=>a.startsWith("db_")&&a.endsWith(".sqlite")).sort();if(e.length>0){let a=e[e.length-1],c=i().statSync(g().join(d,a));if(c.size>4096&&b.size<.5*c.size)return console.warn(`[DB] Backup SKIPPED — DB shrank from ${c.size}B to ${b.size}B`),null}let f=new Date().toISOString().replace(/[:.]/g,"-"),h=g().join(d,`db_${f}_${a}.sqlite`);(0,j.sm)().backup(h).then(()=>{console.log(`[DB] Backup created: ${h} (${b.size} bytes)`)}).catch(a=>{let b=a instanceof Error?a.message:String(a);console.error("[DB] Backup failed:",b)});let k=i().readdirSync(d).filter(a=>a.startsWith("db_")&&a.endsWith(".sqlite")).sort();for(;k.length>20;){let a=0,b=1/0;for(let c=0;c<k.length-1;c++)try{let e=i().statSync(g().join(d,k[c]));e.size<b&&(b=e.size,a=c)}catch{a=c;break}try{i().unlinkSync(g().join(d,k[a]))}catch{}k.splice(a,1)}return{filename:g().basename(h),size:b.size}}catch(a){return console.error("[DB] Backup failed:",a instanceof Error?a.message:String(a)),null}}async function n(){let a=j.NJ||g().join(j.nJ,"db_backups");try{if(!i().existsSync(a))return[];return i().readdirSync(a).filter(a=>a.startsWith("db_")&&a.endsWith(".sqlite")).sort().reverse().map(b=>{let c=g().join(a,b),d=i().statSync(c),f=b.match(/^db_(.+?)_([^.]+)\.sqlite$/),h=f?f[2]:"unknown",j=0;try{let a=new(e())(c,{readonly:!0}),b=a.prepare("SELECT COUNT(*) as cnt FROM provider_connections").get();j=b?.cnt||0,a.close()}catch{}return{id:b,filename:b,createdAt:d.mtime.toISOString(),size:d.size,reason:h,connectionCount:j}})}catch{return[]}}async function o(a){let b=j.NJ||g().join(j.nJ,"db_backups");if(!a.startsWith("db_")||!a.endsWith(".sqlite")||a.includes(g().sep)||a.includes("/"))throw Error("Invalid backup ID");let c=g().resolve(b,a);if(!c.startsWith(g().resolve(b)+g().sep)&&c!==g().resolve(b))throw Error("Invalid backup ID: path traversal detected");if(!i().existsSync(c))throw Error(`Backup not found: ${a}`);try{let a=new(e())(c,{readonly:!0}),b=a.pragma("integrity_check");if(a.close(),b[0]?.integrity_check!=="ok")throw Error("Backup integrity check failed")}catch(b){if(b instanceof Error&&"Backup integrity check failed"===b.message)throw b;let a=b instanceof Error?b.message:String(b);throw Error(`Backup file is corrupt: ${a}`)}l=0,m("pre-restore"),(0,j.jX)(),(0,k.U)();let d=j.oh;if(!d)throw Error("SQLITE_FILE is unavailable in local backup restore");for(let a of[d,`${d}-wal`,`${d}-shm`,`${d}-journal`])a&&i().existsSync(a)&&i().unlinkSync(a);i().copyFileSync(c,d);let f=(0,j.sm)(),h=f.prepare("SELECT COUNT(*) as cnt FROM provider_connections").get()?.cnt||0,n=f.prepare("SELECT COUNT(*) as cnt FROM provider_nodes").get()?.cnt||0,o=f.prepare("SELECT COUNT(*) as cnt FROM combos").get()?.cnt||0,p=f.prepare("SELECT COUNT(*) as cnt FROM api_keys").get()?.cnt||0;return console.log(`[DB] Restored backup: ${a} (${h} connections)`),{restored:!0,backupId:a,connectionCount:h,nodeCount:n,comboCount:o,apiKeyCount:p}}},43620:(a,b,c)=>{c.d(b,{Im:()=>n,c7:()=>i,h6:()=>l,jW:()=>m,rs:()=>k});var d=c(73024),e=c(48161),f=c(76760);let g="runtime";function h(){let a=process.env.DATA_DIR;return"string"==typeof a&&a.trim().length>0?a.trim():(0,f.join)((0,e.homedir)(),".omniroute")}function i(){return(0,f.join)(h(),g,"mcp-heartbeat.json")}async function j(a){let b=i(),c=(0,f.join)(h(),g);await d.promises.mkdir(c,{recursive:!0}),await d.promises.writeFile(b,JSON.stringify(a,null,2),"utf-8")}function k(a){let b=new Date().toISOString(),c=null,d=!1,e="number"==typeof a.intervalMs&&a.intervalMs>0?a.intervalMs:5e3,f=async()=>{if(d)return;let c={pid:process.pid,startedAt:b,lastHeartbeatAt:new Date().toISOString(),version:a.version,transport:"stdio",scopesEnforced:a.scopesEnforced,allowedScopes:[...a.allowedScopes],toolCount:a.toolCount};try{await j(c)}catch(a){console.error("[MCP Heartbeat] Failed to write heartbeat:",a instanceof Error?a.message:String(a))}};return f(),c=setInterval(()=>{f()},e),()=>{d||(d=!0,c&&(clearInterval(c),c=null),f())}}async function l(){let a=i();try{let b=await d.promises.readFile(a,"utf-8"),c=JSON.parse(b);if(!c||"object"!=typeof c||"number"!=typeof c.pid||"string"!=typeof c.startedAt||"string"!=typeof c.lastHeartbeatAt||"string"!=typeof c.version||"stdio"!==c.transport||"boolean"!=typeof c.scopesEnforced||!Array.isArray(c.allowedScopes)||"number"!=typeof c.toolCount)return null;let e=c.allowedScopes.filter(a=>"string"==typeof a);return{pid:c.pid,startedAt:c.startedAt,lastHeartbeatAt:c.lastHeartbeatAt,version:c.version,transport:"stdio",scopesEnforced:c.scopesEnforced,allowedScopes:e,toolCount:c.toolCount}}catch{return null}}function m(a){if(!Number.isFinite(a)||a<=0)return!1;try{return process.kill(a,0),!0}catch{return!1}}function n(a,b){if(!a)return!1;let c="number"==typeof b?.staleAfterMs&&b.staleAfterMs>0?b.staleAfterMs:15e3,d=Date.now()-new Date(a.lastHeartbeatAt).getTime();return!!Number.isFinite(d)&&!(d>c)&&(b?.requireLivePid===!1||m(a.pid))}},45419:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{V6:()=>j,e5:()=>k,lJ:()=>l});var e=c(77598),f=c(25755),g=c(60021),h=a([f,g]);[f,g]=h.then?(await h)():h;let m=null,n=null,o=null,p=null;function i(a){if(m&&n&&p===a)return{server:m,transport:n};if(n)try{n.close()}catch{}return m=(0,f.c)(),n=new g.a({sessionIdGenerator:()=>(0,e.randomUUID)()}),p=a,o=Date.now(),m.connect(n),console.log(`[MCP] HTTP transport started (${a})`),{server:m,transport:n}}async function j(a){let{transport:b}=i("streamable-http");try{return await b.handleRequest(a)}catch(a){return console.error("[MCP] Streamable HTTP error:",a),new Response(JSON.stringify({error:"MCP transport error"}),{status:500,headers:{"Content-Type":"application/json"}})}}async function k(a){let{transport:b}=i("sse");try{return await b.handleRequest(a)}catch(a){return console.error("[MCP] SSE error:",a),new Response(JSON.stringify({error:"MCP SSE transport error"}),{status:500,headers:{"Content-Type":"application/json"}})}}function l(){return{online:null!==n&&null!==p,transport:p,startedAt:o,uptime:o?`${Math.floor((Date.now()-o)/1e3)}s`:null}}d()}catch(a){d(a)}})},64926:(a,b,c)=>{async function d(a){let b=JSON.stringify(a),c=new TextEncoder;return Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256",c.encode(b)))).map(a=>a.toString(16).padStart(2,"0")).join("")}function e(a){return"string"==typeof a?a:null}function f(a,b){let c=i(a,b);return Number.isFinite(c)?Math.max(0,Math.floor(c)):b}function g(a){return{id:f(a.id,0),toolName:j(a.tool_name),inputHash:j(a.input_hash),outputSummary:j(a.output_summary),durationMs:i(a.duration_ms,0),apiKeyId:e(a.api_key_id),success:function(a,b=!1){return"boolean"==typeof a?a:1===a||"1"===a||0!==a&&"0"!==a&&b}(a.success,!1),errorCode:e(a.error_code),createdAt:j(a.created_at)}}c.d(b,{JY:()=>n,Bv:()=>l,Gj:()=>m});let h=null;function i(a,b=0){let c="number"==typeof a?a:"string"==typeof a&&a.trim().length>0?Number(a):NaN;return Number.isFinite(c)?c:b}function j(a){return"string"==typeof a?a:""}async function k(){if(h)return h;try{let{homedir:a}=await Promise.resolve().then(c.t.bind(c,48161,23)),{join:b}=await Promise.resolve().then(c.t.bind(c,76760,23)),{existsSync:d}=await Promise.resolve().then(c.t.bind(c,73024,23)),e=process.env.DATA_DIR?b(process.env.DATA_DIR,"storage.sqlite"):b(a(),".omniroute","storage.sqlite");if(!d(e))return console.error(`[MCP Audit] Database not found at ${e} — audit logging disabled`),null;return h=new(await Promise.resolve().then(c.t.bind(c,87550,23))).default(e)}catch(a){return console.error("[MCP Audit] Failed to connect to database:",a instanceof Error?a.message:String(a)),null}}async function l(a,b,c,e,f,g){try{let h=await k();if(!h)return;let i=await d(b),j=function(a,b=200){if(null==a)return"(null)";let c="string"==typeof a?a:JSON.stringify(a);return c.length<=b?c:c.slice(0,b)+"…"}(c),l=process.env.OMNIROUTE_API_KEY_ID||null;h.prepare(`INSERT INTO mcp_tool_audit (tool_name, input_hash, output_summary, duration_ms, api_key_id, success, error_code)
2
2
  VALUES (?, ?, ?, ?, ?, ?, ?)`).run(a,i,j,e,l,+!!f,g||null)}catch(a){console.error("[MCP Audit] Failed to log:",a instanceof Error?a.message:String(a))}}async function m(a={}){try{let b,c,d=await k(),e=Math.max(1,Math.min(500,f(a.limit,50))),h=Math.max(0,f(a.offset,0));if(!d)return{entries:[],total:0,limit:e,offset:h};let{whereSql:i,params:j}=(b=[],c=[],"string"==typeof a.tool&&a.tool.trim().length>0&&(b.push("tool_name = ?"),c.push(a.tool.trim())),"boolean"==typeof a.success&&(b.push("success = ?"),c.push(+!!a.success)),"string"==typeof a.apiKeyId&&a.apiKeyId.trim().length>0&&(b.push("api_key_id = ?"),c.push(a.apiKeyId.trim())),{whereSql:b.length>0?`WHERE ${b.join(" AND ")}`:"",params:c}),l=d.prepare(`SELECT COUNT(*) as total FROM mcp_tool_audit ${i}`).get(...j);return{entries:d.prepare(`SELECT
3
3
  id,
4
4
  tool_name,
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=2910,exports.ids=[2910],exports.modules={42910:(a,b,c)=>{c.d(b,{nJ:()=>o,NJ:()=>r,oh:()=>p,G6:()=>u,sm:()=>w,I8:()=>n,m1:()=>m,jX:()=>x,kB:()=>t});var d=c(87550),e=c.n(d),f=c(76760),g=c.n(f),h=c(73024),i=c.n(h),j=c(88189),k=c(73136);let l=function(){try{let a="file:///home/runner/work/OmniRoute/OmniRoute/src/lib/db/migrationRunner.ts";if(a&&a.startsWith("file://")){let b=(0,k.fileURLToPath)(a);return g().join(g().dirname(b),"migrations")}}catch{}return g().join(process.cwd(),"src","lib","db","migrations")}(),m="object"==typeof globalThis.caches&&null!==globalThis.caches,n="phase-production-build"===process.env.NEXT_PHASE,o=(0,j._3)({isCloud:m});m||(0,j.sm)();let p=m?null:g().join(o,"storage.sqlite"),q=m?null:g().join(o,"db.json"),r=m?null:g().join(o,"db_backups");if(!m&&!i().existsSync(o))try{i().mkdirSync(o,{recursive:!0})}catch(b){let a=b instanceof Error?b.message:String(b);console.warn(`[DB] Cannot create data directory '${o}': ${a}
1
+ "use strict";exports.id=2910,exports.ids=[2910],exports.modules={42910:(a,b,c)=>{c.d(b,{nJ:()=>o,NJ:()=>r,oh:()=>p,G6:()=>u,sm:()=>w,I8:()=>n,m1:()=>m,jX:()=>x,kB:()=>t});var d=c(87550),e=c.n(d),f=c(76760),g=c.n(f),h=c(73024),i=c.n(h),j=c(88189),k=c(73136);let l=function(){try{let a="file:///home/diegosouzapw/dev/proxys/9router/src/lib/db/migrationRunner.ts";if(a&&a.startsWith("file://")){let b=(0,k.fileURLToPath)(a);return g().join(g().dirname(b),"migrations")}}catch{}return g().join(process.cwd(),"src","lib","db","migrations")}(),m="object"==typeof globalThis.caches&&null!==globalThis.caches,n="phase-production-build"===process.env.NEXT_PHASE,o=(0,j._3)({isCloud:m});m||(0,j.sm)();let p=m?null:g().join(o,"storage.sqlite"),q=m?null:g().join(o,"db.json"),r=m?null:g().join(o,"db_backups");if(!m&&!i().existsSync(o))try{i().mkdirSync(o,{recursive:!0})}catch(b){let a=b instanceof Error?b.message:String(b);console.warn(`[DB] Cannot create data directory '${o}': ${a}
2
2
  [DB] Set the DATA_DIR environment variable to a writable path, e.g.:
3
3
  [DB] DATA_DIR=/path/to/writable/dir omniroute`)}let s=`
4
4
  CREATE TABLE IF NOT EXISTS provider_connections (
@@ -37,6 +37,7 @@
37
37
  consecutive_use_count INTEGER DEFAULT 0,
38
38
  rate_limit_protection INTEGER DEFAULT 0,
39
39
  last_used_at TEXT,
40
+ "group" TEXT,
40
41
  created_at TEXT NOT NULL,
41
42
  updated_at TEXT NOT NULL
42
43
  );
@@ -202,7 +203,7 @@
202
203
  );
203
204
  CREATE INDEX IF NOT EXISTS idx_sc_sig ON semantic_cache(signature);
204
205
  CREATE INDEX IF NOT EXISTS idx_sc_model ON semantic_cache(model);
205
- `;function t(a){if(!a)return null;let b={};for(let[c,d]of Object.entries(a)){let a=c.replace(/_([a-z])/g,(a,b)=>b.toUpperCase());if("isActive"===a||"rateLimitProtection"===a)b[a]=1===d||!0===d;else if("providerSpecificData"===a&&"string"==typeof d)try{b[a]=JSON.parse(d)}catch{b[a]=d}else b[a]=d}return b}function u(a){let b={};for(let[c,d]of Object.entries(a||{}))null!=d&&(b[c]=d);return b}let v=null;function w(){if(v)return v;if(m||n){n&&console.log("[DB] Build phase detected — using in-memory SQLite (read-only)");let a=new(e())(":memory:");return a.pragma("journal_mode = WAL"),a.exec(s),v=a,a}if(!p)throw Error("SQLITE_FILE is unavailable for local mode");if(i().existsSync(p))try{let a=new(e())(p,{readonly:!0});if(a.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='schema_migrations'").get()){let b=!1;try{let c=a.prepare("SELECT COUNT(*) as c FROM provider_connections").get();b=!!(c&&c.c>0)}catch{}if(a.close(),b){console.log(`[DB] Old schema_migrations table found but data exists — preserving data (#146)`);let a=new(e())(p);try{a.exec("DROP TABLE IF EXISTS schema_migrations"),a.pragma("wal_checkpoint(TRUNCATE)")}catch(b){let a=b instanceof Error?b.message:String(b);console.warn("[DB] Could not clean up old schema table:",a)}finally{a.close()}}else{let a=p+".old-schema";for(let b of(console.log(`[DB] Old incompatible schema detected (empty) — renaming to ${g().basename(a)}`),i().renameSync(p,a),["-wal","-shm"]))try{i().existsSync(p+b)&&i().unlinkSync(p+b)}catch{}}}else a.close()}catch(a){console.warn("[DB] Could not probe existing DB, will create fresh:",a instanceof Error?a.message:String(a));try{i().unlinkSync(p)}catch{}}let a=new(e())(p);a.pragma("journal_mode = WAL"),a.pragma("busy_timeout = 5000"),a.pragma("synchronous = NORMAL"),a.exec(s);try{let b=a.prepare("PRAGMA table_info(provider_connections)").all(),c=new Set(b.map(a=>String(a.name??"")));c.has("rate_limit_protection")||(a.exec("ALTER TABLE provider_connections ADD COLUMN rate_limit_protection INTEGER DEFAULT 0"),console.log("[DB] Added provider_connections.rate_limit_protection column")),c.has("last_used_at")||(a.exec("ALTER TABLE provider_connections ADD COLUMN last_used_at TEXT"),console.log("[DB] Added provider_connections.last_used_at column"))}catch(a){console.warn("[DB] Failed to verify provider_connections schema:",a instanceof Error?a.message:String(a))}return a.exec(`
206
+ `;function t(a){if(!a)return null;let b={};for(let[c,d]of Object.entries(a)){let a=c.replace(/_([a-z])/g,(a,b)=>b.toUpperCase());if("isActive"===a||"rateLimitProtection"===a)b[a]=1===d||!0===d;else if("providerSpecificData"===a&&"string"==typeof d)try{b[a]=JSON.parse(d)}catch{b[a]=d}else b[a]=d}return b}function u(a){let b={};for(let[c,d]of Object.entries(a||{}))null!=d&&(b[c]=d);return b}let v=null;function w(){if(v)return v;if(m||n){n&&console.log("[DB] Build phase detected — using in-memory SQLite (read-only)");let a=new(e())(":memory:");return a.pragma("journal_mode = WAL"),a.exec(s),v=a,a}if(!p)throw Error("SQLITE_FILE is unavailable for local mode");if(i().existsSync(p))try{let a=new(e())(p,{readonly:!0});if(a.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='schema_migrations'").get()){let b=!1;try{let c=a.prepare("SELECT COUNT(*) as c FROM provider_connections").get();b=!!(c&&c.c>0)}catch{}if(a.close(),b){console.log(`[DB] Old schema_migrations table found but data exists — preserving data (#146)`);let a=new(e())(p);try{a.exec("DROP TABLE IF EXISTS schema_migrations"),a.pragma("wal_checkpoint(TRUNCATE)")}catch(b){let a=b instanceof Error?b.message:String(b);console.warn("[DB] Could not clean up old schema table:",a)}finally{a.close()}}else{let a=p+".old-schema";for(let b of(console.log(`[DB] Old incompatible schema detected (empty) — renaming to ${g().basename(a)}`),i().renameSync(p,a),["-wal","-shm"]))try{i().existsSync(p+b)&&i().unlinkSync(p+b)}catch{}}}else a.close()}catch(a){console.warn("[DB] Could not probe existing DB, will create fresh:",a instanceof Error?a.message:String(a));try{i().unlinkSync(p)}catch{}}let a=new(e())(p);a.pragma("journal_mode = WAL"),a.pragma("busy_timeout = 5000"),a.pragma("synchronous = NORMAL"),a.exec(s);try{let b=a.prepare("PRAGMA table_info(provider_connections)").all(),c=new Set(b.map(a=>String(a.name??"")));c.has("rate_limit_protection")||(a.exec("ALTER TABLE provider_connections ADD COLUMN rate_limit_protection INTEGER DEFAULT 0"),console.log("[DB] Added provider_connections.rate_limit_protection column")),c.has("last_used_at")||(a.exec("ALTER TABLE provider_connections ADD COLUMN last_used_at TEXT"),console.log("[DB] Added provider_connections.last_used_at column")),c.has("group")||(a.exec('ALTER TABLE provider_connections ADD COLUMN "group" TEXT'),console.log('[DB] Added provider_connections."group" column'))}catch(a){console.warn("[DB] Failed to verify provider_connections schema:",a instanceof Error?a.message:String(a))}return a.exec(`
206
207
  CREATE TABLE IF NOT EXISTS _omniroute_migrations (
207
208
  version TEXT PRIMARY KEY,
208
209
  name TEXT NOT NULL,