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.fr.md DELETED
@@ -1,1435 +0,0 @@
1
- <div align="center">
2
- <img src="./docs/screenshots/MainOmniRoute.png" alt="OmniRoute Dashboard" width="800"/>
3
-
4
- # 🚀 OmniRoute — La Passerelle IA Gratuite
5
-
6
- ### N'arrêtez jamais de coder. Routage intelligent vers des **modèles IA GRATUITS et économiques** avec fallback automatique.
7
-
8
- _Votre proxy API universel — un endpoint, 36+ fournisseurs, zéro temps d'arrêt._
9
-
10
- **Chat Completions • Embeddings • Génération d'images • 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
- ### 🤖 Fournisseur IA gratuit pour vos agents de programmation préférés
27
-
28
- _Connectez n'importe quel IDE ou outil CLI alimenté par l'IA via OmniRoute — passerelle API gratuite pour un codage illimité._
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>📡 Tous les agents se connectent via <code>http://localhost:20128/v1</code> ou <code>http://cloud.omniroute.online/v1</code> — une configuration, modèles et quota illimités</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
- [🌐 Site web](https://omniroute.online) • [🚀 Démarrage rapide](#-démarrage-rapide) • [💡 Fonctionnalités](#-fonctionnalités-principales) • [📖 Docs](#-documentation) • [💰 Tarifs](#-aperçu-des-tarifs)
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
- ## 🤔 Pourquoi OmniRoute ?
155
-
156
- **Arrêtez de gaspiller de l'argent et de vous heurter aux limites :**
157
-
158
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Le quota d'abonnement expire inutilisé chaque mois
159
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Les limites de débit vous arrêtent en plein codage
160
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> APIs coûteuses (20-50 $/mois par fournisseur)
161
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Changement manuel entre fournisseurs
162
-
163
- **OmniRoute résout ces problèmes :**
164
-
165
- - ✅ **Maximisez les abonnements** — Suivez les quotas, utilisez chaque bit avant la réinitialisation
166
- - ✅ **Fallback automatique** — Abonnement → Clé API → Économique → Gratuit, zéro temps d'arrêt
167
- - ✅ **Multi-comptes** — Round-robin entre les comptes par fournisseur
168
- - ✅ **Universel** — Fonctionne avec Claude Code, Codex, Gemini CLI, Cursor, Cline, OpenClaw, tout outil CLI
169
-
170
- ---
171
-
172
- ## 📧 Support
173
-
174
- > 💬 **Rejoignez notre communauté !** [Groupe WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Obtenez de l'aide, partagez des astuces et restez informé.
175
-
176
- - **Site web** : [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** : [Groupe communautaire](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
180
- - **Projet original** : [9router par decolua](https://github.com/decolua/9router)
181
-
182
- ---
183
-
184
- ## 🔄 Comment ça fonctionne
185
-
186
- ```
187
- ┌─────────────┐
188
- │ Votre CLI │ (Claude Code, Codex, Gemini CLI, OpenClaw, Cursor, Cline...)
189
- │ Tool │
190
- └──────┬──────┘
191
- │ http://localhost:20128/v1
192
-
193
- ┌─────────────────────────────────────────┐
194
- │ OmniRoute (Routeur intelligent) │
195
- │ • Traduction de format (OpenAI ↔ Claude) │
196
- │ • Suivi des quotas + Embeddings + Images │
197
- │ • Renouvellement automatique des tokens │
198
- └──────┬──────────────────────────────────┘
199
-
200
- ├─→ [Tier 1: ABONNEMENT] Claude Code, Codex, Gemini CLI
201
- │ ↓ quota épuisé
202
- ├─→ [Tier 2: CLÉ API] DeepSeek, Groq, xAI, Mistral, NVIDIA NIM, etc.
203
- │ ↓ limite de budget
204
- ├─→ [Tier 3: ÉCONOMIQUE] GLM ($0.6/1M), MiniMax ($0.2/1M)
205
- │ ↓ limite de budget
206
- └─→ [Tier 4: GRATUIT] iFlow, Qwen, Kiro (illimité)
207
-
208
- Résultat : Ne jamais arrêter de coder, coût minimal
209
- ```
210
-
211
- ---
212
-
213
- ## 🎯 Ce qu'OmniRoute résout : 30 problèmes réels et cas d'utilisation
214
-
215
- > **Tous les développeurs utilisant des outils d'IA sont confrontés quotidiennement à ces problèmes.** OmniRoute a été conçu pour tous les résoudre : des dépassements de coûts aux blocages régionaux, des flux OAuth interrompus aux opérations de protocole et à l'observabilité de l'entreprise.
216
-
217
- <details>
218
- <summary><b>💸 1. "Je paie un abonnement coûteux mais je suis quand même interrompu par des limites" </b></summary>
219
-
220
- Les développeurs paient entre 20 et 200 $/mois pour Claude Pro, Codex Pro ou GitHub Copilot. Même payant, le quota est plafonné : 5 heures d'utilisation, limites hebdomadaires ou limites de tarif à la minute. En cours de session de codage, le fournisseur ne répond plus et le développeur perd en fluidité et en productivité.
221
-
222
- **Comment OmniRoute le résout :**
223
-
224
- - **Smart 4-Tier Fallback** — Si le quota d'abonnement est épuisé, redirige automatiquement vers la clé API → Pas cher → Gratuit sans intervention manuelle
225
- - **Suivi des quotas en temps réel** — Affiche la consommation de jetons en temps réel avec un compte à rebours réinitialisé (5 h, quotidiennement, hebdomadairement)
226
- - **Support multi-comptes** — Plusieurs comptes par fournisseur avec tourniquet automatique — lorsqu'un compte est épuisé, passe au suivant
227
- - **Combos personnalisés** — Chaînes de secours personnalisables avec 6 stratégies d'équilibrage (remplir en premier, round-robin, P2C, aléatoire, les moins utilisées, optimisées en termes de coûts)
228
- - **Codex Business Quotas** — Surveillance des quotas d'espace de travail Business/Équipe directement dans le tableau de bord
229
-
230
- </details>
231
-
232
- <details>
233
- <summary><b>🔌 2. "Je dois utiliser plusieurs fournisseurs mais chacun a une API différente" </b></summary>
234
-
235
- OpenAI utilise un format, Claude (Anthropic) en utilise un autre, Gemini encore un autre. Si un développeur souhaite tester des modèles de différents fournisseurs ou utiliser un modèle de secours entre eux, il doit reconfigurer les SDK, modifier les points de terminaison et gérer les formats incompatibles. Les fournisseurs personnalisés (FriendLI, NIM) ont des points de terminaison de modèle non standard.
236
-
237
- **Comment OmniRoute le résout :**
238
-
239
- - **Point de terminaison unifié** : un seul `http://localhost:20128/v1` sert de proxy pour les plus de 36 fournisseurs.
240
- - **Traduction de format** — Automatique et transparente : OpenAI ↔ Claude ↔ Gemini ↔ API Responses
241
- - **Response Sanitization** — Supprime les champs non standard (`x_groq`, `usage_breakdown`, `service_tier`) qui cassent OpenAI SDK v1.83+
242
- - **Role Normalization** — Convertit `developer` → `system` pour les fournisseurs non OpenAI ; `system` → `user` pour GLM/ERNIE
243
- - **Think Tag Extraction** — Extrait les blocs `<think>` de modèles comme DeepSeek R1 dans un `reasoning_content` standardisé.
244
- - **Sortie structurée pour Gemini** — Conversion automatique `json_schema` → `responseMimeType`/`responseSchema`
245
- - **`stream` est par défaut `false`** — S'aligne sur les spécifications OpenAI, évitant ainsi le SSE inattendu dans les SDK Python/Rust/Go
246
-
247
- </details>
248
-
249
- <details>
250
- <summary><b>🌐 3. "Mon fournisseur d'IA bloque ma région/pays" </b></summary>
251
-
252
- Des fournisseurs comme OpenAI/Codex bloquent l’accès depuis certaines régions géographiques. Les utilisateurs obtiennent des erreurs telles que `unsupported_country_region_territory` lors des connexions OAuth et API. Ceci est particulièrement frustrant pour les développeurs des pays en développement.
253
-
254
- **Comment OmniRoute le résout :**
255
-
256
- - **Configuration proxy à 3 niveaux** — Proxy configurable à 3 niveaux : global (tout le trafic), par fournisseur (un seul fournisseur) et par connexion/clé
257
- - **Badges proxy à code couleur** — Indicateurs visuels : 🟢 proxy global, 🟡 proxy fournisseur, 🔵 proxy de connexion, affichant toujours l'adresse IP
258
- - **Échange de jetons OAuth via proxy** — Le flux OAuth passe également par le proxy, résolvant `unsupported_country_region_territory`
259
- - **Tests de connexion via proxy** — Les tests de connexion utilisent le proxy configuré (plus de contournement direct)
260
- - **Support SOCKS5** — Prise en charge complète du proxy SOCKS5 pour le routage sortant
261
- - **TLS Fingerprint Spoofing** — Empreinte digitale TLS de type navigateur via `wreq-js` pour contourner la détection des robots
262
-
263
- </details>
264
-
265
- <details>
266
- <summary><b>🆓 4. "Je veux utiliser l'IA pour coder mais je n'ai pas d'argent"</b></summary>
267
-
268
- Tout le monde ne peut pas payer entre 20 et 200 $/mois pour des abonnements à l’IA. Les étudiants, les développeurs des pays émergents, les amateurs et les indépendants doivent avoir accès à des modèles de qualité à un coût nul.
269
-
270
- **Comment OmniRoute le résout :**
271
-
272
- - **Fournisseurs gratuits intégrés** — Prise en charge native des fournisseurs 100 % gratuits : iFlow (8 modèles illimités), Qwen (3 modèles illimités), Kiro (Claude gratuit), Gemini CLI (180 000 /mois gratuits)
273
- - **Ollama Cloud** — Cloud-hosted Ollama models at `api.ollama.com` with free "Light usage" tier; use `ollamacloud/<model>` prefix
274
- - **Combos gratuits uniquement** — Chaîne `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = 0 $/mois sans temps d'arrêt
275
- - **Crédits gratuits NVIDIA NIM** — 1 000 crédits gratuits intégrés
276
- - **Stratégie d'optimisation des coûts** — Stratégie de routage qui choisit automatiquement le fournisseur disponible le moins cher
277
-
278
- </details>
279
-
280
- <details>
281
- <summary><b>🔒 5. "Je dois protéger ma passerelle IA contre les accès non autorisés" </b></summary>
282
-
283
- Lors de l'exposition d'une passerelle IA au réseau (LAN, VPS, Docker), toute personne possédant l'adresse peut consommer les jetons/quota du développeur. Sans protection, les API sont vulnérables aux utilisations abusives, aux injections rapides et aux abus.
284
-
285
- **Comment OmniRoute le résout :**
286
-
287
- - **Gestion des clés API** — Génération, rotation et portée par fournisseur avec une page `/dashboard/api-manager` dédiée
288
- - **Autorisations au niveau du modèle** : restreindre les clés API à des modèles spécifiques (`openai/*`, modèles génériques), avec la bascule Autoriser tout/Restreindre
289
- - **API Endpoint Protection** – exige une clé pour `/v1/models` et bloque des fournisseurs spécifiques de la liste
290
- - **Auth Guard + Protection CSRF** — Toutes les routes du tableau de bord protégées avec le middleware `withAuth` + les jetons CSRF
291
- - **Rate Limiter** — Limitation du débit par IP avec fenêtres configurables
292
- - **Filtrage IP** – Liste autorisée/liste de blocage pour le contrôle d'accès
293
- - **Prompt Injection Guard** — Nettoyage contre les modèles d'invite malveillants
294
- - **Chiffrement AES-256-GCM** — Informations d'identification chiffrées au repos
295
-
296
- </details>
297
-
298
- <details>
299
- <summary><b>🛑 6. "Mon fournisseur est tombé en panne et j'ai perdu mon flux de codage"</b></summary>
300
-
301
- Les fournisseurs d’IA peuvent devenir instables, renvoyer des erreurs 5xx ou atteindre des limites de débit temporaires. Si un développeur dépend d'un seul fournisseur, il est interrompu. Sans disjoncteurs, des tentatives répétées peuvent faire planter l’application.
302
-
303
- **Comment OmniRoute le résout :**
304
-
305
- - **Disjoncteur par fournisseur** — Ouverture/fermeture automatique avec seuils et temps de recharge configurables (Fermé/Ouvert/Semi-ouvert)
306
- - **Exponential Backoff** — Délais progressifs entre les tentatives
307
- - **Anti-Thundering Herd** — Protection mutex + sémaphore contre les tempêtes de nouvelles tentatives simultanées
308
- - **Chaînes de secours combinées** — Si le fournisseur principal échoue, passe automatiquement à travers la chaîne sans intervention
309
- - **Combo Circuit Breaker** – Désactive automatiquement les fournisseurs défaillants au sein d'une chaîne combo
310
- - **Tableau de bord de santé** — Surveillance de la disponibilité, états des disjoncteurs, verrouillages, statistiques du cache, latence p50/p95/p99
311
-
312
- </details>
313
-
314
- <details>
315
- <summary><b>🔧 7. "La configuration de chaque outil d'IA est fastidieuse et répétitive"</b></summary>
316
-
317
- Les développeurs utilisent Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Chaque outil nécessite une configuration différente (point de terminaison API, clé, modèle). La reconfiguration lors du changement de fournisseur ou de modèle est une perte de temps.
318
-
319
- **Comment OmniRoute le résout :**
320
-
321
- - **CLI Tools Dashboard** — Page dédiée avec configuration en un clic pour Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline
322
- - **GitHub Copilot Config Generator** — Génère `chatLanguageModels.json` pour VS Code avec sélection groupée de modèles
323
- - **Assistant d'intégration** — Configuration guidée en 4 étapes pour les nouveaux utilisateurs
324
- - **Un point de terminaison, tous les modèles** – Configurez `http://localhost:20128/v1` une fois, accédez à plus de 36 fournisseurs
325
-
326
- </details>
327
-
328
- <details>
329
- <summary><b>🔑 8. "Gérer les jetons OAuth de plusieurs fournisseurs est un enfer"</b></summary>
330
-
331
- Claude Code, Codex, Gemini CLI, Copilot — tous utilisent OAuth 2.0 avec des jetons expirant. Les développeurs doivent se réauthentifier constamment, gérer `client_secret is missing`, `redirect_uri_mismatch` et les pannes sur les serveurs distants. OAuth sur LAN/VPS est particulièrement problématique.
332
-
333
- **Comment OmniRoute le résout :**
334
-
335
- - **Actualisation automatique des jetons** : les jetons OAuth sont actualisés en arrière-plan avant leur expiration.
336
- - **OAuth 2.0 (PKCE) intégré** — Flux automatique pour Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow
337
- - **Multi-Account OAuth** — Plusieurs comptes par fournisseur via l'extraction de jetons JWT/ID
338
- - **OAuth LAN/Remote Fix** — Détection IP privée pour `redirect_uri` + mode URL manuel pour les serveurs distants
339
- - **OAuth derrière Nginx** — Utilise `window.location.origin` pour la compatibilité du proxy inverse
340
- - **Guide OAuth à distance** — Guide étape par étape pour les informations d'identification Google Cloud sur VPS/Docker
341
-
342
- </details>
343
-
344
- <details>
345
- <summary><b>📊 9. "Je ne sais pas combien je dépense ni où" </b></summary>
346
-
347
- Les développeurs utilisent plusieurs fournisseurs payants mais n'ont pas de vue unifiée des dépenses. Chaque fournisseur dispose de son propre tableau de bord de facturation, mais il n'existe pas de vue consolidée. Les coûts inattendus peuvent s’accumuler.
348
-
349
- **Comment OmniRoute le résout :**
350
-
351
- - **Cost Analytics Dashboard** — Suivi des coûts par jeton et gestion du budget par fournisseur
352
- - **Limites budgétaires par niveau** — Plafond de dépenses par niveau qui déclenche un repli automatique
353
- - **Configuration de tarification par modèle** — Prix configurables par modèle
354
- - **Statistiques d'utilisation par clé API** — Nombre de demandes et horodatage de la dernière utilisation par clé
355
- - **Tableau de bord Analytics** — Cartes statistiques, tableau d'utilisation du modèle, tableau des fournisseurs avec taux de réussite et latence
356
-
357
- </details>
358
-
359
- <details>
360
- <summary><b>🐛 10. "Je ne peux pas diagnostiquer les erreurs et les problèmes dans les appels IA" </b></summary>
361
-
362
- Lorsqu'un appel échoue, le développeur ne sait pas s'il s'agit d'une limite de débit, d'un jeton expiré, d'un format incorrect ou d'une erreur du fournisseur. Journaux fragmentés sur différents terminaux. Sans observabilité, le débogage est un essai et une erreur.
363
-
364
- **Comment OmniRoute le résout :**
365
-
366
- - **Tableau de bord des journaux unifiés** — 4 onglets : journaux de requêtes, journaux proxy, journaux d'audit, console
367
- - **Console Log Viewer** — Visualiseur de style terminal en temps réel avec niveaux de code couleur, défilement automatique, recherche, filtre
368
- - **Journaux du proxy SQLite** — Journaux persistants qui survivent aux redémarrages du serveur
369
- - **Translator Playground** — 4 modes de débogage : Playground (traduction de format), Chat Tester (aller-retour), Test Bench (batch), Live Monitor (temps réel)
370
- - **Demande de télémétrie** — latence p50/p95/p99 + traçage X-Request-Id
371
- - **Journalisation basée sur des fichiers avec rotation** — L'intercepteur de console capture tout dans le journal JSON avec une rotation basée sur la taille
372
-
373
- </details>
374
-
375
- <details>
376
- <summary><b>🏗️ 11. "Le déploiement et la maintenance de la passerelle sont complexes"</b></summary>
377
-
378
- L'installation, la configuration et la maintenance d'un proxy IA dans différents environnements (local, VPS, Docker, cloud) demandent beaucoup de main-d'œuvre. Des problèmes tels que les chemins codés en dur, `EACCES` sur les répertoires, les conflits de ports et les versions multiplateformes ajoutent des frictions.
379
-
380
- **Comment OmniRoute le résout :**
381
-
382
- - **Installation globale npm** — `npm install -g omniroute && omniroute` — terminée
383
- - **Docker Multi-Platform** — AMD64 + ARM64 natif (Apple Silicon, AWS Graviton, Raspberry Pi)
384
- - **Profils Docker Compose** — `base` (pas d'outils CLI) et `cli` (avec Claude Code, Codex, OpenClaw)
385
- - **Electron Desktop App** — Application native pour Windows/macOS/Linux avec barre d'état système, démarrage automatique et mode hors ligne
386
- - **Mode Split-Port** — API et tableau de bord sur des ports séparés pour des scénarios avancés (proxy inverse, réseau de conteneurs)
387
- - **Cloud Sync** – Configurez la synchronisation entre les appareils via Cloudflare Workers
388
- - **Sauvegardes DB** — Sauvegarde, restauration, exportation et importation automatiques de tous les paramètres
389
-
390
- </details>
391
-
392
- <details>
393
- <summary><b>🌍 12. "L'interface est uniquement en anglais et mon équipe ne parle pas anglais" </b></summary>
394
-
395
- Les équipes des pays non anglophones, notamment en Amérique latine, en Asie et en Europe, ont du mal à utiliser des interfaces uniquement en anglais. Les barrières linguistiques réduisent l’adoption et augmentent les erreurs de configuration.
396
-
397
- **Comment OmniRoute le résout :**
398
-
399
- - **Tableau de bord i18n — 30 langues** — Plus de 500 touches traduites, dont arabe, bulgare, danois, allemand, espagnol, finnois, français, hébreu, hindi, hongrois, indonésien, italien, japonais, coréen, malais, néerlandais, norvégien, polonais, portugais (PT/BR), roumain, russe, slovaque, suédois, thaï, ukrainien, vietnamien, chinois, philippin, anglais.
400
- - **Support RTL** — Prise en charge de droite à gauche pour l'arabe et l'hébreu
401
- - ** README multilingues ** — 30 traductions complètes de la documentation
402
- - **Sélecteur de langue** — Icône de globe dans l'en-tête pour une commutation en temps réel
403
-
404
- </details>
405
-
406
- <details>
407
- <summary><b>🔄 13. "J'ai besoin de plus que du chat : j'ai besoin d'intégrations, d'images, d'audio" </b></summary>
408
-
409
- L'IA ne se limite pas à la réalisation de discussions. Les développeurs doivent générer des images, transcrire l'audio, créer des intégrations pour RAG, reclasser les documents et modérer le contenu. Chaque API a un point de terminaison et un format différents.
410
-
411
- **Comment OmniRoute le résout :**
412
-
413
- - **Embeddings** — `/v1/embeddings` avec 6 fournisseurs et plus de 9 modèles
414
- - **Génération d'images** — `/v1/images/generations` avec 10 fournisseurs et plus de 20 modèles (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI)
415
- - **Texte vers vidéo** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) et SD WebUI
416
- - **Texte en musique** — `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen)
417
- - **Transcription audio** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3
418
- - **Text-to-Speech** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, Inworld, Cartesia, PlayHT, + fournisseurs existants
419
- - **Modérations** — `/v1/moderations` — Contrôles de sécurité du contenu
420
- - **Reclassement** — `/v1/rerank` — Reclassement de la pertinence du document
421
- - **API Réponses** — Prise en charge complète de `/v1/responses` pour le Codex
422
-
423
- </details>
424
-
425
- <details>
426
- <summary><b>🧪 14. "Je n'ai aucun moyen de tester et de comparer la qualité des modèles" </b></summary>
427
-
428
- Les développeurs veulent savoir quel modèle convient le mieux à leur cas d'utilisation (code, traduction, raisonnement) mais la comparaison manuelle est lente. Il n’existe aucun outil d’évaluation intégré.
429
-
430
- **Comment OmniRoute le résout :**
431
-
432
- - **Évaluations LLM** — Tests Golden Set avec 10 cas préchargés couvrant les salutations, les mathématiques, la géographie, la génération de code, la conformité JSON, la traduction, la démarque, le refus de sécurité
433
- - **4 stratégies de correspondance** — `exact`, `contains`, `regex`, `custom` (fonction JS)
434
- - **Banc de test Translator Playground** — Tests par lots avec plusieurs entrées et sorties attendues, comparaison entre fournisseurs
435
- - **Chat Tester** — Aller-retour complet avec rendu de réponse visuelle
436
- - **Live Monitor** — Flux en temps réel de toutes les requêtes transitant par le proxy
437
-
438
- </details>
439
-
440
- <details>
441
- <summary><b>📈 15. "J'ai besoin d'évoluer sans perdre en performances"</b></summary>
442
-
443
- À mesure que le volume de demandes augmente, sans mettre en cache les mêmes questions, cela génère des coûts en double. Sans idempotence, les demandes en double gaspillent le traitement. Les limites tarifaires par fournisseur doivent être respectées.
444
-
445
- **Comment OmniRoute le résout :**
446
-
447
- - **Cache sémantique** — Le cache à deux niveaux (signature + sémantique) réduit les coûts et la latence
448
- - **Request Idempotency** — Fenêtre de déduplication de 5 s pour des requêtes identiques
449
- - **Détection de limite de débit** — RPM par fournisseur, écart minimum et suivi simultané maximum
450
- - **Limites de débit modifiables** — Valeurs par défaut configurables dans Paramètres → Résilience avec persistance
451
- - **Cache de validation de clé API** — Cache à 3 niveaux pour les performances de production
452
- - **Tableau de bord de santé avec télémétrie** — latence p50/p95/p99, statistiques de cache, disponibilité
453
-
454
- </details>
455
-
456
- <details>
457
- <summary><b>🤖 16. "Je souhaite contrôler le comportement du modèle à l'échelle mondiale" </b></summary>
458
-
459
- Les développeurs qui souhaitent que toutes les réponses soient dans une langue spécifique, avec un ton spécifique, ou qui souhaitent limiter les jetons de raisonnement. Configurer cela dans chaque outil/demande n’est pas pratique.
460
-
461
- **Comment OmniRoute le résout :**
462
-
463
- - **Injection d'invite système** — Invite globale appliquée à toutes les requêtes
464
- - **Thinking Budget Validation** — Contrôle d'allocation de jetons de raisonnement par requête (passthrough, automatique, personnalisé, adaptatif)
465
- - **6 Stratégies de routage** – Stratégies globales qui déterminent la façon dont les demandes sont distribuées
466
- - **Wildcard Router** — Les modèles `provider/*` sont acheminés dynamiquement vers n'importe quel fournisseur.
467
- - **Combo Enable/Disable Toggle** — Basculez les combos directement depuis le tableau de bord
468
- - **Provider Toggle** — Activer/désactiver toutes les connexions pour un fournisseur en un seul clic
469
- - **Fournisseurs bloqués** — Exclure des fournisseurs spécifiques de la liste `/v1/models`
470
-
471
- </details>
472
-
473
- <details>
474
- <summary><b>🧰 17. "J'ai besoin d'outils MCP en tant que fonctionnalités de produit de première classe" </b></summary>
475
-
476
- De nombreuses passerelles IA exposent MCP uniquement en tant que détail d'implémentation caché. Les équipes ont besoin d’une couche opérationnelle visible et gérable.
477
-
478
- **Comment OmniRoute le résout :**
479
-
480
- - MCP apparaît dans l'onglet de navigation du tableau de bord et de protocole de point de terminaison
481
- - Page de gestion MCP dédiée avec processus, outils, portées et audit
482
- - Démarrage rapide intégré pour `omniroute --mcp` et intégration du client
483
-
484
- </details>
485
-
486
- <details>
487
- <summary><b>🧠 18. "J'ai besoin d'une orchestration A2A avec des chemins de tâches de synchronisation + flux" </b></summary>
488
-
489
- Les flux de travail des agents nécessitent à la fois des réponses directes et une exécution en continu de longue durée avec contrôle du cycle de vie.
490
-
491
- **Comment OmniRoute le résout :**
492
-
493
- - Point de terminaison A2A JSON-RPC (`POST /a2a`) avec `message/send` et `message/stream`
494
- - Streaming SSE avec propagation de l'état terminal
495
- - API de cycle de vie des tâches pour `tasks/get` et `tasks/cancel`
496
-
497
- </details>
498
-
499
- <details>
500
- <summary><b>🛰️ 19. "J'ai besoin d'un véritable état de santé du processus MCP, et non d'un état deviné" </b></summary>
501
-
502
- Les équipes opérationnelles doivent savoir si MCP est réellement actif, et pas seulement si une API est accessible.
503
-
504
- **Comment OmniRoute le résout :**
505
-
506
- - Fichier de battement de cœur d'exécution avec PID, horodatages, transport, nombre d'outils et mode de portée
507
- - API de statut MCP combinant battement de coeur + activité récente
508
- - Cartes d'état de l'interface utilisateur pour la fraîcheur des processus/disponibilité/battement de cœur
509
-
510
- </details>
511
-
512
- <details>
513
- <summary><b>📋 20. "J'ai besoin d'une exécution vérifiable de l'outil MCP" </b></summary>
514
-
515
- Lorsque les outils modifient la configuration ou déclenchent des actions opérationnelles, les équipes ont besoin d'une traçabilité médico-légale.
516
-
517
- **Comment OmniRoute le résout :**
518
-
519
- - Journalisation d'audit basée sur SQLite pour les appels d'outils MCP
520
- - Filtres par outil, succès/échec, clé API et pagination
521
- - Tableau d'audit du tableau de bord + points de terminaison de statistiques pour l'automatisation
522
-
523
- </details>
524
-
525
- <details>
526
- <summary><b>🔐 21. "J'ai besoin d'autorisations MCP limitées par intégration" </b></summary>
527
-
528
- Différents clients doivent avoir le moindre privilège d’accès aux catégories d’outils.
529
-
530
- **Comment OmniRoute le résout :**
531
-
532
- - 9 étendues MCP granulaires pour un accès contrôlé aux outils
533
- - Application de la portée et visibilité dans l'interface utilisateur de gestion MCP
534
- - Posture par défaut sûre pour les outils opérationnels
535
-
536
- </details>
537
-
538
- <details>
539
- <summary><b>⚙️ 22. "J'ai besoin de contrôles opérationnels sans redéploiement"</b></summary>
540
-
541
- Les équipes ont besoin de changements d'exécution rapides lors d'incidents ou d'événements de coûts.
542
-
543
- **Comment OmniRoute le résout :**
544
-
545
- - Activer le combo de commutation directement depuis le tableau de bord MCP
546
- - Appliquer des profils de résilience à partir de packs de politiques prédéfinis
547
- - Réinitialiser l'état du disjoncteur à partir du même panneau de commande
548
-
549
- </details>
550
-
551
- <details>
552
- <summary><b>🔄 23. "J'ai besoin d'une visibilité et d'une annulation en direct du cycle de vie des tâches A2A" </b></summary>
553
-
554
- Sans visibilité sur le cycle de vie, les incidents de tâches deviennent difficiles à trier.
555
-
556
- **Comment OmniRoute le résout :**
557
-
558
- - Liste des tâches/filtrage par état/compétence avec pagination
559
- - Analyse approfondie des métadonnées, des événements et des artefacts des tâches
560
- - Point de terminaison d'annulation de tâche et action de l'interface utilisateur avec confirmation
561
-
562
- </details>
563
-
564
- <details>
565
- <summary><b>🌊 24. "J'ai besoin de métriques de flux actif pour la charge A2A" </b></summary>
566
-
567
- Les flux de travail de streaming nécessitent une vision opérationnelle de la concurrence et des connexions en direct.
568
-
569
- **Comment OmniRoute le résout :**
570
-
571
- - Compteurs de flux actifs intégrés au statut A2A
572
- - Horodatage de la dernière tâche et nombre par état
573
- - Cartes de tableau de bord A2A pour la surveillance des opérations en temps réel
574
-
575
- </details>
576
-
577
- <details>
578
- <summary><b>🪪 25. "J'ai besoin d'une découverte d'agent standard pour les clients" </b></summary>
579
-
580
- Les clients et orchestrateurs externes ont besoin de métadonnées lisibles par machine pour l'intégration.
581
-
582
- **Comment OmniRoute le résout :**
583
-
584
- - Carte d'agent exposée à `/.well-known/agent.json`
585
- - Capacités et compétences affichées dans l'interface utilisateur de gestion
586
- - L'API de statut A2A inclut des métadonnées de découverte pour l'automatisation
587
-
588
- </details>
589
-
590
- <details>
591
- <summary><b>🧭 26. "J'ai besoin de la possibilité de découvrir le protocole dans le produit UX"</b></summary>
592
-
593
- Si les utilisateurs ne peuvent pas découvrir les surfaces de protocole, l’adoption et la qualité du support chutent.
594
-
595
- **Comment OmniRoute le résout :**
596
-
597
- - Entrées de la barre latérale pour MCP et A2A
598
- - Onglet Protocoles de la page du point de terminaison avec démarrage rapide et état
599
- - Liens depuis l'aperçu vers les tableaux de bord de gestion dédiés
600
-
601
- </details>
602
-
603
- <details>
604
- <summary><b>🧪 27. "J'ai besoin d'une validation de protocole de bout en bout avec de vrais clients"</b></summary>
605
-
606
- Les tests simulés ne suffisent pas pour valider la compatibilité des protocoles avant la publication.
607
-
608
- **Comment OmniRoute le résout :**
609
-
610
- - Suite E2E qui démarre l'application et utilise un véritable transport client MCP SDK
611
- - Tests client A2A pour les flux de découverte, d'envoi, de streaming, d'obtention et d'annulation
612
- - Vérifier les assertions par rapport aux API d'audit MCP et de tâches A2A
613
-
614
- </details>
615
-
616
- <details>
617
- <summary><b>📡 28. "J'ai besoin d'une observabilité unifiée sur toutes les interfaces"</b></summary>
618
-
619
- Le fractionnement de l'observabilité par protocole crée des angles morts et un MTTR plus long.
620
-
621
- **Comment OmniRoute le résout :**
622
-
623
- - Tableaux de bord/journaux/analyses unifiés dans un seul produit
624
- - Santé + audit + télémétrie des demandes sur les couches OpenAI, MCP et A2A
625
- - API opérationnelles pour le statut et l'automatisation
626
-
627
- </details>
628
-
629
- <details>
630
- <summary><b>💼 29. "J'ai besoin d'un environnement d'exécution pour l'orchestration proxy + outils + agent" </b></summary>
631
-
632
- L’exécution de nombreux services distincts augmente les coûts opérationnels et les modes de défaillance.
633
-
634
- **Comment OmniRoute le résout :**
635
-
636
- - Proxy compatible OpenAI, serveur MCP et serveur A2A dans une seule pile
637
- - Authentification partagée, résilience, stockage de données et observabilité
638
- - Modèle de politique cohérent sur toutes les surfaces d'interaction
639
-
640
- </details>
641
-
642
- <details>
643
- <summary><b>🚀 30. "Je dois expédier des flux de travail agentiques sans prolifération de codes adhésifs" </b></summary>
644
-
645
- Les équipes perdent de la vitesse lors de l’assemblage de plusieurs services et scripts ad hoc.
646
-
647
- **Comment OmniRoute le résout :**
648
-
649
- - Stratégie de point de terminaison unifiée pour les clients et les agents
650
- - Interfaces utilisateur de gestion de protocole intégrées et chemins de validation de fumée
651
- - Bases prêtes pour la production (sécurité, journalisation, résilience, sauvegarde)
652
-
653
- </details>
654
-
655
- ### Exemples de playbooks (cas d'utilisation intégrés)
656
-
657
- **Playbook A : Maximisez l'abonnement payant + sauvegarde bon marché**
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
- **Playbook B : pile de codage à coût nul**
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
- **Playbook C : chaîne de secours toujours active 24h/24 et 7j/7**
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
- **Playbook D : Opérations d'agent avec 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
- ## ⚡ Démarrage rapide
706
-
707
- **1. Installer globalement :**
708
-
709
- ```bash
710
- npm install -g omniroute
711
- omniroute
712
- ```
713
-
714
- 🎉 Le tableau de bord s'ouvre sur `http://localhost:20128`
715
-
716
- | Commande | Description |
717
- | ----------------------- | ------------------------------------------- |
718
- | `omniroute` | Démarrer le serveur (port par défaut 20128) |
719
- | `omniroute --port 3000` | Utiliser un port personnalisé |
720
- | `omniroute --no-open` | Ne pas ouvrir le navigateur automatiquement |
721
- | `omniroute --help` | Afficher l'aide |
722
-
723
- **2. Connecter un fournisseur GRATUIT :**
724
-
725
- Tableau de bord → Fournisseurs → Connecter **Claude Code** ou **Antigravity** → Connexion OAuth → Terminé !
726
-
727
- **3. Utiliser dans votre outil CLI :**
728
-
729
- ```
730
- Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline Paramètres :
731
- Endpoint : http://localhost:20128/v1
732
- API Key : [copier depuis le tableau de bord]
733
- Model : if/kimi-k2-thinking
734
- ```
735
-
736
- **C'est tout !** Commencez à coder avec des modèles IA GRATUITS.
737
-
738
- **Alternative — exécuter depuis le code source :**
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 en tant qu'image Docker publique sur [Docker Hub](https://hub.docker.com/r/diegosouzapw/omniroute).
751
-
752
- **Démarrage rapide :**
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
- **Avec fichier d'environnement :**
764
-
765
- ```bash
766
- # Copier et modifier le .env d'abord
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
- **Avec Docker Compose :**
779
-
780
- ```bash
781
- # Profil de base (sans outils CLI)
782
- docker compose --profile base up -d
783
-
784
- # Profil CLI (Claude Code, Codex, OpenClaw intégrés)
785
- docker compose --profile cli up -d
786
- ```
787
-
788
- | Image | Tag | Taille | Description |
789
- | ------------------------ | -------- | ------ | ----------------------- |
790
- | `diegosouzapw/omniroute` | `latest` | ~250MB | Dernière version stable |
791
- | `diegosouzapw/omniroute` | `1.0.6` | ~250MB | Version actuelle |
792
-
793
- ---
794
-
795
- ---
796
-
797
- ## 🖥️
798
-
799
- > 🆕 **NOUVEAU !** OmniRoute est maintenant disponible en tant qu'**application de bureau native** pour Windows, macOS et Linux.
800
-
801
- Exécutez OmniRoute en tant qu'application de bureau autonome — sans terminal, sans navigateur, sans internet requis pour les modèles locaux.
802
-
803
- - 🖥️ **Fenêtre Native** — Fenêtre dédiée avec intégration dans la barre d'état système
804
- - 🔄 **Démarrage Automatique** — Lancez OmniRoute à la connexion système
805
- - 🔔 **Notifications Natives** — Alertes pour l'épuisement de quota ou les problèmes
806
- - ⚡ **Installation en Un Clic** — NSIS (Windows), DMG (macOS), AppImage (Linux)
807
- - 🌐 **Mode Hors Ligne** — Fonctionne entièrement hors ligne avec serveur intégré
808
-
809
- ```bash
810
- npm run electron:dev # Mode développement
811
- npm run electron:build # Plateforme actuelle
812
- npm run electron:build:win # Windows (.exe)
813
- npm run electron:build:mac # macOS (.dmg)
814
- npm run electron:build:linux # Linux (.AppImage)
815
- ```
816
-
817
- 📖 Documentation complète : [`electron/README.md`](electron/README.md)
818
-
819
- ---
820
-
821
- ## 💰 Aperçu des tarifs
822
-
823
- | Tier | Fournisseur | Coût | Réinitialisation | Idéal pour |
824
- | ----------------- | ----------------- | -------------------------- | ------------------- | ----------------------------- |
825
- | **💳 ABONNEMENT** | Claude Code (Pro) | 20 $/mois | 5h + hebdomadaire | Déjà abonné |
826
- | | Codex (Plus/Pro) | 20-200 $/mois | 5h + hebdomadaire | Utilisateurs OpenAI |
827
- | | Gemini CLI | **GRATUIT** | 180K/mois + 1K/jour | Tout le monde ! |
828
- | | GitHub Copilot | 10-19 $/mois | Mensuel | Utilisateurs GitHub |
829
- | **🔑 CLÉ API** | NVIDIA NIM | **GRATUIT** (1000 crédits) | Unique | Tests gratuits |
830
- | | DeepSeek | À l'usage | Aucune | Meilleur rapport qualité-prix |
831
- | | Groq | Niveau gratuit + payant | Limité | Inférence ultra-rapide |
832
- | | xAI (Grok) | À l'usage | Aucune | Modèles Grok |
833
- | | Mistral | Niveau gratuit + payant | Limité | IA européenne |
834
- | | OpenRouter | À l'usage | Aucune | 100+ modèles |
835
- | **💰 ÉCONOMIQUE** | GLM-4.7 | 0,6 $/1M | Quotidien 10h | Backup économique |
836
- | | MiniMax M2.1 | 0,2 $/1M | Rotatif 5h | Option la moins chère |
837
- | | Kimi K2 | 9 $/mois fixe | 10M tokens/mois | Coût prévisible |
838
- | **🆓 GRATUIT** | iFlow | 0 $ | Illimité | 8 modèles gratuits |
839
- | | Qwen | 0 $ | Illimité | 3 modèles gratuits |
840
- | | Kiro | 0 $ | Illimité | Claude gratuit |
841
-
842
- **💡 Conseil Pro :** Commencez avec Gemini CLI (180K gratuits/mois) + iFlow (illimité gratuit) = 0 $ de coût !
843
-
844
- ---
845
-
846
- ## 💡 Fonctionnalités principales
847
-
848
- ### 🧠 Routage & Intelligence
849
-
850
- | Fonctionnalité | Ce qu'elle fait |
851
- | ------------------------------------- | ------------------------------------------------------------------------------- |
852
- | 🎯 **Fallback intelligent 4 niveaux** | Auto-routage : Abonnement → Clé API → Économique → Gratuit |
853
- | 📊 **Suivi des quotas en temps réel** | Comptage de tokens en direct + compte à rebours de réinitialisation |
854
- | 🔄 **Traduction de format** | OpenAI ↔ Claude ↔ Gemini ↔ Cursor ↔ Kiro transparent |
855
- | 👥 **Support multi-comptes** | Plusieurs comptes par fournisseur avec sélection intelligente |
856
- | 🔄 **Renouvellement auto des tokens** | Les tokens OAuth se renouvellent automatiquement avec retry |
857
- | 🎨 **Combos personnalisés** | 6 stratégies : fill-first, round-robin, p2c, random, least-used, cost-optimized |
858
- | 🧩 **Modèles personnalisés** | Ajoutez n'importe quel ID de modèle à n'importe quel fournisseur |
859
- | 🌐 **Routeur wildcard** | Routez les patterns `provider/*` vers n'importe quel fournisseur dynamiquement |
860
- | 🧠 **Budget de raisonnement** | Modes passthrough, auto, custom et adaptive pour les modèles de raisonnement |
861
- | 🔀 **Model Aliases** | Auto-forward deprecated model IDs to current replacements (built-in + custom) |
862
- | ⚡ **Background Degradation** | Auto-route background tasks (titles, summaries) to cheaper models |
863
- | 💬 **Injection System Prompt** | System prompt global appliqué à toutes les requêtes |
864
- | 📄 **API Responses** | Support complet de l'API Responses d'OpenAI (`/v1/responses`) pour Codex |
865
-
866
- ### 🎵 APIs multi-modales
867
-
868
- | Fonctionnalité | Ce qu'elle fait |
869
- | -------------------------- | ------------------------------------------------------- |
870
- | 🖼️ **Génération d'images** | `/v1/images/generations` — 4 fournisseurs, 9+ modèles |
871
- | 📐 **Embeddings** | `/v1/embeddings` — 6 fournisseurs, 9+ modèles |
872
- | 🎤 **Transcription audio** | `/v1/audio/transcriptions` — compatible Whisper |
873
- | 🔊 **Texte vers parole** | `/v1/audio/speech` — synthèse audio multi-fournisseur |
874
- | 🛡️ **Modérations** | `/v1/moderations` — vérifications de sécurité |
875
- | 🔀 **Reranking** | `/v1/rerank` — reclassement de pertinence des documents |
876
-
877
- ### 🛡️ Résilience & Sécurité
878
-
879
- | Fonctionnalité | Ce qu'elle fait |
880
- | ------------------------------- | -------------------------------------------------------------------------------------- |
881
- | 🔌 **Circuit Breaker** | Ouverture/fermeture auto par fournisseur avec seuils configurables |
882
- | 🎯 **Endpoint-Aware Models** | Custom models declare supported endpoints + API format |
883
- | 🛡️ **Anti-Thundering Herd** | Mutex + sémaphore de rate-limit pour les fournisseurs avec clé API |
884
- | 🧠 **Cache sémantique** | Cache à deux niveaux (signature + sémantique) réduit coût et latence |
885
- | ⚡ **Idempotence des requêtes** | Fenêtre de dédup 5s pour les requêtes dupliquées |
886
- | 🔒 **Spoofing TLS Fingerprint** | Contournement de détection de bot via wreq-js |
887
- | 🔏 **CLI Fingerprint Matching** | Matches native CLI request signatures — **reduces ban risk while preserving proxy IP** |
888
- | 🌐 **Filtrage IP** | Allowlist/blocklist pour le contrôle d'accès API |
889
- | 📊 **Rate limits éditables** | RPM configurable, intervalle minimum, concurrence max |
890
- | 💾 **Rate Limit Persistence** | Learned limits survive restarts via SQLite with 60s debounce + 24h staleness |
891
- | 🔄 **Token Refresh Resilience** | Per-provider circuit breaker (5 fails→30min) + 30s timeout per attempt |
892
-
893
- ### 📊 Observabilité & Analytique
894
-
895
- | Fonctionnalité | Ce qu'elle fait |
896
- | --------------------------------- | ------------------------------------------------------------------------- |
897
- | 📝 **Logs de requêtes** | Mode debug avec logs complets requête/réponse |
898
- | 💾 **Logs SQLite** | Logs proxy persistants survivant aux redémarrages |
899
- | 📊 **Tableau de bord analytique** | Recharts : cartes de stats, graphique d'utilisation, tableau fournisseurs |
900
- | 📈 **Suivi de progression** | Événements SSE de progression opt-in pour le streaming |
901
- | 🧪 **Évaluations LLM** | Tests avec golden set et 4 stratégies de correspondance |
902
- | 🔍 **Télémétrie des requêtes** | Agrégation de latence p50/p95/p99 + traçage X-Request-Id |
903
- | 📋 **Logs + Quotas** | Pages dédiées pour navigation des logs et suivi des quotas |
904
- | 🏥 **Tableau de bord santé** | Uptime, états circuit breaker, lockouts, stats cache |
905
- | 💰 **Suivi des coûts** | Gestion de budget + configuration des prix par modèle |
906
-
907
- ### ☁️ Déploiement & Synchronisation
908
-
909
- | Fonctionnalité | Ce qu'elle fait |
910
- | --------------------------------- | ------------------------------------------------------------------------------- |
911
- | 💾 **Cloud Sync** | Synchroniser les paramètres entre appareils via Cloudflare Workers |
912
- | 🌐 **Déployer partout** | Localhost, VPS, Docker, Cloudflare Workers |
913
- | 🔑 **Gestion des clés API** | Générer, faire tourner et limiter les clés API par fournisseur |
914
- | 🧙 **Assistant de configuration** | Setup guidé en 4 étapes pour les nouveaux utilisateurs |
915
- | 🔧 **Tableau de bord CLI Tools** | Configuration en un clic pour Claude, Codex, Cline, OpenClaw, Kilo, Antigravity |
916
- | 🔄 **Sauvegardes DB** | Sauvegarde et restauration automatiques de tous les paramètres |
917
-
918
- <details>
919
- <summary><b>📖 Détails des fonctionnalités</b></summary>
920
-
921
- ### 🎯 Fallback intelligent 4 niveaux
922
-
923
- Créez des combos avec fallback automatique :
924
-
925
- ```
926
- Combo : "my-coding-stack"
927
- 1. cc/claude-opus-4-6 (votre abonnement)
928
- 2. nvidia/llama-3.3-70b (API NVIDIA gratuite)
929
- 3. glm/glm-4.7 (backup économique, $0.6/1M)
930
- 4. if/kimi-k2-thinking (fallback gratuit)
931
-
932
- → Bascule automatiquement lorsque le quota est épuisé ou en cas d'erreurs
933
- ```
934
-
935
- ### 📊 Suivi des quotas en temps réel
936
-
937
- - Consommation de tokens par fournisseur
938
- - Compte à rebours de réinitialisation (5 heures, quotidien, hebdomadaire)
939
- - Estimation des coûts pour les niveaux payants
940
- - Rapports de dépenses mensuels
941
-
942
- ### 🔄 Traduction de format
943
-
944
- Traduction transparente entre les formats :
945
-
946
- - **OpenAI** ↔ **Claude** ↔ **Gemini** ↔ **OpenAI Responses**
947
- - Votre CLI envoie le format OpenAI → OmniRoute traduit → Le fournisseur reçoit le format natif
948
- - Fonctionne avec tout outil supportant les endpoints OpenAI personnalisés
949
-
950
- ### 👥 Support multi-comptes
951
-
952
- - Ajouter plusieurs comptes par fournisseur
953
- - Round-robin automatique ou routage par priorité
954
- - Basculement vers le compte suivant lorsqu'un quota est atteint
955
-
956
- ### 🔄 Renouvellement automatique des tokens
957
-
958
- - Les tokens OAuth se renouvellent automatiquement avant expiration
959
- - Pas de réauthentification manuelle nécessaire
960
- - Expérience transparente sur tous les fournisseurs
961
-
962
- ### 🎨 Combos personnalisés
963
-
964
- - Créer des combinaisons de modèles illimitées
965
- - 6 stratégies : fill-first, round-robin, power-of-two-choices, random, least-used, cost-optimized
966
- - Partager les combos entre appareils avec Cloud Sync
967
-
968
- ### 🏥 Tableau de bord santé
969
-
970
- - Statut du système (uptime, version, utilisation mémoire)
971
- - États des circuit breakers par fournisseur (Closed/Open/Half-Open)
972
- - Statut des rate limits et lockouts actifs
973
- - Statistiques du cache de signatures
974
- - Télémétrie de latence (p50/p95/p99) + cache de prompt
975
- - Réinitialisation de la santé en un clic
976
-
977
- ### 🔧 Playground du traducteur
978
-
979
- - Déboguer, tester et visualiser les traductions de format d'API
980
- - Envoyer des requêtes et voir comment OmniRoute traduit entre les formats des fournisseurs
981
- - Inestimable pour résoudre les problèmes d'intégration
982
-
983
- ### 💾 Cloud Sync
984
-
985
- - Synchroniser fournisseurs, combos et paramètres entre appareils
986
- - Synchronisation en arrière-plan automatique
987
- - Stockage chiffré sécurisé
988
-
989
- </details>
990
-
991
- ## 🧪 Évaluations (Evals)
992
-
993
- OmniRoute inclut un framework d'évaluation intégré pour tester la qualité des réponses LLM contre un golden set. Accès via **Analytics → Evals** dans le tableau de bord.
994
-
995
- ### Set intégré
996
-
997
- Le « OmniRoute Golden Set » préchargé contient 10 cas de test :
998
-
999
- - Salutations, mathématiques, géographie, génération de code
1000
- - Conformité format JSON, traduction, markdown
1001
- - Rejet de sécurité (contenu nocif), comptage, logique booléenne
1002
-
1003
- ### Stratégies d'évaluation
1004
-
1005
- | Stratégie | Description | Exemple |
1006
- | ---------- | -------------------------------------------------------------- | -------------------------------- |
1007
- | `exact` | La sortie doit correspondre exactement | `"4"` |
1008
- | `contains` | La sortie doit contenir la sous-chaîne (insensible à la casse) | `"Paris"` |
1009
- | `regex` | La sortie doit correspondre au motif regex | `"1.*2.*3"` |
1010
- | `custom` | Fonction JS personnalisée retourne true/false | `(output) => output.length > 10` |
1011
-
1012
- ---
1013
-
1014
- ## 📖 Guide de configuration
1015
-
1016
- <details>
1017
- <summary><b>💳 Fournisseurs par abonnement</b></summary>
1018
-
1019
- ### Claude Code (Pro/Max)
1020
-
1021
- ```bash
1022
- Tableau de bord → Fournisseurs → Connecter Claude Code
1023
- → Connexion OAuth → Renouvellement auto des tokens
1024
- → Suivi de quota 5h + hebdomadaire
1025
-
1026
- Modèles :
1027
- cc/claude-opus-4-6
1028
- cc/claude-sonnet-4-5-20250929
1029
- cc/claude-haiku-4-5-20251001
1030
- ```
1031
-
1032
- **Conseil Pro :** Utilisez Opus pour les tâches complexes, Sonnet pour la vitesse. OmniRoute suit les quotas par modèle !
1033
-
1034
- ### OpenAI Codex (Plus/Pro)
1035
-
1036
- ```bash
1037
- Tableau de bord → Fournisseurs → Connecter Codex
1038
- → Connexion OAuth (port 1455)
1039
- → Reset 5h + hebdomadaire
1040
-
1041
- Modèles :
1042
- cx/gpt-5.2-codex
1043
- cx/gpt-5.1-codex-max
1044
- ```
1045
-
1046
- ### Gemini CLI (GRATUIT 180K/mois !)
1047
-
1048
- ```bash
1049
- Tableau de bord → Fournisseurs → Connecter Gemini CLI
1050
- → Google OAuth
1051
- → 180K completions/mois + 1K/jour
1052
-
1053
- Modèles :
1054
- gc/gemini-3-flash-preview
1055
- gc/gemini-2.5-pro
1056
- ```
1057
-
1058
- **Meilleure valeur :** Niveau gratuit énorme ! Utilisez avant les niveaux payants.
1059
-
1060
- ### GitHub Copilot
1061
-
1062
- ```bash
1063
- Tableau de bord → Fournisseurs → Connecter GitHub
1064
- → OAuth via GitHub
1065
- → Reset mensuel (1er du mois)
1066
-
1067
- Modèles :
1068
- gh/gpt-5
1069
- gh/claude-4.5-sonnet
1070
- gh/gemini-3-pro
1071
- ```
1072
-
1073
- </details>
1074
-
1075
- <details>
1076
- <summary><b>🔑 Fournisseurs par clé API</b></summary>
1077
-
1078
- ### NVIDIA NIM (GRATUIT 1000 crédits !)
1079
-
1080
- 1. S'inscrire : [build.nvidia.com](https://build.nvidia.com)
1081
- 2. Obtenir une clé API gratuite (1000 crédits d'inférence inclus)
1082
- 3. Tableau de bord → Ajouter fournisseur → NVIDIA NIM :
1083
- - API Key : `nvapi-your-key`
1084
-
1085
- **Modèles :** `nvidia/llama-3.3-70b-instruct`, `nvidia/mistral-7b-instruct` et 50+ autres
1086
-
1087
- **Conseil Pro :** API compatible OpenAI — fonctionne parfaitement avec la traduction de format d'OmniRoute !
1088
-
1089
- ### DeepSeek
1090
-
1091
- 1. S'inscrire : [platform.deepseek.com](https://platform.deepseek.com)
1092
- 2. Obtenir une clé API
1093
- 3. Tableau de bord → Ajouter fournisseur → DeepSeek
1094
-
1095
- **Modèles :** `deepseek/deepseek-chat`, `deepseek/deepseek-coder`
1096
-
1097
- ### Groq (Niveau gratuit disponible !)
1098
-
1099
- 1. S'inscrire : [console.groq.com](https://console.groq.com)
1100
- 2. Obtenir une clé API (niveau gratuit inclus)
1101
- 3. Tableau de bord → Ajouter fournisseur → Groq
1102
-
1103
- **Modèles :** `groq/llama-3.3-70b`, `groq/mixtral-8x7b`
1104
-
1105
- **Conseil Pro :** Inférence ultra-rapide — idéal pour le codage en temps réel !
1106
-
1107
- ### OpenRouter (100+ modèles)
1108
-
1109
- 1. S'inscrire : [openrouter.ai](https://openrouter.ai)
1110
- 2. Obtenir une clé API
1111
- 3. Tableau de bord → Ajouter fournisseur → OpenRouter
1112
-
1113
- **Modèles :** Accès à 100+ modèles de tous les grands fournisseurs via une seule clé API.
1114
-
1115
- </details>
1116
-
1117
- <details>
1118
- <summary><b>💰 Fournisseurs économiques (Backup)</b></summary>
1119
-
1120
- ### GLM-4.7 (Reset quotidien, $0.6/1M)
1121
-
1122
- 1. S'inscrire : [Zhipu AI](https://open.bigmodel.cn/)
1123
- 2. Obtenir une clé API du Coding Plan
1124
- 3. Tableau de bord → Ajouter clé API :
1125
- - Fournisseur : `glm`
1126
- - API Key : `your-key`
1127
-
1128
- **Utilisez :** `glm/glm-4.7`
1129
-
1130
- **Conseil Pro :** Le Coding Plan offre 3× le quota à 1/7 du coût ! Reset quotidien à 10h.
1131
-
1132
- ### MiniMax M2.1 (Reset 5h, $0.20/1M)
1133
-
1134
- 1. S'inscrire : [MiniMax](https://www.minimax.io/)
1135
- 2. Obtenir une clé API
1136
- 3. Tableau de bord → Ajouter clé API
1137
-
1138
- **Utilisez :** `minimax/MiniMax-M2.1`
1139
-
1140
- **Conseil Pro :** L'option la moins chère pour le contexte long (1M tokens) !
1141
-
1142
- ### Kimi K2 (9 $/mois fixe)
1143
-
1144
- 1. S'abonner : [Moonshot AI](https://platform.moonshot.ai/)
1145
- 2. Obtenir une clé API
1146
- 3. Tableau de bord → Ajouter clé API
1147
-
1148
- **Utilisez :** `kimi/kimi-latest`
1149
-
1150
- **Conseil Pro :** 9 $/mois fixe pour 10M tokens = 0,90 $/1M de coût effectif !
1151
-
1152
- </details>
1153
-
1154
- <details>
1155
- <summary><b>🆓 Fournisseurs GRATUITS (Backup d'urgence)</b></summary>
1156
-
1157
- ### iFlow (8 modèles GRATUITS)
1158
-
1159
- ```bash
1160
- Tableau de bord → Connecter iFlow
1161
- → Connexion OAuth iFlow
1162
- → Utilisation illimitée
1163
-
1164
- Modèles :
1165
- if/kimi-k2-thinking
1166
- if/qwen3-coder-plus
1167
- if/glm-4.7
1168
- if/minimax-m2
1169
- if/deepseek-r1
1170
- ```
1171
-
1172
- ### Qwen (3 modèles GRATUITS)
1173
-
1174
- ```bash
1175
- Tableau de bord → Connecter Qwen
1176
- → Autorisation par code d'appareil
1177
- → Utilisation illimitée
1178
-
1179
- Modèles :
1180
- qw/qwen3-coder-plus
1181
- qw/qwen3-coder-flash
1182
- ```
1183
-
1184
- ### Kiro (Claude GRATUIT)
1185
-
1186
- ```bash
1187
- Tableau de bord → Connecter Kiro
1188
- → AWS Builder ID ou Google/GitHub
1189
- → Utilisation illimitée
1190
-
1191
- Modèles :
1192
- kr/claude-sonnet-4.5
1193
- kr/claude-haiku-4.5
1194
- ```
1195
-
1196
- </details>
1197
-
1198
- <details>
1199
- <summary><b>🎨 Créer des combos</b></summary>
1200
-
1201
- ### Exemple 1 : Maximiser l'abonnement → Backup économique
1202
-
1203
- ```
1204
- Tableau de bord → Combos → Créer nouveau
1205
-
1206
- Nom : premium-coding
1207
- Modèles :
1208
- 1. cc/claude-opus-4-6 (Abonnement principal)
1209
- 2. glm/glm-4.7 (Backup économique, $0.6/1M)
1210
- 3. minimax/MiniMax-M2.1 (Fallback le moins cher, $0.20/1M)
1211
-
1212
- Utilisez en CLI : premium-coding
1213
- ```
1214
-
1215
- ### Exemple 2 : Gratuit uniquement (Zéro coût)
1216
-
1217
- ```
1218
- Nom : free-combo
1219
- Modèles :
1220
- 1. gc/gemini-3-flash-preview (180K gratuits/mois)
1221
- 2. if/kimi-k2-thinking (illimité)
1222
- 3. qw/qwen3-coder-plus (illimité)
1223
-
1224
- Coût : 0 $ pour toujours !
1225
- ```
1226
-
1227
- </details>
1228
-
1229
- <details>
1230
- <summary><b>🔧 Intégration CLI</b></summary>
1231
-
1232
- ### Cursor IDE
1233
-
1234
- ```
1235
- Paramètres → Modèles → Avancé :
1236
- OpenAI API Base URL : http://localhost:20128/v1
1237
- OpenAI API Key : [du tableau de bord OmniRoute]
1238
- Model : cc/claude-opus-4-6
1239
- ```
1240
-
1241
- ### Claude Code
1242
-
1243
- Utilisez la page **CLI Tools** dans le tableau de bord pour la configuration en un clic, ou modifiez `~/.claude/settings.json` manuellement.
1244
-
1245
- ### Codex CLI
1246
-
1247
- ```bash
1248
- export OPENAI_BASE_URL="http://localhost:20128"
1249
- export OPENAI_API_KEY="your-omniroute-api-key"
1250
-
1251
- codex "your prompt"
1252
- ```
1253
-
1254
- ### OpenClaw
1255
-
1256
- **Option 1 — Tableau de bord (recommandé) :**
1257
-
1258
- ```
1259
- Tableau de bord → CLI Tools → OpenClaw → Sélectionner modèle → Appliquer
1260
- ```
1261
-
1262
- **Option 2 — Manuel :** Modifier `~/.openclaw/openclaw.json` :
1263
-
1264
- ```json
1265
- {
1266
- "models": {
1267
- "providers": {
1268
- "omniroute": {
1269
- "baseUrl": "http://127.0.0.1:20128/v1",
1270
- "apiKey": "sk_omniroute",
1271
- "api": "openai-completions"
1272
- }
1273
- }
1274
- }
1275
- }
1276
- ```
1277
-
1278
- > **Note :** OpenClaw fonctionne uniquement avec OmniRoute local. Utilisez `127.0.0.1` au lieu de `localhost` pour éviter les problèmes de résolution IPv6.
1279
-
1280
- ### Cline / Continue / RooCode
1281
-
1282
- ```
1283
- Paramètres → Configuration API :
1284
- Fournisseur : OpenAI Compatible
1285
- Base URL : http://localhost:20128/v1
1286
- API Key : [du tableau de bord OmniRoute]
1287
- Model : if/kimi-k2-thinking
1288
- ```
1289
-
1290
- </details>
1291
-
1292
- ---
1293
-
1294
- ## 🐛 Dépannage
1295
-
1296
- <details>
1297
- <summary><b>Cliquez pour développer le guide de dépannage</b></summary>
1298
-
1299
- **« Language model did not provide messages »**
1300
-
1301
- - Quota du fournisseur épuisé → Vérifiez le suivi de quota dans le tableau de bord
1302
- - Solution : Utilisez un combo avec fallback ou passez à un niveau moins cher
1303
-
1304
- **Rate limiting**
1305
-
1306
- - Quota d'abonnement épuisé → Fallback vers GLM/MiniMax
1307
- - Ajoutez un combo : `cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking`
1308
-
1309
- **Token OAuth expiré**
1310
-
1311
- - Renouvelé automatiquement par OmniRoute
1312
- - Si le problème persiste : Tableau de bord → Fournisseur → Reconnecter
1313
-
1314
- **Coûts élevés**
1315
-
1316
- - Vérifiez les statistiques d'utilisation dans Tableau de bord → Coûts
1317
- - Changez le modèle principal pour GLM/MiniMax
1318
- - Utilisez le niveau gratuit (Gemini CLI, iFlow) pour les tâches non critiques
1319
-
1320
- **Le tableau de bord s'ouvre sur le mauvais port**
1321
-
1322
- - Définissez `PORT=20128` et `NEXT_PUBLIC_BASE_URL=http://localhost:20128`
1323
-
1324
- **Erreurs de cloud sync**
1325
-
1326
- - Vérifiez que `BASE_URL` pointe vers votre instance en cours d'exécution
1327
- - Vérifiez que `CLOUD_URL` pointe vers le point de terminaison cloud attendu
1328
- - Gardez les valeurs `NEXT_PUBLIC_*` alignées avec les valeurs du serveur
1329
-
1330
- **Le premier login ne fonctionne pas**
1331
-
1332
- - Vérifiez `INITIAL_PASSWORD` dans `.env`
1333
- - Si non défini, le mot de passe par défaut est `123456`
1334
-
1335
- **Pas de logs de requêtes**
1336
-
1337
- - Définissez `ENABLE_REQUEST_LOGS=true` dans `.env`
1338
-
1339
- **Le test de connexion affiche « Invalid » pour les fournisseurs compatibles OpenAI**
1340
-
1341
- - Beaucoup de fournisseurs n'exposent pas le point de terminaison `/models`
1342
- - OmniRoute v1.0.6+ inclut une validation de secours via chat completions
1343
- - Assurez-vous que l'URL de base inclut le suffixe `/v1`
1344
-
1345
- </details>
1346
-
1347
- ---
1348
-
1349
- ## 🛠️
1350
-
1351
- - **Runtime** : Node.js 20+
1352
- - **Langage** : TypeScript 5.9 — **100% TypeScript** dans `src/` et `open-sse/` (v1.0.6)
1353
- - **Framework** : Next.js 16 + React 19 + Tailwind CSS 4
1354
- - **Base de données** : LowDB (JSON) + SQLite (état du domaine + logs proxy)
1355
- - **Streaming** : Server-Sent Events (SSE)
1356
- - **Auth** : OAuth 2.0 (PKCE) + JWT + API Keys
1357
- - **Tests** : Node.js test runner (368+ tests unitaires)
1358
- - **CI/CD** : GitHub Actions (publication automatique npm + Docker Hub lors du release)
1359
- - **Site web** : [omniroute.online](https://omniroute.online)
1360
- - **Package** : [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute)
1361
- - **Docker** : [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute)
1362
- - **Résilience** : Circuit breaker, backoff exponentiel, anti-thundering herd, spoofing TLS
1363
-
1364
- ---
1365
-
1366
- ## 📖 Documentation
1367
-
1368
- | Document | Description |
1369
- | ------------------------------------------ | --------------------------------------------------- |
1370
- | [Guide utilisateur](docs/USER_GUIDE.md) | Fournisseurs, combos, intégration CLI, déploiement |
1371
- | [Référence API](docs/API_REFERENCE.md) | Tous les endpoints avec exemples |
1372
- | [Dépannage](docs/TROUBLESHOOTING.md) | Problèmes courants et solutions |
1373
- | [Architecture](docs/ARCHITECTURE.md) | Architecture système et détails internes |
1374
- | [Contribuer](CONTRIBUTING.md) | Configuration de développement et directives |
1375
- | [Spécification OpenAPI](docs/openapi.yaml) | Spécification OpenAPI 3.0 |
1376
- | [Politique de sécurité](SECURITY.md) | Signalement de vulnérabilités et pratiques sécurité |
1377
-
1378
- ---
1379
-
1380
- ## 🗺️
1381
-
1382
- ## 👥 Contributeurs
1383
-
1384
- [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors)
1385
-
1386
- ### Comment contribuer
1387
-
1388
- 1. Forkez le dépôt
1389
- 2. Créez votre branche de fonctionnalité (`git checkout -b feature/amazing-feature`)
1390
- 3. Committez vos changements (`git commit -m 'Add amazing feature'`)
1391
- 4. Poussez vers la branche (`git push origin feature/amazing-feature`)
1392
- 5. Ouvrez une Pull Request
1393
-
1394
- Consultez [CONTRIBUTING.md](CONTRIBUTING.md) pour les directives détaillées.
1395
-
1396
- ### Publier une nouvelle version
1397
-
1398
- ```bash
1399
- # Créer un release — la publication npm est automatique
1400
- gh release create v1.0.6 --title "v1.0.6" --generate-notes
1401
- ```
1402
-
1403
- ---
1404
-
1405
- ## 📊 Historique des Stars
1406
-
1407
- <a href="https://star-history.com/#diegosouzapw/OmniRoute&Date">
1408
- <picture>
1409
- <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date&theme=dark" />
1410
- <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date" />
1411
- <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date" />
1412
- </picture>
1413
- </a>
1414
-
1415
- ---
1416
-
1417
- ## 🙏 Remerciements
1418
-
1419
- Remerciements spéciaux à **[9router](https://github.com/decolua/9router)** par **[decolua](https://github.com/decolua)** — le projet original qui a inspiré ce fork. OmniRoute construit sur cette base incroyable avec des fonctionnalités supplémentaires, des APIs multi-modales et une réécriture complète en TypeScript.
1420
-
1421
- Remerciements spéciaux à **[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)** — l'implémentation originale en Go qui a inspiré ce portage en JavaScript.
1422
-
1423
- ---
1424
-
1425
- ## 📄 Licence
1426
-
1427
- Licence MIT — voir [LICENSE](LICENSE) pour les détails.
1428
-
1429
- ---
1430
-
1431
- <div align="center">
1432
- <sub>Fait avec ❤️ pour les développeurs qui codent 24/7</sub>
1433
- <br/>
1434
- <sub><a href="https://omniroute.online">omniroute.online</a></sub>
1435
- </div>