omniroute 1.0.0 → 1.0.1

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 (426) hide show
  1. package/README.de.md +5 -5
  2. package/README.es.md +5 -5
  3. package/README.fr.md +5 -5
  4. package/README.it.md +5 -5
  5. package/README.md +1 -1
  6. package/README.pt-BR.md +1 -1
  7. package/README.ru.md +5 -5
  8. package/README.zh-CN.md +5 -5
  9. package/app/.next/BUILD_ID +1 -1
  10. package/app/.next/app-path-routes-manifest.json +36 -36
  11. package/app/.next/build-manifest.json +2 -2
  12. package/app/.next/prerender-manifest.json +3 -3
  13. package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  31. package/app/.next/server/app/_global-error.html +2 -2
  32. package/app/.next/server/app/_global-error.rsc +1 -1
  33. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  34. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  35. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  36. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  37. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  38. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  39. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  40. package/app/.next/server/app/_not-found.html +1 -1
  41. package/app/.next/server/app/_not-found.rsc +2 -2
  42. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  43. package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  44. package/app/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  45. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  46. package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  47. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  48. package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  49. package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  50. package/app/.next/server/app/api/cache/route_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/api/cache/stats/route_client-reference-manifest.js +1 -1
  52. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  53. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +2 -2
  55. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/api/cli-tools/backups/route.js +1 -1
  57. package/app/.next/server/app/api/cli-tools/backups/route_client-reference-manifest.js +1 -1
  58. package/app/.next/server/app/api/cli-tools/claude-settings/route.js +1 -1
  59. package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  60. package/app/.next/server/app/api/cli-tools/cline-settings/route.js +2 -2
  61. package/app/.next/server/app/api/cli-tools/cline-settings/route_client-reference-manifest.js +1 -1
  62. package/app/.next/server/app/api/cli-tools/codex-profiles/route.js +1 -1
  63. package/app/.next/server/app/api/cli-tools/codex-profiles/route_client-reference-manifest.js +1 -1
  64. package/app/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
  65. package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  66. package/app/.next/server/app/api/cli-tools/droid-settings/route.js +2 -2
  67. package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  68. package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route_client-reference-manifest.js +1 -1
  69. package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  70. package/app/.next/server/app/api/cli-tools/kilo-settings/route_client-reference-manifest.js +1 -1
  71. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +1 -1
  72. package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  73. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route.js +2 -2
  74. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route_client-reference-manifest.js +1 -1
  75. package/app/.next/server/app/api/cli-tools/status/route.js +2 -2
  76. package/app/.next/server/app/api/cli-tools/status/route_client-reference-manifest.js +1 -1
  77. package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
  78. package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
  79. package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
  80. package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
  81. package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
  82. package/app/.next/server/app/api/combos/metrics/route_client-reference-manifest.js +1 -1
  83. package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
  84. package/app/.next/server/app/api/combos/test/route_client-reference-manifest.js +1 -1
  85. package/app/.next/server/app/api/compliance/audit-log/route_client-reference-manifest.js +1 -1
  86. package/app/.next/server/app/api/db-backups/export/route_client-reference-manifest.js +1 -1
  87. package/app/.next/server/app/api/db-backups/exportAll/route_client-reference-manifest.js +1 -1
  88. package/app/.next/server/app/api/db-backups/import/route_client-reference-manifest.js +1 -1
  89. package/app/.next/server/app/api/db-backups/route_client-reference-manifest.js +1 -1
  90. package/app/.next/server/app/api/evals/[suiteId]/route_client-reference-manifest.js +1 -1
  91. package/app/.next/server/app/api/evals/route_client-reference-manifest.js +1 -1
  92. package/app/.next/server/app/api/fallback/chains/route_client-reference-manifest.js +1 -1
  93. package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  94. package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  95. package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
  96. package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  97. package/app/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -1
  98. package/app/.next/server/app/api/models/catalog/route_client-reference-manifest.js +1 -1
  99. package/app/.next/server/app/api/models/route.js +1 -1
  100. package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  101. package/app/.next/server/app/api/monitoring/health/route.js +1 -1
  102. package/app/.next/server/app/api/monitoring/health/route_client-reference-manifest.js +1 -1
  103. package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
  104. package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
  105. package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
  106. package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
  107. package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
  108. package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
  109. package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
  110. package/app/.next/server/app/api/policies/route_client-reference-manifest.js +1 -1
  111. package/app/.next/server/app/api/pricing/defaults/route_client-reference-manifest.js +1 -1
  112. package/app/.next/server/app/api/pricing/models/route_client-reference-manifest.js +1 -1
  113. package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
  114. package/app/.next/server/app/api/provider-metrics/route_client-reference-manifest.js +1 -1
  115. package/app/.next/server/app/api/provider-models/route_client-reference-manifest.js +1 -1
  116. package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
  117. package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
  118. package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
  119. package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
  120. package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
  121. package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
  122. package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  123. package/app/.next/server/app/api/providers/route.js +1 -1
  124. package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
  125. package/app/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
  126. package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
  127. package/app/.next/server/app/api/rate-limit/route_client-reference-manifest.js +1 -1
  128. package/app/.next/server/app/api/rate-limits/route_client-reference-manifest.js +1 -1
  129. package/app/.next/server/app/api/resilience/reset/route_client-reference-manifest.js +1 -1
  130. package/app/.next/server/app/api/resilience/route_client-reference-manifest.js +1 -1
  131. package/app/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  132. package/app/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  133. package/app/.next/server/app/api/settings/combo-defaults/route_client-reference-manifest.js +1 -1
  134. package/app/.next/server/app/api/settings/ip-filter/route_client-reference-manifest.js +1 -1
  135. package/app/.next/server/app/api/settings/proxy/route_client-reference-manifest.js +1 -1
  136. package/app/.next/server/app/api/settings/proxy/test/route_client-reference-manifest.js +1 -1
  137. package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
  138. package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  139. package/app/.next/server/app/api/settings/system-prompt/route_client-reference-manifest.js +1 -1
  140. package/app/.next/server/app/api/settings/thinking-budget/route_client-reference-manifest.js +1 -1
  141. package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  142. package/app/.next/server/app/api/storage/health/route_client-reference-manifest.js +1 -1
  143. package/app/.next/server/app/api/sync/cloud/route_client-reference-manifest.js +1 -1
  144. package/app/.next/server/app/api/sync/initialize/route_client-reference-manifest.js +1 -1
  145. package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
  146. package/app/.next/server/app/api/telemetry/summary/route_client-reference-manifest.js +1 -1
  147. package/app/.next/server/app/api/token-health/route_client-reference-manifest.js +1 -1
  148. package/app/.next/server/app/api/translator/detect/route_client-reference-manifest.js +1 -1
  149. package/app/.next/server/app/api/translator/history/route_client-reference-manifest.js +1 -1
  150. package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
  151. package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
  152. package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
  153. package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
  154. package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
  155. package/app/.next/server/app/api/usage/analytics/route_client-reference-manifest.js +1 -1
  156. package/app/.next/server/app/api/usage/budget/route_client-reference-manifest.js +1 -1
  157. package/app/.next/server/app/api/usage/call-logs/[id]/route_client-reference-manifest.js +1 -1
  158. package/app/.next/server/app/api/usage/call-logs/route_client-reference-manifest.js +1 -1
  159. package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
  160. package/app/.next/server/app/api/usage/logs/route_client-reference-manifest.js +1 -1
  161. package/app/.next/server/app/api/usage/proxy-logs/route_client-reference-manifest.js +1 -1
  162. package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
  163. package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
  164. package/app/.next/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -1
  165. package/app/.next/server/app/api/v1/audio/transcriptions/route_client-reference-manifest.js +1 -1
  166. package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
  167. package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
  168. package/app/.next/server/app/api/v1/images/generations/route_client-reference-manifest.js +1 -1
  169. package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
  170. package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
  171. package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
  172. package/app/.next/server/app/api/v1/moderations/route_client-reference-manifest.js +1 -1
  173. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route_client-reference-manifest.js +1 -1
  174. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route_client-reference-manifest.js +1 -1
  175. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route_client-reference-manifest.js +1 -1
  176. package/app/.next/server/app/api/v1/rerank/route_client-reference-manifest.js +1 -1
  177. package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
  178. package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
  179. package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
  180. package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
  181. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  182. package/app/.next/server/app/callback.html +1 -1
  183. package/app/.next/server/app/callback.rsc +2 -2
  184. package/app/.next/server/app/callback.segments/_full.segment.rsc +2 -2
  185. package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
  186. package/app/.next/server/app/callback.segments/_index.segment.rsc +2 -2
  187. package/app/.next/server/app/callback.segments/_tree.segment.rsc +1 -1
  188. package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  189. package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
  190. package/app/.next/server/app/dashboard/analytics.html +1 -1
  191. package/app/.next/server/app/dashboard/analytics.rsc +4 -4
  192. package/app/.next/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics/__PAGE__.segment.rsc +2 -2
  193. package/app/.next/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics.segment.rsc +1 -1
  194. package/app/.next/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  195. package/app/.next/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  196. package/app/.next/server/app/dashboard/analytics.segments/_full.segment.rsc +4 -4
  197. package/app/.next/server/app/dashboard/analytics.segments/_head.segment.rsc +1 -1
  198. package/app/.next/server/app/dashboard/analytics.segments/_index.segment.rsc +2 -2
  199. package/app/.next/server/app/dashboard/analytics.segments/_tree.segment.rsc +1 -1
  200. package/app/.next/server/app/dashboard/cli-tools.html +1 -1
  201. package/app/.next/server/app/dashboard/cli-tools.rsc +4 -4
  202. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  203. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  204. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  205. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  206. package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +4 -4
  207. package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  208. package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +2 -2
  209. package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  210. package/app/.next/server/app/dashboard/combos.html +1 -1
  211. package/app/.next/server/app/dashboard/combos.rsc +4 -4
  212. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  213. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  214. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  215. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  216. package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +4 -4
  217. package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  218. package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +2 -2
  219. package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  220. package/app/.next/server/app/dashboard/costs.html +1 -1
  221. package/app/.next/server/app/dashboard/costs.rsc +4 -4
  222. package/app/.next/server/app/dashboard/costs.segments/!KGRhc2hib2FyZCk/dashboard/costs/__PAGE__.segment.rsc +2 -2
  223. package/app/.next/server/app/dashboard/costs.segments/!KGRhc2hib2FyZCk/dashboard/costs.segment.rsc +1 -1
  224. package/app/.next/server/app/dashboard/costs.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  225. package/app/.next/server/app/dashboard/costs.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  226. package/app/.next/server/app/dashboard/costs.segments/_full.segment.rsc +4 -4
  227. package/app/.next/server/app/dashboard/costs.segments/_head.segment.rsc +1 -1
  228. package/app/.next/server/app/dashboard/costs.segments/_index.segment.rsc +2 -2
  229. package/app/.next/server/app/dashboard/costs.segments/_tree.segment.rsc +1 -1
  230. package/app/.next/server/app/dashboard/endpoint.html +1 -1
  231. package/app/.next/server/app/dashboard/endpoint.rsc +4 -4
  232. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  233. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  234. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  235. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  236. package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +4 -4
  237. package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  238. package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +2 -2
  239. package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  240. package/app/.next/server/app/dashboard/health.html +1 -1
  241. package/app/.next/server/app/dashboard/health.rsc +4 -4
  242. package/app/.next/server/app/dashboard/health.segments/!KGRhc2hib2FyZCk/dashboard/health/__PAGE__.segment.rsc +2 -2
  243. package/app/.next/server/app/dashboard/health.segments/!KGRhc2hib2FyZCk/dashboard/health.segment.rsc +1 -1
  244. package/app/.next/server/app/dashboard/health.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  245. package/app/.next/server/app/dashboard/health.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  246. package/app/.next/server/app/dashboard/health.segments/_full.segment.rsc +4 -4
  247. package/app/.next/server/app/dashboard/health.segments/_head.segment.rsc +1 -1
  248. package/app/.next/server/app/dashboard/health.segments/_index.segment.rsc +2 -2
  249. package/app/.next/server/app/dashboard/health.segments/_tree.segment.rsc +1 -1
  250. package/app/.next/server/app/dashboard/limits.html +2 -2
  251. package/app/.next/server/app/dashboard/limits.rsc +4 -4
  252. package/app/.next/server/app/dashboard/limits.segments/!KGRhc2hib2FyZCk/dashboard/limits/__PAGE__.segment.rsc +2 -2
  253. package/app/.next/server/app/dashboard/limits.segments/!KGRhc2hib2FyZCk/dashboard/limits.segment.rsc +1 -1
  254. package/app/.next/server/app/dashboard/limits.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  255. package/app/.next/server/app/dashboard/limits.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  256. package/app/.next/server/app/dashboard/limits.segments/_full.segment.rsc +4 -4
  257. package/app/.next/server/app/dashboard/limits.segments/_head.segment.rsc +1 -1
  258. package/app/.next/server/app/dashboard/limits.segments/_index.segment.rsc +2 -2
  259. package/app/.next/server/app/dashboard/limits.segments/_tree.segment.rsc +1 -1
  260. package/app/.next/server/app/dashboard/onboarding.html +1 -1
  261. package/app/.next/server/app/dashboard/onboarding.rsc +3 -3
  262. package/app/.next/server/app/dashboard/onboarding.segments/!KGRhc2hib2FyZCk/dashboard/onboarding/__PAGE__.segment.rsc +1 -1
  263. package/app/.next/server/app/dashboard/onboarding.segments/!KGRhc2hib2FyZCk/dashboard/onboarding.segment.rsc +1 -1
  264. package/app/.next/server/app/dashboard/onboarding.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  265. package/app/.next/server/app/dashboard/onboarding.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  266. package/app/.next/server/app/dashboard/onboarding.segments/_full.segment.rsc +3 -3
  267. package/app/.next/server/app/dashboard/onboarding.segments/_head.segment.rsc +1 -1
  268. package/app/.next/server/app/dashboard/onboarding.segments/_index.segment.rsc +2 -2
  269. package/app/.next/server/app/dashboard/onboarding.segments/_tree.segment.rsc +1 -1
  270. package/app/.next/server/app/dashboard/profile.html +1 -1
  271. package/app/.next/server/app/dashboard/profile.rsc +3 -3
  272. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +1 -1
  273. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  274. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  275. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  276. package/app/.next/server/app/dashboard/profile.segments/_full.segment.rsc +3 -3
  277. package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  278. package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +2 -2
  279. package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  280. package/app/.next/server/app/dashboard/providers/new.html +1 -1
  281. package/app/.next/server/app/dashboard/providers/new.rsc +4 -4
  282. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  283. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  284. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  285. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  286. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  287. package/app/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +4 -4
  288. package/app/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  289. package/app/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +2 -2
  290. package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  291. package/app/.next/server/app/dashboard/providers.html +1 -1
  292. package/app/.next/server/app/dashboard/providers.rsc +4 -4
  293. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  294. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  295. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  296. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  297. package/app/.next/server/app/dashboard/providers.segments/_full.segment.rsc +4 -4
  298. package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  299. package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +2 -2
  300. package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  301. package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
  302. package/app/.next/server/app/dashboard/settings/pricing.rsc +3 -3
  303. package/app/.next/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  304. package/app/.next/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings/pricing.segment.rsc +1 -1
  305. package/app/.next/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings.segment.rsc +1 -1
  306. package/app/.next/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  307. package/app/.next/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  308. package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  309. package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  310. package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +2 -2
  311. package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  312. package/app/.next/server/app/dashboard/settings.html +1 -1
  313. package/app/.next/server/app/dashboard/settings.rsc +4 -4
  314. package/app/.next/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk/dashboard/settings/__PAGE__.segment.rsc +2 -2
  315. package/app/.next/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk/dashboard/settings.segment.rsc +1 -1
  316. package/app/.next/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  317. package/app/.next/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  318. package/app/.next/server/app/dashboard/settings.segments/_full.segment.rsc +4 -4
  319. package/app/.next/server/app/dashboard/settings.segments/_head.segment.rsc +1 -1
  320. package/app/.next/server/app/dashboard/settings.segments/_index.segment.rsc +2 -2
  321. package/app/.next/server/app/dashboard/settings.segments/_tree.segment.rsc +1 -1
  322. package/app/.next/server/app/dashboard/translator.html +2 -2
  323. package/app/.next/server/app/dashboard/translator.rsc +4 -4
  324. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  325. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  326. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  327. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  328. package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +4 -4
  329. package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  330. package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +2 -2
  331. package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  332. package/app/.next/server/app/dashboard/usage.html +1 -1
  333. package/app/.next/server/app/dashboard/usage.rsc +4 -4
  334. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  335. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  336. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  337. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  338. package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +4 -4
  339. package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  340. package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +2 -2
  341. package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  342. package/app/.next/server/app/docs/page.js +1 -1
  343. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  344. package/app/.next/server/app/docs.html +1 -1
  345. package/app/.next/server/app/docs.rsc +2 -2
  346. package/app/.next/server/app/docs.segments/_full.segment.rsc +2 -2
  347. package/app/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  348. package/app/.next/server/app/docs.segments/_index.segment.rsc +2 -2
  349. package/app/.next/server/app/docs.segments/_tree.segment.rsc +1 -1
  350. package/app/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
  351. package/app/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  352. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  353. package/app/.next/server/app/forbidden.html +1 -1
  354. package/app/.next/server/app/forbidden.rsc +2 -2
  355. package/app/.next/server/app/forbidden.segments/_full.segment.rsc +2 -2
  356. package/app/.next/server/app/forbidden.segments/_head.segment.rsc +1 -1
  357. package/app/.next/server/app/forbidden.segments/_index.segment.rsc +2 -2
  358. package/app/.next/server/app/forbidden.segments/_tree.segment.rsc +1 -1
  359. package/app/.next/server/app/forbidden.segments/forbidden/__PAGE__.segment.rsc +1 -1
  360. package/app/.next/server/app/forbidden.segments/forbidden.segment.rsc +1 -1
  361. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  362. package/app/.next/server/app/forgot-password.html +1 -1
  363. package/app/.next/server/app/forgot-password.rsc +3 -3
  364. package/app/.next/server/app/forgot-password.segments/_full.segment.rsc +3 -3
  365. package/app/.next/server/app/forgot-password.segments/_head.segment.rsc +1 -1
  366. package/app/.next/server/app/forgot-password.segments/_index.segment.rsc +2 -2
  367. package/app/.next/server/app/forgot-password.segments/_tree.segment.rsc +1 -1
  368. package/app/.next/server/app/forgot-password.segments/forgot-password/__PAGE__.segment.rsc +2 -2
  369. package/app/.next/server/app/forgot-password.segments/forgot-password.segment.rsc +1 -1
  370. package/app/.next/server/app/index.html +1 -1
  371. package/app/.next/server/app/index.rsc +2 -2
  372. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  373. package/app/.next/server/app/index.segments/_full.segment.rsc +2 -2
  374. package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
  375. package/app/.next/server/app/index.segments/_index.segment.rsc +2 -2
  376. package/app/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  377. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  378. package/app/.next/server/app/landing.html +1 -1
  379. package/app/.next/server/app/landing.rsc +2 -2
  380. package/app/.next/server/app/landing.segments/_full.segment.rsc +2 -2
  381. package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
  382. package/app/.next/server/app/landing.segments/_index.segment.rsc +2 -2
  383. package/app/.next/server/app/landing.segments/_tree.segment.rsc +1 -1
  384. package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  385. package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
  386. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  387. package/app/.next/server/app/login.html +1 -1
  388. package/app/.next/server/app/login.rsc +3 -3
  389. package/app/.next/server/app/login.segments/_full.segment.rsc +3 -3
  390. package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
  391. package/app/.next/server/app/login.segments/_index.segment.rsc +2 -2
  392. package/app/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  393. package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  394. package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
  395. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  396. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  397. package/app/.next/server/app/privacy.html +1 -1
  398. package/app/.next/server/app/privacy.rsc +2 -2
  399. package/app/.next/server/app/privacy.segments/_full.segment.rsc +2 -2
  400. package/app/.next/server/app/privacy.segments/_head.segment.rsc +1 -1
  401. package/app/.next/server/app/privacy.segments/_index.segment.rsc +2 -2
  402. package/app/.next/server/app/privacy.segments/_tree.segment.rsc +1 -1
  403. package/app/.next/server/app/privacy.segments/privacy/__PAGE__.segment.rsc +1 -1
  404. package/app/.next/server/app/privacy.segments/privacy.segment.rsc +1 -1
  405. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  406. package/app/.next/server/app/terms.html +1 -1
  407. package/app/.next/server/app/terms.rsc +2 -2
  408. package/app/.next/server/app/terms.segments/_full.segment.rsc +2 -2
  409. package/app/.next/server/app/terms.segments/_head.segment.rsc +1 -1
  410. package/app/.next/server/app/terms.segments/_index.segment.rsc +2 -2
  411. package/app/.next/server/app/terms.segments/_tree.segment.rsc +1 -1
  412. package/app/.next/server/app/terms.segments/terms/__PAGE__.segment.rsc +1 -1
  413. package/app/.next/server/app/terms.segments/terms.segment.rsc +1 -1
  414. package/app/.next/server/app-paths-manifest.json +36 -36
  415. package/app/.next/server/chunks/5583.js +1 -1
  416. package/app/.next/server/chunks/9824.js +1 -1
  417. package/app/.next/server/pages/404.html +1 -1
  418. package/app/.next/server/pages/500.html +2 -2
  419. package/app/.next/server/server-reference-manifest.js +1 -1
  420. package/app/.next/server/server-reference-manifest.json +1 -1
  421. package/app/.next/static/chunks/{5846-e5043393303d82cc.js → 5846-dfe52e95348ffdd8.js} +1 -1
  422. package/app/.next/static/chunks/{993-547810f7937fb3fe.js → 993-5102e3fd1db64935.js} +1 -1
  423. package/app/package.json +1 -1
  424. package/package.json +1 -1
  425. /package/app/.next/static/{r6jUR903zdObDI9pgxvsU → mo3wTjoSYKP1E96Wu512B}/_buildManifest.js +0 -0
  426. /package/app/.next/static/{r6jUR903zdObDI9pgxvsU → mo3wTjoSYKP1E96Wu512B}/_ssgManifest.js +0 -0
