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.ms.md DELETED
@@ -1,1587 +0,0 @@
1
- <div align="center">
2
- <img src="./docs/screenshots/MainOmniRoute.png" alt="OmniRoute Dashboard" width="800"/>
3
-
4
- # 🚀 OmniRoute — Gerbang AI Percuma
5
-
6
- ### Jangan sekali-kali berhenti mengekod. Penghalaan pintar ke **model AI PERCUMA & kos rendah** dengan sandaran automatik.
7
-
8
- _Proksi API universal anda — satu titik akhir, 36+ pembekal, masa henti sifar._
9
-
10
- **Penyelesaian Sembang • Pembenaman • Penjanaan Imej • Audio • Kedudukan Semula • 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
- ### 🤖 Pembekal AI percuma untuk ejen pengekodan kegemaran anda
27
-
28
- _Sambungkan mana-mana alat IDE atau CLI berkuasa AI melalui OmniRoute — get laluan API percuma untuk pengekodan tanpa had._
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 ejen menyambung melalui <code>http://localhost:20128/v1</code> atau <code>http://cloud.omniroute.online/v1</code> atau model <code>http://cloud.omniroute.online/v1 —i_24_TOKEN dan satu —i_konfigurasi 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 membazir wang dan mencapai had:**
157
-
158
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Kuota langganan tamat tempoh tidak digunakan setiap bulan
159
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Had kadar menghalang anda pertengahan pengekodan
160
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> API Mahal ($20-50/bulan bagi setiap pembekal)
161
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Pertukaran manual antara pembekal
162
-
163
- **OmniRoute menyelesaikan ini:**
164
-
165
- - ✅ **Maksimumkan langganan** - Jejaki kuota, gunakan setiap bit sebelum ditetapkan semula
166
- - ✅ **Auto sandaran** - Langganan → Kunci API → Murah → Percuma, masa henti sifar
167
- - ✅ **Berbilang akaun** - Round-robin antara akaun bagi setiap pembekal
168
- - ✅ **Universal** - Berfungsi dengan Kod Claude, Codex, Gemini CLI, Kursor, Cline, OpenClaw, sebarang alat CLI
169
-
170
- ---
171
-
172
- ## 📧 Sokongan
173
-
174
- > 💬 **Sertai komuniti kami!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Dapatkan bantuan, kongsi petua dan kekal kemas kini.
175
-
176
- - **Laman web**: [omniroute.online](https://omniroute.online)
177
- - **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute)
178
- - **Isu**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues)
179
- - **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
180
- - **Projek Asal**: [9router by decolua](https://github.com/decolua/9router)
181
-
182
- ---
183
-
184
- ## 🔄 Cara Ia Berfungsi
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
- ## 🎯 Perkara yang Selesaikan OmniRoute — 30 Titik Sakit Nyata & Kes Penggunaan
214
-
215
- > **Setiap pembangun yang menggunakan alatan AI menghadapi masalah ini setiap hari.** OmniRoute dibina untuk menyelesaikan kesemuanya — daripada lebihan kos kepada blok serantau, daripada aliran OAuth yang rosak kepada operasi protokol dan kebolehmerhatian perusahaan.
216
-
217
- <details>
218
- <summary><b>💸 1. "Saya membayar untuk langganan yang mahal tetapi masih terganggu oleh had"</b></summary>
219
-
220
- Pembangun membayar $20–200/bulan untuk Claude Pro, Codex Pro atau GitHub Copilot. Walaupun membayar, kuota mempunyai siling — 5j penggunaan, had mingguan atau had kadar seminit. Sesi pertengahan pengekodan, pembekal berhenti bertindak balas dan pembangun kehilangan aliran dan produktiviti.
221
-
222
- **Cara OmniRoute menyelesaikannya:**
223
-
224
- - **Smart 4-Tier Fallback** — Jika kuota langganan habis, diubah hala secara automatik ke API Key → Murah → Percuma tanpa campur tangan manual
225
- - **Penjejakan Kuota Masa Nyata** — Menunjukkan penggunaan token dalam masa nyata dengan kira detik tetapan semula (5j, harian, mingguan)
226
- - **Sokongan Berbilang Akaun** — Berbilang akaun bagi setiap pembekal dengan auto round-robin — apabila satu kehabisan, beralih kepada yang seterusnya
227
- - **Kombo Tersuai** — Rantaian sandaran yang boleh disesuaikan dengan 6 strategi pengimbangan (isi dahulu, round-robin, P2C, rawak, paling kurang digunakan, dioptimumkan kos)
228
- - **Kuota Perniagaan Codex** — Pemantauan kuota ruang kerja Perniagaan/Pasukan terus dalam papan pemuka
229
-
230
- </details>
231
-
232
- <details>
233
- <summary><b>🔌 2. "Saya perlu menggunakan berbilang penyedia tetapi setiap satu mempunyai API yang berbeza"</b></summary>
234
-
235
- OpenAI menggunakan satu format, Claude (Anthropic) menggunakan satu lagi, Gemini satu lagi. Jika pembangun ingin menguji model daripada pembekal yang berbeza atau sandaran antara mereka, mereka perlu mengkonfigurasi semula SDK, menukar titik akhir, menangani format yang tidak serasi. Pembekal tersuai (FriendLI, NIM) mempunyai titik akhir model bukan standard.
236
-
237
- **Cara OmniRoute menyelesaikannya:**
238
-
239
- - **Titik Akhir Disatukan** — Satu `http://localhost:20128/v1` berfungsi sebagai proksi untuk kesemua 36+ pembekal
240
- - **Format Terjemahan** — Automatik dan telus: OpenAI ↔ Claude ↔ Gemini ↔ Responses API
241
- - **Pembersihan Tindak Balas** — Mengosongkan medan bukan standard (`x_groq`, `usage_breakdown`, `service_tier`) yang memecahkan OpenAI SDK v1.83+
242
- - **Penormalan Peranan** — Menukar `developer` → `system` untuk penyedia bukan OpenAI; `system` → `user` untuk GLM/ERNIE
243
- - **Think Tag Extraction** — Mengekstrak blok `<think>` daripada model seperti DeepSeek R1 ke dalam `reasoning_content` standard
244
- - **Output Berstruktur untuk Gemini** — `json_schema` → `responseMimeType`/`responseSchema` penukaran automatik
245
- - **`stream` lalai kepada `false`** — Menjajarkan dengan spesifikasi OpenAI, mengelakkan SSE yang tidak dijangka dalam Python/Rust/Go SDK
246
-
247
- </details>
248
-
249
- <details>
250
- <summary><b>🌐 3. "Pembekal AI saya menyekat wilayah/negara saya"</b></summary>
251
-
252
- Penyedia seperti OpenAI/Codex menyekat akses daripada kawasan geografi tertentu. Pengguna mendapat ralat seperti `unsupported_country_region_territory` semasa sambungan OAuth dan API. Ini amat mengecewakan bagi pemaju dari negara membangun.
253
-
254
- **Cara OmniRoute menyelesaikannya:**
255
-
256
- - **Konfigurasi Proksi 3 Tahap** — Proksi boleh dikonfigurasikan pada 3 peringkat: global (semua trafik), setiap pembekal (satu pembekal sahaja) dan setiap sambungan/kunci
257
- - **Lencana Proksi Berkod Warna** — Penunjuk visual: 🟢 proksi global, 🟡 proksi pembekal, 🔵 proksi sambungan, sentiasa menunjukkan IP
258
- - **Pertukaran Token OAuth Melalui Proksi** — Aliran OAuth juga melalui proksi, menyelesaikan `unsupported_country_region_territory`
259
- - **Ujian Sambungan melalui Proksi** — Ujian sambungan menggunakan proksi yang dikonfigurasikan (tiada lagi pintasan langsung)
260
- - **Sokongan SOCKS5** — Sokongan proksi SOCKS5 penuh untuk penghalaan keluar
261
- - **TLS Fingerprint Spoofing** — Cap jari TLS seperti pelayar melalui `wreq-js` untuk memintas pengesanan bot
262
-
263
- </details>
264
-
265
- <details>
266
- <summary><b>🆓 4. "Saya mahu menggunakan AI untuk pengekodan tetapi saya tidak mempunyai wang"</b></summary>
267
-
268
- Tidak semua orang boleh membayar $20–200/bulan untuk langganan AI. Pelajar, pembangun dari negara baru muncul, penggemar dan pekerja bebas memerlukan akses kepada model berkualiti pada kos sifar.
269
-
270
- **Cara OmniRoute menyelesaikannya:**
271
-
272
- - **Pembekal Peringkat Percuma Terbina dalam** — Sokongan asli untuk 100% pembekal percuma: iFlow (8 model tanpa had), Qwen (3 model tanpa had), Kiro (Claude secara percuma), Gemini CLI (180K/bulan percuma)
273
- - **Ollama Cloud** — Cloud-hosted Ollama models at `api.ollama.com` with free "Light usage" tier; use `ollamacloud/<model>` prefix
274
- - **Kombo Percuma Sahaja** — Rantaian `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/bulan dengan masa henti sifar
275
- - **Kredit Percuma NVIDIA NIM** — 1000 kredit percuma disepadukan
276
- - **Strategi Dioptimumkan Kos** — Strategi penghalaan yang secara automatik memilih pembekal yang tersedia paling murah
277
-
278
- </details>
279
-
280
- <details>
281
- <summary><b>🔒 5. "Saya perlu melindungi gerbang AI saya daripada akses tanpa kebenaran"</b></summary>
282
-
283
- Apabila mendedahkan get laluan AI kepada rangkaian (LAN, VPS, Docker), sesiapa sahaja yang mempunyai alamat boleh menggunakan token/kuota pembangun. Tanpa perlindungan, API terdedah kepada penyalahgunaan, suntikan segera dan penyalahgunaan.
284
-
285
- **Cara OmniRoute menyelesaikannya:**
286
-
287
- - **Pengurusan Kunci API** — Penjanaan, penggiliran dan skop setiap pembekal dengan halaman `/dashboard/api-manager` khusus
288
- - **Kebenaran Tahap Model** — Hadkan kunci API kepada model tertentu (`openai/*`, corak kad bebas), dengan Togol Benarkan Semua/Sekat
289
- - **Perlindungan Titik Akhir API** — Memerlukan kunci untuk `/v1/models` dan menyekat penyedia tertentu daripada penyenaraian
290
- - **Auth Guard + CSRF Protection** — Semua laluan papan pemuka dilindungi dengan `withAuth` middleware + token CSRF
291
- - **Penghad Kadar** — Pengehadan kadar Per-IP dengan tetingkap boleh dikonfigurasikan
292
- - **Penapisan IP** — Senarai Benar/senarai sekat untuk kawalan akses
293
- - **Pengawal Suntikan Segera** — Pensanitasi terhadap corak segera yang berniat jahat
294
- - **Penyulitan AES-256-GCM** — Bukti kelayakan disulitkan semasa rehat
295
-
296
- </details>
297
-
298
- <details>
299
- <summary><b>🛑 6. "Pembekal saya gagal dan saya kehilangan aliran pengekodan saya"</b></summary>
300
-
301
- Pembekal AI boleh menjadi tidak stabil, mengembalikan ralat 5xx atau mencapai had kadar sementara. Jika pembangun bergantung pada penyedia tunggal, mereka akan terganggu. Tanpa pemutus litar, percubaan semula berulang boleh ranap aplikasi.
302
-
303
- **Cara OmniRoute menyelesaikannya:**
304
-
305
- - **Pemutus Litar bagi setiap pembekal** — Auto buka/tutup dengan ambang boleh dikonfigurasikan dan cooldown (Ditutup/Buka/Separuh Terbuka)
306
- - **Penyingkiran Eksponen** — Kelewatan percubaan semula progresif
307
- - **Kawanan Anti Gemuruh** — Mutex + perlindungan semafor terhadap ribut percubaan semula serentak
308
- - **Kombo Rantai Sandar** — Jika pembekal utama gagal, secara automatik jatuh melalui rantaian tanpa campur tangan
309
- - **Pemutus Litar Kombo** — Lumpuhkan automatik pembekal yang gagal dalam rantaian kombo
310
- - **Papan Pemuka Kesihatan** — Pemantauan masa aktif, keadaan pemutus litar, penguncian, statistik cache, kependaman p50/p95/p99
311
-
312
- </details>
313
-
314
- <details>
315
- <summary><b>🔧 7. "Mengkonfigurasi setiap alat AI adalah membosankan dan berulang"</b></summary>
316
-
317
- Pembangun menggunakan Kursor, Kod Claude, Codex CLI, OpenClaw, Gemini CLI, Kod Kilo... Setiap alat memerlukan konfigurasi yang berbeza (titik akhir API, kunci, model). Mengkonfigurasi semula apabila menukar pembekal atau model adalah membuang masa.
318
-
319
- **Cara OmniRoute menyelesaikannya:**
320
-
321
- - **Papan Pemuka Alat CLI** — Halaman khusus dengan persediaan satu klik untuk Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline
322
- - **GitHub Copilot Config Generator** — Menghasilkan `chatLanguageModels.json` untuk Kod VS dengan pemilihan model pukal
323
- - **Onboarding Wizard** — Persediaan 4 langkah berpandu untuk pengguna kali pertama
324
- - **Satu titik akhir, semua model** — Konfigurasikan `http://localhost:20128/v1` sekali, akses 36+ pembekal
325
-
326
- </details>
327
-
328
- <details>
329
- <summary><b>🔑 8. "Menguruskan token OAuth daripada berbilang penyedia adalah neraka"</b></summary>
330
-
331
- Kod Claude, Codex, Gemini CLI, Copilot — semuanya menggunakan OAuth 2.0 dengan token tamat tempoh. Pembangun perlu sentiasa mengesahkan semula, menangani `client_secret is missing`, `redirect_uri_mismatch` dan kegagalan pada pelayan jauh. OAuth pada LAN/VPS amat bermasalah.
332
-
333
- **Cara OmniRoute menyelesaikannya:**
334
-
335
- - **Muat Semula Token Auto** — Token OAuth dimuat semula di latar belakang sebelum tamat tempoh
336
- - **OAuth 2.0 (PKCE) Terbina dalam** — Aliran automatik untuk Kod Claude, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow
337
- - **OAuth Berbilang Akaun** — Berbilang akaun bagi setiap pembekal melalui pengekstrakan token JWT/ID
338
- - **OAuth LAN/Remote Fix** — Pengesanan IP peribadi untuk `redirect_uri` + mod URL manual untuk pelayan jauh
339
- - **OAuth Behind Nginx** — Menggunakan `window.location.origin` untuk keserasian proksi terbalik
340
- - **Panduan OAuth Jauh** — Panduan langkah demi langkah untuk kelayakan Google Cloud pada VPS/Docker
341
-
342
- </details>
343
-
344
- <details>
345
- <summary><b>📊 9. "Saya tidak tahu berapa banyak yang saya belanjakan atau di mana"</b></summary>
346
-
347
- Pembangun menggunakan berbilang penyedia berbayar tetapi tidak mempunyai pandangan bersatu tentang perbelanjaan. Setiap pembekal mempunyai papan pemuka pengebilan sendiri, tetapi tiada paparan disatukan. Kos yang tidak dijangka boleh bertimbun.
348
-
349
- **Cara OmniRoute menyelesaikannya:**
350
-
351
- - **Papan Pemuka Analitis Kos** — Penjejakan kos per-token dan pengurusan belanjawan bagi setiap pembekal
352
- - **Had Belanjawan setiap Peringkat** — Siling perbelanjaan setiap peringkat yang mencetuskan sandaran automatik
353
- - **Konfigurasi Harga Per-Model** — Harga boleh dikonfigurasikan bagi setiap model
354
- - **Statistik Penggunaan Setiap Kunci API** — Kiraan permintaan dan cap masa yang terakhir digunakan setiap kunci
355
- - **Papan Pemuka Analitik** — Kad statistik, carta penggunaan model, jadual pembekal dengan kadar kejayaan dan kependaman
356
-
357
- </details>
358
-
359
- <details>
360
- <summary><b>🐛 10. "Saya tidak dapat mendiagnosis ralat dan masalah dalam panggilan AI"</b></summary>
361
-
362
- Apabila panggilan gagal, pembangun tidak tahu sama ada ia adalah had kadar, token tamat tempoh, format yang salah atau ralat pembekal. Log berpecah-belah merentasi terminal yang berbeza. Tanpa pemerhatian, penyahpepijatan adalah percubaan-dan-ralat.
363
-
364
- **Cara OmniRoute menyelesaikannya:**
365
-
366
- - **Papan Pemuka Log Bersatu** — 4 tab: Log Permintaan, Log Proksi, Log Audit, Konsol
367
- - **Pemapar Log Konsol** — Pemapar gaya terminal masa nyata dengan tahap berkod warna, tatal automatik, carian, penapis
368
- - **Log Proksi SQLite** — Log berterusan yang bertahan dimulakan semula
369
- - **Taman Permainan Penterjemah** — 4 mod nyahpepijat: Taman Permainan (terjemahan format), Penguji Sembang (perjalanan pergi balik), Bangku Ujian (batch), Monitor Langsung (masa nyata)
370
- - **Permintaan Telemetri** — kependaman p50/p95/p99 + pengesanan X-Request-Id
371
- - **Pengelogan Berasaskan Fail dengan Putaran** — Pemintas konsol menangkap segala-galanya ke log JSON dengan putaran berasaskan saiz
372
-
373
- </details>
374
-
375
- <details>
376
- <summary><b>🏗️ 11. "Menyedia dan menyelenggara gerbang adalah rumit"</b></summary>
377
-
378
- Memasang, mengkonfigurasi dan menyelenggara proksi AI merentas persekitaran yang berbeza (tempatan, VPS, Docker, awan) adalah intensif buruh. Masalah seperti laluan berkod keras, `EACCES` pada direktori, konflik port dan binaan merentas platform menambah geseran.
379
-
380
- **Cara OmniRoute menyelesaikannya:**
381
-
382
- - **pemasangan global npm** — `npm install -g omniroute && omniroute` — selesai
383
- - **Docker Multi-Platform** — AMD64 + ARM64 asli (Apple Silicon, AWS Graviton, Raspberry Pi)
384
- - **Profil Karang Docker** — `base` (tiada alat CLI) dan `cli` (dengan Kod Claude, Codex, OpenClaw)
385
- - **Apl Desktop Elektron** — Apl asli untuk Windows/macOS/Linux dengan dulang sistem, auto mula, mod luar talian
386
- - **Mod Split-Port** — API dan Papan Pemuka pada port berasingan untuk senario lanjutan (proksi terbalik, rangkaian kontena)
387
- - **Cloud Sync** — Konfigurasikan penyegerakan merentas peranti melalui Cloudflare Workers
388
- - **Sandaran DB** — Sandaran automatik, pulihkan, eksport dan import semua tetapan
389
-
390
- </details>
391
-
392
- <details>
393
- <summary><b>🌍 12. "Antara muka adalah bahasa Inggeris sahaja dan pasukan saya tidak berbahasa Inggeris"</b></summary>
394
-
395
- Pasukan di negara bukan berbahasa Inggeris, terutamanya di Amerika Latin, Asia dan Eropah, bergelut dengan antara muka bahasa Inggeris sahaja. Halangan bahasa mengurangkan penggunaan dan meningkatkan ralat konfigurasi.
396
-
397
- **Cara OmniRoute menyelesaikannya:**
398
-
399
- - **Papan pemuka i18n — 30 Bahasa** — Semua 500+ kunci diterjemahkan termasuk bahasa Arab, Bulgaria, Denmark, Jerman, Sepanyol, Finland, Perancis, Ibrani, Hindi, Hungary, Indonesia, Itali, Jepun, Korea, Melayu, Belanda, Norway, Poland, Portugis (PT/BR), Romania, Rusia, Slovak, Sweden, Thai, Ukraine, Vietnam, Cina
400
- - **Sokongan RTL** — Sokongan kanan ke kiri untuk bahasa Arab dan Ibrani
401
- - **README Berbilang Bahasa** — 30 terjemahan dokumentasi lengkap
402
- - **Pemilih Bahasa** — Ikon Glob dalam pengepala untuk penukaran masa nyata
403
-
404
- </details>
405
-
406
- <details>
407
- <summary><b>🔄 13. "Saya perlukan lebih daripada sembang — saya perlukan benam, imej, audio"</b></summary>
408
-
409
- AI bukan sekadar penyelesaian sembang. Pembangun perlu menjana imej, menyalin audio, membuat pembenaman untuk RAG, menyusun semula dokumen dan kandungan sederhana. Setiap API mempunyai titik akhir dan format yang berbeza.
410
-
411
- **Cara OmniRoute menyelesaikannya:**
412
-
413
- - **Pembenaman** — `/v1/embeddings` dengan 6 pembekal dan 9+ model
414
- - **Penjanaan Imej** — `/v1/images/generations` dengan 10 pembekal dan 20+ model (OpenAI, xAI, Together, Bunga Api, Nebius, Hiperbolik, NanoBanana, Antigraviti, SD WebUI, ComfyUI)
415
- - **Teks-ke-Video** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) dan SD WebUI
416
- - **Teks-ke-Muzik** — `/v1/music/generations` — ComfyUI (Audio Terbuka, MusicGen)
417
- - **Transkripsi Audio** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3
418
- - **Teks-ke-Ucapan** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, Inworld, Cartesia, PlayHT, + pembekal sedia ada
419
- - **Moderasi** — `/v1/moderations` — Pemeriksaan keselamatan kandungan
420
- - **Penyusunan semula** — `/v1/rerank` — Penyusunan semula perkaitan dokumen
421
- - **Respons API** — Sokongan penuh `/v1/responses` untuk Codex
422
-
423
- </details>
424
-
425
- <details>
426
- <summary><b>🧪 14. "Saya tiada cara untuk menguji dan membandingkan kualiti merentas model"</b></summary>
427
-
428
- Pembangun ingin mengetahui model mana yang terbaik untuk kes penggunaan mereka — kod, terjemahan, penaakulan — tetapi membandingkan secara manual adalah perlahan. Tiada alat eval bersepadu wujud.
429
-
430
- **Cara OmniRoute menyelesaikannya:**
431
-
432
- - **LLM Evaluations** — Ujian set emas dengan 10 kes pra-muat meliputi salam, matematik, geografi, penjanaan kod, pematuhan JSON, terjemahan, penurunan harga, penolakan keselamatan
433
- - **4 Strategi Padanan** — `exact`, `contains`, `regex`, `custom` (fungsi JS)
434
- - **Bangku Ujian Taman Permainan Penterjemah** — Ujian kelompok dengan berbilang input dan output yang dijangka, perbandingan merentas pembekal
435
- - **Penguji Sembang** — Perjalanan pergi balik penuh dengan pemaparan respons visual
436
- - **Pantau Langsung** — Strim masa nyata semua permintaan yang mengalir melalui proksi
437
-
438
- </details>
439
-
440
- <details>
441
- <summary><b>📈 15. "Saya perlu skala tanpa kehilangan prestasi"</b></summary>
442
-
443
- Apabila volum permintaan bertambah, tanpa menyimpan cache soalan yang sama menjana kos pendua. Tanpa idempotensi, pendua meminta pemprosesan sisa. Had kadar setiap pembekal mesti dipatuhi.
444
-
445
- **Cara OmniRoute menyelesaikannya:**
446
-
447
- - **Cache Semantik** — Cache dua peringkat (tandatangan + semantik) mengurangkan kos dan kependaman
448
- - **Request Idempotency** — tetingkap penyahduplikasi 5s untuk permintaan yang sama
449
- - **Pengesanan Had Kadar** — RPM setiap pembekal, jurang min dan penjejakan serentak maks
450
- - **Had Kadar Boleh Diedit** — Lalai boleh dikonfigurasikan dalam Tetapan → Ketahanan dengan kegigihan
451
- - **Cache Pengesahan Kunci API** — Cache 3 peringkat untuk prestasi pengeluaran
452
- - **Papan Pemuka Kesihatan dengan Telemetri** — kependaman p50/p95/p99, statistik cache, masa beroperasi
453
-
454
- </details>
455
-
456
- <details>
457
- <summary><b>🤖 16. "Saya mahu mengawal tingkah laku model secara global"</b></summary>
458
-
459
- Pembangun yang mahukan semua respons dalam bahasa tertentu, dengan nada tertentu atau ingin mengehadkan token penaakulan. Mengkonfigurasi ini dalam setiap alat/permintaan adalah tidak praktikal.
460
-
461
- **Cara OmniRoute menyelesaikannya:**
462
-
463
- - **System Prompt Injection** — Gesaan global digunakan untuk semua permintaan
464
- - **Pengesahan Belanjawan Berfikir** — Kawalan peruntukan token penaakulan setiap permintaan (laluan, auto, tersuai, adaptif)
465
- - **6 Strategi Penghalaan** — Strategi global yang menentukan cara permintaan diedarkan
466
- - **Penghala Wildcard** — Corak `provider/*` halakan secara dinamik kepada mana-mana pembekal
467
- - **Kombo Dayakan/Lumpuhkan Togol** — Togol kombo terus dari papan pemuka
468
- - **Togol Pembekal** — Dayakan/lumpuhkan semua sambungan untuk pembekal dengan satu klik
469
- - **Pembekal Disekat** — Kecualikan pembekal khusus daripada penyenaraian `/v1/models`
470
-
471
- </details>
472
-
473
- <details>
474
- <summary><b>🧰 17. "Saya memerlukan alatan MCP sebagai keupayaan produk kelas pertama"</b></summary>
475
-
476
- Banyak get laluan AI mendedahkan MCP hanya sebagai butiran pelaksanaan tersembunyi. Pasukan memerlukan lapisan operasi yang boleh dilihat dan boleh diurus.
477
-
478
- **Cara OmniRoute menyelesaikannya:**
479
-
480
- - MCP muncul dalam navigasi papan pemuka dan tab protokol titik akhir
481
- - Halaman pengurusan MCP khusus dengan proses, alatan, skop dan audit
482
- - Permulaan pantas terbina dalam untuk `omniroute --mcp` dan onboarding pelanggan
483
-
484
- </details>
485
-
486
- <details>
487
- <summary><b>🧠 18. "Saya memerlukan orkestrasi A2A dengan laluan tugas penyegerakan + aliran"</b></summary>
488
-
489
- Aliran kerja ejen memerlukan balasan langsung dan pelaksanaan strim jangka panjang dengan kawalan kitaran hayat.
490
-
491
- **Cara OmniRoute menyelesaikannya:**
492
-
493
- - Titik akhir A2A JSON-RPC (`POST /a2a`) dengan `message/send` dan `message/stream`
494
- - Penstriman SSE dengan penyebaran keadaan terminal
495
- - API kitaran hayat tugas untuk `tasks/get` dan `tasks/cancel`
496
-
497
- </details>
498
-
499
- <details>
500
- <summary><b>🛰️ 19. "Saya memerlukan kesihatan proses MCP sebenar, bukan status yang diduga"</b></summary>
501
-
502
- Pasukan operasi perlu mengetahui sama ada MCP sebenarnya masih hidup, bukan hanya sama ada API boleh dicapai.
503
-
504
- **Cara OmniRoute menyelesaikannya:**
505
-
506
- - Fail degupan jantung masa jalan dengan PID, cap masa, pengangkutan, kiraan alat dan mod skop
507
- - API status MCP yang menggabungkan degupan jantung + aktiviti terkini
508
- - Kad status UI untuk kesegaran proses/masa hidup/degupan jantung
509
-
510
- </details>
511
-
512
- <details>
513
- <summary><b>📋 20. "Saya memerlukan pelaksanaan alat MCP yang boleh diaudit"</b></summary>
514
-
515
- Apabila alat mengubah konfigurasi atau mencetuskan tindakan ops, pasukan memerlukan kebolehkesanan forensik.
516
-
517
- **Cara OmniRoute menyelesaikannya:**
518
-
519
- - Pengelogan audit yang disokong SQLite untuk panggilan alat MCP
520
- - Tapis mengikut alat, kejayaan/kegagalan, kunci API dan penomboran
521
- - Jadual audit papan pemuka + titik akhir statistik untuk automasi
522
-
523
- </details>
524
-
525
- <details>
526
- <summary><b>🔐 21. "Saya memerlukan keizinan MCP berskop bagi setiap penyepaduan"</b></summary>
527
-
528
- Pelanggan yang berbeza harus mempunyai akses paling tidak istimewa kepada kategori alat.
529
-
530
- **Cara OmniRoute menyelesaikannya:**
531
-
532
- - 9 skop MCP berbutir untuk akses alat terkawal
533
- - Penguatkuasaan skop dan keterlihatan dalam UI pengurusan MCP
534
- - Postur lalai yang selamat untuk perkakas operasi
535
-
536
- </details>
537
-
538
- <details>
539
- <summary><b>⚙️ 22. "Saya memerlukan kawalan operasi tanpa mengatur semula"</b></summary>
540
-
541
- Pasukan memerlukan perubahan masa jalan yang cepat semasa insiden atau peristiwa kos.
542
-
543
- **Cara OmniRoute menyelesaikannya:**
544
-
545
- - Tukar pengaktifan kombo terus dari papan pemuka MCP
546
- - Gunakan profil daya tahan daripada pek dasar yang telah ditetapkan
547
- - Tetapkan semula keadaan pemutus litar daripada panel operasi yang sama
548
-
549
- </details>
550
-
551
- <details>
552
- <summary><b>🔄 23. "Saya memerlukan keterlihatan dan pembatalan kitaran hayat tugas A2A secara langsung"</b></summary>
553
-
554
- Tanpa keterlihatan kitaran hayat, insiden tugasan menjadi sukar untuk dicuba.
555
-
556
- **Cara OmniRoute menyelesaikannya:**
557
-
558
- - Penyenaraian tugas/penapisan mengikut keadaan/kemahiran dengan penomboran
559
- - Latih tubi tentang metadata tugas, peristiwa dan artifak
560
- - Titik akhir pembatalan tugas dan tindakan UI dengan pengesahan
561
-
562
- </details>
563
-
564
- <details>
565
- <summary><b>🌊 24. "Saya memerlukan metrik strim aktif untuk beban A2A"</b></summary>
566
-
567
- Aliran kerja penstriman memerlukan cerapan operasi tentang konkurensi dan sambungan langsung.
568
-
569
- **Cara OmniRoute menyelesaikannya:**
570
-
571
- - Kaunter aliran aktif disepadukan ke dalam status A2A
572
- - Cap masa tugas terakhir dan kiraan setiap negeri
573
- - Kad papan pemuka A2A untuk pemantauan operasi masa nyata
574
-
575
- </details>
576
-
577
- <details>
578
- <summary><b>🪪 25. "Saya memerlukan penemuan ejen standard untuk pelanggan"</b></summary>
579
-
580
- Pelanggan dan orkestra luar memerlukan metadata yang boleh dibaca mesin untuk onboarding.
581
-
582
- **Cara OmniRoute menyelesaikannya:**
583
-
584
- - Kad Agen terdedah pada `/.well-known/agent.json`
585
- - Keupayaan dan kemahiran ditunjukkan dalam UI pengurusan
586
- - API status A2A termasuk metadata penemuan untuk automasi
587
-
588
- </details>
589
-
590
- <details>
591
- <summary><b>🧭 26. "Saya memerlukan kebolehtemuan protokol dalam produk UX"</b></summary>
592
-
593
- Jika pengguna tidak dapat menemui permukaan protokol, penggunaan dan kualiti sokongan akan menurun.
594
-
595
- **Cara OmniRoute menyelesaikannya:**
596
-
597
- - Entri bar sisi untuk MCP dan A2A
598
- - Tab Protokol halaman titik akhir dengan permulaan pantas dan status
599
- - Pautan dari gambaran keseluruhan ke papan pemuka pengurusan khusus
600
-
601
- </details>
602
-
603
- <details>
604
- <summary><b>🧪 27. "Saya memerlukan pengesahan protokol hujung ke hujung dengan pelanggan sebenar"</b></summary>
605
-
606
- Ujian olok-olok tidak mencukupi untuk mengesahkan keserasian protokol sebelum dikeluarkan.
607
-
608
- **Cara OmniRoute menyelesaikannya:**
609
-
610
- - Suite E2E yang but apl dan menggunakan pengangkutan pelanggan MCP SDK sebenar
611
- - Ujian pelanggan A2A untuk penemuan, menghantar, menstrim, mendapatkan dan membatalkan aliran
612
- - Periksa silang dakwaan terhadap audit MCP dan API tugasan A2A
613
-
614
- </details>
615
-
616
- <details>
617
- <summary><b>📡 28. "Saya memerlukan pemerhatian bersatu merentas semua antara muka"</b></summary>
618
-
619
- Memisahkan kebolehmerhatian mengikut protokol mewujudkan titik buta dan MTTR yang lebih panjang.
620
-
621
- **Cara OmniRoute menyelesaikannya:**
622
-
623
- - Papan pemuka/log/analisis bersatu dalam satu produk
624
- - Kesihatan + audit + telemetri permintaan merentas lapisan OpenAI, MCP dan A2A
625
- - API Operasi untuk status dan automasi
626
-
627
- </details>
628
-
629
- <details>
630
- <summary><b>💼 29. "Saya memerlukan satu masa jalan untuk proksi + alatan + orkestrasi ejen"</b></summary>
631
-
632
- Menjalankan banyak perkhidmatan berasingan meningkatkan kos operasi dan mod kegagalan.
633
-
634
- **Cara OmniRoute menyelesaikannya:**
635
-
636
- - Proksi serasi OpenAI, pelayan MCP dan pelayan A2A dalam satu tindanan
637
- - Kebenaran dikongsi, daya tahan, stor data dan kebolehmerhatian
638
- - Model dasar yang konsisten merentas semua permukaan interaksi
639
-
640
- </details>
641
-
642
- <details>
643
- <summary><b>🚀 30. "Saya perlu menghantar aliran kerja ejentik tanpa sebaran kod gam"</b></summary>
644
-
645
- Pasukan kehilangan halaju apabila mencantumkan berbilang perkhidmatan dan skrip ad-hoc.
646
-
647
- **Cara OmniRoute menyelesaikannya:**
648
-
649
- - Strategi titik akhir bersatu untuk pelanggan dan ejen
650
- - UI pengurusan protokol terbina dalam dan laluan pengesahan asap
651
- - Asas sedia pengeluaran (keselamatan, pembalakan, daya tahan, sandaran)
652
-
653
- </details>
654
-
655
- ### Contoh Buku Main (Kes Penggunaan Bersepadu)
656
-
657
- **Playbook A: Maksimumkan langganan berbayar + sandaran murah**
658
-
659
- ```txt
660
- Combo: "maximize-claude"
661
- 1. cc/claude-opus-4-6
662
- 2. glm/glm-4.7
663
- 3. if/kimi-k2-thinking
664
-
665
- Monthly cost: $20 + small backup spend
666
- Outcome: higher quality, near-zero interruption
667
- ```
668
-
669
- **Playbook B: Timbunan pengekodan kos sifar**
670
-
671
- ```txt
672
- Combo: "free-forever"
673
- 1. gc/gemini-3-flash
674
- 2. if/kimi-k2-thinking
675
- 3. qw/qwen3-coder-plus
676
-
677
- Monthly cost: $0
678
- Outcome: stable free coding workflow
679
- ```
680
-
681
- **Playbook C: 24/7 rantai sandaran sentiasa hidup**
682
-
683
- ```txt
684
- Combo: "always-on"
685
- 1. cc/claude-opus-4-6
686
- 2. cx/gpt-5.2-codex
687
- 3. glm/glm-4.7
688
- 4. minimax/MiniMax-M2.1
689
- 5. if/kimi-k2-thinking
690
-
691
- Outcome: deep fallback depth for deadline-critical workloads
692
- ```
693
-
694
- **Playbook D: Operasi ejen dengan MCP + A2A**
695
-
696
- ```txt
697
- 1) Start MCP transport (`omniroute --mcp`) for tool-driven operations
698
- 2) Run A2A tasks via `message/send` and `message/stream`
699
- 3) Observe via /dashboard/mcp and /dashboard/a2a
700
- 4) Control incidents with resilience profile + task cancellation
701
- ```
702
-
703
- ---
704
-
705
- ## ⚡ Mula Pantas
706
-
707
- **1. Pasang secara global:**
708
-
709
- ```bash
710
- npm install -g omniroute
711
- omniroute
712
- ```
713
-
714
- 🎉 Papan pemuka dibuka pada `http://localhost:20128`
715
-
716
- | Perintah | Penerangan |
717
- | ----------------------- | ---------------------------------- |
718
- | `omniroute` | Mulakan pelayan (port lalai 20128) |
719
- | `omniroute --port 3000` | Gunakan port tersuai |
720
- | `omniroute --no-open` | Jangan auto buka penyemak imbas |
721
- | `omniroute --help` | Tunjukkan bantuan |
722
-
723
- **2. Sambungkan pembekal PERCUMA:**
724
-
725
- Papan pemuka → Pembekal → Sambung **Kod Claude** atau **Antigraviti** → Log masuk OAuth → Selesai!
726
-
727
- **3. Gunakan dalam alat CLI anda:**
728
-
729
- ```
730
- Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline Settings:
731
- Endpoint: http://localhost:20128/v1
732
- API Key: [copy from dashboard]
733
- Model: if/kimi-k2-thinking
734
- ```
735
-
736
- **Itu sahaja!** Mulakan pengekodan dengan model AI PERCUMA.
737
-
738
- **Alternatif — dijalankan dari sumber:**
739
-
740
- ```bash
741
- cp .env.example .env
742
- npm install
743
- PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
744
- ```
745
-
746
- ---
747
-
748
- ## 🐳 Docker
749
-
750
- OmniRoute tersedia sebagai imej Docker awam pada [Docker Hub](https://hub.docker.com/r/diegosouzapw/omniroute).
751
-
752
- **Larian pantas:**
753
-
754
- ```bash
755
- docker run -d \
756
- --name omniroute \
757
- --restart unless-stopped \
758
- -p 20128:20128 \
759
- -v omniroute-data:/app/data \
760
- diegosouzapw/omniroute:latest
761
- ```
762
-
763
- **Dengan fail persekitaran:**
764
-
765
- ```bash
766
- # Copy and edit .env first
767
- cp .env.example .env
768
-
769
- docker run -d \
770
- --name omniroute \
771
- --restart unless-stopped \
772
- --env-file .env \
773
- -p 20128:20128 \
774
- -v omniroute-data:/app/data \
775
- diegosouzapw/omniroute:latest
776
- ```
777
-
778
- **Menggunakan Docker Compose:**
779
-
780
- ```bash
781
- # Base profile (no CLI tools)
782
- docker compose --profile base up -d
783
-
784
- # CLI profile (Claude Code, Codex, OpenClaw built-in)
785
- docker compose --profile cli up -d
786
- ```
787
-
788
- | Imej | Tag | Saiz | Penerangan |
789
- | ------------------------ | -------- | ------ | ----------------------- |
790
- | `diegosouzapw/omniroute` | `latest` | ~250MB | Keluaran stabil terkini |
791
- | `diegosouzapw/omniroute` | `1.0.3` | ~250MB | Versi semasa |
792
-
793
- ---
794
-
795
- ---
796
-
797
- ## 🖥️
798
-
799
- > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux.
800
-
801
- - 🖥️ **Native Window** — Dedicated app window with system tray integration
802
- - 🔄 **Auto-Start** — Launch OmniRoute on system login
803
- - 🔔 **Native Notifications** — Get alerts for quota exhaustion or provider issues
804
- - ⚡ **One-Click Install** — NSIS (Windows), DMG (macOS), AppImage (Linux)
805
- - 🌐 **Offline Mode** — Works fully offline with bundled server
806
-
807
- ```bash
808
- npm run electron:dev # Development mode
809
- npm run electron:build # Current platform
810
- npm run electron:build:win # Windows (.exe)
811
- npm run electron:build:mac # macOS (.dmg)
812
- npm run electron:build:linux # Linux (.AppImage)
813
- ```
814
-
815
- 📖 Full documentation: [`electron/README.md`](electron/README.md)
816
-
817
- ---
818
-
819
- ## 💰 Sekilas Pandang Harga
820
-
821
- | Peringkat | Pembekal | Kos | Set Semula Kuota | Terbaik Untuk |
822
- | ---------------- | ---------------- | ---------------------------- | ------------------ | ----------------------- |
823
- | **💳 LANGGANAN** | Kod Claude (Pro) | $20/bln | 5j + mingguan | Sudah melanggan |
824
- | | Codex (Plus/Pro) | $20-200/bln | 5j + mingguan | Pengguna OpenAI |
825
- | | Gemini CLI | **PERCUMA** | 180K/bln + 1K/hari | Semua orang! |
826
- | | GitHub Copilot | $10-19/bln | Bulanan | Pengguna GitHub |
827
- | **🔑 KUNCI API** | NVIDIA NIM | **PERCUMA** (1000 kredit) | Satu kali | Ujian peringkat percuma |
828
- | | DeepSeek | Bayar setiap penggunaan | Tiada | Harga/kualiti terbaik |
829
- | | Groq | Peringkat percuma + berbayar | Kadar terhad | Inferens sangat pantas |
830
- | | xAI (Grok) | Bayar setiap penggunaan | Tiada | Model Grok |
831
- | | Mistral | Peringkat percuma + berbayar | Kadar terhad | AI Eropah |
832
- | | OpenRouter | Bayar setiap penggunaan | Tiada | 100+ model |
833
- | **💰 MURAH** | GLM-4.7 | $0.6/1J | Setiap hari 10AM | Sandaran belanjawan |
834
- | | MiniMax M2.1 | $0.2/1J | 5 jam bergolek | Pilihan termurah |
835
- | | Kimi K2 | $9/bln flat | 10 juta token/bln | Kos yang boleh diramal |
836
- | **🆓 PERCUMA** | iFlow | $0 | tanpa had | 8 model percuma |
837
- | | Qwen | $0 | tanpa had | 3 model percuma |
838
- | | Kiro | $0 | tanpa had | Claude percuma |
839
-
840
- **💡 Petua Pro:** Mulakan dengan Gemini CLI (180K percuma/bulan) + iFlow (percuma tanpa had) kombo = $0 kos!
841
-
842
- ---
843
-
844
- ## 💡 Ciri Utama
845
-
846
- ### 🧠 Penghalaan Teras & Kepintaran
847
-
848
- | Ciri | Apa yang Dilakukan |
849
- | ---------------------------------- | --------------------------------------------------------------------------------------------- |
850
- | 🎯 **Smart 4-Tier Fallback** | Laluan automatik: Langganan → Kunci API → Murah → Percuma |
851
- | 📊 **Penjejakan Kuota Masa Nyata** | Kiraan token langsung + tetapan semula kira detik setiap pembekal |
852
- | 🔄 **Terjemahan Format** | OpenAI ↔ Claude ↔ Gemini ↔ Kursor ↔ Kiro lancar + pembersihan tindak balas |
853
- | 👥 **Sokongan Berbilang Akaun** | Berbilang akaun bagi setiap pembekal dengan pemilihan pintar |
854
- | 🔄 **Muat Semula Token Auto** | Token OAuth dimuat semula secara automatik dengan cuba semula |
855
- | 🎨 **Kombo Tersuai** | 6 strategi: isikan dahulu, round-robin, p2c, rawak, paling kurang digunakan, dioptimumkan kos |
856
- | 🧩 **Model Tersuai** | Tambahkan sebarang ID model pada mana-mana pembekal |
857
- | 🌐 **Penghala Wildcard** | Halakan corak `provider/*` kepada mana-mana pembekal secara dinamik |
858
- | 🧠 **Anggaran Berfikir** | Mod laluan, auto, tersuai dan adaptif untuk model penaakulan |
859
- | 🔀 **Model Aliases** | Auto-forward deprecated model IDs to current replacements (built-in + custom) |
860
- | ⚡ **Background Degradation** | Auto-route background tasks (titles, summaries) to cheaper models |
861
- | 💬 **System Prompt Suntikan** | Gesaan sistem global digunakan merentas semua permintaan |
862
- | 📄 **API Respons** | Sokongan OpenAI Responses API (`/v1/responses`) penuh untuk Codex |
863
-
864
- ### 🎵 API Berbilang Modal
865
-
866
- | Ciri | Apa yang Dilakukan |
867
- | ------------------------ | ------------------------------------------------------ |
868
- | 🖼️ **Penjanaan Imej** | `/v1/images/generations` — 4 pembekal, 9+ model |
869
- | 📐 **Pembenaman** | `/v1/embeddings` — 6 pembekal, 9+ model |
870
- | 🎤 **Transkripsi Audio** | `/v1/audio/transcriptions` — Serasi dengan bisikan |
871
- | 🔊 **Teks-ke-Ucapan** | `/v1/audio/speech` — Sintesis audio berbilang pembekal |
872
- | 🛡️ **Kesederhanaan** | `/v1/moderations` — Pemeriksaan keselamatan kandungan |
873
- | 🔀 **Penyusunan semula** | `/v1/rerank` — Penarafan semula perkaitan dokumen |
874
-
875
- ### 🛡️ Ketahanan & Keselamatan
876
-
877
- | Ciri | Apa yang Dilakukan |
878
- | ----------------------------------- | -------------------------------------------------------------------------------------- |
879
- | 🔌 **Pemutus Litar** | Auto buka/tutup setiap pembekal dengan ambang boleh dikonfigurasikan |
880
- | 🛡️ **Kawanan Anti Guruh** | Had kadar Mutex + semaphore untuk pembekal kunci API |
881
- | 🧠 **Cache Semantik** | Cache dua peringkat (tandatangan + semantik) mengurangkan kos & kependaman |
882
- | ⚡ **Minta Idepotency** | Tetingkap pendua 5s untuk permintaan pendua |
883
- | 🔒 **TLS Fingerprint Spoofing** | Pintas pengesanan bot berasaskan TLS melalui wreq-js |
884
- | 🔏 **CLI Fingerprint Matching** | Matches native CLI request signatures — **reduces ban risk while preserving proxy IP** |
885
- | 🌐 **Penapisan IP** | Senarai kebenaran/senarai sekat untuk kawalan akses API |
886
- | 📊 **Had Kadar Boleh Diedit** | RPM boleh dikonfigurasikan, jurang min dan serentak maksimum pada tahap 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** | Gating pengesahan + penyekatan penyedia untuk titik akhir `/models` |
890
- | 🔒 **Keterlihatan Proksi** | Lencana berkod warna: 🟢 global, 🟡 pembekal, 🔵 setiap sambungan dengan paparan IP |
891
- | 🌐 **Konfigurasi Proksi 3 Tahap** | Konfigurasikan proksi pada peringkat global, setiap pembekal atau setiap sambungan |
892
-
893
- ### 📊 Kebolehlihatan & Analitis
894
-
895
- | Ciri | Apa yang Dilakukan |
896
- | --------------------------------- | ------------------------------------------------------------------------------ |
897
- | 📝 **Minta Pembalakan** | Mod nyahpepijat dengan log permintaan/tindak balas penuh |
898
- | 💾 **Log Proksi SQLite** | Log proksi berterusan bertahan dimulakan semula pelayan |
899
- | 📊 **Papan Pemuka Analitik** | Dikuasakan semula: kad statistik, carta penggunaan model, jadual pembekal |
900
- | 📈 **Penjejakan Kemajuan** | Ikut serta acara kemajuan SSE untuk penstriman |
901
- | 🧪 **Penilaian LLM** | Ujian set emas dengan 4 strategi perlawanan |
902
- | 🔍 **Minta Telemetri** | p50/p95/p99 pengagregatan kependaman + pengesanan X-Request-Id |
903
- | 📋 **Papan Pemuka Log** | Halaman 4 tab bersatu: Log Permintaan, Log Proksi, Log Audit, Konsol |
904
- | 🖥️ **Pemapar Log Konsol** | Pemapar gaya terminal masa nyata dengan penapis tahap, carian, tatal automatik |
905
- | 📑 **Pengelogan Berasaskan Fail** | Pemintas konsol menangkap semua output ke fail log JSON dengan putaran |
906
- | 🏥 **Papan Pemuka Kesihatan** | Masa beroperasi sistem, keadaan pemutus litar, sekatan keluar, statistik cache |
907
- | 💰 **Penjejakan Kos** | Pengurusan belanjawan + konfigurasi harga setiap model |
908
-
909
- ### ☁️ Penyerahan & Penyegerakan
910
-
911
- | Ciri | Apa yang Dilakukan |
912
- | ----------------------------- | ----------------------------------------------------------------------- |
913
- | 💾 **Penyegerakan Awan** | Segerakkan konfigurasi merentas peranti melalui Cloudflare Workers |
914
- | 🌐 **Kerahkan Di Mana-mana** | Localhost, VPS, Docker, Pekerja Cloudflare |
915
- | 🔑 **Pengurusan Kunci API** | Jana, putar dan skop kunci API bagi setiap pembekal |
916
- | 🧙 **Onboarding Wizard** | Persediaan berpandu 4 langkah untuk pengguna kali pertama |
917
- | 🔧 **Papan Pemuka Alat CLI** | Konfigurasi satu klik Claude, Codex, Cline, OpenClaw, Kilo, Antigravity |
918
- | 🔄 **Sandaran DB** | Sandaran automatik, pulihkan, eksport & import untuk semua tetapan |
919
- | 🌐 **Pengantarabangsaan** | i18n penuh dengan next-intl — sokongan Inggeris + Portugis (Brazil) |
920
- | 🌍 **Pemilih Bahasa** | Ikon glob dalam pengepala untuk penukaran bahasa masa nyata (🇺🇸/🇧🇷) |
921
- | 📂 **Direktori Data Tersuai** | `DATA_DIR` env var untuk mengatasi laluan storan lalai `~/.omniroute` |
922
-
923
- <details>
924
- <summary><b>📖 Butiran Ciri</b></summary>
925
-
926
- ### 🎯 Kemunduran 4 Peringkat Pintar
927
-
928
- Cipta gabungan dengan sandaran automatik:
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
- ### 📊 Penjejakan Kuota Masa Nyata
941
-
942
- - Penggunaan token setiap pembekal
943
- - Tetapkan semula kira detik (5 jam, harian, mingguan)
944
- - Anggaran kos untuk peringkat berbayar
945
- - Laporan perbelanjaan bulanan
946
-
947
- ### 🔄 Terjemahan Format
948
-
949
- Terjemahan lancar antara format:
950
-
951
- - **OpenAI** ↔ **Claude** ↔ **Gemini** ↔ **Respons OpenAI**
952
- - Alat CLI anda menghantar format OpenAI → OmniRoute menterjemah → Pembekal menerima format asli
953
- - Berfungsi dengan mana-mana alat yang menyokong titik akhir OpenAI tersuai
954
- - **Pembersihan tindak balas** — Menghapuskan medan bukan standard untuk keserasian OpenAI SDK yang ketat
955
- - **Penormalan peranan** — `developer` → `system` untuk bukan OpenAI; `system` → `user` untuk model GLM/ERNIE
956
- - **Pengekstrakan teg Think** — `<think>` blok → `reasoning_content` untuk model pemikiran
957
- - **Output berstruktur** — `json_schema` → Gemini's `responseMimeType`/`responseSchema`
958
-
959
- ### 👥 Sokongan Berbilang Akaun
960
-
961
- - Tambah berbilang akaun bagi setiap pembekal
962
- - Auto round-robin atau penghalaan berasaskan keutamaan
963
- - Berundur ke akaun seterusnya apabila seseorang mencapai kuota
964
-
965
- ### 🔄 Muat Semula Token Auto
966
-
967
- - Token OAuth dimuat semula secara automatik sebelum tamat tempoh
968
- - Tiada pengesahan semula manual diperlukan
969
- - Pengalaman lancar merentas semua pembekal
970
-
971
- ### 🎨 Kombo Tersuai
972
-
973
- - Buat kombinasi model tanpa had
974
- - 6 strategi: isikan dahulu, round-robin, kuasa dua pilihan, rawak, paling kurang digunakan, dioptimumkan kos
975
- - Kongsi gabungan merentas peranti dengan Cloud Sync
976
-
977
- ### 🏥 Papan Pemuka Kesihatan
978
-
979
- - Status sistem (masa hidup, versi, penggunaan memori)
980
- - Keadaan pemutus litar bagi setiap pembekal (Tertutup/Terbuka/Separuh Terbuka)
981
- - Status had kadar dan sekatan aktif
982
- - Statistik cache tandatangan
983
- - Telemetri kependaman (p50/p95/p99) + cache segera
984
- - Tetapkan semula status kesihatan dengan satu klik
985
-
986
- ### 🔧 Taman Permainan Penterjemah
987
-
988
- OmniRoute termasuk Taman Permainan Penterjemah terbina dalam yang berkuasa dengan **4 mod** untuk penyahpepijatan, ujian dan pemantauan terjemahan API:
989
-
990
- | Mod | Penerangan |
991
- | ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
992
- | **💻 Taman permainan** | Terjemahan format langsung — tampal mana-mana badan permintaan API dan lihat serta-merta cara OmniRoute menterjemahkannya antara format pembekal (OpenAI ↔ Claude ↔ Gemini ↔ Responses API). Termasuk templat contoh dan pengesanan automatik format. |
993
- | **💬 Penguji Sembang** | Hantar permintaan sembang sebenar melalui OmniRoute dan lihat perjalanan pergi balik penuh: input anda, permintaan yang diterjemahkan, respons pembekal dan balasan yang diterjemahkan kembali. Tidak ternilai untuk mengesahkan penghalaan kombo. |
994
- | **🧪 Bangku Ujian** | Mod ujian kelompok — tentukan berbilang kes ujian dengan input dan output yang dijangkakan berbeza, jalankan semuanya sekali gus dan bandingkan hasil merentas pembekal dan model. |
995
- | **📱 Pemantau Langsung** | Pemantauan permintaan masa nyata — tonton permintaan masuk semasa ia mengalir melalui OmniRoute, lihat terjemahan format berlaku secara langsung dan kenal pasti isu serta-merta. |
996
-
997
- **Akses:** Papan Pemuka → Penterjemah (bar sisi)
998
-
999
- ### 💾 Penyegerakan Awan
1000
-
1001
- - Penyegerakan penyedia, gabungan dan tetapan merentas peranti
1002
- - Penyegerakan latar belakang automatik
1003
- - Storan yang disulitkan selamat
1004
-
1005
- </details>
1006
-
1007
- ## 🧪 Penilaian (Evals)
1008
-
1009
- OmniRoute termasuk rangka kerja penilaian terbina dalam untuk menguji kualiti tindak balas LLM terhadap set emas. Aksesnya melalui **Analytics → Evals** dalam papan pemuka.
1010
-
1011
- ### Set Emas Terbina dalam
1012
-
1013
- "Set Emas OmniRoute" pra-muat mengandungi 10 kes ujian yang meliputi:
1014
-
1015
- - Salam, matematik, geografi, penjanaan kod
1016
- - Pematuhan format JSON, terjemahan, penurunan harga
1017
- - Penolakan keselamatan (kandungan berbahaya), pengiraan, logik boolean
1018
-
1019
- ### Strategi Penilaian
1020
-
1021
- | Strategi | Penerangan | Contoh |
1022
- | ---------- | --------------------------------------------------------------------- | -------------------------------- |
1023
- | `exact` | Output mesti sepadan dengan tepat | `"4"` |
1024
- | `contains` | Output mesti mengandungi subrentetan (tidak peka huruf besar-besaran) | `"Paris"` |
1025
- | `regex` | Output mesti sepadan dengan corak regex | `"1.*2.*3"` |
1026
- | `custom` | Fungsi JS tersuai mengembalikan benar/salah | `(output) => output.length > 10` |
1027
-
1028
- ---
1029
-
1030
- ## 📖 Panduan Persediaan
1031
-
1032
- <details>
1033
- <summary><b>💳 Pembekal Langganan</b></summary>
1034
-
1035
- ### Kod Claude (Pro/Max)
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
- **Petua Pro:** Gunakan Opus untuk tugas yang rumit, Sonnet untuk kelajuan. OmniRoute menjejaki kuota setiap model!
1049
-
1050
- ### OpenAI Codex (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 (PERCUMA 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:** Peringkat percuma yang besar! Gunakan ini sebelum peringkat berbayar.
1075
-
1076
- ### Copilot 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>🔑 Pembekal Kunci API</b></summary>
1093
-
1094
- ### NVIDIA NIM (PERCUMA 1000 kredit!)
1095
-
1096
- 1. Daftar: [build.nvidia.com](https://build.nvidia.com)
1097
- 2. Dapatkan kunci API percuma (1000 kredit inferens disertakan)
1098
- 3. Papan Pemuka → Tambah Pembekal → NVIDIA NIM:
1099
- - Kunci API: `nvapi-your-key`
1100
-
1101
- **Model:** `nvidia/llama-3.3-70b-instruct`, `nvidia/mistral-7b-instruct` dan 50+ lagi
1102
-
1103
- **Petua Pro:** API serasi OpenAI — berfungsi dengan lancar dengan terjemahan format OmniRoute!
1104
-
1105
- ### DeepSeek
1106
-
1107
- 1. Daftar: [platform.deepseek.com](https://platform.deepseek.com)
1108
- 2. Dapatkan kunci API
1109
- 3. Papan Pemuka → Tambah Pembekal → DeepSeek
1110
-
1111
- **Model:** `deepseek/deepseek-chat`, `deepseek/deepseek-coder`
1112
-
1113
- ### Groq (Tier Percuma Tersedia!)
1114
-
1115
- 1. Daftar: [console.groq.com](https://console.groq.com)
1116
- 2. Dapatkan kunci API (termasuk peringkat percuma)
1117
- 3. Papan Pemuka → Tambah Pembekal → Groq
1118
-
1119
- **Model:** `groq/llama-3.3-70b`, `groq/mixtral-8x7b`
1120
-
1121
- **Petua Pro:** Inferens sangat pantas — terbaik untuk pengekodan masa nyata!
1122
-
1123
- ### OpenRouter (100+ Model)
1124
-
1125
- 1. Daftar: [openrouter.ai](https://openrouter.ai)
1126
- 2. Dapatkan kunci API
1127
- 3. Papan Pemuka → Tambah Pembekal → OpenRouter
1128
-
1129
- **Model:** Akses 100+ model daripada semua pembekal utama melalui kunci API tunggal.
1130
-
1131
- </details>
1132
-
1133
- <details>
1134
- <summary><b>💰 Penyedia Murah (Sandaran)</b></summary>
1135
-
1136
- ### GLM-4.7 (Tetapan semula harian, $0.6/1J)
1137
-
1138
- 1. Daftar: [Zhipu AI](https://open.bigmodel.cn/)
1139
- 2. Dapatkan kunci API daripada Pelan Pengekodan
1140
- 3. Papan Pemuka → Tambah Kunci API:
1141
- - Pembekal: `glm`
1142
- - Kunci API: `your-key`
1143
-
1144
- **Gunakan:** `glm/glm-4.7`
1145
-
1146
- **Petua Pro:** Pelan Pengekodan menawarkan kuota 3× pada kos 1/7! Tetapkan semula setiap hari 10:00 AM.
1147
-
1148
- ### MiniMax M2.1 (tetapan semula 5j, $0.20/1J)
1149
-
1150
- 1. Daftar: [MiniMax](https://www.minimax.io/)
1151
- 2. Dapatkan kunci API
1152
- 3. Papan Pemuka → Tambah Kunci API
1153
-
1154
- **Gunakan:** `minimax/MiniMax-M2.1`
1155
-
1156
- **Petua Pro:** Pilihan termurah untuk konteks panjang (token 1M)!
1157
-
1158
- ### Kimi K2 ($9/bulan rata)
1159
-
1160
- 1. Langgan: [Moonshot AI](https://platform.moonshot.ai/)
1161
- 2. Dapatkan kunci API
1162
- 3. Papan Pemuka → Tambah Kunci API
1163
-
1164
- **Gunakan:** `kimi/kimi-latest`
1165
-
1166
- **Petua Pro:** Tetap $9/bulan untuk 10J token = $0.90/1J kos efektif!
1167
-
1168
- </details>
1169
-
1170
- <details>
1171
- <summary><b>🆓 Pembekal PERCUMA (Sandaran Kecemasan)</b></summary>
1172
-
1173
- ### iFlow (8 model PERCUMA)
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 PERCUMA)
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 PERCUMA)
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>🎨 Cipta Kombo</b></summary>
1216
-
1217
- ### Contoh 1: Maksimumkan Langganan → Sandaran 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: Percuma-Sahaja (Kos Sifar)
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>🔧 CLI Integrasi</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
- ### Kod Claude
1258
-
1259
- Gunakan halaman **Alat CLI** dalam papan pemuka untuk konfigurasi satu klik atau edit `~/.claude/settings.json` secara manual.
1260
-
1261
- ### Codex 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
- ### OpenClaw
1271
-
1272
- **Pilihan 1 — Papan Pemuka (disyorkan):**
1273
-
1274
- ```
1275
- Dashboard → CLI Tools → OpenClaw → Select Model → Apply
1276
- ```
1277
-
1278
- **Pilihan 2 — Manual:** Edit `~/.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
- > **Nota:** OpenClaw hanya berfungsi dengan OmniRoute tempatan. Gunakan `127.0.0.1` dan bukannya `localhost` untuk mengelakkan isu resolusi IPv6.
1295
-
1296
- ### Cline / Teruskan / 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
- ## 🐛 Menyelesaikan masalah
1311
-
1312
- <details>
1313
- <summary><b>Klik untuk mengembangkan panduan penyelesaian masalah</b></summary>
1314
-
1315
- **"Model bahasa tidak memberikan mesej"**
1316
-
1317
- - Kuota pembekal habis → Semak penjejak kuota papan pemuka
1318
- - Penyelesaian: Gunakan sandaran kombo atau tukar kepada peringkat yang lebih murah
1319
-
1320
- **Penghadan kadar**
1321
-
1322
- - Kuota langganan habis → Sandar kepada GLM/MiniMax
1323
- - Tambah kombo: `cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking`
1324
-
1325
- **Token OAuth tamat tempoh**
1326
-
1327
- - Dikemas semula secara automatik oleh OmniRoute
1328
- - Jika isu berterusan: Papan Pemuka → Pembekal → Sambung semula
1329
-
1330
- **Kos tinggi**
1331
-
1332
- - Semak statistik penggunaan dalam Papan Pemuka → Kos
1333
- - Tukar model utama kepada GLM/MiniMax
1334
- - Gunakan peringkat percuma (Gemini CLI, iFlow) untuk tugasan yang tidak kritikal
1335
-
1336
- **Papan pemuka dibuka pada port yang salah**
1337
-
1338
- - Tetapkan `PORT=20128` dan `NEXT_PUBLIC_BASE_URL=http://localhost:20128`
1339
-
1340
- **Ralat penyegerakan awan**
1341
-
1342
- - Sahkan `BASE_URL` mata pada contoh larian anda
1343
- - Sahkan `CLOUD_URL` mata ke titik akhir awan anda yang dijangkakan
1344
- - Pastikan nilai `NEXT_PUBLIC_*` sejajar dengan nilai sebelah pelayan
1345
-
1346
- **Log masuk pertama tidak berfungsi**
1347
-
1348
- - Semak `INITIAL_PASSWORD` dalam `.env`
1349
- - Jika tidak ditetapkan, kata laluan sandaran ialah `123456`
1350
-
1351
- **Tiada log permintaan**
1352
-
1353
- - Tetapkan `ENABLE_REQUEST_LOGS=true` dalam `.env`
1354
-
1355
- **Ujian sambungan menunjukkan "Tidak sah" untuk pembekal yang serasi dengan OpenAI**
1356
-
1357
- - Banyak pembekal tidak mendedahkan titik akhir `/models`
1358
- - OmniRoute v1.0.6+ termasuk pengesahan sandaran melalui pelengkapan sembang
1359
- - Pastikan URL asas mengandungi akhiran `/v1`
1360
-
1361
- ### 🔐 OAuth
1362
-
1363
- <a name="oauth-em-servidor-remoto"></a>
1364
-
1365
- > **⚠️ PENTING untuk biasa menggunakan OmniRoute em VPS/Docker/servidor remoto**
1366
-
1367
- ### Adakah OAuth melakukan Antigraviti / Gemini CLI tidak menggunakan perkhidmatan anda?
1368
-
1369
- Ia membuktikan **Antigraviti** dan **Gemini CLI** menggunakan **Google OAuth 2.0** untuk autenticação. O Google exige que a `redirect_uri` gunakan tiada fluks OAuth seja **exatamente** uma das URIs sebelum kadastrada tiada Google Cloud Console untuk aplicativo.
1370
-
1371
- Sebagai credenciais OAuth embutidas no OmniRoute estão cadastradas **apenas untuk `localhost`**. Quando você acessa o OmniRoute em um servidor remoto (cth: `https://omniroute.meuservidor.com`), o Google rejeita a autenticação com:
1372
-
1373
- ```
1374
- Error 400: redirect_uri_mismatch
1375
- ```
1376
-
1377
- ### Penyelesaian: Konfigurasikan suas próprias credenciais OAuth
1378
-
1379
- Você precisa criar um **OAuth 2.0 Client ID** no Google Cloud Console com a URI do seu servidor.
1380
-
1381
- #### Passo a passo
1382
-
1383
- **1. Akses ke Konsol Awan Google**
1384
-
1385
- Abra: [https://console.cloud.google.com/apis/credentials](https://console.cloud.google.com/apis/credentials)
1386
-
1387
- **2. Crie um novo ID Pelanggan OAuth 2.0**
1388
-
1389
- - Klik em **"+ Cipta Bukti Kelayakan"** → **"ID klien OAuth"**
1390
- - Tipo de aplicativo: **"Aplikasi web"**
1391
- - Nama: escolha qualquer nome (cth: `OmniRoute Remote`)
1392
-
1393
- **3. Tambah sebagai URI Ubah Hala Dibenarkan**
1394
-
1395
- Tiada **"URI ubah hala yang dibenarkan"**, tambahan:
1396
-
1397
- ```
1398
- https://seu-servidor.com/callback
1399
- ```
1400
-
1401
- > Gantikan `seu-servidor.com` pelo domínio ou IP do seu servidor (termasuk porta se necessário, cth: `http://45.33.32.156:20128/callback`).
1402
-
1403
- **4. Simpan dan salin sebagai kredensia**
1404
-
1405
- Após criar, o Google mostrará o **ID Pelanggan** e o **Rahsia Pelanggan**.
1406
-
1407
- **5. Konfigurasikan sebagai variáveis de ambiente**
1408
-
1409
- No seu `.env` (ou nas variáveis de ambiente do 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. Reinicie o 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. Tente conectar novamente**
1433
-
1434
- Papan pemuka → Pembekal → Antigraviti (ou Gemini CLI) → OAuth
1435
-
1436
- Agora o Google redirectionará corretamente untuk `https://seu-servidor.com/callback` dan a autenticação funcionará.
1437
-
1438
- ---
1439
-
1440
- ### Penyelesaian sementara (sem configurar credenciais próprias)
1441
-
1442
- Jika anda ingin mendapatkan credenciais próprias agora, ada kemungkinan penggunaan atau fluks **manual de URL**:
1443
-
1444
- 1. OmniRoute abrirá a URL de authorização do Google
1445
- 2. Após você authorizar, o Google tentará redirectionar para `localhost` (que falha no servidor remoto)
1446
- 3. **Salin URL lengkap** pada penyemak imbas barra de endereço do seu (mesmo que a página não carregue)
1447
- 4. Cole essa URL no campo que aparece no modal de conexão do OmniRoute
1448
- 5. Klik em **"Sambung"**
1449
-
1450
- > Penyelesaian ini berfungsi sebagai kodigo de autorização na URL adalah bebas untuk mengubah hala mengikut arahan atau tidak.
1451
-
1452
- </details>
1453
-
1454
- ---
1455
-
1456
- ## 🛠️
1457
-
1458
- - **Waktu Jalan**: Node.js 18–22 LTS (⚠️ Node.js 24+ **tidak disokong** — `better-sqlite3` binari asli tidak serasi)
1459
- - **Bahasa**: TypeScript 5.9 — **100% TypeScript** merentas `src/` dan `open-sse/` (v1.0.6)
1460
- - **Kerangka**: Next.js 16 + React 19 + Tailwind CSS 4
1461
- - **Pangkalan Data**: LowDB (JSON) + SQLite (keadaan domain + log proksi)
1462
- - **Penstriman**: Acara Dihantar Pelayan (SSE)
1463
- - **Auth**: OAuth 2.0 (PKCE) + JWT + Kunci API
1464
- - **Ujian**: Pelari ujian Node.js (368+ ujian unit)
1465
- - **CI/CD**: GitHub Actions (auto npm publish + Docker Hub pada keluaran)
1466
- - **Laman web**: [omniroute.online](https://omniroute.online)
1467
- - **Pakej**: [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute)
1468
- - **Docker**: [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute)
1469
- - **Ketahanan**: Pemutus litar, mundur eksponen, kumpulan anti gemuruh, penipuan TLS
1470
-
1471
- ---
1472
-
1473
- ## 📖 Dokumentasi
1474
-
1475
- | Dokumen | Penerangan |
1476
- | -------------------------------------------- | --------------------------------------------------- |
1477
- | [User Guide](docs/USER_GUIDE.md) | Pembekal, kombo, penyepaduan CLI, penggunaan |
1478
- | [API Reference](docs/API_REFERENCE.md) | Semua titik akhir dengan contoh |
1479
- | [Troubleshooting](docs/TROUBLESHOOTING.md) | Masalah dan penyelesaian biasa |
1480
- | [Architecture](docs/ARCHITECTURE.md) | Seni bina sistem dan dalaman |
1481
- | [Contributing](CONTRIBUTING.md) | Persediaan pembangunan dan garis panduan |
1482
- | [OpenAPI Spec](docs/openapi.yaml) | Spesifikasi OpenAPI 3.0 |
1483
- | [Security Policy](SECURITY.md) | Pelaporan kerentanan dan amalan keselamatan |
1484
- | [VM Deployment](docs/VM_DEPLOYMENT_GUIDE.md) | Panduan lengkap: Persediaan VM + nginx + Cloudflare |
1485
- | [Features Gallery](docs/FEATURES.md) | Lawatan papan pemuka visual dengan tangkapan skrin |
1486
-
1487
- ### 📸 Pratonton Papan Pemuka
1488
-
1489
- <details>
1490
- <summary><b>Klik untuk melihat tangkapan skrin papan pemuka</b></summary>
1491
-
1492
- | Halaman | Tangkapan skrin |
1493
- | ------------------ | ------------------------------------------------- |
1494
- | **Pembekal** | ![Providers](docs/screenshots/01-providers.png) |
1495
- | **Kombo** | ![Combos](docs/screenshots/02-combos.png) |
1496
- | **Analisis** | ![Analytics](docs/screenshots/03-analytics.png) |
1497
- | **Kesihatan** | ![Health](docs/screenshots/04-health.png) |
1498
- | **Penterjemah** | ![Translator](docs/screenshots/05-translator.png) |
1499
- | **Tetapan** | ![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 mempunyai **210+ ciri yang dirancang** merentas berbilang fasa pembangunan. Berikut adalah bidang utama:
1511
-
1512
- | Kategori | Ciri Terancang | Sorotan |
1513
- | ------------------------------ | ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- |
1514
- | 🎯 **Endpoint-Aware Models** | Custom models declare supported endpoints + API format |
1515
- | 🧠 **Penghalaan & Perisikan** | 25+ | Penghalaan kependaman terendah, penghalaan berasaskan teg, kuota prapenerbangan, pemilihan akaun P2C |
1516
- | 🔒 **Keselamatan & Pematuhan** | 20+ | Pengerasan SSRF, penyelubungan kelayakan, had kadar setiap titik akhir, skop kunci pengurusan |
1517
- | 📊 **Kebolehlihatan** | 15+ | Penyepaduan OpenTelemetry, pemantauan kuota masa nyata, penjejakan kos setiap model |
1518
- | 🔄 **Integrasi Pembekal** | 20+ | Pendaftaran model dinamik, penyejukan pembekal, Codex berbilang akaun, penghuraian kuota Copilot |
1519
- | ⚡ **Prestasi** | 15+ | Lapisan cache dwi, ​​cache gesaan, cache respons, penstriman keepalive, API kelompok |
1520
- | 🌐 **Ekosistem** | 10+ | API WebSocket, konfigurasi hot-reload, kedai konfigurasi teragih, mod komersial |
1521
-
1522
- ### 🔜 Akan Datang
1523
-
1524
- - 🔗 **OpenCode Integration** — Sokongan pembekal asli untuk IDE pengekodan AI OpenCode
1525
- - 🔗 **Pengintegrasian TRAE** — Sokongan penuh untuk rangka kerja pembangunan TRAE AI
1526
- - 📦 **API Kelompok** — Pemprosesan kelompok tak segerak untuk permintaan pukal
1527
- - 🎯 **Penghalaan Berasaskan Teg** — Permintaan laluan berdasarkan teg tersuai dan metadata
1528
- - 💰 **Strategi Kos Terendah** — Pilih pembekal yang tersedia paling murah secara automatik
1529
-
1530
- > 📝 Spesifikasi ciri penuh tersedia dalam [link](docs/new-features/) (217 spesifikasi terperinci)
1531
-
1532
- ---
1533
-
1534
- ## 👥 Penyumbang
1535
-
1536
- [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors)
1537
-
1538
- ### Cara Menyumbang
1539
-
1540
- 1. Garpu repositori
1541
- 2. Buat cawangan ciri anda (`git checkout -b feature/amazing-feature`)
1542
- 3. Serahkan perubahan anda (`git commit -m 'Add amazing feature'`)
1543
- 4. Tolak ke cawangan (`git push origin feature/amazing-feature`)
1544
- 5. Buka Permintaan Tarik
1545
-
1546
- Lihat [CONTRIBUTING.md](CONTRIBUTING.md) untuk garis panduan terperinci.
1547
-
1548
- ### Mengeluarkan Versi Baharu
1549
-
1550
- ```bash
1551
- # Create a release — npm publish happens automatically
1552
- gh release create v1.0.6 --title "v1.0.6" --generate-notes
1553
- ```
1554
-
1555
- ---
1556
-
1557
- ## 📊 Sejarah Bintang
1558
-
1559
- <a href="https://star-history.com/#diegosouzapw/OmniRoute&Date">
1560
- <picture>
1561
- <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date&theme=dark" />
1562
- <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date" />
1563
- <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date" />
1564
- </picture>
1565
- </a>
1566
-
1567
- ---
1568
-
1569
- ## 🙏 Ucapan terima kasih
1570
-
1571
- Terima kasih khas kepada **[9router](https://github.com/decolua/9router)** oleh **[decolua](https://github.com/decolua)** — projek asal yang mengilhamkan garpu ini. OmniRoute membina asas yang luar biasa itu dengan ciri tambahan, API berbilang modal dan penulisan semula TypeScript penuh.
1572
-
1573
- Terima kasih khas kepada **[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)** — pelaksanaan Go asal yang mengilhamkan port JavaScript ini.
1574
-
1575
- ---
1576
-
1577
- ## 📄 Lesen
1578
-
1579
- Lesen MIT - lihat [LICENSE](LICENSE) untuk butiran.
1580
-
1581
- ---
1582
-
1583
- <div align="center">
1584
- <sub>Dibina dengan ❤️ untuk pembangun yang kod 24/7</sub>
1585
- <br/>
1586
- <sub><a href="https://omniroute.online">omniroute.online</a></sub>
1587
- </div>