omniroute 2.1.0 → 2.1.2

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 (246) hide show
  1. package/README.md +1 -1
  2. package/app/.next/BUILD_ID +1 -1
  3. package/app/.next/app-path-routes-manifest.json +55 -55
  4. package/app/.next/build-manifest.json +2 -2
  5. package/app/.next/server/app/(dashboard)/dashboard/a2a/page_client-reference-manifest.js +1 -1
  6. package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +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/costs/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/mcp/page_client-reference-manifest.js +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  31. package/app/.next/server/app/.well-known/agent.json/route_client-reference-manifest.js +1 -1
  32. package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
  33. package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
  34. package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
  35. package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
  37. package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
  38. package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
  40. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  41. package/app/.next/server/app/_global-error.html +2 -2
  42. package/app/.next/server/app/_global-error.rsc +1 -1
  43. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  44. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  45. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  46. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  47. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  48. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  49. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  50. package/app/.next/server/app/a2a/route_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/api/a2a/status/route_client-reference-manifest.js +1 -1
  52. package/app/.next/server/app/api/a2a/tasks/[id]/cancel/route_client-reference-manifest.js +1 -1
  53. package/app/.next/server/app/api/a2a/tasks/[id]/route_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/api/a2a/tasks/route_client-reference-manifest.js +1 -1
  55. package/app/.next/server/app/api/acp/agents/route_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  58. package/app/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  59. package/app/.next/server/app/api/cache/route_client-reference-manifest.js +1 -1
  60. package/app/.next/server/app/api/cache/stats/route_client-reference-manifest.js +1 -1
  61. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  62. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  63. package/app/.next/server/app/api/cli-tools/backups/route_client-reference-manifest.js +1 -1
  64. package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  65. package/app/.next/server/app/api/cli-tools/cline-settings/route_client-reference-manifest.js +1 -1
  66. package/app/.next/server/app/api/cli-tools/codex-profiles/route_client-reference-manifest.js +1 -1
  67. package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  68. package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  69. package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route_client-reference-manifest.js +1 -1
  70. package/app/.next/server/app/api/cli-tools/kilo-settings/route_client-reference-manifest.js +1 -1
  71. package/app/.next/server/app/api/cli-tools/openclaw/auto-order/route_client-reference-manifest.js +1 -1
  72. package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  73. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route_client-reference-manifest.js +1 -1
  74. package/app/.next/server/app/api/cli-tools/status/route_client-reference-manifest.js +1 -1
  75. package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
  76. package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
  77. package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
  78. package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
  79. package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
  80. package/app/.next/server/app/api/combos/auto/route_client-reference-manifest.js +1 -1
  81. package/app/.next/server/app/api/combos/metrics/route_client-reference-manifest.js +1 -1
  82. package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
  83. package/app/.next/server/app/api/combos/test/route_client-reference-manifest.js +1 -1
  84. package/app/.next/server/app/api/compliance/audit-log/route_client-reference-manifest.js +1 -1
  85. package/app/.next/server/app/api/db-backups/export/route_client-reference-manifest.js +1 -1
  86. package/app/.next/server/app/api/db-backups/exportAll/route_client-reference-manifest.js +1 -1
  87. package/app/.next/server/app/api/db-backups/import/route_client-reference-manifest.js +1 -1
  88. package/app/.next/server/app/api/db-backups/route_client-reference-manifest.js +1 -1
  89. package/app/.next/server/app/api/evals/[suiteId]/route_client-reference-manifest.js +1 -1
  90. package/app/.next/server/app/api/evals/route_client-reference-manifest.js +1 -1
  91. package/app/.next/server/app/api/fallback/chains/route_client-reference-manifest.js +1 -1
  92. package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  93. package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  94. package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
  95. package/app/.next/server/app/api/logs/console/route_client-reference-manifest.js +1 -1
  96. package/app/.next/server/app/api/mcp/audit/route_client-reference-manifest.js +1 -1
  97. package/app/.next/server/app/api/mcp/audit/stats/route_client-reference-manifest.js +1 -1
  98. package/app/.next/server/app/api/mcp/sse/route_client-reference-manifest.js +1 -1
  99. package/app/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  100. package/app/.next/server/app/api/mcp/stream/route_client-reference-manifest.js +1 -1
  101. package/app/.next/server/app/api/mcp/tools/route_client-reference-manifest.js +1 -1
  102. package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  103. package/app/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -1
  104. package/app/.next/server/app/api/models/catalog/route_client-reference-manifest.js +1 -1
  105. package/app/.next/server/app/api/models/openrouter-catalog/route_client-reference-manifest.js +1 -1
  106. package/app/.next/server/app/api/models/route.js +1 -1
  107. package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  108. package/app/.next/server/app/api/monitoring/health/route.js +1 -1
  109. package/app/.next/server/app/api/monitoring/health/route_client-reference-manifest.js +1 -1
  110. package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
  111. package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
  112. package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
  113. package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
  114. package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
  115. package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
  116. package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
  117. package/app/.next/server/app/api/policies/route_client-reference-manifest.js +1 -1
  118. package/app/.next/server/app/api/pricing/defaults/route_client-reference-manifest.js +1 -1
  119. package/app/.next/server/app/api/pricing/models/route_client-reference-manifest.js +1 -1
  120. package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
  121. package/app/.next/server/app/api/provider-metrics/route_client-reference-manifest.js +1 -1
  122. package/app/.next/server/app/api/provider-models/route_client-reference-manifest.js +1 -1
  123. package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
  124. package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
  125. package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
  126. package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
  127. package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
  128. package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
  129. package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  130. package/app/.next/server/app/api/providers/route.js +1 -1
  131. package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
  132. package/app/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
  133. package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
  134. package/app/.next/server/app/api/rate-limit/route_client-reference-manifest.js +1 -1
  135. package/app/.next/server/app/api/rate-limits/route_client-reference-manifest.js +1 -1
  136. package/app/.next/server/app/api/resilience/reset/route_client-reference-manifest.js +1 -1
  137. package/app/.next/server/app/api/resilience/route_client-reference-manifest.js +1 -1
  138. package/app/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  139. package/app/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  140. package/app/.next/server/app/api/settings/background-degradation/route_client-reference-manifest.js +1 -1
  141. package/app/.next/server/app/api/settings/combo-defaults/route_client-reference-manifest.js +1 -1
  142. package/app/.next/server/app/api/settings/ip-filter/route_client-reference-manifest.js +1 -1
  143. package/app/.next/server/app/api/settings/model-aliases/route_client-reference-manifest.js +1 -1
  144. package/app/.next/server/app/api/settings/proxy/route_client-reference-manifest.js +1 -1
  145. package/app/.next/server/app/api/settings/proxy/test/route_client-reference-manifest.js +1 -1
  146. package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
  147. package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  148. package/app/.next/server/app/api/settings/system-prompt/route_client-reference-manifest.js +1 -1
  149. package/app/.next/server/app/api/settings/thinking-budget/route_client-reference-manifest.js +1 -1
  150. package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  151. package/app/.next/server/app/api/storage/health/route_client-reference-manifest.js +1 -1
  152. package/app/.next/server/app/api/sync/cloud/route_client-reference-manifest.js +1 -1
  153. package/app/.next/server/app/api/sync/initialize/route_client-reference-manifest.js +1 -1
  154. package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
  155. package/app/.next/server/app/api/telemetry/summary/route_client-reference-manifest.js +1 -1
  156. package/app/.next/server/app/api/token-health/route_client-reference-manifest.js +1 -1
  157. package/app/.next/server/app/api/translator/detect/route_client-reference-manifest.js +1 -1
  158. package/app/.next/server/app/api/translator/history/route_client-reference-manifest.js +1 -1
  159. package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
  160. package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
  161. package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
  162. package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
  163. package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
  164. package/app/.next/server/app/api/usage/analytics/route_client-reference-manifest.js +1 -1
  165. package/app/.next/server/app/api/usage/budget/route_client-reference-manifest.js +1 -1
  166. package/app/.next/server/app/api/usage/call-logs/[id]/route_client-reference-manifest.js +1 -1
  167. package/app/.next/server/app/api/usage/call-logs/route_client-reference-manifest.js +1 -1
  168. package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
  169. package/app/.next/server/app/api/usage/logs/route_client-reference-manifest.js +1 -1
  170. package/app/.next/server/app/api/usage/proxy-logs/route_client-reference-manifest.js +1 -1
  171. package/app/.next/server/app/api/usage/quota/route_client-reference-manifest.js +1 -1
  172. package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
  173. package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
  174. package/app/.next/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -1
  175. package/app/.next/server/app/api/v1/audio/transcriptions/route_client-reference-manifest.js +1 -1
  176. package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
  177. package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
  178. package/app/.next/server/app/api/v1/images/generations/route_client-reference-manifest.js +1 -1
  179. package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
  180. package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
  181. package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
  182. package/app/.next/server/app/api/v1/moderations/route_client-reference-manifest.js +1 -1
  183. package/app/.next/server/app/api/v1/music/generations/route_client-reference-manifest.js +1 -1
  184. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route_client-reference-manifest.js +1 -1
  185. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route_client-reference-manifest.js +1 -1
  186. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route_client-reference-manifest.js +1 -1
  187. package/app/.next/server/app/api/v1/rerank/route_client-reference-manifest.js +1 -1
  188. package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
  189. package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
  190. package/app/.next/server/app/api/v1/videos/generations/route_client-reference-manifest.js +1 -1
  191. package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
  192. package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
  193. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  194. package/app/.next/server/app/docs/page.js +1 -1
  195. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  196. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  197. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  198. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  199. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  200. package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
  201. package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  202. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  203. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  204. package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
  205. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  206. package/app/.next/server/app-paths-manifest.json +55 -55
  207. package/app/.next/server/chunks/1909.js +1 -1
  208. package/app/.next/server/chunks/8252.js +1 -1
  209. package/app/.next/server/chunks/8907.js +1 -1
  210. package/app/.next/server/pages/500.html +2 -2
  211. package/app/.next/server/server-reference-manifest.js +1 -1
  212. package/app/.next/server/server-reference-manifest.json +1 -1
  213. package/app/.next/static/chunks/{5846-2907f9dda1834c88.js → 5846-d3aa3ba9dd16fa55.js} +1 -1
  214. package/app/package.json +1 -1
  215. package/package.json +1 -1
  216. package/README.ar.md +0 -1683
  217. package/README.bg.md +0 -1691
  218. package/README.da.md +0 -1692
  219. package/README.de.md +0 -1696
  220. package/README.es.md +0 -1436
  221. package/README.fi.md +0 -1586
  222. package/README.fr.md +0 -1435
  223. package/README.he.md +0 -1586
  224. package/README.hu.md +0 -1586
  225. package/README.id.md +0 -1586
  226. package/README.in.md +0 -1225
  227. package/README.it.md +0 -1434
  228. package/README.ja.md +0 -1583
  229. package/README.ko.md +0 -1586
  230. package/README.ms.md +0 -1587
  231. package/README.nl.md +0 -1586
  232. package/README.no.md +0 -1586
  233. package/README.phi.md +0 -1587
  234. package/README.pl.md +0 -1586
  235. package/README.pt-BR.md +0 -1499
  236. package/README.pt.md +0 -1586
  237. package/README.ro.md +0 -1588
  238. package/README.ru.md +0 -1433
  239. package/README.sk.md +0 -1590
  240. package/README.sv.md +0 -1587
  241. package/README.th.md +0 -1577
  242. package/README.uk-UA.md +0 -1592
  243. package/README.vi.md +0 -1586
  244. package/README.zh-CN.md +0 -1432
  245. /package/app/.next/static/{jBXsbnBQXxbuL3eAmEO72 → xYoMYiq2lWi73ieYn-e4s}/_buildManifest.js +0 -0
  246. /package/app/.next/static/{jBXsbnBQXxbuL3eAmEO72 → xYoMYiq2lWi73ieYn-e4s}/_ssgManifest.js +0 -0
