omniroute 2.5.3 → 2.5.4

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 (670) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/app-path-routes-manifest.json +42 -42
  3. package/app/.next/build-manifest.json +3 -3
  4. package/app/.next/prerender-manifest.json +3 -3
  5. package/app/.next/required-server-files.json +3 -1
  6. package/app/.next/server/app/(dashboard)/dashboard/a2a/page.js +2 -2
  7. package/app/.next/server/app/(dashboard)/dashboard/a2a/page.js.nft.json +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/a2a/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/agents/page.js +2 -2
  10. package/app/.next/server/app/(dashboard)/dashboard/agents/page.js.nft.json +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/analytics/page.js +2 -2
  13. package/app/.next/server/app/(dashboard)/dashboard/analytics/page.js.nft.json +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page.js +2 -2
  16. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page.js.nft.json +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page.js +2 -2
  19. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page.js.nft.json +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page.js +2 -2
  22. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page.js.nft.json +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +4 -4
  25. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -2
  28. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/costs/page.js +2 -2
  31. package/app/.next/server/app/(dashboard)/dashboard/costs/page.js.nft.json +1 -1
  32. package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
  33. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  34. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  35. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/(dashboard)/dashboard/health/page.js +2 -2
  37. package/app/.next/server/app/(dashboard)/dashboard/health/page.js.nft.json +1 -1
  38. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/(dashboard)/dashboard/limits/page.js +2 -2
  40. package/app/.next/server/app/(dashboard)/dashboard/limits/page.js.nft.json +1 -1
  41. package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
  42. package/app/.next/server/app/(dashboard)/dashboard/logs/page.js +2 -2
  43. package/app/.next/server/app/(dashboard)/dashboard/logs/page.js.nft.json +1 -1
  44. package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  45. package/app/.next/server/app/(dashboard)/dashboard/mcp/page.js +2 -2
  46. package/app/.next/server/app/(dashboard)/dashboard/mcp/page.js.nft.json +1 -1
  47. package/app/.next/server/app/(dashboard)/dashboard/mcp/page_client-reference-manifest.js +1 -1
  48. package/app/.next/server/app/(dashboard)/dashboard/media/page.js +2 -2
  49. package/app/.next/server/app/(dashboard)/dashboard/media/page.js.nft.json +1 -1
  50. package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js +2 -2
  52. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js.nft.json +1 -1
  53. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
  55. package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  56. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/(dashboard)/dashboard/playground/page.js +3 -3
  58. package/app/.next/server/app/(dashboard)/dashboard/playground/page.js.nft.json +1 -1
  59. package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  60. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -2
  61. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  62. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  63. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  64. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  65. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  66. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
  67. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  68. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  69. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  70. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  71. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  72. package/app/.next/server/app/(dashboard)/dashboard/settings/page.js +2 -2
  73. package/app/.next/server/app/(dashboard)/dashboard/settings/page.js.nft.json +1 -1
  74. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  75. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page.js +2 -2
  76. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page.js.nft.json +1 -1
  77. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  78. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +3 -3
  79. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  80. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  81. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  82. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  83. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  84. package/app/.next/server/app/.well-known/agent.json/route.js +1 -1
  85. package/app/.next/server/app/.well-known/agent.json/route_client-reference-manifest.js +1 -1
  86. package/app/.next/server/app/400/page.js +2 -2
  87. package/app/.next/server/app/400/page.js.nft.json +1 -1
  88. package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
  89. package/app/.next/server/app/401/page.js +2 -2
  90. package/app/.next/server/app/401/page.js.nft.json +1 -1
  91. package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
  92. package/app/.next/server/app/403/page.js +2 -2
  93. package/app/.next/server/app/403/page.js.nft.json +1 -1
  94. package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
  95. package/app/.next/server/app/408/page.js +2 -2
  96. package/app/.next/server/app/408/page.js.nft.json +1 -1
  97. package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
  98. package/app/.next/server/app/429/page.js +2 -2
  99. package/app/.next/server/app/429/page.js.nft.json +1 -1
  100. package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
  101. package/app/.next/server/app/500/page.js +2 -2
  102. package/app/.next/server/app/500/page.js.nft.json +1 -1
  103. package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
  104. package/app/.next/server/app/502/page.js +2 -2
  105. package/app/.next/server/app/502/page.js.nft.json +1 -1
  106. package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
  107. package/app/.next/server/app/503/page.js +2 -2
  108. package/app/.next/server/app/503/page.js.nft.json +1 -1
  109. package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
  110. package/app/.next/server/app/_global-error/page.js +3 -3
  111. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  112. package/app/.next/server/app/_global-error.html +2 -2
  113. package/app/.next/server/app/_global-error.rsc +5 -5
  114. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +5 -5
  115. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  116. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  117. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  118. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +4 -4
  119. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  120. package/app/.next/server/app/_not-found/page.js +2 -2
  121. package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
  122. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  123. package/app/.next/server/app/a2a/route.js +2 -2
  124. package/app/.next/server/app/a2a/route_client-reference-manifest.js +1 -1
  125. package/app/.next/server/app/api/a2a/status/route.js +1 -1
  126. package/app/.next/server/app/api/a2a/status/route_client-reference-manifest.js +1 -1
  127. package/app/.next/server/app/api/a2a/tasks/[id]/cancel/route.js +1 -1
  128. package/app/.next/server/app/api/a2a/tasks/[id]/cancel/route_client-reference-manifest.js +1 -1
  129. package/app/.next/server/app/api/a2a/tasks/[id]/route.js +1 -1
  130. package/app/.next/server/app/api/a2a/tasks/[id]/route_client-reference-manifest.js +1 -1
  131. package/app/.next/server/app/api/a2a/tasks/route.js +1 -1
  132. package/app/.next/server/app/api/a2a/tasks/route_client-reference-manifest.js +1 -1
  133. package/app/.next/server/app/api/acp/agents/route.js +1 -1
  134. package/app/.next/server/app/api/acp/agents/route.js.nft.json +1 -1
  135. package/app/.next/server/app/api/acp/agents/route_client-reference-manifest.js +1 -1
  136. package/app/.next/server/app/api/auth/login/route.js +1 -1
  137. package/app/.next/server/app/api/auth/login/route.js.nft.json +1 -1
  138. package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  139. package/app/.next/server/app/api/auth/logout/route.js +1 -1
  140. package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  141. package/app/.next/server/app/api/auth/status/route.js +1 -1
  142. package/app/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  143. package/app/.next/server/app/api/cache/route.js +1 -1
  144. package/app/.next/server/app/api/cache/route.js.nft.json +1 -1
  145. package/app/.next/server/app/api/cache/route_client-reference-manifest.js +1 -1
  146. package/app/.next/server/app/api/cache/stats/route.js +1 -1
  147. package/app/.next/server/app/api/cache/stats/route_client-reference-manifest.js +1 -1
  148. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  149. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  150. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  151. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  152. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  153. package/app/.next/server/app/api/cli-tools/backups/route.js +2 -2
  154. package/app/.next/server/app/api/cli-tools/backups/route_client-reference-manifest.js +1 -1
  155. package/app/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
  156. package/app/.next/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  157. package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  158. package/app/.next/server/app/api/cli-tools/cline-settings/route.js +2 -2
  159. package/app/.next/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  160. package/app/.next/server/app/api/cli-tools/cline-settings/route_client-reference-manifest.js +1 -1
  161. package/app/.next/server/app/api/cli-tools/codex-profiles/route.js +2 -2
  162. package/app/.next/server/app/api/cli-tools/codex-profiles/route_client-reference-manifest.js +1 -1
  163. package/app/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
  164. package/app/.next/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  165. package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  166. package/app/.next/server/app/api/cli-tools/droid-settings/route.js +2 -2
  167. package/app/.next/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  168. package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  169. package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route.js +1 -1
  170. package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route_client-reference-manifest.js +1 -1
  171. package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  172. package/app/.next/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  173. package/app/.next/server/app/api/cli-tools/kilo-settings/route_client-reference-manifest.js +1 -1
  174. package/app/.next/server/app/api/cli-tools/openclaw/auto-order/route.js +1 -1
  175. package/app/.next/server/app/api/cli-tools/openclaw/auto-order/route_client-reference-manifest.js +1 -1
  176. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +1 -1
  177. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  178. package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  179. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route.js +2 -2
  180. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route_client-reference-manifest.js +1 -1
  181. package/app/.next/server/app/api/cli-tools/status/route.js +2 -2
  182. package/app/.next/server/app/api/cli-tools/status/route.js.nft.json +1 -1
  183. package/app/.next/server/app/api/cli-tools/status/route_client-reference-manifest.js +1 -1
  184. package/app/.next/server/app/api/cloud/auth/route.js +1 -1
  185. package/app/.next/server/app/api/cloud/auth/route.js.nft.json +1 -1
  186. package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
  187. package/app/.next/server/app/api/cloud/credentials/update/route.js +1 -1
  188. package/app/.next/server/app/api/cloud/credentials/update/route.js.nft.json +1 -1
  189. package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
  190. package/app/.next/server/app/api/cloud/model/resolve/route.js +1 -1
  191. package/app/.next/server/app/api/cloud/model/resolve/route.js.nft.json +1 -1
  192. package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
  193. package/app/.next/server/app/api/cloud/models/alias/route.js +1 -1
  194. package/app/.next/server/app/api/cloud/models/alias/route.js.nft.json +1 -1
  195. package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
  196. package/app/.next/server/app/api/combos/[id]/route.js +1 -1
  197. package/app/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
  198. package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
  199. package/app/.next/server/app/api/combos/auto/route.js +1 -1
  200. package/app/.next/server/app/api/combos/auto/route_client-reference-manifest.js +1 -1
  201. package/app/.next/server/app/api/combos/metrics/route.js +1 -1
  202. package/app/.next/server/app/api/combos/metrics/route_client-reference-manifest.js +1 -1
  203. package/app/.next/server/app/api/combos/route.js +1 -1
  204. package/app/.next/server/app/api/combos/route.js.nft.json +1 -1
  205. package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
  206. package/app/.next/server/app/api/combos/test/route.js +1 -1
  207. package/app/.next/server/app/api/combos/test/route.js.nft.json +1 -1
  208. package/app/.next/server/app/api/combos/test/route_client-reference-manifest.js +1 -1
  209. package/app/.next/server/app/api/compliance/audit-log/route.js +1 -1
  210. package/app/.next/server/app/api/compliance/audit-log/route.js.nft.json +1 -1
  211. package/app/.next/server/app/api/compliance/audit-log/route_client-reference-manifest.js +1 -1
  212. package/app/.next/server/app/api/db-backups/export/route.js +1 -1
  213. package/app/.next/server/app/api/db-backups/export/route.js.nft.json +1 -1
  214. package/app/.next/server/app/api/db-backups/export/route_client-reference-manifest.js +1 -1
  215. package/app/.next/server/app/api/db-backups/exportAll/route.js +1 -1
  216. package/app/.next/server/app/api/db-backups/exportAll/route.js.nft.json +1 -1
  217. package/app/.next/server/app/api/db-backups/exportAll/route_client-reference-manifest.js +1 -1
  218. package/app/.next/server/app/api/db-backups/import/route.js +1 -1
  219. package/app/.next/server/app/api/db-backups/import/route.js.nft.json +1 -1
  220. package/app/.next/server/app/api/db-backups/import/route_client-reference-manifest.js +1 -1
  221. package/app/.next/server/app/api/db-backups/route.js +1 -1
  222. package/app/.next/server/app/api/db-backups/route.js.nft.json +1 -1
  223. package/app/.next/server/app/api/db-backups/route_client-reference-manifest.js +1 -1
  224. package/app/.next/server/app/api/evals/[suiteId]/route.js +1 -1
  225. package/app/.next/server/app/api/evals/[suiteId]/route_client-reference-manifest.js +1 -1
  226. package/app/.next/server/app/api/evals/route.js +1 -1
  227. package/app/.next/server/app/api/evals/route_client-reference-manifest.js +1 -1
  228. package/app/.next/server/app/api/fallback/chains/route.js +2 -2
  229. package/app/.next/server/app/api/fallback/chains/route.js.nft.json +1 -1
  230. package/app/.next/server/app/api/fallback/chains/route_client-reference-manifest.js +1 -1
  231. package/app/.next/server/app/api/init/route.js +1 -1
  232. package/app/.next/server/app/api/init/route.js.nft.json +1 -1
  233. package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  234. package/app/.next/server/app/api/keys/[id]/route.js +1 -1
  235. package/app/.next/server/app/api/keys/[id]/route.js.nft.json +1 -1
  236. package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  237. package/app/.next/server/app/api/keys/route.js +1 -1
  238. package/app/.next/server/app/api/keys/route.js.nft.json +1 -1
  239. package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
  240. package/app/.next/server/app/api/logs/console/route.js +1 -1
  241. package/app/.next/server/app/api/logs/console/route_client-reference-manifest.js +1 -1
  242. package/app/.next/server/app/api/mcp/audit/route.js +2 -2
  243. package/app/.next/server/app/api/mcp/audit/route.js.nft.json +1 -1
  244. package/app/.next/server/app/api/mcp/audit/route_client-reference-manifest.js +1 -1
  245. package/app/.next/server/app/api/mcp/audit/stats/route.js +2 -2
  246. package/app/.next/server/app/api/mcp/audit/stats/route.js.nft.json +1 -1
  247. package/app/.next/server/app/api/mcp/audit/stats/route_client-reference-manifest.js +1 -1
  248. package/app/.next/server/app/api/mcp/sse/route.js +1 -1
  249. package/app/.next/server/app/api/mcp/sse/route.js.nft.json +1 -1
  250. package/app/.next/server/app/api/mcp/sse/route_client-reference-manifest.js +1 -1
  251. package/app/.next/server/app/api/mcp/status/route.js +1 -1
  252. package/app/.next/server/app/api/mcp/status/route.js.nft.json +1 -1
  253. package/app/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  254. package/app/.next/server/app/api/mcp/stream/route.js +1 -1
  255. package/app/.next/server/app/api/mcp/stream/route.js.nft.json +1 -1
  256. package/app/.next/server/app/api/mcp/stream/route_client-reference-manifest.js +1 -1
  257. package/app/.next/server/app/api/mcp/tools/route.js +1 -1
  258. package/app/.next/server/app/api/mcp/tools/route_client-reference-manifest.js +1 -1
  259. package/app/.next/server/app/api/models/alias/route.js +1 -1
  260. package/app/.next/server/app/api/models/alias/route.js.nft.json +1 -1
  261. package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  262. package/app/.next/server/app/api/models/availability/route.js +1 -1
  263. package/app/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -1
  264. package/app/.next/server/app/api/models/catalog/route.js +1 -1
  265. package/app/.next/server/app/api/models/catalog/route.js.nft.json +1 -1
  266. package/app/.next/server/app/api/models/catalog/route_client-reference-manifest.js +1 -1
  267. package/app/.next/server/app/api/models/openrouter-catalog/route.js +1 -1
  268. package/app/.next/server/app/api/models/openrouter-catalog/route.js.nft.json +1 -1
  269. package/app/.next/server/app/api/models/openrouter-catalog/route_client-reference-manifest.js +1 -1
  270. package/app/.next/server/app/api/models/route.js +1 -1
  271. package/app/.next/server/app/api/models/route.js.nft.json +1 -1
  272. package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  273. package/app/.next/server/app/api/monitoring/health/route.js +1 -1
  274. package/app/.next/server/app/api/monitoring/health/route.js.nft.json +1 -1
  275. package/app/.next/server/app/api/monitoring/health/route_client-reference-manifest.js +1 -1
  276. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  277. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  278. package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
  279. package/app/.next/server/app/api/oauth/cursor/auto-import/route.js +1 -1
  280. package/app/.next/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  281. package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
  282. package/app/.next/server/app/api/oauth/cursor/import/route.js +1 -1
  283. package/app/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  284. package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
  285. package/app/.next/server/app/api/oauth/kiro/auto-import/route.js +1 -1
  286. package/app/.next/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  287. package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
  288. package/app/.next/server/app/api/oauth/kiro/import/route.js +1 -1
  289. package/app/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  290. package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
  291. package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  292. package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
  293. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  294. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  295. package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
  296. package/app/.next/server/app/api/policies/route.js +2 -2
  297. package/app/.next/server/app/api/policies/route.js.nft.json +1 -1
  298. package/app/.next/server/app/api/policies/route_client-reference-manifest.js +1 -1
  299. package/app/.next/server/app/api/pricing/defaults/route.js +1 -1
  300. package/app/.next/server/app/api/pricing/defaults/route_client-reference-manifest.js +1 -1
  301. package/app/.next/server/app/api/pricing/models/route.js +1 -1
  302. package/app/.next/server/app/api/pricing/models/route.js.nft.json +1 -1
  303. package/app/.next/server/app/api/pricing/models/route_client-reference-manifest.js +1 -1
  304. package/app/.next/server/app/api/pricing/route.js +1 -1
  305. package/app/.next/server/app/api/pricing/route.js.nft.json +1 -1
  306. package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
  307. package/app/.next/server/app/api/pricing/sync/route.js +1 -1
  308. package/app/.next/server/app/api/pricing/sync/route.js.nft.json +1 -1
  309. package/app/.next/server/app/api/pricing/sync/route_client-reference-manifest.js +1 -1
  310. package/app/.next/server/app/api/provider-metrics/route.js +2 -2
  311. package/app/.next/server/app/api/provider-metrics/route.js.nft.json +1 -1
  312. package/app/.next/server/app/api/provider-metrics/route_client-reference-manifest.js +1 -1
  313. package/app/.next/server/app/api/provider-models/route.js +1 -1
  314. package/app/.next/server/app/api/provider-models/route.js.nft.json +1 -1
  315. package/app/.next/server/app/api/provider-models/route_client-reference-manifest.js +1 -1
  316. package/app/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
  317. package/app/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  318. package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
  319. package/app/.next/server/app/api/provider-nodes/route.js +2 -2
  320. package/app/.next/server/app/api/provider-nodes/route.js.nft.json +1 -1
  321. package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
  322. package/app/.next/server/app/api/provider-nodes/validate/route.js +1 -1
  323. package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
  324. package/app/.next/server/app/api/providers/[id]/models/route.js +1 -1
  325. package/app/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  326. package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
  327. package/app/.next/server/app/api/providers/[id]/refresh/route.js +1 -1
  328. package/app/.next/server/app/api/providers/[id]/refresh/route.js.nft.json +1 -1
  329. package/app/.next/server/app/api/providers/[id]/refresh/route_client-reference-manifest.js +1 -1
  330. package/app/.next/server/app/api/providers/[id]/route.js +1 -1
  331. package/app/.next/server/app/api/providers/[id]/route.js.nft.json +1 -1
  332. package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
  333. package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
  334. package/app/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  335. package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
  336. package/app/.next/server/app/api/providers/client/route.js +1 -1
  337. package/app/.next/server/app/api/providers/client/route.js.nft.json +1 -1
  338. package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  339. package/app/.next/server/app/api/providers/route.js +1 -1
  340. package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
  341. package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
  342. package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
  343. package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  344. package/app/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
  345. package/app/.next/server/app/api/providers/validate/route.js +1 -1
  346. package/app/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
  347. package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
  348. package/app/.next/server/app/api/rate-limit/route.js +1 -1
  349. package/app/.next/server/app/api/rate-limit/route_client-reference-manifest.js +1 -1
  350. package/app/.next/server/app/api/rate-limits/route.js +1 -1
  351. package/app/.next/server/app/api/rate-limits/route.js.nft.json +1 -1
  352. package/app/.next/server/app/api/rate-limits/route_client-reference-manifest.js +1 -1
  353. package/app/.next/server/app/api/resilience/reset/route.js +1 -1
  354. package/app/.next/server/app/api/resilience/reset/route.js.nft.json +1 -1
  355. package/app/.next/server/app/api/resilience/reset/route_client-reference-manifest.js +1 -1
  356. package/app/.next/server/app/api/resilience/route.js +1 -1
  357. package/app/.next/server/app/api/resilience/route.js.nft.json +1 -1
  358. package/app/.next/server/app/api/resilience/route_client-reference-manifest.js +1 -1
  359. package/app/.next/server/app/api/restart/route.js +1 -1
  360. package/app/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  361. package/app/.next/server/app/api/sessions/route.js +1 -1
  362. package/app/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  363. package/app/.next/server/app/api/settings/background-degradation/route.js +1 -1
  364. package/app/.next/server/app/api/settings/background-degradation/route.js.nft.json +1 -1
  365. package/app/.next/server/app/api/settings/background-degradation/route_client-reference-manifest.js +1 -1
  366. package/app/.next/server/app/api/settings/codex-service-tier/route.js +1 -1
  367. package/app/.next/server/app/api/settings/codex-service-tier/route.js.nft.json +1 -1
  368. package/app/.next/server/app/api/settings/codex-service-tier/route_client-reference-manifest.js +1 -1
  369. package/app/.next/server/app/api/settings/combo-defaults/route.js +1 -1
  370. package/app/.next/server/app/api/settings/combo-defaults/route.js.nft.json +1 -1
  371. package/app/.next/server/app/api/settings/combo-defaults/route_client-reference-manifest.js +1 -1
  372. package/app/.next/server/app/api/settings/ip-filter/route.js +1 -1
  373. package/app/.next/server/app/api/settings/ip-filter/route_client-reference-manifest.js +1 -1
  374. package/app/.next/server/app/api/settings/model-aliases/route.js +1 -1
  375. package/app/.next/server/app/api/settings/model-aliases/route.js.nft.json +1 -1
  376. package/app/.next/server/app/api/settings/model-aliases/route_client-reference-manifest.js +1 -1
  377. package/app/.next/server/app/api/settings/proxy/route.js +1 -1
  378. package/app/.next/server/app/api/settings/proxy/route.js.nft.json +1 -1
  379. package/app/.next/server/app/api/settings/proxy/route_client-reference-manifest.js +1 -1
  380. package/app/.next/server/app/api/settings/proxy/test/route.js +1 -1
  381. package/app/.next/server/app/api/settings/proxy/test/route_client-reference-manifest.js +1 -1
  382. package/app/.next/server/app/api/settings/require-login/route.js +1 -1
  383. package/app/.next/server/app/api/settings/require-login/route.js.nft.json +1 -1
  384. package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
  385. package/app/.next/server/app/api/settings/route.js +1 -1
  386. package/app/.next/server/app/api/settings/route.js.nft.json +1 -1
  387. package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  388. package/app/.next/server/app/api/settings/system-prompt/route.js +1 -1
  389. package/app/.next/server/app/api/settings/system-prompt/route.js.nft.json +1 -1
  390. package/app/.next/server/app/api/settings/system-prompt/route_client-reference-manifest.js +1 -1
  391. package/app/.next/server/app/api/settings/task-routing/route.js +1 -1
  392. package/app/.next/server/app/api/settings/task-routing/route.js.nft.json +1 -1
  393. package/app/.next/server/app/api/settings/task-routing/route_client-reference-manifest.js +1 -1
  394. package/app/.next/server/app/api/settings/thinking-budget/route.js +1 -1
  395. package/app/.next/server/app/api/settings/thinking-budget/route.js.nft.json +1 -1
  396. package/app/.next/server/app/api/settings/thinking-budget/route_client-reference-manifest.js +1 -1
  397. package/app/.next/server/app/api/shutdown/route.js +1 -1
  398. package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  399. package/app/.next/server/app/api/storage/health/route.js +1 -1
  400. package/app/.next/server/app/api/storage/health/route_client-reference-manifest.js +1 -1
  401. package/app/.next/server/app/api/sync/cloud/route.js +1 -1
  402. package/app/.next/server/app/api/sync/cloud/route.js.nft.json +1 -1
  403. package/app/.next/server/app/api/sync/cloud/route_client-reference-manifest.js +1 -1
  404. package/app/.next/server/app/api/sync/initialize/route.js +1 -1
  405. package/app/.next/server/app/api/sync/initialize/route.js.nft.json +1 -1
  406. package/app/.next/server/app/api/sync/initialize/route_client-reference-manifest.js +1 -1
  407. package/app/.next/server/app/api/tags/route.js +1 -1
  408. package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
  409. package/app/.next/server/app/api/telemetry/summary/route.js +1 -1
  410. package/app/.next/server/app/api/telemetry/summary/route_client-reference-manifest.js +1 -1
  411. package/app/.next/server/app/api/token-health/route.js +1 -1
  412. package/app/.next/server/app/api/token-health/route.js.nft.json +1 -1
  413. package/app/.next/server/app/api/token-health/route_client-reference-manifest.js +1 -1
  414. package/app/.next/server/app/api/translator/detect/route.js +1 -1
  415. package/app/.next/server/app/api/translator/detect/route_client-reference-manifest.js +1 -1
  416. package/app/.next/server/app/api/translator/history/route.js +1 -1
  417. package/app/.next/server/app/api/translator/history/route_client-reference-manifest.js +1 -1
  418. package/app/.next/server/app/api/translator/load/route.js +1 -1
  419. package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
  420. package/app/.next/server/app/api/translator/save/route.js +1 -1
  421. package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
  422. package/app/.next/server/app/api/translator/send/route.js +1 -1
  423. package/app/.next/server/app/api/translator/send/route.js.nft.json +1 -1
  424. package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
  425. package/app/.next/server/app/api/translator/translate/route.js +1 -1
  426. package/app/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
  427. package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
  428. package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  429. package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  430. package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
  431. package/app/.next/server/app/api/usage/analytics/route.js +1 -1
  432. package/app/.next/server/app/api/usage/analytics/route.js.nft.json +1 -1
  433. package/app/.next/server/app/api/usage/analytics/route_client-reference-manifest.js +1 -1
  434. package/app/.next/server/app/api/usage/budget/route.js +2 -2
  435. package/app/.next/server/app/api/usage/budget/route.js.nft.json +1 -1
  436. package/app/.next/server/app/api/usage/budget/route_client-reference-manifest.js +1 -1
  437. package/app/.next/server/app/api/usage/call-logs/[id]/route.js +1 -1
  438. package/app/.next/server/app/api/usage/call-logs/[id]/route.js.nft.json +1 -1
  439. package/app/.next/server/app/api/usage/call-logs/[id]/route_client-reference-manifest.js +1 -1
  440. package/app/.next/server/app/api/usage/call-logs/route.js +1 -1
  441. package/app/.next/server/app/api/usage/call-logs/route.js.nft.json +1 -1
  442. package/app/.next/server/app/api/usage/call-logs/route_client-reference-manifest.js +1 -1
  443. package/app/.next/server/app/api/usage/history/route.js +1 -1
  444. package/app/.next/server/app/api/usage/history/route.js.nft.json +1 -1
  445. package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
  446. package/app/.next/server/app/api/usage/logs/route.js +1 -1
  447. package/app/.next/server/app/api/usage/logs/route.js.nft.json +1 -1
  448. package/app/.next/server/app/api/usage/logs/route_client-reference-manifest.js +1 -1
  449. package/app/.next/server/app/api/usage/proxy-logs/route.js +1 -1
  450. package/app/.next/server/app/api/usage/proxy-logs/route.js.nft.json +1 -1
  451. package/app/.next/server/app/api/usage/proxy-logs/route_client-reference-manifest.js +1 -1
  452. package/app/.next/server/app/api/usage/quota/route.js +1 -1
  453. package/app/.next/server/app/api/usage/quota/route.js.nft.json +1 -1
  454. package/app/.next/server/app/api/usage/quota/route_client-reference-manifest.js +1 -1
  455. package/app/.next/server/app/api/usage/request-logs/route.js +1 -1
  456. package/app/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  457. package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
  458. package/app/.next/server/app/api/v1/api/chat/route.js +1 -1
  459. package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  460. package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
  461. package/app/.next/server/app/api/v1/audio/speech/route.js +1 -1
  462. package/app/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  463. package/app/.next/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -1
  464. package/app/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
  465. package/app/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  466. package/app/.next/server/app/api/v1/audio/transcriptions/route_client-reference-manifest.js +1 -1
  467. package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
  468. package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  469. package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
  470. package/app/.next/server/app/api/v1/completions/route.js +1 -1
  471. package/app/.next/server/app/api/v1/completions/route.js.nft.json +1 -1
  472. package/app/.next/server/app/api/v1/completions/route_client-reference-manifest.js +1 -1
  473. package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
  474. package/app/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  475. package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
  476. package/app/.next/server/app/api/v1/images/generations/route.js +1 -1
  477. package/app/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  478. package/app/.next/server/app/api/v1/images/generations/route_client-reference-manifest.js +1 -1
  479. package/app/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
  480. package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
  481. package/app/.next/server/app/api/v1/messages/route.js +1 -1
  482. package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
  483. package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
  484. package/app/.next/server/app/api/v1/models/route.js +1 -1
  485. package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
  486. package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
  487. package/app/.next/server/app/api/v1/moderations/route.js +1 -1
  488. package/app/.next/server/app/api/v1/moderations/route.js.nft.json +1 -1
  489. package/app/.next/server/app/api/v1/moderations/route_client-reference-manifest.js +1 -1
  490. package/app/.next/server/app/api/v1/music/generations/route.js +1 -1
  491. package/app/.next/server/app/api/v1/music/generations/route.js.nft.json +1 -1
  492. package/app/.next/server/app/api/v1/music/generations/route_client-reference-manifest.js +1 -1
  493. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js +1 -1
  494. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js.nft.json +1 -1
  495. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route_client-reference-manifest.js +1 -1
  496. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js +1 -1
  497. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js.nft.json +1 -1
  498. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route_client-reference-manifest.js +1 -1
  499. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js +1 -1
  500. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js.nft.json +1 -1
  501. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route_client-reference-manifest.js +1 -1
  502. package/app/.next/server/app/api/v1/rerank/route.js +1 -1
  503. package/app/.next/server/app/api/v1/rerank/route.js.nft.json +1 -1
  504. package/app/.next/server/app/api/v1/rerank/route_client-reference-manifest.js +1 -1
  505. package/app/.next/server/app/api/v1/responses/route.js +1 -1
  506. package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
  507. package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
  508. package/app/.next/server/app/api/v1/route.js +1 -1
  509. package/app/.next/server/app/api/v1/route.js.nft.json +1 -1
  510. package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
  511. package/app/.next/server/app/api/v1/videos/generations/route.js +1 -1
  512. package/app/.next/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
  513. package/app/.next/server/app/api/v1/videos/generations/route_client-reference-manifest.js +1 -1
  514. package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
  515. package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  516. package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
  517. package/app/.next/server/app/api/v1beta/models/route.js +1 -1
  518. package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
  519. package/app/.next/server/app/callback/page.js +2 -2
  520. package/app/.next/server/app/callback/page.js.nft.json +1 -1
  521. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  522. package/app/.next/server/app/docs/page.js +3 -3
  523. package/app/.next/server/app/docs/page.js.nft.json +1 -1
  524. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  525. package/app/.next/server/app/forbidden/page.js +2 -2
  526. package/app/.next/server/app/forbidden/page.js.nft.json +1 -1
  527. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  528. package/app/.next/server/app/forgot-password/page.js +2 -2
  529. package/app/.next/server/app/forgot-password/page.js.nft.json +1 -1
  530. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  531. package/app/.next/server/app/landing/page.js +2 -2
  532. package/app/.next/server/app/landing/page.js.nft.json +1 -1
  533. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  534. package/app/.next/server/app/login/page.js +2 -2
  535. package/app/.next/server/app/login/page.js.nft.json +1 -1
  536. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  537. package/app/.next/server/app/maintenance/page.js +2 -2
  538. package/app/.next/server/app/maintenance/page.js.nft.json +1 -1
  539. package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
  540. package/app/.next/server/app/offline/page.js +2 -2
  541. package/app/.next/server/app/offline/page.js.nft.json +1 -1
  542. package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  543. package/app/.next/server/app/page.js +2 -2
  544. package/app/.next/server/app/page.js.nft.json +1 -1
  545. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  546. package/app/.next/server/app/privacy/page.js +2 -2
  547. package/app/.next/server/app/privacy/page.js.nft.json +1 -1
  548. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  549. package/app/.next/server/app/status/page.js +2 -2
  550. package/app/.next/server/app/status/page.js.nft.json +1 -1
  551. package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
  552. package/app/.next/server/app/terms/page.js +2 -2
  553. package/app/.next/server/app/terms/page.js.nft.json +1 -1
  554. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  555. package/app/.next/server/app-paths-manifest.json +42 -42
  556. package/app/.next/server/chunks/242.js +1 -1
  557. package/app/.next/server/chunks/2910.js +1 -1
  558. package/app/.next/server/chunks/3648.js +2 -2
  559. package/app/.next/server/chunks/438.js +1 -1
  560. package/app/.next/server/chunks/4488.js +1 -1
  561. package/app/.next/server/chunks/5248.js +1 -0
  562. package/app/.next/server/chunks/5979.js +1 -1
  563. package/app/.next/server/chunks/6743.js +1 -1
  564. package/app/.next/server/chunks/7109.js +1 -1
  565. package/app/.next/server/chunks/7327.js +1 -1
  566. package/app/.next/server/chunks/7889.js +2 -0
  567. package/app/.next/server/chunks/8020.js +3 -3
  568. package/app/.next/server/chunks/9548.js +1 -1
  569. package/app/.next/server/middleware-build-manifest.js +1 -1
  570. package/app/.next/server/middleware.js +2 -2
  571. package/app/.next/server/next-font-manifest.js +1 -1
  572. package/app/.next/server/next-font-manifest.json +1 -1
  573. package/app/.next/server/pages/500.html +2 -2
  574. package/app/.next/server/server-reference-manifest.js +1 -1
  575. package/app/.next/server/server-reference-manifest.json +1 -1
  576. package/app/.next/static/chunks/{5846-63e1f1f0bd63a6ad.js → 5846-df4fe851d063cfee.js} +1 -1
  577. package/app/.next/static/chunks/{647-bf8bc535ac3648d0.js → 647-62acab8e8736396d.js} +2 -2
  578. package/app/.next/static/chunks/app/(dashboard)/dashboard/a2a/page-43d6fa6b75cca497.js +1 -0
  579. package/app/.next/static/chunks/app/(dashboard)/dashboard/agents/{page-576b27a05c09fba5.js → page-94aa33336637e74c.js} +1 -1
  580. package/app/.next/static/chunks/app/(dashboard)/dashboard/analytics/loading-49ae846d72948391.js +1 -0
  581. package/app/.next/static/chunks/app/(dashboard)/dashboard/analytics/{page-6ab7701da3357bb9.js → page-bef5c045e7eae657.js} +1 -1
  582. package/app/.next/static/chunks/app/(dashboard)/dashboard/api-manager/page-71f65a8c11e24ee8.js +1 -0
  583. package/app/.next/static/chunks/app/(dashboard)/dashboard/audit-log/page-e5bf8955e7b9a4f5.js +1 -0
  584. package/app/.next/static/chunks/app/(dashboard)/dashboard/auto-combo/{page-799e2f96e9af3fd9.js → page-fbf2315ef6ecc87a.js} +1 -1
  585. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-1d9c62ff735ac65a.js +15 -0
  586. package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-4e4d823fdc8705f5.js +1 -0
  587. package/app/.next/static/chunks/app/(dashboard)/dashboard/costs/{page-8f6233f59f5277e9.js → page-7a233357dfbd2e05.js} +1 -1
  588. package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-81a6632af8c82919.js +1 -0
  589. package/app/.next/static/chunks/app/(dashboard)/dashboard/health/{page-1e1eb2f79d606ab2.js → page-66ee4e631429e0d8.js} +1 -1
  590. package/app/.next/static/chunks/app/(dashboard)/dashboard/limits/page-5ace323bdf990976.js +1 -0
  591. package/app/.next/static/chunks/app/(dashboard)/dashboard/logs/{page-2d456b7ddbf3d41e.js → page-f08daa44ccbeb258.js} +1 -1
  592. package/app/.next/static/chunks/app/(dashboard)/dashboard/mcp/page-8e35334b9f393139.js +1 -0
  593. package/app/.next/static/chunks/app/(dashboard)/dashboard/media/page-4e1629fc8404b3b9.js +1 -0
  594. package/app/.next/static/chunks/app/(dashboard)/dashboard/onboarding/{page-5378e9473a20cd6a.js → page-d424641c7e428be9.js} +1 -1
  595. package/app/.next/static/chunks/app/(dashboard)/dashboard/{page-799001b6cea7d5bc.js → page-fc5b6d46662747df.js} +1 -1
  596. package/app/.next/static/chunks/app/(dashboard)/dashboard/playground/{page-0fff47edc56250ea.js → page-6d988d37ce3b0e60.js} +1 -1
  597. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-f248c93328119230.js +1 -0
  598. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/{error-a5ae03ba05400b04.js → error-0400f175dd1372fa.js} +1 -1
  599. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/loading-9552383fd2e11282.js +1 -0
  600. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-d57908b59d4b482c.js +1 -0
  601. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/{page-fbf74ae2f3206efe.js → page-adbd858f2a6cd352.js} +1 -1
  602. package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/{error-ec9643134a96bbcd.js → error-c39d18f10fb7d3f6.js} +1 -1
  603. package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/{loading-3519a633b514f31a.js → loading-b5faf05c78a2cc54.js} +1 -1
  604. package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/page-28ee6d0fc27b6ffe.js +1 -0
  605. package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/pricing/{page-aab023f14c6ff966.js → page-0325206d05e6f375.js} +1 -1
  606. package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/{page-8d6f629e0e29e796.js → page-f761c3ff75d56636.js} +2 -2
  607. package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-9e20463252daf023.js +1 -0
  608. package/app/.next/static/chunks/app/(dashboard)/{layout-7ae0c66c22bee8a1.js → layout-6d0afc53f5f2a538.js} +1 -1
  609. package/app/.next/static/chunks/app/400/{page-3b9079ea400ca287.js → page-3b77bf358909019a.js} +1 -1
  610. package/app/.next/static/chunks/app/401/{page-3b9079ea400ca287.js → page-3b77bf358909019a.js} +1 -1
  611. package/app/.next/static/chunks/app/403/{page-3b9079ea400ca287.js → page-3b77bf358909019a.js} +1 -1
  612. package/app/.next/static/chunks/app/408/{page-3b9079ea400ca287.js → page-3b77bf358909019a.js} +1 -1
  613. package/app/.next/static/chunks/app/429/page-3b77bf358909019a.js +1 -0
  614. package/app/.next/static/chunks/app/500/page-3b77bf358909019a.js +1 -0
  615. package/app/.next/static/chunks/app/502/page-3b77bf358909019a.js +1 -0
  616. package/app/.next/static/chunks/app/503/page-3b77bf358909019a.js +1 -0
  617. package/app/.next/static/chunks/app/callback/{page-0f0ebc0820dd18a5.js → page-585a53f7dc6a30f1.js} +1 -1
  618. package/app/.next/static/chunks/app/docs/{page-dc88e0a01d291518.js → page-9624e5fb8cabf7d8.js} +1 -1
  619. package/app/.next/static/chunks/app/{error-32c03f14529d3920.js → error-f7f595c541537e63.js} +1 -1
  620. package/app/.next/static/chunks/app/forbidden/page-b33079c1573b0bfa.js +1 -0
  621. package/app/.next/static/chunks/app/forgot-password/page-90cd6259c75badfc.js +1 -0
  622. package/app/.next/static/chunks/app/global-error-1dfd1c91ad5199fe.js +1 -0
  623. package/app/.next/static/chunks/app/landing/page-90df98c27fe0b5d9.js +1 -0
  624. package/app/.next/static/chunks/app/{layout-070972eb026af319.js → layout-108592eafb959363.js} +1 -1
  625. package/app/.next/static/chunks/app/{loading-da2f6e1471afc070.js → loading-e063375d5b12a2f7.js} +1 -1
  626. package/app/.next/static/chunks/app/login/page-c5dc0a31f8dc566f.js +1 -0
  627. package/app/.next/static/chunks/app/maintenance/page-3b77bf358909019a.js +1 -0
  628. package/app/.next/static/chunks/app/not-found-511518956bcae7bc.js +1 -0
  629. package/app/.next/static/chunks/app/offline/page-9d6ea493783a0219.js +1 -0
  630. package/app/.next/static/chunks/app/privacy/{page-dc88e0a01d291518.js → page-9624e5fb8cabf7d8.js} +1 -1
  631. package/app/.next/static/chunks/app/status/page-4e5e9b5a513aa474.js +1 -0
  632. package/app/.next/static/chunks/app/terms/{page-dc88e0a01d291518.js → page-9624e5fb8cabf7d8.js} +1 -1
  633. package/app/.next/static/chunks/{main-app-ae230f6bf51a5edb.js → main-app-c9da11a8061df107.js} +1 -1
  634. package/app/package.json +1 -1
  635. package/app/server.js +1 -1
  636. package/package.json +1 -1
  637. package/app/.env +0 -122
  638. package/app/.next/server/chunks/1909.js +0 -2
  639. package/app/.next/server/chunks/7167.js +0 -1
  640. package/app/.next/static/chunks/app/(dashboard)/dashboard/a2a/page-ed1f5b1ae0e01c02.js +0 -1
  641. package/app/.next/static/chunks/app/(dashboard)/dashboard/analytics/loading-6a2bb3ad980b05b9.js +0 -1
  642. package/app/.next/static/chunks/app/(dashboard)/dashboard/api-manager/page-8ee341b662a845dc.js +0 -1
  643. package/app/.next/static/chunks/app/(dashboard)/dashboard/audit-log/page-c9b98846b8479f3f.js +0 -1
  644. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-3c3f3b0b558e9302.js +0 -15
  645. package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-3ed193e882fc0438.js +0 -1
  646. package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-8b96e2f6d76d6f2d.js +0 -1
  647. package/app/.next/static/chunks/app/(dashboard)/dashboard/limits/page-ddce876357cb3ada.js +0 -1
  648. package/app/.next/static/chunks/app/(dashboard)/dashboard/mcp/page-d9b5c3282ec5d809.js +0 -1
  649. package/app/.next/static/chunks/app/(dashboard)/dashboard/media/page-5ed5bdc9e926936c.js +0 -1
  650. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-389538ee27f0e405.js +0 -1
  651. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/loading-7deaa9f550841465.js +0 -1
  652. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-3ef302da4b756e50.js +0 -1
  653. package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/page-df62bcc49944269c.js +0 -1
  654. package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-8c8f2d59d0cbb516.js +0 -1
  655. package/app/.next/static/chunks/app/429/page-3b9079ea400ca287.js +0 -1
  656. package/app/.next/static/chunks/app/500/page-3b9079ea400ca287.js +0 -1
  657. package/app/.next/static/chunks/app/502/page-3b9079ea400ca287.js +0 -1
  658. package/app/.next/static/chunks/app/503/page-3b9079ea400ca287.js +0 -1
  659. package/app/.next/static/chunks/app/forbidden/page-8d8e1709a1e32585.js +0 -1
  660. package/app/.next/static/chunks/app/forgot-password/page-d5c9b77748aa9deb.js +0 -1
  661. package/app/.next/static/chunks/app/global-error-5840b1caa830f2ec.js +0 -1
  662. package/app/.next/static/chunks/app/landing/page-8f652c1fbc33efd2.js +0 -1
  663. package/app/.next/static/chunks/app/login/page-26d717c652d56032.js +0 -1
  664. package/app/.next/static/chunks/app/maintenance/page-3b9079ea400ca287.js +0 -1
  665. package/app/.next/static/chunks/app/not-found-faf36d2a9a452506.js +0 -1
  666. package/app/.next/static/chunks/app/offline/page-bf68bf461af876a3.js +0 -1
  667. package/app/.next/static/chunks/app/status/page-29a433b40631ce12.js +0 -1
  668. package/app/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
  669. /package/app/.next/static/{O9lSHUzWYvY1bYZSFuKAJ → qGXBolOylWgE1zjkbpj9E}/_buildManifest.js +0 -0
  670. /package/app/.next/static/{O9lSHUzWYvY1bYZSFuKAJ → qGXBolOylWgE1zjkbpj9E}/_ssgManifest.js +0 -0
@@ -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/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)
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)
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/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}
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}
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 (