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.id.md DELETED
@@ -1,1586 +0,0 @@
1
- <div align="center">
2
- <img src="./docs/screenshots/MainOmniRoute.png" alt="OmniRoute Dashboard" width="800"/>
3
-
4
- # 🚀 OmniRoute — Gerbang AI Gratis
5
-
6
- ### Jangan pernah berhenti membuat kode. Perutean cerdas ke **model AI GRATIS & berbiaya rendah** dengan fallback otomatis.
7
-
8
- _Proksi API universal Anda — satu titik akhir, 36+ penyedia, tanpa waktu henti._
9
-
10
- **Penyelesaian Obrolan • Penyematan • Pembuatan Gambar • Audio • Pemeringkatan Ulang • 100% TypeScript**
11
-
12
- ---
13
-
14
- ### 🚀 New in v2.0.9+ — Playground, CLI Fingerprints & ACP
15
-
16
- | Feature | What It Does |
17
- | ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
18
- | 🎮 **Model Playground** | Dashboard page to test any model directly — provider/model/endpoint selectors, Monaco Editor, streaming, abort, timing |
19
- | 🔏 **CLI Fingerprint Matching** | Per-provider header/body ordering to match native CLI signatures — toggle per provider in Settings > Security. **Your proxy IP is preserved** |
20
- | 🤝 **ACP Support (Agent Client Protocol)** | CLI agent discovery (Codex, Claude, Goose, Gemini CLI, OpenClaw), process spawner, `/api/acp/agents` endpoint |
21
- | 🤖 **ACP Agents Dashboard** | Debug > Agents page — grid of 14 agents with install status, version, custom agent form for any CLI tool |
22
- | 🔧 **Custom Model `apiFormat` Routing** | Custom models with `apiFormat: "responses"` now correctly route to the Responses API translator |
23
- | 🏢 **Codex Workspace Isolation** | Multiple Codex workspaces per email — OAuth correctly separates connections by workspace ID |
24
- | 🔄 **Electron Auto-Update** | Desktop app checks for updates + auto-install on restart |
25
-
26
- ### 🤖 Penyedia AI gratis untuk agen coding favorit Anda
27
-
28
- _Hubungkan alat IDE atau CLI apa pun yang didukung AI melalui OmniRoute — gerbang API gratis untuk pengkodean tanpa batas._
29
-
30
- <table>
31
- <tr>
32
- <td align="center" width="110">
33
- <a href="https://github.com/cline/cline">
34
- <img src="./public/providers/openclaw.png" alt="OpenClaw" width="48"/><br/>
35
- <b>OpenClaw</b>
36
- </a><br/>
37
- <sub>⭐ 205K</sub>
38
- </td>
39
- <td align="center" width="110">
40
- <a href="https://github.com/HKUDS/nanobot">
41
- <img src="./public/providers/nanobot.png" alt="NanoBot" width="48"/><br/>
42
- <b>NanoBot</b>
43
- </a><br/>
44
- <sub>⭐ 20.9K</sub>
45
- </td>
46
- <td align="center" width="110">
47
- <a href="https://github.com/sipeed/picoclaw">
48
- <img src="./public/providers/picoclaw.jpg" alt="PicoClaw" width="48"/><br/>
49
- <b>PicoClaw</b>
50
- </a><br/>
51
- <sub>⭐ 14.6K</sub>
52
- </td>
53
- <td align="center" width="110">
54
- <a href="https://github.com/zeroclaw-labs/zeroclaw">
55
- <img src="./public/providers/zeroclaw.png" alt="ZeroClaw" width="48"/><br/>
56
- <b>ZeroClaw</b>
57
- </a><br/>
58
- <sub>⭐ 9.9K</sub>
59
- </td>
60
- <td align="center" width="110">
61
- <a href="https://github.com/nearai/ironclaw">
62
- <img src="./public/providers/ironclaw.png" alt="IronClaw" width="48"/><br/>
63
- <b>IronClaw</b>
64
- </a><br/>
65
- <sub>⭐ 2.1K</sub>
66
- </td>
67
- </tr>
68
- <tr>
69
- <td align="center" width="110">
70
- <a href="https://github.com/anomalyco/opencode">
71
- <img src="./public/providers/opencode.svg" alt="OpenCode" width="48"/><br/>
72
- <b>OpenCode</b>
73
- </a><br/>
74
- <sub>⭐ 106K</sub>
75
- </td>
76
- <td align="center" width="110">
77
- <a href="https://github.com/openai/codex">
78
- <img src="./public/providers/codex.png" alt="Codex CLI" width="48"/><br/>
79
- <b>Codex CLI</b>
80
- </a><br/>
81
- <sub>⭐ 60.8K</sub>
82
- </td>
83
- <td align="center" width="110">
84
- <a href="https://github.com/anthropics/claude-code">
85
- <img src="./public/providers/claude.png" alt="Claude Code" width="48"/><br/>
86
- <b>Claude Code</b>
87
- </a><br/>
88
- <sub>⭐ 67.3K</sub>
89
- </td>
90
- <td align="center" width="110">
91
- <a href="https://github.com/google-gemini/gemini-cli">
92
- <img src="./public/providers/gemini-cli.png" alt="Gemini CLI" width="48"/><br/>
93
- <b>Gemini CLI</b>
94
- </a><br/>
95
- <sub>⭐ 94.7K</sub>
96
- </td>
97
- <td align="center" width="110">
98
- <a href="https://github.com/Kilo-Org/kilocode">
99
- <img src="./public/providers/kilocode.png" alt="Kilo Code" width="48"/><br/>
100
- <b>Kilo Code</b>
101
- </a><br/>
102
- <sub>⭐ 15.5K</sub>
103
- </td>
104
- </tr>
105
- </table>
106
-
107
- <sub>📡 Semua agen terhubung melalui <code>http://localhost:20128/v1</code> atau <code>http://cloud.omniroute.online/v1</code> — satu konfigurasi, model tak terbatas, dan kuota</sub>
108
-
109
- ---
110
-
111
- [![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute)
112
- [![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute)
113
- [![License](https://img.shields.io/github/license/diegosouzapw/OmniRoute)](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE)
114
- [![Website](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online)
115
- [![WhatsApp](https://img.shields.io/badge/WhatsApp-Community-25D366?logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
116
-
117
- [🌐 Website](https://omniroute.online) • [🚀 Quick Start](#-quick-start) • [💡 Features](#-key-features) • [📖 Docs](#-documentation) • [💰 Pricing](#-pricing-at-a-glance) • [💬 WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
118
-
119
- 🌐 **Available in:** 🇺🇸 [English](README.md) | 🇧🇷 [Português (Brasil)](README.pt-BR.md) | 🇪🇸 [Español](README.es.md) | 🇫🇷 [Français](README.fr.md) | 🇮🇹 [Italiano](README.it.md) | 🇷🇺 [Русский](README.ru.md) | 🇨🇳 [中文 (简体)](README.zh-CN.md) | 🇩🇪 [Deutsch](README.de.md) | 🇮🇳 [हिन्दी](README.in.md) | 🇹🇭 [ไทย](README.th.md) | 🇺🇦 [Українська](README.uk-UA.md) | 🇸🇦 [العربية](README.ar.md) | 🇯🇵 [日本語](README.ja.md) | 🇻🇳 [Tiếng Việt](README.vi.md) | 🇧🇬 [Български](README.bg.md) | 🇩🇰 [Dansk](README.da.md) | 🇫🇮 [Suomi](README.fi.md) | 🇮🇱 [עברית](README.he.md) | 🇭🇺 [Magyar](README.hu.md) | 🇮🇩 [Bahasa Indonesia](README.id.md) | 🇰🇷 [한국어](README.ko.md) | 🇲🇾 [Bahasa Melayu](README.ms.md) | 🇳🇱 [Nederlands](README.nl.md) | 🇳🇴 [Norsk](README.no.md) | 🇵🇹 [Português (Portugal)](README.pt.md) | 🇷🇴 [Română](README.ro.md) | 🇵🇱 [Polski](README.pl.md) | 🇸🇰 [Slovenčina](README.sk.md) | 🇸🇪 [Svenska](README.sv.md) | 🇵🇭 [Filipino](README.phi.md)
120
-
121
- </div>
122
-
123
- ---
124
-
125
- ## 🖼️
126
-
127
- <div align="center">
128
- <img src="./docs/screenshots/MainOmniRoute.png" alt="OmniRoute" width="800"/>
129
- </div>
130
-
131
- ---
132
-
133
- ## 📸
134
-
135
- <details>
136
- <summary><b>...</b></summary>
137
-
138
- | # | # |
139
- | ----- | ---------------------------------------- |
140
- | **1** | ![1](docs/screenshots/01-providers.png) |
141
- | **2** | ![2](docs/screenshots/02-combos.png) |
142
- | **3** | ![3](docs/screenshots/03-analytics.png) |
143
- | **4** | ![4](docs/screenshots/04-health.png) |
144
- | **5** | ![5](docs/screenshots/05-translator.png) |
145
- | **6** | ![6](docs/screenshots/06-settings.png) |
146
- | **7** | ![7](docs/screenshots/07-cli-tools.png) |
147
- | **8** | ![8](docs/screenshots/08-usage.png) |
148
- | **9** | ![9](docs/screenshots/09-endpoint.png) |
149
-
150
- </details>
151
-
152
- ---
153
-
154
- ## 🤔 Mengapa OmniRoute?
155
-
156
- **Berhenti membuang-buang uang dan mencapai batas:**
157
-
158
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Kuota berlangganan habis tanpa terpakai setiap bulannya
159
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Batas kecepatan menghentikan Anda di tengah coding
160
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> API mahal ($20-50/bulan per penyedia)
161
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Peralihan antar penyedia secara manual
162
-
163
- **OmniRoute memecahkan masalah ini:**
164
-
165
- - ✅ **Maksimalkan langganan** - Lacak kuota, gunakan setiap bit sebelum menyetel ulang
166
- - ✅ **Pengembalian otomatis** - Berlangganan → Kunci API → Murah → Gratis, tanpa downtime
167
- - ✅ **Multi-akun** - Round-robin antar akun per penyedia
168
- - ✅ **Universal** - Bekerja dengan Claude Code, Codex, Gemini CLI, Cursor, Cline, OpenClaw, alat CLI apa pun
169
-
170
- ---
171
-
172
- ## 📧 Dukungan
173
-
174
- > 💬 **Bergabunglah dengan komunitas kami!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Dapatkan bantuan, berbagi kiat, dan dapatkan informasi terbaru.
175
-
176
- - **Situs Web**: [omniroute.online](https://omniroute.online)
177
- - **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute)
178
- - **Masalah**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues)
179
- - **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
180
- - **Proyek Asli**: [9router by decolua](https://github.com/decolua/9router)
181
-
182
- ---
183
-
184
- ## 🔄 Cara Kerjanya
185
-
186
- ```
187
- ┌─────────────┐
188
- │ Your CLI │ (Claude Code, Codex, Gemini CLI, OpenClaw, Cursor, Cline...)
189
- │ Tool │
190
- └──────┬──────┘
191
- │ http://localhost:20128/v1
192
-
193
- ┌─────────────────────────────────────────┐
194
- │ OmniRoute (Smart Router) │
195
- │ • Format translation (OpenAI ↔ Claude) │
196
- │ • Quota tracking + Embeddings + Images │
197
- │ • Auto token refresh │
198
- └──────┬──────────────────────────────────┘
199
-
200
- ├─→ [Tier 1: SUBSCRIPTION] Claude Code, Codex, Gemini CLI
201
- │ ↓ quota exhausted
202
- ├─→ [Tier 2: API KEY] DeepSeek, Groq, xAI, Mistral, NVIDIA NIM, etc.
203
- │ ↓ budget limit
204
- ├─→ [Tier 3: CHEAP] GLM ($0.6/1M), MiniMax ($0.2/1M)
205
- │ ↓ budget limit
206
- └─→ [Tier 4: FREE] iFlow, Qwen, Kiro (unlimited)
207
-
208
- Result: Never stop coding, minimal cost
209
- ```
210
-
211
- ---
212
-
213
- ## 🎯 Apa yang Dipecahkan OmniRoute — 30 Masalah Nyata & Kasus Penggunaan
214
-
215
- > **Setiap pengembang yang menggunakan alat AI menghadapi masalah ini setiap hari.** OmniRoute dibuat untuk menyelesaikan semuanya — mulai dari pembengkakan biaya hingga pemblokiran regional, mulai dari aliran OAuth yang rusak hingga operasi protokol dan kemampuan observasi perusahaan.
216
-
217
- <details>
218
- <summary><b>💸 1. "Saya membayar langganan yang mahal tetapi masih terganggu oleh batasan"</b></summary>
219
-
220
- Pengembang membayar $20–200/bulan untuk Claude Pro, Codex Pro, atau GitHub Copilot. Bahkan saat membayar, kuota memiliki batas tertinggi — penggunaan 5 jam, batas mingguan, atau batas tarif per menit. Di tengah sesi pengkodean, penyedia berhenti merespons dan pengembang kehilangan aliran dan produktivitas.
221
-
222
- **Bagaimana OmniRoute menyelesaikannya:**
223
-
224
- - **Smart 4-Tier Fallback** — Jika kuota berlangganan habis, otomatis dialihkan ke Kunci API → Murah → Gratis tanpa intervensi manual
225
- - **Pelacakan Kuota Real-Time** — Menampilkan konsumsi token secara real-time dengan hitungan mundur reset (5 jam, harian, mingguan)
226
- - **Dukungan Multi-Akun** — Beberapa akun per penyedia dengan sistem round-robin otomatis — jika satu akun habis, beralih ke akun berikutnya
227
- - **Kombo Khusus** — Rantai cadangan yang dapat disesuaikan dengan 6 strategi penyeimbangan (isi terlebih dahulu, round-robin, P2C, acak, paling jarang digunakan, hemat biaya)
228
- - **Codex Business Quotas** — Pemantauan kuota ruang kerja Bisnis/Tim langsung di dasbor
229
-
230
- </details>
231
-
232
- <details>
233
- <summary><b>🔌 2. "Saya perlu menggunakan beberapa penyedia tetapi masing-masing memiliki API yang berbeda"</b></summary>
234
-
235
- OpenAI menggunakan satu format, Claude (Anthropic) menggunakan format lain, Gemini menggunakan format lain. Jika pengembang ingin menguji model dari penyedia yang berbeda atau melakukan fallback di antara penyedia tersebut, mereka perlu mengonfigurasi ulang SDK, mengubah titik akhir, menangani format yang tidak kompatibel. Penyedia khusus (FriendLI, NIM) memiliki titik akhir model non-standar.
236
-
237
- **Bagaimana OmniRoute menyelesaikannya:**
238
-
239
- - **Titik Akhir Terpadu** — Satu `http://localhost:20128/v1` berfungsi sebagai proxy untuk 36+ penyedia
240
- - **Terjemahan Format** — Otomatis dan transparan: OpenAI ↔ Claude ↔ Gemini ↔ Responses API
241
- - **Sanitasi Respons** — Menghapus kolom non-standar (`x_groq`, `usage_breakdown`, `service_tier`) yang merusak OpenAI SDK v1.83+
242
- - **Normalisasi Peran** — Mengonversi `developer` → `system` untuk penyedia non-OpenAI; `system` → `user` untuk GLM/ERNIE
243
- - **Think Tag Extraction** — Mengekstrak blok `<think>` dari model seperti DeepSeek R1 ke dalam `reasoning_content` standar
244
- - **Output Terstruktur untuk Gemini** — `json_schema` → `responseMimeType`/`responseSchema` konversi otomatis
245
- - **`stream` defaultnya adalah `false`** — Sesuai dengan spesifikasi OpenAI, menghindari SSE yang tidak terduga di SDK Python/Rust/Go
246
-
247
- </details>
248
-
249
- <details>
250
- <summary><b>🌐 3. "Penyedia AI saya memblokir wilayah/negara saya"</b></summary>
251
-
252
- Penyedia seperti OpenAI/Codex memblokir akses dari wilayah geografis tertentu. Pengguna mendapatkan kesalahan seperti `unsupported_country_region_territory` selama koneksi OAuth dan API. Hal ini sangat membuat frustasi bagi pengembang dari negara-negara berkembang.
253
-
254
- **Bagaimana OmniRoute menyelesaikannya:**
255
-
256
- - **Konfigurasi Proksi 3 Tingkat** — Proksi yang dapat dikonfigurasi pada 3 tingkat: global (semua lalu lintas), per penyedia (hanya satu penyedia), dan per koneksi/kunci
257
- - **Lencana Proksi Berkode Warna** — Indikator visual: 🟢 proksi global, 🟡 proksi penyedia, 🔵 proksi koneksi, selalu menampilkan IP
258
- - **OAuth Token Exchange Through Proxy** — Aliran OAuth juga melewati proxy, menyelesaikan `unsupported_country_region_territory`
259
- - **Tes Koneksi melalui Proxy** — Tes koneksi menggunakan proxy yang dikonfigurasi (tidak ada lagi bypass langsung)
260
- - **Dukungan SOCKS5** — Dukungan proksi SOCKS5 penuh untuk perutean keluar
261
- - **TLS Fingerprint Spoofing** — Sidik jari TLS mirip browser melalui `wreq-js` untuk melewati deteksi bot
262
-
263
- </details>
264
-
265
- <details>
266
- <summary><b>🆓 4. "Saya ingin menggunakan AI untuk coding tetapi saya tidak punya uang" </b></summary>
267
-
268
- Tidak semua orang mampu membayar $20–200/bulan untuk berlangganan AI. Pelajar, pengembang dari negara-negara berkembang, penghobi, dan pekerja lepas memerlukan akses ke model berkualitas tanpa biaya.
269
-
270
- **Bagaimana OmniRoute menyelesaikannya:**
271
-
272
- - **Terintegrasi Penyedia Tingkat Gratis** — Dukungan asli untuk 100% penyedia gratis: iFlow (8 model tak terbatas), Qwen (3 model tak terbatas), Kiro (Claude gratis), Gemini CLI (gratis 180K/bulan)
273
- - **Ollama Cloud** — Cloud-hosted Ollama models at `api.ollama.com` with free "Light usage" tier; use `ollamacloud/<model>` prefix
274
- - **Kombo Khusus Gratis** — Rantai `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/bulan tanpa downtime
275
- - **Kredit Gratis NVIDIA NIM** — 1000 kredit gratis terintegrasi
276
- - **Strategi Pengoptimalan Biaya** — Strategi perutean yang secara otomatis memilih penyedia termurah yang tersedia
277
-
278
- </details>
279
-
280
- <details>
281
- <summary><b>🔒 5. "Saya perlu melindungi gateway AI saya dari akses tidak sah" </b></summary>
282
-
283
- Saat mengekspos gateway AI ke jaringan (LAN, VPS, Docker), siapa pun yang memiliki alamat tersebut dapat menggunakan token/kuota pengembang. Tanpa perlindungan, API rentan terhadap penyalahgunaan, injeksi cepat, dan penyalahgunaan.
284
-
285
- **Bagaimana OmniRoute menyelesaikannya:**
286
-
287
- - **Manajemen Kunci API** — Pembuatan, rotasi, dan pelingkupan per penyedia dengan halaman `/dashboard/api-manager` khusus
288
- - **Izin Tingkat Model** — Membatasi kunci API untuk model tertentu (`openai/*`, pola karakter pengganti), dengan tombol Izinkan Semua/Batasi
289
- - **API Endpoint Protection** — Memerlukan kunci untuk `/v1/models` dan memblokir penyedia tertentu dari daftar
290
- - **Auth Guard + Perlindungan CSRF** — Semua rute dasbor dilindungi dengan middleware `withAuth` + token CSRF
291
- - **Pembatas Kecepatan** — Pembatasan kecepatan per-IP dengan jendela yang dapat dikonfigurasi
292
- - **Pemfilteran IP** — Daftar yang diizinkan/daftar blokir untuk kontrol akses
293
- - **Prompt Injection Guard** — Sanitasi terhadap pola prompt berbahaya
294
- - **Enkripsi AES-256-GCM** — Kredensial dienkripsi saat disimpan
295
-
296
- </details>
297
-
298
- <details>
299
- <summary><b>🛑 6. "Penyedia saya down dan saya kehilangan alur pengkodean"</b></summary>
300
-
301
- Penyedia AI bisa menjadi tidak stabil, menampilkan kesalahan 5xx, atau mencapai batas kecepatan sementara. Jika pengembang bergantung pada satu penyedia, mereka akan terganggu. Tanpa pemutus sirkuit, percobaan ulang yang berulang-ulang dapat membuat aplikasi crash.
302
-
303
- **Bagaimana OmniRoute menyelesaikannya:**
304
-
305
- - **Pemutus Sirkuit per penyedia** — Buka/tutup otomatis dengan ambang batas dan cooldown yang dapat dikonfigurasi (Tertutup/Terbuka/Setengah Terbuka)
306
- - **Kemunduran Eksponensial** — Penundaan percobaan ulang yang progresif
307
- - **Kawanan Anti-Guntur** — Perlindungan mutex + semaphore terhadap badai percobaan ulang secara bersamaan
308
- - **Combo Fallback Chains** — Jika penyedia utama gagal, otomatis gagal dalam rantai tanpa intervensi
309
- - **Combo Circuit Breaker** — Menonaktifkan secara otomatis penyedia yang gagal dalam rantai kombo
310
- | 🎯 **Endpoint-Aware Models** | Custom models declare supported endpoints + API format |
311
- - **Dasbor Kesehatan** — Pemantauan waktu aktif, status pemutus sirkuit, penguncian, statistik cache, latensi p50/p95/p99
312
-
313
- </details>
314
-
315
- <details>
316
- <summary><b>🔧 7. "Mengonfigurasi setiap alat AI membosankan dan berulang-ulang"</b></summary>
317
-
318
- Pengembang menggunakan Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Setiap alat memerlukan konfigurasi yang berbeda (titik akhir API, kunci, model). Mengonfigurasi ulang saat berpindah penyedia atau model hanya membuang-buang waktu.
319
-
320
- **Bagaimana OmniRoute menyelesaikannya:**
321
-
322
- - **Dasbor Alat CLI** — Halaman khusus dengan pengaturan sekali klik untuk Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline
323
- - **GitHub Copilot Config Generator** — Menghasilkan `chatLanguageModels.json` untuk VS Code dengan pemilihan model massal
324
- - **Onboarding Wizard** — Panduan penyiapan 4 langkah untuk pengguna pertama kali
325
- - **Satu titik akhir, semua model** — Konfigurasikan `http://localhost:20128/v1` satu kali, akses 36+ penyedia
326
-
327
- </details>
328
-
329
- <details>
330
- <summary><b>🔑 8. "Mengelola token OAuth dari banyak penyedia adalah neraka"</b></summary>
331
-
332
- Claude Code, Codex, Gemini CLI, Copilot — semuanya menggunakan OAuth 2.0 dengan token yang kedaluwarsa. Pengembang perlu melakukan autentikasi ulang terus-menerus, menangani `client_secret is missing`, `redirect_uri_mismatch`, dan kegagalan pada server jarak jauh. OAuth pada LAN/VPS sangat bermasalah.
333
-
334
- **Bagaimana OmniRoute menyelesaikannya:**
335
-
336
- - **Penyegaran Token Otomatis** — Penyegaran token OAuth di latar belakang sebelum masa berlakunya habis
337
- - **OAuth 2.0 (PKCE) Bawaan** — Aliran otomatis untuk Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow
338
- - **OAuth Multi-Akun** — Beberapa akun per penyedia melalui ekstraksi token JWT/ID
339
- - **OAuth LAN/Remote Fix** — Deteksi IP pribadi untuk `redirect_uri` + mode URL manual untuk server jarak jauh
340
- - **OAuth Dibalik Nginx** — Menggunakan `window.location.origin` untuk kompatibilitas proxy terbalik
341
- - **Panduan OAuth Jarak Jauh** — Panduan langkah demi langkah untuk kredensial Google Cloud di VPS/Docker
342
-
343
- </details>
344
-
345
- <details>
346
- <summary><b>📊 9. "Saya tidak tahu berapa banyak yang saya belanjakan atau di mana" </b></summary>
347
-
348
- Pengembang menggunakan beberapa penyedia berbayar tetapi tidak memiliki pandangan terpadu mengenai pembelanjaan. Setiap penyedia memiliki dasbor penagihannya sendiri, namun tidak ada tampilan gabungan. Biaya tak terduga bisa menumpuk.
349
-
350
- **Bagaimana OmniRoute menyelesaikannya:**
351
-
352
- - **Dasbor Analisis Biaya** — Pelacakan biaya per token dan pengelolaan anggaran per penyedia
353
- - **Batas Anggaran per Tingkat** — Batas pembelanjaan per tingkat yang memicu penggantian otomatis
354
- - **Konfigurasi Harga Per Model** — Harga per model yang dapat dikonfigurasi
355
- - **Statistik Penggunaan Per Kunci API** — Jumlah permintaan dan stempel waktu terakhir digunakan per kunci
356
- - **Dasbor Analytics** — Kartu statistik, diagram penggunaan model, tabel penyedia dengan tingkat keberhasilan dan latensi
357
-
358
- </details>
359
-
360
- <details>
361
- <summary><b>🐛 10. "Saya tidak dapat mendiagnosis kesalahan dan masalah dalam panggilan AI"</b></summary>
362
-
363
- Saat panggilan gagal, pengembang tidak mengetahui apakah itu batas kecepatan, token kedaluwarsa, format salah, atau kesalahan penyedia. Log terfragmentasi di terminal yang berbeda. Tanpa observabilitas, debugging adalah trial-and-error.
364
-
365
- **Bagaimana OmniRoute menyelesaikannya:**
366
-
367
- - **Dasbor Log Terpadu** — 4 tab: Log Permintaan, Log Proksi, Log Audit, Konsol
368
- - **Penampil Log Konsol** — Penampil gaya terminal real-time dengan level kode warna, gulir otomatis, pencarian, filter
369
- - **Log Proxy SQLite** — Log persisten yang bertahan saat server dimulai ulang
370
- - **Translator Playground** — 4 mode debugging: Playground (terjemahan format), Chat Tester (pulang pergi), Test Bench (batch), Live Monitor (real-time)
371
- - **Telemetri Permintaan** — latensi p50/p95/p99 + penelusuran X-Request-Id
372
- - **Logging Berbasis File dengan Rotasi** — Pencegat konsol menangkap semuanya ke log JSON dengan rotasi berbasis ukuran
373
-
374
- </details>
375
-
376
- <details>
377
- <summary><b>🏗️ 11. "Menyebarkan dan memelihara gateway itu rumit"</b></summary>
378
-
379
- Menginstal, mengonfigurasi, dan memelihara proksi AI di berbagai lingkungan (lokal, VPS, Docker, cloud) membutuhkan banyak tenaga. Masalah seperti jalur hardcode, `EACCES` pada direktori, konflik port, dan pembangunan lintas platform menambah gesekan.
380
-
381
- **Bagaimana OmniRoute menyelesaikannya:**
382
-
383
- - **instal global npm** — `npm install -g omniroute && omniroute` — selesai
384
- - **Docker Multi-Platform** — asli AMD64 + ARM64 (Apple Silicon, AWS Graviton, Raspberry Pi)
385
- - **Docker Compose Profiles** — `base` (tanpa alat CLI) dan `cli` (dengan Claude Code, Codex, OpenClaw)
386
- - **Aplikasi Desktop Electron** — Aplikasi asli untuk Windows/macOS/Linux dengan baki sistem, mulai otomatis, mode offline
387
- - **Mode Port Terpisah** — API dan Dasbor pada port terpisah untuk skenario tingkat lanjut (proksi terbalik, jaringan kontainer)
388
- - **Cloud Sync** — Konfigurasi sinkronisasi antar perangkat melalui Cloudflare Workers
389
- - **DB Backups** — Pencadangan otomatis, pemulihan, ekspor dan impor semua pengaturan
390
-
391
- </details>
392
-
393
- <details>
394
- <summary><b>🌍 12. "Antarmuka hanya berbahasa Inggris dan tim saya tidak bisa berbahasa Inggris"</b></summary>
395
-
396
- Tim di negara-negara yang tidak berbahasa Inggris, khususnya di Amerika Latin, Asia, dan Eropa, kesulitan dengan antarmuka yang hanya berbahasa Inggris. Hambatan bahasa mengurangi adopsi dan meningkatkan kesalahan konfigurasi.
397
-
398
- **Bagaimana OmniRoute menyelesaikannya:**
399
-
400
- - **Dasbor i18n — 30 Bahasa** — 500+ tombol diterjemahkan termasuk Arab, Bulgaria, Denmark, Jerman, Spanyol, Finlandia, Prancis, Ibrani, Hindi, Hungaria, Indonesia, Italia, Jepang, Korea, Melayu, Belanda, Norwegia, Polandia, Portugis (PT/BR), Rumania, Rusia, Slovakia, Swedia, Thailand, Ukraina, Vietnam, China, Filipina, Inggris
401
- - **Dukungan RTL** — Dukungan kanan ke kiri untuk bahasa Arab dan Ibrani
402
- - **README Multi-Bahasa** — 30 terjemahan dokumentasi lengkap
403
- - **Pemilih Bahasa** — Ikon bola dunia di header untuk peralihan waktu nyata
404
-
405
- </details>
406
-
407
- <details>
408
- <summary><b>🔄 13. "Saya memerlukan lebih dari sekadar obrolan — saya memerlukan penyematan, gambar, audio"</b></summary>
409
-
410
- AI bukan hanya penyelesaian obrolan. Pengembang perlu membuat gambar, mentranskripsikan audio, membuat penyematan untuk RAG, mengubah peringkat dokumen, dan memoderasi konten. Setiap API memiliki titik akhir dan format yang berbeda.
411
-
412
- **Bagaimana OmniRoute menyelesaikannya:**
413
-
414
- - **Sematan** — `/v1/embeddings` dengan 6 penyedia dan 9+ model
415
- - **Image Generation** — `/v1/images/generations` dengan 10 penyedia dan 20+ model (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI)
416
- - **Teks-ke-Video** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) dan SD WebUI
417
- - **Teks-ke-Musik** — `/v1/music/generations` — ComfyUI (Audio Terbuka Stabil, MusicGen)
418
- - **Transkripsi Audio** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3
419
- - **Text-to-Speech** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, Inworld, Cartesia, PlayHT, + penyedia yang ada
420
- - **Moderasi** — `/v1/moderations` — Pemeriksaan keamanan konten
421
- - **Pemeringkatan ulang** — `/v1/rerank` — Pemeringkatan ulang relevansi dokumen
422
- - **Respon API** — Dukungan penuh `/v1/responses` untuk Codex
423
-
424
- </details>
425
-
426
- <details>
427
- <summary><b>🧪 14. "Saya tidak punya cara untuk menguji dan membandingkan kualitas antar model"</b></summary>
428
-
429
- Pengembang ingin mengetahui model mana yang terbaik untuk kasus penggunaan mereka — kode, terjemahan, penalaran — tetapi membandingkan secara manual itu lambat. Tidak ada alat evaluasi terintegrasi.
430
-
431
- **Bagaimana OmniRoute menyelesaikannya:**
432
-
433
- - **Evaluasi LLM** — Pengujian set emas dengan 10 kasus yang dimuat sebelumnya yang mencakup salam, matematika, geografi, pembuatan kode, kepatuhan JSON, terjemahan, penurunan harga, penolakan keamanan
434
- - **4 Strategi Pertandingan** — `exact`, `contains`, `regex`, `custom` (fungsi JS)
435
- - **Bangku Tes Taman Bermain Penerjemah** — Pengujian batch dengan banyak masukan dan keluaran yang diharapkan, perbandingan lintas penyedia
436
- - **Penguji Obrolan** — Perjalanan bolak-balik penuh dengan rendering respons visual
437
- - **Monitor Langsung** — Aliran real-time dari semua permintaan yang mengalir melalui proxy
438
-
439
- </details>
440
-
441
- <details>
442
- <summary><b>📈 15. "Saya perlu melakukan penskalaan tanpa kehilangan performa"</b></summary>
443
-
444
- Seiring bertambahnya volume permintaan, tanpa menyimpan pertanyaan yang sama akan menghasilkan biaya duplikat. Tanpa idempotensi, permintaan duplikat akan membuang-buang pemrosesan. Batasan tarif per penyedia harus dipatuhi.
445
-
446
- **Bagaimana OmniRoute menyelesaikannya:**
447
-
448
- - **Cache Semantik** — Cache dua tingkat (tanda tangan + semantik) mengurangi biaya dan latensi
449
- - **Request Idempoency** — Jendela deduplikasi 5 detik untuk permintaan yang identik
450
- - **Deteksi Batas Tarif** — RPM per penyedia, selisih minimum, dan pelacakan serentak maks
451
- - **Batas Nilai yang Dapat Diedit** — Default yang dapat dikonfigurasi di Pengaturan → Ketahanan dengan persistensi
452
- - **Cache Validasi Kunci API** — cache 3 tingkat untuk kinerja produksi
453
- - **Dasbor Kesehatan dengan Telemetri** — latensi p50/p95/p99, statistik cache, waktu aktif
454
-
455
- </details>
456
-
457
- <details>
458
- <summary><b>🤖 16. "Saya ingin mengontrol perilaku model secara global"</b></summary>
459
-
460
- Pengembang yang menginginkan semua respons dalam bahasa tertentu, dengan nada tertentu, atau ingin membatasi token penalaran. Mengonfigurasi ini di setiap alat/permintaan tidak praktis.
461
-
462
- **Bagaimana OmniRoute menyelesaikannya:**
463
-
464
- - **Injeksi Perintah Sistem** — Perintah global diterapkan ke semua permintaan
465
- - **Validasi Anggaran Berpikir** — Kontrol alokasi token penalaran per permintaan (passthrough, otomatis, kustom, adaptif)
466
- - **6 Strategi Perutean** — Strategi global yang menentukan cara permintaan didistribusikan
467
- - **Wildcard Router** — Pola `provider/*` dirutekan secara dinamis ke penyedia mana pun
468
- - **Combo Aktifkan/Nonaktifkan Toggle** — Beralih kombo langsung dari dasbor
469
- - **Toggle Penyedia** — Mengaktifkan/menonaktifkan semua koneksi untuk penyedia dengan satu klik
470
- - **Penyedia yang Diblokir** — Kecualikan penyedia tertentu dari daftar `/v1/models`
471
-
472
- </details>
473
-
474
- <details>
475
- <summary><b>🧰 17. "Saya membutuhkan alat MCP sebagai kemampuan produk kelas satu" </b></summary>
476
-
477
- Banyak gateway AI yang mengekspos MCP hanya sebagai detail implementasi yang tersembunyi. Tim memerlukan lapisan operasi yang terlihat dan dapat dikelola.
478
-
479
- **Bagaimana OmniRoute menyelesaikannya:**
480
-
481
- - MCP muncul di navigasi dasbor dan tab protokol titik akhir
482
- - Halaman manajemen MCP khusus dengan proses, alat, cakupan, dan audit
483
- - Mulai cepat bawaan untuk `omniroute --mcp` dan orientasi klien
484
-
485
- </details>
486
-
487
- <details>
488
- <summary><b>🧠 18. "Saya memerlukan orkestrasi A2A dengan jalur tugas sinkronisasi + streaming"</b></summary>
489
-
490
- Alur kerja agen memerlukan balasan langsung dan eksekusi streaming jangka panjang dengan kontrol siklus hidup.
491
-
492
- **Bagaimana OmniRoute menyelesaikannya:**
493
-
494
- - Titik akhir A2A JSON-RPC (`POST /a2a`) dengan `message/send` dan `message/stream`
495
- - Streaming SSE dengan propagasi status terminal
496
- - API siklus hidup tugas untuk `tasks/get` dan `tasks/cancel`
497
-
498
- </details>
499
-
500
- <details>
501
- <summary><b>🛰️ 19. "Saya membutuhkan kesehatan proses MCP yang nyata, bukan status yang dapat ditebak" </b></summary>
502
-
503
- Tim operasional perlu mengetahui apakah MCP benar-benar aktif, bukan hanya apakah API dapat dijangkau.
504
-
505
- **Bagaimana OmniRoute menyelesaikannya:**
506
-
507
- - File detak jantung runtime dengan PID, stempel waktu, transportasi, jumlah alat, dan mode cakupan
508
- - API status MCP menggabungkan detak jantung + aktivitas terkini
509
- - Kartu status UI untuk kesegaran proses/waktu aktif/detak jantung
510
-
511
- </details>
512
-
513
- <details>
514
- <summary><b>📋 20. "Saya memerlukan eksekusi alat MCP yang dapat diaudit"</b></summary>
515
-
516
- Saat alat mengubah konfigurasi atau memicu tindakan operasi, tim memerlukan kemampuan penelusuran forensik.
517
-
518
- **Bagaimana OmniRoute menyelesaikannya:**
519
-
520
- - Pencatatan audit yang didukung SQLite untuk panggilan alat MCP
521
- - Filter berdasarkan alat, keberhasilan/kegagalan, kunci API, dan penomoran halaman
522
- - Tabel audit dasbor + titik akhir statistik untuk otomatisasi
523
-
524
- </details>
525
-
526
- <details>
527
- <summary><b>🔐 21. "Saya memerlukan izin MCP terbatas per integrasi"</b></summary>
528
-
529
- Klien yang berbeda harus memiliki akses dengan hak istimewa paling rendah ke kategori alat.
530
-
531
- **Bagaimana OmniRoute menyelesaikannya:**
532
-
533
- - 9 cakupan MCP granular untuk akses alat terkontrol
534
- - Penegakan cakupan dan visibilitas di UI manajemen MCP
535
- - Postur default yang aman untuk perkakas operasional
536
-
537
- </details>
538
-
539
- <details>
540
- <summary><b>⚙️ 22. "Saya memerlukan kontrol operasional tanpa memindahkan" </b></summary>
541
-
542
- Tim memerlukan perubahan runtime yang cepat selama insiden atau peristiwa biaya.
543
-
544
- **Bagaimana OmniRoute menyelesaikannya:**
545
-
546
- - Beralih aktivasi kombo langsung dari dasbor MCP
547
- - Menerapkan profil ketahanan dari paket kebijakan yang telah ditentukan sebelumnya
548
- - Reset status pemutus sirkuit dari panel operasi yang sama
549
-
550
- </details>
551
-
552
- <details>
553
- <summary><b>🔄 23. "Saya memerlukan visibilitas dan pembatalan siklus hidup tugas A2A langsung" </b></summary>
554
-
555
- Tanpa visibilitas siklus hidup, insiden tugas menjadi sulit untuk diprioritaskan.
556
-
557
- **Bagaimana OmniRoute menyelesaikannya:**
558
-
559
- - Daftar tugas/pemfilteran berdasarkan status/keterampilan dengan penomoran halaman
560
- - Telusuri metadata tugas, peristiwa, dan artefak
561
- - Titik akhir pembatalan tugas dan tindakan UI dengan konfirmasi
562
-
563
- </details>
564
-
565
- <details>
566
- <summary><b>🌊 24. "Saya memerlukan metrik streaming aktif untuk memuat A2A"</b></summary>
567
-
568
- Alur kerja streaming memerlukan wawasan operasional tentang konkurensi dan koneksi langsung.
569
-
570
- **Bagaimana OmniRoute menyelesaikannya:**
571
-
572
- - Penghitung aliran aktif terintegrasi ke dalam status A2A
573
- - Stempel waktu tugas terakhir dan jumlah per negara bagian
574
- - Kartu dasbor A2A untuk pemantauan operasi waktu nyata
575
-
576
- </details>
577
-
578
- <details>
579
- <summary><b>🪪 25. "Saya memerlukan penemuan agen standar untuk klien"</b></summary>
580
-
581
- Klien dan orkestra eksternal memerlukan metadata yang dapat dibaca mesin untuk orientasi.
582
-
583
- **Bagaimana OmniRoute menyelesaikannya:**
584
-
585
- - Kartu Agen terekspos di `/.well-known/agent.json`
586
- - Kemampuan dan keterampilan yang ditunjukkan dalam manajemen UI
587
- - API status A2A mencakup metadata penemuan untuk otomatisasi
588
-
589
- </details>
590
-
591
- <details>
592
- <summary><b>🧭 26. "Saya memerlukan kemampuan protokol untuk ditemukan di UX produk" </b></summary>
593
-
594
- Jika pengguna tidak dapat menemukan permukaan protokol, kualitas adopsi dan dukungan akan menurun.
595
-
596
- **Bagaimana OmniRoute menyelesaikannya:**
597
-
598
- - Entri sidebar untuk MCP dan A2A
599
- - Tab Protokol halaman titik akhir dengan mulai cepat dan status
600
- - Tautan dari ikhtisar ke dasbor manajemen khusus
601
-
602
- </details>
603
-
604
- <details>
605
- <summary><b>🧪 27. "Saya memerlukan validasi protokol end-to-end dengan klien nyata"</b></summary>
606
-
607
- Tes tiruan tidak cukup untuk memvalidasi kompatibilitas protokol sebelum rilis.
608
-
609
- **Bagaimana OmniRoute menyelesaikannya:**
610
-
611
- - Suite E2E yang mem-boot aplikasi dan menggunakan transportasi klien MCP SDK yang sebenarnya
612
- - Klien A2A menguji penemuan, pengiriman, streaming, dapatkan, dan pembatalan aliran
613
- - Periksa silang pernyataan terhadap audit MCP dan API tugas A2A
614
-
615
- </details>
616
-
617
- <details>
618
- <summary><b>📡 28. "Saya memerlukan kemampuan pengamatan terpadu di semua antarmuka"</b></summary>
619
-
620
- Memisahkan observabilitas berdasarkan protokol menciptakan titik buta dan MTTR yang lebih panjang.
621
-
622
- **Bagaimana OmniRoute menyelesaikannya:**
623
-
624
- - Dasbor/log/analitik terpadu dalam satu produk
625
- - Kesehatan + audit + permintaan telemetri di seluruh lapisan OpenAI, MCP, dan A2A
626
- - API Operasional untuk status dan otomatisasi
627
-
628
- </details>
629
-
630
- <details>
631
- <summary><b>💼 29. "Saya memerlukan satu runtime untuk proxy + alat + orkestrasi agen" </b></summary>
632
-
633
- Menjalankan banyak layanan terpisah akan meningkatkan biaya operasional dan mode kegagalan.
634
-
635
- **Bagaimana OmniRoute menyelesaikannya:**
636
-
637
- - Proksi yang kompatibel dengan OpenAI, server MCP, dan server A2A dalam satu tumpukan
638
- - Otentikasi bersama, ketahanan, penyimpanan data, dan kemampuan observasi
639
- - Model kebijakan yang konsisten di seluruh platform interaksi
640
-
641
- </details>
642
-
643
- <details>
644
- <summary><b>🚀 30. "Saya perlu mengirimkan alur kerja agen tanpa gepeng kode lem"</b></summary>
645
-
646
- Tim kehilangan kecepatan saat menggabungkan beberapa layanan dan skrip ad-hoc.
647
-
648
- **Bagaimana OmniRoute menyelesaikannya:**
649
-
650
- - Strategi titik akhir terpadu untuk klien dan agen
651
- - UI manajemen protokol bawaan dan jalur validasi asap
652
- - Fondasi siap produksi (keamanan, logging, ketahanan, cadangan)
653
-
654
- </details>
655
-
656
- ### Contoh Playbook (Kasus Penggunaan Terintegrasi)
657
-
658
- **Playbook A: Maksimalkan langganan berbayar + cadangan murah**
659
-
660
- ```txt
661
- Combo: "maximize-claude"
662
- 1. cc/claude-opus-4-6
663
- 2. glm/glm-4.7
664
- 3. if/kimi-k2-thinking
665
-
666
- Monthly cost: $20 + small backup spend
667
- Outcome: higher quality, near-zero interruption
668
- ```
669
-
670
- **Playbook B: Tumpukan coding tanpa biaya**
671
-
672
- ```txt
673
- Combo: "free-forever"
674
- 1. gc/gemini-3-flash
675
- 2. if/kimi-k2-thinking
676
- 3. qw/qwen3-coder-plus
677
-
678
- Monthly cost: $0
679
- Outcome: stable free coding workflow
680
- ```
681
-
682
- **Playbook C: Rantai fallback yang selalu aktif 24/7**
683
-
684
- ```txt
685
- Combo: "always-on"
686
- 1. cc/claude-opus-4-6
687
- 2. cx/gpt-5.2-codex
688
- 3. glm/glm-4.7
689
- 4. minimax/MiniMax-M2.1
690
- 5. if/kimi-k2-thinking
691
-
692
- Outcome: deep fallback depth for deadline-critical workloads
693
- ```
694
-
695
- **Playbook D: Operasi agen dengan MCP + A2A**
696
-
697
- ```txt
698
- 1) Start MCP transport (`omniroute --mcp`) for tool-driven operations
699
- 2) Run A2A tasks via `message/send` and `message/stream`
700
- 3) Observe via /dashboard/mcp and /dashboard/a2a
701
- 4) Control incidents with resilience profile + task cancellation
702
- ```
703
-
704
- ---
705
-
706
- ## ⚡ Mulai Cepat
707
-
708
- **1. Instal secara global:**
709
-
710
- ```bash
711
- npm install -g omniroute
712
- omniroute
713
- ```
714
-
715
- 🎉 Dasbor terbuka di `http://localhost:20128`
716
-
717
- | Perintah | Deskripsi |
718
- | ----------------------- | --------------------------------- |
719
- | `omniroute` | Mulai server (port default 20128) |
720
- | `omniroute --port 3000` | Gunakan port khusus |
721
- | `omniroute --no-open` | Jangan buka otomatis browser |
722
- | `omniroute --help` | Tampilkan bantuan |
723
-
724
- **2. Hubungkan penyedia GRATIS:**
725
-
726
- Dasbor → Penyedia → Hubungkan **Kode Claude** atau **Antigravitasi** → Login OAuth → Selesai!
727
-
728
- **3. Gunakan di alat CLI Anda:**
729
-
730
- ```
731
- Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline Settings:
732
- Endpoint: http://localhost:20128/v1
733
- API Key: [copy from dashboard]
734
- Model: if/kimi-k2-thinking
735
- ```
736
-
737
- **Selesai!** Mulai coding dengan model AI GRATIS.
738
-
739
- **Alternatif — dijalankan dari sumber:**
740
-
741
- ```bash
742
- cp .env.example .env
743
- npm install
744
- PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
745
- ```
746
-
747
- ---
748
-
749
- ## 🐳 buruh pelabuhan
750
-
751
- OmniRoute tersedia sebagai image Docker publik di [Docker Hub](https://hub.docker.com/r/diegosouzapw/omniroute).
752
-
753
- **Lari cepat:**
754
-
755
- ```bash
756
- docker run -d \
757
- --name omniroute \
758
- --restart unless-stopped \
759
- -p 20128:20128 \
760
- -v omniroute-data:/app/data \
761
- diegosouzapw/omniroute:latest
762
- ```
763
-
764
- **Dengan file lingkungan:**
765
-
766
- ```bash
767
- # Copy and edit .env first
768
- cp .env.example .env
769
-
770
- docker run -d \
771
- --name omniroute \
772
- --restart unless-stopped \
773
- --env-file .env \
774
- -p 20128:20128 \
775
- -v omniroute-data:/app/data \
776
- diegosouzapw/omniroute:latest
777
- ```
778
-
779
- **Menggunakan Docker Tulis:**
780
-
781
- ```bash
782
- # Base profile (no CLI tools)
783
- docker compose --profile base up -d
784
-
785
- # CLI profile (Claude Code, Codex, OpenClaw built-in)
786
- docker compose --profile cli up -d
787
- ```
788
-
789
- | Gambar | Tandai | Ukuran | Deskripsi |
790
- | ------------------------ | -------- | ------- | -------------------- |
791
- | `diegosouzapw/omniroute` | `latest` | ~250 MB | Rilis stabil terbaru |
792
- | `diegosouzapw/omniroute` | `1.0.3` | ~250 MB | Versi saat ini |
793
-
794
- ---
795
-
796
- ---
797
-
798
- ## 🖥️
799
-
800
- > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux.
801
-
802
- - 🖥️ **Native Window** — Dedicated app window with system tray integration
803
- - 🔄 **Auto-Start** — Launch OmniRoute on system login
804
- - 🔔 **Native Notifications** — Get alerts for quota exhaustion or provider issues
805
- - ⚡ **One-Click Install** — NSIS (Windows), DMG (macOS), AppImage (Linux)
806
- - 🌐 **Offline Mode** — Works fully offline with bundled server
807
-
808
- ```bash
809
- npm run electron:dev # Development mode
810
- npm run electron:build # Current platform
811
- npm run electron:build:win # Windows (.exe)
812
- npm run electron:build:mac # macOS (.dmg)
813
- npm run electron:build:linux # Linux (.AppImage)
814
- ```
815
-
816
- 📖 Full documentation: [`electron/README.md`](electron/README.md)
817
-
818
- ---
819
-
820
- ## 💰 Sekilas tentang Harga
821
-
822
- | Tingkat | Penyedia | Biaya | Reset Kuota | Terbaik Untuk |
823
- | ------------------- | ----------------- | ------------------------- | ------------------------- | --------------------------- |
824
- | **💳 BERLANGGANAN** | Kode Claude (Pro) | $20/bln | 5 jam + mingguan | Sudah berlangganan |
825
- | | Kodeks (Plus/Pro) | $20-200/bln | 5 jam + mingguan | Pengguna OpenAI |
826
- | | CLI Gemini | **GRATIS** | 180K/bln + 1K/hari | Setiap orang! |
827
- | | Kopilot GitHub | $10-19/bln | Bulanan | Pengguna GitHub |
828
- | **🔑 KUNCI API** | NVIDIA NIM | **GRATIS** (1000 sks) | Satu kali | Pengujian tingkat gratis |
829
- | | Pencarian Dalam | Bayar per penggunaan | Tidak ada | Harga/kualitas terbaik |
830
- | | Bagus | Tingkat gratis + berbayar | Tarif terbatas | Inferensi ultra-cepat |
831
- | | xAI (Grok) | Bayar per penggunaan | Tidak ada | Model Grok |
832
- | | Mistral | Tingkat gratis + berbayar | Tarif terbatas | AI Eropa |
833
- | | BukaRouter | Bayar per penggunaan | Tidak ada | 100+ model |
834
- | **💰 MURAH** | GLM-4.7 | $0,6/1 juta | Setiap hari pukul 10 pagi | Cadangan anggaran |
835
- | | MiniMax M2.1 | $0,2/1 juta | 5 jam bergulir | Pilihan termurah |
836
- | | Kimi K2 | $9/bln tetap | 10 juta token/bln | Biaya yang dapat diprediksi |
837
- | **🆓 GRATIS** | iFlow | $0 | Tidak terbatas | 8 model gratis |
838
- | | Qwen | $0 | Tidak terbatas | 3 model gratis |
839
- | | Kiro | $0 | Tidak terbatas | Claude gratis |
840
-
841
- **💡 Kiat Pro:** Mulai dengan Gemini CLI (gratis 180 ribu/bulan) + kombo iFlow (gratis tanpa batas) = ​​biaya $0!
842
-
843
- ---
844
-
845
- ## 💡 Fitur Utama
846
-
847
- ### 🧠 Perutean & Kecerdasan Inti
848
-
849
- | Fitur | Apa Fungsinya |
850
- | ------------------------------------ | ---------------------------------------------------------------------------------- |
851
- | 🎯 **Pengembalian 4 Tingkat Cerdas** | Rute otomatis: Berlangganan → Kunci API → Murah → Gratis |
852
- | 📊 **Pelacakan Kuota Waktu Nyata** | Jumlah token langsung + setel ulang hitungan mundur per penyedia |
853
- | 🔄 **Terjemahan Format** | OpenAI ↔ Claude ↔ Gemini ↔ Kursor ↔ Kiro mulus + sanitasi respons |
854
- | 👥 **Dukungan Multi-Akun** | Banyak akun per penyedia dengan pilihan cerdas |
855
- | 🔄 **Penyegaran Token Otomatis** | Token OAuth disegarkan secara otomatis dengan coba lagi |
856
- | 🎨 **Kombo Khusus** | 6 strategi: isi dulu, round-robin, p2c, acak, paling jarang digunakan, hemat biaya |
857
- | 🧩 **Model Khusus** | Tambahkan ID model apa pun ke penyedia mana pun |
858
- | 🌐 **Router Wildcard** | Rutekan pola `provider/*` ke penyedia mana pun secara dinamis |
859
- | 🧠 **Memikirkan Anggaran** | Mode passthrough, otomatis, kustom, dan adaptif untuk model penalaran |
860
- | 🔀 **Model Aliases** | Auto-forward deprecated model IDs to current replacements (built-in + custom) |
861
- | ⚡ **Background Degradation** | Auto-route background tasks (titles, summaries) to cheaper models |
862
- | 💬 **Injeksi Perintah Sistem** | Perintah sistem global diterapkan di semua permintaan |
863
- | 📄 **API Respons** | Dukungan penuh OpenAI Responses API (`/v1/responses`) untuk Codex |
864
-
865
- ### 🎵 API Multi-Modal
866
-
867
- | Fitur | Apa Fungsinya |
868
- | -------------------------- | ------------------------------------------------------ |
869
- | 🖼️ **Pembuatan Gambar** | `/v1/images/generations` — 4 penyedia, 9+ model |
870
- | 📐 **Sematan** | `/v1/embeddings` — 6 penyedia, 9+ model |
871
- | 🎤 **Transkripsi Audio** | `/v1/audio/transcriptions` — Kompatibel dengan bisikan |
872
- | 🔊 **Teks-ke-Ucapan** | `/v1/audio/speech` — Sintesis audio multi-penyedia |
873
- | 🛡️ **Moderasi** | `/v1/moderations` — Pemeriksaan keamanan konten |
874
- | 🔀 **Pemeringkatan Ulang** | `/v1/rerank` — Pemeringkatan ulang relevansi dokumen |
875
-
876
- ### 🛡️ Ketahanan & Keamanan
877
-
878
- | Fitur | Apa Fungsinya |
879
- | ------------------------------------ | ------------------------------------------------------------------------------------------ |
880
- | 🔌 **Pemutus Arus** | Buka/tutup otomatis per penyedia dengan ambang batas yang dapat dikonfigurasi |
881
- | 🛡️ **Kawanan Anti Guntur** | Batas kecepatan mutex + semaphore untuk penyedia kunci API |
882
- | 🧠 **Cache Semantik** | Cache dua tingkat (tanda tangan + semantik) mengurangi biaya & latensi |
883
- | ⚡ **Minta Idempotensi** | Jendela dedup 5 detik untuk permintaan duplikat |
884
- | 🔒 **Spoofing Sidik Jari TLS** | Lewati deteksi bot berbasis TLS melalui wreq-js |
885
- | 🌐 **Pemfilteran IP** | Daftar yang diizinkan/daftar blokir untuk kontrol akses API |
886
- | 📊 **Batas Tarif yang Dapat Diedit** | RPM yang dapat dikonfigurasi, celah minimum, dan maks secara bersamaan pada tingkat sistem |
887
- | 💾 **Rate Limit Persistence** | Learned limits survive restarts via SQLite with 60s debounce + 24h staleness |
888
- | 🔄 **Token Refresh Resilience** | Per-provider circuit breaker (5 fails→30min) + 30s timeout per attempt |
889
- | 🛡 **Perlindungan Titik Akhir API** | Gerbang autentikasi + pemblokiran penyedia untuk titik akhir `/models` |
890
- | 🔒 **Visibilitas Proksi** | Lencana berkode warna: 🟢 global, 🟡 penyedia, 🔵 per koneksi dengan tampilan IP |
891
- | 🌐 **Konfigurasi Proksi 3 Tingkat** | Konfigurasikan proxy di tingkat global, per penyedia, atau per koneksi |
892
-
893
- ### 📊 Observabilitas & Analisis
894
-
895
- | Fitur | Apa Fungsinya |
896
- | ---------------------------- | ------------------------------------------------------------------------------- |
897
- | 📝 **Permintaan Pencatatan** | Mode debug dengan log permintaan/respons lengkap |
898
- | 💾 **Log Proksi SQLite** | Log proksi persisten bertahan saat server dimulai ulang |
899
- | 📊 **Dasbor Analitik** | Didukung grafik ulang: kartu stat, bagan penggunaan model, tabel penyedia |
900
- | 📈 **Pelacakan Kemajuan** | Ikut serta dalam acara kemajuan SSE untuk streaming |
901
- | 🧪 **Evaluasi LLM** | Pengujian set emas dengan 4 strategi pertandingan |
902
- | 🔍 **Permintaan Telemetri** | agregasi latensi p50/p95/p99 + penelusuran X-Request-Id |
903
- | 📋 **Dasbor Log** | Halaman 4 tab terpadu: Log Permintaan, Log Proksi, Log Audit, Konsol |
904
- | 🖥️ **Penampil Log Konsol** | Penampil gaya terminal real-time dengan filter level, pencarian, gulir otomatis |
905
- | 📑 **Logging Berbasis File** | Pencegat konsol menangkap semua output ke file log JSON dengan rotasi |
906
- | 🏥 **Dasbor Kesehatan** | Waktu aktif sistem, status pemutus sirkuit, penguncian, statistik cache |
907
- | 💰 **Pelacakan Biaya** | Manajemen anggaran + konfigurasi harga per model |
908
-
909
- ### ☁️ Penerapan & Sinkronisasi
910
-
911
- | Fitur | Apa Fungsinya |
912
- | ---------------------------- | ---------------------------------------------------------------------------- |
913
- | 💾 **Sinkronisasi Cloud** | Sinkronkan konfigurasi antar perangkat melalui Cloudflare Workers |
914
- | 🌐 **Terapkan Di Mana Saja** | Localhost, VPS, Docker, Pekerja Cloudflare |
915
- | 🔑 **Manajemen Kunci API** | Menghasilkan, memutar, dan mencakup kunci API per penyedia |
916
- | 🧙 **Wizard Orientasi** | Penyiapan terpandu 4 langkah untuk pengguna pertama kali |
917
- | 🔧 **Dasbor Alat CLI** | Konfigurasikan sekali klik Claude, Codex, Cline, OpenClaw, Kilo, Antigravity |
918
- | 🔄 **Cadangan DB** | Pencadangan, pemulihan, ekspor & impor otomatis untuk semua pengaturan |
919
- | 🌐 **Internasionalisasi** | I18n lengkap dengan next-intl — Dukungan Inggris + Portugis (Brasil) |
920
- | 🌍 **Pemilih Bahasa** | Ikon bola dunia di header untuk peralihan bahasa secara real-time (🇮🇩/🇧🇷) |
921
- | 📂 **Direktori Data Khusus** | `DATA_DIR` env var untuk mengganti jalur penyimpanan `~/.omniroute` default |
922
-
923
- <details>
924
- <summary><b>📖 Detail Fitur</b></summary>
925
-
926
- ### 🎯 Penggantian 4 Tingkat yang Cerdas
927
-
928
- Buat kombo dengan fallback otomatis:
929
-
930
- ```
931
- Combo: "my-coding-stack"
932
- 1. cc/claude-opus-4-6 (your subscription)
933
- 2. nvidia/llama-3.3-70b (free NVIDIA API)
934
- 3. glm/glm-4.7 (cheap backup, $0.6/1M)
935
- 4. if/kimi-k2-thinking (free fallback)
936
-
937
- → Auto switches when quota runs out or errors occur
938
- ```
939
-
940
- ### 📊 Pelacakan Kuota Waktu Nyata
941
-
942
- - Konsumsi token per penyedia
943
- - Atur ulang hitungan mundur (5 jam, harian, mingguan)
944
- - Estimasi biaya untuk tingkatan berbayar
945
- - Laporan pengeluaran bulanan
946
-
947
- ### 🔄 Format Terjemahan
948
-
949
- Terjemahan mulus antar format:
950
-
951
- - **OpenAI** ↔ **Claude** ↔ **Gemini** ↔ **Respon OpenAI**
952
- - Alat CLI Anda mengirimkan format OpenAI → OmniRoute menerjemahkan → Penyedia menerima format asli
953
- - Bekerja dengan alat apa pun yang mendukung titik akhir OpenAI khusus
954
- - **Sanitasi respons** — Menghapus kolom non-standar untuk kompatibilitas OpenAI SDK yang ketat
955
- - **Normalisasi peran** — `developer` → `system` untuk non-OpenAI; `system` → `user` untuk model GLM/ERNIE
956
- - **Think tag ekstraksi** — `<think>` blok → `reasoning_content` untuk model berpikir
957
- - **Keluaran terstruktur** — `json_schema` → `responseMimeType`/`responseSchema` Gemini
958
-
959
- ### 👥 Dukungan Multi-Akun
960
-
961
- - Tambahkan beberapa akun per penyedia
962
- - Perutean otomatis round-robin atau berbasis prioritas
963
- - Penggantian ke akun berikutnya ketika ada yang mencapai kuota
964
-
965
- ### 🔄 Penyegaran Token Otomatis
966
-
967
- - Token OAuth secara otomatis disegarkan sebelum masa berlakunya habis
968
- - Tidak diperlukan otentikasi ulang manual
969
- - Pengalaman mulus di semua penyedia
970
-
971
- ### 🎨 Kombo Khusus
972
-
973
- - Buat kombinasi model tanpa batas
974
- - 6 strategi: isi pertama, round-robin, kekuatan dua pilihan, acak, paling jarang digunakan, hemat biaya
975
- - Bagikan kombo di seluruh perangkat dengan Cloud Sync
976
-
977
- ### 🏥 Dasbor Kesehatan
978
-
979
- - Status sistem (waktu aktif, versi, penggunaan memori)
980
- - Status pemutus sirkuit per penyedia (Tertutup/Terbuka/Setengah Terbuka)
981
- - Status batas tarif dan penguncian aktif
982
- - Statistik cache tanda tangan
983
- - Telemetri latensi (p50/p95/p99) + cache cepat
984
- - Atur ulang status kesehatan dengan satu klik
985
-
986
- ### 🔧 Taman Bermain Penerjemah
987
-
988
- OmniRoute menyertakan Taman Bermain Penerjemah bawaan yang canggih dengan **4 mode** untuk melakukan debug, menguji, dan memantau terjemahan API:
989
-
990
- | Modus | Deskripsi |
991
- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
992
- | **💻 Taman bermain** | Terjemahan format langsung — tempelkan isi permintaan API apa pun dan langsung lihat bagaimana OmniRoute menerjemahkannya antar format penyedia (OpenAI ↔ Claude ↔ Gemini ↔ Responses API). Termasuk contoh templat dan deteksi otomatis format. |
993
- | **💬 Penguji Obrolan** | Kirim permintaan obrolan nyata melalui OmniRoute dan lihat perjalanan pulang pergi selengkapnya: masukan Anda, permintaan yang diterjemahkan, respons penyedia, dan respons yang diterjemahkan kembali. Sangat berharga untuk memvalidasi perutean kombo. |
994
- | **🧪 Bangku Tes** | Mode pengujian batch — tentukan beberapa kasus pengujian dengan masukan berbeda dan keluaran yang diharapkan, jalankan semuanya sekaligus, dan bandingkan hasilnya di seluruh penyedia dan model. |
995
- | **📱 Monitor Langsung** | Pemantauan permintaan waktu nyata — perhatikan permintaan masuk saat mengalir melalui OmniRoute, lihat terjemahan format yang terjadi secara langsung, dan identifikasi masalah secara instan. |
996
-
997
- **Akses:** Dasbor → Penerjemah (bilah samping)
998
-
999
- ### 💾 Sinkronisasi Awan
1000
-
1001
- - Sinkronisasi penyedia, kombo, dan pengaturan di seluruh perangkat
1002
- - Sinkronisasi latar belakang otomatis
1003
- - Penyimpanan terenkripsi yang aman
1004
-
1005
- </details>
1006
-
1007
- ## 🧪 Evaluasi (Eval)
1008
-
1009
- OmniRoute menyertakan kerangka evaluasi bawaan untuk menguji kualitas respons LLM terhadap rangkaian emas. Akses melalui **Analytics → Evals** di dasbor.
1010
-
1011
- ### Set Emas Bawaan
1012
-
1013
- "OmniRoute Golden Set" yang dimuat sebelumnya berisi 10 kasus uji yang meliputi:
1014
-
1015
- - Salam, matematika, geografi, pembuatan kode
1016
- - Kepatuhan format JSON, terjemahan, penurunan harga
1017
- - Penolakan keamanan (konten berbahaya), penghitungan, logika boolean
1018
-
1019
- ### Strategi Evaluasi
1020
-
1021
- | Strategi | Deskripsi | Contoh |
1022
- | ---------- | ------------------------------------------------------------ | -------------------------------- |
1023
- | `exact` | Output harus sama persis | `"4"` |
1024
- | `contains` | Output harus berisi substring (tidak peka huruf besar-kecil) | `"Paris"` |
1025
- | `regex` | Output harus sesuai dengan pola regex | `"1.*2.*3"` |
1026
- | `custom` | Fungsi JS khusus mengembalikan benar/salah | `(output) => output.length > 10` |
1027
-
1028
- ---
1029
-
1030
- ## 📖 Panduan Pengaturan
1031
-
1032
- <details>
1033
- <summary><b>💳 Penyedia Langganan</b></summary>
1034
-
1035
- ### Kode Claude (Pro/Maks)
1036
-
1037
- ```bash
1038
- Dashboard → Providers → Connect Claude Code
1039
- → OAuth login → Auto token refresh
1040
- → 5-hour + weekly quota tracking
1041
-
1042
- Models:
1043
- cc/claude-opus-4-6
1044
- cc/claude-sonnet-4-5-20250929
1045
- cc/claude-haiku-4-5-20251001
1046
- ```
1047
-
1048
- **Kiat Pro:** Gunakan Opus untuk tugas kompleks, Soneta untuk kecepatan. OmniRoute melacak kuota per model!
1049
-
1050
- ### Kodeks OpenAI (Plus/Pro)
1051
-
1052
- ```bash
1053
- Dashboard → Providers → Connect Codex
1054
- → OAuth login (port 1455)
1055
- → 5-hour + weekly reset
1056
-
1057
- Models:
1058
- cx/gpt-5.2-codex
1059
- cx/gpt-5.1-codex-max
1060
- ```
1061
-
1062
- ### Gemini CLI (GRATIS 180K/bulan!)
1063
-
1064
- ```bash
1065
- Dashboard → Providers → Connect Gemini CLI
1066
- → Google OAuth
1067
- → 180K completions/month + 1K/day
1068
-
1069
- Models:
1070
- gc/gemini-3-flash-preview
1071
- gc/gemini-2.5-pro
1072
- ```
1073
-
1074
- **Nilai Terbaik:** Tingkat gratis yang sangat besar! Gunakan ini sebelum tingkatan berbayar.
1075
-
1076
- ### Kopilot GitHub
1077
-
1078
- ```bash
1079
- Dashboard → Providers → Connect GitHub
1080
- → OAuth via GitHub
1081
- → Monthly reset (1st of month)
1082
-
1083
- Models:
1084
- gh/gpt-5
1085
- gh/claude-4.5-sonnet
1086
- gh/gemini-3-pro
1087
- ```
1088
-
1089
- </details>
1090
-
1091
- <details>
1092
- <summary><b>🔑 Penyedia Kunci API</b></summary>
1093
-
1094
- ### NVIDIA NIM (GRATIS 1000 kredit!)
1095
-
1096
- 1. Daftar: [build.nvidia.com](https://build.nvidia.com)
1097
- 2. Dapatkan kunci API gratis (termasuk 1000 kredit inferensi)
1098
- 3. Dasbor → Tambah Penyedia → NVIDIA NIM:
1099
- - Kunci API: `nvapi-your-key`
1100
-
1101
- **Model:** `nvidia/llama-3.3-70b-instruct`, `nvidia/mistral-7b-instruct`, dan 50+ lainnya
1102
-
1103
- **Kiat Pro:** API yang kompatibel dengan OpenAI — bekerja secara lancar dengan terjemahan format OmniRoute!
1104
-
1105
- ### Pencarian Dalam
1106
-
1107
- 1. Daftar: [platform.deepseek.com](https://platform.deepseek.com)
1108
- 2. Dapatkan kunci API
1109
- 3. Dasbor → Tambah Penyedia → DeepSeek
1110
-
1111
- **Model:** `deepseek/deepseek-chat`, `deepseek/deepseek-coder`
1112
-
1113
- ### Groq (Tersedia Tingkat Gratis!)
1114
-
1115
- 1. Daftar: [console.groq.com](https://console.groq.com)
1116
- 2. Dapatkan kunci API (termasuk tingkat gratis)
1117
- 3. Dasbor → Tambah Penyedia → Groq
1118
-
1119
- **Model:** `groq/llama-3.3-70b`, `groq/mixtral-8x7b`
1120
-
1121
- **Kiat Pro:** Inferensi ultra-cepat — terbaik untuk pengkodean waktu nyata!
1122
-
1123
- ### OpenRouter (100+ Model)
1124
-
1125
- 1. Daftar: [openrouter.ai](https://openrouter.ai)
1126
- 2. Dapatkan kunci API
1127
- 3. Dasbor → Tambah Penyedia → OpenRouter
1128
-
1129
- **Model:** Akses 100+ model dari semua penyedia utama melalui satu kunci API.
1130
-
1131
- </details>
1132
-
1133
- <details>
1134
- <summary><b>💰 Penyedia Murah (Cadangan)</b></summary>
1135
-
1136
- ### GLM-4.7 (Reset harian, $0,6/1 juta)
1137
-
1138
- 1. Daftar: [Zhipu AI](https://open.bigmodel.cn/)
1139
- 2. Dapatkan kunci API dari Coding Plan
1140
- 3. Dasbor → Tambahkan Kunci API:
1141
- - Penyedia: `glm`
1142
- - Kunci API: `your-key`
1143
-
1144
- **Gunakan:** `glm/glm-4.7`
1145
-
1146
- **Tips Pro:** Paket Coding menawarkan 3× kuota dengan biaya 1/7! Reset setiap hari pukul 10.00.
1147
-
1148
- ### MiniMax M2.1 (reset 5 jam, $0,20/1 juta)
1149
-
1150
- 1. Daftar: [MiniMax](https://www.minimax.io/)
1151
- 2. Dapatkan kunci API
1152
- 3. Dasbor → Tambahkan Kunci API
1153
-
1154
- **Gunakan:** `minimax/MiniMax-M2.1`
1155
-
1156
- **Kiat Pro:** Opsi termurah untuk konteks panjang (1 juta token)!
1157
-
1158
- ### Kimi K2 ($9/bulan tetap)
1159
-
1160
- 1. Berlangganan: [Moonshot AI](https://platform.moonshot.ai/)
1161
- 2. Dapatkan kunci API
1162
- 3. Dasbor → Tambahkan Kunci API
1163
-
1164
- **Gunakan:** `kimi/kimi-latest`
1165
-
1166
- **Kiat Pro:** Memperbaiki $9/bulan untuk 10 juta token = biaya efektif $0,90/1 juta!
1167
-
1168
- </details>
1169
-
1170
- <details>
1171
- <summary><b>🆓 Penyedia GRATIS (Cadangan Darurat)</b></summary>
1172
-
1173
- ### iFlow (8 model GRATIS)
1174
-
1175
- ```bash
1176
- Dashboard → Connect iFlow
1177
- → iFlow OAuth login
1178
- → Unlimited usage
1179
-
1180
- Models:
1181
- if/kimi-k2-thinking
1182
- if/qwen3-coder-plus
1183
- if/glm-4.7
1184
- if/minimax-m2
1185
- if/deepseek-r1
1186
- ```
1187
-
1188
- ### Qwen (3 model GRATIS)
1189
-
1190
- ```bash
1191
- Dashboard → Connect Qwen
1192
- → Device code authorization
1193
- → Unlimited usage
1194
-
1195
- Models:
1196
- qw/qwen3-coder-plus
1197
- qw/qwen3-coder-flash
1198
- ```
1199
-
1200
- ### Kiro (Claude GRATIS)
1201
-
1202
- ```bash
1203
- Dashboard → Connect Kiro
1204
- → AWS Builder ID or Google/GitHub
1205
- → Unlimited usage
1206
-
1207
- Models:
1208
- kr/claude-sonnet-4.5
1209
- kr/claude-haiku-4.5
1210
- ```
1211
-
1212
- </details>
1213
-
1214
- <details>
1215
- <summary><b>🎨 Buat Kombo</b></summary>
1216
-
1217
- ### Contoh 1: Maksimalkan Langganan → Cadangan Murah
1218
-
1219
- ```
1220
- Dashboard → Combos → Create New
1221
-
1222
- Name: premium-coding
1223
- Models:
1224
- 1. cc/claude-opus-4-6 (Subscription primary)
1225
- 2. glm/glm-4.7 (Cheap backup, $0.6/1M)
1226
- 3. minimax/MiniMax-M2.1 (Cheapest fallback, $0.20/1M)
1227
-
1228
- Use in CLI: premium-coding
1229
- ```
1230
-
1231
- ### Contoh 2: Gratis Saja (Tanpa Biaya)
1232
-
1233
- ```
1234
- Name: free-combo
1235
- Models:
1236
- 1. gc/gemini-3-flash-preview (180K free/month)
1237
- 2. if/kimi-k2-thinking (unlimited)
1238
- 3. qw/qwen3-coder-plus (unlimited)
1239
-
1240
- Cost: $0 forever!
1241
- ```
1242
-
1243
- </details>
1244
-
1245
- <details>
1246
- <summary><b>🔧 Integrasi CLI</b></summary>
1247
-
1248
- ### IDE Kursor
1249
-
1250
- ```
1251
- Settings → Models → Advanced:
1252
- OpenAI API Base URL: http://localhost:20128/v1
1253
- OpenAI API Key: [from OmniRoute dashboard]
1254
- Model: cc/claude-opus-4-6
1255
- ```
1256
-
1257
- ### Kode Claude
1258
-
1259
- Gunakan halaman **Alat CLI** di dasbor untuk konfigurasi sekali klik, atau edit `~/.claude/settings.json` secara manual.
1260
-
1261
- ### Kodeks CLI
1262
-
1263
- ```bash
1264
- export OPENAI_BASE_URL="http://localhost:20128"
1265
- export OPENAI_API_KEY="your-omniroute-api-key"
1266
-
1267
- codex "your prompt"
1268
- ```
1269
-
1270
- ### Buka Cakar
1271
-
1272
- **Opsi 1 — Dasbor (disarankan):**
1273
-
1274
- ```
1275
- Dashboard → CLI Tools → OpenClaw → Select Model → Apply
1276
- ```
1277
-
1278
- **Opsi 2 — Panduan:** Sunting `~/.openclaw/openclaw.json`:
1279
-
1280
- ```json
1281
- {
1282
- "models": {
1283
- "providers": {
1284
- "omniroute": {
1285
- "baseUrl": "http://127.0.0.1:20128/v1",
1286
- "apiKey": "sk_omniroute",
1287
- "api": "openai-completions"
1288
- }
1289
- }
1290
- }
1291
- }
1292
- ```
1293
-
1294
- > **Catatan:** OpenClaw hanya berfungsi dengan OmniRoute lokal. Gunakan `127.0.0.1` alih-alih `localhost` untuk menghindari masalah resolusi IPv6.
1295
-
1296
- ### Cline / Lanjutkan / RooCode
1297
-
1298
- ```
1299
- Settings → API Configuration:
1300
- Provider: OpenAI Compatible
1301
- Base URL: http://localhost:20128/v1
1302
- API Key: [from OmniRoute dashboard]
1303
- Model: if/kimi-k2-thinking
1304
- ```
1305
-
1306
- </details>
1307
-
1308
- ---
1309
-
1310
- ## 🐛 Pemecahan masalah
1311
-
1312
- <details>
1313
- <summary><b>Klik untuk memperluas panduan pemecahan masalah</b></summary>
1314
-
1315
- **"Model bahasa tidak memberikan pesan"**
1316
-
1317
- - Kuota penyedia habis → Periksa dashboard pelacak kuota
1318
- - Solusi: Gunakan combo fallback atau beralih ke tier yang lebih murah
1319
-
1320
- **Pembatasan tarif**
1321
-
1322
- - Kuota berlangganan habis → Penggantian ke GLM/MiniMax
1323
- - Tambahkan kombo: `cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking`
1324
-
1325
- **Token OAuth kedaluwarsa**
1326
-
1327
- - Disegarkan secara otomatis oleh OmniRoute
1328
- - Jika masalah terus berlanjut: Dasbor → Penyedia → Sambungkan kembali
1329
-
1330
- **Biaya tinggi**
1331
-
1332
- - Periksa statistik penggunaan di Dashboard → Biaya
1333
- - Ganti model utama ke GLM/MiniMax
1334
- - Gunakan tingkat gratis (Gemini CLI, iFlow) untuk tugas-tugas yang tidak penting
1335
-
1336
- **Dasbor terbuka pada port yang salah**
1337
-
1338
- - Tetapkan `PORT=20128` dan `NEXT_PUBLIC_BASE_URL=http://localhost:20128`
1339
-
1340
- **Kesalahan sinkronisasi cloud**
1341
-
1342
- - Verifikasi `BASE_URL` poin ke instance Anda yang sedang berjalan
1343
- - Verifikasi `CLOUD_URL` poin ke titik akhir cloud yang Anda harapkan
1344
- - Jaga agar nilai `NEXT_PUBLIC_*` selaras dengan nilai sisi server
1345
-
1346
- **Login pertama tidak berfungsi**
1347
-
1348
- - Periksa `INITIAL_PASSWORD` di `.env`
1349
- - Jika tidak disetel, kata sandi cadangan adalah `123456`
1350
-
1351
- **Tidak ada log permintaan**
1352
-
1353
- - Tetapkan `ENABLE_REQUEST_LOGS=true` di `.env`
1354
-
1355
- **Tes koneksi menunjukkan "Tidak Valid" untuk penyedia yang kompatibel dengan OpenAI**
1356
-
1357
- - Banyak penyedia tidak mengekspos titik akhir `/models`
1358
- - OmniRoute v1.0.6+ menyertakan validasi fallback melalui penyelesaian obrolan
1359
- - Pastikan URL dasar menyertakan akhiran `/v1`
1360
-
1361
- ### 🔐 OAuth
1362
-
1363
- <a name="oauth-em-servidor-remoto"></a>
1364
-
1365
- > **⚠️ PENTING bagi pengguna dengan OmniRoute pada VPS/Docker/server jarak jauh**
1366
-
1367
- ### OAuth
1368
-
1369
- Pembuktiannya **Antigravitasi** dan **Gemini CLI** digunakan **Google OAuth 2.0** untuk autentikasi. Google meminta agar `redirect_uri` menggunakan OAuth yang terus berubah, jadi **exatamente** adalah URI yang sudah ada sebelumnya di Google Cloud Console yang dapat diterapkan.
1370
-
1371
- Karena kredensial OAuth yang diberikan pada OmniRoute adalah kadastrada **apenas untuk `localhost`**. Ketika Anda mengakses OmniRoute dari server jarak jauh (misal: `https://omniroute.meuservidor.com`), atau Google meminta autenticação com:
1372
-
1373
- ```
1374
- Error 400: redirect_uri_mismatch
1375
- ```
1376
-
1377
- ### Solusi: Konfigurasikan akun OAuth Anda
1378
-
1379
- Anda perlu membuat **ID Klien OAuth 2.0** di Google Cloud Console dengan URI di server Anda.
1380
-
1381
- #### Lewati dulu
1382
-
1383
- **1. Mengakses Google Cloud Console**
1384
-
1385
- Abra: [https://console.cloud.google.com/apis/credentials](https://console.cloud.google.com/apis/credentials)
1386
-
1387
- **2. Inilah ID Klien OAuth 2.0 yang baru**
1388
-
1389
- - Klik pada **"+ Buat Kredensial"** → **"ID klien OAuth"**
1390
- - Tip aplikasi: **"Aplikasi web"**
1391
- - Nama: nama escolha qualquer (misal: `OmniRoute Remote`)
1392
-
1393
- **3. Tambahan sebagai URI Pengalihan Resmi**
1394
-
1395
- Selain itu **"URI pengalihan resmi"**, tambahan:
1396
-
1397
- ```
1398
- https://seu-servidor.com/callback
1399
- ```
1400
-
1401
- > Pengganti `seu-servidor.com` pelo domínio atau IP ke server Anda (termasuk port yang diperlukan, misal: `http://45.33.32.156:20128/callback`).
1402
-
1403
- **4. Salep dan salin sebagai kredensial**
1404
-
1405
- Kemudian, Google menampilkan **ID Klien** dan **Rahasia Klien**.
1406
-
1407
- **5. Konfigurasikan sebagai variáveis de ambiente**
1408
-
1409
- Di `.env` (atau berbagai lingkungan di Docker):
1410
-
1411
- ```bash
1412
- # Para Antigravity:
1413
- ANTIGRAVITY_OAUTH_CLIENT_ID=seu-client-id.apps.googleusercontent.com
1414
- ANTIGRAVITY_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
1415
-
1416
- # Para Gemini CLI:
1417
- GEMINI_OAUTH_CLIENT_ID=seu-client-id.apps.googleusercontent.com
1418
- GEMINI_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
1419
- GEMINI_CLI_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
1420
- ```
1421
-
1422
- **6. Memulai kembali OmniRoute**
1423
-
1424
- ```bash
1425
- # Se usando npm:
1426
- npm run dev
1427
-
1428
- # Se usando Docker:
1429
- docker restart omniroute
1430
- ```
1431
-
1432
- **7. Mari kita sambungkan lagi**
1433
-
1434
- Dasbor → Penyedia → Antigravitasi (atau Gemini CLI) → OAuth
1435
-
1436
- Sekarang o Google dialihkan langsung ke `https://seu-servidor.com/callback` dan autentikasi berfungsi.
1437
-
1438
- ---
1439
-
1440
- ### Solusi sementara (sem configurar credenciais próprias)
1441
-
1442
- Jika Anda tidak ingin membuat kredensial pribadi sekarang, Anda mungkin dapat menggunakan fluks **panduan URL**:
1443
-
1444
- 1. O OmniRoute membuka URL autoriza dari Google
1445
- 2. Setelah Anda autorizar, Google mengarahkan pengalihan ke `localhost` (yang gagal pada server jarak jauh)
1446
- 3. **Salin URL lengkap** dari bilah akhir browser Anda (meskipun halaman tidak dimuat)
1447
- 4. Gunakan URL ini karena tidak ada modal koneksi ke OmniRoute
1448
- 5. Klik pada **"Hubungkan"**
1449
-
1450
- > Solusi ini berfungsi karena kode otorisasi pada URL valid secara independen untuk mengarahkan ulang ke akun atau tidak.
1451
-
1452
- </details>
1453
-
1454
- ---
1455
-
1456
- ## 🛠️
1457
-
1458
- - **Runtime**: Node.js 18–22 LTS (⚠️ Node.js 24+ **tidak didukung** — `better-sqlite3` biner asli tidak kompatibel)
1459
- - **Bahasa**: TypeScript 5.9 — **100% TypeScript** di `src/` dan `open-sse/` (v1.0.6)
1460
- - **Kerangka Kerja**: Next.js 16 + React 19 + Tailwind CSS 4
1461
- - **Database**: LowDB (JSON) + SQLite (status domain + log proksi)
1462
- - **Streaming**: Peristiwa Terkirim Server (SSE)
1463
- - **Auth**: OAuth 2.0 (PKCE) + JWT + Kunci API
1464
- - **Pengujian**: pelari pengujian Node.js (368+ pengujian unit)
1465
- - **CI/CD**: Tindakan GitHub (publikasi npm otomatis + Docker Hub saat dirilis)
1466
- - **Situs Web**: [omniroute.online](https://omniroute.online)
1467
- - **Paket**: [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute)
1468
- - **Pekerja Pelabuhan**: [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute)
1469
- - **Ketahanan**: Pemutus sirkuit, kemunduran eksponensial, kawanan anti-guntur, spoofing TLS
1470
-
1471
- ---
1472
-
1473
- ## 📖 Dokumentasi
1474
-
1475
- | Dokumen | Deskripsi |
1476
- | -------------------------------------------- | --------------------------------------------------- |
1477
- | [User Guide](docs/USER_GUIDE.md) | Penyedia, kombo, integrasi CLI, penerapan |
1478
- | [API Reference](docs/API_REFERENCE.md) | Semua titik akhir dengan contoh |
1479
- | [Troubleshooting](docs/TROUBLESHOOTING.md) | Masalah umum dan solusinya |
1480
- | [Architecture](docs/ARCHITECTURE.md) | Arsitektur sistem dan internal |
1481
- | [Contributing](CONTRIBUTING.md) | Pengaturan dan pedoman pengembangan |
1482
- | [OpenAPI Spec](docs/openapi.yaml) | Spesifikasi OpenAPI 3.0 |
1483
- | [Security Policy](SECURITY.md) | Pelaporan kerentanan dan praktik keamanan |
1484
- | [VM Deployment](docs/VM_DEPLOYMENT_GUIDE.md) | Panduan lengkap: VM + nginx + Pengaturan Cloudflare |
1485
- | [Features Gallery](docs/FEATURES.md) | Tur dasbor visual dengan tangkapan layar |
1486
-
1487
- ### 📸 Pratinjau Dasbor
1488
-
1489
- <details>
1490
- <summary><b>Klik untuk melihat tangkapan layar dasbor</b></summary>
1491
-
1492
- | Halaman | Tangkapan layar |
1493
- | ------------------ | ------------------------------------------------- |
1494
- | **Penyedia** | ![Providers](docs/screenshots/01-providers.png) |
1495
- | **Kombo** | ![Combos](docs/screenshots/02-combos.png) |
1496
- | **Analitik** | ![Analytics](docs/screenshots/03-analytics.png) |
1497
- | **Kesehatan** | ![Health](docs/screenshots/04-health.png) |
1498
- | **Penerjemah** | ![Translator](docs/screenshots/05-translator.png) |
1499
- | **Pengaturan** | ![Settings](docs/screenshots/06-settings.png) |
1500
- | **Alat CLI** | ![CLI Tools](docs/screenshots/07-cli-tools.png) |
1501
- | **Log Penggunaan** | ![Usage](docs/screenshots/08-usage.png) |
1502
- | **Titik Akhir** | ![Endpoint](docs/screenshots/09-endpoint.png) |
1503
-
1504
- </details>
1505
-
1506
- ---
1507
-
1508
- ## 🗺️
1509
-
1510
- OmniRoute memiliki **210+ fitur yang direncanakan** di berbagai fase pengembangan. Berikut adalah bidang-bidang utamanya:
1511
-
1512
- | Kategori | Fitur yang Direncanakan | Sorotan |
1513
- | ---------------------------- | ----------------------- | --------------------------------------------------------------------------------------------------- |
1514
- | 🧠 **Perutean & Kecerdasan** | 25+ | Perutean latensi terendah, perutean berbasis tag, preflight kuota, pemilihan akun P2C |
1515
- | 🔒 **Keamanan & Kepatuhan** | 20+ | Pengerasan SSRF, penyelubungan kredensial, batas tarif per titik akhir, pelingkupan kunci manajemen |
1516
- | 📊 **Kemampuan Observasi** | 15+ | Integrasi OpenTelemetry, pemantauan kuota waktu nyata, pelacakan biaya per model |
1517
- | 🔄 **Integrasi Penyedia** | 20+ | Registri model dinamis, cooldown penyedia, Codex multi-akun, penguraian kuota Salinan |
1518
- | ⚡ **Kinerja** | 15+ | Lapisan cache ganda, cache cepat, cache respons, streaming keepalive, API batch |
1519
- | 🌐 **Ekosistem** | 10+ | WebSocket API, konfigurasi hot-reload, penyimpanan konfigurasi terdistribusi, mode komersial |
1520
-
1521
- ### 🔜 Segera Hadir
1522
-
1523
- - 🔗 **Integrasi OpenCode** — Dukungan penyedia asli untuk IDE pengkodean AI OpenCode
1524
- - 🔗 **Integrasi TRAE** — Dukungan penuh untuk kerangka pengembangan AI TRAE
1525
- - 📦 **Batch API** — Pemrosesan batch asinkron untuk permintaan massal
1526
- - 🎯 **Perutean Berbasis Tag** — Merutekan permintaan berdasarkan tag dan metadata khusus
1527
- - 💰 **Strategi Biaya Terendah** — Secara otomatis memilih penyedia termurah yang tersedia
1528
-
1529
- > 📝 Spesifikasi fitur lengkap tersedia di [link](docs/new-features/) (217 spesifikasi detail)
1530
-
1531
- ---
1532
-
1533
- ## 👥 Kontributor
1534
-
1535
- [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors)
1536
-
1537
- ### Cara Berkontribusi
1538
-
1539
- 1. Cabangkan repositori
1540
- 2. Buat cabang fitur Anda (`git checkout -b feature/amazing-feature`)
1541
- 3. Komit perubahan Anda (`git commit -m 'Add amazing feature'`)
1542
- 4. Dorong ke cabang (`git push origin feature/amazing-feature`)
1543
- 5. Buka Permintaan Tarik
1544
-
1545
- Lihat [CONTRIBUTING.md](CONTRIBUTING.md) untuk panduan detailnya.
1546
-
1547
- ### Merilis Versi Baru
1548
-
1549
- ```bash
1550
- # Create a release — npm publish happens automatically
1551
- gh release create v1.0.6 --title "v1.0.6" --generate-notes
1552
- ```
1553
-
1554
- ---
1555
-
1556
- ## 📊 Sejarah Bintang
1557
-
1558
- <a href="https://star-history.com/#diegosouzapw/OmniRoute&Date">
1559
- <picture>
1560
- <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date&theme=dark" />
1561
- <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date" />
1562
- <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date" />
1563
- </picture>
1564
- </a>
1565
-
1566
- ---
1567
-
1568
- ## 🙏 Ucapan Terima Kasih
1569
-
1570
- Terima kasih khusus kepada **[9router](https://github.com/decolua/9router)** oleh **[decolua](https://github.com/decolua)** — proyek asli yang menginspirasi fork ini. OmniRoute dibangun di atas fondasi luar biasa tersebut dengan fitur tambahan, API multi-modal, dan penulisan ulang TypeScript lengkap.
1571
-
1572
- Terima kasih khusus kepada **[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)** — implementasi Go asli yang menginspirasi port JavaScript ini.
1573
-
1574
- ---
1575
-
1576
- ## 📄 Lisensi
1577
-
1578
- Lisensi MIT - lihat [LICENSE](LICENSE) untuk detailnya.
1579
-
1580
- ---
1581
-
1582
- <div align="center">
1583
- <sub>Dibangun dengan ❤️ untuk pengembang yang membuat kode 24/7</sub>
1584
- <br/>
1585
- <sub><a href="https://omniroute.online">omniroute.online</a></sub>
1586
- </div>