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