omniroute 0.3.0 → 0.4.0

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 (884) hide show
  1. package/README.md +35 -1150
  2. package/app/.next/BUILD_ID +1 -1
  3. package/app/.next/app-path-routes-manifest.json +28 -23
  4. package/app/.next/build-manifest.json +2 -2
  5. package/app/.next/prerender-manifest.json +75 -3
  6. package/app/.next/routes-manifest.json +30 -0
  7. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/health/page.js +2 -0
  17. package/app/.next/server/app/(dashboard)/dashboard/health/page.js.nft.json +1 -0
  18. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -0
  19. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js.nft.json +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
  23. package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  29. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  31. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  32. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  33. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  34. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  35. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  36. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  37. package/app/.next/server/app/(dashboard)/dashboard/settings/page.js +2 -2
  38. package/app/.next/server/app/(dashboard)/dashboard/settings/page.js.nft.json +1 -1
  39. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  40. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page.js +1 -1
  41. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page.js.nft.json +1 -1
  42. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  43. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -2
  44. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  45. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  46. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  47. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  48. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  49. package/app/.next/server/app/_global-error/page.js +2 -2
  50. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/_global-error.html +2 -2
  52. package/app/.next/server/app/_global-error.rsc +3 -3
  53. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +3 -3
  54. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  55. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  56. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  57. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +2 -2
  58. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  59. package/app/.next/server/app/_not-found/page.js +1 -1
  60. package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
  61. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  62. package/app/.next/server/app/_not-found.html +1 -1
  63. package/app/.next/server/app/_not-found.rsc +5 -5
  64. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +5 -5
  65. package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  66. package/app/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
  67. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  68. package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  69. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  70. package/app/.next/server/app/api/auth/login/route.js +1 -1
  71. package/app/.next/server/app/api/auth/login/route.js.nft.json +1 -1
  72. package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  73. package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  74. package/app/.next/server/app/api/cache/route.js +2 -0
  75. package/app/.next/server/app/api/cache/route.js.nft.json +1 -0
  76. package/app/.next/server/app/api/cache/route_client-reference-manifest.js +1 -0
  77. package/app/.next/server/app/api/cache/stats/route.js +1 -1
  78. package/app/.next/server/app/api/cache/stats/route_client-reference-manifest.js +1 -1
  79. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -157
  80. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  81. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  82. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +2 -2
  83. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  84. package/app/.next/server/app/api/cli-tools/backups/route.js +2 -2
  85. package/app/.next/server/app/api/cli-tools/backups/route_client-reference-manifest.js +1 -1
  86. package/app/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
  87. package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  88. package/app/.next/server/app/api/cli-tools/cline-settings/route.js +2 -2
  89. package/app/.next/server/app/api/cli-tools/cline-settings/route_client-reference-manifest.js +1 -1
  90. package/app/.next/server/app/api/cli-tools/codex-profiles/route.js +2 -2
  91. package/app/.next/server/app/api/cli-tools/codex-profiles/route_client-reference-manifest.js +1 -1
  92. package/app/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
  93. package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  94. package/app/.next/server/app/api/cli-tools/droid-settings/route.js +1 -1
  95. package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  96. package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route_client-reference-manifest.js +1 -1
  97. package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +1 -1
  98. package/app/.next/server/app/api/cli-tools/kilo-settings/route_client-reference-manifest.js +1 -1
  99. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +1 -1
  100. package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  101. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route.js +2 -2
  102. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route_client-reference-manifest.js +1 -1
  103. package/app/.next/server/app/api/cloud/auth/route.js +1 -156
  104. package/app/.next/server/app/api/cloud/auth/route.js.nft.json +1 -1
  105. package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
  106. package/app/.next/server/app/api/cloud/credentials/update/route.js +1 -156
  107. package/app/.next/server/app/api/cloud/credentials/update/route.js.nft.json +1 -1
  108. package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
  109. package/app/.next/server/app/api/cloud/model/resolve/route.js +1 -156
  110. package/app/.next/server/app/api/cloud/model/resolve/route.js.nft.json +1 -1
  111. package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
  112. package/app/.next/server/app/api/cloud/models/alias/route.js +1 -1
  113. package/app/.next/server/app/api/cloud/models/alias/route.js.nft.json +1 -1
  114. package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
  115. package/app/.next/server/app/api/combos/[id]/route.js +1 -1
  116. package/app/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
  117. package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
  118. package/app/.next/server/app/api/combos/metrics/route_client-reference-manifest.js +1 -1
  119. package/app/.next/server/app/api/combos/route.js +1 -1
  120. package/app/.next/server/app/api/combos/route.js.nft.json +1 -1
  121. package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
  122. package/app/.next/server/app/api/combos/test/route.js +1 -156
  123. package/app/.next/server/app/api/combos/test/route.js.nft.json +1 -1
  124. package/app/.next/server/app/api/combos/test/route_client-reference-manifest.js +1 -1
  125. package/app/.next/server/app/api/compliance/audit-log/route.js +1 -156
  126. package/app/.next/server/app/api/compliance/audit-log/route.js.nft.json +1 -1
  127. package/app/.next/server/app/api/compliance/audit-log/route_client-reference-manifest.js +1 -1
  128. package/app/.next/server/app/api/db-backups/route.js +1 -156
  129. package/app/.next/server/app/api/db-backups/route.js.nft.json +1 -1
  130. package/app/.next/server/app/api/db-backups/route_client-reference-manifest.js +1 -1
  131. package/app/.next/server/app/api/evals/[suiteId]/route_client-reference-manifest.js +1 -1
  132. package/app/.next/server/app/api/evals/route_client-reference-manifest.js +1 -1
  133. package/app/.next/server/app/api/fallback/chains/route.js +3 -1
  134. package/app/.next/server/app/api/fallback/chains/route.js.nft.json +1 -1
  135. package/app/.next/server/app/api/fallback/chains/route_client-reference-manifest.js +1 -1
  136. package/app/.next/server/app/api/init/route.js +1 -1
  137. package/app/.next/server/app/api/init/route.js.nft.json +1 -1
  138. package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  139. package/app/.next/server/app/api/keys/[id]/route.js +1 -1
  140. package/app/.next/server/app/api/keys/[id]/route.js.nft.json +1 -1
  141. package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  142. package/app/.next/server/app/api/keys/route.js +1 -1
  143. package/app/.next/server/app/api/keys/route.js.nft.json +1 -1
  144. package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
  145. package/app/.next/server/app/api/models/alias/route.js +1 -1
  146. package/app/.next/server/app/api/models/alias/route.js.nft.json +1 -1
  147. package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  148. package/app/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -1
  149. package/app/.next/server/app/api/models/catalog/route.js +2 -156
  150. package/app/.next/server/app/api/models/catalog/route.js.nft.json +1 -1
  151. package/app/.next/server/app/api/models/catalog/route_client-reference-manifest.js +1 -1
  152. package/app/.next/server/app/api/models/route.js +2 -156
  153. package/app/.next/server/app/api/models/route.js.nft.json +1 -1
  154. package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  155. package/app/.next/server/app/api/monitoring/health/route.js +2 -0
  156. package/app/.next/server/app/api/monitoring/health/route.js.nft.json +1 -0
  157. package/app/.next/server/app/api/monitoring/health/route_client-reference-manifest.js +1 -0
  158. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +2 -2
  159. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  160. package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
  161. package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
  162. package/app/.next/server/app/api/oauth/cursor/import/route.js +1 -1
  163. package/app/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  164. package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
  165. package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
  166. package/app/.next/server/app/api/oauth/kiro/import/route.js +1 -1
  167. package/app/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  168. package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
  169. package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
  170. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  171. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  172. package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
  173. package/app/.next/server/app/api/policies/route.js +3 -1
  174. package/app/.next/server/app/api/policies/route.js.nft.json +1 -1
  175. package/app/.next/server/app/api/policies/route_client-reference-manifest.js +1 -1
  176. package/app/.next/server/app/api/pricing/defaults/route_client-reference-manifest.js +1 -1
  177. package/app/.next/server/app/api/pricing/models/route.js +1 -156
  178. package/app/.next/server/app/api/pricing/models/route.js.nft.json +1 -1
  179. package/app/.next/server/app/api/pricing/models/route_client-reference-manifest.js +1 -1
  180. package/app/.next/server/app/api/pricing/route.js +1 -156
  181. package/app/.next/server/app/api/pricing/route.js.nft.json +1 -1
  182. package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
  183. package/app/.next/server/app/api/provider-models/route.js +1 -156
  184. package/app/.next/server/app/api/provider-models/route.js.nft.json +1 -1
  185. package/app/.next/server/app/api/provider-models/route_client-reference-manifest.js +1 -1
  186. package/app/.next/server/app/api/provider-nodes/[id]/route.js +1 -156
  187. package/app/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  188. package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
  189. package/app/.next/server/app/api/provider-nodes/route.js +2 -156
  190. package/app/.next/server/app/api/provider-nodes/route.js.nft.json +1 -1
  191. package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
  192. package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
  193. package/app/.next/server/app/api/providers/[id]/models/route.js +2 -156
  194. package/app/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  195. package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
  196. package/app/.next/server/app/api/providers/[id]/route.js +1 -1
  197. package/app/.next/server/app/api/providers/[id]/route.js.nft.json +1 -1
  198. package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
  199. package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
  200. package/app/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  201. package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
  202. package/app/.next/server/app/api/providers/client/route.js +1 -156
  203. package/app/.next/server/app/api/providers/client/route.js.nft.json +1 -1
  204. package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  205. package/app/.next/server/app/api/providers/route.js +2 -1
  206. package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
  207. package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
  208. package/app/.next/server/app/api/providers/test-batch/route.js +2 -156
  209. package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  210. package/app/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
  211. package/app/.next/server/app/api/providers/validate/route.js +1 -156
  212. package/app/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
  213. package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
  214. package/app/.next/server/app/api/rate-limit/route.js +1 -156
  215. package/app/.next/server/app/api/rate-limit/route.js.nft.json +1 -1
  216. package/app/.next/server/app/api/rate-limit/route_client-reference-manifest.js +1 -1
  217. package/app/.next/server/app/api/rate-limits/route.js +1 -1
  218. package/app/.next/server/app/api/rate-limits/route.js.nft.json +1 -1
  219. package/app/.next/server/app/api/rate-limits/route_client-reference-manifest.js +1 -1
  220. package/app/.next/server/app/api/resilience/reset/route.js +1 -1
  221. package/app/.next/server/app/api/resilience/reset/route.js.nft.json +1 -1
  222. package/app/.next/server/app/api/resilience/reset/route_client-reference-manifest.js +1 -1
  223. package/app/.next/server/app/api/resilience/route.js +1 -156
  224. package/app/.next/server/app/api/resilience/route.js.nft.json +1 -1
  225. package/app/.next/server/app/api/resilience/route_client-reference-manifest.js +1 -1
  226. package/app/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  227. package/app/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  228. package/app/.next/server/app/api/settings/combo-defaults/route.js +1 -156
  229. package/app/.next/server/app/api/settings/combo-defaults/route.js.nft.json +1 -1
  230. package/app/.next/server/app/api/settings/combo-defaults/route_client-reference-manifest.js +1 -1
  231. package/app/.next/server/app/api/settings/ip-filter/route_client-reference-manifest.js +1 -1
  232. package/app/.next/server/app/api/settings/proxy/route.js +1 -156
  233. package/app/.next/server/app/api/settings/proxy/route.js.nft.json +1 -1
  234. package/app/.next/server/app/api/settings/proxy/route_client-reference-manifest.js +1 -1
  235. package/app/.next/server/app/api/settings/proxy/test/route_client-reference-manifest.js +1 -1
  236. package/app/.next/server/app/api/settings/require-login/route.js +1 -156
  237. package/app/.next/server/app/api/settings/require-login/route.js.nft.json +1 -1
  238. package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
  239. package/app/.next/server/app/api/settings/route.js +1 -1
  240. package/app/.next/server/app/api/settings/route.js.nft.json +1 -1
  241. package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  242. package/app/.next/server/app/api/settings/system-prompt/route.js +1 -156
  243. package/app/.next/server/app/api/settings/system-prompt/route.js.nft.json +1 -1
  244. package/app/.next/server/app/api/settings/system-prompt/route_client-reference-manifest.js +1 -1
  245. package/app/.next/server/app/api/settings/thinking-budget/route.js +1 -156
  246. package/app/.next/server/app/api/settings/thinking-budget/route.js.nft.json +1 -1
  247. package/app/.next/server/app/api/settings/thinking-budget/route_client-reference-manifest.js +1 -1
  248. package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  249. package/app/.next/server/app/api/storage/health/route_client-reference-manifest.js +1 -1
  250. package/app/.next/server/app/api/sync/cloud/route.js +1 -1
  251. package/app/.next/server/app/api/sync/cloud/route.js.nft.json +1 -1
  252. package/app/.next/server/app/api/sync/cloud/route_client-reference-manifest.js +1 -1
  253. package/app/.next/server/app/api/sync/initialize/route.js +1 -1
  254. package/app/.next/server/app/api/sync/initialize/route.js.nft.json +1 -1
  255. package/app/.next/server/app/api/sync/initialize/route_client-reference-manifest.js +1 -1
  256. package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
  257. package/app/.next/server/app/api/telemetry/summary/route.js +1 -1
  258. package/app/.next/server/app/api/telemetry/summary/route_client-reference-manifest.js +1 -1
  259. package/app/.next/server/app/api/token-health/route.js +1 -156
  260. package/app/.next/server/app/api/token-health/route.js.nft.json +1 -1
  261. package/app/.next/server/app/api/token-health/route_client-reference-manifest.js +1 -1
  262. package/app/.next/server/app/api/translator/detect/route_client-reference-manifest.js +1 -1
  263. package/app/.next/server/app/api/translator/history/route_client-reference-manifest.js +1 -1
  264. package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
  265. package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
  266. package/app/.next/server/app/api/translator/send/route.js +1 -1
  267. package/app/.next/server/app/api/translator/send/route.js.nft.json +1 -1
  268. package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
  269. package/app/.next/server/app/api/translator/translate/route.js +1 -156
  270. package/app/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
  271. package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
  272. package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  273. package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  274. package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
  275. package/app/.next/server/app/api/usage/analytics/route.js +1 -156
  276. package/app/.next/server/app/api/usage/analytics/route.js.nft.json +1 -1
  277. package/app/.next/server/app/api/usage/analytics/route_client-reference-manifest.js +1 -1
  278. package/app/.next/server/app/api/usage/budget/route.js +3 -1
  279. package/app/.next/server/app/api/usage/budget/route.js.nft.json +1 -1
  280. package/app/.next/server/app/api/usage/budget/route_client-reference-manifest.js +1 -1
  281. package/app/.next/server/app/api/usage/call-logs/[id]/route.js +1 -156
  282. package/app/.next/server/app/api/usage/call-logs/[id]/route.js.nft.json +1 -1
  283. package/app/.next/server/app/api/usage/call-logs/[id]/route_client-reference-manifest.js +1 -1
  284. package/app/.next/server/app/api/usage/call-logs/route.js +1 -156
  285. package/app/.next/server/app/api/usage/call-logs/route.js.nft.json +1 -1
  286. package/app/.next/server/app/api/usage/call-logs/route_client-reference-manifest.js +1 -1
  287. package/app/.next/server/app/api/usage/history/route.js +1 -156
  288. package/app/.next/server/app/api/usage/history/route.js.nft.json +1 -1
  289. package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
  290. package/app/.next/server/app/api/usage/logs/route.js +1 -156
  291. package/app/.next/server/app/api/usage/logs/route.js.nft.json +1 -1
  292. package/app/.next/server/app/api/usage/logs/route_client-reference-manifest.js +1 -1
  293. package/app/.next/server/app/api/usage/proxy-logs/route_client-reference-manifest.js +1 -1
  294. package/app/.next/server/app/api/usage/request-logs/route.js +1 -156
  295. package/app/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  296. package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
  297. package/app/.next/server/app/api/v1/api/chat/route.js +1 -156
  298. package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  299. package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
  300. package/app/.next/server/app/api/v1/audio/speech/route.js +1 -1
  301. package/app/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  302. package/app/.next/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -1
  303. package/app/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
  304. package/app/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  305. package/app/.next/server/app/api/v1/audio/transcriptions/route_client-reference-manifest.js +1 -1
  306. package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
  307. package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  308. package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
  309. package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
  310. package/app/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  311. package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
  312. package/app/.next/server/app/api/v1/images/generations/route.js +1 -1
  313. package/app/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  314. package/app/.next/server/app/api/v1/images/generations/route_client-reference-manifest.js +1 -1
  315. package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
  316. package/app/.next/server/app/api/v1/messages/route.js +1 -156
  317. package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
  318. package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
  319. package/app/.next/server/app/api/v1/models/route.js +2 -1
  320. package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
  321. package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
  322. package/app/.next/server/app/api/v1/moderations/route.js +1 -156
  323. package/app/.next/server/app/api/v1/moderations/route.js.nft.json +1 -1
  324. package/app/.next/server/app/api/v1/moderations/route_client-reference-manifest.js +1 -1
  325. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js +1 -156
  326. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js.nft.json +1 -1
  327. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route_client-reference-manifest.js +1 -1
  328. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js +1 -156
  329. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js.nft.json +1 -1
  330. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route_client-reference-manifest.js +1 -1
  331. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js +1 -1
  332. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js.nft.json +1 -1
  333. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route_client-reference-manifest.js +1 -1
  334. package/app/.next/server/app/api/v1/rerank/route.js +1 -156
  335. package/app/.next/server/app/api/v1/rerank/route.js.nft.json +1 -1
  336. package/app/.next/server/app/api/v1/rerank/route_client-reference-manifest.js +1 -1
  337. package/app/.next/server/app/api/v1/responses/route.js +1 -156
  338. package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
  339. package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
  340. package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
  341. package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -156
  342. package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  343. package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
  344. package/app/.next/server/app/api/v1beta/models/route.js +2 -1
  345. package/app/.next/server/app/api/v1beta/models/route.js.nft.json +1 -1
  346. package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
  347. package/app/.next/server/app/callback/page.js +1 -1
  348. package/app/.next/server/app/callback/page.js.nft.json +1 -1
  349. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  350. package/app/.next/server/app/callback.html +1 -1
  351. package/app/.next/server/app/callback.rsc +5 -5
  352. package/app/.next/server/app/callback.segments/_full.segment.rsc +5 -5
  353. package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
  354. package/app/.next/server/app/callback.segments/_index.segment.rsc +4 -4
  355. package/app/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
  356. package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  357. package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
  358. package/app/.next/server/app/dashboard/cli-tools.html +1 -1
  359. package/app/.next/server/app/dashboard/cli-tools.rsc +7 -7
  360. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  361. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  362. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  363. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  364. package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +7 -7
  365. package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  366. package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +4 -4
  367. package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  368. package/app/.next/server/app/dashboard/combos.html +1 -1
  369. package/app/.next/server/app/dashboard/combos.rsc +7 -7
  370. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  371. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  372. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  373. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  374. package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +7 -7
  375. package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  376. package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +4 -4
  377. package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  378. package/app/.next/server/app/dashboard/endpoint.html +1 -1
  379. package/app/.next/server/app/dashboard/endpoint.rsc +7 -7
  380. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  381. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  382. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  383. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  384. package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +7 -7
  385. package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  386. package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +4 -4
  387. package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  388. package/app/.next/server/app/dashboard/health.html +1 -0
  389. package/app/.next/server/app/dashboard/health.meta +17 -0
  390. package/app/.next/server/app/dashboard/health.rsc +24 -0
  391. package/app/.next/server/app/dashboard/health.segments/!KGRhc2hib2FyZCk/dashboard/health/__PAGE__.segment.rsc +9 -0
  392. package/app/.next/server/app/dashboard/health.segments/!KGRhc2hib2FyZCk/dashboard/health.segment.rsc +4 -0
  393. package/app/.next/server/app/dashboard/health.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +4 -0
  394. package/app/.next/server/app/dashboard/health.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -0
  395. package/app/.next/server/app/dashboard/health.segments/_full.segment.rsc +24 -0
  396. package/app/.next/server/app/dashboard/health.segments/_head.segment.rsc +6 -0
  397. package/app/.next/server/app/dashboard/health.segments/_index.segment.rsc +9 -0
  398. package/app/.next/server/app/dashboard/health.segments/_tree.segment.rsc +5 -0
  399. package/app/.next/server/app/dashboard/onboarding.html +1 -1
  400. package/app/.next/server/app/dashboard/onboarding.rsc +6 -6
  401. package/app/.next/server/app/dashboard/onboarding.segments/!KGRhc2hib2FyZCk/dashboard/onboarding/__PAGE__.segment.rsc +1 -1
  402. package/app/.next/server/app/dashboard/onboarding.segments/!KGRhc2hib2FyZCk/dashboard/onboarding.segment.rsc +1 -1
  403. package/app/.next/server/app/dashboard/onboarding.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  404. package/app/.next/server/app/dashboard/onboarding.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  405. package/app/.next/server/app/dashboard/onboarding.segments/_full.segment.rsc +6 -6
  406. package/app/.next/server/app/dashboard/onboarding.segments/_head.segment.rsc +1 -1
  407. package/app/.next/server/app/dashboard/onboarding.segments/_index.segment.rsc +4 -4
  408. package/app/.next/server/app/dashboard/onboarding.segments/_tree.segment.rsc +2 -2
  409. package/app/.next/server/app/dashboard/profile.html +1 -1
  410. package/app/.next/server/app/dashboard/profile.rsc +6 -6
  411. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +1 -1
  412. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  413. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  414. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  415. package/app/.next/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
  416. package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  417. package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +4 -4
  418. package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  419. package/app/.next/server/app/dashboard/providers/new.html +1 -1
  420. package/app/.next/server/app/dashboard/providers/new.rsc +7 -7
  421. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  422. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  423. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  424. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  425. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  426. package/app/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +7 -7
  427. package/app/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  428. package/app/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +4 -4
  429. package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  430. package/app/.next/server/app/dashboard/providers.html +1 -1
  431. package/app/.next/server/app/dashboard/providers.rsc +7 -7
  432. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  433. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  434. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  435. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  436. package/app/.next/server/app/dashboard/providers.segments/_full.segment.rsc +7 -7
  437. package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  438. package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +4 -4
  439. package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  440. package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
  441. package/app/.next/server/app/dashboard/settings/pricing.rsc +6 -6
  442. package/app/.next/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  443. package/app/.next/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings/pricing.segment.rsc +1 -1
  444. package/app/.next/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings.segment.rsc +1 -1
  445. package/app/.next/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  446. package/app/.next/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  447. package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +6 -6
  448. package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  449. package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
  450. package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  451. package/app/.next/server/app/dashboard/settings.html +1 -1
  452. package/app/.next/server/app/dashboard/settings.rsc +7 -7
  453. package/app/.next/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk/dashboard/settings/__PAGE__.segment.rsc +2 -2
  454. package/app/.next/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk/dashboard/settings.segment.rsc +1 -1
  455. package/app/.next/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  456. package/app/.next/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  457. package/app/.next/server/app/dashboard/settings.segments/_full.segment.rsc +7 -7
  458. package/app/.next/server/app/dashboard/settings.segments/_head.segment.rsc +1 -1
  459. package/app/.next/server/app/dashboard/settings.segments/_index.segment.rsc +4 -4
  460. package/app/.next/server/app/dashboard/settings.segments/_tree.segment.rsc +2 -2
  461. package/app/.next/server/app/dashboard/translator.html +2 -2
  462. package/app/.next/server/app/dashboard/translator.rsc +7 -7
  463. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  464. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  465. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  466. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  467. package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +7 -7
  468. package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  469. package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +4 -4
  470. package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
  471. package/app/.next/server/app/dashboard/usage.html +2 -2
  472. package/app/.next/server/app/dashboard/usage.rsc +7 -7
  473. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  474. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  475. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  476. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  477. package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +7 -7
  478. package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  479. package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +4 -4
  480. package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  481. package/app/.next/server/app/docs/page.js +3 -2
  482. package/app/.next/server/app/docs/page.js.nft.json +1 -1
  483. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  484. package/app/.next/server/app/docs.html +1 -1
  485. package/app/.next/server/app/docs.rsc +21 -20
  486. package/app/.next/server/app/docs.segments/_full.segment.rsc +21 -20
  487. package/app/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  488. package/app/.next/server/app/docs.segments/_index.segment.rsc +4 -4
  489. package/app/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
  490. package/app/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
  491. package/app/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  492. package/app/.next/server/app/forbidden/page.js +2 -0
  493. package/app/.next/server/app/forbidden/page.js.nft.json +1 -0
  494. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -0
  495. package/app/.next/server/app/forbidden.html +1 -0
  496. package/app/.next/server/app/forbidden.meta +15 -0
  497. package/app/.next/server/app/forbidden.rsc +23 -0
  498. package/app/.next/server/app/forbidden.segments/_full.segment.rsc +23 -0
  499. package/app/.next/server/app/forbidden.segments/_head.segment.rsc +6 -0
  500. package/app/.next/server/app/forbidden.segments/_index.segment.rsc +9 -0
  501. package/app/.next/server/app/forbidden.segments/_tree.segment.rsc +5 -0
  502. package/app/.next/server/app/forbidden.segments/forbidden/__PAGE__.segment.rsc +9 -0
  503. package/app/.next/server/app/forbidden.segments/forbidden.segment.rsc +4 -0
  504. package/app/.next/server/app/forgot-password/page.js +2 -0
  505. package/app/.next/server/app/forgot-password/page.js.nft.json +1 -0
  506. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -0
  507. package/app/.next/server/app/forgot-password.html +1 -0
  508. package/app/.next/server/app/forgot-password.meta +15 -0
  509. package/app/.next/server/app/forgot-password.rsc +23 -0
  510. package/app/.next/server/app/forgot-password.segments/_full.segment.rsc +23 -0
  511. package/app/.next/server/app/forgot-password.segments/_head.segment.rsc +6 -0
  512. package/app/.next/server/app/forgot-password.segments/_index.segment.rsc +9 -0
  513. package/app/.next/server/app/forgot-password.segments/_tree.segment.rsc +5 -0
  514. package/app/.next/server/app/forgot-password.segments/forgot-password/__PAGE__.segment.rsc +9 -0
  515. package/app/.next/server/app/forgot-password.segments/forgot-password.segment.rsc +4 -0
  516. package/app/.next/server/app/index.html +1 -1
  517. package/app/.next/server/app/index.rsc +5 -5
  518. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  519. package/app/.next/server/app/index.segments/_full.segment.rsc +5 -5
  520. package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
  521. package/app/.next/server/app/index.segments/_index.segment.rsc +4 -4
  522. package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  523. package/app/.next/server/app/landing/page.js +1 -1
  524. package/app/.next/server/app/landing/page.js.nft.json +1 -1
  525. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  526. package/app/.next/server/app/landing.html +1 -1
  527. package/app/.next/server/app/landing.rsc +5 -5
  528. package/app/.next/server/app/landing.segments/_full.segment.rsc +5 -5
  529. package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
  530. package/app/.next/server/app/landing.segments/_index.segment.rsc +4 -4
  531. package/app/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
  532. package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  533. package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
  534. package/app/.next/server/app/login/page.js +1 -1
  535. package/app/.next/server/app/login/page.js.nft.json +1 -1
  536. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  537. package/app/.next/server/app/login.html +1 -1
  538. package/app/.next/server/app/login.rsc +6 -6
  539. package/app/.next/server/app/login.segments/_full.segment.rsc +6 -6
  540. package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
  541. package/app/.next/server/app/login.segments/_index.segment.rsc +4 -4
  542. package/app/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  543. package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  544. package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
  545. package/app/.next/server/app/page.js +1 -1
  546. package/app/.next/server/app/page.js.nft.json +1 -1
  547. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  548. package/app/.next/server/app/privacy/page.js +1 -1
  549. package/app/.next/server/app/privacy/page.js.nft.json +1 -1
  550. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  551. package/app/.next/server/app/privacy.html +1 -1
  552. package/app/.next/server/app/privacy.rsc +20 -21
  553. package/app/.next/server/app/privacy.segments/_full.segment.rsc +20 -21
  554. package/app/.next/server/app/privacy.segments/_head.segment.rsc +1 -1
  555. package/app/.next/server/app/privacy.segments/_index.segment.rsc +4 -4
  556. package/app/.next/server/app/privacy.segments/_tree.segment.rsc +2 -2
  557. package/app/.next/server/app/privacy.segments/privacy/__PAGE__.segment.rsc +2 -2
  558. package/app/.next/server/app/privacy.segments/privacy.segment.rsc +1 -1
  559. package/app/.next/server/app/terms/page.js +1 -1
  560. package/app/.next/server/app/terms/page.js.nft.json +1 -1
  561. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  562. package/app/.next/server/app/terms.html +1 -1
  563. package/app/.next/server/app/terms.rsc +21 -19
  564. package/app/.next/server/app/terms.segments/_full.segment.rsc +21 -19
  565. package/app/.next/server/app/terms.segments/_head.segment.rsc +1 -1
  566. package/app/.next/server/app/terms.segments/_index.segment.rsc +4 -4
  567. package/app/.next/server/app/terms.segments/_tree.segment.rsc +2 -2
  568. package/app/.next/server/app/terms.segments/terms/__PAGE__.segment.rsc +1 -1
  569. package/app/.next/server/app/terms.segments/terms.segment.rsc +1 -1
  570. package/app/.next/server/app-paths-manifest.json +28 -23
  571. package/app/.next/server/chunks/1228.js +3 -1
  572. package/app/.next/server/chunks/152.js +1 -1
  573. package/app/.next/server/chunks/1746.js +1 -0
  574. package/app/.next/server/chunks/216.js +37 -0
  575. package/app/.next/server/chunks/2399.js +1 -1
  576. package/app/.next/server/chunks/3676.js +2 -1
  577. package/app/.next/server/chunks/4004.js +1 -1
  578. package/app/.next/server/chunks/4352.js +46 -0
  579. package/app/.next/server/chunks/4436.js +1 -1
  580. package/app/.next/server/chunks/4443.js +1 -1
  581. package/app/.next/server/chunks/{8259.js → 4469.js} +52 -2
  582. package/app/.next/server/chunks/4755.js +3 -3
  583. package/app/.next/server/chunks/4832.js +2 -2
  584. package/app/.next/server/chunks/5040.js +1 -1
  585. package/app/.next/server/chunks/5727.js +1 -0
  586. package/app/.next/server/chunks/7093.js +2 -0
  587. package/app/.next/server/chunks/7615.js +9 -2
  588. package/app/.next/server/chunks/7763.js +1 -0
  589. package/app/.next/server/chunks/7802.js +1 -0
  590. package/app/.next/server/chunks/7968.js +3 -1
  591. package/app/.next/server/chunks/8392.js +1 -0
  592. package/app/.next/server/chunks/8847.js +3 -0
  593. package/app/.next/server/chunks/9263.js +1 -0
  594. package/app/.next/server/middleware.js +207 -2
  595. package/app/.next/server/pages/404.html +1 -1
  596. package/app/.next/server/pages/500.html +2 -2
  597. package/app/.next/server/server-reference-manifest.js +1 -1
  598. package/app/.next/server/server-reference-manifest.json +1 -1
  599. package/app/.next/static/H6LKncewEoggilnvYL9Ff/_buildManifest.js +1 -0
  600. package/app/.next/static/chunks/1525-ec661e96acc6574e.js +21 -0
  601. package/app/.next/static/chunks/3191-0bbb8ebd1bd32d1d.js +1 -0
  602. package/app/.next/static/chunks/{6941-0643e7aebf5ed645.js → 6941-77ce2b3be7709b94.js} +1 -1
  603. package/app/.next/static/chunks/7896-6e5648294ec51150.js +2 -0
  604. package/app/.next/static/chunks/9751-3a35163d337d54ea.js +37 -0
  605. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/{page-148b0ad18f6bec86.js → page-4cec40aa933b932e.js} +1 -1
  606. package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/{page-28e46119138cf102.js → page-962f1e2bfe0d0b8d.js} +1 -1
  607. package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-5caaa75c0ab78bc1.js +1 -0
  608. package/app/.next/static/chunks/app/(dashboard)/dashboard/health/page-81352b2272952085.js +1 -0
  609. package/app/.next/static/chunks/app/(dashboard)/dashboard/page-3d3dabe4363d421d.js +1 -0
  610. package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/page-c02303813bcb9777.js +1 -0
  611. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-57279ed20b5399be.js +1 -0
  612. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/new/{page-4bd8ea64f2e8008b.js → page-9667287d75830fd5.js} +1 -1
  613. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-d08547fcb1031577.js +1 -0
  614. package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/page-26179a630baa2686.js +1 -0
  615. package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/{page-c891465a1a2938d2.js → page-6190920e7526556c.js} +1 -1
  616. package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/{page-7a0943932e7e5e51.js → page-d1066b6c4c28fe46.js} +1 -1
  617. package/app/.next/static/chunks/app/(dashboard)/{layout-e84875e22efbf437.js → layout-b6fc79d0628b97e3.js} +1 -1
  618. package/app/.next/static/chunks/app/_global-error/page-c02303813bcb9777.js +1 -0
  619. package/app/.next/static/chunks/app/_not-found/page-c02303813bcb9777.js +1 -0
  620. package/app/.next/static/chunks/app/api/auth/login/route-c02303813bcb9777.js +1 -0
  621. package/app/.next/static/chunks/app/api/auth/logout/route-c02303813bcb9777.js +1 -0
  622. package/app/.next/static/chunks/app/api/cache/route-c02303813bcb9777.js +1 -0
  623. package/app/.next/static/chunks/app/api/cache/stats/route-c02303813bcb9777.js +1 -0
  624. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-c02303813bcb9777.js +1 -0
  625. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-c02303813bcb9777.js +1 -0
  626. package/app/.next/static/chunks/app/api/cli-tools/backups/route-c02303813bcb9777.js +1 -0
  627. package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-c02303813bcb9777.js +1 -0
  628. package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-c02303813bcb9777.js +1 -0
  629. package/app/.next/static/chunks/app/api/cli-tools/codex-profiles/route-c02303813bcb9777.js +1 -0
  630. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-c02303813bcb9777.js +1 -0
  631. package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-c02303813bcb9777.js +1 -0
  632. package/app/.next/static/chunks/app/api/cli-tools/guide-settings/[toolId]/route-c02303813bcb9777.js +1 -0
  633. package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-c02303813bcb9777.js +1 -0
  634. package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-c02303813bcb9777.js +1 -0
  635. package/app/.next/static/chunks/app/api/cli-tools/runtime/[toolId]/route-c02303813bcb9777.js +1 -0
  636. package/app/.next/static/chunks/app/api/cloud/auth/route-c02303813bcb9777.js +1 -0
  637. package/app/.next/static/chunks/app/api/cloud/credentials/update/route-c02303813bcb9777.js +1 -0
  638. package/app/.next/static/chunks/app/api/cloud/model/resolve/route-c02303813bcb9777.js +1 -0
  639. package/app/.next/static/chunks/app/api/cloud/models/alias/route-c02303813bcb9777.js +1 -0
  640. package/app/.next/static/chunks/app/api/combos/[id]/route-c02303813bcb9777.js +1 -0
  641. package/app/.next/static/chunks/app/api/combos/metrics/route-c02303813bcb9777.js +1 -0
  642. package/app/.next/static/chunks/app/api/combos/route-c02303813bcb9777.js +1 -0
  643. package/app/.next/static/chunks/app/api/combos/test/route-c02303813bcb9777.js +1 -0
  644. package/app/.next/static/chunks/app/api/compliance/audit-log/route-c02303813bcb9777.js +1 -0
  645. package/app/.next/static/chunks/app/api/db-backups/route-c02303813bcb9777.js +1 -0
  646. package/app/.next/static/chunks/app/api/evals/[suiteId]/route-c02303813bcb9777.js +1 -0
  647. package/app/.next/static/chunks/app/api/evals/route-c02303813bcb9777.js +1 -0
  648. package/app/.next/static/chunks/app/api/fallback/chains/route-c02303813bcb9777.js +1 -0
  649. package/app/.next/static/chunks/app/api/init/route-c02303813bcb9777.js +1 -0
  650. package/app/.next/static/chunks/app/api/keys/[id]/route-c02303813bcb9777.js +1 -0
  651. package/app/.next/static/chunks/app/api/keys/route-c02303813bcb9777.js +1 -0
  652. package/app/.next/static/chunks/app/api/models/alias/route-c02303813bcb9777.js +1 -0
  653. package/app/.next/static/chunks/app/api/models/availability/route-c02303813bcb9777.js +1 -0
  654. package/app/.next/static/chunks/app/api/models/catalog/route-c02303813bcb9777.js +1 -0
  655. package/app/.next/static/chunks/app/api/models/route-c02303813bcb9777.js +1 -0
  656. package/app/.next/static/chunks/app/api/monitoring/health/route-c02303813bcb9777.js +1 -0
  657. package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-c02303813bcb9777.js +1 -0
  658. package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-c02303813bcb9777.js +1 -0
  659. package/app/.next/static/chunks/app/api/oauth/cursor/import/route-c02303813bcb9777.js +1 -0
  660. package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-c02303813bcb9777.js +1 -0
  661. package/app/.next/static/chunks/app/api/oauth/kiro/import/route-c02303813bcb9777.js +1 -0
  662. package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-c02303813bcb9777.js +1 -0
  663. package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-c02303813bcb9777.js +1 -0
  664. package/app/.next/static/chunks/app/api/policies/route-c02303813bcb9777.js +1 -0
  665. package/app/.next/static/chunks/app/api/pricing/defaults/route-c02303813bcb9777.js +1 -0
  666. package/app/.next/static/chunks/app/api/pricing/models/route-c02303813bcb9777.js +1 -0
  667. package/app/.next/static/chunks/app/api/pricing/route-c02303813bcb9777.js +1 -0
  668. package/app/.next/static/chunks/app/api/provider-models/route-c02303813bcb9777.js +1 -0
  669. package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-c02303813bcb9777.js +1 -0
  670. package/app/.next/static/chunks/app/api/provider-nodes/route-c02303813bcb9777.js +1 -0
  671. package/app/.next/static/chunks/app/api/provider-nodes/validate/route-c02303813bcb9777.js +1 -0
  672. package/app/.next/static/chunks/app/api/providers/[id]/models/route-c02303813bcb9777.js +1 -0
  673. package/app/.next/static/chunks/app/api/providers/[id]/route-c02303813bcb9777.js +1 -0
  674. package/app/.next/static/chunks/app/api/providers/[id]/test/route-c02303813bcb9777.js +1 -0
  675. package/app/.next/static/chunks/app/api/providers/client/route-c02303813bcb9777.js +1 -0
  676. package/app/.next/static/chunks/app/api/providers/route-c02303813bcb9777.js +1 -0
  677. package/app/.next/static/chunks/app/api/providers/test-batch/route-c02303813bcb9777.js +1 -0
  678. package/app/.next/static/chunks/app/api/providers/validate/route-c02303813bcb9777.js +1 -0
  679. package/app/.next/static/chunks/app/api/rate-limit/route-c02303813bcb9777.js +1 -0
  680. package/app/.next/static/chunks/app/api/rate-limits/route-c02303813bcb9777.js +1 -0
  681. package/app/.next/static/chunks/app/api/resilience/reset/route-c02303813bcb9777.js +1 -0
  682. package/app/.next/static/chunks/app/api/resilience/route-c02303813bcb9777.js +1 -0
  683. package/app/.next/static/chunks/app/api/restart/route-c02303813bcb9777.js +1 -0
  684. package/app/.next/static/chunks/app/api/sessions/route-c02303813bcb9777.js +1 -0
  685. package/app/.next/static/chunks/app/api/settings/combo-defaults/route-c02303813bcb9777.js +1 -0
  686. package/app/.next/static/chunks/app/api/settings/ip-filter/route-c02303813bcb9777.js +1 -0
  687. package/app/.next/static/chunks/app/api/settings/proxy/route-c02303813bcb9777.js +1 -0
  688. package/app/.next/static/chunks/app/api/settings/proxy/test/route-c02303813bcb9777.js +1 -0
  689. package/app/.next/static/chunks/app/api/settings/require-login/route-c02303813bcb9777.js +1 -0
  690. package/app/.next/static/chunks/app/api/settings/route-c02303813bcb9777.js +1 -0
  691. package/app/.next/static/chunks/app/api/settings/system-prompt/route-c02303813bcb9777.js +1 -0
  692. package/app/.next/static/chunks/app/api/settings/thinking-budget/route-c02303813bcb9777.js +1 -0
  693. package/app/.next/static/chunks/app/api/shutdown/route-c02303813bcb9777.js +1 -0
  694. package/app/.next/static/chunks/app/api/storage/health/route-c02303813bcb9777.js +1 -0
  695. package/app/.next/static/chunks/app/api/sync/cloud/route-c02303813bcb9777.js +1 -0
  696. package/app/.next/static/chunks/app/api/sync/initialize/route-c02303813bcb9777.js +1 -0
  697. package/app/.next/static/chunks/app/api/tags/route-c02303813bcb9777.js +1 -0
  698. package/app/.next/static/chunks/app/api/telemetry/summary/route-c02303813bcb9777.js +1 -0
  699. package/app/.next/static/chunks/app/api/token-health/route-c02303813bcb9777.js +1 -0
  700. package/app/.next/static/chunks/app/api/translator/detect/route-c02303813bcb9777.js +1 -0
  701. package/app/.next/static/chunks/app/api/translator/history/route-c02303813bcb9777.js +1 -0
  702. package/app/.next/static/chunks/app/api/translator/load/route-c02303813bcb9777.js +1 -0
  703. package/app/.next/static/chunks/app/api/translator/save/route-c02303813bcb9777.js +1 -0
  704. package/app/.next/static/chunks/app/api/translator/send/route-c02303813bcb9777.js +1 -0
  705. package/app/.next/static/chunks/app/api/translator/translate/route-c02303813bcb9777.js +1 -0
  706. package/app/.next/static/chunks/app/api/usage/[connectionId]/route-c02303813bcb9777.js +1 -0
  707. package/app/.next/static/chunks/app/api/usage/analytics/route-c02303813bcb9777.js +1 -0
  708. package/app/.next/static/chunks/app/api/usage/budget/route-c02303813bcb9777.js +1 -0
  709. package/app/.next/static/chunks/app/api/usage/call-logs/[id]/route-c02303813bcb9777.js +1 -0
  710. package/app/.next/static/chunks/app/api/usage/call-logs/route-c02303813bcb9777.js +1 -0
  711. package/app/.next/static/chunks/app/api/usage/history/route-c02303813bcb9777.js +1 -0
  712. package/app/.next/static/chunks/app/api/usage/logs/route-c02303813bcb9777.js +1 -0
  713. package/app/.next/static/chunks/app/api/usage/proxy-logs/route-c02303813bcb9777.js +1 -0
  714. package/app/.next/static/chunks/app/api/usage/request-logs/route-c02303813bcb9777.js +1 -0
  715. package/app/.next/static/chunks/app/api/v1/api/chat/route-c02303813bcb9777.js +1 -0
  716. package/app/.next/static/chunks/app/api/v1/audio/speech/route-c02303813bcb9777.js +1 -0
  717. package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-c02303813bcb9777.js +1 -0
  718. package/app/.next/static/chunks/app/api/v1/chat/completions/route-c02303813bcb9777.js +1 -0
  719. package/app/.next/static/chunks/app/api/v1/embeddings/route-c02303813bcb9777.js +1 -0
  720. package/app/.next/static/chunks/app/api/v1/images/generations/route-c02303813bcb9777.js +1 -0
  721. package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-c02303813bcb9777.js +1 -0
  722. package/app/.next/static/chunks/app/api/v1/messages/route-c02303813bcb9777.js +1 -0
  723. package/app/.next/static/chunks/app/api/v1/models/route-c02303813bcb9777.js +1 -0
  724. package/app/.next/static/chunks/app/api/v1/moderations/route-c02303813bcb9777.js +1 -0
  725. package/app/.next/static/chunks/app/api/v1/providers/[provider]/chat/completions/route-c02303813bcb9777.js +1 -0
  726. package/app/.next/static/chunks/app/api/v1/providers/[provider]/embeddings/route-c02303813bcb9777.js +1 -0
  727. package/app/.next/static/chunks/app/api/v1/providers/[provider]/images/generations/route-c02303813bcb9777.js +1 -0
  728. package/app/.next/static/chunks/app/api/v1/rerank/route-c02303813bcb9777.js +1 -0
  729. package/app/.next/static/chunks/app/api/v1/responses/route-c02303813bcb9777.js +1 -0
  730. package/app/.next/static/chunks/app/api/v1/route-c02303813bcb9777.js +1 -0
  731. package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-c02303813bcb9777.js +1 -0
  732. package/app/.next/static/chunks/app/api/v1beta/models/route-c02303813bcb9777.js +1 -0
  733. package/app/.next/static/chunks/app/forbidden/page-6806872971c364f0.js +1 -0
  734. package/app/.next/static/chunks/app/forgot-password/page-9c116a597f3df4d1.js +1 -0
  735. package/app/.next/static/chunks/app/global-error-6abc2976016d7bd1.js +1 -0
  736. package/app/.next/static/chunks/app/layout-6504ce60623b0a41.js +1 -0
  737. package/app/.next/static/chunks/app/login/{page-e99ed6a85e91ae7c.js → page-93ac51059ef434b7.js} +1 -1
  738. package/app/.next/static/chunks/app/not-found-e1af8b9c5785b71b.js +1 -0
  739. package/app/.next/static/chunks/app/page-c02303813bcb9777.js +1 -0
  740. package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-c02303813bcb9777.js +1 -0
  741. package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-c02303813bcb9777.js +1 -0
  742. package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-c02303813bcb9777.js +1 -0
  743. package/app/.next/static/css/2ecfad7c4409b17e.css +1 -0
  744. package/app/package.json +2 -2
  745. package/package.json +2 -2
  746. package/app/.next/server/chunks/1969.js +0 -1
  747. package/app/.next/server/chunks/21.js +0 -46
  748. package/app/.next/server/chunks/4412.js +0 -156
  749. package/app/.next/server/chunks/481.js +0 -156
  750. package/app/.next/server/chunks/5267.js +0 -1
  751. package/app/.next/server/chunks/5640.js +0 -1
  752. package/app/.next/server/chunks/9328.js +0 -156
  753. package/app/.next/static/HcUrNktdfL89Ss5F7FHxP/_buildManifest.js +0 -1
  754. package/app/.next/static/chunks/1525-213a0aff01eb1c70.js +0 -21
  755. package/app/.next/static/chunks/7896-5591822b8348e380.js +0 -1
  756. package/app/.next/static/chunks/8013-04b90e92e614b5d9.js +0 -1
  757. package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-ab8b870377087bc7.js +0 -1
  758. package/app/.next/static/chunks/app/(dashboard)/dashboard/page-bc5764734a448526.js +0 -1
  759. package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/page-329f30be723f33ce.js +0 -1
  760. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-fb1fa9ae8a3af8c8.js +0 -1
  761. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-fc3451fe77f856f1.js +0 -1
  762. package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/page-95b884cdbf859e56.js +0 -1
  763. package/app/.next/static/chunks/app/_global-error/page-329f30be723f33ce.js +0 -1
  764. package/app/.next/static/chunks/app/_not-found/page-329f30be723f33ce.js +0 -1
  765. package/app/.next/static/chunks/app/api/auth/login/route-329f30be723f33ce.js +0 -1
  766. package/app/.next/static/chunks/app/api/auth/logout/route-329f30be723f33ce.js +0 -1
  767. package/app/.next/static/chunks/app/api/cache/stats/route-329f30be723f33ce.js +0 -1
  768. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-329f30be723f33ce.js +0 -1
  769. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-329f30be723f33ce.js +0 -1
  770. package/app/.next/static/chunks/app/api/cli-tools/backups/route-329f30be723f33ce.js +0 -1
  771. package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-329f30be723f33ce.js +0 -1
  772. package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-329f30be723f33ce.js +0 -1
  773. package/app/.next/static/chunks/app/api/cli-tools/codex-profiles/route-329f30be723f33ce.js +0 -1
  774. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-329f30be723f33ce.js +0 -1
  775. package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-329f30be723f33ce.js +0 -1
  776. package/app/.next/static/chunks/app/api/cli-tools/guide-settings/[toolId]/route-329f30be723f33ce.js +0 -1
  777. package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-329f30be723f33ce.js +0 -1
  778. package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-329f30be723f33ce.js +0 -1
  779. package/app/.next/static/chunks/app/api/cli-tools/runtime/[toolId]/route-329f30be723f33ce.js +0 -1
  780. package/app/.next/static/chunks/app/api/cloud/auth/route-329f30be723f33ce.js +0 -1
  781. package/app/.next/static/chunks/app/api/cloud/credentials/update/route-329f30be723f33ce.js +0 -1
  782. package/app/.next/static/chunks/app/api/cloud/model/resolve/route-329f30be723f33ce.js +0 -1
  783. package/app/.next/static/chunks/app/api/cloud/models/alias/route-329f30be723f33ce.js +0 -1
  784. package/app/.next/static/chunks/app/api/combos/[id]/route-329f30be723f33ce.js +0 -1
  785. package/app/.next/static/chunks/app/api/combos/metrics/route-329f30be723f33ce.js +0 -1
  786. package/app/.next/static/chunks/app/api/combos/route-329f30be723f33ce.js +0 -1
  787. package/app/.next/static/chunks/app/api/combos/test/route-329f30be723f33ce.js +0 -1
  788. package/app/.next/static/chunks/app/api/compliance/audit-log/route-329f30be723f33ce.js +0 -1
  789. package/app/.next/static/chunks/app/api/db-backups/route-329f30be723f33ce.js +0 -1
  790. package/app/.next/static/chunks/app/api/evals/[suiteId]/route-329f30be723f33ce.js +0 -1
  791. package/app/.next/static/chunks/app/api/evals/route-329f30be723f33ce.js +0 -1
  792. package/app/.next/static/chunks/app/api/fallback/chains/route-329f30be723f33ce.js +0 -1
  793. package/app/.next/static/chunks/app/api/init/route-329f30be723f33ce.js +0 -1
  794. package/app/.next/static/chunks/app/api/keys/[id]/route-329f30be723f33ce.js +0 -1
  795. package/app/.next/static/chunks/app/api/keys/route-329f30be723f33ce.js +0 -1
  796. package/app/.next/static/chunks/app/api/models/alias/route-329f30be723f33ce.js +0 -1
  797. package/app/.next/static/chunks/app/api/models/availability/route-329f30be723f33ce.js +0 -1
  798. package/app/.next/static/chunks/app/api/models/catalog/route-329f30be723f33ce.js +0 -1
  799. package/app/.next/static/chunks/app/api/models/route-329f30be723f33ce.js +0 -1
  800. package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-329f30be723f33ce.js +0 -1
  801. package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-329f30be723f33ce.js +0 -1
  802. package/app/.next/static/chunks/app/api/oauth/cursor/import/route-329f30be723f33ce.js +0 -1
  803. package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-329f30be723f33ce.js +0 -1
  804. package/app/.next/static/chunks/app/api/oauth/kiro/import/route-329f30be723f33ce.js +0 -1
  805. package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-329f30be723f33ce.js +0 -1
  806. package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-329f30be723f33ce.js +0 -1
  807. package/app/.next/static/chunks/app/api/policies/route-329f30be723f33ce.js +0 -1
  808. package/app/.next/static/chunks/app/api/pricing/defaults/route-329f30be723f33ce.js +0 -1
  809. package/app/.next/static/chunks/app/api/pricing/models/route-329f30be723f33ce.js +0 -1
  810. package/app/.next/static/chunks/app/api/pricing/route-329f30be723f33ce.js +0 -1
  811. package/app/.next/static/chunks/app/api/provider-models/route-329f30be723f33ce.js +0 -1
  812. package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-329f30be723f33ce.js +0 -1
  813. package/app/.next/static/chunks/app/api/provider-nodes/route-329f30be723f33ce.js +0 -1
  814. package/app/.next/static/chunks/app/api/provider-nodes/validate/route-329f30be723f33ce.js +0 -1
  815. package/app/.next/static/chunks/app/api/providers/[id]/models/route-329f30be723f33ce.js +0 -1
  816. package/app/.next/static/chunks/app/api/providers/[id]/route-329f30be723f33ce.js +0 -1
  817. package/app/.next/static/chunks/app/api/providers/[id]/test/route-329f30be723f33ce.js +0 -1
  818. package/app/.next/static/chunks/app/api/providers/client/route-329f30be723f33ce.js +0 -1
  819. package/app/.next/static/chunks/app/api/providers/route-329f30be723f33ce.js +0 -1
  820. package/app/.next/static/chunks/app/api/providers/test-batch/route-329f30be723f33ce.js +0 -1
  821. package/app/.next/static/chunks/app/api/providers/validate/route-329f30be723f33ce.js +0 -1
  822. package/app/.next/static/chunks/app/api/rate-limit/route-329f30be723f33ce.js +0 -1
  823. package/app/.next/static/chunks/app/api/rate-limits/route-329f30be723f33ce.js +0 -1
  824. package/app/.next/static/chunks/app/api/resilience/reset/route-329f30be723f33ce.js +0 -1
  825. package/app/.next/static/chunks/app/api/resilience/route-329f30be723f33ce.js +0 -1
  826. package/app/.next/static/chunks/app/api/restart/route-329f30be723f33ce.js +0 -1
  827. package/app/.next/static/chunks/app/api/sessions/route-329f30be723f33ce.js +0 -1
  828. package/app/.next/static/chunks/app/api/settings/combo-defaults/route-329f30be723f33ce.js +0 -1
  829. package/app/.next/static/chunks/app/api/settings/ip-filter/route-329f30be723f33ce.js +0 -1
  830. package/app/.next/static/chunks/app/api/settings/proxy/route-329f30be723f33ce.js +0 -1
  831. package/app/.next/static/chunks/app/api/settings/proxy/test/route-329f30be723f33ce.js +0 -1
  832. package/app/.next/static/chunks/app/api/settings/require-login/route-329f30be723f33ce.js +0 -1
  833. package/app/.next/static/chunks/app/api/settings/route-329f30be723f33ce.js +0 -1
  834. package/app/.next/static/chunks/app/api/settings/system-prompt/route-329f30be723f33ce.js +0 -1
  835. package/app/.next/static/chunks/app/api/settings/thinking-budget/route-329f30be723f33ce.js +0 -1
  836. package/app/.next/static/chunks/app/api/shutdown/route-329f30be723f33ce.js +0 -1
  837. package/app/.next/static/chunks/app/api/storage/health/route-329f30be723f33ce.js +0 -1
  838. package/app/.next/static/chunks/app/api/sync/cloud/route-329f30be723f33ce.js +0 -1
  839. package/app/.next/static/chunks/app/api/sync/initialize/route-329f30be723f33ce.js +0 -1
  840. package/app/.next/static/chunks/app/api/tags/route-329f30be723f33ce.js +0 -1
  841. package/app/.next/static/chunks/app/api/telemetry/summary/route-329f30be723f33ce.js +0 -1
  842. package/app/.next/static/chunks/app/api/token-health/route-329f30be723f33ce.js +0 -1
  843. package/app/.next/static/chunks/app/api/translator/detect/route-329f30be723f33ce.js +0 -1
  844. package/app/.next/static/chunks/app/api/translator/history/route-329f30be723f33ce.js +0 -1
  845. package/app/.next/static/chunks/app/api/translator/load/route-329f30be723f33ce.js +0 -1
  846. package/app/.next/static/chunks/app/api/translator/save/route-329f30be723f33ce.js +0 -1
  847. package/app/.next/static/chunks/app/api/translator/send/route-329f30be723f33ce.js +0 -1
  848. package/app/.next/static/chunks/app/api/translator/translate/route-329f30be723f33ce.js +0 -1
  849. package/app/.next/static/chunks/app/api/usage/[connectionId]/route-329f30be723f33ce.js +0 -1
  850. package/app/.next/static/chunks/app/api/usage/analytics/route-329f30be723f33ce.js +0 -1
  851. package/app/.next/static/chunks/app/api/usage/budget/route-329f30be723f33ce.js +0 -1
  852. package/app/.next/static/chunks/app/api/usage/call-logs/[id]/route-329f30be723f33ce.js +0 -1
  853. package/app/.next/static/chunks/app/api/usage/call-logs/route-329f30be723f33ce.js +0 -1
  854. package/app/.next/static/chunks/app/api/usage/history/route-329f30be723f33ce.js +0 -1
  855. package/app/.next/static/chunks/app/api/usage/logs/route-329f30be723f33ce.js +0 -1
  856. package/app/.next/static/chunks/app/api/usage/proxy-logs/route-329f30be723f33ce.js +0 -1
  857. package/app/.next/static/chunks/app/api/usage/request-logs/route-329f30be723f33ce.js +0 -1
  858. package/app/.next/static/chunks/app/api/v1/api/chat/route-329f30be723f33ce.js +0 -1
  859. package/app/.next/static/chunks/app/api/v1/audio/speech/route-329f30be723f33ce.js +0 -1
  860. package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-329f30be723f33ce.js +0 -1
  861. package/app/.next/static/chunks/app/api/v1/chat/completions/route-329f30be723f33ce.js +0 -1
  862. package/app/.next/static/chunks/app/api/v1/embeddings/route-329f30be723f33ce.js +0 -1
  863. package/app/.next/static/chunks/app/api/v1/images/generations/route-329f30be723f33ce.js +0 -1
  864. package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-329f30be723f33ce.js +0 -1
  865. package/app/.next/static/chunks/app/api/v1/messages/route-329f30be723f33ce.js +0 -1
  866. package/app/.next/static/chunks/app/api/v1/models/route-329f30be723f33ce.js +0 -1
  867. package/app/.next/static/chunks/app/api/v1/moderations/route-329f30be723f33ce.js +0 -1
  868. package/app/.next/static/chunks/app/api/v1/providers/[provider]/chat/completions/route-329f30be723f33ce.js +0 -1
  869. package/app/.next/static/chunks/app/api/v1/providers/[provider]/embeddings/route-329f30be723f33ce.js +0 -1
  870. package/app/.next/static/chunks/app/api/v1/providers/[provider]/images/generations/route-329f30be723f33ce.js +0 -1
  871. package/app/.next/static/chunks/app/api/v1/rerank/route-329f30be723f33ce.js +0 -1
  872. package/app/.next/static/chunks/app/api/v1/responses/route-329f30be723f33ce.js +0 -1
  873. package/app/.next/static/chunks/app/api/v1/route-329f30be723f33ce.js +0 -1
  874. package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-329f30be723f33ce.js +0 -1
  875. package/app/.next/static/chunks/app/api/v1beta/models/route-329f30be723f33ce.js +0 -1
  876. package/app/.next/static/chunks/app/global-error-bbdc13af28c5aba1.js +0 -1
  877. package/app/.next/static/chunks/app/layout-485b011f69e6ed37.js +0 -1
  878. package/app/.next/static/chunks/app/not-found-2ba4520c9df30430.js +0 -1
  879. package/app/.next/static/chunks/app/page-329f30be723f33ce.js +0 -1
  880. package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-329f30be723f33ce.js +0 -1
  881. package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-329f30be723f33ce.js +0 -1
  882. package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-329f30be723f33ce.js +0 -1
  883. package/app/.next/static/css/2862d4067eab20b2.css +0 -1
  884. /package/app/.next/static/{HcUrNktdfL89Ss5F7FHxP → H6LKncewEoggilnvYL9Ff}/_ssgManifest.js +0 -0
