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.da.md DELETED
@@ -1,1692 +0,0 @@
1
- # 🚀 OmniRoute — Den gratis AI-gateway
2
-
3
- ### Stop aldrig med at kode. Smart routing til **GRATIS og billige AI-modeller** med automatisk fallback.
4
-
5
- _Din universelle API-proxy — ét slutpunkt, 36+ udbydere, ingen nedetid. Nu med **MCP & A2A** agentorkestrering._
6
-
7
- **Chatafslutninger • Indlejringer • Billedgenerering • Video • Musik • Lyd • Genrangering • MCP-server • A2A-protokol • 100 % TypeScript**
8
-
9
- ---
10
-
11
- <div align="center">
12
-
13
- [![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute)
14
- [![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute)
15
- [![Licens](https://img.shields.io/github/license/diegosouzapw/OmniRoute)](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE)
16
- [![Websted](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online)
17
- [![WhatsApp](https://img.shields.io/badge/WhatsApp-Community-25D366?logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
18
-
19
- [🌐 Hjemmeside](https://omniroute.online) • [🚀 Hurtig start](#-quick-start) • [💡 Funktioner](#-key-features) • [📖 Docs](#-documentation) • [💡 Priser](#-pricing-at-a-glance) • [💬 WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
20
-
21
- </div>
22
-
23
- 🌐 **Tilgængelig på:** 🇺🇸 [engelsk](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) | 🇩🇪 [Tysk](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) | 🇮🇱 [engelsk](README.he.md) | 🇭🇺 [Magyar](README.hu.md) | 🇮🇩 [Bahasa Indonesien](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) | 🇵🇭 [filippinsk](README.phi.md)
24
-
25
- ---
26
-
27
- ## 🖼️ Hovedbetjeningspanel
28
-
29
- <div align="center">
30
- <img src="./docs/screenshots/MainOmniRoute.png" alt="OmniRoute Dashboard" width="800"/>
31
- </div>
32
-
33
- ---
34
-
35
- ## 📸 Dashboard Preview
36
-
37
- <details>
38
- <summary><b>Klik for at se skærmbilleder af dashboard</b></summary>
39
-
40
- | Side | Skærmbillede |
41
- | ----------------- | --------------------------------------------------- |
42
- | **Udbydere** | ![Udbydere](docs/screenshots/01-providers.png) |
43
- | **Komboer** | ![Combos](docs/screenshots/02-combos.png) |
44
- | **Analyse** | ![Analytics](docs/screenshots/03-analytics.png) |
45
- | **Sundhed** | ![Sundhed](docs/screenshots/04-health.png) |
46
- | **Oversætter** | ![Oversætter](docs/screenshots/05-translator.png) |
47
- | **Indstillinger** | ![Indstillinger](docs/screenshots/06-settings.png) |
48
- | **CLI-værktøjer** | ![CLI-værktøjer](docs/screenshots/07-cli-tools.png) |
49
- | **Brugslogfiler** | ![Brug](docs/screenshots/08-usage.png) |
50
- | **Endpunkt** | ![Endpoint](docs/screenshots/09-endpoint.png) |
51
-
52
- </details>
53
-
54
- ---
55
-
56
- ### 🚀 New in v2.0.9+ — Playground, CLI Fingerprints & ACP
57
-
58
- | Feature | What It Does |
59
- | ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
60
- | 🎮 **Model Playground** | Dashboard page to test any model directly — provider/model/endpoint selectors, Monaco Editor, streaming, abort, timing |
61
- | 🔏 **CLI Fingerprint Matching** | Per-provider header/body ordering to match native CLI signatures — toggle per provider in Settings > Security. **Your proxy IP is preserved** |
62
- | 🤝 **ACP Support (Agent Client Protocol)** | CLI agent discovery (Codex, Claude, Goose, Gemini CLI, OpenClaw), process spawner, `/api/acp/agents` endpoint |
63
- | 🤖 **ACP Agents Dashboard** | Debug > Agents page — grid of 14 agents with install status, version, custom agent form for any CLI tool |
64
- | 🔧 **Custom Model `apiFormat` Routing** | Custom models with `apiFormat: "responses"` now correctly route to the Responses API translator |
65
- | 🏢 **Codex Workspace Isolation** | Multiple Codex workspaces per email — OAuth correctly separates connections by workspace ID |
66
- | 🔄 **Electron Auto-Update** | Desktop app checks for updates + auto-install on restart |
67
-
68
- ### 🤖 Gratis AI-udbyder til dine foretrukne kodningsagenter
69
-
70
- _Tilslut ethvert AI-drevet IDE- eller CLI-værktøj gennem OmniRoute - gratis API-gateway til ubegrænset kodning._
71
-
72
- <table>
73
- <tr>
74
- <td align="center" width="110">
75
- <a href="https://github.com/openclaw/openclaw">
76
- <img src="./public/providers/openclaw.png" alt="OpenClaw" width="48"/><br/>
77
- <b>OpenClaw</b>
78
- </a><br/><sub>⭐ 205K</sub>
79
- </td>
80
- <td align="center" width="110">
81
- <a href="https://github.com/HKUDS/nanobot">
82
- <img src="./public/providers/nanobot.png" alt="NanoBot" width="48"/><br/>
83
- <b>NanoBot</b>
84
- </a><br/>
85
- <sub>⭐ 20,9K</sub>
86
- </td>
87
- <td align="center" width="110">
88
- <a href="https://github.com/sipeed/picoclaw">
89
- <img src="./public/providers/picoclaw.jpg" alt="PicoClaw" width="48"/><br/>
90
- <b>PicoClaw</b>
91
- </a><br/>
92
- <sub>⭐ 14.6K</sub>
93
- </td>
94
- <td align="center" width="110">
95
- <a href="https://github.com/zeroclaw-labs/zeroclaw">
96
- <img src="./public/providers/zeroclaw.png" alt="ZeroClaw" width="48"/><br/>
97
- <b>ZeroClaw</b>
98
- </a><br/>
99
- <sub>⭐ 9,9K</sub>
100
- </td>
101
- <td align="center" width="110">
102
- <a href="https://github.com/nearai/ironclaw">
103
- <img src="./public/providers/ironclaw.png" alt="IronClaw" width="48"/><br/>
104
- <b>IronClaw</b>
105
- </a><br/>
106
- <sub>⭐ 2.1K</sub>
107
- </td>
108
- </tr>
109
- <tr>
110
- <td align="center" width="110">
111
- <a href="https://github.com/anomalyco/opencode">
112
- <img src="./public/providers/opencode.svg" alt="OpenCode" width="48"/><br/>
113
- <b>OpenCode</b>
114
- </a><br/>
115
- <sub>⭐ 106K</sub>
116
- </td>
117
- <td align="center" width="110">
118
- <a href="https://github.com/openai/codex">
119
- <img src="./public/providers/codex.png" alt="Codex CLI" width="48"/><br/>
120
- <b>Codex CLI</b>
121
- </a><br/>
122
- <sub>⭐ 60.8K</sub>
123
- </td>
124
- <td align="center" width="110">
125
- <a href="https://github.com/anthropics/claude-code">
126
- <img src="./public/providers/claude.png" alt="Claude Code" width="48"/><br/>
127
- <b>Claude Kode</b>
128
- </a><br/>
129
- <sub>⭐ 67.3K</sub>
130
- </td>
131
- <td align="center" width="110">
132
- <a href="https://github.com/google-gemini/gemini-cli">
133
- <img src="./public/providers/gemini-cli.png" alt="Gemini CLI" width="48"/><br/>
134
- <b>Gemini CLI</b>
135
- </a><br/>
136
- <sub>⭐ 94.7K</sub>
137
- </td>
138
- <td align="center" width="110">
139
- <a href="https://github.com/Kilo-Org/kilocode">
140
- <img src="./public/providers/kilocode.png" alt="Kilo Code" width="48"/><br/>
141
- <b>Kilo-kode</b>
142
- </a><br/>
143
- <sub>⭐ 15,5K</sub>
144
- </td>
145
- </tr>
146
- </table>
147
-
148
- <sub>📡 Alle agenter opretter forbindelse via <code>http://localhost:20128/v1</code> eller <code>http://cloud.omniroute.online/v1XQZPH00 og unlimited model conf. quota</sub>
149
-
150
- ---
151
-
152
- ## 🤔 Hvorfor OmniRoute?
153
-
154
- **Stop med at spilde penge og nå grænser:**
155
-
156
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Abonnementskontingent udløber ubrugt hver måned
157
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Hastighedsgrænser stopper dig med midtkodning
158
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Dyre API'er ($20-50/måned pr. udbyder)
159
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Manuel skift mellem udbydere
160
-
161
- **OmniRoute løser dette:**
162
-
163
- - ✅ **Maksimer abonnementer** - Spor kvote, brug hver bit før nulstilling
164
- - ✅ **Automatisk fallback** - Abonnement → API-nøgle → Billig → Gratis, ingen nedetid
165
- - ✅ **Multi-konto** - Round-robin mellem konti pr. udbyder
166
- - ✅ **Universal** - Virker med Claude Code, Codex, Gemini CLI, Cursor, Cline, OpenClaw, ethvert CLI-værktøj
167
-
168
- ---
169
-
170
- ## 📧 Support> 💬 **Tilmeld dig vores fællesskab!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Få hjælp, del tips, og hold dig opdateret.
171
-
172
- - **Websted**: [omniroute.online](https://omniroute.online)
173
- - **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute)
174
- - **Problemer**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues)
175
- - **WhatsApp**: [Fællesskabsgruppe](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
176
- - **Bidrager**: Se [CONTRIBUTING.md](CONTRIBUTING.md), åbn en PR, eller vælg en `good first issue`
177
- - **Originalt projekt**: [9router af decolua](https://github.com/decolua/9router)
178
-
179
- ---
180
-
181
- ## 🔄 Sådan virker det
182
-
183
- ```
184
- ┌─────────────┐
185
- │ Your CLI │ (Claude Code, Codex, Gemini CLI, OpenClaw, Cursor, Cline...)
186
- │ Tool │
187
- └──────┬──────┘
188
- │ http://localhost:20128/v1
189
-
190
- ┌─────────────────────────────────────────┐
191
- │ OmniRoute (Smart Router) │
192
- │ • Format translation (OpenAI ↔ Claude) │
193
- │ • Quota tracking + Embeddings + Images │
194
- │ • Auto token refresh │
195
- └──────┬──────────────────────────────────┘
196
-
197
- ├─→ [Tier 1: SUBSCRIPTION] Claude Code, Codex, Gemini CLI
198
- │ ↓ quota exhausted
199
- ├─→ [Tier 2: API KEY] DeepSeek, Groq, xAI, Mistral, NVIDIA NIM, etc.
200
- │ ↓ budget limit
201
- ├─→ [Tier 3: CHEAP] GLM ($0.6/1M), MiniMax ($0.2/1M)
202
- │ ↓ budget limit
203
- └─→ [Tier 4: FREE] iFlow, Qwen, Kiro (unlimited)
204
-
205
- Result: Never stop coding, minimal cost
206
- ```
207
-
208
- ---
209
-
210
- ## 🎯 Hvad OmniRoute løser — 30 rigtige smertepunkter og brugssager
211
-
212
- > **Alle udviklere, der bruger AI-værktøjer, står over for disse problemer dagligt.** OmniRoute blev bygget til at løse dem alle - fra omkostningsoverskridelser til regionale blokke, fra ødelagte OAuth-flows til protokoloperationer og observerbarhed i virksomheden.
213
-
214
- <details>
215
- <summary><b>💸 1. "Jeg betaler for et dyrt abonnement, men bliver stadig afbrudt af grænser"</b></summary>
216
-
217
- Udviklere betaler $20-200/måned for Claude Pro, Codex Pro eller GitHub Copilot. Selv ved betaling har kvoten et loft - 5 timers brug, ugentlige grænser eller satsgrænser pr. minut. Mid-coding session, udbyderen holder op med at svare, og udvikleren mister flow og produktivitet.
218
-
219
- **Sådan løser OmniRoute det:**
220
-
221
- - **Smart 4-Tier Fallback** — Hvis abonnementskvoten løber ud, omdirigeres automatisk til API Key → Billig → Gratis uden manuel indgriben
222
- - **Kvotesporing i realtid** — Viser tokenforbrug i realtid med nulstillingsnedtælling (5 timer, dagligt, ugentligt)
223
- - **Multi-Account Support** - Flere konti pr. udbyder med automatisk round-robin - når den ene løber tør, skifter til den næste
224
- - **Custom Combos** — Tilpasselige fallback-kæder med 6 balanceringsstrategier (fill-first, round-robin, P2C, tilfældig, mindst brugt, omkostningsoptimeret)
225
- - **Codex Business Quotas** — Business/Team Workspace kvoteovervågning direkte i dashboardet
226
-
227
- </details>
228
-
229
- <details>
230
- <summary><b>🔌 2. "Jeg skal bruge flere udbydere, men hver har en forskellig API"</b></summary>
231
-
232
- OpenAI bruger et format, Claude (Antropisk) bruger et andet, Gemini endnu et andet. Hvis en udvikler ønsker at teste modeller fra forskellige udbydere eller fallback mellem dem, skal de omkonfigurere SDK'er, ændre slutpunkter, håndtere inkompatible formater. Tilpassede udbydere (FriendLI, NIM) har ikke-standardmodelslutpunkter.
233
-
234
- **Sådan løser OmniRoute det:**
235
-
236
- - **Unified Endpoint** — En enkelt `http://localhost:20128/v1` fungerer som proxy for alle 36+ udbydere
237
- - **Formatoversættelse** — Automatisk og gennemsigtig: OpenAI ↔ Claude ↔ Gemini ↔ Responses API
238
- - **Responssanering** — Fjerner ikke-standardfelter (`x_groq`, `usage_breakdown`, `service_tier`), der bryder OpenAI SDK v1.83+
239
- - **Rollenormalisering** — Konverterer `developer` → `system` for ikke-OpenAI-udbydere; `system` → `user` til GLM/ERNIE
240
- - **Think Tag Extraction** — Udtrækker `<think>`-blokke fra modeller som DeepSeek R1 til standardiseret `reasoning_content`
241
- - **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatisk konvertering
242
- - **`stream` er som standard `false`** — Justerer med OpenAI-specifikationer, og undgår uventede SSE i Python/Rust/Go SDK'er</details>
243
-
244
- <details>
245
- <summary><b>🌐 3. "Min AI-udbyder blokerer mit område/land"</b></summary>
246
-
247
- Udbydere som OpenAI/Codex blokerer adgang fra visse geografiske områder. Brugere får fejl som `unsupported_country_region_territory` under OAuth- og API-forbindelser. Dette er især frustrerende for udviklere fra udviklingslande.
248
-
249
- **Sådan løser OmniRoute det:**
250
-
251
- - **3-Level Proxy Config** — Konfigurerbar proxy på 3 niveauer: global (al trafik), pr. udbyder (kun én udbyder) og pr. forbindelse/nøgle
252
- - **Farvekodede proxy-badges** — Visuelle indikatorer: 🟢 global proxy, 🟡 udbyder proxy, 🔵 forbindelsesproxy, viser altid IP'en
253
- - **OAuth-tokenudveksling gennem proxy** — OAuth-flowet går også gennem proxyen og løser `unsupported_country_region_territory`
254
- - **Forbindelsestest via proxy** — Forbindelsestest bruger den konfigurerede proxy (ikke mere direkte omgåelse)
255
- - **SOCKS5-understøttelse** — Fuld SOCKS5-proxy-understøttelse til udgående routing
256
- - **TLS Fingerprint Spoofing** — Browserlignende TLS-fingeraftryk via `wreq-js` for at omgå botdetektion
257
-
258
- </details>
259
-
260
- <details>
261
- <summary><b>🆓 4. "Jeg vil bruge AI til kodning, men jeg har ingen penge"</b></summary>
262
-
263
- Ikke alle kan betale $20-200/måned for AI-abonnementer. Studerende, udviklere fra vækstlande, hobbyfolk og freelancere har brug for adgang til kvalitetsmodeller uden omkostninger.
264
-
265
- **Sådan løser OmniRoute det:**
266
-
267
- - **Free Tier Providers Indbygget** — Indbygget support for 100 % gratis udbydere: iFlow (8 ubegrænsede modeller), Qwen (3 ubegrænsede modeller), Kiro (Claude gratis), Gemini CLI (180K/måned gratis)
268
- - **Ollama Cloud** — Cloud-hosted Ollama models at `api.ollama.com` with free "Light usage" tier; use `ollamacloud/<model>` prefix
269
- - **Kun gratis kombinationer** — Kæde `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/måned uden nedetid
270
- - **NVIDIA NIM gratis kreditter** — 1000 gratis kreditter integreret
271
- - **Cost Optimized Strategy** — Routingstrategi, der automatisk vælger den billigste tilgængelige udbyder
272
-
273
- </details>
274
-
275
- <details>
276
- <summary><b>🔒 5. "Jeg skal beskytte min AI-gateway mod uautoriseret adgang" </b></summary>
277
-
278
- Når en AI-gateway eksponeres for netværket (LAN, VPS, Docker), kan enhver med adressen forbruge udviklerens tokens/kvote. Uden beskyttelse er API'er sårbare over for misbrug, hurtig injektion og misbrug.
279
-
280
- **Sådan løser OmniRoute det:**
281
-
282
- - **API Key Management** — Generering, rotation og scoping pr. udbyder med en dedikeret `/dashboard/api-manager` side
283
- - **Tilladelser på modelniveau** — Begræns API-nøgler til specifikke modeller (`openai/*`, jokertegnmønstre) med Tillad alt/Begræns-skift
284
- - **API Endpoint Protection** — Kræv en nøgle til `/v1/models` og bloker specifikke udbydere fra fortegnelsen
285
- - **Auth Guard + CSRF Protection** — Alle dashboard-ruter beskyttet med `withAuth` middleware + CSRF-tokens
286
- - **Rate Limiter** — Per-IP hastighedsbegrænsning med konfigurerbare vinduer
287
- - **IP-filtrering** — Tilladelsesliste/blokeringsliste til adgangskontrol
288
- - **Prompt Injection Guard** — Sanering mod ondsindede promptmønstre
289
- - **AES-256-GCM-kryptering** — Legitimationsoplysninger krypteret i hvile
290
-
291
- </details>
292
-
293
- <details>
294
- <summary><b>🛑 6. "Min udbyder gik ned, og jeg mistede mit kodningsflow"</b></summary>AI-udbydere kan blive ustabile, returnere 5xx-fejl eller ramme midlertidige hastighedsgrænser. Hvis en udvikler afhænger af en enkelt udbyder, bliver de afbrudt. Uden strømafbrydere kan gentagne genforsøg crashe programmet.
295
-
296
- **Sådan løser OmniRoute det:**
297
-
298
- - **Circuit Breaker pr. udbyder** — Automatisk åbning/lukning med konfigurerbare tærskler og nedkøling (lukket/åbent/halvt åbent)
299
- | 🎯 **Endpoint-Aware Models** | Custom models declare supported endpoints + API format |
300
- - **Eksponentiel backoff** — Progressive forsinkelser af genforsøg
301
- - **Anti-tordenbesætning** — Mutex + semaforbeskyttelse mod samtidige genforsøgsstorme
302
- - **Combo Fallback Chains** — Hvis den primære udbyder fejler, falder den automatisk gennem kæden uden indgriben
303
- - **Combo Circuit Breaker** - Deaktiverer automatisk fejlende udbydere i en kombinationskæde
304
- | 🎯 **Endpoint-Aware Models** | Custom models declare supported endpoints + API format |
305
- - **Health Dashboard** — Oppetidsovervågning, strømafbrydertilstande, lockouts, cachestatistik, p50/p95/p99 latency
306
-
307
- </details>
308
-
309
- <details>
310
- <summary><b>🔧 7. "Konfiguration af hvert AI-værktøj er trættende og gentagende" </b></summary>
311
-
312
- Udviklere bruger Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Hvert værktøj har brug for en anden konfiguration (API-endepunkt, nøgle, model). At omkonfigurere, når du skifter udbyder eller model, er spild af tid.
313
-
314
- **Sådan løser OmniRoute det:**
315
-
316
- - **CLI Tools Dashboard** — Dedikeret side med et-klik opsætning til Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline
317
- - **GitHub Copilot Config Generator** — Genererer `chatLanguageModels.json` til VS-kode med bulk modelvalg
318
- - **Onboarding Wizard** — Guidet 4-trins opsætning for førstegangsbrugere
319
- - **Ét slutpunkt, alle modeller** — Konfigurer `http://localhost:20128/v1` én gang, få adgang til 36+ udbydere
320
-
321
- </details>
322
-
323
- <details>
324
- <summary><b>🔑 8. "Administration af OAuth-tokens fra flere udbydere er et helvede" </b></summary>
325
-
326
- Claude Code, Codex, Gemini CLI, Copilot - alle bruger OAuth 2.0 med udløbende tokens. Udviklere skal re-godkende konstant, håndtere `client_secret is missing`, `redirect_uri_mismatch` og fejl på fjernservere. OAuth på LAN/VPS er særligt problematisk.
327
-
328
- **Sådan løser OmniRoute det:**
329
-
330
- - **Automatisk tokenopdatering** — OAuth-tokens opdateres i baggrunden før udløb
331
- - **OAuth 2.0 (PKCE) Indbygget** — Automatisk flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow
332
- - **Multi-Account OAuth** — Flere konti pr. udbyder via JWT/ID-tokenudtrækning
333
- - **OAuth LAN/Remote Fix** — Privat IP-detektion for `redirect_uri` + manuel URL-tilstand til fjernservere
334
- - **OAuth Behind Nginx** — Bruger `window.location.origin` til omvendt proxykompatibilitet
335
- - **Remote OAuth Guide** — Trin-for-trin guide til Google Cloud-legitimationsoplysninger på VPS/Docker
336
-
337
- </details>
338
-
339
- <details>
340
- <summary><b>📊 9. "Jeg ved ikke, hvor meget jeg bruger eller hvor" </b></summary>
341
-
342
- Udviklere bruger flere betalte udbydere, men har ikke noget samlet syn på udgifter. Hver udbyder har sit eget faktureringsdashboard, men der er ingen konsolideret visning. Uventede omkostninger kan hobe sig op.
343
-
344
- **Sådan løser OmniRoute det:**
345
-
346
- - **Dashboard for omkostningsanalyse** — omkostningssporing pr. token og budgetstyring pr. udbyder
347
- - **Budgetgrænser pr. niveau** — Udgiftsloft pr. niveau, der udløser automatisk fallback
348
- - **Priskonfiguration pr. model** — Konfigurerbare priser pr. model- **Brugsstatistik pr. API-nøgle** — Antal anmodninger og sidst anvendte tidsstempel pr. nøgle
349
- - **Analytics Dashboard** — Statiske kort, modelbrugsdiagram, udbydertabel med succesrater og latens
350
-
351
- </details>
352
-
353
- <details>
354
- <summary><b>🐛 10. "Jeg kan ikke diagnosticere fejl og problemer i AI-opkald"</b></summary>
355
-
356
- Når et opkald mislykkes, ved udvikleren ikke, om det var en takstgrænse, udløbet token, forkert format eller udbyderfejl. Fragmenterede logfiler på tværs af forskellige terminaler. Uden observerbarhed er fejlfinding trial-and-error.
357
-
358
- **Sådan løser OmniRoute det:**
359
-
360
- - **Unified Logs Dashboard** — 4 faner: Request Logs, Proxy Logs, Audit Logs, Console
361
- - **Console Log Viewer** — Realtidsterminal-fremviser med farvekodede niveauer, automatisk rulning, søg, filtrer
362
- - **SQLite Proxy Logs** — Vedvarende logfiler, der overlever servergenstarter
363
- - **Oversætterlegeplads** — 4 fejlfindingstilstande: Legeplads (formatoversættelse), Chattester (rundtur), Testbænk (batch), Live Monitor (realtid)
364
- - **Request Telemetri** — p50/p95/p99 latency + X-Request-Id-sporing
365
- - **Filbaseret logning med rotation** — Konsolinterceptor fanger alt til JSON-log med størrelsesbaseret rotation
366
-
367
- </details>
368
-
369
- <details>
370
- <summary><b>🏗️ 11. "Deployering og vedligeholdelse af gatewayen er kompleks" </b></summary>
371
-
372
- Installation, konfiguration og vedligeholdelse af en AI-proxy på tværs af forskellige miljøer (lokalt, VPS, Docker, cloud) er arbejdskrævende. Problemer som hårdkodede stier, `EACCES` på mapper, portkonflikter og cross-platform builds tilføjer friktion.
373
-
374
- **Sådan løser OmniRoute det:**
375
-
376
- - **npm global installation** — `npm install -g omniroute && omniroute` — udført
377
- - **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi)
378
- - **Docker Compose Profiles** — `base` (ingen CLI-værktøjer) og `cli` (med Claude Code, Codex, OpenClaw)
379
- - **Electron Desktop App** — Indbygget app til Windows/macOS/Linux med systembakke, autostart, offlinetilstand
380
- - **Split-Port Mode** — API og Dashboard på separate porte til avancerede scenarier (omvendt proxy, containernetværk)
381
- - **Cloud Sync** — Konfigurer synkronisering på tværs af enheder via Cloudflare Workers
382
- - **DB Backups** — Automatisk backup, gendannelse, eksport og import af alle indstillinger
383
-
384
- </details>
385
-
386
- <details>
387
- <summary><b>🌍 12. "Grænsefladen er kun engelsk, og mit team taler ikke engelsk"</b></summary>
388
-
389
- Hold i ikke-engelsktalende lande, især i Latinamerika, Asien og Europa, kæmper med grænseflader, der kun er på engelsk. Sprogbarrierer reducerer adoption og øger konfigurationsfejl.
390
-
391
- **Sådan løser OmniRoute det:**
392
-
393
- - **Dashboard i18n — 30 sprog** — Alle 500+ taster oversat, inklusive arabisk, bulgarsk, dansk, tysk, spansk, finsk, fransk, hebraisk, hindi, ungarsk, indonesisk, italiensk, japansk, koreansk, malaysisk, hollandsk, norsk, polsk, portugisisk (PT/BR), rumænsk, russisk, ukrainsk, kinesisk, ukrainsk, kinesisk, kinesisk, ukrainsk, kinesisk, ukrainsk, kinesisk, ukrainsk, svensk, Vietnam, Vietnam
394
- - **RTL-understøttelse** — Højre-til-venstre-understøttelse for arabisk og hebraisk
395
- - **Multi-Language READMEs** — 30 komplette dokumentationsoversættelser
396
- - **Sprogvælger** — Globusikon i overskriften til skift i realtid</details>
397
-
398
- <details>
399
- <summary><b>🔄 13. "Jeg har brug for mere end chat — jeg har brug for indlejringer, billeder, lyd"</b></summary>
400
-
401
- AI er ikke kun fuldførelse af chat. Udviklere skal generere billeder, transskribere lyd, oprette indlejringer til RAG, omrangere dokumenter og moderere indhold. Hver API har et andet slutpunkt og format.
402
-
403
- **Sådan løser OmniRoute det:**
404
-
405
- - **Indlejringer** — `/v1/embeddings` med 6 udbydere og 9+ modeller
406
- - **Billedgenerering** — `/v1/images/generations` med 10 udbydere og 20+ modeller (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI)
407
- - **Tekst-til-video** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) og SD WebUI
408
- - **Tekst-til-musik** — `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen)
409
- - **Lydtransskription** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3
410
- - **Tekst-til-tale** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, Inworld, Cartesia, PlayHT, + eksisterende udbydere
411
- - **Moderationer** — `/v1/moderations` — Indholdssikkerhedstjek
412
- - **Omrangering** — `/v1/rerank` — Omrangering af dokumentrelevans
413
- - **Responses API** — Fuld `/v1/responses`-understøttelse af Codex
414
-
415
- </details>
416
-
417
- <details>
418
- <summary><b>🧪 14. "Jeg har ingen måde at teste og sammenligne kvalitet på tværs af modeller" </b></summary>
419
-
420
- Udviklere vil gerne vide, hvilken model der er bedst til deres brug - kode, oversættelse, ræsonnement - men manuel sammenligning er langsom. Der findes ingen integrerede evalueringsværktøjer.
421
-
422
- **Sådan løser OmniRoute det:**
423
-
424
- - **LLM-evalueringer** — Gyldne sæt-test med 10 forudindlæste cases, der dækker hilsner, matematik, geografi, kodegenerering, JSON-overholdelse, oversættelse, markdown, sikkerhedsafvisning
425
- - **4 matchstrategier** — `exact`, `contains`, `regex`, `custom` (JS-funktion)
426
- - **Translator Playground Test Bench** — Batchtest med flere input og forventede output, sammenligning på tværs af udbydere
427
- - **Chattester** — Fuld rundtur med visuel responsgengivelse
428
- - **Live Monitor** — Realtidsstream af alle anmodninger, der flyder gennem proxyen
429
-
430
- </details>
431
-
432
- <details>
433
- <summary><b>📈 15. "Jeg har brug for at skalere uden at miste ydeevne" </b></summary>
434
-
435
- Efterhånden som forespørgselsvolumen vokser, genererer de samme spørgsmål duplikerede omkostninger uden cache. Uden idempotens, dublerede anmodninger om affaldsbehandling. Takstgrænser pr. udbyder skal overholdes.
436
-
437
- **Sådan løser OmniRoute det:**
438
-
439
- - **Semantisk cache** — To-lags cache (signatur + semantisk) reducerer omkostninger og latens
440
- - **Request Idempotency** — 5s deduplikeringsvindue for identiske anmodninger
441
- - **Detektion af hastighedsgrænse** — RPM pr. udbyder, min. gap og maks. samtidig sporing
442
- - **Redigerbare hastighedsgrænser** — Konfigurerbare standardindstillinger i Indstillinger → Modstandsdygtighed med vedholdenhed
443
- - **API Key Validation Cache** — 3-lags cache til produktionsydeevne
444
- - **Health Dashboard med telemetri** — p50/p95/p99 latency, cachestatistik, oppetid
445
-
446
- </details>
447
-
448
- <details>
449
- <summary><b>🤖 16. "Jeg vil kontrollere modeladfærd globalt" </b></summary>Udviklere, der ønsker alle svar på et bestemt sprog, med en bestemt tone, eller ønsker at begrænse ræsonnementstokens. Det er upraktisk at konfigurere dette i hvert værktøj/anmodning.
450
-
451
- **Sådan løser OmniRoute det:**
452
-
453
- - **System Prompt Injection** — Global prompt anvendt på alle anmodninger
454
- - **Thinking Budget Validation** — Reasoning token allocation control pr. anmodning (passthrough, auto, custom, adaptive)
455
- - **6 Routing Strategies** — Globale strategier, der bestemmer, hvordan anmodninger distribueres
456
- - **Wildcard-router** — `provider/*`-mønstre ruter dynamisk til enhver udbyder
457
- - **Kombo Aktiver/Deaktiver Til/fra** — Skift kombinationer direkte fra dashboardet
458
- - **Tilskiftning af udbyder** — Aktiver/deaktiver alle forbindelser for en udbyder med et enkelt klik
459
- - **Blokerede udbydere** — Ekskluder specifikke udbydere fra `/v1/models`-fortegnelsen
460
-
461
- </details>
462
-
463
- <details>
464
- <summary><b>🧰 17. "Jeg har brug for MCP-værktøjer som førsteklasses produktegenskaber" </b></summary>
465
-
466
- Mange AI-gateways afslører kun MCP som en skjult implementeringsdetalje. Teams har brug for et synligt, overskueligt operationslag.
467
-
468
- **Sådan løser OmniRoute det:**
469
-
470
- - MCP vises på fanen dashboardnavigation og endepunktsprotokol
471
- - Dedikeret MCP-administrationsside med proces, værktøjer, omfang og revision
472
- - Indbygget hurtigstart til `omniroute --mcp` og klient onboarding
473
-
474
- </details>
475
-
476
- <details>
477
- <summary><b>🧠 18. "Jeg har brug for A2A-orkestrering med synkronisering + streamopgavestier"</b></summary>
478
-
479
- Agentarbejdsgange kræver både direkte svar og langvarig streamet udførelse med livscykluskontrol.
480
-
481
- **Sådan løser OmniRoute det:**
482
-
483
- - A2A JSON-RPC slutpunkt (`POST /a2a`) med `message/send` og `message/stream`
484
- - SSE-streaming med udbredelse af terminaltilstand
485
- - Task lifecycle API'er til `tasks/get` og `tasks/cancel`
486
-
487
- </details>
488
-
489
- <details>
490
- <summary><b>🛰️ 19. "Jeg har brug for ægte MCP-processundhed, ikke gættet status"</b></summary>
491
-
492
- Operationelle teams skal vide, om MCP faktisk er i live, ikke kun om en API er tilgængelig.
493
-
494
- **Sådan løser OmniRoute det:**
495
-
496
- - Runtime-hjerteslagsfil med PID, tidsstempler, transport, værktøjstælling og omfangstilstand
497
- - MCP status API, der kombinerer hjerteslag + seneste aktivitet
498
- - UI-statuskort til proces/oppetid/hjerteslagsfriskhed
499
-
500
- </details>
501
-
502
- <details>
503
- <summary><b>📋 20. "Jeg har brug for revisionsbar MCP-værktøjsudførelse"</b></summary>
504
-
505
- Når værktøjer muterer konfiguration eller udløser ops-handlinger, har teams brug for retsmedicinsk sporbarhed.
506
-
507
- **Sådan løser OmniRoute det:**
508
-
509
- - SQLite-støttet revisionslogning for MCP-værktøjsopkald
510
- - Filtrerer efter værktøj, succes/fiasko, API-nøgle og paginering
511
- - Dashboard revisionstabel + statistik slutpunkter til automatisering
512
-
513
- </details>
514
-
515
- <details>
516
- <summary><b>🔐 21. "Jeg har brug for scoped MCP-tilladelser pr. integration" </b></summary>
517
-
518
- Forskellige klienter bør have mindst privilegeret adgang til værktøjskategorier.
519
-
520
- **Sådan løser OmniRoute det:**
521
-
522
- - 9 granulære MCP-skoper til kontrolleret værktøjsadgang
523
- - Håndhævelse af omfang og synlighed i MCP management UI
524
- - Sikker standardstilling for operationelt værktøj
525
-
526
- </details>
527
-
528
- <details><summary><b>⚙️ 22. "Jeg har brug for operationelle kontroller uden omfordeling" </b></summary>
529
-
530
- Teams har brug for hurtige runtime-ændringer under hændelser eller omkostningsbegivenheder.
531
-
532
- **Sådan løser OmniRoute det:**
533
-
534
- - Skift kombinationsaktivering direkte fra MCP-dashboard
535
- - Anvend modstandsdygtighedsprofiler fra foruddefinerede politikpakker
536
- - Nulstil strømafbrydertilstand fra det samme betjeningspanel
537
-
538
- </details>
539
-
540
- <details>
541
- <summary><b>🔄 23. "Jeg har brug for live A2A opgave livscyklus synlighed og annullering" </b></summary>
542
-
543
- Uden livscyklussynlighed bliver opgavehændelser svære at triage.
544
-
545
- **Sådan løser OmniRoute det:**
546
-
547
- - Opgaveliste/filtrering efter tilstand/færdighed med paginering
548
- - Drill-down på opgavemetadata, hændelser og artefakter
549
- - Slutpunkt for annullering af opgave og UI-handling med bekræftelse
550
-
551
- </details>
552
-
553
- <details>
554
- <summary><b>🌊 24. "Jeg har brug for aktive stream-metrics for A2A-indlæsning"</b></summary>
555
-
556
- Streaming-arbejdsgange kræver operationel indsigt i samtidighed og live-forbindelser.
557
-
558
- **Sådan løser OmniRoute det:**
559
-
560
- - Aktive stream-tællere integreret i A2A-status
561
- - Tidsstempel for sidste opgave og tæller pr. stat
562
- - A2A dashboard-kort til operationsovervågning i realtid
563
-
564
- </details>
565
-
566
- <details>
567
- <summary><b>🪪 25. "Jeg har brug for standardagentopdagelse til klienter"</b></summary>
568
-
569
- Eksterne klienter og orkestratorer har brug for maskinlæsbare metadata til onboarding.
570
-
571
- **Sådan løser OmniRoute det:**
572
-
573
- - Agentkort afsløret på `/.well-known/agent.json`
574
- - Evner og færdigheder vist i ledelsens brugergrænseflade
575
- - A2A status API inkluderer opdagelsesmetadata til automatisering
576
-
577
- </details>
578
-
579
- <details>
580
- <summary><b>🧭 26. "Jeg har brug for protokolsynlighed i produktets UX"</b></summary>
581
-
582
- Hvis brugere ikke kan opdage protokoloverflader, falder kvaliteten af adoption og support.
583
-
584
- **Sådan løser OmniRoute det:**
585
-
586
- - Sidebar-indgange til MCP og A2A
587
- - Endpoint-siden Protokoller-fane med hurtig start og status
588
- - Links fra oversigt til dedikerede ledelsesdashboards
589
-
590
- </details>
591
-
592
- <details>
593
- <summary><b>🧪 27. "Jeg har brug for end-to-end protokolvalidering med rigtige klienter" </b></summary>
594
-
595
- Mock-tests er ikke nok til at validere protokolkompatibilitet før frigivelse.
596
-
597
- **Sådan løser OmniRoute det:**
598
-
599
- - E2E-pakke, der starter app og bruger ægte MCP SDK-klienttransport
600
- - A2A klient tester for opdagelse, send, stream, hent og annuller flows
601
- - Krydstjek påstande mod MCP-revision og A2A-opgaver API'er
602
-
603
- </details>
604
-
605
- <details>
606
- <summary><b>📡 28. "Jeg har brug for samlet observerbarhed på tværs af alle grænseflader"</b></summary>
607
-
608
- Opdeling af observerbarhed efter protokol skaber blinde pletter og længere MTTR.
609
-
610
- **Sådan løser OmniRoute det:**
611
-
612
- - Samlede dashboards/logfiler/analyse i ét produkt
613
- - Health + audit + request telemetri på tværs af OpenAI, MCP og A2A lag
614
- - Operationelle API'er til status og automatisering
615
-
616
- </details>
617
-
618
- <details>
619
- <summary><b>💼 29. "Jeg har brug for én køretid til proxy + værktøjer + agentorkestrering" </b></summary>
620
-
621
- At køre mange separate tjenester øger driftsomkostninger og fejltilstande.
622
-
623
- **Sådan løser OmniRoute det:**- OpenAI-kompatibel proxy, MCP-server og A2A-server i én stak
624
-
625
- - Delt godkendelse, robusthed, datalager og observerbarhed
626
- - Ensartet politikmodel på tværs af alle interaktionsflader
627
-
628
- </details>
629
-
630
- <details>
631
- <summary><b>🚀 30. "Jeg har brug for at sende agentiske arbejdsgange uden limkodesprawl" </b></summary>
632
-
633
- Hold mister hastighed, når de sammensætter flere ad-hoc-tjenester og scripts.
634
-
635
- **Sådan løser OmniRoute det:**
636
-
637
- - Ensartet slutpunktsstrategi for kunder og agenter
638
- - Indbygget protokolstyring UI'er og røgvalideringsstier
639
- - Produktionsklare fundamenter (sikkerhed, logning, robusthed, backup)
640
-
641
- </details>
642
-
643
- ### Eksempler på Playbooks
644
-
645
- **Playbook A: Maksimer betalt abonnement + billig backup**
646
-
647
- ```txt
648
- Combo: "maximize-claude"
649
- 1. cc/claude-opus-4-6
650
- 2. glm/glm-4.7
651
- 3. if/kimi-k2-thinking
652
-
653
- Monthly cost: $20 + small backup spend
654
- Outcome: higher quality, near-zero interruption
655
- ```
656
-
657
- **Playbook B: Gratis kodningsstak**
658
-
659
- ```txt
660
- Combo: "free-forever"
661
- 1. gc/gemini-3-flash
662
- 2. if/kimi-k2-thinking
663
- 3. qw/qwen3-coder-plus
664
-
665
- Monthly cost: $0
666
- Outcome: stable free coding workflow
667
- ```
668
-
669
- **Playbook C: 24/7 altid aktiv reservekæde**
670
-
671
- ```txt
672
- Combo: "always-on"
673
- 1. cc/claude-opus-4-6
674
- 2. cx/gpt-5.2-codex
675
- 3. glm/glm-4.7
676
- 4. minimax/MiniMax-M2.1
677
- 5. if/kimi-k2-thinking
678
-
679
- Outcome: deep fallback depth for deadline-critical workloads
680
- ```
681
-
682
- **Playbook D: Agent ops med MCP + A2A**
683
-
684
- ```txt
685
- 1) Start MCP transport (`omniroute --mcp`) for tool-driven operations
686
- 2) Run A2A tasks via `message/send` and `message/stream`
687
- 3) Observe via /dashboard/mcp and /dashboard/a2a
688
- 4) Control incidents with resilience profile + task cancellation
689
- ```
690
-
691
- ---
692
-
693
- ## ⚡ Hurtig start
694
-
695
- ### 1) Installer og kør
696
-
697
- ```bash
698
- npm install -g omniroute
699
- omniroute
700
- ```
701
-
702
- Dashboard åbner ved `http://localhost:20128`, og API-base-URL er `http://localhost:20128/v1`.
703
-
704
- | Kommando | Beskrivelse |
705
- | ----------------------- | ----------------------------------------------------------- |
706
- | `omniroute` | Start server (`PORT=20128`, API og dashboard på samme port) |
707
- | `omniroute --port 3000` | Indstil kanonisk/API-port til 3000 |
708
- | `omniroute --mcp` | Start MCP-server (stdio-transport) |
709
- | `omniroute --no-open` | Åbn ikke browseren automatisk |
710
- | `omniroute --help` | Vis hjælp |
711
-
712
- Valgfri split-port-tilstand:
713
-
714
- ```bash
715
- PORT=20128 DASHBOARD_PORT=20129 omniroute
716
- # API: http://localhost:20128/v1
717
- # Dashboard: http://localhost:20129
718
- ```
719
-
720
- ### 2) Tilslut udbydere og opret din API-nøgle
721
-
722
- 1. Åbn Dashboard → `Providers` og tilslut mindst én udbyder (OAuth- eller API-nøgle).
723
- 2. Åbn Dashboard → `Endpoint` og opret en API-nøgle.
724
- 3. (Valgfrit) Åbn Dashboard → `Combos` og indstil din reservekæde.
725
-
726
- ### 3) Peg dit kodningsværktøj til OmniRoute
727
-
728
- ```txt
729
- Base URL: http://localhost:20128/v1
730
- API Key: [copy from Endpoint page]
731
- Model: if/kimi-k2-thinking (or any provider/model prefix)
732
- ```
733
-
734
- Fungerer med Claude Code, Codex CLI, Gemini CLI, Cursor, Cline, OpenClaw, OpenCode og OpenAI-kompatible SDK'er.
735
-
736
- ### 4) Aktiver og valider protokoller (v2.0)
737
-
738
- **MCP (til værktøjsdrevne operationer):**
739
-
740
- ```bash
741
- omniroute --mcp
742
- ```
743
-
744
- Tilslut derefter din MCP-klient over `stdio` og test værktøjer som:
745
-
746
- - `omniroute_get_health`
747
- - `omniroute_list_combos`
748
-
749
- **A2A (for agent-til-agent arbejdsgange):**
750
-
751
- ```bash
752
- curl http://localhost:20128/.well-known/agent.json
753
- ```
754
-
755
- ```bash
756
- curl -X POST http://localhost:20128/a2a \
757
- -H 'content-type: application/json' \
758
- -d '{"jsonrpc":"2.0","id":"quickstart","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Give me a short quota summary."}]}}'
759
- ```
760
-
761
- ### 5) Valider alt ende-til-ende (anbefales)
762
-
763
- ```bash
764
- npm run test:protocols:e2e
765
- ```
766
-
767
- Denne suite validerer rigtige MCP- og A2A-klientstrømme mod en kørende app.
768
-
769
- ### Alternativ: Kør fra kilden
770
-
771
- ```bash
772
- cp .env.example .env
773
- npm install
774
- PORT=20128 DASHBOARD_PORT=20129 NEXT_PUBLIC_BASE_URL=http://localhost:20129 npm run dev
775
- ```
776
-
777
- ---
778
-
779
- ## 🐳 Docker
780
-
781
- OmniRoute er tilgængelig som et offentligt Docker-billede på [Docker Hub](https://hub.docker.com/r/diegosouzapw/omniroute).
782
-
783
- **Hurtigt løb:**
784
-
785
- ```bash
786
- docker run -d \
787
- --name omniroute \
788
- --restart unless-stopped \
789
- -p 20128:20128 \
790
- -v omniroute-data:/app/data \
791
- diegosouzapw/omniroute:latest
792
- ```
793
-
794
- **Med miljøfil:**
795
-
796
- ```bash
797
- # Copy and edit .env first
798
- cp .env.example .env
799
-
800
- docker run -d \
801
- --name omniroute \
802
- --restart unless-stopped \
803
- --env-file .env \
804
- -p 20128:20128 \
805
- -v omniroute-data:/app/data \
806
- diegosouzapw/omniroute:latest
807
- ```
808
-
809
- **Brug af Docker Compose:**
810
-
811
- ```bash
812
- # Base profile (no CLI tools)
813
- docker compose --profile base up -d
814
-
815
- # CLI profile (Claude Code, Codex, OpenClaw built-in)
816
- docker compose --profile cli up -d
817
- ```
818
-
819
- | Billede | Tag | Størrelse | Beskrivelse |
820
- | ------------------------ | -------- | --------- | ------------------------- |
821
- | `diegosouzapw/omniroute` | `latest` | ~250MB | Seneste stabile udgivelse |
822
- | `diegosouzapw/omniroute` | `1.0.3` | ~250MB | Nuværende version |
823
-
824
- ---
825
-
826
- ## 🖥️
827
-
828
- Kør OmniRoute som en selvstændig desktop-app - ingen terminal, ingen browser, intet internet påkrævet for lokale modeller. Den elektronbaserede app inkluderer:
829
-
830
- - 🖥️ **Native Window** — Dedikeret appvindue med systembakkeintegration
831
- - 🔄 **Auto-Start** — Start OmniRoute ved systemlogin
832
- - 🔔 **Native notifikationer** — Få advarsler om kvoteopbrugt eller udbyderproblemer
833
- - ⚡ **One-Click Install** — NSIS (Windows), DMG (macOS), AppImage (Linux)
834
- - 🌐 **Offline-tilstand** — Fungerer fuldt ud offline med medfølgende server
835
-
836
- ### Hurtig start
837
-
838
- ```bash
839
- # Development mode
840
- npm run electron:dev
841
-
842
- # Build for your platform
843
- npm run electron:build # Current platform
844
- npm run electron:build:win # Windows (.exe)
845
- npm run electron:build:mac # macOS (.dmg) — x64 & arm64
846
- npm run electron:build:linux # Linux (.AppImage)
847
- ```
848
-
849
- ### Systembakke
850
-
851
- Når den er minimeret, lever OmniRoute i din procesbakke med hurtige handlinger:
852
-
853
- - Åbn instrumentbrættet
854
- - Skift serverport
855
- - Afslut programmet
856
-
857
- 📖 Fuld dokumentation: [`electron/README.md`](electron/README.md)
858
-
859
- ---
860
-
861
- ## 💰 Prissætning på et øjeblik
862
-
863
- | Tier | Udbyder | Omkostninger | Kvote nulstil | Bedst til |
864
- | ----------------- | ----------------- | --------------------------- | ------------------ | -------------------------- |
865
- | **💳 ABONNEMENT** | Claude Code (Pro) | 20 USD/md. | 5 timer + ugentlig | Allerede abonneret |
866
- | | Codex (Plus/Pro) | $20-200/md. | 5 timer + ugentlig | OpenAI-brugere |
867
- | | Gemini CLI | **GRATIS** | 180K/md + 1K/dag | Alle sammen! |
868
- | | GitHub Copilot | $10-19/md. | Månedlig | GitHub-brugere |
869
- | **🔑 API NØGLE** | NVIDIA NIM | **GRATIS** (1000 kreditter) | Engangs | Gratis tier test |
870
- | | DeepSeek | Betal pr. brug | Ingen | Bedste pris/kvalitet |
871
- | | Groq | Gratis niveau + betalt | Sats begrænset | Ultrahurtig slutning |
872
- | | xAI (Grok) | Betal pr. brug | Ingen | Grok modeller |
873
- | | Mistral | Gratis niveau + betalt | Sats begrænset | Europæisk AI |
874
- | | OpenRouter | Betal pr. brug | Ingen | 100+ modeller |
875
- | **💰 BILLIG** | GLM-4.7 | 0,6 USD/1 mio. | Dagligt 10:00 | Budget backup |
876
- | | MiniMax M2.1 | $0,2/1 mio. | 5-timers rullende | Billigste mulighed |
877
- | | Kimi K2 | 9 USD/md. lejlighed | 10M tokens/md. | Forudsigelige omkostninger |
878
- | **🆓 GRATIS** | iFlow | $0 | Ubegrænset | 8 modeller gratis |
879
- | | Qwen | $0 | Ubegrænset | 3 modeller gratis |
880
- | | Kiro | $0 | Ubegrænset | Claude gratis |
881
-
882
- **💡 Pro-tip:** Start med Gemini CLI (180K gratis/måned) + iFlow (ubegrænset gratis) combo = $0 omkostninger!
883
-
884
- ---
885
-
886
- ## 💡 Nøglefunktioner
887
-
888
- OmniRoute v2.0 er bygget som en operationel platform, ikke kun en relæ-proxy.
889
-
890
- ### 🤖 Agent- og protokoloperationer (v2.0)| Funktion | Hvad det gør |
891
-
892
- | ------------------------------------ | ---------------------------------------------------------------------------------- |
893
- | 🔧 **MCP-server (16 værktøjer)** | IDE/agent-værktøjer kontrollerer routing, sundhed, kombinationer, grænser og operationer | IDE/agent tools via 3 transports: stdio, SSE (`/api/mcp/sse`), Streamable HTTP (`/api/mcp/stream`)
894
- | 🤝 **A2A-server (JSON-RPC + SSE)** | Agent-til-agent opgaveudførelse med synkronisering og streaming flows |
895
- | 🧭 **Consolidated Endpoints Page** | Dedikerede administrationssider (`/dashboard/mcp`, `/dashboard/a2a`) |
896
- | 🎚️ **Service Enable/Disable Toggles** | ON/OFF switches for MCP and A2A with settings persistence (default: OFF) |
897
- | 🛰️ **MCP Runtime Heartbeat** | Reel processtatus (pid, oppetid, hjerteslagsalder, transport, omfangstilstand) |
898
- | 📋 **MCP Audit Trail** | Filtrerbare revisionslogfiler med succes/fejl og nøgletilskrivning |
899
- | 🔐 **MCP Scope Enforcement** | 9 granulære omfangstilladelser til kontrolleret værktøjsadgang |
900
- | 📡 **A2A Task Lifecycle Management** | Liste/filtrere opgaver, inspicere hændelser/artefakter, annullere kørende opgaver |
901
- | 📋 **Agent Card Discovery** | `/.well-known/agent.json` til klientens automatiske opdagelse |
902
- | 🧪 **Protokol E2E testsele** | Ægte MCP SDK + A2A klientstrømme i `test:protocols:e2e` |
903
- | ⚙️ **Driftskontrol** | Switch combo, påfør elasticitetsprofiler, nulstil afbrydere fra én kontrolflade |
904
-
905
- ### 🧠 Routing og intelligens
906
-
907
- | Funktion | Hvad det gør |
908
- | ----------------------------------- | ------------------------------------------------------------------------------- |
909
- | 🎯 **Smart 4-lags fallback** | Auto-rute: Abonnement → API-nøgle → Billig → Gratis |
910
- | 📊 **Kvotesporing i realtid** | Live token count + nulstil nedtælling pr. udbyder |
911
- | 🔄 **Formatoversættelse** | OpenAI ↔ Claude ↔ Gemini ↔ Svar med skemasikre konverteringer |
912
- | 👥 **Multi-Account Support** | Flere konti pr. udbyder med intelligent valg |
913
- | 🔄 **Automatisk token-opdatering** | OAuth-tokens opdateres automatisk med genforsøg |
914
- | 🎨 **Tilpassede kombinationer** | 6 balanceringsstrategier + fallback kædekontrol |
915
- | 🌐 **Wildcard-router** | `provider/*` dynamisk routing |
916
- | 🧠 **Tænker på budgetkontrol** | Grænser for gennemstrømning, automatisk, brugerdefineret og adaptiv ræsonnement |
917
- | 🔀 **Modelaliaser** | Indbygget + brugerdefineret model aliasing og migration sikkerhed |
918
- | ⚡ **Baggrundsforringelse** | Send baggrundsopgaver med lav prioritet til billigere modeller |
919
- | 💬 **System Prompt Injection** | Globale adfærdskontroller anvendes konsekvent |
920
- | 📄 **Responses API-kompatibilitet** | Fuld `/v1/responses`-understøttelse af Codex og avancerede agentarbejdsgange |
921
-
922
- ### 🎵 Multi-Modal API'er
923
-
924
- | Funktion | Hvad det gør || -------------------------- | -------------------------------------------------------------------- |
925
- | 🖼️ **Billedgenerering** | `/v1/images/generations` med cloud og lokale backends |
926
- | 📐 **Indlejringer** | `/v1/embeddings` til søgning og RAG-rørledninger |
927
- | 🎤 **Lydtransskription** | `/v1/audio/transcriptions` (Whisper og yderligere udbydere) |
928
- | 🔊 **Tekst-til-tale** | `/v1/audio/speech` (flere motorer/udbydere) |
929
- | 🎬 **Videogenerering** | `/v1/videos/generations` (ComfyUI + SD WebUI-arbejdsgange) |
930
- | 🎵 **Music Generation** | `/v1/music/generations` (ComfyUI-arbejdsgange) |
931
- | 🛡️ **Moderationer** | `/v1/moderations` sikkerhedstjek |
932
- | 🔀 **Omrangering** | `/v1/rerank` for relevansscoring |
933
-
934
- ### 🛡️ Resiliens, sikkerhed og styring
935
-
936
- | Funktion | Hvad det gør |
937
- | ----------------------------------- | -------------------------------------------------------------------------------------- |
938
- | 🔌 **Maksimalafbrydere** | Trip/recover på udbyderniveau med tærskelkontrol |
939
- | 🛡️ **Anti-tordenbesætning** | Mutex + semaforbeskyttelse ved genforsøg/rate hændelser |
940
- | 🧠 **Semantisk + signaturcache** | Reduktion af omkostninger/latens med to cachelag |
941
- | ⚡ **Anmod om idempotens** | Dobbelt beskyttelsesvindue |
942
- | 🔒 **TLS Fingerprint Spoofing** | Bedre kompatibilitet med anti-bot-filtrerede udbydere |
943
- | 🔏 **CLI Fingerprint Matching** | Matches native CLI request signatures — **reduces ban risk while preserving proxy IP** |
944
- | 🌐 **IP-filtrering** | Tilladelsesliste/blokeringslistekontrol for udsatte implementeringer |
945
- | 📊 **Redigerbare satsgrænser** | Konfigurerbare grænser på globalt niveau/udbyderniveau med persistens |
946
- | 🔑 **API Key Management + Scoping** | Sikker nøgleudstedelse/rotation og model-/leverandørkontrol |
947
- | 🛡️ **Beskyttet `/models`** | Valgfri godkendelse og udbyderskjul til modelkatalog |
948
-
949
- ### 📊 Observerbarhed og analyse
950
-
951
- | Funktion | Hvad det gør |
952
- | ---------------------------------- | ------------------------------------------------------ |
953
- | 📝 **Forespørgsel + Proxylogning** | Fuld anmodning/svar og proxy-logning |
954
- | 📋 **Unified Logs Dashboard** | Anmodning, proxy, revision og konsolvisning på én side |
955
- | 🔍 **Anmod om telemetri** | p50/p95/p99 latens og anmodningssporing |
956
- | 🏥 **Sundhedskontrolpanel** | Oppetid, breaker-tilstande, lockouts, cache-statistik |
957
- | 💰 **Omkostningssporing** | Budgetkontrol og prisfastsættelse pr. model |
958
- | 📈 **Analytiske visualiseringer** | Model-/udbyderbrugsindsigt og trendvisninger |
959
- | 🧪 **Evalueringsramme** | Gyldne sæt-test med konfigurerbare matchstrategier |
960
-
961
- ### ☁️ Implementering og platform
962
-
963
- | Funktion | Hvad det gør |
964
- | -------------------------------------- | -------------------------------------------------------------- | --- | ----------------- | ------------------------------------------------ |
965
- | 🌐 **Deploy hvor som helst** | Localhost, VPS, Docker, Cloud-miljøer | | 💾 **Cloud Sync** | Synkronisering af konfiguration via cloud worker |
966
- | 🔄 **Sikkerhedskopiering/gendannelse** | Eksport/import og gendannelsesstrømme |
967
- | 🧙 **Onboarding Wizard** | Første kørsel guidet opsætning |
968
- | 🔧 **CLI Tools Dashboard** | Et-klik opsætning til populære kodningsværktøjer |
969
- | 🌐 **i18n (30 sprog)** | Fuldt dashboard + understøttelse af docs-sprog med RTL-dækning |
970
- | 📂 **Tilpasset datakatalog** | `DATA_DIR` tilsidesættelse af lagerplacering |
971
-
972
- ### Feature Deep Dive
973
-
974
- #### Smart fallback med praktisk omkostningskontrol
975
-
976
- ```txt
977
- Combo: "my-coding-stack"
978
- 1. cc/claude-opus-4-6
979
- 2. nvidia/llama-3.3-70b
980
- 3. glm/glm-4.7
981
- 4. if/kimi-k2-thinking
982
- ```
983
-
984
- Når kvote, sats eller sundhed svigter, flytter OmniRoute automatisk til den næste kandidat uden manuel skift.
985
-
986
- #### Protokolstyring, der er synlig og funktionsdygtig
987
-
988
- - MCP + A2A kan findes i brugergrænsefladen og dokumenter (ikke skjult)
989
- - Protokolstatus API'er afslører live driftsdata (`/api/mcp/*`, `/api/a2a/*`)
990
- - Dashboards inkluderer handlinger for dag-2 operationer (kombinationsskift, nulstilling af breaker, annullering af opgave)
991
-
992
- #### Oversætter + valideringsarbejdsgang
993
-
994
- Oversætterområdet omfatter:
995
-
996
- - **Legeplads**: anmod om transformationstjek
997
- - **Chattester**: fuld anmodning/svar tur/retur
998
- - **Testbænk**: flere sager på én gang
999
- - **Live Monitor**: trafikvisning i realtid
1000
-
1001
- Plus protokolvalidering med rigtige klienter via `npm run test:protocols:e2e`.
1002
-
1003
- > 📖 **[MCP Server README](open-sse/mcp-server/README.md)** — Værktøjsreference, IDE-konfigurationer og klienteksempler
1004
- >
1005
- > 📖 **[A2A Server README](src/lib/a2a/README.md)** — Færdigheder, JSON-RPC-metoder, streaming og opgavelivscyklus
1006
-
1007
- ## 🧪 Evalueringer (evalueringer)
1008
-
1009
- OmniRoute inkluderer en indbygget evalueringsramme til at teste LLM-svarkvaliteten mod et gyldent sæt. Få adgang til det via **Analytics → Evals** i dashboardet.
1010
-
1011
- ### Indbygget gyldent sæt
1012
-
1013
- Det forudindlæste "OmniRoute Golden Set" indeholder testcases til:
1014
-
1015
- - Hilsen, matematik, geografi, kodegenerering
1016
- - JSON format compliance, oversættelse, markdown generation
1017
- - Sikkerhedsafvisning (skadeligt indhold), optælling, boolsk logik
1018
-
1019
- ### Evalueringsstrategier
1020
-
1021
- | Strategi | Beskrivelse | Eksempel |
1022
- | ---------- | ----------------------------------------------------------------------- | -------------------------------- |
1023
- | `exact` | Output skal matche nøjagtigt | `"4"` |
1024
- | `contains` | Output skal indeholde understreng (uafhængig af store og små bogstaver) | `"Paris"` |
1025
- | `regex` | Output skal matche regex-mønster | `"1.*2.*3"` |
1026
- | `custom` | Brugerdefineret JS-funktion returnerer sand/falsk | `(output) => output.length > 10` |
1027
-
1028
- ---
1029
-
1030
- ## 📖 Opsætningsvejledning
1031
-
1032
- ### Protokolopsætning (MCP + A2A)
1033
-
1034
- <details>
1035
- <summary><b>🧩 MCP-opsætning (modelkontekstprotokol)</b></summary>
1036
-
1037
- Start MCP-transport i stdio-tilstand:
1038
-
1039
- ```bash
1040
- omniroute --mcp
1041
- ```
1042
-
1043
- Anbefalet valideringsflow:
1044
-
1045
- 1. Tilslut din MCP-klient via stdio.
1046
- 2. Kør `omniroute_get_health`.
1047
- 3. Kør `omniroute_list_combos`.
1048
- 4. Åbn `/dashboard/mcp` for at bekræfte hjerteslag, aktivitet og audit.
1049
-
1050
- Nyttige API'er til automatisering:
1051
-
1052
- - `GET /api/mcp/status`
1053
- - `GET /api/mcp/tools`
1054
- - `GET /api/mcp/audit`
1055
- - `GET /api/mcp/audit/stats`
1056
-
1057
- </details>
1058
-
1059
- <details><summary><b>🤝 A2A-opsætning (Agent2Agent)</b></summary>
1060
-
1061
- Opdag agenten:
1062
-
1063
- ```bash
1064
- curl http://localhost:20128/.well-known/agent.json
1065
- ```
1066
-
1067
- Send en opgave:
1068
-
1069
- ```bash
1070
- curl -X POST http://localhost:20128/a2a \
1071
- -H 'content-type: application/json' \
1072
- -d '{"jsonrpc":"2.0","id":"setup-a2a","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Summarize quota status."}]}}'
1073
- ```
1074
-
1075
- Administrer livscyklus:
1076
-
1077
- - `GET /api/a2a/status`
1078
- - `GET /api/a2a/tasks`
1079
- - `GET /api/a2a/tasks/:id`
1080
- - `POST /api/a2a/tasks/:id/cancel`
1081
-
1082
- Operationel UI:
1083
-
1084
- - `/dashboard/a2a` til observerbarhed af opgave/tilstand/strøm og røghandlinger
1085
-
1086
- </details>
1087
-
1088
- <details>
1089
- <summary><b>🧪 End-to-end protokolvalidering</b></summary>
1090
-
1091
- Valider begge protokoller med rigtige klienter:
1092
-
1093
- ```bash
1094
- npm run test:protocols:e2e
1095
- ```
1096
-
1097
- Dette verificerer:
1098
-
1099
- - MCP SDK-klient forbinde/liste/opkald
1100
- - A2A opdagelse/send/stream/hent/annuller
1101
- - Krydstjek data i MCP-audit og A2A opgavestyring API'er
1102
-
1103
- </details>
1104
-
1105
- <details>
1106
- <summary><b>💳 Abonnementsudbydere</b></summary>
1107
-
1108
- ### Claude Code (Pro/Max)
1109
-
1110
- ```bash
1111
- Dashboard → Providers → Connect Claude Code
1112
- → OAuth login → Auto token refresh
1113
- → 5-hour + weekly quota tracking
1114
-
1115
- Models:
1116
- cc/claude-opus-4-6
1117
- cc/claude-sonnet-4-5-20250929
1118
- cc/claude-haiku-4-5-20251001
1119
- ```
1120
-
1121
- **Prof tip:** Brug Opus til komplekse opgaver, Sonnet for hurtighed. OmniRoute sporer kvote pr. model!
1122
-
1123
- ### OpenAI Codex (Plus/Pro)
1124
-
1125
- ```bash
1126
- Dashboard → Providers → Connect Codex
1127
- → OAuth login (port 1455)
1128
- → 5-hour + weekly reset
1129
-
1130
- Models:
1131
- cx/gpt-5.2-codex
1132
- cx/gpt-5.1-codex-max
1133
- ```
1134
-
1135
- ### Gemini CLI (GRATIS 180K/måned!)
1136
-
1137
- ```bash
1138
- Dashboard → Providers → Connect Gemini CLI
1139
- → Google OAuth
1140
- → 180K completions/month + 1K/day
1141
-
1142
- Models:
1143
- gc/gemini-3-flash-preview
1144
- gc/gemini-2.5-pro
1145
- ```
1146
-
1147
- **Bedste værdi:** Kæmpe gratis niveau! Brug dette før betalte niveauer.
1148
-
1149
- ### GitHub Copilot
1150
-
1151
- ```bash
1152
- Dashboard → Providers → Connect GitHub
1153
- → OAuth via GitHub
1154
- → Monthly reset (1st of month)
1155
-
1156
- Models:
1157
- gh/gpt-5
1158
- gh/claude-4.5-sonnet
1159
- gh/gemini-3-pro
1160
- ```
1161
-
1162
- </details>
1163
-
1164
- <details>
1165
- <summary><b>🔑 API nøgleudbydere</b></summary>
1166
-
1167
- ### NVIDIA NIM (GRATIS 1000 kreditter!)
1168
-
1169
- 1. Tilmeld dig: [build.nvidia.com](https://build.nvidia.com)
1170
- 2. Få gratis API-nøgle (1000 slutningskreditter inkluderet)
1171
- 3. Dashboard → Tilføj udbyder → NVIDIA NIM:
1172
- - API-nøgle: `nvapi-your-key`
1173
-
1174
- **Modeller:** `nvidia/llama-3.3-70b-instruct`, `nvidia/mistral-7b-instruct` og 50+ flere
1175
-
1176
- **Prof tip:** OpenAI-kompatibel API — fungerer problemfrit med OmniRoutes formatoversættelse!
1177
-
1178
- ### DeepSeek
1179
-
1180
- 1. Tilmeld dig: [platform.deepseek.com](https://platform.deepseek.com)
1181
- 2. Hent API-nøgle
1182
- 3. Dashboard → Tilføj udbyder → DeepSeek
1183
-
1184
- **Modeller:** `deepseek/deepseek-chat`, `deepseek/deepseek-coder`
1185
-
1186
- ### Groq (gratis niveau tilgængelig!)
1187
-
1188
- 1. Tilmeld dig: [console.groq.com](https://console.groq.com)
1189
- 2. Få API-nøgle (gratis niveau inkluderet)
1190
- 3. Dashboard → Tilføj udbyder → Groq
1191
-
1192
- **Modeller:** `groq/llama-3.3-70b`, `groq/mixtral-8x7b`
1193
-
1194
- **Prof tip:** Ultrahurtig slutning — bedst til realtidskodning!
1195
-
1196
- ### OpenRouter (100+ modeller)
1197
-
1198
- 1. Tilmeld dig: [openrouter.ai](https://openrouter.ai)
1199
- 2. Hent API-nøgle
1200
- 3. Dashboard → Tilføj udbyder → OpenRouter
1201
-
1202
- **Modeller:** Få adgang til mere end 100 modeller fra alle større udbydere via en enkelt API-nøgle.
1203
-
1204
- </details>
1205
-
1206
- <details>
1207
- <summary><b>💰 Billige udbydere (backup)</b></summary>
1208
-
1209
- ### GLM-4.7 (Daglig nulstilling, $0,6/1 mio.)
1210
-
1211
- 1. Tilmeld dig: [Zhipu AI](https://open.bigmodel.cn/)
1212
- 2. Hent API-nøgle fra Coding Plan
1213
- 3. Dashboard → Tilføj API-nøgle:
1214
- - Udbyder: `glm`
1215
- - API-nøgle: `your-key`
1216
-
1217
- **Brug:** `glm/glm-4.7`
1218
-
1219
- **Pro-tip:** Coding Plan tilbyder 3× kvote til 1/7 pris! Nulstil dagligt 10:00.
1220
-
1221
- ### MiniMax M2.1 (5 timers nulstilling, $0,20/1 mio.)
1222
-
1223
- 1. Tilmeld dig: [MiniMax](https://www.minimax.io/)
1224
- 2. Hent API-nøgle
1225
- 3. Dashboard → Tilføj API-nøgle
1226
-
1227
- **Brug:** `minimax/MiniMax-M2.1`
1228
-
1229
- **Prof tip:** Billigste mulighed for lang sammenhæng (1M tokens)!
1230
-
1231
- ### Kimi K2 ($9/måned lejlighed)
1232
-
1233
- 1. Abonner: [Moonshot AI](https://platform.moonshot.ai/)
1234
- 2. Hent API-nøgle
1235
- 3. Dashboard → Tilføj API-nøgle
1236
-
1237
- **Brug:** `kimi/kimi-latest`
1238
-
1239
- **Prof tip:** Fast $9/måned for 10M tokens = $0,90/1M effektive omkostninger!
1240
-
1241
- </details>
1242
-
1243
- <details>
1244
- <summary><b>🆓 GRATIS udbydere (nødbackup)</b></summary>
1245
-
1246
- ### iFlow (8 GRATIS modeller)```bash
1247
-
1248
- Dashboard → Connect iFlow
1249
- → iFlow OAuth login
1250
- → Unlimited usage
1251
-
1252
- Models:
1253
- if/kimi-k2-thinking
1254
- if/qwen3-coder-plus
1255
- if/glm-4.7
1256
- if/minimax-m2
1257
- if/deepseek-r1
1258
-
1259
- ````
1260
-
1261
- ### Qwen (3 GRATIS modeller)
1262
-
1263
- ```bash
1264
- Dashboard → Connect Qwen
1265
- → Device code authorization
1266
- → Unlimited usage
1267
-
1268
- Models:
1269
- qw/qwen3-coder-plus
1270
- qw/qwen3-coder-flash
1271
- ````
1272
-
1273
- ### Kiro (Claude GRATIS)
1274
-
1275
- ```bash
1276
- Dashboard → Connect Kiro
1277
- → AWS Builder ID or Google/GitHub
1278
- → Unlimited usage
1279
-
1280
- Models:
1281
- kr/claude-sonnet-4.5
1282
- kr/claude-haiku-4.5
1283
- ```
1284
-
1285
- </details>
1286
-
1287
- <details>
1288
- <summary><b>🎨 Opret kombinationer</b></summary>
1289
-
1290
- ### Eksempel 1: Maksimer abonnement → Billig backup
1291
-
1292
- ```
1293
- Dashboard → Combos → Create New
1294
-
1295
- Name: premium-coding
1296
- Models:
1297
- 1. cc/claude-opus-4-6 (Subscription primary)
1298
- 2. glm/glm-4.7 (Cheap backup, $0.6/1M)
1299
- 3. minimax/MiniMax-M2.1 (Cheapest fallback, $0.20/1M)
1300
-
1301
- Use in CLI: premium-coding
1302
- ```
1303
-
1304
- ### Eksempel 2: Kun gratis (nul omkostninger)
1305
-
1306
- ```
1307
- Name: free-combo
1308
- Models:
1309
- 1. gc/gemini-3-flash-preview (180K free/month)
1310
- 2. if/kimi-k2-thinking (unlimited)
1311
- 3. qw/qwen3-coder-plus (unlimited)
1312
-
1313
- Cost: $0 forever!
1314
- ```
1315
-
1316
- </details>
1317
-
1318
- <details>
1319
- <summary><b>🔧 CLI-integration</b></summary>
1320
-
1321
- ### Markør IDE
1322
-
1323
- ```
1324
- Settings → Models → Advanced:
1325
- OpenAI API Base URL: http://localhost:20128/v1
1326
- OpenAI API Key: [from OmniRoute dashboard]
1327
- Model: cc/claude-opus-4-6
1328
- ```
1329
-
1330
- ### Claude Code
1331
-
1332
- Brug siden **CLI Tools** i dashboardet til konfiguration med et enkelt klik, eller rediger `~/.claude/settings.json` manuelt.
1333
-
1334
- ### Codex CLI
1335
-
1336
- ```bash
1337
- export OPENAI_BASE_URL="http://localhost:20128"
1338
- export OPENAI_API_KEY="your-omniroute-api-key"
1339
-
1340
- codex "your prompt"
1341
- ```
1342
-
1343
- ### OpenClaw
1344
-
1345
- **Mulighed 1 — Dashboard (anbefalet):**
1346
-
1347
- ```
1348
- Dashboard → CLI Tools → OpenClaw → Select Model → Apply
1349
- ```
1350
-
1351
- **Mulighed 2 — Manuel:** Rediger `~/.openclaw/openclaw.json`:
1352
-
1353
- ```json
1354
- {
1355
- "models": {
1356
- "providers": {
1357
- "omniroute": {
1358
- "baseUrl": "http://127.0.0.1:20128/v1",
1359
- "apiKey": "sk_omniroute",
1360
- "api": "openai-completions"
1361
- }
1362
- }
1363
- }
1364
- }
1365
- ```
1366
-
1367
- > **Bemærk:** OpenClaw fungerer kun med lokale OmniRoute. Brug `127.0.0.1` i stedet for `localhost` for at undgå problemer med IPv6-opløsning.
1368
-
1369
- ### Cline / Fortsæt / RooCode
1370
-
1371
- ```
1372
- Settings → API Configuration:
1373
- Provider: OpenAI Compatible
1374
- Base URL: http://localhost:20128/v1
1375
- API Key: [from OmniRoute dashboard]
1376
- Model: if/kimi-k2-thinking
1377
- ```
1378
-
1379
- ### OpenCode
1380
-
1381
- **Trin 1:** Tilføj OmniRoute som en tilpasset udbyder:
1382
-
1383
- ```bash
1384
- opencode
1385
- /connect
1386
- # Select "Other" → Enter ID: "omniroute" → Enter your OmniRoute API key
1387
- ```
1388
-
1389
- **Trin 2:** Opret/rediger `opencode.json` i dit projektrod:
1390
-
1391
- ```json
1392
- {
1393
- "$schema": "https://opencode.ai/config.json",
1394
- "provider": {
1395
- "omniroute": {
1396
- "npm": "@ai-sdk/openai-compatible",
1397
- "name": "OmniRoute",
1398
- "options": {
1399
- "baseURL": "http://localhost:20128/v1"
1400
- },
1401
- "models": {
1402
- "cc/claude-sonnet-4-20250514": { "name": "Claude Sonnet 4" },
1403
- "gg/gemini-2.5-pro": { "name": "Gemini 2.5 Pro" },
1404
- "if/kimi-k2-thinking": { "name": "Kimi K2 (Free)" }
1405
- }
1406
- }
1407
- }
1408
- }
1409
- ```
1410
-
1411
- **Trin 3:** Vælg modellen i OpenCode:
1412
-
1413
- ```bash
1414
- /models
1415
- # Select any OmniRoute model from the list
1416
- ```
1417
-
1418
- > **Tip:** Tilføj enhver tilgængelig model i dit OmniRoute `/v1/models`-endepunkt til `models`-sektionen. Brug formatet `provider/model-id` fra dit OmniRoute-dashboard.
1419
-
1420
- </details>
1421
-
1422
- ---
1423
-
1424
- ## 🐛 Fejlfinding
1425
-
1426
- <details>
1427
- <summary><b>Klik for at udvide fejlfindingsvejledning</b></summary>
1428
-
1429
- **"Sprogmodellen leverede ikke beskeder"**
1430
-
1431
- - Udbyderkvote opbrugt → Tjek dashboardkvotesporing
1432
- - Løsning: Brug combo fallback eller skift til et billigere niveau
1433
-
1434
- **Satsbegrænsende**
1435
-
1436
- - Abonnementskontingent ude → Fallback til GLM/MiniMax
1437
- - Tilføj kombination: `cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking`
1438
-
1439
- **OAuth-token er udløbet**
1440
-
1441
- - Automatisk genopfrisket af OmniRoute
1442
- - Hvis problemerne fortsætter: Dashboard → Udbyder → Genopret forbindelse
1443
-
1444
- **Høje omkostninger**
1445
-
1446
- - Tjek brugsstatistik i Dashboard → Omkostninger
1447
- - Skift primær model til GLM/MiniMax
1448
- - Brug gratis niveau (Gemini CLI, iFlow) til ikke-kritiske opgaver
1449
-
1450
- **Dashboard/API-porte er forkerte**
1451
-
1452
- - `PORT` er den kanoniske basisport (og API-port som standard)
1453
- - `API_PORT` tilsidesætter kun OpenAI-kompatibel API-lytter
1454
- - `DASHBOARD_PORT` tilsidesætter kun dashboard/Next.js-lytter
1455
- - Indstil `NEXT_PUBLIC_BASE_URL` til dit dashboard/offentlige URL (til OAuth-tilbagekald)
1456
-
1457
- **Skysynkroniseringsfejl**
1458
-
1459
- - Bekræft, at `BASE_URL` peger på din kørende instans
1460
- - Bekræft `CLOUD_URL`-punkter til dit forventede cloud-endepunkt
1461
- - Hold `NEXT_PUBLIC_*`-værdier på linje med værdier på serversiden
1462
-
1463
- **Første login virker ikke**
1464
-
1465
- - Tjek `INITIAL_PASSWORD` i `.env`
1466
- - Hvis den ikke er indstillet, er reserveadgangskoden `123456`
1467
-
1468
- **Ingen anmodningslogfiler**
1469
-
1470
- - Indstil `ENABLE_REQUEST_LOGS=true` i `.env`
1471
-
1472
- **Forbindelsestest viser "Ugyldig" for OpenAI-kompatible udbydere**
1473
-
1474
- - Mange udbydere eksponerer ikke et `/models`-endepunkt
1475
- - OmniRoute v1.0.6+ inkluderer fallback-validering via chatafslutninger
1476
- - Sørg for, at basis-URL inkluderer `/v1` suffiks
1477
-
1478
- ### 🔐 OAuth
1479
-
1480
- <a name="oauth-em-servidor-remoto"></a>
1481
-
1482
- > **⚠️ VIGTIGT til brugere af OmniRoute med VPS/Docker/server-fjernbetjening**
1483
-
1484
- #### OAuth
1485
-
1486
- Som credenciais OAuth embutidas no OmniRoute estão cadastradas **apenas para `localhost`**. Quando você acessa o OmniRoute em um servidor remoto (ex: `https://omniroute.meuservidor.com`), o Google afviser en autenticação com:
1487
-
1488
- ```
1489
- Error 400: redirect_uri_mismatch
1490
- ```
1491
-
1492
- #### Løsning: Konfigurer OAuth-tilgængelighed
1493
-
1494
- Você precisa criar um **OAuth 2.0 Client ID** ingen Google Cloud Console med en URI, der udfører denne service.
1495
-
1496
- #### Passo a passo
1497
-
1498
- **1. Adgang til Google Cloud Console**
1499
-
1500
- Abra: [https://console.cloud.google.com/apis/credentials](https://console.cloud.google.com/apis/credentials)
1501
-
1502
- **2. Crie um novo OAuth 2.0 Client ID**
1503
-
1504
- - Klik på dem **"+ Opret legitimationsoplysninger"** → **"OAuth-klient-id"**
1505
- - Tipo de aplicativo: **"Webapplikation"**
1506
- - Navn: escolha qualquer nome (eks.: `OmniRoute Remote`)
1507
-
1508
- **3. Adicione som autoriseret omdirigerings-URI**
1509
-
1510
- Ingen campo **"Autoriseret omdirigerings-URI'er"**, adicione:
1511
-
1512
- ```
1513
- https://seu-servidor.com/callback
1514
- ```
1515
-
1516
- > Substitua `seu-servidor.com` pelo domínio eller IP do seu servidor (inklusive en porta se necessário, ex: `http://45.33.32.156:20128/callback`).
1517
-
1518
- **4. Salve e copy as credenciais**
1519
-
1520
- Após criar, o Google mostrará o **Client ID** e o **Client Secret**.
1521
-
1522
- **5. Konfigurer som variáveis de ambiente**
1523
-
1524
- Ingen seu `.env` (denne variáveis de ambiente do Docker):
1525
-
1526
- ```bash
1527
- # Para Antigravity:
1528
- ANTIGRAVITY_OAUTH_CLIENT_ID=seu-client-id.apps.googleusercontent.com
1529
- ANTIGRAVITY_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
1530
-
1531
- # Para Gemini CLI:
1532
- GEMINI_OAUTH_CLIENT_ID=seu-client-id.apps.googleusercontent.com
1533
- GEMINI_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
1534
- GEMINI_CLI_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
1535
- ```
1536
-
1537
- **6. Reinicie o OmniRoute**
1538
-
1539
- ```bash
1540
- # Se usando npm:
1541
- npm run dev
1542
-
1543
- # Se usando Docker:
1544
- docker restart omniroute
1545
- ```
1546
-
1547
- **7. Tente conectar novamente**
1548
-
1549
- Dashboard → Udbydere → Antigravity (ou Gemini CLI) → OAuth
1550
-
1551
- Agora eller Google redirecionará corretamente para `https://seu-servidor.com/callback` og autenticação funcionará.
1552
-
1553
- ---
1554
-
1555
- #### Midlertidig løsning (som konfigureret tiltrods próprias)
1556
-
1557
- Se não quiser criar credenciais próprias agora, ainda é possível usar o fluxo **manual de URL**:
1558
-
1559
- 1. O OmniRoute abrirá en URL de autorização til Google
1560
- 2. Após você autorizar, o Google tentará redirecionar para `localhost` (que falha no servidor remoto)
1561
- 3. **Kopier en URL komplet** da barra de endereço do sin browser (mesmo que a página não carregue)
1562
- 4. Cole essa URL no campo que aparece no modal de conexão do OmniRoute
1563
- 5. Klik på **"Forbind"**
1564
-
1565
- > Este workaround funciona porque or código de autorização na URL é válido independente do redirect ter carregado or não.
1566
-
1567
- </details>
1568
-
1569
- ---
1570
-
1571
- ## 🛠️
1572
-
1573
- <details>
1574
- <summary><b>Klik for at udvide tekniske stakdetaljer</b></summary>
1575
-
1576
- - **Runtime**: Node.js 18–22 LTS (⚠️ Node.js 24+ er **ikke understøttet** — `better-sqlite3` native binære filer er inkompatible)
1577
- - **Sprog**: TypeScript 5.9 — **100 % TypeScript** på tværs af `src/` og `open-sse/` (nul `any` i kernemoduler siden v2.0)
1578
- - **Framework**: Next.js 16 + React 19 + Tailwind CSS 4
1579
- - **Database**: LowDB (JSON) + SQLite (domænetilstand + proxylogfiler + MCP-revision + routingbeslutninger)
1580
- - **Skemaer**: Zod (MCP-værktøj I/O-validering, API-kontrakter)
1581
- - **Protokoller**: MCP (stdio/HTTP) + A2A v0.3 (JSON-RPC 2.0 + SSE)
1582
- - **Streaming**: Server-sendte hændelser (SSE)
1583
- - **Auth**: OAuth 2.0 (PKCE) + JWT + API-nøgler + MCP Scoped Authorization
1584
- - **Test**: Node.js testløber + Vitest (900+ tests inklusive enhed, integration, E2E)- **CI/CD**: GitHub-handlinger (automatisk npm-udgivelse + Docker Hub ved udgivelse)
1585
- - **Websted**: [omniroute.online](https://omniroute.online)
1586
- - **Pakke**: [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute)
1587
- - **Docker**: [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute)
1588
- - **Resiliens**: Circuit breaker, eksponentiel backoff, anti-tordenbesætning, TLS spoofing, auto-combo selvhelbredelse
1589
-
1590
- </details>
1591
-
1592
- ---
1593
-
1594
- ## 📖 Dokumentation
1595
-
1596
- | Dokument | Beskrivelse |
1597
- | ------------------------------------------------ | ------------------------------------------------------------ |
1598
- | [Brugervejledning](docs/USER_GUIDE.md) | Udbydere, kombinationer, CLI-integration, implementering |
1599
- | [API-reference](docs/API_REFERENCE.md) | Alle endepunkter med eksempler |
1600
- | [MCP-server](open-sse/mcp-server/README.md) | 16 MCP-værktøjer, IDE-konfigurationer, Python/TS/Go-klienter |
1601
- | [A2A-server](src/lib/a2a/README.md) | JSON-RPC 2.0 protokol, færdigheder, streaming, opgavestyring |
1602
- | [Auto-kombimotor](docs/auto-combo.md) | 6-faktor scoring, tilstandspakker, selvhelbredende |
1603
- | [Fejlfinding](docs/TROUBLESHOOTING.md) | Almindelige problemer og løsninger |
1604
- | [Arkitektur](docs/ARCHITECTURE.md) | Systemarkitektur og indre |
1605
- | [Bidrager](CONTRIBUTING.md) | Udviklingsopsætning og retningslinjer |
1606
- | [OpenAPI Spec](docs/openapi.yaml) | OpenAPI 3.0-specifikation |
1607
- | [Sikkerhedspolitik](SECURITY.md) | Sårbarhedsrapportering og sikkerhedspraksis |
1608
- | [VM-implementering](docs/VM_DEPLOYMENT_GUIDE.md) | Komplet guide: VM + nginx + Cloudflare opsætning |
1609
- | [Feature Gallery](docs/FEATURES.md) | Visuel dashboard-rundvisning med skærmbilleder |
1610
- | [Udgivelsestjekliste](docs/RELEASE_CHECKLIST.md) | Pre-release valideringstrin |
1611
-
1612
- ---
1613
-
1614
- ## 🗺️
1615
-
1616
- OmniRoute har **210+ funktioner planlagt** på tværs af flere udviklingsfaser. Her er nøgleområderne:
1617
-
1618
- | Kategori | Planlagte funktioner | Højdepunkter |
1619
- | -------------------------------- | -------------------- | ---------------------------------------------------------------------------------------------------------- |
1620
- | 🧠 **Routing & intelligens** | 25+ | Routing med laveste latens, tag-baseret routing, kvote preflight, valg af P2C-konto |
1621
- | 🔒 **Sikkerhed og overholdelse** | 20+ | SSRF-hærdning, tilsløring af legitimationsoplysninger, hastighedsgrænse pr. slutpunkt, styringsnøgleomfang |
1622
- | 📊 **Observabilitet** | 15+ | OpenTelemetry-integration, kvoteovervågning i realtid, omkostningssporing pr. model |
1623
- | 🔄 **Udbyderintegrationer** | 20+ | Dynamisk modelregistrering, leverandørnedkøling, multi-konto Codex, Copilot-kvoteparsing |
1624
- | ⚡ **Ydeevne** | 15+ | Dobbelt cachelag, promptcache, svarcache, streaming keepalive, batch API |
1625
- | 🌐 **Økosystem** | 10+ | WebSocket API, config hot-reload, distribueret config butik, kommerciel tilstand |
1626
-
1627
- ### 🔜 Kommer snart- 🔗 **OpenCode-integration** — Native udbyderunderstøttelse af OpenCode AI-kodnings-IDE
1628
-
1629
- - 🔗 **TRAE-integration** — Fuld understøttelse af TRAE AI-udviklingsrammen
1630
- - 📦 **Batch API** — Asynkron batchbehandling til masseanmodninger
1631
- - 🎯 **Tag-baseret Routing** — Ruteanmodninger baseret på tilpassede tags og metadata
1632
- - 💰 **Laveste omkostningsstrategi** — Vælg automatisk den billigste tilgængelige udbyder
1633
-
1634
- > 📝 Fuld funktionsspecifikationer tilgængelige i [`docs/new-features/`](docs/new-features/) (217 detaljerede specifikationer)
1635
-
1636
- ---
1637
-
1638
- ## 👥 Bidragydere
1639
-
1640
- [![Bidragydere](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors)
1641
-
1642
- ### Sådan bidrager du
1643
-
1644
- 1. Fork depotet
1645
- 2. Opret din funktionsgren (`git checkout -b feature/amazing-feature`)
1646
- 3. Bekræft dine ændringer (`git commit -m 'Add amazing feature'`)
1647
- 4. Skub til grenen (`git push origin feature/amazing-feature`)
1648
- 5. Åbn en pull-anmodning
1649
-
1650
- Se [CONTRIBUTING.md](CONTRIBUTING.md) for detaljerede retningslinjer.
1651
-
1652
- ### Frigiver en ny version
1653
-
1654
- ```bash
1655
- # Create a release — npm publish happens automatically
1656
- gh release create v2.0.0 --title "v2.0.0" --generate-notes
1657
- ```
1658
-
1659
- ---
1660
-
1661
- ## 📊 Stjernehistorie
1662
-
1663
- <a href="https://star-history.com/#diegosouzapw/OmniRoute&Date">
1664
- <picture>
1665
- <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date&theme=dark" />
1666
- <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date" />
1667
- <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date" />
1668
- </picture>
1669
- </a>
1670
-
1671
- ---
1672
-
1673
- ## 🙏 Tak
1674
-
1675
- Særlig tak til **[9router](https://github.com/decolua/9router)** af **[decolua](https://github.com/decolua)** — det originale projekt, der inspirerede denne gaffel. OmniRoute bygger på det utrolige fundament med yderligere funktioner, multimodale API'er og en fuld TypeScript-omskrivning.
1676
-
1677
- Særlig tak til **[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)** — den originale Go-implementering, der inspirerede denne JavaScript-port.
1678
-
1679
- ---
1680
-
1681
- ## 📄 Licens
1682
-
1683
- MIT-licens - se [LICENS](LICENSE) for detaljer.
1684
-
1685
- ---
1686
-
1687
- <div align="center">
1688
- <sub>Bygget med ❤️ for udviklere, der koder 24/7</sub>
1689
- <br/>
1690
- <sub><a href="https://omniroute.online">omniroute.online</a></sub>
1691
- </div>
1692
- <!-- GitHub Discussions enabled for community Q&A -->