package/README.es.md DELETED
@@ -1,1436 +0,0 @@
1
- <div align="center">
2
- <img src="./docs/screenshots/MainOmniRoute.png" alt="OmniRoute Dashboard" width="800"/>
3
-
4
- # 🚀 OmniRoute — El Gateway de IA Gratuito
5
-
6
- ### Nunca dejes de programar. Enrutamiento inteligente hacia **modelos de IA GRATUITOS y económicos** con fallback automático.
7
-
8
- _Tu proxy de API universal — un endpoint, 36+ proveedores, cero tiempo de inactividad._
9
-
10
- **Chat Completions • Embeddings • Generación de Imágenes • Audio • Reranking • 100% TypeScript**
11
-
12
- ---
13
-
14
- ### 🚀 New in v2.0.9+ — Playground, CLI Fingerprints & ACP
15
-
16
- | Feature | What It Does |
17
- | ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
18
- | 🎮 **Model Playground** | Dashboard page to test any model directly — provider/model/endpoint selectors, Monaco Editor, streaming, abort, timing |
19
- | 🔏 **CLI Fingerprint Matching** | Per-provider header/body ordering to match native CLI signatures — toggle per provider in Settings > Security. **Your proxy IP is preserved** |
20
- | 🤝 **ACP Support (Agent Client Protocol)** | CLI agent discovery (Codex, Claude, Goose, Gemini CLI, OpenClaw), process spawner, `/api/acp/agents` endpoint |
21
- | 🤖 **ACP Agents Dashboard** | Debug > Agents page — grid of 14 agents with install status, version, custom agent form for any CLI tool |
22
- | 🔧 **Custom Model `apiFormat` Routing** | Custom models with `apiFormat: "responses"` now correctly route to the Responses API translator |
23
- | 🏢 **Codex Workspace Isolation** | Multiple Codex workspaces per email — OAuth correctly separates connections by workspace ID |
24
- | 🔄 **Electron Auto-Update** | Desktop app checks for updates + auto-install on restart |
25
-
26
- ### 🤖 Proveedor de IA Gratuito para tus agentes de programación favoritos
27
-
28
- _Conecta cualquier IDE o herramienta CLI con IA a través de OmniRoute — gateway de API gratuito para programación ilimitada._
29
-
30
- <table>
31
- <tr>
32
- <td align="center" width="110">
33
- <a href="https://github.com/cline/cline">
34
- <img src="./public/providers/openclaw.png" alt="OpenClaw" width="48"/><br/>
35
- <b>OpenClaw</b>
36
- </a><br/>
37
- <sub>⭐ 205K</sub>
38
- </td>
39
- <td align="center" width="110">
40
- <a href="https://github.com/HKUDS/nanobot">
41
- <img src="./public/providers/nanobot.png" alt="NanoBot" width="48"/><br/>
42
- <b>NanoBot</b>
43
- </a><br/>
44
- <sub>⭐ 20.9K</sub>
45
- </td>
46
- <td align="center" width="110">
47
- <a href="https://github.com/sipeed/picoclaw">
48
- <img src="./public/providers/picoclaw.jpg" alt="PicoClaw" width="48"/><br/>
49
- <b>PicoClaw</b>
50
- </a><br/>
51
- <sub>⭐ 14.6K</sub>
52
- </td>
53
- <td align="center" width="110">
54
- <a href="https://github.com/zeroclaw-labs/zeroclaw">
55
- <img src="./public/providers/zeroclaw.png" alt="ZeroClaw" width="48"/><br/>
56
- <b>ZeroClaw</b>
57
- </a><br/>
58
- <sub>⭐ 9.9K</sub>
59
- </td>
60
- <td align="center" width="110">
61
- <a href="https://github.com/nearai/ironclaw">
62
- <img src="./public/providers/ironclaw.png" alt="IronClaw" width="48"/><br/>
63
- <b>IronClaw</b>
64
- </a><br/>
65
- <sub>⭐ 2.1K</sub>
66
- </td>
67
- </tr>
68
- <tr>
69
- <td align="center" width="110">
70
- <a href="https://github.com/anomalyco/opencode">
71
- <img src="./public/providers/opencode.svg" alt="OpenCode" width="48"/><br/>
72
- <b>OpenCode</b>
73
- </a><br/>
74
- <sub>⭐ 106K</sub>
75
- </td>
76
- <td align="center" width="110">
77
- <a href="https://github.com/openai/codex">
78
- <img src="./public/providers/codex.png" alt="Codex CLI" width="48"/><br/>
79
- <b>Codex CLI</b>
80
- </a><br/>
81
- <sub>⭐ 60.8K</sub>
82
- </td>
83
- <td align="center" width="110">
84
- <a href="https://github.com/anthropics/claude-code">
85
- <img src="./public/providers/claude.png" alt="Claude Code" width="48"/><br/>
86
- <b>Claude Code</b>
87
- </a><br/>
88
- <sub>⭐ 67.3K</sub>
89
- </td>
90
- <td align="center" width="110">
91
- <a href="https://github.com/google-gemini/gemini-cli">
92
- <img src="./public/providers/gemini-cli.png" alt="Gemini CLI" width="48"/><br/>
93
- <b>Gemini CLI</b>
94
- </a><br/>
95
- <sub>⭐ 94.7K</sub>
96
- </td>
97
- <td align="center" width="110">
98
- <a href="https://github.com/Kilo-Org/kilocode">
99
- <img src="./public/providers/kilocode.png" alt="Kilo Code" width="48"/><br/>
100
- <b>Kilo Code</b>
101
- </a><br/>
102
- <sub>⭐ 15.5K</sub>
103
- </td>
104
- </tr>
105
- </table>
106
-
107
- <sub>📡 Todos los agentes se conectan vía <code>http://localhost:20128/v1</code> o <code>http://cloud.omniroute.online/v1</code> — una configuración, modelos y cuota ilimitados</sub>
108
-
109
- ---
110
-
111
- [![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute)
112
- [![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute)
113
- [![License](https://img.shields.io/github/license/diegosouzapw/OmniRoute)](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE)
114
- [![Website](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online)
115
- [![WhatsApp](https://img.shields.io/badge/WhatsApp-Community-25D366?logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
116
-
117
- [🌐 Website](https://omniroute.online) • [🚀 Inicio Rápido](#-inicio-rápido) • [💡 Características](#-características-principales) • [📖 Docs](#-documentación) • [💰 Precios](#-precios-resumidos)
118
-
119
- 🌐 **Disponible en:** 🇺🇸 [English](README.md) | 🇧🇷 [Português (Brasil)](README.pt-BR.md) | 🇪🇸 [Español](README.es.md) | 🇫🇷 [Français](README.fr.md) | 🇮🇹 [Italiano](README.it.md) | 🇷🇺 [Русский](README.ru.md) | 🇨🇳 [中文 (简体)](README.zh-CN.md) | 🇩🇪 [Deutsch](README.de.md) | 🇮🇳 [हिन्दी](README.in.md) | 🇹🇭 [ไทย](README.th.md) | 🇺🇦 [Українська](README.uk-UA.md) | 🇸🇦 [العربية](README.ar.md) | 🇯🇵 [日本語](README.ja.md) | 🇻🇳 [Tiếng Việt](README.vi.md) | 🇧🇬 [Български](README.bg.md) | 🇩🇰 [Dansk](README.da.md) | 🇫🇮 [Suomi](README.fi.md) | 🇮🇱 [עברית](README.he.md) | 🇭🇺 [Magyar](README.hu.md) | 🇮🇩 [Bahasa Indonesia](README.id.md) | 🇰🇷 [한국어](README.ko.md) | 🇲🇾 [Bahasa Melayu](README.ms.md) | 🇳🇱 [Nederlands](README.nl.md) | 🇳🇴 [Norsk](README.no.md) | 🇵🇹 [Português (Portugal)](README.pt.md) | 🇷🇴 [Română](README.ro.md) | 🇵🇱 [Polski](README.pl.md) | 🇸🇰 [Slovenčina](README.sk.md) | 🇸🇪 [Svenska](README.sv.md) | 🇵🇭 [Filipino](README.phi.md)
120
-
121
- </div>
122
-
123
- ---
124
-
125
- ## 🖼️
126
-
127
- <div align="center">
128
- <img src="./docs/screenshots/MainOmniRoute.png" alt="OmniRoute" width="800"/>
129
- </div>
130
-
131
- ---
132
-
133
- ## 📸
134
-
135
- <details>
136
- <summary><b>...</b></summary>
137
-
138
- | # | # |
139
- | ----- | ---------------------------------------- |
140
- | **1** | ![1](docs/screenshots/01-providers.png) |
141
- | **2** | ![2](docs/screenshots/02-combos.png) |
142
- | **3** | ![3](docs/screenshots/03-analytics.png) |
143
- | **4** | ![4](docs/screenshots/04-health.png) |
144
- | **5** | ![5](docs/screenshots/05-translator.png) |
145
- | **6** | ![6](docs/screenshots/06-settings.png) |
146
- | **7** | ![7](docs/screenshots/07-cli-tools.png) |
147
- | **8** | ![8](docs/screenshots/08-usage.png) |
148
- | **9** | ![9](docs/screenshots/09-endpoint.png) |
149
-
150
- </details>
151
-
152
- ---
153
-
154
- ## 🤔 ¿Por qué OmniRoute?
155
-
156
- **Deja de desperdiciar dinero y chocar con límites:**
157
-
158
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> La cuota de suscripción expira sin usar cada mes
159
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Los límites de tasa te detienen en medio de la programación
160
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> APIs caras ($20-50/mes por proveedor)
161
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Cambiar manualmente entre proveedores
162
-
163
- **OmniRoute resuelve esto:**
164
-
165
- - ✅ **Maximiza suscripciones** - Rastrea cuotas, usa cada bit antes del reset
166
- - ✅ **Fallback automático** - Suscripción → API Key → Barato → Gratuito, cero tiempo de inactividad
167
- - ✅ **Multi-cuenta** - Round-robin entre cuentas por proveedor
168
- - ✅ **Universal** - Funciona con Claude Code, Codex, Gemini CLI, Cursor, Cline, OpenClaw, cualquier herramienta CLI
169
-
170
- ---
171
-
172
- ## 📧 Soporte
173
-
174
- > 💬 **¡Únete a la comunidad!** [Grupo WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Obtén ayuda, comparte consejos y mantente al día.
175
-
176
- - **Website**: [omniroute.online](https://omniroute.online)
177
- - **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute)
178
- - **Issues**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues)
179
- - **WhatsApp**: [Grupo de la Comunidad](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
180
- - **Proyecto Original**: [9router por decolua](https://github.com/decolua/9router)
181
-
182
- ---
183
-
184
- ## 🔄 Cómo Funciona
185
-
186
- ```
187
- ┌─────────────┐
188
- │ Tu CLI │ (Claude Code, Codex, Gemini CLI, OpenClaw, Cursor, Cline...)
189
- │ Tool │
190
- └──────┬──────┘
191
- │ http://localhost:20128/v1
192
-
193
- ┌─────────────────────────────────────────┐
194
- │ OmniRoute (Enrutador Inteligente) │
195
- │ • Traducción de formato (OpenAI ↔ Claude) │
196
- │ • Rastreo de cuota + Embeddings + Imágenes │
197
- │ • Renovación automática de tokens │
198
- └──────┬──────────────────────────────────┘
199
-
200
- ├─→ [Tier 1: SUSCRIPCIÓN] Claude Code, Codex, Gemini CLI
201
- │ ↓ cuota agotada
202
- ├─→ [Tier 2: API KEY] DeepSeek, Groq, xAI, Mistral, NVIDIA NIM, etc.
203
- │ ↓ límite de presupuesto
204
- ├─→ [Tier 3: BARATO] GLM ($0.6/1M), MiniMax ($0.2/1M)
205
- │ ↓ límite de presupuesto
206
- └─→ [Tier 4: GRATUITO] iFlow, Qwen, Kiro (ilimitado)
207
-
208
- Resultado: Nunca dejes de programar, costo mínimo
209
- ```
210
-
211
- ---
212
-
213
- ## 🎯 Lo que resuelve OmniRoute: 30 puntos débiles reales y casos de uso
214
-
215
- > **Todos los desarrolladores que utilizan herramientas de IA se enfrentan a estos problemas a diario.** OmniRoute se creó para resolverlos todos: desde sobrecostos hasta bloqueos regionales, desde flujos rotos de OAuth hasta operaciones de protocolo y observabilidad empresarial.
216
-
217
- <details>
218
- <summary><b>💸 1. "Pago una suscripción costosa pero aún así me interrumpen los límites"</b></summary>
219
-
220
- Los desarrolladores pagan entre 20 y 200 dólares al mes por Claude Pro, Codex Pro o GitHub Copilot. Incluso pagando, la cuota tiene un límite: 5 horas de uso, límites semanales o límites de tarifa por minuto. A mitad de la sesión de codificación, el proveedor deja de responder y el desarrollador pierde flujo y productividad.
221
-
222
- **Cómo lo resuelve OmniRoute:**
223
-
224
- - **Reserva inteligente de 4 niveles**: si se agota la cuota de suscripción, se redirige automáticamente a la clave API → Barato → Gratis sin intervención manual
225
- - **Seguimiento de cuotas en tiempo real**: muestra el consumo de tokens en tiempo real con cuenta regresiva de reinicio (5 h, diario, semanal)
226
- - **Soporte multicuenta**: varias cuentas por proveedor con rotación automática: cuando una se agota, cambia a la siguiente
227
- - **Combinaciones personalizadas**: cadenas de respaldo personalizables con 6 estrategias de equilibrio (completar primero, por turnos, P2C, aleatoria, menos utilizada, de costo optimizado)
228
- - **Cuotas comerciales de Codex**: monitoreo de cuotas del espacio de trabajo empresarial/de equipo directamente en el panel
229
-
230
- </details>
231
-
232
- <details>
233
- <summary><b>🔌 2. "Necesito usar varios proveedores pero cada uno tiene una API diferente"</b></summary>
234
-
235
- OpenAI usa un formato, Claude (Anthropic) usa otro, Gemini otro más. Si un desarrollador quiere probar modelos de diferentes proveedores o recurrir a ellos, debe reconfigurar los SDK, cambiar los puntos finales y lidiar con formatos incompatibles. Los proveedores personalizados (FriendLI, NIM) tienen puntos finales de modelo no estándar.
236
-
237
- **Cómo lo resuelve OmniRoute:**
238
-
239
- - **Punto final unificado**: un único `http://localhost:20128/v1` sirve como proxy para los más de 36 proveedores
240
- - **Traducción de formato**: automática y transparente: OpenAI ↔ Claude ↔ Gemini ↔ API de respuestas
241
- - **Desinfección de respuesta**: elimina los campos no estándar (`x_groq`, `usage_breakdown`, `service_tier`) que interrumpen OpenAI SDK v1.83+
242
- - **Normalización de roles**: convierte `developer` → `system` para proveedores que no son OpenAI; `system` → `user` para GLM/ERNIE
243
- - **Think Tag Extraction**: extrae bloques `<think>` de modelos como DeepSeek R1 en `reasoning_content` estandarizado.
244
- - **Salida estructurada para Gemini** — `json_schema` → `responseMimeType`/`responseSchema` conversión automática
245
- - **`stream` por defecto es `false`**: se alinea con las especificaciones de OpenAI, evitando SSE inesperado en los SDK de Python/Rust/Go
246
-
247
- </details>
248
-
249
- <details>
250
- <summary><b>🌐 3. "Mi proveedor de IA bloquea mi región/país"</b></summary>
251
-
252
- Proveedores como OpenAI/Codex bloquean el acceso desde ciertas regiones geográficas. Los usuarios obtienen errores como `unsupported_country_region_territory` durante las conexiones OAuth y API. Esto resulta especialmente frustrante para los desarrolladores de los países en desarrollo.
253
-
254
- **Cómo lo resuelve OmniRoute:**
255
-
256
- - **Configuración de proxy de 3 niveles**: Proxy configurable en 3 niveles: global (todo el tráfico), por proveedor (un solo proveedor) y por conexión/clave.
257
- - **Insignias de proxy codificadas por colores** — Indicadores visuales: 🟢 proxy global, 🟡 proxy de proveedor, 🔵 proxy de conexión, que siempre muestra la IP
258
- - **Intercambio de tokens de OAuth a través de proxy**: el flujo de OAuth también pasa a través del proxy, lo que resuelve `unsupported_country_region_territory`
259
- - **Pruebas de conexión a través de proxy**: las pruebas de conexión utilizan el proxy configurado (no más derivación directa)
260
- - **Soporte SOCKS5**: soporte completo de proxy SOCKS5 para enrutamiento saliente
261
- - **Suplantación de huellas dactilares TLS**: huella digital TLS similar a la de un navegador a través de `wreq-js` para evitar la detección de bots.
262
-
263
- </details>
264
-
265
- <details>
266
- <summary><b>🆓 4. "Quiero usar IA para codificar pero no tengo dinero"</b></summary>
267
-
268
- No todo el mundo puede pagar entre 20 y 200 dólares al mes por suscripciones a IA. Los estudiantes, desarrolladores de países emergentes, aficionados y autónomos necesitan acceso a modelos de calidad sin costo alguno.
269
-
270
- **Cómo lo resuelve OmniRoute:**
271
-
272
- - **Proveedores de nivel gratuito integrados**: soporte nativo para proveedores 100% gratuitos: iFlow (8 modelos ilimitados), Qwen (3 modelos ilimitados), Kiro (Claude gratis), Gemini CLI (180K/mes gratis)
273
- - **Ollama Cloud** — Cloud-hosted Ollama models at `api.ollama.com` with free "Light usage" tier; use `ollamacloud/<model>` prefix
274
- - **Combos solo gratuitos**: cadena `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/mes sin tiempo de inactividad
275
- - **Créditos gratuitos NVIDIA NIM**: 1000 créditos gratuitos integrados
276
- - **Estrategia de optimización de costos**: estrategia de enrutamiento que elige automáticamente el proveedor más barato disponible
277
-
278
- </details>
279
-
280
- <details>
281
- <summary><b>🔒 5. "Necesito proteger mi puerta de enlace AI del acceso no autorizado"</b></summary>
282
-
283
- Al exponer una puerta de enlace de IA a la red (LAN, VPS, Docker), cualquiera con la dirección puede consumir los tokens/cuota del desarrollador. Sin protección, las API son vulnerables al mal uso, la inyección rápida y el abuso.
284
-
285
- **Cómo lo resuelve OmniRoute:**
286
-
287
- - **Administración de claves API**: generación, rotación y alcance por proveedor con una página `/dashboard/api-manager` dedicada
288
- - **Permisos a nivel de modelo**: restrinja las claves API a modelos específicos (`openai/*`, patrones comodín), con la opción Permitir todo/Restringir
289
- - **API Endpoint Protection**: requiere una clave para `/v1/models` y bloquea proveedores específicos del listado
290
- - **Auth Guard + Protección CSRF**: todas las rutas del panel protegidas con middleware `withAuth` + tokens CSRF
291
- - **Limitador de velocidad**: limitación de velocidad por IP con ventanas configurables
292
- - **Filtrado de IP**: lista permitida/lista bloqueada para control de acceso
293
- - **Prompt injection guard**: desinfección contra patrones de avisos maliciosos
294
- - **Cifrado AES-256-GCM**: credenciales cifradas en reposo
295
-
296
- </details>
297
-
298
- <details>
299
- <summary><b>🛑 6. "Mi proveedor dejó de funcionar y perdí mi flujo de codificación"</b></summary>
300
-
301
- Los proveedores de IA pueden volverse inestables, devolver errores 5xx o alcanzar límites de velocidad temporales. Si un desarrollador depende de un solo proveedor, se le interrumpe. Sin disyuntores, los reintentos repetidos pueden bloquear la aplicación.
302
-
303
- **Cómo lo resuelve OmniRoute:**
304
-
305
- - **Disyuntor por proveedor**: apertura/cierre automático con umbrales configurables y enfriamiento (cerrado/abierto/medio abierto)
306
- - **Retroceso exponencial**: retrasos progresivos en los reintentos
307
- - **Anti-Thundering Herd** — Mutex + protección de semáforo contra tormentas de reintentos simultáneos
308
- - **Cadenas alternativas combinadas**: si el proveedor principal falla, automáticamente pasa por la cadena sin intervención.
309
- - **Disyuntor combinado**: desactiva automáticamente los proveedores defectuosos dentro de una cadena combinada
310
- - **Panel de estado**: monitoreo del tiempo de actividad, estados de disyuntores, bloqueos, estadísticas de caché, latencia p50/p95/p99
311
-
312
- </details>
313
-
314
- <details>
315
- <summary><b>🔧 7. "Configurar cada herramienta de IA es tedioso y repetitivo"</b></summary>
316
-
317
- Los desarrolladores utilizan Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Cada herramienta necesita una configuración diferente (punto final API, clave, modelo). Reconfigurar al cambiar de proveedor o modelo es una pérdida de tiempo.
318
-
319
- **Cómo lo resuelve OmniRoute:**
320
-
321
- - **Panel de herramientas CLI**: página dedicada con configuración con un solo clic para Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline
322
- - **Generador de configuración de GitHub Copilot**: genera `chatLanguageModels.json` para código VS con selección de modelo masivo
323
- - **Asistente de incorporación**: configuración guiada de 4 pasos para usuarios nuevos
324
- - **Un punto final, todos los modelos**: configure `http://localhost:20128/v1` una vez, acceda a más de 36 proveedores
325
-
326
- </details>
327
-
328
- <details>
329
- <summary><b>🔑 8. "Administrar tokens OAuth de múltiples proveedores es un infierno"</b></summary>
330
-
331
- Claude Code, Codex, Gemini CLI, Copilot: todos usan OAuth 2.0 con tokens que caducan. Los desarrolladores necesitan volver a autenticarse constantemente, lidiar con `client_secret is missing`, `redirect_uri_mismatch` y fallas en servidores remotos. OAuth en LAN/VPS es particularmente problemático.
332
-
333
- **Cómo lo resuelve OmniRoute:**
334
-
335
- - **Actualización automática de tokens**: los tokens de OAuth se actualizan en segundo plano antes de que caduquen
336
- - **OAuth 2.0 (PKCE) integrado**: flujo automático para Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow
337
- - **OAuth multicuenta**: varias cuentas por proveedor mediante extracción de token JWT/ID
338
- - **OAuth LAN/Remote Fix** — Detección de IP privada para `redirect_uri` + modo URL manual para servidores remotos
339
- - **OAuth detrás de Nginx**: utiliza `window.location.origin` para compatibilidad con proxy inverso
340
- - **Guía remota de OAuth**: guía paso a paso para las credenciales de Google Cloud en VPS/Docker
341
-
342
- </details>
343
-
344
- <details>
345
- <summary><b>📊 9. "No sé cuánto estoy gastando ni dónde"</b></summary>
346
-
347
- Los desarrolladores utilizan múltiples proveedores pagos pero no tienen una visión unificada del gasto. Cada proveedor tiene su propio panel de facturación, pero no hay una vista consolidada. Los costos inesperados pueden acumularse.
348
-
349
- **Cómo lo resuelve OmniRoute:**
350
-
351
- - **Panel de análisis de costos**: seguimiento de costos por token y gestión de presupuesto por proveedor
352
- - **Límites de presupuesto por nivel**: límite de gasto por nivel que activa el respaldo automático
353
- - **Configuración de precios por modelo**: precios configurables por modelo
354
- - **Estadísticas de uso por clave API**: recuento de solicitudes y marca de tiempo utilizada por última vez por clave
355
- - **Panel de análisis**: tarjetas de estadísticas, tabla de uso de modelos, tabla de proveedores con tasas de éxito y latencia.
356
-
357
- </details>
358
-
359
- <details>
360
- <summary><b>🐛 10. "No puedo diagnosticar errores y problemas en llamadas AI"</b></summary>
361
-
362
- Cuando falla una llamada, el desarrollador no sabe si se trata de un límite de velocidad, un token caducado, un formato incorrecto o un error del proveedor. Registros fragmentados en diferentes terminales. Sin observabilidad, la depuración es de prueba y error.
363
-
364
- **Cómo lo resuelve OmniRoute:**
365
-
366
- - **Panel de registros unificados**: 4 pestañas: registros de solicitudes, registros de proxy, registros de auditoría y consola
367
- - **Visor de registros de consola**: visor estilo terminal en tiempo real con niveles codificados por colores, desplazamiento automático, búsqueda y filtro
368
- - **Registros de proxy SQLite**: registros persistentes que sobreviven a los reinicios del servidor
369
- - **Translator Playground**: 4 modos de depuración: Playground (traducción de formato), Chat Tester (ida y vuelta), Test Bench (por lotes), Live Monitor (en tiempo real)
370
- - **Solicitud de telemetría**: latencia p50/p95/p99 + seguimiento de X-Request-Id
371
- - **Registro basado en archivos con rotación**: el interceptor de consola captura todo en el registro JSON con rotación basada en el tamaño.
372
-
373
- </details>
374
-
375
- <details>
376
- <summary><b>🏗️ 11. "Implementar y mantener la puerta de enlace es complejo"</b></summary>
377
-
378
- Instalar, configurar y mantener un proxy de IA en diferentes entornos (local, VPS, Docker, nube) requiere mucha mano de obra. Problemas como rutas codificadas, `EACCES` en directorios, conflictos de puertos y compilaciones multiplataforma añaden fricción.
379
-
380
- **Cómo lo resuelve OmniRoute:**
381
-
382
- - **instalación global de npm** — `npm install -g omniroute && omniroute` — hecho
383
- - **Docker multiplataforma**: AMD64 + ARM64 nativo (Apple Silicon, AWS Graviton, Raspberry Pi)
384
- - **Perfiles de Docker Compose**: `base` (sin herramientas CLI) y `cli` (con Claude Code, Codex, OpenClaw)
385
- - **Aplicación de escritorio Electron**: aplicación nativa para Windows/macOS/Linux con bandeja del sistema, inicio automático y modo sin conexión
386
- - **Modo de puerto dividido**: API y panel en puertos separados para escenarios avanzados (proxy inverso, redes de contenedores)
387
- - **Cloud Sync**: sincronización de configuración entre dispositivos a través de Cloudflare Workers
388
- - **Copias de seguridad de base de datos**: copia de seguridad, restauración, exportación e importación automáticas de todas las configuraciones
389
-
390
- </details>
391
-
392
- <details>
393
- <summary><b>🌍 12. "La interfaz es solo en inglés y mi equipo no habla inglés"</b></summary>
394
-
395
- Los equipos en países que no hablan inglés, especialmente en América Latina, Asia y Europa, tienen dificultades con las interfaces solo en inglés. Las barreras del idioma reducen la adopción y aumentan los errores de configuración.
396
-
397
- **Cómo lo resuelve OmniRoute:**
398
-
399
- - **Panel i18n — 30 idiomas** — Las más de 500 teclas traducidas, incluidas árabe, búlgaro, danés, alemán, español, finlandés, francés, hebreo, hindi, húngaro, indonesio, italiano, japonés, coreano, malayo, holandés, noruego, polaco, portugués (PT/BR), rumano, ruso, eslovaco, sueco, tailandés, ucraniano, vietnamita, chino, filipino, inglés.
400
- - **Soporte RTL**: soporte de derecha a izquierda para árabe y hebreo
401
- - **README multilingüe**: 30 traducciones de documentación completa
402
- - **Selector de idioma**: ícono de globo en el encabezado para cambiar en tiempo real
403
-
404
- </details>
405
-
406
- <details>
407
- <summary><b>🔄 13. "Necesito más que chat: necesito incrustaciones, imágenes y audio"</b></summary>
408
-
409
- La IA no es solo completar un chat. Los desarrolladores necesitan generar imágenes, transcribir audio, crear incrustaciones para RAG, reclasificar documentos y moderar contenido. Cada API tiene un punto final y un formato diferentes.
410
-
411
- **Cómo lo resuelve OmniRoute:**
412
-
413
- - **Integraciones** — `/v1/embeddings` con 6 proveedores y más de 9 modelos
414
- - **Generación de imágenes** — `/v1/images/generations` con 10 proveedores y más de 20 modelos (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI)
415
- - **Texto a vídeo** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) y SD WebUI
416
- - **Texto a música** — `/v1/music/generations` — ComfyUI (audio estable abierto, MusicGen)
417
- - **Transcripción de audio** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3
418
- - **Texto a voz** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, Inworld, Cartesia, PlayHT y proveedores existentes
419
- - **Moderaciones** — `/v1/moderations` — Comprobaciones de seguridad del contenido
420
- - **Reclasificación** — `/v1/rerank` — Reclasificación de relevancia del documento
421
- - **API de respuestas**: compatibilidad total con `/v1/responses` para Codex
422
-
423
- </details>
424
-
425
- <details>
426
- <summary><b>🧪 14. "No tengo forma de probar y comparar la calidad entre modelos"</b></summary>
427
-
428
- Los desarrolladores quieren saber qué modelo es mejor para su caso de uso (código, traducción, razonamiento), pero comparar manualmente es lento. No existen herramientas de evaluación integradas.
429
-
430
- **Cómo lo resuelve OmniRoute:**
431
-
432
- - **Evaluaciones LLM**: pruebas de conjunto dorado con 10 casos precargados que cubren saludos, matemáticas, geografía, generación de código, cumplimiento de JSON, traducción, rebajas y rechazo de seguridad.
433
- - **4 estrategias de coincidencia**: `exact`, `contains`, `regex`, `custom` (función JS)
434
- - **Translator Playground Test Bench**: pruebas por lotes con múltiples entradas y resultados esperados, comparación entre proveedores
435
- - **Chat Tester**: recorrido completo de ida y vuelta con representación de respuesta visual
436
- - **Live Monitor**: flujo en tiempo real de todas las solicitudes que fluyen a través del proxy
437
-
438
- </details>
439
-
440
- <details>
441
- <summary><b>📈 15. "Necesito escalar sin perder rendimiento"</b></summary>
442
-
443
- A medida que crece el volumen de solicitudes, sin almacenar en caché las mismas preguntas generan costos duplicados. Sin idempotencia, las solicitudes duplicadas desperdician el procesamiento. Se deben respetar los límites de tarifas por proveedor.
444
-
445
- **Cómo lo resuelve OmniRoute:**
446
-
447
- - **Caché semántica**: la caché de dos niveles (firma + semántica) reduce el costo y la latencia
448
- - **Solicitud de idempotencia**: ventana de deduplicación de 5 segundos para solicitudes idénticas
449
- - **Detección de límite de velocidad**: RPM por proveedor, intervalo mínimo y seguimiento simultáneo máximo
450
- - **Límites de velocidad editables**: valores predeterminados configurables en Configuración → Resiliencia con persistencia
451
- - **Caché de validación de clave API**: caché de 3 niveles para rendimiento de producción
452
- - **Panel de estado con telemetría**: latencia p50/p95/p99, estadísticas de caché, tiempo de actividad
453
-
454
- </details>
455
-
456
- <details>
457
- <summary><b>🤖 16. "Quiero controlar el comportamiento del modelo globalmente"</b></summary>
458
-
459
- Desarrolladores que quieran todas las respuestas en un idioma específico, con un tono específico o quieran limitar los tokens de razonamiento. Configurar esto en cada herramienta/solicitud no es práctico.
460
-
461
- **Cómo lo resuelve OmniRoute:**
462
-
463
- - **Inyección de aviso del sistema**: aviso global aplicado a todas las solicitudes
464
- - **Thinking Budget Validation**: control de asignación de tokens de razonamiento por solicitud (transferencia, automática, personalizada, adaptativa)
465
- - **6 estrategias de enrutamiento**: estrategias globales que determinan cómo se distribuyen las solicitudes
466
- - **Enrutador comodín**: los patrones `provider/*` se enrutan dinámicamente a cualquier proveedor
467
- - **Activar/desactivar combinación de alternar**: alterna combinaciones directamente desde el panel
468
- - **Alternar proveedor**: activa/desactiva todas las conexiones de un proveedor con un solo clic
469
- - **Proveedores bloqueados**: excluye proveedores específicos del listado `/v1/models`
470
-
471
- </details>
472
-
473
- <details>
474
- <summary><b>🧰 17. "Necesito herramientas MCP como capacidades de producto de primera clase"</b></summary>
475
-
476
- Muchas puertas de enlace de IA exponen MCP solo como un detalle de implementación oculto. Los equipos necesitan una capa operativa visible y manejable.
477
-
478
- **Cómo lo resuelve OmniRoute:**
479
-
480
- - MCP aparece en la pestaña de navegación del panel y protocolo de punto final
481
- - Página de gestión de MCP dedicada con procesos, herramientas, alcances y auditoría
482
- - Inicio rápido integrado para `omniroute --mcp` e incorporación de clientes
483
-
484
- </details>
485
-
486
- <details>
487
- <summary><b>🧠 18. "Necesito orquestación A2A con rutas de tareas de sincronización + transmisión"</b></summary>
488
-
489
- Los flujos de trabajo de los agentes necesitan respuestas directas y una ejecución continua de larga duración con control del ciclo de vida.
490
-
491
- **Cómo lo resuelve OmniRoute:**
492
-
493
- - Punto final A2A JSON-RPC (`POST /a2a`) con `message/send` y `message/stream`
494
- - Transmisión SSE con propagación del estado terminal
495
- - API de ciclo de vida de tareas para `tasks/get` y `tasks/cancel`
496
-
497
- </details>
498
-
499
- <details>
500
- <summary><b>🛰️ 19. "Necesito un estado real del proceso MCP, no un estado adivinado"</b></summary>
501
-
502
- Los equipos operativos necesitan saber si MCP está realmente activo, no solo si se puede acceder a una API.
503
-
504
- **Cómo lo resuelve OmniRoute:**
505
-
506
- - Archivo de latidos en tiempo de ejecución con PID, marcas de tiempo, transporte, recuento de herramientas y modo de alcance
507
- - API de estado de MCP que combina latidos + actividad reciente
508
- - Tarjetas de estado de la interfaz de usuario para el proceso/tiempo de actividad/actualización de latidos
509
-
510
- </details>
511
-
512
- <details>
513
- <summary><b>📋 20. "Necesito ejecución de herramienta MCP auditable"</b></summary>
514
-
515
- Cuando las herramientas modifican la configuración o desencadenan acciones de operaciones, los equipos necesitan trazabilidad forense.
516
-
517
- **Cómo lo resuelve OmniRoute:**
518
-
519
- - Registro de auditoría respaldado por SQLite para llamadas a herramientas MCP
520
- - Filtros por herramienta, éxito/fracaso, clave API y paginación
521
- - Tabla de auditoría del panel + puntos finales de estadísticas para automatización
522
-
523
- </details>
524
-
525
- <details>
526
- <summary><b>🔐 21. "Necesito permisos MCP con alcance por integración"</b></summary>
527
-
528
- Los diferentes clientes deberían tener acceso con privilegios mínimos a las categorías de herramientas.
529
-
530
- **Cómo lo resuelve OmniRoute:**
531
-
532
- - 9 alcances MCP granulares para acceso controlado a herramientas
533
- - Aplicación del alcance y visibilidad en la interfaz de usuario de gestión de MCP
534
- - Postura predeterminada segura para herramientas operativas
535
-
536
- </details>
537
-
538
- <details>
539
- <summary><b>⚙️ 22. "Necesito controles operativos sin redistribuir"</b></summary>
540
-
541
- Los equipos necesitan cambios rápidos en el tiempo de ejecución durante incidentes o eventos de costos.
542
-
543
- **Cómo lo resuelve OmniRoute:**
544
-
545
- - Cambie la activación combinada directamente desde el panel de MCP
546
- - Aplicar perfiles de resiliencia de paquetes de políticas predefinidos
547
- - Restablecer el estado del disyuntor desde el mismo panel de operaciones.
548
-
549
- </details>
550
-
551
- <details>
552
- <summary><b>🔄 23. "Necesito visibilidad y cancelación del ciclo de vida de la tarea A2A en vivo"</b></summary>
553
-
554
- Sin visibilidad del ciclo de vida, los incidentes de tareas se vuelven difíciles de clasificar.
555
-
556
- **Cómo lo resuelve OmniRoute:**
557
-
558
- - Listado de tareas/filtrado por estado/habilidad con paginación
559
- - Profundización en metadatos, eventos y artefactos de tareas
560
- - Punto final de cancelación de tarea y acción de UI con confirmación
561
-
562
- </details>
563
-
564
- <details>
565
- <summary><b>🌊 24. "Necesito métricas de transmisión activas para la carga A2A"</b></summary>
566
-
567
- Los flujos de trabajo de streaming requieren información operativa sobre la simultaneidad y las conexiones en vivo.
568
-
569
- **Cómo lo resuelve OmniRoute:**
570
-
571
- - Contadores de flujo activos integrados en el estado A2A
572
- - Marca de tiempo de la última tarea y recuentos por estado
573
- - Tarjetas de tablero A2A para monitoreo de operaciones en tiempo real
574
-
575
- </details>
576
-
577
- <details>
578
- <summary><b>🪪 25. "Necesito descubrimiento de agente estándar para clientes"</b></summary>
579
-
580
- Los clientes y orquestadores externos necesitan metadatos legibles por máquina para la incorporación.
581
-
582
- **Cómo lo resuelve OmniRoute:**
583
-
584
- - Tarjeta de agente expuesta en `/.well-known/agent.json`
585
- - Capacidades y habilidades mostradas en la interfaz de usuario de gestión.
586
- - La API de estado A2A incluye metadatos de descubrimiento para la automatización
587
-
588
- </details>
589
-
590
- <details>
591
- <summary><b>🧭 26. "Necesito capacidad de descubrimiento de protocolo en la UX del producto"</b></summary>
592
-
593
- Si los usuarios no pueden descubrir las superficies de protocolo, la calidad de la adopción y el soporte disminuye.
594
-
595
- **Cómo lo resuelve OmniRoute:**
596
-
597
- - Entradas de la barra lateral para MCP y A2A
598
- - Pestaña Protocolos de la página del endpoint con inicio rápido y estado
599
- - Enlaces desde la descripción general a paneles de gestión dedicados
600
-
601
- </details>
602
-
603
- <details>
604
- <summary><b>🧪 27. "Necesito validación de protocolo de extremo a extremo con clientes reales"</b></summary>
605
-
606
- Las pruebas simuladas no son suficientes para validar la compatibilidad del protocolo antes del lanzamiento.
607
-
608
- **Cómo lo resuelve OmniRoute:**
609
-
610
- - Suite E2E que inicia la aplicación y utiliza transporte de cliente MCP SDK real
611
- - Pruebas de cliente A2A para descubrimiento, envío, transmisión, obtención y cancelación de flujos
612
- - Verificar las afirmaciones con las API de auditoría MCP y tareas A2A.
613
-
614
- </details>
615
-
616
- <details>
617
- <summary><b>📡 28. "Necesito observabilidad unificada en todas las interfaces"</b></summary>
618
-
619
- Dividir la observabilidad por protocolo crea puntos ciegos y MTTR más largos.
620
-
621
- **Cómo lo resuelve OmniRoute:**
622
-
623
- - Paneles/registros/análisis unificados en un solo producto
624
- - Salud + auditoría + solicitud de telemetría en capas OpenAI, MCP y A2A
625
- - API operativas para estado y automatización.
626
-
627
- </details>
628
-
629
- <details>
630
- <summary><b>💼 29. "Necesito un tiempo de ejecución para proxy + herramientas + orquestación de agentes"</b></summary>
631
-
632
- La ejecución de muchos servicios separados aumenta los costos operativos y los modos de falla.
633
-
634
- **Cómo lo resuelve OmniRoute:**
635
-
636
- - Proxy compatible con OpenAI, servidor MCP y servidor A2A en una sola pila
637
- - Autenticación compartida, resiliencia, almacenamiento de datos y observabilidad.
638
- - Modelo de política consistente en todas las superficies de interacción.
639
-
640
- </details>
641
-
642
- <details>
643
- <summary><b>🚀 30. "Necesito enviar flujos de trabajo agentes sin expansión de código adhesivo"</b></summary>
644
-
645
- Los equipos pierden velocidad al unir múltiples scripts y servicios ad hoc.
646
-
647
- **Cómo lo resuelve OmniRoute:**
648
-
649
- - Estrategia de endpoint unificada para clientes y agentes
650
- - UI de gestión de protocolos integradas y rutas de validación de humo
651
- - Fundamentos listos para producción (seguridad, registro, resiliencia, respaldo)
652
-
653
- </details>
654
-
655
- ### Guías de ejemplo (casos de uso integrados)
656
-
657
- **Libro de estrategias A: maximizar la suscripción paga + copia de seguridad económica**
658
-
659
- ```txt
660
- Combo: "maximize-claude"
661
- 1. cc/claude-opus-4-6
662
- 2. glm/glm-4.7
663
- 3. if/kimi-k2-thinking
664
-
665
- Monthly cost: $20 + small backup spend
666
- Outcome: higher quality, near-zero interruption
667
- ```
668
-
669
- **Libro de estrategias B: pila de codificación de costo cero**
670
-
671
- ```txt
672
- Combo: "free-forever"
673
- 1. gc/gemini-3-flash
674
- 2. if/kimi-k2-thinking
675
- 3. qw/qwen3-coder-plus
676
-
677
- Monthly cost: $0
678
- Outcome: stable free coding workflow
679
- ```
680
-
681
- **Libro de estrategias C: cadena alternativa siempre disponible las 24 horas del día, los 7 días de la semana**
682
-
683
- ```txt
684
- Combo: "always-on"
685
- 1. cc/claude-opus-4-6
686
- 2. cx/gpt-5.2-codex
687
- 3. glm/glm-4.7
688
- 4. minimax/MiniMax-M2.1
689
- 5. if/kimi-k2-thinking
690
-
691
- Outcome: deep fallback depth for deadline-critical workloads
692
- ```
693
-
694
- **Libro de jugadas D: Operaciones del agente con MCP + A2A**
695
-
696
- ```txt
697
- 1) Start MCP transport (`omniroute --mcp`) for tool-driven operations
698
- 2) Run A2A tasks via `message/send` and `message/stream`
699
- 3) Observe via /dashboard/mcp and /dashboard/a2a
700
- 4) Control incidents with resilience profile + task cancellation
701
- ```
702
-
703
- ---
704
-
705
- ## ⚡ Inicio Rápido
706
-
707
- **1. Instala globalmente:**
708
-
709
- ```bash
710
- npm install -g omniroute
711
- omniroute
712
- ```
713
-
714
- 🎉 El Dashboard se abre en `http://localhost:20128`
715
-
716
- | Comando | Descripción |
717
- | ----------------------- | ---------------------------------------------- |
718
- | `omniroute` | Iniciar servidor (puerto predeterminado 20128) |
719
- | `omniroute --port 3000` | Usar puerto personalizado |
720
- | `omniroute --no-open` | No abrir navegador automáticamente |
721
- | `omniroute --help` | Mostrar ayuda |
722
-
723
- **2. Conecta un proveedor GRATUITO:**
724
-
725
- Dashboard → Proveedores → Conectar **Claude Code** o **Antigravity** → Login OAuth → ¡Listo!
726
-
727
- **3. Usa en tu herramienta CLI:**
728
-
729
- ```
730
- Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline Configuración:
731
- Endpoint: http://localhost:20128/v1
732
- API Key: [copiar del dashboard]
733
- Model: if/kimi-k2-thinking
734
- ```
735
-
736
- **¡Eso es todo!** Comienza a programar con modelos de IA GRATUITOS.
737
-
738
- **Alternativa — ejecutar desde código fuente:**
739
-
740
- ```bash
741
- cp .env.example .env
742
- npm install
743
- PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
744
- ```
745
-
746
- ---
747
-
748
- ## 🐳 Docker
749
-
750
- OmniRoute está disponible como imagen Docker pública en [Docker Hub](https://hub.docker.com/r/diegosouzapw/omniroute).
751
-
752
- **Ejecución rápida:**
753
-
754
- ```bash
755
- docker run -d \
756
- --name omniroute \
757
- --restart unless-stopped \
758
- -p 20128:20128 \
759
- -v omniroute-data:/app/data \
760
- diegosouzapw/omniroute:latest
761
- ```
762
-
763
- **Con archivo de entorno:**
764
-
765
- ```bash
766
- # Copia y edita el .env primero
767
- cp .env.example .env
768
-
769
- docker run -d \
770
- --name omniroute \
771
- --restart unless-stopped \
772
- --env-file .env \
773
- -p 20128:20128 \
774
- -v omniroute-data:/app/data \
775
- diegosouzapw/omniroute:latest
776
- ```
777
-
778
- **Usando Docker Compose:**
779
-
780
- ```bash
781
- # Perfil base (sin herramientas CLI)
782
- docker compose --profile base up -d
783
-
784
- # Perfil CLI (Claude Code, Codex, OpenClaw integrados)
785
- docker compose --profile cli up -d
786
- ```
787
-
788
- | Imagen | Tag | Tamaño | Descripción |
789
- | ------------------------ | -------- | ------ | ---------------------- |
790
- | `diegosouzapw/omniroute` | `latest` | ~250MB | Última versión estable |
791
- | `diegosouzapw/omniroute` | `1.0.6` | ~250MB | Versión actual |
792
-
793
- ---
794
-
795
- ---
796
-
797
- ## 🖥️
798
-
799
- > 🆕 **¡NUEVO!** OmniRoute ahora está disponible como **aplicación de escritorio nativa** para Windows, macOS y Linux.
800
-
801
- Ejecuta OmniRoute como una aplicación de escritorio autónoma — sin terminal, sin navegador, sin internet necesario para modelos locales. La app basada en Electron incluye:
802
-
803
- - 🖥️ **Ventana Nativa** — Ventana dedicada con integración en la bandeja del sistema
804
- - 🔄 **Inicio Automático** — Inicia OmniRoute al iniciar sesión
805
- - 🔔 **Notificaciones Nativas** — Recibe alertas sobre cuota o problemas de proveedores
806
- - ⚡ **Instalación con Un Clic** — NSIS (Windows), DMG (macOS), AppImage (Linux)
807
- - 🌐 **Modo Sin Conexión** — Funciona completamente offline con servidor incluido
808
-
809
- ### Inicio Rápido
810
-
811
- ```bash
812
- npm run electron:dev # Modo desarrollo
813
- npm run electron:build # Plataforma actual
814
- npm run electron:build:win # Windows (.exe)
815
- npm run electron:build:mac # macOS (.dmg)
816
- npm run electron:build:linux # Linux (.AppImage)
817
- ```
818
-
819
- 📖 Documentación completa: [`electron/README.md`](electron/README.md)
820
-
821
- ---
822
-
823
- ## 💰 Precios Resumidos
824
-
825
- | Tier | Proveedor | Costo | Reset de Cuota | Mejor Para |
826
- | ------------------ | ----------------- | ---------------------------- | ----------------- | ----------------------- |
827
- | **💳 SUSCRIPCIÓN** | Claude Code (Pro) | $20/mes | 5h + semanal | Ya suscrito |
828
- | | Codex (Plus/Pro) | $20-200/mes | 5h + semanal | Usuarios OpenAI |
829
- | | Gemini CLI | **GRATUITO** | 180K/mes + 1K/día | ¡Todos! |
830
- | | GitHub Copilot | $10-19/mes | Mensual | Usuarios GitHub |
831
- | **🔑 API KEY** | NVIDIA NIM | **GRATUITO** (1000 créditos) | Único | Pruebas gratuitas |
832
- | | DeepSeek | Por uso | Ninguno | Mejor precio/calidad |
833
- | | Groq | Tier gratuito + pago | Limitado | Inferencia ultra-rápida |
834
- | | xAI (Grok) | Por uso | Ninguno | Modelos Grok |
835
- | | Mistral | Tier gratuito + pago | Limitado | IA Europea |
836
- | | OpenRouter | Por uso | Ninguno | 100+ modelos |
837
- | **💰 BARATO** | GLM-4.7 | $0.6/1M | Diario 10h | Respaldo económico |
838
- | | MiniMax M2.1 | $0.2/1M | Rotativo 5h | Opción más barata |
839
- | | Kimi K2 | $9/mes fijo | 10M tokens/mes | Costo predecible |
840
- | **🆓 GRATUITO** | iFlow | $0 | Ilimitado | 8 modelos gratuitos |
841
- | | Qwen | $0 | Ilimitado | 3 modelos gratuitos |
842
- | | Kiro | $0 | Ilimitado | Claude gratuito |
843
-
844
- **💡 Consejo Pro:** ¡Comienza con Gemini CLI (180K gratis/mes) + iFlow (ilimitado gratis) = $0 de costo!
845
-
846
- ---
847
-
848
- ## 💡 Características Principales
849
-
850
- ### 🧠 Enrutamiento e Inteligencia
851
-
852
- | Característica | Qué Hace |
853
- | -------------------------------------- | ------------------------------------------------------------------------------- |
854
- | 🎯 **Fallback Inteligente 4 Tiers** | Auto-enrutamiento: Suscripción → API Key → Barato → Gratuito |
855
- | 📊 **Rastreo de Cuota en Tiempo Real** | Conteo de tokens en vivo + countdown de reset por proveedor |
856
- | 🔄 **Traducción de Formato** | OpenAI ↔ Claude ↔ Gemini ↔ Cursor ↔ Kiro transparente |
857
- | 👥 **Soporte Multi-Cuenta** | Múltiples cuentas por proveedor con selección inteligente |
858
- | 🔄 **Renovación Automática de Token** | Tokens OAuth se renuevan automáticamente con reintentos |
859
- | 🎨 **Combos Personalizados** | 6 estrategias: fill-first, round-robin, p2c, random, least-used, cost-optimized |
860
- | 🧩 **Modelos Personalizados** | Agrega cualquier ID de modelo a cualquier proveedor |
861
- | 🌐 **Enrutador Wildcard** | Enruta patrones `provider/*` a cualquier proveedor dinámicamente |
862
- | 🧠 **Presupuesto de Razonamiento** | Modos passthrough, auto, custom y adaptativo para modelos de razonamiento |
863
- | 🔀 **Model Aliases** | Auto-forward deprecated model IDs to current replacements (built-in + custom) |
864
- | ⚡ **Background Degradation** | Auto-route background tasks (titles, summaries) to cheaper models |
865
- | 💬 **Inyección de System Prompt** | System prompt global aplicado en todas las solicitudes |
866
- | 📄 **API Responses** | Soporte completo de la API Responses de OpenAI (`/v1/responses`) para Codex |
867
-
868
- ### 🎵 APIs Multi-Modal
869
-
870
- | Característica | Qué Hace |
871
- | ----------------------------- | ------------------------------------------------------ |
872
- | 🖼️ **Generación de Imágenes** | `/v1/images/generations` — 4 proveedores, 9+ modelos |
873
- | 📐 **Embeddings** | `/v1/embeddings` — 6 proveedores, 9+ modelos |
874
- | 🎤 **Transcripción de Audio** | `/v1/audio/transcriptions` — Compatible con Whisper |
875
- | 🔊 **Texto a Voz** | `/v1/audio/speech` — Síntesis de audio multi-proveedor |
876
- | 🛡️ **Moderaciones** | `/v1/moderations` — Verificaciones de seguridad |
877
- | 🔀 **Reranking** | `/v1/rerank` — Reranking de relevancia de documentos |
878
-
879
- ### 🛡️ Resiliencia y Seguridad
880
-
881
- | Característica | Qué Hace |
882
- | ---------------------------------- | ---------------------------------------------------------------------------- |
883
- | 🔌 **Circuit Breaker** | Auto-apertura/cierre por proveedor con umbrales configurables |
884
- | 🎯 **Endpoint-Aware Models** | Custom models declare supported endpoints + API format |
885
- | 🛡️ **Anti-Thundering Herd** | Mutex + semáforo rate-limit para proveedores con API key |
886
- | 🧠 **Caché Semántico** | Caché de dos niveles (firma + semántico) reduce costo y latencia |
887
- | ⚡ **Idempotencia de Solicitud** | Ventana de dedup de 5s para solicitudes duplicadas |
888
- | 🔒 **Spoofing de Fingerprint TLS** | Bypass de detección de bot vía TLS con wreq-js |
889
- | 🌐 **Filtrado de IP** | Allowlist/blocklist para control de acceso a la API |
890
- | 📊 **Rate Limits Editables** | RPM, gap mínimo y concurrencia máxima configurables |
891
- | 💾 **Rate Limit Persistence** | Learned limits survive restarts via SQLite with 60s debounce + 24h staleness |
892
- | 🔄 **Token Refresh Resilience** | Per-provider circuit breaker (5 fails→30min) + 30s timeout per attempt |
893
-
894
- ### 📊 Observabilidad y Analytics
895
-
896
- | Característica | Qué Hace |
897
- | ------------------------------ | --------------------------------------------------------------------- |
898
- | 📝 **Logs de Solicitud** | Modo debug con logs completos de request/response |
899
- | 💾 **Logs SQLite** | Logs de proxy persistentes sobreviven a reinicios |
900
- | 📊 **Dashboard de Analytics** | Recharts: cards de estadísticas, gráfico de uso, tabla de proveedores |
901
- | 📈 **Rastreo de Progreso** | Eventos de progreso SSE opt-in para streaming |
902
- | 🧪 **Evaluaciones de LLM** | Pruebas con conjunto golden y 4 estrategias de match |
903
- | 🔍 **Telemetría de Solicitud** | Agregación de latencia p50/p95/p99 + rastreo X-Request-Id |
904
- | 📋 **Logs + Cuotas** | Páginas dedicadas para navegación de logs y rastreo de cuotas |
905
- | 🏥 **Dashboard de Salud** | Uptime, estados de circuit breaker, lockouts, stats de caché |
906
- | 💰 **Rastreo de Costos** | Gestión de presupuesto + configuración de precios por modelo |
907
-
908
- ### ☁️ Deploy y Sincronización
909
-
910
- | Característica | Qué Hace |
911
- | --------------------------------- | ------------------------------------------------------------------------------- |
912
- | 💾 **Cloud Sync** | Sincroniza configuraciones entre dispositivos vía Cloudflare Workers |
913
- | 🌐 **Deploy en Cualquier Lugar** | Localhost, VPS, Docker, Cloudflare Workers |
914
- | 🔑 **Gestión de API Keys** | Genera, rota y define alcance de API keys por proveedor |
915
- | 🧙 **Asistente de Configuración** | Setup guiado en 4 pasos para nuevos usuarios |
916
- | 🔧 **Dashboard CLI Tools** | Configuración en un clic para Claude, Codex, Cline, OpenClaw, Kilo, Antigravity |
917
- | 🔄 **Backups de DB** | Backup y restauración automáticos de todas las configuraciones |
918
-
919
- <details>
920
- <summary><b>📖 Detalles de Características</b></summary>
921
-
922
- ### 🎯 Fallback Inteligente 4 Tiers
923
-
924
- Crea combos con fallback automático:
925
-
926
- ```
927
- Combo: "my-coding-stack"
928
- 1. cc/claude-opus-4-6 (tu suscripción)
929
- 2. nvidia/llama-3.3-70b (API NVIDIA gratuita)
930
- 3. glm/glm-4.7 (respaldo barato, $0.6/1M)
931
- 4. if/kimi-k2-thinking (fallback gratuito)
932
-
933
- → Cambia automáticamente cuando la cuota se agota o ocurren errores
934
- ```
935
-
936
- ### 📊 Rastreo de Cuota en Tiempo Real
937
-
938
- - Consumo de tokens por proveedor
939
- - Countdown de reset (5 horas, diario, semanal)
940
- - Estimación de costo para tiers pagos
941
- - Reportes de gastos mensuales
942
-
943
- ### 🔄 Traducción de Formato
944
-
945
- Traducción transparente entre formatos:
946
-
947
- - **OpenAI** ↔ **Claude** ↔ **Gemini** ↔ **OpenAI Responses**
948
- - Tu herramienta CLI envía formato OpenAI → OmniRoute traduce → El proveedor recibe formato nativo
949
- - Funciona con cualquier herramienta que soporte endpoints OpenAI personalizados
950
-
951
- ### 👥 Soporte Multi-Cuenta
952
-
953
- - Agrega múltiples cuentas por proveedor
954
- - Round-robin automático o enrutamiento por prioridad
955
- - Fallback a la siguiente cuenta cuando una alcanza la cuota
956
-
957
- ### 🔄 Renovación Automática de Token
958
-
959
- - Los tokens OAuth se renuevan automáticamente antes de expirar
960
- - Sin necesidad de re-autenticación manual
961
- - Experiencia transparente en todos los proveedores
962
-
963
- ### 🎨 Combos Personalizados
964
-
965
- - Crea combinaciones ilimitadas de modelos
966
- - 6 estrategias: fill-first, round-robin, power-of-two-choices, random, least-used, cost-optimized
967
- - Comparte combos entre dispositivos con Cloud Sync
968
-
969
- ### 🏥 Dashboard de Salud
970
-
971
- - Estado del sistema (uptime, versión, uso de memoria)
972
- - Estados de circuit breaker por proveedor (Closed/Open/Half-Open)
973
- - Estado de rate limit y lockouts activos
974
- - Estadísticas de caché de firma
975
- - Telemetría de latencia (p50/p95/p99) + caché de prompt
976
- - Reset de salud con un clic
977
-
978
- ### 🔧 Playground del Traductor
979
-
980
- - Debug, prueba y visualiza traducciones de formato de API
981
- - Envía solicitudes y ve cómo OmniRoute traduce entre formatos de proveedores
982
- - Invaluable para troubleshooting de problemas de integración
983
-
984
- ### 💾 Cloud Sync
985
-
986
- - Sincroniza proveedores, combos y configuraciones entre dispositivos
987
- - Sincronización automática en segundo plano
988
- - Almacenamiento cifrado seguro
989
-
990
- </details>
991
-
992
- ## 🧪 Evaluaciones (Evals)
993
-
994
- OmniRoute incluye un framework de evaluación integrado para probar la calidad de respuestas de LLM contra un conjunto golden. Accede vía **Analytics → Evals** en el dashboard.
995
-
996
- ### Conjunto Golden Integrado
997
-
998
- El "OmniRoute Golden Set" precargado contiene 10 casos de prueba que cubren:
999
-
1000
- - Saludos, matemáticas, geografía, generación de código
1001
- - Conformidad de formato JSON, traducción, markdown
1002
- - Rechazo de seguridad (contenido dañino), conteo, lógica booleana
1003
-
1004
- ### Estrategias de Evaluación
1005
-
1006
- | Estrategia | Descripción | Ejemplo |
1007
- | ---------- | ---------------------------------------------------- | -------------------------------- |
1008
- | `exact` | La salida debe coincidir exactamente | `"4"` |
1009
- | `contains` | La salida debe contener subcadena (case-insensitive) | `"Paris"` |
1010
- | `regex` | La salida debe coincidir con el patrón regex | `"1.*2.*3"` |
1011
- | `custom` | Función JS personalizada retorna true/false | `(output) => output.length > 10` |
1012
-
1013
- ---
1014
-
1015
- ## 📖 Guía de Configuración
1016
-
1017
- <details>
1018
- <summary><b>💳 Proveedores por Suscripción</b></summary>
1019
-
1020
- ### Claude Code (Pro/Max)
1021
-
1022
- ```bash
1023
- Dashboard → Proveedores → Conectar Claude Code
1024
- → Login OAuth → Renovación automática de token
1025
- → Rastreo de cuota 5h + semanal
1026
-
1027
- Modelos:
1028
- cc/claude-opus-4-6
1029
- cc/claude-sonnet-4-5-20250929
1030
- cc/claude-haiku-4-5-20251001
1031
- ```
1032
-
1033
- **Consejo Pro:** Usa Opus para tareas complejas, Sonnet para velocidad. ¡OmniRoute rastrea cuota por modelo!
1034
-
1035
- ### OpenAI Codex (Plus/Pro)
1036
-
1037
- ```bash
1038
- Dashboard → Proveedores → Conectar Codex
1039
- → Login OAuth (puerto 1455)
1040
- → Reset 5h + semanal
1041
-
1042
- Modelos:
1043
- cx/gpt-5.2-codex
1044
- cx/gpt-5.1-codex-max
1045
- ```
1046
-
1047
- ### Gemini CLI (¡GRATUITO 180K/mes!)
1048
-
1049
- ```bash
1050
- Dashboard → Proveedores → Conectar Gemini CLI
1051
- → Google OAuth
1052
- → 180K completions/mes + 1K/día
1053
-
1054
- Modelos:
1055
- gc/gemini-3-flash-preview
1056
- gc/gemini-2.5-pro
1057
- ```
1058
-
1059
- **Mejor Valor:** ¡Tier gratuito enorme! Úsalo antes de los tiers pagos.
1060
-
1061
- ### GitHub Copilot
1062
-
1063
- ```bash
1064
- Dashboard → Proveedores → Conectar GitHub
1065
- → OAuth vía GitHub
1066
- → Reset mensual (1ro del mes)
1067
-
1068
- Modelos:
1069
- gh/gpt-5
1070
- gh/claude-4.5-sonnet
1071
- gh/gemini-3-pro
1072
- ```
1073
-
1074
- </details>
1075
-
1076
- <details>
1077
- <summary><b>🔑 Proveedores por API Key</b></summary>
1078
-
1079
- ### NVIDIA NIM (¡GRATUITO 1000 créditos!)
1080
-
1081
- 1. Regístrate: [build.nvidia.com](https://build.nvidia.com)
1082
- 2. Obtén API key gratuita (1000 créditos de inferencia incluidos)
1083
- 3. Dashboard → Agregar Proveedor → NVIDIA NIM:
1084
- - API Key: `nvapi-your-key`
1085
-
1086
- **Modelos:** `nvidia/llama-3.3-70b-instruct`, `nvidia/mistral-7b-instruct`, y 50+ más
1087
-
1088
- **Consejo Pro:** ¡API compatible con OpenAI — funciona perfectamente con la traducción de formato de OmniRoute!
1089
-
1090
- ### DeepSeek
1091
-
1092
- 1. Regístrate: [platform.deepseek.com](https://platform.deepseek.com)
1093
- 2. Obtén API key
1094
- 3. Dashboard → Agregar Proveedor → DeepSeek
1095
-
1096
- **Modelos:** `deepseek/deepseek-chat`, `deepseek/deepseek-coder`
1097
-
1098
- ### Groq (¡Tier Gratuito Disponible!)
1099
-
1100
- 1. Regístrate: [console.groq.com](https://console.groq.com)
1101
- 2. Obtén API key (tier gratuito incluido)
1102
- 3. Dashboard → Agregar Proveedor → Groq
1103
-
1104
- **Modelos:** `groq/llama-3.3-70b`, `groq/mixtral-8x7b`
1105
-
1106
- **Consejo Pro:** ¡Inferencia ultra-rápida — mejor para programación en tiempo real!
1107
-
1108
- ### OpenRouter (100+ Modelos)
1109
-
1110
- 1. Regístrate: [openrouter.ai](https://openrouter.ai)
1111
- 2. Obtén API key
1112
- 3. Dashboard → Agregar Proveedor → OpenRouter
1113
-
1114
- **Modelos:** Accede a 100+ modelos de todos los principales proveedores a través de una única API key.
1115
-
1116
- </details>
1117
-
1118
- <details>
1119
- <summary><b>💰 Proveedores Baratos (Respaldo)</b></summary>
1120
-
1121
- ### GLM-4.7 (Reset diario, $0.6/1M)
1122
-
1123
- 1. Regístrate: [Zhipu AI](https://open.bigmodel.cn/)
1124
- 2. Obtén API key del Plan Coding
1125
- 3. Dashboard → Agregar API Key:
1126
- - Proveedor: `glm`
1127
- - API Key: `your-key`
1128
-
1129
- **Usa:** `glm/glm-4.7`
1130
-
1131
- **Consejo Pro:** ¡El Plan Coding ofrece 3× cuota a 1/7 del costo! Reset diario 10:00 AM.
1132
-
1133
- ### MiniMax M2.1 (Reset 5h, $0.20/1M)
1134
-
1135
- 1. Regístrate: [MiniMax](https://www.minimax.io/)
1136
- 2. Obtén API key
1137
- 3. Dashboard → Agregar API Key
1138
-
1139
- **Usa:** `minimax/MiniMax-M2.1`
1140
-
1141
- **Consejo Pro:** ¡Opción más barata para contexto largo (1M tokens)!
1142
-
1143
- ### Kimi K2 ($9/mes fijo)
1144
-
1145
- 1. Suscríbete: [Moonshot AI](https://platform.moonshot.ai/)
1146
- 2. Obtén API key
1147
- 3. Dashboard → Agregar API Key
1148
-
1149
- **Usa:** `kimi/kimi-latest`
1150
-
1151
- **Consejo Pro:** ¡$9/mes fijo por 10M tokens = $0.90/1M de costo efectivo!
1152
-
1153
- </details>
1154
-
1155
- <details>
1156
- <summary><b>🆓 Proveedores GRATUITOS (Respaldo de Emergencia)</b></summary>
1157
-
1158
- ### iFlow (8 modelos GRATUITOS)
1159
-
1160
- ```bash
1161
- Dashboard → Conectar iFlow
1162
- → Login OAuth iFlow
1163
- → Uso ilimitado
1164
-
1165
- Modelos:
1166
- if/kimi-k2-thinking
1167
- if/qwen3-coder-plus
1168
- if/glm-4.7
1169
- if/minimax-m2
1170
- if/deepseek-r1
1171
- ```
1172
-
1173
- ### Qwen (3 modelos GRATUITOS)
1174
-
1175
- ```bash
1176
- Dashboard → Conectar Qwen
1177
- → Autorización por código de dispositivo
1178
- → Uso ilimitado
1179
-
1180
- Modelos:
1181
- qw/qwen3-coder-plus
1182
- qw/qwen3-coder-flash
1183
- ```
1184
-
1185
- ### Kiro (Claude GRATUITO)
1186
-
1187
- ```bash
1188
- Dashboard → Conectar Kiro
1189
- → AWS Builder ID o Google/GitHub
1190
- → Uso ilimitado
1191
-
1192
- Modelos:
1193
- kr/claude-sonnet-4.5
1194
- kr/claude-haiku-4.5
1195
- ```
1196
-
1197
- </details>
1198
-
1199
- <details>
1200
- <summary><b>🎨 Crear Combos</b></summary>
1201
-
1202
- ### Ejemplo 1: Maximizar Suscripción → Respaldo Barato
1203
-
1204
- ```
1205
- Dashboard → Combos → Crear Nuevo
1206
-
1207
- Nombre: premium-coding
1208
- Modelos:
1209
- 1. cc/claude-opus-4-6 (Suscripción primaria)
1210
- 2. glm/glm-4.7 (Respaldo barato, $0.6/1M)
1211
- 3. minimax/MiniMax-M2.1 (Fallback más barato, $0.20/1M)
1212
-
1213
- Usa en CLI: premium-coding
1214
- ```
1215
-
1216
- ### Ejemplo 2: Solo Gratuito (Costo Cero)
1217
-
1218
- ```
1219
- Nombre: free-combo
1220
- Modelos:
1221
- 1. gc/gemini-3-flash-preview (180K gratis/mes)
1222
- 2. if/kimi-k2-thinking (ilimitado)
1223
- 3. qw/qwen3-coder-plus (ilimitado)
1224
-
1225
- Costo: ¡$0 para siempre!
1226
- ```
1227
-
1228
- </details>
1229
-
1230
- <details>
1231
- <summary><b>🔧 Integración CLI</b></summary>
1232
-
1233
- ### Cursor IDE
1234
-
1235
- ```
1236
- Configuración → Modelos → Avanzado:
1237
- OpenAI API Base URL: http://localhost:20128/v1
1238
- OpenAI API Key: [del dashboard OmniRoute]
1239
- Model: cc/claude-opus-4-6
1240
- ```
1241
-
1242
- ### Claude Code
1243
-
1244
- Usa la página **CLI Tools** en el dashboard para configuración en un clic, o edita `~/.claude/settings.json` manualmente.
1245
-
1246
- ### Codex CLI
1247
-
1248
- ```bash
1249
- export OPENAI_BASE_URL="http://localhost:20128"
1250
- export OPENAI_API_KEY="your-omniroute-api-key"
1251
-
1252
- codex "your prompt"
1253
- ```
1254
-
1255
- ### OpenClaw
1256
-
1257
- **Opción 1 — Dashboard (recomendado):**
1258
-
1259
- ```
1260
- Dashboard → CLI Tools → OpenClaw → Seleccionar Modelo → Aplicar
1261
- ```
1262
-
1263
- **Opción 2 — Manual:** Edita `~/.openclaw/openclaw.json`:
1264
-
1265
- ```json
1266
- {
1267
- "models": {
1268
- "providers": {
1269
- "omniroute": {
1270
- "baseUrl": "http://127.0.0.1:20128/v1",
1271
- "apiKey": "sk_omniroute",
1272
- "api": "openai-completions"
1273
- }
1274
- }
1275
- }
1276
- }
1277
- ```
1278
-
1279
- > **Nota:** OpenClaw solo funciona con OmniRoute local. Usa `127.0.0.1` en lugar de `localhost` para evitar problemas de resolución IPv6.
1280
-
1281
- ### Cline / Continue / RooCode
1282
-
1283
- ```
1284
- Configuración → Configuración de API:
1285
- Proveedor: OpenAI Compatible
1286
- Base URL: http://localhost:20128/v1
1287
- API Key: [del dashboard OmniRoute]
1288
- Model: if/kimi-k2-thinking
1289
- ```
1290
-
1291
- </details>
1292
-
1293
- ---
1294
-
1295
- ## 🐛 Solución de Problemas
1296
-
1297
- <details>
1298
- <summary><b>Haz clic para expandir la guía de solución de problemas</b></summary>
1299
-
1300
- **"Language model did not provide messages"**
1301
-
1302
- - Cuota del proveedor agotada → Verifica el rastreador de cuota en el dashboard
1303
- - Solución: Usa combo con fallback o cambia a tier más barato
1304
-
1305
- **Rate limiting**
1306
-
1307
- - Cuota de suscripción agotada → Fallback a GLM/MiniMax
1308
- - Agrega combo: `cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking`
1309
-
1310
- **Token OAuth expirado**
1311
-
1312
- - Renovado automáticamente por OmniRoute
1313
- - Si persiste: Dashboard → Proveedor → Reconectar
1314
-
1315
- **Costos altos**
1316
-
1317
- - Verifica estadísticas de uso en Dashboard → Costos
1318
- - Cambia modelo primario a GLM/MiniMax
1319
- - Usa tier gratuito (Gemini CLI, iFlow) para tareas no críticas
1320
-
1321
- **Dashboard se abre en el puerto equivocado**
1322
-
1323
- - Establece `PORT=20128` y `NEXT_PUBLIC_BASE_URL=http://localhost:20128`
1324
-
1325
- **Errores de cloud sync**
1326
-
1327
- - Verifica que `BASE_URL` apunte a tu instancia en ejecución
1328
- - Verifica que `CLOUD_URL` apunte a tu endpoint cloud esperado
1329
- - Mantén los valores `NEXT_PUBLIC_*` alineados con los valores del servidor
1330
-
1331
- **Primer login no funciona**
1332
-
1333
- - Verifica `INITIAL_PASSWORD` en `.env`
1334
- - Si no está definido, la contraseña predeterminada es `123456`
1335
-
1336
- **Sin logs de solicitud**
1337
-
1338
- - Establece `ENABLE_REQUEST_LOGS=true` en `.env`
1339
-
1340
- **Prueba de conexión muestra "Invalid" para proveedores compatibles con OpenAI**
1341
-
1342
- - Muchos proveedores no exponen el endpoint `/models`
1343
- - OmniRoute v1.0.6+ incluye validación vía chat completions como fallback
1344
- - Asegúrate de que la URL base incluya el sufijo `/v1`
1345
-
1346
- </details>
1347
-
1348
- ---
1349
-
1350
- ## 🛠️
1351
-
1352
- - **Runtime**: Node.js 20+
1353
- - **Lenguaje**: TypeScript 5.9 — **100% TypeScript** en `src/` y `open-sse/` (v1.0.6)
1354
- - **Framework**: Next.js 16 + React 19 + Tailwind CSS 4
1355
- - **Base de Datos**: LowDB (JSON) + SQLite (estado del dominio + logs de proxy)
1356
- - **Streaming**: Server-Sent Events (SSE)
1357
- - **Auth**: OAuth 2.0 (PKCE) + JWT + API Keys
1358
- - **Testing**: Node.js test runner (368+ tests unitarios)
1359
- - **CI/CD**: GitHub Actions (publicación automática npm + Docker Hub en release)
1360
- - **Website**: [omniroute.online](https://omniroute.online)
1361
- - **Paquete**: [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute)
1362
- - **Docker**: [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute)
1363
- - **Resiliencia**: Circuit breaker, backoff exponencial, anti-thundering herd, spoofing TLS
1364
-
1365
- ---
1366
-
1367
- ## 📖 Documentación
1368
-
1369
- | Documento | Descripción |
1370
- | ------------------------------------------------ | -------------------------------------------------- |
1371
- | [Guía del Usuario](docs/USER_GUIDE.md) | Proveedores, combos, integración CLI, deploy |
1372
- | [Referencia de API](docs/API_REFERENCE.md) | Todos los endpoints con ejemplos |
1373
- | [Solución de Problemas](docs/TROUBLESHOOTING.md) | Problemas comunes y soluciones |
1374
- | [Arquitectura](docs/ARCHITECTURE.md) | Arquitectura del sistema e internos |
1375
- | [Contribuir](CONTRIBUTING.md) | Setup de desarrollo y directrices |
1376
- | [Spec OpenAPI](docs/openapi.yaml) | Especificación OpenAPI 3.0 |
1377
- | [Política de Seguridad](SECURITY.md) | Reportar vulnerabilidades y prácticas de seguridad |
1378
-
1379
- ---
1380
-
1381
- ## 🗺️
1382
-
1383
- ## 👥 Contribuidores
1384
-
1385
- [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors)
1386
-
1387
- ### Cómo Contribuir
1388
-
1389
- 1. Haz fork del repositorio
1390
- 2. Crea tu rama de funcionalidad (`git checkout -b feature/amazing-feature`)
1391
- 3. Haz commit de tus cambios (`git commit -m 'Add amazing feature'`)
1392
- 4. Haz push a la rama (`git push origin feature/amazing-feature`)
1393
- 5. Abre un Pull Request
1394
-
1395
- Consulta [CONTRIBUTING.md](CONTRIBUTING.md) para directrices detalladas.
1396
-
1397
- ### Lanzar una Nueva Versión
1398
-
1399
- ```bash
1400
- # Crea un release — la publicación en npm ocurre automáticamente
1401
- gh release create v1.0.6 --title "v1.0.6" --generate-notes
1402
- ```
1403
-
1404
- ---
1405
-
1406
- ## 📊 Historial de Stars
1407
-
1408
- <a href="https://star-history.com/#diegosouzapw/OmniRoute&Date">
1409
- <picture>
1410
- <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date&theme=dark" />
1411
- <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date" />
1412
- <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date" />
1413
- </picture>
1414
- </a>
1415
-
1416
- ---
1417
-
1418
- ## 🙏 Agradecimientos
1419
-
1420
- Agradecimiento especial a **[9router](https://github.com/decolua/9router)** por **[decolua](https://github.com/decolua)** — el proyecto original que inspiró este fork. OmniRoute se construye sobre esa increíble base con características adicionales, APIs multi-modal y una reescritura completa en TypeScript.
1421
-
1422
- Agradecimiento especial a **[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)** — la implementación original en Go que inspiró esta adaptación a JavaScript.
1423
-
1424
- ---
1425
-
1426
- ## 📄 Licencia
1427
-
1428
- Licencia MIT - consulta [LICENSE](LICENSE) para detalles.
1429
-
1430
- ---
1431
-
1432
- <div align="center">
1433
- <sub>Hecho con ❤️ para desarrolladores que programan 24/7</sub>
1434
- <br/>
1435
- <sub><a href="https://omniroute.online">omniroute.online</a></sub>
1436
- </div>