@@ -12,7 +12,7 @@
12
12
  0%, 100% { transform: translateY(0); }
13
13
  50% { transform: translateY(-8px); }
14
14
  }
15
- `})]})}},67040:(e,t,s)=>{s.d(t,{cn:()=>r});function r(...e){return e.filter(Boolean).join(" ").replace(/\s+/g," ").trim()}},67671:(e,t,s)=>{s.d(t,{i:()=>l});var r=s(1934);let a=0,l=(0,r.v)((e,t)=>({notifications:[],addNotification:s=>{let r=++a,l={id:r,type:s.type||"info",message:s.message,title:s.title||null,duration:s.duration??5e3,dismissible:s.dismissible??!0,createdAt:Date.now()};return e(e=>({notifications:[...e.notifications,l]})),l.duration>0&&setTimeout(()=>{t().removeNotification(r)},l.duration),r},removeNotification:t=>{e(e=>({notifications:e.notifications.filter(e=>e.id!==t)}))},clearAll:()=>e({notifications:[]}),success:(e,s)=>t().addNotification({type:"success",message:e,title:s}),error:(e,s)=>t().addNotification({type:"error",message:e,title:s,duration:8e3}),warning:(e,s)=>t().addNotification({type:"warning",message:e,title:s}),info:(e,s)=>t().addNotification({type:"info",message:e,title:s})}))},71361:(e,t,s)=>{s.d(t,{ConfirmModal:()=>o,default:()=>i});var r=s(95155),a=s(12115),l=s(67040),n=s(35806);function i({isOpen:e,onClose:t,title:s,children:n,footer:i,size:o="md",closeOnOverlay:d=!0,showCloseButton:c=!0,className:x}){let m=(0,a.useId)(),u=(0,a.useRef)(null);return((0,a.useEffect)(()=>(e?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[e]),(0,a.useEffect)(()=>{let s=s=>{"Escape"===s.key&&e&&t()};return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[e,t]),(0,a.useEffect)(()=>{if(!e||!u.current)return;let t=u.current,s='button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])',r=t.querySelector(s);r&&setTimeout(()=>r.focus(),50);let a=e=>{if("Tab"!==e.key)return;let r=[...t.querySelectorAll(s)];if(0===r.length)return;let a=r[0],l=r[r.length-1];e.shiftKey&&document.activeElement===a?(e.preventDefault(),l.focus()):e.shiftKey||document.activeElement!==l||(e.preventDefault(),a.focus())};return t.addEventListener("keydown",a),()=>t.removeEventListener("keydown",a)},[e]),e)?(0,r.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4",children:[(0,r.jsx)("div",{className:"absolute inset-0 bg-black/30 backdrop-blur-sm",onClick:d?t:void 0,"aria-hidden":"true"}),(0,r.jsxs)("div",{ref:u,role:"dialog","aria-modal":"true","aria-labelledby":s?m:void 0,className:(0,l.cn)("relative w-full bg-surface","border border-black/10 dark:border-white/10","rounded-xl shadow-2xl","animate-in fade-in zoom-in-95 duration-200",{sm:"max-w-sm",md:"max-w-md",lg:"max-w-lg",xl:"max-w-xl",full:"max-w-4xl"}[o],x),children:[(s||c)&&(0,r.jsxs)("div",{className:"flex items-center justify-between p-6 border-b border-black/5 dark:border-white/5",children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 mr-4","aria-hidden":"true",children:[(0,r.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#FF5F56]"}),(0,r.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#FFBD2E]"}),(0,r.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#27C93F]"})]}),s&&(0,r.jsx)("h2",{id:m,className:"text-lg font-semibold text-text-main",children:s})]}),c&&(0,r.jsx)("button",{onClick:t,"aria-label":"Close",className:"p-1.5 rounded-lg text-text-muted hover:bg-black/5 dark:hover:bg-white/5 transition-colors",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px]","aria-hidden":"true",children:"close"})})]}),(0,r.jsx)("div",{className:"p-6 max-h-[calc(80vh-140px)] overflow-y-auto",children:n}),i&&(0,r.jsx)("div",{className:"flex items-center justify-end gap-3 p-6 border-t border-black/5 dark:border-white/5",children:i})]})]}):null}function o({isOpen:e,onClose:t,onConfirm:s,title:a="Confirm",message:l,confirmText:o="Confirm",cancelText:d="Cancel",variant:c="danger",loading:x=!1}){return(0,r.jsx)(i,{isOpen:e,onClose:t,title:a,size:"sm",footer:(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.default,{variant:"ghost",onClick:t,disabled:x,children:d}),(0,r.jsx)(n.default,{variant:c,onClick:s,loading:x,children:o})]}),children:(0,r.jsx)("p",{className:"text-text-muted",children:l})})}},71689:(e,t,s)=>{s.d(t,{default:()=>o});var r=s(95155),a=s(12115),l=s(14051),n=s.n(l),i=s(40993);function o({isOpen:e,onSuccess:t,onClose:s}){let[l,n]=(0,a.useState)(""),[o,d]=(0,a.useState)(""),[c,x]=(0,a.useState)(null),[m,u]=(0,a.useState)(!1),[p,h]=(0,a.useState)(!1),[b,f]=(0,a.useState)(!1);(0,a.useEffect)(()=>{e&&(async()=>{h(!0),x(null),f(!1);try{let e=await fetch("/api/oauth/cursor/auto-import"),t=await e.json();t.found?(n(t.accessToken),d(t.machineId),f(!0)):x(t.error||"Could not auto-detect tokens")}catch(e){x("Failed to auto-detect tokens")}finally{h(!1)}})()},[e]);let g=async()=>{if(!l.trim())return void x("Please enter an access token");if(!o.trim())return void x("Please enter a machine ID");u(!0),x(null);try{let e=await fetch("/api/oauth/cursor/import",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accessToken:l.trim(),machineId:o.trim()})}),r=await e.json();if(!e.ok)throw Error(r.error||"Import failed");t?.(),s()}catch(e){x(e.message)}finally{u(!1)}};return(0,r.jsx)(i.aF,{isOpen:e,title:"Connect Cursor IDE",onClose:s,children:(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:[p&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-primary/10 flex items-center justify-center",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-primary animate-spin",children:"progress_activity"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Auto-detecting tokens..."}),(0,r.jsx)("p",{className:"text-sm text-text-muted",children:"Reading from Cursor IDE database"})]}),!p&&(0,r.jsxs)(r.Fragment,{children:[b&&(0,r.jsx)("div",{className:"bg-green-50 dark:bg-green-900/20 p-3 rounded-lg border border-green-200 dark:border-green-800",children:(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-green-600 dark:text-green-400",children:"check_circle"}),(0,r.jsx)("p",{className:"text-sm text-green-800 dark:text-green-200",children:"Tokens auto-detected from Cursor IDE successfully!"})]})}),!b&&!c&&(0,r.jsx)("div",{className:"bg-blue-50 dark:bg-blue-900/20 p-3 rounded-lg border border-blue-200 dark:border-blue-800",children:(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-blue-600 dark:text-blue-400",children:"info"}),(0,r.jsx)("p",{className:"text-sm text-blue-800 dark:text-blue-200",children:"Cursor IDE not detected. Please paste your tokens manually."})]})}),(0,r.jsxs)("div",{children:[(0,r.jsxs)("label",{className:"block text-sm font-medium mb-2",children:["Access Token ",(0,r.jsx)("span",{className:"text-red-500",children:"*"})]}),(0,r.jsx)("textarea",{value:l,onChange:e=>n(e.target.value),placeholder:"Access token will be auto-filled...",rows:3,className:"w-full px-3 py-2 text-sm font-mono border border-border rounded-lg bg-background focus:outline-none focus:border-primary resize-none"})]}),(0,r.jsxs)("div",{children:[(0,r.jsxs)("label",{className:"block text-sm font-medium mb-2",children:["Machine ID ",(0,r.jsx)("span",{className:"text-red-500",children:"*"})]}),(0,r.jsx)(i.pd,{value:o,onChange:e=>d(e.target.value),placeholder:"Machine ID will be auto-filled...",className:"font-mono text-sm"})]}),c&&(0,r.jsx)("div",{className:"bg-red-50 dark:bg-red-900/20 p-3 rounded-lg border border-red-200 dark:border-red-800",children:(0,r.jsx)("p",{className:"text-sm text-red-600 dark:text-red-400",children:c})}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.$n,{onClick:g,fullWidth:!0,disabled:m||!l.trim()||!o.trim(),children:m?"Importing...":"Import Token"}),(0,r.jsx)(i.$n,{onClick:s,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})]})})}o.propTypes={isOpen:n().bool.isRequired,onSuccess:n().func,onClose:n().func.isRequired}},76332:(e,t,s)=>{s.d(t,{default:()=>o});var r=s(95155),a=s(73321),l=s(98500),n=s.n(l);let i={dashboard:"Dashboard",providers:"Providers",combos:"Combos",settings:"Settings",usage:"Usage",logger:"Logger",translator:"Translator",playground:"Playground",add:"Add",edit:"Edit",keys:"API Keys",models:"Models",logs:"Logs"};function o(){let e=(0,a.usePathname)();if(!e||"/dashboard"===e)return null;let t=e.split("/").filter(Boolean),s=t.map((e,s)=>({label:i[e]||e.charAt(0).toUpperCase()+e.slice(1),href:"/"+t.slice(0,s+1).join("/"),isLast:s===t.length-1}));return(0,r.jsx)("nav",{"aria-label":"Breadcrumb",style:{display:"flex",alignItems:"center",gap:"6px",fontSize:"13px",color:"var(--text-secondary, #888)",padding:"8px 0",marginBottom:"8px"},children:s.map((e,t)=>(0,r.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[t>0&&(0,r.jsx)("span",{style:{opacity:.4,fontSize:"11px"},"aria-hidden":"true",children:"›"}),e.isLast?(0,r.jsx)("span",{"aria-current":"page",style:{color:"var(--text-primary, #e0e0e0)",fontWeight:500},children:e.label}):(0,r.jsx)(n(),{href:e.href,style:{color:"var(--text-secondary, #888)",textDecoration:"none",transition:"color 0.15s"},onMouseEnter:e=>e.currentTarget.style.color="var(--accent, #818cf8)",onMouseLeave:e=>e.currentTarget.style.color="var(--text-secondary, #888)",children:e.label})]},e.href))})}},80178:(e,t,s)=>{s.d(t,{default:()=>d});var r=s(95155),a=s(12115),l=s(14051),n=s.n(l),i=s(40993),o=s(30949);function d({isOpen:e,provider:t,providerInfo:s,onSuccess:l,onClose:n,idcConfig:d}){let[c,x]=(0,a.useState)("waiting"),[m,u]=(0,a.useState)(null),[p,h]=(0,a.useState)(""),[b,f]=(0,a.useState)(null),[g,y]=(0,a.useState)(!1),[j,v]=(0,a.useState)(null),[N,k]=(0,a.useState)(!1),w=(0,a.useRef)(null),{copied:C,copy:S}=(0,o.C)(),[T,I]=(0,a.useState)(!1),[O,$]=(0,a.useState)("/callback?code=..."),L=(0,a.useRef)(!1),R=(0,a.useRef)(!1);(0,a.useEffect)(()=>{I("localhost"===window.location.hostname||"127.0.0.1"===window.location.hostname),$(`${window.location.origin}/callback?code=...`)},[]);let M=(0,a.useCallback)(async(e,s)=>{if(m)try{let r=await fetch(`/api/oauth/${t}/exchange`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:e,redirectUri:m.redirectUri,codeVerifier:m.codeVerifier,state:s})}),a=await r.json();if(!r.ok)throw Error(a.error);x("success"),l?.()}catch(e){f(e.message),x("error")}},[m,t,l]),E=(0,a.useCallback)(async(e,s,r,a)=>{k(!0);for(let n=0;n<60;n++){await new Promise(e=>setTimeout(e,1e3*r));try{let n=await fetch(`/api/oauth/${t}/poll`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({deviceCode:e,codeVerifier:s,extraData:a})}),i=await n.json();if(i.success){x("success"),k(!1),l?.();return}if("expired_token"===i.error||"access_denied"===i.error)throw Error(i.errorDescription||i.error);"slow_down"===i.error&&(r=Math.min(r+5,30))}catch(e){f(e.message),x("error"),k(!1);return}}f("Authorization timeout"),x("error"),k(!1)},[t,l]),A=(0,a.useCallback)(async()=>{if(t)try{if(f(null),"github"===t||"qwen"===t||"kiro"===t||"kimi-coding"===t||"kilocode"===t){y(!0),x("waiting");let e=await fetch(`/api/oauth/${t}/device-code`),s=await e.json();if(!e.ok)throw Error(s.error);v(s);let r=s.verification_uri_complete||s.verification_uri;r&&window.open(r,"oauth_verify");let a="kiro"===t?{_clientId:s._clientId,_clientSecret:s._clientSecret}:null;E(s.device_code,s.codeVerifier,s.interval||5,a);return}if("codex"===t&&T){try{let e=await fetch("/api/oauth/codex/start-callback-server"),t=await e.json();if(!e.ok)throw Error(t.error);u({...t,redirectUri:t.redirectUri}),x("waiting"),window.open(t.authUrl,"oauth_auth"),k(!0);for(let e=0;e<150;e++){await new Promise(e=>setTimeout(e,2e3));let e=await fetch("/api/oauth/codex/poll-callback",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}),t=await e.json();if(t.success){x("success"),k(!1),l?.();return}if(t.error&&!t.pending)throw Error(t.errorDescription||t.error)}throw k(!1),Error("Authorization timeout")}catch(e){k(!1),x("input"),f(e.message+" — You can paste the callback URL manually below.")}return}let e=window.location.port||("https:"===window.location.protocol?"443":"80"),s=`http://localhost:${e}/callback`,r=await fetch(`/api/oauth/${t}/authorize?redirect_uri=${encodeURIComponent(s)}`),a=await r.json();if(!r.ok)throw Error(a.error);u({...a,redirectUri:s}),T?(x("waiting"),w.current=window.open(a.authUrl,"oauth_popup","width=600,height=700"),w.current||x("input")):(x("input"),window.open(a.authUrl,"oauth_auth"))}catch(e){f(e.message),x("error")}},[t,T,E,l]);(0,a.useEffect)(()=>{e||(R.current=!1)},[e]),(0,a.useEffect)(()=>{e&&t&&(R.current||(R.current=!0,u(null),h(""),f(null),y(!1),v(null),k(!1),A()))},[e,t,A]),(0,a.useEffect)(()=>{let e;if(!m)return;L.current=!1;let t=async e=>{if(L.current)return;let{code:t,state:s,error:r,errorDescription:a}=e;if(r){L.current=!0,f(a||r),x("error");return}t&&(L.current=!0,await M(t,s))},s=e=>{let s=window.location.port,r=e.origin.match(/^https?:\/\/(localhost|127\.0\.0\.1)(:\d+)?$/)&&new URL(e.origin).port===s;(e.origin===window.location.origin||r)&&e.data?.type==="oauth_callback"&&t(e.data.data)};window.addEventListener("message",s);try{(e=new BroadcastChannel("oauth_callback")).onmessage=e=>t(e.data)}catch(e){console.log("BroadcastChannel not supported")}let r=e=>{if("oauth_callback"===e.key&&e.newValue)try{let s=JSON.parse(e.newValue);t(s),localStorage.removeItem("oauth_callback")}catch(e){console.log("Failed to parse localStorage data")}};window.addEventListener("storage",r);try{let e=localStorage.getItem("oauth_callback");if(e){let s=JSON.parse(e);s.timestamp&&Date.now()-s.timestamp<3e4&&(t(s),localStorage.removeItem("oauth_callback"))}}catch{}return()=>{window.removeEventListener("message",s),window.removeEventListener("storage",r),e&&e.close()}},[m,M]);let F=async()=>{try{f(null);let e=new URL(p),t=e.searchParams.get("code"),s=e.searchParams.get("state"),r=e.searchParams.get("error");if(r)throw Error(e.searchParams.get("error_description")||r);if(!t)throw Error("No authorization code found in URL");await M(t,s)}catch(e){f(e.message),x("error")}};return t&&s?(0,r.jsx)(i.aF,{isOpen:e,title:`Connect ${s.name}`,onClose:n,size:"lg",children:(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:["waiting"===c&&!g&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-primary/10 flex items-center justify-center",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-primary animate-spin",children:"progress_activity"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Waiting for Authorization"}),(0,r.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Complete the authorization in the popup window."}),(0,r.jsx)(i.$n,{variant:"ghost",onClick:()=>x("input"),children:"Popup blocked? Enter URL manually"})]}),"waiting"===c&&g&&j&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"text-center py-4",children:[(0,r.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Visit the URL below and enter the code:"}),(0,r.jsxs)("div",{className:"bg-sidebar p-4 rounded-lg mb-4",children:[(0,r.jsx)("p",{className:"text-xs text-text-muted mb-1",children:"Verification URL"}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("code",{className:"flex-1 text-sm break-all",children:j.verification_uri}),(0,r.jsx)(i.$n,{size:"sm",variant:"ghost",icon:"verify_url"===C?"check":"content_copy",onClick:()=>S(j.verification_uri,"verify_url")})]})]}),(0,r.jsxs)("div",{className:"bg-primary/10 p-4 rounded-lg",children:[(0,r.jsx)("p",{className:"text-xs text-text-muted mb-1",children:"Your Code"}),(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2",children:[(0,r.jsx)("p",{className:"text-2xl font-mono font-bold text-primary",children:j.user_code}),(0,r.jsx)(i.$n,{size:"sm",variant:"ghost",icon:"user_code"===C?"check":"content_copy",onClick:()=>S(j.user_code,"user_code")})]})]})]}),N&&(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2 text-sm text-text-muted",children:[(0,r.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),"Waiting for authorization..."]})]}),"input"===c&&!g&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"space-y-4",children:[!T&&(0,r.jsxs)("div",{className:"rounded-lg border border-blue-500/30 bg-blue-500/10 p-3 text-xs text-blue-200",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-sm align-middle mr-1",children:"info"}),(0,r.jsx)("strong",{children:"Remote access:"})," Since you're accessing OmniRoute remotely, after authorizing you'll see an error page (localhost not found). That's expected — just copy the full URL from your browser's address bar and paste it below."]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-medium mb-2",children:"Step 1: Open this URL in your browser"}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.pd,{value:m?.authUrl||"",readOnly:!0,className:"flex-1 font-mono text-xs"}),(0,r.jsx)(i.$n,{variant:"secondary",icon:"auth_url"===C?"check":"content_copy",onClick:()=>S(m?.authUrl,"auth_url"),children:"Copy"})]})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-medium mb-2",children:"Step 2: Paste the callback URL here"}),(0,r.jsx)("p",{className:"text-xs text-text-muted mb-2",children:"After authorization, copy the full URL from your browser."}),(0,r.jsx)(i.pd,{value:p,onChange:e=>h(e.target.value),placeholder:O,className:"font-mono text-xs"})]})]}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.$n,{onClick:F,fullWidth:!0,disabled:!p,children:"Connect"}),(0,r.jsx)(i.$n,{onClick:n,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]}),"success"===c&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-green-100 dark:bg-green-900/30 flex items-center justify-center",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-green-600",children:"check_circle"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connected Successfully!"}),(0,r.jsxs)("p",{className:"text-sm text-text-muted mb-4",children:["Your ",s.name," account has been connected."]}),(0,r.jsx)(i.$n,{onClick:n,fullWidth:!0,children:"Done"})]}),"error"===c&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-red-100 dark:bg-red-900/30 flex items-center justify-center",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-red-600",children:"error"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connection Failed"}),(0,r.jsx)("p",{className:"text-sm text-red-600 mb-4",children:b}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.$n,{onClick:A,variant:"secondary",fullWidth:!0,children:"Try Again"}),(0,r.jsx)(i.$n,{onClick:n,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})]})}):null}d.propTypes={isOpen:n().bool.isRequired,provider:n().string,providerInfo:n().shape({name:n().string}),onSuccess:n().func,onClose:n().func.isRequired}},80927:(e,t,s)=>{s.d(t,{default:()=>i});var r=s(95155),a=s(67040);let l={default:"bg-black/5 dark:bg-white/10 text-text-muted",primary:"bg-primary/10 text-primary",success:"bg-green-500/10 text-green-600 dark:text-green-400",warning:"bg-yellow-500/10 text-yellow-600 dark:text-yellow-400",error:"bg-red-500/10 text-red-600 dark:text-red-400",info:"bg-blue-500/10 text-blue-600 dark:text-blue-400"},n={sm:"px-2 py-0.5 text-[10px]",md:"px-2.5 py-1 text-xs",lg:"px-3 py-1.5 text-sm"};function i({children:e,variant:t="default",size:s="md",dot:i=!1,icon:o,className:d}){return(0,r.jsxs)("span",{className:(0,a.cn)("inline-flex items-center gap-1.5 rounded-full font-semibold",l[t],n[s],d),children:[i&&(0,r.jsx)("span",{"aria-hidden":"true",className:(0,a.cn)("size-1.5 rounded-full","success"===t&&"bg-green-500","warning"===t&&"bg-yellow-500","error"===t&&"bg-red-500","info"===t&&"bg-blue-500","primary"===t&&"bg-primary","default"===t&&"bg-gray-500")}),o&&(0,r.jsx)("span",{className:"material-symbols-outlined text-[14px]","aria-hidden":"true",children:o}),e]})}},81060:(e,t,s)=>{s.d(t,{default:()=>l});var r=s(95155),a=s(67040);function l({children:e,title:t,subtitle:s,icon:l,action:n,padding:i="md",hover:o=!1,className:d,...c}){return(0,r.jsxs)("div",{className:(0,a.cn)("bg-surface","border border-black/5 dark:border-white/5","rounded-lg shadow-sm",o&&"hover:shadow-md hover:border-primary/30 transition-all cursor-pointer",{none:"",xs:"p-3",sm:"p-4",md:"p-6",lg:"p-8"}[i],d),...c,children:[(t||n)&&(0,r.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[l&&(0,r.jsx)("div",{className:"p-2 rounded-lg bg-bg text-text-muted",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:l})}),(0,r.jsxs)("div",{children:[t&&(0,r.jsx)("h3",{className:"text-text-main font-semibold",children:t}),s&&(0,r.jsx)("p",{className:"text-sm text-text-muted",children:s})]})]}),n]}),e]})}l.Section=function({children:e,className:t,...s}){return(0,r.jsx)("div",{className:(0,a.cn)("p-4 rounded-lg","bg-black/[0.02] dark:bg-white/[0.02]","border border-black/5 dark:border-white/5",t),...s,children:e})},l.Row=function({children:e,className:t,...s}){return(0,r.jsx)("div",{className:(0,a.cn)("p-3 -mx-3 px-3 transition-colors","border-b border-black/5 dark:border-white/5 last:border-b-0","hover:bg-black/[0.02] dark:hover:bg-white/[0.02]",t),...s,children:e})},l.ListItem=function({children:e,actions:t,className:s,...l}){return(0,r.jsxs)("div",{className:(0,a.cn)("group flex items-center justify-between p-3 -mx-3 px-3","border-b border-black/[0.03] dark:border-white/[0.03] last:border-b-0","hover:bg-black/[0.02] dark:hover:bg-white/[0.02]","transition-colors",s),...l,children:[(0,r.jsx)("div",{className:"flex-1 min-w-0",children:e}),t&&(0,r.jsx)("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 focus-within:opacity-100 transition-opacity",children:t})]})}},85444:(e,t,s)=>{s.d(t,{default:()=>x});var r=s(95155),a=s(12115),l=s(14051),n=s.n(l),i=s(71361),o=s(81135),d=s(20909);let c=[...Object.keys(d.zN),...Object.keys(d.IS),...Object.keys(d.fg)];function x({isOpen:e,onClose:t,onSelect:s,selectedModel:l,activeProviders:n=[],title:x="Select Model",modelAliases:m={}}){let[u,p]=(0,a.useState)(""),[h,b]=(0,a.useState)([]),[f,g]=(0,a.useState)([]),[y,j]=(0,a.useState)({}),v=async()=>{try{let e=await fetch("/api/combos");if(!e.ok)throw Error(`Failed to fetch combos: ${e.status}`);let t=await e.json();b(t.combos||[])}catch(e){console.error("Error fetching combos:",e),b([])}};(0,a.useEffect)(()=>{e&&v()},[e]);let N=async()=>{try{let e=await fetch("/api/provider-nodes");if(!e.ok)throw Error(`Failed to fetch provider nodes: ${e.status}`);let t=await e.json();g(t.nodes||[])}catch(e){console.error("Error fetching provider nodes:",e),g([])}};(0,a.useEffect)(()=>{e&&N()},[e]);let k=async()=>{try{let e=await fetch("/api/provider-models");if(!e.ok)throw Error(`Failed to fetch custom models: ${e.status}`);let t=await e.json();j(t.models||{})}catch(e){console.error("Error fetching custom models:",e),j({})}};(0,a.useEffect)(()=>{e&&k()},[e]);let w=(0,a.useMemo)(()=>({...d.zN,...d.IS,...d.fg}),[]),C=(0,a.useMemo)(()=>{let e={};return[...new Set([...n.map(e=>e.provider)])].sort((e,t)=>{let s=c.indexOf(e),r=c.indexOf(t);return(-1===s?999:s)-(-1===r?999:r)}).forEach(t=>{let s=o.Xg[t]||t,r=w[t]||{name:t,color:"#666"},a=(0,d.mq)(t)||(0,d.gb)(t),l=y[t]||[];if(r.passthroughModels){let a=Object.entries(m).filter(([,e])=>e.startsWith(`${s}/`)).map(([e,t])=>({id:t.replace(`${s}/`,""),name:e,value:t})),n=l.filter(e=>!a.some(t=>t.id===e.id)).map(e=>({id:e.id,name:e.name||e.id,value:`${s}/${e.id}`,isCustom:!0})),i=[...a,...n];if(i.length>0){let a=f.find(e=>e.id===t),l=a?.name||r.name;e[t]={name:l,alias:s,color:r.color,models:i}}}else if(a){let s=f.find(e=>e.id===t),a=s?.name||r.name,n=Object.entries(m).filter(([,e])=>e.startsWith(`${t}/`)).map(([e,s])=>({id:s.replace(`${t}/`,""),name:e,value:s})),i=l.filter(e=>!n.some(t=>t.id===e.id)).map(e=>({id:e.id,name:e.name||e.id,value:`${t}/${e.id}`,isCustom:!0})),o=[...n,...i];o.length>0&&(e[t]={name:a,alias:s?.prefix||t,color:r.color,models:o,isCustom:!0,hasModels:!0})}else{let a=(0,o.KC)(t),n=[...a.map(e=>({id:e.id,name:e.name,value:`${s}/${e.id}`})),...l.filter(e=>!a.some(t=>t.id===e.id)).map(e=>({id:e.id,name:e.name||e.id,value:`${s}/${e.id}`,isCustom:!0}))];n.length>0&&(e[t]={name:r.name,alias:s,color:r.color,models:n})}}),e},[n,m,w,f,y]),S=(0,a.useMemo)(()=>{if(!u.trim())return h;let e=u.toLowerCase();return h.filter(t=>t.name.toLowerCase().includes(e))},[h,u]),T=(0,a.useMemo)(()=>{if(!u.trim())return C;let e=u.toLowerCase(),t={};return Object.entries(C).forEach(([s,r])=>{let a=r.models.filter(t=>t.name.toLowerCase().includes(e)||t.id.toLowerCase().includes(e)),l=r.name.toLowerCase().includes(e);(a.length>0||l)&&(t[s]={...r,models:a})}),t},[C,u]),I=e=>{s(e),t(),p("")};return(0,r.jsxs)(i.default,{isOpen:e,onClose:()=>{t(),p("")},title:x,size:"md",className:"p-4!",children:[(0,r.jsx)("div",{className:"mb-3",children:(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsx)("span",{className:"material-symbols-outlined absolute left-2.5 top-1/2 -translate-y-1/2 text-text-muted text-[16px]",children:"search"}),(0,r.jsx)("input",{type:"text",placeholder:"Search...",value:u,onChange:e=>p(e.target.value),className:"w-full pl-8 pr-3 py-1.5 bg-surface border border-border rounded text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"})]})}),(0,r.jsxs)("div",{className:"max-h-[300px] overflow-y-auto space-y-3",children:[S.length>0&&(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5 mb-1.5 sticky top-0 bg-surface py-0.5",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-primary text-[14px]",children:"layers"}),(0,r.jsx)("span",{className:"text-xs font-medium text-primary",children:"Combos"}),(0,r.jsxs)("span",{className:"text-[10px] text-text-muted",children:["(",S.length,")"]})]}),(0,r.jsx)("div",{className:"flex flex-wrap gap-1.5",children:S.map(e=>{let t=l===e.name;return(0,r.jsx)("button",{onClick:()=>I({id:e.name,name:e.name,value:e.name}),className:`
15
+ `})]})}},67040:(e,t,s)=>{s.d(t,{cn:()=>r});function r(...e){return e.filter(Boolean).join(" ").replace(/\s+/g," ").trim()}},67671:(e,t,s)=>{s.d(t,{i:()=>l});var r=s(1934);let a=0,l=(0,r.v)((e,t)=>({notifications:[],addNotification:s=>{let r=++a,l={id:r,type:s.type||"info",message:s.message,title:s.title||null,duration:s.duration??5e3,dismissible:s.dismissible??!0,createdAt:Date.now()};return e(e=>({notifications:[...e.notifications,l]})),l.duration>0&&setTimeout(()=>{t().removeNotification(r)},l.duration),r},removeNotification:t=>{e(e=>({notifications:e.notifications.filter(e=>e.id!==t)}))},clearAll:()=>e({notifications:[]}),success:(e,s)=>t().addNotification({type:"success",message:e,title:s}),error:(e,s)=>t().addNotification({type:"error",message:e,title:s,duration:8e3}),warning:(e,s)=>t().addNotification({type:"warning",message:e,title:s}),info:(e,s)=>t().addNotification({type:"info",message:e,title:s})}))},71361:(e,t,s)=>{s.d(t,{ConfirmModal:()=>o,default:()=>i});var r=s(95155),a=s(12115),l=s(67040),n=s(35806);function i({isOpen:e,onClose:t,title:s,children:n,footer:i,size:o="md",closeOnOverlay:d=!0,showCloseButton:c=!0,className:x}){let m=(0,a.useId)(),u=(0,a.useRef)(null);return((0,a.useEffect)(()=>(e?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[e]),(0,a.useEffect)(()=>{let s=s=>{"Escape"===s.key&&e&&t()};return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[e,t]),(0,a.useEffect)(()=>{if(!e||!u.current)return;let t=u.current,s='button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])',r=t.querySelector(s);r&&setTimeout(()=>r.focus(),50);let a=e=>{if("Tab"!==e.key)return;let r=[...t.querySelectorAll(s)];if(0===r.length)return;let a=r[0],l=r[r.length-1];e.shiftKey&&document.activeElement===a?(e.preventDefault(),l.focus()):e.shiftKey||document.activeElement!==l||(e.preventDefault(),a.focus())};return t.addEventListener("keydown",a),()=>t.removeEventListener("keydown",a)},[e]),e)?(0,r.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4",children:[(0,r.jsx)("div",{className:"absolute inset-0 bg-black/30 backdrop-blur-sm",onClick:d?t:void 0,"aria-hidden":"true"}),(0,r.jsxs)("div",{ref:u,role:"dialog","aria-modal":"true","aria-labelledby":s?m:void 0,className:(0,l.cn)("relative w-full bg-surface","border border-black/10 dark:border-white/10","rounded-xl shadow-2xl","animate-in fade-in zoom-in-95 duration-200",{sm:"max-w-sm",md:"max-w-md",lg:"max-w-lg",xl:"max-w-xl",full:"max-w-4xl"}[o],x),children:[(s||c)&&(0,r.jsxs)("div",{className:"flex items-center justify-between p-6 border-b border-black/5 dark:border-white/5",children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 mr-4","aria-hidden":"true",children:[(0,r.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#FF5F56]"}),(0,r.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#FFBD2E]"}),(0,r.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#27C93F]"})]}),s&&(0,r.jsx)("h2",{id:m,className:"text-lg font-semibold text-text-main",children:s})]}),c&&(0,r.jsx)("button",{onClick:t,"aria-label":"Close",className:"p-1.5 rounded-lg text-text-muted hover:bg-black/5 dark:hover:bg-white/5 transition-colors",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px]","aria-hidden":"true",children:"close"})})]}),(0,r.jsx)("div",{className:"p-6 max-h-[calc(80vh-140px)] overflow-y-auto",children:n}),i&&(0,r.jsx)("div",{className:"flex items-center justify-end gap-3 p-6 border-t border-black/5 dark:border-white/5",children:i})]})]}):null}function o({isOpen:e,onClose:t,onConfirm:s,title:a="Confirm",message:l,confirmText:o="Confirm",cancelText:d="Cancel",variant:c="danger",loading:x=!1}){return(0,r.jsx)(i,{isOpen:e,onClose:t,title:a,size:"sm",footer:(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.default,{variant:"ghost",onClick:t,disabled:x,children:d}),(0,r.jsx)(n.default,{variant:c,onClick:s,loading:x,children:o})]}),children:(0,r.jsx)("p",{className:"text-text-muted",children:l})})}},71689:(e,t,s)=>{s.d(t,{default:()=>o});var r=s(95155),a=s(12115),l=s(14051),n=s.n(l),i=s(40993);function o({isOpen:e,onSuccess:t,onClose:s}){let[l,n]=(0,a.useState)(""),[o,d]=(0,a.useState)(""),[c,x]=(0,a.useState)(null),[m,u]=(0,a.useState)(!1),[p,h]=(0,a.useState)(!1),[b,f]=(0,a.useState)(!1);(0,a.useEffect)(()=>{e&&(async()=>{h(!0),x(null),f(!1);try{let e=await fetch("/api/oauth/cursor/auto-import"),t=await e.json();t.found?(n(t.accessToken),d(t.machineId),f(!0)):x(t.error||"Could not auto-detect tokens")}catch(e){x("Failed to auto-detect tokens")}finally{h(!1)}})()},[e]);let g=async()=>{if(!l.trim())return void x("Please enter an access token");if(!o.trim())return void x("Please enter a machine ID");u(!0),x(null);try{let e=await fetch("/api/oauth/cursor/import",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accessToken:l.trim(),machineId:o.trim()})}),r=await e.json();if(!e.ok)throw Error(r.error||"Import failed");t?.(),s()}catch(e){x(e.message)}finally{u(!1)}};return(0,r.jsx)(i.aF,{isOpen:e,title:"Connect Cursor IDE",onClose:s,children:(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:[p&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-primary/10 flex items-center justify-center",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-primary animate-spin",children:"progress_activity"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Auto-detecting tokens..."}),(0,r.jsx)("p",{className:"text-sm text-text-muted",children:"Reading from Cursor IDE database"})]}),!p&&(0,r.jsxs)(r.Fragment,{children:[b&&(0,r.jsx)("div",{className:"bg-green-50 dark:bg-green-900/20 p-3 rounded-lg border border-green-200 dark:border-green-800",children:(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-green-600 dark:text-green-400",children:"check_circle"}),(0,r.jsx)("p",{className:"text-sm text-green-800 dark:text-green-200",children:"Tokens auto-detected from Cursor IDE successfully!"})]})}),!b&&!c&&(0,r.jsx)("div",{className:"bg-blue-50 dark:bg-blue-900/20 p-3 rounded-lg border border-blue-200 dark:border-blue-800",children:(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-blue-600 dark:text-blue-400",children:"info"}),(0,r.jsx)("p",{className:"text-sm text-blue-800 dark:text-blue-200",children:"Cursor IDE not detected. Please paste your tokens manually."})]})}),(0,r.jsxs)("div",{children:[(0,r.jsxs)("label",{className:"block text-sm font-medium mb-2",children:["Access Token ",(0,r.jsx)("span",{className:"text-red-500",children:"*"})]}),(0,r.jsx)("textarea",{value:l,onChange:e=>n(e.target.value),placeholder:"Access token will be auto-filled...",rows:3,className:"w-full px-3 py-2 text-sm font-mono border border-border rounded-lg bg-background focus:outline-none focus:border-primary resize-none"})]}),(0,r.jsxs)("div",{children:[(0,r.jsxs)("label",{className:"block text-sm font-medium mb-2",children:["Machine ID ",(0,r.jsx)("span",{className:"text-red-500",children:"*"})]}),(0,r.jsx)(i.pd,{value:o,onChange:e=>d(e.target.value),placeholder:"Machine ID will be auto-filled...",className:"font-mono text-sm"})]}),c&&(0,r.jsx)("div",{className:"bg-red-50 dark:bg-red-900/20 p-3 rounded-lg border border-red-200 dark:border-red-800",children:(0,r.jsx)("p",{className:"text-sm text-red-600 dark:text-red-400",children:c})}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.$n,{onClick:g,fullWidth:!0,disabled:m||!l.trim()||!o.trim(),children:m?"Importing...":"Import Token"}),(0,r.jsx)(i.$n,{onClick:s,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})]})})}o.propTypes={isOpen:n().bool.isRequired,onSuccess:n().func,onClose:n().func.isRequired}},76332:(e,t,s)=>{s.d(t,{default:()=>o});var r=s(95155),a=s(73321),l=s(98500),n=s.n(l);let i={dashboard:"Dashboard",providers:"Providers",combos:"Combos",settings:"Settings",usage:"Usage",logger:"Logger",translator:"Translator",playground:"Playground",add:"Add",edit:"Edit",keys:"API Keys",models:"Models",logs:"Logs"};function o(){let e=(0,a.usePathname)();if(!e||"/dashboard"===e)return null;let t=e.split("/").filter(Boolean),s=t.map((e,s)=>({label:i[e]||e.charAt(0).toUpperCase()+e.slice(1),href:"/"+t.slice(0,s+1).join("/"),isLast:s===t.length-1}));return(0,r.jsx)("nav",{"aria-label":"Breadcrumb",style:{display:"flex",alignItems:"center",gap:"6px",fontSize:"13px",color:"var(--text-secondary, #888)",padding:"8px 0",marginBottom:"8px"},children:s.map((e,t)=>(0,r.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[t>0&&(0,r.jsx)("span",{style:{opacity:.4,fontSize:"11px"},"aria-hidden":"true",children:"›"}),e.isLast?(0,r.jsx)("span",{"aria-current":"page",style:{color:"var(--text-primary, #e0e0e0)",fontWeight:500},children:e.label}):(0,r.jsx)(n(),{href:e.href,style:{color:"var(--text-secondary, #888)",textDecoration:"none",transition:"color 0.15s"},onMouseEnter:e=>e.currentTarget.style.color="var(--accent, #818cf8)",onMouseLeave:e=>e.currentTarget.style.color="var(--text-secondary, #888)",children:e.label})]},e.href))})}},80178:(e,t,s)=>{s.d(t,{default:()=>d});var r=s(95155),a=s(12115),l=s(14051),n=s.n(l),i=s(40993),o=s(30949);function d({isOpen:e,provider:t,providerInfo:s,onSuccess:l,onClose:n,idcConfig:d}){let[c,x]=(0,a.useState)("waiting"),[m,u]=(0,a.useState)(null),[p,h]=(0,a.useState)(""),[b,f]=(0,a.useState)(null),[g,y]=(0,a.useState)(!1),[j,v]=(0,a.useState)(null),[N,k]=(0,a.useState)(!1),w=(0,a.useRef)(null),{copied:C,copy:S}=(0,o.C)(),[T,I]=(0,a.useState)(!1),[O,$]=(0,a.useState)("/callback?code=..."),L=(0,a.useRef)(!1),R=(0,a.useRef)(!1);(0,a.useEffect)(()=>{I("localhost"===window.location.hostname||"127.0.0.1"===window.location.hostname),$(`${window.location.origin}/callback?code=...`)},[]);let M=(0,a.useCallback)(async(e,s)=>{if(m)try{let r=await fetch(`/api/oauth/${t}/exchange`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:e,redirectUri:m.redirectUri,codeVerifier:m.codeVerifier,state:s})}),a=await r.json();if(!r.ok)throw Error(a.error);x("success"),l?.()}catch(e){f(e.message),x("error")}},[m,t,l]),E=(0,a.useCallback)(async(e,s,r,a)=>{k(!0);for(let n=0;n<60;n++){await new Promise(e=>setTimeout(e,1e3*r));try{let n=await fetch(`/api/oauth/${t}/poll`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({deviceCode:e,codeVerifier:s,extraData:a})}),i=await n.json();if(i.success){x("success"),k(!1),l?.();return}if("expired_token"===i.error||"access_denied"===i.error)throw Error(i.errorDescription||i.error);"slow_down"===i.error&&(r=Math.min(r+5,30))}catch(e){f(e.message),x("error"),k(!1);return}}f("Authorization timeout"),x("error"),k(!1)},[t,l]),A=(0,a.useCallback)(async()=>{if(t)try{let e;if(f(null),"github"===t||"qwen"===t||"kiro"===t||"kimi-coding"===t||"kilocode"===t){y(!0),x("waiting");let e=await fetch(`/api/oauth/${t}/device-code`),s=await e.json();if(!e.ok)throw Error(s.error);v(s);let r=s.verification_uri_complete||s.verification_uri;r&&window.open(r,"oauth_verify");let a="kiro"===t?{_clientId:s._clientId,_clientSecret:s._clientSecret}:null;E(s.device_code,s.codeVerifier,s.interval||5,a);return}if("codex"===t&&T){try{let e=await fetch("/api/oauth/codex/start-callback-server"),t=await e.json();if(!e.ok)throw Error(t.error);u({...t,redirectUri:t.redirectUri}),x("waiting"),window.open(t.authUrl,"oauth_auth"),k(!0);for(let e=0;e<150;e++){await new Promise(e=>setTimeout(e,2e3));let e=await fetch("/api/oauth/codex/poll-callback",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}),t=await e.json();if(t.success){x("success"),k(!1),l?.();return}if(t.error&&!t.pending)throw Error(t.errorDescription||t.error)}throw k(!1),Error("Authorization timeout")}catch(e){k(!1),x("input"),f(e.message+" — You can paste the callback URL manually below.")}return}if("codex"===t||"openai"===t)e="http://localhost:1455/auth/callback";else{let t=window.location.port||("https:"===window.location.protocol?"443":"80");e=`http://localhost:${t}/callback`}let s=await fetch(`/api/oauth/${t}/authorize?redirect_uri=${encodeURIComponent(e)}`),r=await s.json();if(!s.ok)throw Error(r.error);u({...r,redirectUri:e}),T?(x("waiting"),w.current=window.open(r.authUrl,"oauth_popup","width=600,height=700"),w.current||x("input")):(x("input"),window.open(r.authUrl,"oauth_auth"))}catch(e){f(e.message),x("error")}},[t,T,E,l]);(0,a.useEffect)(()=>{e||(R.current=!1)},[e]),(0,a.useEffect)(()=>{e&&t&&(R.current||(R.current=!0,u(null),h(""),f(null),y(!1),v(null),k(!1),A()))},[e,t,A]),(0,a.useEffect)(()=>{let e;if(!m)return;L.current=!1;let t=async e=>{if(L.current)return;let{code:t,state:s,error:r,errorDescription:a}=e;if(r){L.current=!0,f(a||r),x("error");return}t&&(L.current=!0,await M(t,s))},s=e=>{let s=window.location.port,r=e.origin.match(/^https?:\/\/(localhost|127\.0\.0\.1)(:\d+)?$/)&&new URL(e.origin).port===s;(e.origin===window.location.origin||r)&&e.data?.type==="oauth_callback"&&t(e.data.data)};window.addEventListener("message",s);try{(e=new BroadcastChannel("oauth_callback")).onmessage=e=>t(e.data)}catch(e){console.log("BroadcastChannel not supported")}let r=e=>{if("oauth_callback"===e.key&&e.newValue)try{let s=JSON.parse(e.newValue);t(s),localStorage.removeItem("oauth_callback")}catch(e){console.log("Failed to parse localStorage data")}};window.addEventListener("storage",r);try{let e=localStorage.getItem("oauth_callback");if(e){let s=JSON.parse(e);s.timestamp&&Date.now()-s.timestamp<3e4&&(t(s),localStorage.removeItem("oauth_callback"))}}catch{}return()=>{window.removeEventListener("message",s),window.removeEventListener("storage",r),e&&e.close()}},[m,M]);let F=async()=>{try{f(null);let e=new URL(p),t=e.searchParams.get("code"),s=e.searchParams.get("state"),r=e.searchParams.get("error");if(r)throw Error(e.searchParams.get("error_description")||r);if(!t)throw Error("No authorization code found in URL");await M(t,s)}catch(e){f(e.message),x("error")}};return t&&s?(0,r.jsx)(i.aF,{isOpen:e,title:`Connect ${s.name}`,onClose:n,size:"lg",children:(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:["waiting"===c&&!g&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-primary/10 flex items-center justify-center",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-primary animate-spin",children:"progress_activity"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Waiting for Authorization"}),(0,r.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Complete the authorization in the popup window."}),(0,r.jsx)(i.$n,{variant:"ghost",onClick:()=>x("input"),children:"Popup blocked? Enter URL manually"})]}),"waiting"===c&&g&&j&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"text-center py-4",children:[(0,r.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Visit the URL below and enter the code:"}),(0,r.jsxs)("div",{className:"bg-sidebar p-4 rounded-lg mb-4",children:[(0,r.jsx)("p",{className:"text-xs text-text-muted mb-1",children:"Verification URL"}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("code",{className:"flex-1 text-sm break-all",children:j.verification_uri}),(0,r.jsx)(i.$n,{size:"sm",variant:"ghost",icon:"verify_url"===C?"check":"content_copy",onClick:()=>S(j.verification_uri,"verify_url")})]})]}),(0,r.jsxs)("div",{className:"bg-primary/10 p-4 rounded-lg",children:[(0,r.jsx)("p",{className:"text-xs text-text-muted mb-1",children:"Your Code"}),(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2",children:[(0,r.jsx)("p",{className:"text-2xl font-mono font-bold text-primary",children:j.user_code}),(0,r.jsx)(i.$n,{size:"sm",variant:"ghost",icon:"user_code"===C?"check":"content_copy",onClick:()=>S(j.user_code,"user_code")})]})]})]}),N&&(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2 text-sm text-text-muted",children:[(0,r.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),"Waiting for authorization..."]})]}),"input"===c&&!g&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"space-y-4",children:[!T&&(0,r.jsxs)("div",{className:"rounded-lg border border-blue-500/30 bg-blue-500/10 p-3 text-xs text-blue-200",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-sm align-middle mr-1",children:"info"}),(0,r.jsx)("strong",{children:"Remote access:"})," Since you're accessing OmniRoute remotely, after authorizing you'll see an error page (localhost not found). That's expected — just copy the full URL from your browser's address bar and paste it below."]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-medium mb-2",children:"Step 1: Open this URL in your browser"}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.pd,{value:m?.authUrl||"",readOnly:!0,className:"flex-1 font-mono text-xs"}),(0,r.jsx)(i.$n,{variant:"secondary",icon:"auth_url"===C?"check":"content_copy",onClick:()=>S(m?.authUrl,"auth_url"),children:"Copy"})]})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-medium mb-2",children:"Step 2: Paste the callback URL here"}),(0,r.jsx)("p",{className:"text-xs text-text-muted mb-2",children:"After authorization, copy the full URL from your browser."}),(0,r.jsx)(i.pd,{value:p,onChange:e=>h(e.target.value),placeholder:O,className:"font-mono text-xs"})]})]}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.$n,{onClick:F,fullWidth:!0,disabled:!p,children:"Connect"}),(0,r.jsx)(i.$n,{onClick:n,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]}),"success"===c&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-green-100 dark:bg-green-900/30 flex items-center justify-center",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-green-600",children:"check_circle"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connected Successfully!"}),(0,r.jsxs)("p",{className:"text-sm text-text-muted mb-4",children:["Your ",s.name," account has been connected."]}),(0,r.jsx)(i.$n,{onClick:n,fullWidth:!0,children:"Done"})]}),"error"===c&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-red-100 dark:bg-red-900/30 flex items-center justify-center",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-red-600",children:"error"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connection Failed"}),(0,r.jsx)("p",{className:"text-sm text-red-600 mb-4",children:b}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.$n,{onClick:A,variant:"secondary",fullWidth:!0,children:"Try Again"}),(0,r.jsx)(i.$n,{onClick:n,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})]})}):null}d.propTypes={isOpen:n().bool.isRequired,provider:n().string,providerInfo:n().shape({name:n().string}),onSuccess:n().func,onClose:n().func.isRequired}},80927:(e,t,s)=>{s.d(t,{default:()=>i});var r=s(95155),a=s(67040);let l={default:"bg-black/5 dark:bg-white/10 text-text-muted",primary:"bg-primary/10 text-primary",success:"bg-green-500/10 text-green-600 dark:text-green-400",warning:"bg-yellow-500/10 text-yellow-600 dark:text-yellow-400",error:"bg-red-500/10 text-red-600 dark:text-red-400",info:"bg-blue-500/10 text-blue-600 dark:text-blue-400"},n={sm:"px-2 py-0.5 text-[10px]",md:"px-2.5 py-1 text-xs",lg:"px-3 py-1.5 text-sm"};function i({children:e,variant:t="default",size:s="md",dot:i=!1,icon:o,className:d}){return(0,r.jsxs)("span",{className:(0,a.cn)("inline-flex items-center gap-1.5 rounded-full font-semibold",l[t],n[s],d),children:[i&&(0,r.jsx)("span",{"aria-hidden":"true",className:(0,a.cn)("size-1.5 rounded-full","success"===t&&"bg-green-500","warning"===t&&"bg-yellow-500","error"===t&&"bg-red-500","info"===t&&"bg-blue-500","primary"===t&&"bg-primary","default"===t&&"bg-gray-500")}),o&&(0,r.jsx)("span",{className:"material-symbols-outlined text-[14px]","aria-hidden":"true",children:o}),e]})}},81060:(e,t,s)=>{s.d(t,{default:()=>l});var r=s(95155),a=s(67040);function l({children:e,title:t,subtitle:s,icon:l,action:n,padding:i="md",hover:o=!1,className:d,...c}){return(0,r.jsxs)("div",{className:(0,a.cn)("bg-surface","border border-black/5 dark:border-white/5","rounded-lg shadow-sm",o&&"hover:shadow-md hover:border-primary/30 transition-all cursor-pointer",{none:"",xs:"p-3",sm:"p-4",md:"p-6",lg:"p-8"}[i],d),...c,children:[(t||n)&&(0,r.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[l&&(0,r.jsx)("div",{className:"p-2 rounded-lg bg-bg text-text-muted",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:l})}),(0,r.jsxs)("div",{children:[t&&(0,r.jsx)("h3",{className:"text-text-main font-semibold",children:t}),s&&(0,r.jsx)("p",{className:"text-sm text-text-muted",children:s})]})]}),n]}),e]})}l.Section=function({children:e,className:t,...s}){return(0,r.jsx)("div",{className:(0,a.cn)("p-4 rounded-lg","bg-black/[0.02] dark:bg-white/[0.02]","border border-black/5 dark:border-white/5",t),...s,children:e})},l.Row=function({children:e,className:t,...s}){return(0,r.jsx)("div",{className:(0,a.cn)("p-3 -mx-3 px-3 transition-colors","border-b border-black/5 dark:border-white/5 last:border-b-0","hover:bg-black/[0.02] dark:hover:bg-white/[0.02]",t),...s,children:e})},l.ListItem=function({children:e,actions:t,className:s,...l}){return(0,r.jsxs)("div",{className:(0,a.cn)("group flex items-center justify-between p-3 -mx-3 px-3","border-b border-black/[0.03] dark:border-white/[0.03] last:border-b-0","hover:bg-black/[0.02] dark:hover:bg-white/[0.02]","transition-colors",s),...l,children:[(0,r.jsx)("div",{className:"flex-1 min-w-0",children:e}),t&&(0,r.jsx)("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 focus-within:opacity-100 transition-opacity",children:t})]})}},85444:(e,t,s)=>{s.d(t,{default:()=>x});var r=s(95155),a=s(12115),l=s(14051),n=s.n(l),i=s(71361),o=s(81135),d=s(20909);let c=[...Object.keys(d.zN),...Object.keys(d.IS),...Object.keys(d.fg)];function x({isOpen:e,onClose:t,onSelect:s,selectedModel:l,activeProviders:n=[],title:x="Select Model",modelAliases:m={}}){let[u,p]=(0,a.useState)(""),[h,b]=(0,a.useState)([]),[f,g]=(0,a.useState)([]),[y,j]=(0,a.useState)({}),v=async()=>{try{let e=await fetch("/api/combos");if(!e.ok)throw Error(`Failed to fetch combos: ${e.status}`);let t=await e.json();b(t.combos||[])}catch(e){console.error("Error fetching combos:",e),b([])}};(0,a.useEffect)(()=>{e&&v()},[e]);let N=async()=>{try{let e=await fetch("/api/provider-nodes");if(!e.ok)throw Error(`Failed to fetch provider nodes: ${e.status}`);let t=await e.json();g(t.nodes||[])}catch(e){console.error("Error fetching provider nodes:",e),g([])}};(0,a.useEffect)(()=>{e&&N()},[e]);let k=async()=>{try{let e=await fetch("/api/provider-models");if(!e.ok)throw Error(`Failed to fetch custom models: ${e.status}`);let t=await e.json();j(t.models||{})}catch(e){console.error("Error fetching custom models:",e),j({})}};(0,a.useEffect)(()=>{e&&k()},[e]);let w=(0,a.useMemo)(()=>({...d.zN,...d.IS,...d.fg}),[]),C=(0,a.useMemo)(()=>{let e={};return[...new Set([...n.map(e=>e.provider)])].sort((e,t)=>{let s=c.indexOf(e),r=c.indexOf(t);return(-1===s?999:s)-(-1===r?999:r)}).forEach(t=>{let s=o.Xg[t]||t,r=w[t]||{name:t,color:"#666"},a=(0,d.mq)(t)||(0,d.gb)(t),l=y[t]||[];if(r.passthroughModels){let a=Object.entries(m).filter(([,e])=>e.startsWith(`${s}/`)).map(([e,t])=>({id:t.replace(`${s}/`,""),name:e,value:t})),n=l.filter(e=>!a.some(t=>t.id===e.id)).map(e=>({id:e.id,name:e.name||e.id,value:`${s}/${e.id}`,isCustom:!0})),i=[...a,...n];if(i.length>0){let a=f.find(e=>e.id===t),l=a?.name||r.name;e[t]={name:l,alias:s,color:r.color,models:i}}}else if(a){let s=f.find(e=>e.id===t),a=s?.name||r.name,n=Object.entries(m).filter(([,e])=>e.startsWith(`${t}/`)).map(([e,s])=>({id:s.replace(`${t}/`,""),name:e,value:s})),i=l.filter(e=>!n.some(t=>t.id===e.id)).map(e=>({id:e.id,name:e.name||e.id,value:`${t}/${e.id}`,isCustom:!0})),o=[...n,...i];o.length>0&&(e[t]={name:a,alias:s?.prefix||t,color:r.color,models:o,isCustom:!0,hasModels:!0})}else{let a=(0,o.KC)(t),n=[...a.map(e=>({id:e.id,name:e.name,value:`${s}/${e.id}`})),...l.filter(e=>!a.some(t=>t.id===e.id)).map(e=>({id:e.id,name:e.name||e.id,value:`${s}/${e.id}`,isCustom:!0}))];n.length>0&&(e[t]={name:r.name,alias:s,color:r.color,models:n})}}),e},[n,m,w,f,y]),S=(0,a.useMemo)(()=>{if(!u.trim())return h;let e=u.toLowerCase();return h.filter(t=>t.name.toLowerCase().includes(e))},[h,u]),T=(0,a.useMemo)(()=>{if(!u.trim())return C;let e=u.toLowerCase(),t={};return Object.entries(C).forEach(([s,r])=>{let a=r.models.filter(t=>t.name.toLowerCase().includes(e)||t.id.toLowerCase().includes(e)),l=r.name.toLowerCase().includes(e);(a.length>0||l)&&(t[s]={...r,models:a})}),t},[C,u]),I=e=>{s(e),t(),p("")};return(0,r.jsxs)(i.default,{isOpen:e,onClose:()=>{t(),p("")},title:x,size:"md",className:"p-4!",children:[(0,r.jsx)("div",{className:"mb-3",children:(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsx)("span",{className:"material-symbols-outlined absolute left-2.5 top-1/2 -translate-y-1/2 text-text-muted text-[16px]",children:"search"}),(0,r.jsx)("input",{type:"text",placeholder:"Search...",value:u,onChange:e=>p(e.target.value),className:"w-full pl-8 pr-3 py-1.5 bg-surface border border-border rounded text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"})]})}),(0,r.jsxs)("div",{className:"max-h-[300px] overflow-y-auto space-y-3",children:[S.length>0&&(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5 mb-1.5 sticky top-0 bg-surface py-0.5",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-primary text-[14px]",children:"layers"}),(0,r.jsx)("span",{className:"text-xs font-medium text-primary",children:"Combos"}),(0,r.jsxs)("span",{className:"text-[10px] text-text-muted",children:["(",S.length,")"]})]}),(0,r.jsx)("div",{className:"flex flex-wrap gap-1.5",children:S.map(e=>{let t=l===e.name;return(0,r.jsx)("button",{onClick:()=>I({id:e.name,name:e.name,value:e.name}),className:`
16
16
  px-2 py-1 rounded-xl text-xs font-medium transition-all border hover:cursor-pointer
17
17
  ${t?"bg-primary text-white border-primary":"bg-surface border-border text-text-main hover:border-primary/50 hover:bg-primary/5"}
18
18
  `,children:e.name},e.id)})})]}),Object.entries(T).map(([e,t])=>(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5 mb-1.5 sticky top-0 bg-surface py-0.5",children:[(0,r.jsx)("div",{className:"w-2 h-2 rounded-full",style:{backgroundColor:t.color}}),(0,r.jsx)("span",{className:"text-xs font-medium text-primary",children:t.name}),(0,r.jsxs)("span",{className:"text-[10px] text-text-muted",children:["(",t.models.length,")"]})]}),(0,r.jsx)("div",{className:"flex flex-wrap gap-1.5",children:t.models.map(e=>{let t=l===e.value;return(0,r.jsxs)("button",{onClick:()=>I(e),className:`
package/app/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omniroute",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.",
5
5
  "type": "module",
6
6
  "bin": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omniroute",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.",
5
5
  "type": "module",
6
6
  "bin": {