package/README.md CHANGED
@@ -18,7 +18,7 @@
18
18
  [![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute)
19
19
  [![License](https://img.shields.io/github/license/diegosouzapw/OmniRoute)](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE)
20
20
 
21
- [🚀 Quick Start](#-quick-start) • [💡 Features](#-key-features) • [📖 Setup](#-setup-guide)
21
+ [🚀 Quick Start](#-quick-start) • [💡 Features](#-key-features) • [📖 Docs](#-documentation)
22
22
  </div>
23
23
 
24
24
  ---
@@ -81,17 +81,14 @@ omniroute
81
81
 
82
82
  🎉 Dashboard opens at `http://localhost:20128`
83
83
 
84
- **CLI Options:**
85
-
86
84
  | Command | Description |
87
85
  | ----------------------- | --------------------------------- |
88
86
  | `omniroute` | Start server (default port 20128) |
89
87
  | `omniroute --port 3000` | Use custom port |
90
88
  | `omniroute --no-open` | Don't auto-open browser |
91
89
  | `omniroute --help` | Show help |
92
- | `omniroute --version` | Show version |
93
90
 
94
- **2. Connect a FREE provider (no signup needed):**
91
+ **2. Connect a FREE provider:**
95
92
 
96
93
  Dashboard → Providers → Connect **Claude Code** or **Antigravity** → OAuth login → Done!
97
94
 
@@ -106,7 +103,7 @@ Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline Settings:
106
103
 
107
104
  **That's it!** Start coding with FREE AI models.
108
105
 
109
- **Alternative: run from source (this repository):**
106
+ **Alternative run from source:**
110
107
 
111
108
  ```bash
112
109
  cp .env.example .env
@@ -114,1155 +111,55 @@ npm install
114
111
  PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
115
112
  ```
116
113
 
117
- Production mode:
118
-
119
- ```bash
120
- npm run build
121
- PORT=20128 HOSTNAME=0.0.0.0 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run start
122
- ```
123
-
124
- Default URLs:
125
-
126
- - Dashboard: `http://localhost:20128/dashboard`
127
- - OpenAI-compatible API: `http://localhost:20128/v1`
128
-
129
114
  ---
130
115
 
131
116
  ## 💡 Key Features
132
117
 
133
- | Feature | What It Does | Why It Matters |
134
- | ----------------------------------- | --------------------------------------------- | ----------------------------------- |
135
- | 🎯 **Smart 3-Tier Fallback** | Auto-route: Subscription → Cheap → Free | Never stop coding, zero downtime |
136
- | 📊 **Real-Time Quota Tracking** | Live token count + reset countdown | Maximize subscription value |
137
- | 🔄 **Format Translation** | OpenAI ↔ Claude ↔ Gemini seamless | Works with any CLI tool |
138
- | 👥 **Multi-Account Support** | Multiple accounts per provider | Load balancing + redundancy |
139
- | 🔄 **Auto Token Refresh** | OAuth tokens refresh automatically | No manual re-login needed |
140
- | 🎨 **Custom Combos** | Create unlimited model combinations | Tailor fallback to your needs |
141
- | 🧩 **Custom Models** | Add any model ID to any provider | No app update needed for new models |
142
- | 🛣️ **Dedicated Provider Routes** | Per-provider API endpoints | Direct routing, model validation |
143
- | 🌐 **Network Proxy** | Hierarchical outbound proxy + env fallback | Works behind firewalls/VPNs |
144
- | 📋 **Model Catalog API** | All models grouped by provider + type | Discover available models easily |
145
- | 📝 **Request Logging** | Debug mode with full request/response logs | Troubleshoot issues easily |
146
- | 💾 **Cloud Sync** | Sync config across devices | Same setup everywhere |
147
- | 📊 **Usage Analytics** | Track tokens, cost, trends over time | Optimize spending |
148
- | 🌐 **Deploy Anywhere** | Localhost, VPS, Docker, Cloudflare Workers | Flexible deployment options |
149
- | 🛡️ **IP Allowlist/Blocklist** | Restrict API access by IP address | Security for exposed deployments |
150
- | 🧠 **Thinking Budget** | Control reasoning token budget per model | Optimize cost vs quality |
151
- | 💬 **System Prompt Injection** | Global system prompt for all requests | Consistent behavior across models |
152
- | 📊 **Session Tracking** | Track active sessions with fingerprinting | Monitor connected clients |
153
- | ⚡ **Rate Limiting** | Per-account request rate management | Prevent abuse and quota waste |
154
- | 💰 **Model Pricing** | Per-model cost tracking and calculation | Precise usage cost analytics |
155
- | 🔌 **Circuit Breaker** | Auto-open/close per-provider with cooldowns | Prevent cascading failures |
156
- | 🛡️ **Anti-Thundering Herd** | Mutex + auto rate-limit for API key providers | Prevent parallel stampede |
157
- | 📊 **Provider Resilience Profiles** | OAuth vs API key differentiated cooldowns | Smarter error recovery |
158
- | 🎛️ **Resilience UI** | Real-time circuit breaker status + reset | Monitor and control resilience |
159
- | 💵 **Cost Budgets** | Per-API-key daily/monthly budget limits | Prevent unexpected spending |
160
- | 📈 **Request Telemetry** | 7-phase lifecycle with p50/p95/p99 latency | Performance monitoring |
161
- | 🔍 **Correlation IDs** | End-to-end request tracing via X-Request-Id | Debug complex request flows |
162
- | 📋 **Compliance Audit Log** | Filterable audit trail with opt-out per key | Regulatory compliance |
163
- | 🏗️ **Model Availability** | TTL-based cooldown tracking per model | Intelligent model health tracking |
164
- | 🔄 **Eval Framework** | 4 strategies + golden set for LLM evaluation | Quality assurance for models |
165
-
166
- <details>
167
- <summary><b>📖 Feature Details</b></summary>
168
-
169
- ### 🎯 Smart 3-Tier Fallback
170
-
171
- Create combos with automatic fallback:
172
-
173
- ```
174
- Combo: "my-coding-stack"
175
- 1. cc/claude-opus-4-6 (your subscription)
176
- 2. glm/glm-4.7 (cheap backup, $0.6/1M)
177
- 3. if/kimi-k2-thinking (free fallback)
178
-
179
- → Auto switches when quota runs out or errors occur
180
- ```
181
-
182
- ### 📊 Real-Time Quota Tracking
183
-
184
- - Token consumption per provider
185
- - Reset countdown (5-hour, daily, weekly)
186
- - Cost estimation for paid tiers
187
- - Monthly spending reports
188
-
189
- ### 🔄 Format Translation
190
-
191
- Seamless translation between formats:
192
-
193
- - **OpenAI** ↔ **Claude** ↔ **Gemini** ↔ **OpenAI Responses**
194
- - Your CLI tool sends OpenAI format → OmniRoute translates → Provider receives native format
195
- - Works with any tool that supports custom OpenAI endpoints
196
-
197
- ### 👥 Multi-Account Support
198
-
199
- - Add multiple accounts per provider
200
- - Auto round-robin or priority-based routing
201
- - Fallback to next account when one hits quota
202
-
203
- ### 🔄 Auto Token Refresh
204
-
205
- - OAuth tokens automatically refresh before expiration
206
- - No manual re-authentication needed
207
- - Seamless experience across all providers
208
-
209
- ### 🎨 Custom Combos
210
-
211
- - Create unlimited model combinations
212
- - Mix subscription, cheap, and free tiers
213
- - Name your combos for easy access
214
- - Share combos across devices with Cloud Sync
215
-
216
- ### 📝 Request Logging
217
-
218
- - Enable debug mode for full request/response logs
219
- - Track API calls, headers, and payloads
220
- - Troubleshoot integration issues
221
- - Export logs for analysis
222
-
223
- ### 💾 Cloud Sync
224
-
225
- - Sync providers, combos, and settings across devices
226
- - Automatic background sync
227
- - Secure encrypted storage
228
- - Access your setup from anywhere
229
-
230
- #### Cloud Runtime Notes
231
-
232
- - Prefer server-side cloud variables in production:
233
- - `BASE_URL` (internal callback URL used by sync scheduler)
234
- - `CLOUD_URL` (cloud sync endpoint base)
235
- - `NEXT_PUBLIC_BASE_URL` and `NEXT_PUBLIC_CLOUD_URL` are still supported for compatibility/UI, but server runtime now prioritizes `BASE_URL`/`CLOUD_URL`.
236
- - Cloud sync requests now use timeout + fail-fast behavior to avoid UI hanging when cloud DNS/network is unavailable.
237
-
238
- ### 📊 Usage Analytics
239
-
240
- - Track token usage per provider and model
241
- - Cost estimation and spending trends
242
- - Monthly reports and insights
243
- - Optimize your AI spending
244
-
245
- ### 🌐 Deploy Anywhere
246
-
247
- - 💻 **Localhost** - Default, works offline
248
- - ☁️ **VPS/Cloud** - Share across devices
249
- - 🐳 **Docker** - One-command deployment
250
- - 🚀 **Cloudflare Workers** - Global edge network
251
-
252
- </details>
253
-
254
- ---
255
-
256
- ## 💰 Pricing at a Glance
257
-
258
- | Tier | Provider | Cost | Quota Reset | Best For |
259
- | ------------------- | ----------------- | ----------- | ---------------- | -------------------- |
260
- | **💳 SUBSCRIPTION** | Claude Code (Pro) | $20/mo | 5h + weekly | Already subscribed |
261
- | | Codex (Plus/Pro) | $20-200/mo | 5h + weekly | OpenAI users |
262
- | | Gemini CLI | **FREE** | 180K/mo + 1K/day | Everyone! |
263
- | | GitHub Copilot | $10-19/mo | Monthly | GitHub users |
264
- | **🔑 API KEY** | DeepSeek | Pay per use | None | Cheap reasoning |
265
- | | Groq | Pay per use | None | Ultra-fast inference |
266
- | | xAI (Grok) | Pay per use | None | Grok 4 reasoning |
267
- | | Mistral | Pay per use | None | EU-hosted models |
268
- | | Perplexity | Pay per use | None | Search-augmented |
269
- | | Together AI | Pay per use | None | Open-source models |
270
- | | Fireworks AI | Pay per use | None | Fast FLUX images |
271
- | | Cerebras | Pay per use | None | Wafer-scale speed |
272
- | | Cohere | Pay per use | None | Command R+ RAG |
273
- | | NVIDIA NIM | Pay per use | None | Enterprise models |
274
- | **💰 CHEAP** | GLM-4.7 | $0.6/1M | Daily 10AM | Budget backup |
275
- | | MiniMax M2.1 | $0.2/1M | 5-hour rolling | Cheapest option |
276
- | | Kimi K2 | $9/mo flat | 10M tokens/mo | Predictable cost |
277
- | **🆓 FREE** | iFlow | $0 | Unlimited | 8 models free |
278
- | | Qwen | $0 | Unlimited | 3 models free |
279
- | | Kiro | $0 | Unlimited | Claude free |
280
-
281
- **💡 Pro Tip:** Start with Gemini CLI (180K free/month) + iFlow (unlimited free) combo = $0 cost!
282
-
283
- ---
284
-
285
- ## 🎯 Use Cases
286
-
287
- ### Case 1: "I have Claude Pro subscription"
288
-
289
- **Problem:** Quota expires unused, rate limits during heavy coding
290
-
291
- **Solution:**
292
-
293
- ```
294
- Combo: "maximize-claude"
295
- 1. cc/claude-opus-4-6 (use subscription fully)
296
- 2. glm/glm-4.7 (cheap backup when quota out)
297
- 3. if/kimi-k2-thinking (free emergency fallback)
298
-
299
- Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total
300
- vs. $20 + hitting limits = frustration
301
- ```
302
-
303
- ### Case 2: "I want zero cost"
304
-
305
- **Problem:** Can't afford subscriptions, need reliable AI coding
306
-
307
- **Solution:**
308
-
309
- ```
310
- Combo: "free-forever"
311
- 1. gc/gemini-3-flash (180K free/month)
312
- 2. if/kimi-k2-thinking (unlimited free)
313
- 3. qw/qwen3-coder-plus (unlimited free)
314
-
315
- Monthly cost: $0
316
- Quality: Production-ready models
317
- ```
318
-
319
- ### Case 3: "I need 24/7 coding, no interruptions"
320
-
321
- **Problem:** Deadlines, can't afford downtime
322
-
323
- **Solution:**
324
-
325
- ```
326
- Combo: "always-on"
327
- 1. cc/claude-opus-4-6 (best quality)
328
- 2. cx/gpt-5.2-codex (second subscription)
329
- 3. glm/glm-4.7 (cheap, resets daily)
330
- 4. minimax/MiniMax-M2.1 (cheapest, 5h reset)
331
- 5. if/kimi-k2-thinking (free unlimited)
332
-
333
- Result: 5 layers of fallback = zero downtime
334
- Monthly cost: $20-200 (subscriptions) + $10-20 (backup)
335
- ```
336
-
337
- ### Case 4: "I want FREE AI in OpenClaw"
338
-
339
- **Problem:** Need AI assistant in messaging apps (WhatsApp, Telegram, Slack...), completely free
340
-
341
- **Solution:**
342
-
343
- ```
344
- Combo: "openclaw-free"
345
- 1. if/glm-4.7 (unlimited free)
346
- 2. if/minimax-m2.1 (unlimited free)
347
- 3. if/kimi-k2-thinking (unlimited free)
348
-
349
- Monthly cost: $0
350
- Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal...
351
- ```
352
-
353
- ---
354
-
355
- ## 📖 Setup Guide
356
-
357
- <details>
358
- <summary><b>🔐 Subscription Providers (Maximize Value)</b></summary>
359
-
360
- ### Claude Code (Pro/Max)
361
-
362
- ```bash
363
- Dashboard → Providers → Connect Claude Code
364
- → OAuth login → Auto token refresh
365
- → 5-hour + weekly quota tracking
366
-
367
- Models:
368
- cc/claude-opus-4-6
369
- cc/claude-sonnet-4-5-20250929
370
- cc/claude-haiku-4-5-20251001
371
- ```
372
-
373
- **Pro Tip:** Use Opus for complex tasks, Sonnet for speed. OmniRoute tracks quota per model!
374
-
375
- ### OpenAI Codex (Plus/Pro)
376
-
377
- ```bash
378
- Dashboard → Providers → Connect Codex
379
- → OAuth login (port 1455)
380
- → 5-hour + weekly reset
381
-
382
- Models:
383
- cx/gpt-5.2-codex
384
- cx/gpt-5.1-codex-max
385
- ```
386
-
387
- ### Gemini CLI (FREE 180K/month!)
388
-
389
- ```bash
390
- Dashboard → Providers → Connect Gemini CLI
391
- → Google OAuth
392
- → 180K completions/month + 1K/day
393
-
394
- Models:
395
- gc/gemini-3-flash-preview
396
- gc/gemini-2.5-pro
397
- ```
398
-
399
- **Best Value:** Huge free tier! Use this before paid tiers.
400
-
401
- ### GitHub Copilot
402
-
403
- ```bash
404
- Dashboard → Providers → Connect GitHub
405
- → OAuth via GitHub
406
- → Monthly reset (1st of month)
407
-
408
- Models:
409
- gh/gpt-5
410
- gh/claude-4.5-sonnet
411
- gh/gemini-3-pro
412
- ```
413
-
414
- </details>
415
-
416
- <details>
417
- <summary><b>💰 Cheap Providers (Backup)</b></summary>
418
-
419
- ### GLM-4.7 (Daily reset, $0.6/1M)
420
-
421
- 1. Sign up: [Zhipu AI](https://open.bigmodel.cn/)
422
- 2. Get API key from Coding Plan
423
- 3. Dashboard → Add API Key:
424
- - Provider: `glm`
425
- - API Key: `your-key`
426
-
427
- **Use:** `glm/glm-4.7`
428
-
429
- **Pro Tip:** Coding Plan offers 3× quota at 1/7 cost! Reset daily 10:00 AM.
430
-
431
- ### MiniMax M2.1 (5h reset, $0.20/1M)
432
-
433
- 1. Sign up: [MiniMax](https://www.minimax.io/)
434
- 2. Get API key
435
- 3. Dashboard → Add API Key
436
-
437
- **Use:** `minimax/MiniMax-M2.1`
438
-
439
- **Pro Tip:** Cheapest option for long context (1M tokens)!
440
-
441
- ### Kimi K2 ($9/month flat)
442
-
443
- 1. Subscribe: [Moonshot AI](https://platform.moonshot.ai/)
444
- 2. Get API key
445
- 3. Dashboard → Add API Key
446
-
447
- **Use:** `kimi/kimi-latest`
448
-
449
- **Pro Tip:** Fixed $9/month for 10M tokens = $0.90/1M effective cost!
450
-
451
- </details>
452
-
453
- <details>
454
- <summary><b>🆓 FREE Providers (Emergency Backup)</b></summary>
455
-
456
- ### iFlow (8 FREE models)
457
-
458
- ```bash
459
- Dashboard → Connect iFlow
460
- → iFlow OAuth login
461
- → Unlimited usage
462
-
463
- Models:
464
- if/kimi-k2-thinking
465
- if/qwen3-coder-plus
466
- if/glm-4.7
467
- if/minimax-m2
468
- if/deepseek-r1
469
- ```
470
-
471
- ### Qwen (3 FREE models)
472
-
473
- ```bash
474
- Dashboard → Connect Qwen
475
- → Device code authorization
476
- → Unlimited usage
477
-
478
- Models:
479
- qw/qwen3-coder-plus
480
- qw/qwen3-coder-flash
481
- ```
482
-
483
- ### Kiro (Claude FREE)
484
-
485
- ```bash
486
- Dashboard → Connect Kiro
487
- → AWS Builder ID or Google/GitHub
488
- → Unlimited usage
489
-
490
- Models:
491
- kr/claude-sonnet-4.5
492
- kr/claude-haiku-4.5
493
- ```
494
-
495
- </details>
496
-
497
- <details>
498
- <summary><b>🎨 Create Combos</b></summary>
499
-
500
- ### Example 1: Maximize Subscription → Cheap Backup
501
-
502
- ```
503
- Dashboard → Combos → Create New
504
-
505
- Name: premium-coding
506
- Models:
507
- 1. cc/claude-opus-4-6 (Subscription primary)
508
- 2. glm/glm-4.7 (Cheap backup, $0.6/1M)
509
- 3. minimax/MiniMax-M2.1 (Cheapest fallback, $0.20/1M)
510
-
511
- Use in CLI: premium-coding
512
-
513
- Monthly cost example (100M tokens):
514
- 80M via Claude (subscription): $0 extra
515
- 15M via GLM: $9
516
- 5M via MiniMax: $1
517
- Total: $10 + your subscription
518
- ```
519
-
520
- ### Example 2: Free-Only (Zero Cost)
521
-
522
- ```
523
- Name: free-combo
524
- Models:
525
- 1. gc/gemini-3-flash-preview (180K free/month)
526
- 2. if/kimi-k2-thinking (unlimited)
527
- 3. qw/qwen3-coder-plus (unlimited)
528
-
529
- Cost: $0 forever!
530
- ```
531
-
532
- </details>
533
-
534
- <details>
535
- <summary><b>🔧 CLI Integration</b></summary>
536
-
537
- ### Cursor IDE
538
-
539
- ```
540
- Settings → Models → Advanced:
541
- OpenAI API Base URL: http://localhost:20128/v1
542
- OpenAI API Key: [from omniroute dashboard]
543
- Model: cc/claude-opus-4-6
544
- ```
545
-
546
- Or use combo: `premium-coding`
547
-
548
- ### Claude Code
549
-
550
- Edit `~/.claude/config.json`:
551
-
552
- ```json
553
- {
554
- "anthropic_api_base": "http://localhost:20128/v1",
555
- "anthropic_api_key": "your-omniroute-api-key"
556
- }
557
- ```
558
-
559
- ### Codex CLI
560
-
561
- ```bash
562
- export OPENAI_BASE_URL="http://localhost:20128"
563
- export OPENAI_API_KEY="your-omniroute-api-key"
564
-
565
- codex "your prompt"
566
- ```
567
-
568
- ### OpenClaw
569
-
570
- Edit `~/.openclaw/openclaw.json`:
571
-
572
- ```json
573
- {
574
- "agents": {
575
- "defaults": {
576
- "model": {
577
- "primary": "omniroute/if/glm-4.7"
578
- }
579
- }
580
- },
581
- "models": {
582
- "providers": {
583
- "omniroute": {
584
- "baseUrl": "http://localhost:20128/v1",
585
- "apiKey": "your-omniroute-api-key",
586
- "api": "openai-completions",
587
- "models": [
588
- {
589
- "id": "if/glm-4.7",
590
- "name": "glm-4.7"
591
- }
592
- ]
593
- }
594
- }
595
- }
596
- }
597
- ```
598
-
599
- **Or use Dashboard:** CLI Tools → OpenClaw → Auto-config
600
-
601
- ### Cline / Continue / RooCode
602
-
603
- ```
604
- Provider: OpenAI Compatible
605
- Base URL: http://localhost:20128/v1
606
- API Key: [from dashboard]
607
- Model: cc/claude-opus-4-6
608
- ```
609
-
610
- </details>
611
-
612
- <details>
613
- <summary><b>🚀 Deployment</b></summary>
614
-
615
- ### VPS Deployment
616
-
617
- ```bash
618
- # Clone and install
619
- git clone https://github.com/diegosouzapw/OmniRoute.git
620
- cd OmniRoute
621
- npm install
622
- npm run build
623
-
624
- # Configure
625
- export JWT_SECRET="your-secure-secret-change-this"
626
- export INITIAL_PASSWORD="your-password"
627
- export DATA_DIR="/var/lib/omniroute"
628
- export PORT="20128"
629
- export HOSTNAME="0.0.0.0"
630
- export NODE_ENV="production"
631
- export NEXT_PUBLIC_BASE_URL="http://localhost:20128"
632
- export NEXT_PUBLIC_CLOUD_URL="https://omniroute.dev"
633
- export API_KEY_SECRET="endpoint-proxy-api-key-secret"
634
- export MACHINE_ID_SALT="endpoint-proxy-salt"
635
-
636
- # Start
637
- npm run start
638
-
639
- # Or use PM2
640
- npm install -g pm2
641
- pm2 start npm --name omniroute -- start
642
- pm2 save
643
- pm2 startup
644
- ```
645
-
646
- ### Docker
647
-
648
- ```bash
649
- # Build image (default target = runner-cli with codex/claude/droid preinstalled)
650
- docker build -t omniroute:cli .
651
-
652
- # Build minimal image without bundled CLIs
653
- docker build --target runner-base -t omniroute:base .
654
-
655
- # Build explicit CLI profile
656
- docker build --target runner-cli -t omniroute:cli .
657
- ```
658
-
659
- Portable mode (recommended for Docker Desktop and generic hosts):
660
-
661
- ```bash
662
- docker run -d \
663
- --name omniroute \
664
- -p 20128:20128 \
665
- --env-file ./.env \
666
- -v omniroute-data:/app/data \
667
- omniroute:cli
668
- ```
669
-
670
- Host-integrated mode (Linux-first; use host mounts for CLI bins/configs):
671
-
672
- Host prerequisites example (real host binaries):
673
-
674
- ```bash
675
- # Install host CLIs (example)
676
- npm install -g @openai/codex @anthropic-ai/claude-code droid openclaw@latest cline @continuedev/cli
677
- ```
678
-
679
- Run using host-mounted CLIs (`codex` from host tool dir + npm global CLIs from Node root):
680
-
681
- ```bash
682
- docker run -d \
683
- --name omniroute \
684
- -p 20128:20128 \
685
- --env-file ./.env \
686
- -e CLI_MODE=host \
687
- -e CLI_EXTRA_PATHS=/host-local/bin:/host-node/bin:/host-codex \
688
- -e CLI_CURSOR_BIN=agent \
689
- -e CLI_CLINE_BIN=cline \
690
- -e CLI_CONTINUE_BIN=cn \
691
- -e CLI_CONFIG_HOME=/host-home \
692
- -e CLI_ALLOW_CONFIG_WRITES=true \
693
- -v ~/.local/bin:/host-local/bin:ro \
694
- -v ~/.nvm/versions/node/v22.16.0:/host-node:ro \
695
- -v /path/to/host/codex/bin:/host-codex:ro \
696
- -v ~/.codex:/host-home/.codex:rw \
697
- -v ~/.claude:/host-home/.claude:rw \
698
- -v ~/.factory:/host-home/.factory:rw \
699
- -v ~/.openclaw:/host-home/.openclaw:rw \
700
- -v ~/.cursor:/host-home/.cursor:rw \
701
- -v ~/.config/cursor:/host-home/.config/cursor:rw \
702
- -v omniroute-data:/app/data \
703
- omniroute:base
704
- ```
705
-
706
- Notes:
707
-
708
- - `runner-cli` currently bundles `@openai/codex`, `@anthropic-ai/claude-code`, `droid`, and `openclaw@latest`.
709
- - `runner-cli` uses Node 22 Debian slim to satisfy OpenClaw runtime requirements.
710
- - Host CLI mount mode is Linux-first. On Docker Desktop (Mac/Windows), prefer `runner-cli`.
711
- - `Continue CLI` executable is usually `cn`, so set `CLI_CONTINUE_BIN=cn` in host mode.
712
- - `Cursor Agent` executable is commonly `agent` in `~/.local/bin`, so set `CLI_CURSOR_BIN=agent` and include that directory in `CLI_EXTRA_PATHS`.
713
- - Cursor auth/config typically live in `~/.config/cursor` and `~/.cursor`; mount both for host-integrated mode.
714
-
715
- Quick runtime validation:
716
-
717
- ```bash
718
- curl -s http://localhost:20128/api/cli-tools/codex-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}'
719
- curl -s http://localhost:20128/api/cli-tools/claude-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}'
720
- curl -s http://localhost:20128/api/cli-tools/openclaw-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}'
721
- curl -s http://localhost:20128/api/cli-tools/runtime/cursor | jq '{installed,runnable,command,commandPath,configPath,runtimeMode,reason}'
722
- curl -s http://localhost:20128/api/cli-tools/runtime/cline | jq '{installed,runnable,commandPath,runtimeMode,reason}'
723
- curl -s http://localhost:20128/api/cli-tools/runtime/continue | jq '{installed,runnable,commandPath,runtimeMode,reason}'
724
- ```
725
-
726
- Container defaults:
727
-
728
- - `PORT=20128`
729
- - `HOSTNAME=0.0.0.0`
730
-
731
- Useful commands:
732
-
733
- ```bash
734
- docker logs -f omniroute
735
- docker restart omniroute
736
- docker stop omniroute && docker rm omniroute
737
- ```
738
-
739
- ### Environment Variables
740
-
741
- | Variable | Default | Description |
742
- | ---------------------------------------------------- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
743
- | `JWT_SECRET` | `omniroute-default-secret-change-me` | JWT signing secret for dashboard auth cookie (**change in production**) |
744
- | `INITIAL_PASSWORD` | `123456` | First login password when no saved hash exists |
745
- | `DATA_DIR` | `~/.omniroute` | Primary data directory (`db.json`, `usage.json`, `log.txt`, `call_logs/`) |
746
- | `XDG_CONFIG_HOME` | unset | Optional base dir on Linux/macOS when `DATA_DIR` is unset (`$XDG_CONFIG_HOME/omniroute`) |
747
- | `PORT` | framework default | Service port (`20128` in examples) |
748
- | `HOSTNAME` | framework default | Bind host (Docker defaults to `0.0.0.0`) |
749
- | `NODE_ENV` | runtime default | Set `production` for deploy |
750
- | `BASE_URL` | `http://localhost:20128` | Server-side internal base URL used by cloud sync jobs |
751
- | `CLOUD_URL` | `https://omniroute.dev` | Server-side cloud sync endpoint base URL |
752
- | `NEXT_PUBLIC_BASE_URL` | `http://localhost:3000` | Backward-compatible/public base URL (prefer `BASE_URL` for server runtime) |
753
- | `NEXT_PUBLIC_CLOUD_URL` | `https://omniroute.dev` | Backward-compatible/public cloud URL (prefer `CLOUD_URL` for server runtime) |
754
- | `API_KEY_SECRET` | `endpoint-proxy-api-key-secret` | HMAC secret for generated API keys |
755
- | `MACHINE_ID_SALT` | `endpoint-proxy-salt` | Salt for stable machine ID hashing |
756
- | `ENABLE_REQUEST_LOGS` | `false` | Enables request/response logs under `logs/` |
757
- | `AUTH_COOKIE_SECURE` | `false` | Force `Secure` auth cookie (set `true` behind HTTPS reverse proxy) |
758
- | `REQUIRE_API_KEY` | `false` | Enforce Bearer API key on `/v1/*` routes (recommended for internet-exposed deploys) |
759
- | `ENABLE_SOCKS5_PROXY` | `false` | Enables backend/runtime SOCKS5 support for outbound proxy |
760
- | `NEXT_PUBLIC_ENABLE_SOCKS5_PROXY` | `false` | Shows SOCKS5 option in dashboard proxy UI |
761
- | `ALLOW_MULTI_CONNECTIONS_PER_COMPAT_NODE` | `false` | Allow multiple connections for each OpenAI/Anthropic-compatible custom node |
762
- | `CLI_MODE` | `auto` | CLI runtime profile: `auto`, `host`, or `container` |
763
- | `CLI_EXTRA_PATHS` | empty | Extra `PATH` entries used for CLI detection/healthcheck (split by `:` on Linux) |
764
- | `CLI_CONFIG_HOME` | runtime home (`os.homedir`) | Base directory used to read/write CLI config files |
765
- | `CLI_ALLOW_CONFIG_WRITES` | `true` | If `false`, `/api/cli-tools/*` `POST`/`DELETE` return `403` |
766
- | `CLI_CLAUDE_BIN` | `claude` | Override command/path used for Claude CLI detection |
767
- | `CLI_CODEX_BIN` | `codex` | Override command/path used for Codex CLI detection |
768
- | `CLI_DROID_BIN` | `droid` | Override command/path used for Droid CLI detection |
769
- | `CLI_OPENCLAW_BIN` | `openclaw` | Override command/path used for OpenClaw CLI detection |
770
- | `CLI_CURSOR_BIN` | `agent` | Override command/path used for Cursor Agent detection (`agent`, fallback `cursor`) |
771
- | `CLI_CLINE_BIN` | empty | Optional override for Cline runtime detection (set `cline` if you have local CLI) |
772
- | `CLI_ROO_BIN` | empty | Optional override for Roo runtime detection |
773
- | `CLI_CONTINUE_BIN` | empty | Optional override for Continue runtime detection (commonly `cn`) |
774
- | `HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY`, `NO_PROXY` | empty | Optional outbound proxy for upstream provider calls |
775
-
776
- Notes:
777
-
778
- - Lowercase proxy variables are also supported: `http_proxy`, `https_proxy`, `all_proxy`, `no_proxy`.
779
- - `.env` is not baked into Docker image (`.dockerignore`); inject runtime config with `--env-file` or `-e`.
780
- - On Windows, `APPDATA` can be used for local storage path resolution.
781
- - `CLI_EXTRA_PATHS` uses the platform delimiter (`:` on Linux/macOS, `;` on Windows).
782
- - `INSTANCE_NAME` appears in older docs/env templates, but is currently not used at runtime.
783
-
784
- ### Runtime Files and Storage
785
-
786
- - Main app state: `${DATA_DIR}/db.json` (providers, combos, aliases, keys, settings), managed by `src/lib/localDb.js`.
787
- - Usage history and logs: `${DATA_DIR}/usage.json`, `${DATA_DIR}/log.txt`, `${DATA_DIR}/call_logs/`, managed by `src/lib/usageDb.js`.
788
- - Optional request/translator logs: `<repo>/logs/...` when `ENABLE_REQUEST_LOGS=true`.
789
- - Legacy files under `~/.omniroute` are migrated automatically when `DATA_DIR` (or `XDG_CONFIG_HOME`) points to a different location.
790
-
791
- </details>
792
-
793
- ---
794
-
795
- ## 📊 Available Models
796
-
797
- <details>
798
- <summary><b>View all available models</b></summary>
799
-
800
- **Claude Code (`cc/`)** - Pro/Max:
801
-
802
- - `cc/claude-opus-4-6`
803
- - `cc/claude-sonnet-4-5-20250929`
804
- - `cc/claude-haiku-4-5-20251001`
805
-
806
- **Codex (`cx/`)** - Plus/Pro:
807
-
808
- - `cx/gpt-5.2-codex`
809
- - `cx/gpt-5.1-codex-max`
810
-
811
- **Gemini CLI (`gc/`)** - FREE:
812
-
813
- - `gc/gemini-3-flash-preview`
814
- - `gc/gemini-2.5-pro`
815
-
816
- **GitHub Copilot (`gh/`)**:
817
-
818
- - `gh/gpt-5`
819
- - `gh/claude-4.5-sonnet`
820
-
821
- **GLM (`glm/`)** - $0.6/1M:
822
-
823
- - `glm/glm-4.7`
824
-
825
- **MiniMax (`minimax/`)** - $0.2/1M:
826
-
827
- - `minimax/MiniMax-M2.1`
828
-
829
- **iFlow (`if/`)** - FREE:
830
-
831
- - `if/kimi-k2-thinking`
832
- - `if/qwen3-coder-plus`
833
- - `if/deepseek-r1`
834
-
835
- **Qwen (`qw/`)** - FREE:
836
-
837
- - `qw/qwen3-coder-plus`
838
- - `qw/qwen3-coder-flash`
839
-
840
- **Kiro (`kr/`)** - FREE:
841
-
842
- - `kr/claude-sonnet-4.5`
843
- - `kr/claude-haiku-4.5`
844
-
845
- **DeepSeek (`ds/`)** - API Key:
846
-
847
- - `ds/deepseek-chat`
848
- - `ds/deepseek-reasoner`
849
-
850
- **Groq (`groq/`)** - API Key:
851
-
852
- - `groq/llama-3.3-70b-versatile`
853
- - `groq/llama-4-maverick-17b-128e-instruct`
854
- - `groq/qwen-qwq-32b`
855
- - `groq/gpt-oss-120b`
856
-
857
- **xAI (`xai/`)** - API Key:
858
-
859
- - `xai/grok-4`
860
- - `xai/grok-4-0709-fast-reasoning`
861
- - `xai/grok-code-mini`
862
- - `xai/grok-3-beta`
863
-
864
- **Mistral (`mistral/`)** - API Key:
865
-
866
- - `mistral/mistral-large-2501`
867
- - `mistral/codestral-2501`
868
- - `mistral/mistral-medium-2505`
869
-
870
- **Perplexity (`pplx/`)** - API Key:
871
-
872
- - `pplx/sonar-pro`
873
- - `pplx/sonar`
874
-
875
- **Together AI (`together/`)** - API Key:
876
-
877
- - `together/meta-llama/Llama-3.3-70B-Instruct-Turbo`
878
- - `together/deepseek-ai/DeepSeek-R1`
879
- - `together/Qwen/Qwen3-235B-A22B`
880
-
881
- **Fireworks AI (`fireworks/`)** - API Key:
882
-
883
- - `fireworks/accounts/fireworks/models/deepseek-v3p1`
884
- - `fireworks/accounts/fireworks/models/llama-v3p3-70b-instruct`
885
-
886
- **Cerebras (`cerebras/`)** - API Key:
887
-
888
- - `cerebras/llama-3.3-70b`
889
- - `cerebras/llama-4-scout-17b-16e-instruct`
890
- - `cerebras/qwen-3-32b`
891
-
892
- **Cohere (`cohere/`)** - API Key:
893
-
894
- - `cohere/command-r-plus-08-2024`
895
- - `cohere/command-a-03-2025`
896
-
897
- **NVIDIA NIM (`nvidia/`)** - API Key:
898
-
899
- - `nvidia/nvidia/llama-3.3-70b-instruct`
900
- - `nvidia/deepseek/deepseek-r1`
901
-
902
- </details>
903
-
904
- ---
905
-
906
- ## 🧩 Advanced Features
907
-
908
- <details>
909
- <summary><b>Custom Models</b></summary>
910
-
911
- Add any model ID to any provider without waiting for an app update:
912
-
913
- ```bash
914
- # Via API
915
- curl -X POST http://localhost:20128/api/provider-models \
916
- -H "Content-Type: application/json" \
917
- -d '{"provider": "openai", "modelId": "gpt-4.5-preview", "modelName": "GPT-4.5 Preview"}'
918
-
919
- # List custom models
920
- curl http://localhost:20128/api/provider-models?provider=openai
921
-
922
- # Remove
923
- curl -X DELETE "http://localhost:20128/api/provider-models?provider=openai&model=gpt-4.5-preview"
924
- ```
925
-
926
- Or use the Dashboard: **Providers → [Provider] → Custom Models** section.
927
-
928
- Custom models appear in `/v1/models` with `custom: true` flag.
929
-
930
- </details>
931
-
932
- <details>
933
- <summary><b>Dedicated Provider Routes</b></summary>
934
-
935
- Route requests directly to a specific provider with model validation:
936
-
937
- ```bash
938
- # Chat completions for a specific provider
939
- curl -X POST http://localhost:20128/v1/providers/openai/chat/completions \
940
- -H "Content-Type: application/json" \
941
- -d '{"model": "gpt-4o", "messages": [{"role": "user", "content": "Hello"}]}'
942
-
943
- # Embeddings for a specific provider
944
- curl -X POST http://localhost:20128/v1/providers/openai/embeddings \
945
- -H "Content-Type: application/json" \
946
- -d '{"model": "text-embedding-3-small", "input": "Hello world"}'
947
-
948
- # Image generation for a specific provider
949
- curl -X POST http://localhost:20128/v1/providers/fireworks/images/generations \
950
- -H "Content-Type: application/json" \
951
- -d '{"model": "flux-1-schnell", "prompt": "A sunset over the ocean"}'
952
- ```
953
-
954
- The provider prefix is auto-added if missing. Mismatched models return `400`.
955
-
956
- </details>
957
-
958
- <details>
959
- <summary><b>Network Proxy Configuration</b></summary>
960
-
961
- Configure outbound proxies globally, or per-provider via structured proxy objects:
962
-
963
- ```bash
964
- # Set global proxy
965
- curl -X PUT http://localhost:20128/api/settings/proxy \
966
- -H "Content-Type: application/json" \
967
- -d '{"global": {"type":"http","host":"proxy.example.com","port":"8080"}}'
968
-
969
- # Set per-provider proxy
970
- curl -X PUT http://localhost:20128/api/settings/proxy \
971
- -H "Content-Type: application/json" \
972
- -d '{"providers": {"openai": {"type":"socks5","host":"proxy.example.com","port":"1080"}}}'
973
-
974
- # Test a proxy before saving
975
- curl -X POST http://localhost:20128/api/settings/proxy/test \
976
- -H "Content-Type: application/json" \
977
- -d '{"proxy":{"type":"socks5","host":"proxy.example.com","port":"1080"}}'
978
-
979
- # Get current config
980
- curl http://localhost:20128/api/settings/proxy
981
- ```
982
-
983
- Notes:
984
-
985
- - SOCKS5 is feature-flagged. Enable backend/runtime with `ENABLE_SOCKS5_PROXY=true`.
986
- - To display SOCKS5 in the dashboard UI, also set `NEXT_PUBLIC_ENABLE_SOCKS5_PROXY=true`.
987
- - Requests are fail-closed when a configured proxy fails (no direct-connection fallback).
988
-
989
- **Precedence:** Key-specific → Combo-specific → Provider-specific → Global → Environment (`HTTPS_PROXY`/`HTTP_PROXY`/`ALL_PROXY`).
990
-
991
- </details>
992
-
993
- <details>
994
- <summary><b>Model Catalog API</b></summary>
995
-
996
- Get all available models grouped by provider with type metadata:
997
-
998
- ```bash
999
- curl http://localhost:20128/api/models/catalog
1000
- ```
1001
-
1002
- Returns:
1003
-
1004
- ```json
1005
- {
1006
- "catalog": {
1007
- "openai": {
1008
- "provider": "OpenAI",
1009
- "active": true,
1010
- "models": [
1011
- {
1012
- "id": "openai/gpt-4o",
1013
- "name": "GPT-4o",
1014
- "type": "chat",
1015
- "custom": false
1016
- },
1017
- {
1018
- "id": "openai/text-embedding-3-small",
1019
- "type": "embedding",
1020
- "custom": false
1021
- }
1022
- ]
1023
- }
1024
- }
1025
- }
1026
- ```
1027
-
1028
- Types: `chat`, `embedding`, `image`. Custom models are flagged with `custom: true`.
1029
-
1030
- </details>
1031
-
1032
- ---
1033
-
1034
- ## 🐛 Troubleshooting
1035
-
1036
- **"Language model did not provide messages"**
1037
-
1038
- - Provider quota exhausted → Check dashboard quota tracker
1039
- - Solution: Use combo fallback or switch to cheaper tier
1040
-
1041
- **Rate limiting**
1042
-
1043
- - Subscription quota out → Fallback to GLM/MiniMax
1044
- - Add combo: `cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking`
1045
-
1046
- **OAuth token expired**
1047
-
1048
- - Auto-refreshed by OmniRoute
1049
- - If issues persist: Dashboard → Provider → Reconnect
1050
-
1051
- **High costs**
1052
-
1053
- - Check usage stats in Dashboard
1054
- - Switch primary model to GLM/MiniMax
1055
- - Use free tier (Gemini CLI, iFlow) for non-critical tasks
1056
-
1057
- **Dashboard opens on wrong port**
1058
-
1059
- - Set `PORT=20128` and `NEXT_PUBLIC_BASE_URL=http://localhost:20128`
1060
-
1061
- **Cloud sync errors**
1062
-
1063
- - Verify `BASE_URL` points to your running instance (example: `http://localhost:20128`)
1064
- - Verify `CLOUD_URL` points to your expected cloud endpoint (example: `https://omniroute.dev`)
1065
- - Keep `NEXT_PUBLIC_*` values aligned with server-side values when possible.
1066
-
1067
- **Cloud endpoint `stream=false` returns 500 (`Unexpected token 'd'...`)**
1068
-
1069
- - Symptom usually appears on public cloud endpoint (`https://omniroute.dev/v1`) for non-streaming calls.
1070
- - Root cause: upstream returns SSE payload (`data: ...`) while client expects JSON.
1071
- - Workaround: use `stream=true` for cloud direct calls.
1072
- - Local OmniRoute runtime includes SSE→JSON fallback for non-streaming calls when upstream returns `text/event-stream`.
1073
-
1074
- **Cloud says connected, but request still fails with `Invalid API key`**
1075
-
1076
- - Create a fresh key from local dashboard (`/api/keys`) and run cloud sync (`Enable Cloud` then `Sync Now`).
1077
- - Old/non-synced keys can still return `401` on cloud even if local endpoint works.
1078
-
1079
- **CLI tool shows not installed inside Docker**
1080
-
1081
- - Check runtime fields from `/api/cli-tools/*` (`installed`, `runnable`, `reason`, `commandPath`).
1082
- - For portable mode, use image target `runner-cli` (bundled `codex`/`claude`/`droid`).
1083
- - For host mount mode, set `CLI_EXTRA_PATHS` and mount host bin directory as read-only.
1084
- - If `installed=true` and `runnable=false`, binary was found but failed healthcheck.
1085
-
1086
- **First login not working**
1087
-
1088
- - Check `INITIAL_PASSWORD` in `.env`
1089
- - If unset, fallback password is `123456`
1090
-
1091
- **No request logs under `logs/`**
1092
-
1093
- - Set `ENABLE_REQUEST_LOGS=true`
118
+ | Feature | What It Does |
119
+ | ------------------------------- | --------------------------------------------- |
120
+ | 🎯 **Smart 3-Tier Fallback** | Auto-route: Subscription → Cheap → Free |
121
+ | 📊 **Real-Time Quota Tracking** | Live token count + reset countdown |
122
+ | 🔄 **Format Translation** | OpenAI ↔ Claude ↔ Gemini seamless |
123
+ | 👥 **Multi-Account Support** | Multiple accounts per provider |
124
+ | 🔄 **Auto Token Refresh** | OAuth tokens refresh automatically |
125
+ | 🎨 **Custom Combos** | Create unlimited model combinations |
126
+ | 🧩 **Custom Models** | Add any model ID to any provider |
127
+ | 📝 **Request Logging** | Debug mode with full request/response logs |
128
+ | 💾 **Cloud Sync** | Sync config across devices |
129
+ | 📊 **Usage Analytics** | Track tokens, cost, trends over time |
130
+ | 🌐 **Deploy Anywhere** | Localhost, VPS, Docker, Cloudflare Workers |
131
+ | 🔌 **Circuit Breaker** | Auto-open/close per-provider with cooldowns |
132
+ | 🛡️ **Anti-Thundering Herd** | Mutex + auto rate-limit for API key providers |
133
+ | 🧠 **Semantic Cache** | Two-tier cache reduces cost & latency |
134
+ | **Request Idempotency** | 5s dedup window for duplicate requests |
135
+ | 📈 **Progress Tracking** | Opt-in SSE progress events for streaming |
1094
136
 
1095
137
  ---
1096
138
 
1097
139
  ## 🛠️ Tech Stack
1098
140
 
1099
141
  - **Runtime**: Node.js 20+
1100
- - **Framework**: Next.js 16
1101
- - **UI**: React 19 + Tailwind CSS 4
1102
- - **Charts**: Recharts (SVG, accessible)
1103
- - **Database**: LowDB (JSON file-based)
142
+ - **Framework**: Next.js 16 + React 19 + Tailwind CSS 4
143
+ - **Database**: LowDB (JSON) + SQLite (domain state)
1104
144
  - **Streaming**: Server-Sent Events (SSE)
1105
145
  - **Auth**: OAuth 2.0 (PKCE) + JWT + API Keys
1106
- - **Testing**: Playwright (E2E) + Node.js test runner (273+ unit tests)
1107
- - **Monorepo**: npm workspaces (`@omniroute/open-sse`)
1108
- - **CI/CD**: GitHub Actions (auto npm publish on release) + Dependabot
146
+ - **Testing**: Node.js test runner (320+ unit tests)
147
+ - **CI/CD**: GitHub Actions (auto npm publish on release)
1109
148
  - **Package**: [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute)
1110
- - **Compliance**: `/terms` and `/privacy` pages + audit log
1111
149
  - **Resilience**: Circuit breaker, exponential backoff, anti-thundering herd
1112
- - **Observability**: Request telemetry (p50/p95/p99), correlation IDs, structured error codes
1113
150
 
1114
151
  ---
1115
152
 
1116
- ## 📝 API Reference
153
+ ## 📖 Documentation
1117
154
 
1118
- ### Chat Completions
1119
-
1120
- ```bash
1121
- POST http://localhost:20128/v1/chat/completions
1122
- Authorization: Bearer your-api-key
1123
- Content-Type: application/json
1124
-
1125
- {
1126
- "model": "cc/claude-opus-4-6",
1127
- "messages": [
1128
- {"role": "user", "content": "Write a function to..."}
1129
- ],
1130
- "stream": true
1131
- }
1132
- ```
1133
-
1134
- ### Embeddings
1135
-
1136
- ```bash
1137
- POST http://localhost:20128/v1/embeddings
1138
- Authorization: Bearer your-api-key
1139
- Content-Type: application/json
1140
-
1141
- {
1142
- "model": "nebius/Qwen/Qwen3-Embedding-8B",
1143
- "input": "The food was delicious"
1144
- }
1145
- ```
1146
-
1147
- Available embedding providers: Nebius, OpenAI, Mistral, Together AI, Fireworks, NVIDIA.
1148
-
1149
- ```bash
1150
- # List all embedding models
1151
- GET http://localhost:20128/v1/embeddings
1152
- ```
1153
-
1154
- ### Image Generation
1155
-
1156
- ```bash
1157
- POST http://localhost:20128/v1/images/generations
1158
- Authorization: Bearer your-api-key
1159
- Content-Type: application/json
1160
-
1161
- {
1162
- "model": "openai/dall-e-3",
1163
- "prompt": "A beautiful sunset over mountains",
1164
- "size": "1024x1024"
1165
- }
1166
- ```
1167
-
1168
- Available image providers: OpenAI (DALL-E), xAI (Grok Image), Together AI (FLUX), Fireworks AI.
1169
-
1170
- ```bash
1171
- # List all image models
1172
- GET http://localhost:20128/v1/images/generations
1173
- ```
1174
-
1175
- ### List Models
1176
-
1177
- ```bash
1178
- GET http://localhost:20128/v1/models
1179
- Authorization: Bearer your-api-key
1180
-
1181
- → Returns all chat, embedding, and image models + combos in OpenAI format
1182
- ```
1183
-
1184
- ### Compatibility Endpoints
1185
-
1186
- - `POST /v1/chat/completions`
1187
- - `POST /v1/messages`
1188
- - `POST /v1/responses`
1189
- - `POST /v1/embeddings` (**NEW**)
1190
- - `POST /v1/images/generations` (**NEW**)
1191
- - `GET /v1/models` (chat + embedding + image)
1192
- - `POST /v1/messages/count_tokens`
1193
- - `GET /v1beta/models`
1194
- - `POST /v1beta/models/{...path}` (Gemini-style `generateContent`)
1195
- - `POST /v1/api/chat` (Ollama-style transform path)
1196
-
1197
- ### Cloud Validation Scripts
1198
-
1199
- Added test scripts under `tester/security/`:
1200
-
1201
- - `tester/security/test-docker-hardening.sh`
1202
- - Builds Docker image and validates hardening checks (`/api/cloud/auth` auth guard, `REQUIRE_API_KEY`, secure auth cookie behavior).
1203
- - `tester/security/test-cloud-openai-compatible.sh`
1204
- - Sends a direct OpenAI-compatible request to cloud endpoint (`https://omniroute.dev/v1/chat/completions`) with provided model/key.
1205
- - `tester/security/test-cloud-sync-and-call.sh`
1206
- - End-to-end flow: create local key -> enable/sync cloud -> call cloud endpoint with retry.
1207
- - Includes fallback check with `stream=true` to distinguish auth errors from non-streaming parse issues.
1208
- - `tester/security/test-cli-runtime.sh`
1209
- - Validates Docker CLI runtime profiles (`runner-base`, `runner-cli`, host mount mode, write policy, non-executable regression).
1210
-
1211
- Security note for cloud test scripts:
1212
-
1213
- - Never hardcode real API keys in scripts/commits.
1214
- - Provide keys only via environment variables:
1215
- - `API_KEY`, `CLOUD_API_KEY`, or `OPENAI_API_KEY` (supported by `test-cloud-openai-compatible.sh`)
1216
- - Example:
1217
-
1218
- ```bash
1219
- OPENAI_API_KEY="your-cloud-key" bash tester/security/test-cloud-openai-compatible.sh
1220
- ```
1221
-
1222
- Expected behavior from recent validation:
1223
-
1224
- - Local runtime (`http://127.0.0.1:20128/v1/chat/completions`): works with `stream=false` and `stream=true`.
1225
- - Docker runtime (same API path exposed by container): hardening checks pass, cloud auth guard works, strict API key mode works when enabled.
1226
- - Public cloud endpoint (`https://omniroute.dev/v1/chat/completions`):
1227
- - `stream=true`: expected to succeed (SSE chunks returned).
1228
- - `stream=false`: may fail with `500` + parse error (`Unexpected token 'd'`) when upstream returns SSE content to a non-streaming client path.
1229
-
1230
- ### Dashboard and Management API
1231
-
1232
- - Auth/settings: `/api/auth/login`, `/api/auth/logout`, `/api/settings`, `/api/settings/require-login`
1233
- - Provider management: `/api/providers`, `/api/providers/[id]`, `/api/providers/[id]/test`, `/api/providers/[id]/models`, `/api/providers/validate`, `/api/provider-nodes*`
1234
- - OAuth flows: `/api/oauth/[provider]/[action]` (+ provider-specific imports like Cursor/Kiro)
1235
- - Routing config: `/api/models/alias`, `/api/combos*`, `/api/keys*`, `/api/pricing`
1236
- - Usage/logs: `/api/usage/history`, `/api/usage/logs`, `/api/usage/request-logs`, `/api/usage/[connectionId]`
1237
- - Cloud sync: `/api/sync/cloud`, `/api/sync/initialize`, `/api/cloud/*`
1238
- - IP filter: `/api/settings/ip-filter` (GET/PUT) — Allowlist/blocklist management
1239
- - Thinking budget: `/api/settings/thinking-budget` (GET/PUT) — Reasoning token budget config
1240
- - System prompt: `/api/settings/system-prompt` (GET/PUT) — Global system prompt injection
1241
- - Sessions: `/api/sessions` (GET) — Active session tracking
1242
- - Rate limits: `/api/rate-limits` (GET) — Per-account rate limit status
1243
- - CLI helpers: `/api/cli-tools/claude-settings`, `/api/cli-tools/codex-settings`, `/api/cli-tools/droid-settings`, `/api/cli-tools/openclaw-settings`
1244
- - Generic runtime status: `/api/cli-tools/runtime/[toolId]` (covers `claude`, `codex`, `droid`, `openclaw`, `cursor`, `cline`, `roo`, `continue`)
1245
- - CLI `GET` responses expose runtime fields: `installed`, `runnable`, `command`, `commandPath`, `runtimeMode`, `reason`
1246
-
1247
- ### Authentication Behavior
1248
-
1249
- - Dashboard routes (`/dashboard/*`) use `auth_token` cookie protection.
1250
- - Login uses saved password hash when present; otherwise it falls back to `INITIAL_PASSWORD`.
1251
- - `requireLogin` can be toggled via `/api/settings/require-login`.
1252
-
1253
- ### Request Processing (High Level)
1254
-
1255
- 1. Client sends request to `/v1/*`.
1256
- 2. Route handler calls `handleChat` (`src/sse/handlers/chat.js`), `handleEmbedding`, or `handleImageGeneration`.
1257
- 3. Model is resolved (direct provider/model or alias/combo resolution).
1258
- 4. Credentials are selected from local DB with account availability filtering.
1259
- 5. For chat: `handleChatCore` detects format and translates request. For embeddings/images: handler proxies directly to upstream.
1260
- 6. Provider executor sends upstream request.
1261
- 7. Stream is translated back to client format when needed (chat). Embeddings and images return JSON.
1262
- 8. Usage/logging is recorded (`src/lib/usageDb.js`).
1263
- 9. Fallback applies on provider/account/model errors according to combo rules.
1264
-
1265
- Full architecture reference: [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md)
155
+ | Document | Description |
156
+ | ------------------------------------------ | ---------------------------------------------- |
157
+ | [User Guide](docs/USER_GUIDE.md) | Providers, combos, CLI integration, deployment |
158
+ | [API Reference](docs/API_REFERENCE.md) | All endpoints with examples |
159
+ | [Troubleshooting](docs/TROUBLESHOOTING.md) | Common problems and solutions |
160
+ | [Architecture](docs/ARCHITECTURE.md) | System architecture and internals |
161
+ | [Contributing](CONTRIBUTING.md) | Development setup and guidelines |
162
+ | [OpenAPI Spec](docs/openapi.yaml) | OpenAPI 3.0 specification |
1266
163
 
1267
164
  ---
1268
165
 
@@ -1276,16 +173,8 @@ Full architecture reference: [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md)
1276
173
 
1277
174
  ## 👥 Contributors
1278
175
 
1279
- Thanks to all contributors who helped make OmniRoute better!
1280
-
1281
176
  [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors)
1282
177
 
1283
- ---
1284
-
1285
- ## 📊 Star Chart
1286
-
1287
- [![Star Chart](https://starchart.cc/diegosouzapw/OmniRoute.svg?variant=adaptive)](https://starchart.cc/diegosouzapw/OmniRoute)
1288
-
1289
178
  ### How to Contribute
1290
179
 
1291
180
  1. Fork the repository
@@ -1298,15 +187,11 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines.
1298
187
 
1299
188
  ### Releasing a New Version
1300
189
 
1301
- When a new GitHub Release is created (e.g. `v0.3.0`), the package is **automatically published to npm** via GitHub Actions:
1302
-
1303
190
  ```bash
1304
191
  # Create a release — npm publish happens automatically
1305
- gh release create v0.3.0 --title "v0.3.0" --generate-notes
192
+ gh release create v0.4.0 --title "v0.4.0" --generate-notes
1306
193
  ```
1307
194
 
1308
- The workflow syncs the version from the release tag, builds the standalone app, and publishes to npm.
1309
-
1310
195
  ---
1311
196
 
1312
197
  ## 🙏 Acknowledgments