omniroute 1.4.11 โ†’ 1.6.0

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 (377) hide show
  1. package/README.ar.md +1153 -0
  2. package/README.bg.md +1238 -0
  3. package/README.da.md +1238 -0
  4. package/README.de.md +1 -1
  5. package/README.es.md +1 -1
  6. package/README.fi.md +1238 -0
  7. package/README.fr.md +1 -1
  8. package/README.he.md +1238 -0
  9. package/README.hu.md +1238 -0
  10. package/README.id.md +1238 -0
  11. package/README.in.md +952 -0
  12. package/README.it.md +1 -1
  13. package/README.ja.md +1152 -0
  14. package/README.ko.md +1238 -0
  15. package/README.md +47 -29
  16. package/README.ms.md +1238 -0
  17. package/README.nl.md +1238 -0
  18. package/README.no.md +1238 -0
  19. package/README.phi.md +1238 -0
  20. package/README.pl.md +1238 -0
  21. package/README.pt-BR.md +16 -12
  22. package/README.pt.md +1238 -0
  23. package/README.ro.md +1238 -0
  24. package/README.ru.md +1 -1
  25. package/README.sk.md +1239 -0
  26. package/README.sv.md +1238 -0
  27. package/README.th.md +1229 -0
  28. package/README.uk-UA.md +1240 -0
  29. package/README.vi.md +1238 -0
  30. package/README.zh-CN.md +1 -1
  31. package/app/.next/BUILD_ID +1 -1
  32. package/app/.next/app-path-routes-manifest.json +34 -34
  33. package/app/.next/build-manifest.json +2 -2
  34. package/app/.next/prerender-manifest.json +3 -3
  35. package/app/.next/server/app/(dashboard)/dashboard/analytics/page.js +2 -2
  36. package/app/.next/server/app/(dashboard)/dashboard/analytics/page.js.nft.json +1 -1
  37. package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  38. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page.js +1 -1
  39. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page.js.nft.json +1 -1
  40. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
  41. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page.js +2 -2
  42. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page.js.nft.json +1 -1
  43. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
  44. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +6 -6
  45. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  46. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  47. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  48. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  49. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  50. package/app/.next/server/app/(dashboard)/dashboard/costs/page.js +2 -2
  51. package/app/.next/server/app/(dashboard)/dashboard/costs/page.js.nft.json +1 -1
  52. package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
  53. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  54. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  55. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/(dashboard)/dashboard/health/page.js +2 -2
  57. package/app/.next/server/app/(dashboard)/dashboard/health/page.js.nft.json +1 -1
  58. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  59. package/app/.next/server/app/(dashboard)/dashboard/limits/page.js +2 -2
  60. package/app/.next/server/app/(dashboard)/dashboard/limits/page.js.nft.json +1 -1
  61. package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
  62. package/app/.next/server/app/(dashboard)/dashboard/logs/page.js +1 -1
  63. package/app/.next/server/app/(dashboard)/dashboard/logs/page.js.nft.json +1 -1
  64. package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  65. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js +2 -2
  66. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js.nft.json +1 -1
  67. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  68. package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
  69. package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  70. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  71. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  72. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  73. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  74. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +1 -1
  75. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  76. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  77. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  78. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  79. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  80. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  81. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  82. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  83. package/app/.next/server/app/(dashboard)/dashboard/settings/page.js +2 -2
  84. package/app/.next/server/app/(dashboard)/dashboard/settings/page.js.nft.json +1 -1
  85. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  86. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page.js +2 -2
  87. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page.js.nft.json +1 -1
  88. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  89. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +3 -3
  90. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  91. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  92. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  93. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  94. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  95. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  96. package/app/.next/server/app/_global-error.html +2 -2
  97. package/app/.next/server/app/_global-error.rsc +1 -1
  98. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  99. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  100. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  101. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  102. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  103. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  104. package/app/.next/server/app/_not-found/page.js +1 -1
  105. package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
  106. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  107. package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  108. package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  109. package/app/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  110. package/app/.next/server/app/api/cache/route_client-reference-manifest.js +1 -1
  111. package/app/.next/server/app/api/cache/stats/route_client-reference-manifest.js +1 -1
  112. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  113. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  114. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +2 -2
  115. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  116. package/app/.next/server/app/api/cli-tools/backups/route.js +1 -1
  117. package/app/.next/server/app/api/cli-tools/backups/route_client-reference-manifest.js +1 -1
  118. package/app/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
  119. package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  120. package/app/.next/server/app/api/cli-tools/cline-settings/route.js +1 -1
  121. package/app/.next/server/app/api/cli-tools/cline-settings/route_client-reference-manifest.js +1 -1
  122. package/app/.next/server/app/api/cli-tools/codex-profiles/route.js +2 -2
  123. package/app/.next/server/app/api/cli-tools/codex-profiles/route_client-reference-manifest.js +1 -1
  124. package/app/.next/server/app/api/cli-tools/codex-settings/route.js +2 -2
  125. package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  126. package/app/.next/server/app/api/cli-tools/droid-settings/route.js +1 -1
  127. package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  128. package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route.js +1 -1
  129. package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route_client-reference-manifest.js +1 -1
  130. package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +1 -1
  131. package/app/.next/server/app/api/cli-tools/kilo-settings/route_client-reference-manifest.js +1 -1
  132. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  133. package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  134. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route.js +2 -2
  135. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route_client-reference-manifest.js +1 -1
  136. package/app/.next/server/app/api/cli-tools/status/route.js +2 -2
  137. package/app/.next/server/app/api/cli-tools/status/route_client-reference-manifest.js +1 -1
  138. package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
  139. package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
  140. package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
  141. package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
  142. package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
  143. package/app/.next/server/app/api/combos/metrics/route_client-reference-manifest.js +1 -1
  144. package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
  145. package/app/.next/server/app/api/combos/test/route_client-reference-manifest.js +1 -1
  146. package/app/.next/server/app/api/compliance/audit-log/route_client-reference-manifest.js +1 -1
  147. package/app/.next/server/app/api/db-backups/export/route_client-reference-manifest.js +1 -1
  148. package/app/.next/server/app/api/db-backups/exportAll/route_client-reference-manifest.js +1 -1
  149. package/app/.next/server/app/api/db-backups/import/route_client-reference-manifest.js +1 -1
  150. package/app/.next/server/app/api/db-backups/route_client-reference-manifest.js +1 -1
  151. package/app/.next/server/app/api/evals/[suiteId]/route_client-reference-manifest.js +1 -1
  152. package/app/.next/server/app/api/evals/route_client-reference-manifest.js +1 -1
  153. package/app/.next/server/app/api/fallback/chains/route_client-reference-manifest.js +1 -1
  154. package/app/.next/server/app/api/init/route.js +1 -1
  155. package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  156. package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  157. package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
  158. package/app/.next/server/app/api/logs/console/route_client-reference-manifest.js +1 -1
  159. package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  160. package/app/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -1
  161. package/app/.next/server/app/api/models/catalog/route_client-reference-manifest.js +1 -1
  162. package/app/.next/server/app/api/models/route.js +1 -1
  163. package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  164. package/app/.next/server/app/api/monitoring/health/route.js +1 -1
  165. package/app/.next/server/app/api/monitoring/health/route_client-reference-manifest.js +1 -1
  166. package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
  167. package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
  168. package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
  169. package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
  170. package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
  171. package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
  172. package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
  173. package/app/.next/server/app/api/policies/route_client-reference-manifest.js +1 -1
  174. package/app/.next/server/app/api/pricing/defaults/route_client-reference-manifest.js +1 -1
  175. package/app/.next/server/app/api/pricing/models/route_client-reference-manifest.js +1 -1
  176. package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
  177. package/app/.next/server/app/api/provider-metrics/route_client-reference-manifest.js +1 -1
  178. package/app/.next/server/app/api/provider-models/route_client-reference-manifest.js +1 -1
  179. package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
  180. package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
  181. package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
  182. package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
  183. package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
  184. package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
  185. package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  186. package/app/.next/server/app/api/providers/route.js +1 -1
  187. package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
  188. package/app/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
  189. package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
  190. package/app/.next/server/app/api/rate-limit/route_client-reference-manifest.js +1 -1
  191. package/app/.next/server/app/api/rate-limits/route_client-reference-manifest.js +1 -1
  192. package/app/.next/server/app/api/resilience/reset/route_client-reference-manifest.js +1 -1
  193. package/app/.next/server/app/api/resilience/route_client-reference-manifest.js +1 -1
  194. package/app/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  195. package/app/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  196. package/app/.next/server/app/api/settings/combo-defaults/route_client-reference-manifest.js +1 -1
  197. package/app/.next/server/app/api/settings/ip-filter/route_client-reference-manifest.js +1 -1
  198. package/app/.next/server/app/api/settings/proxy/route_client-reference-manifest.js +1 -1
  199. package/app/.next/server/app/api/settings/proxy/test/route_client-reference-manifest.js +1 -1
  200. package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
  201. package/app/.next/server/app/api/settings/route.js +1 -1
  202. package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  203. package/app/.next/server/app/api/settings/system-prompt/route_client-reference-manifest.js +1 -1
  204. package/app/.next/server/app/api/settings/thinking-budget/route_client-reference-manifest.js +1 -1
  205. package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  206. package/app/.next/server/app/api/storage/health/route_client-reference-manifest.js +1 -1
  207. package/app/.next/server/app/api/sync/cloud/route_client-reference-manifest.js +1 -1
  208. package/app/.next/server/app/api/sync/initialize/route.js +1 -1
  209. package/app/.next/server/app/api/sync/initialize/route_client-reference-manifest.js +1 -1
  210. package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
  211. package/app/.next/server/app/api/telemetry/summary/route_client-reference-manifest.js +1 -1
  212. package/app/.next/server/app/api/token-health/route_client-reference-manifest.js +1 -1
  213. package/app/.next/server/app/api/translator/detect/route_client-reference-manifest.js +1 -1
  214. package/app/.next/server/app/api/translator/history/route_client-reference-manifest.js +1 -1
  215. package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
  216. package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
  217. package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
  218. package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
  219. package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
  220. package/app/.next/server/app/api/usage/analytics/route_client-reference-manifest.js +1 -1
  221. package/app/.next/server/app/api/usage/budget/route_client-reference-manifest.js +1 -1
  222. package/app/.next/server/app/api/usage/call-logs/[id]/route_client-reference-manifest.js +1 -1
  223. package/app/.next/server/app/api/usage/call-logs/route_client-reference-manifest.js +1 -1
  224. package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
  225. package/app/.next/server/app/api/usage/logs/route_client-reference-manifest.js +1 -1
  226. package/app/.next/server/app/api/usage/proxy-logs/route_client-reference-manifest.js +1 -1
  227. package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
  228. package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
  229. package/app/.next/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -1
  230. package/app/.next/server/app/api/v1/audio/transcriptions/route_client-reference-manifest.js +1 -1
  231. package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
  232. package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
  233. package/app/.next/server/app/api/v1/images/generations/route_client-reference-manifest.js +1 -1
  234. package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
  235. package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
  236. package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
  237. package/app/.next/server/app/api/v1/moderations/route_client-reference-manifest.js +1 -1
  238. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route_client-reference-manifest.js +1 -1
  239. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route_client-reference-manifest.js +1 -1
  240. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route_client-reference-manifest.js +1 -1
  241. package/app/.next/server/app/api/v1/rerank/route_client-reference-manifest.js +1 -1
  242. package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
  243. package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
  244. package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
  245. package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
  246. package/app/.next/server/app/callback/page.js +2 -2
  247. package/app/.next/server/app/callback/page.js.nft.json +1 -1
  248. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  249. package/app/.next/server/app/docs/page.js +2 -2
  250. package/app/.next/server/app/docs/page.js.nft.json +1 -1
  251. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  252. package/app/.next/server/app/forbidden/page.js +2 -2
  253. package/app/.next/server/app/forbidden/page.js.nft.json +1 -1
  254. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  255. package/app/.next/server/app/forgot-password/page.js +2 -2
  256. package/app/.next/server/app/forgot-password/page.js.nft.json +1 -1
  257. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  258. package/app/.next/server/app/landing/page.js +2 -2
  259. package/app/.next/server/app/landing/page.js.nft.json +1 -1
  260. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  261. package/app/.next/server/app/login/page.js +2 -2
  262. package/app/.next/server/app/login/page.js.nft.json +1 -1
  263. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  264. package/app/.next/server/app/page.js +1 -1
  265. package/app/.next/server/app/page.js.nft.json +1 -1
  266. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  267. package/app/.next/server/app/privacy/page.js +2 -2
  268. package/app/.next/server/app/privacy/page.js.nft.json +1 -1
  269. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  270. package/app/.next/server/app/terms/page.js +2 -2
  271. package/app/.next/server/app/terms/page.js.nft.json +1 -1
  272. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  273. package/app/.next/server/app-paths-manifest.json +34 -34
  274. package/app/.next/server/chunks/1248.js +1 -0
  275. package/app/.next/server/chunks/{3994.js โ†’ 1465.js} +2 -2
  276. package/app/.next/server/chunks/1526.js +1 -0
  277. package/app/.next/server/chunks/1584.js +1 -0
  278. package/app/.next/server/chunks/1623.js +1 -0
  279. package/app/.next/server/chunks/1880.js +1 -0
  280. package/app/.next/server/chunks/1960.js +1 -1
  281. package/app/.next/server/chunks/1990.js +1 -1
  282. package/app/.next/server/chunks/2214.js +1 -0
  283. package/app/.next/server/chunks/2372.js +1 -0
  284. package/app/.next/server/chunks/2594.js +1 -0
  285. package/app/.next/server/chunks/3371.js +1 -0
  286. package/app/.next/server/chunks/3498.js +1 -1
  287. package/app/.next/server/chunks/3911.js +1 -0
  288. package/app/.next/server/chunks/438.js +1 -0
  289. package/app/.next/server/chunks/496.js +1 -0
  290. package/app/.next/server/chunks/5047.js +1 -0
  291. package/app/.next/server/chunks/5094.js +1 -0
  292. package/app/.next/server/chunks/5097.js +1 -0
  293. package/app/.next/server/chunks/5393.js +2 -0
  294. package/app/.next/server/chunks/5521.js +1 -0
  295. package/app/.next/server/chunks/5945.js +1 -0
  296. package/app/.next/server/chunks/6118.js +1 -0
  297. package/app/.next/server/chunks/6928.js +1 -0
  298. package/app/.next/server/chunks/6930.js +1 -0
  299. package/app/.next/server/chunks/7011.js +1 -0
  300. package/app/.next/server/chunks/708.js +1 -0
  301. package/app/.next/server/chunks/7650.js +1 -0
  302. package/app/.next/server/chunks/8220.js +1 -0
  303. package/app/.next/server/chunks/8464.js +1 -0
  304. package/app/.next/server/chunks/8706.js +1 -0
  305. package/app/.next/server/chunks/8976.js +1 -0
  306. package/app/.next/server/chunks/9119.js +1 -0
  307. package/app/.next/server/chunks/944.js +1 -0
  308. package/app/.next/server/chunks/9824.js +1 -1
  309. package/app/.next/server/chunks/9837.js +1 -0
  310. package/app/.next/server/instrumentation.js +1 -1
  311. package/app/.next/server/pages/500.html +2 -2
  312. package/app/.next/server/server-reference-manifest.js +1 -1
  313. package/app/.next/server/server-reference-manifest.json +1 -1
  314. package/app/.next/static/chunks/{6458-085536744d592424.js โ†’ 1149-fefe7f95f0e9842f.js} +1 -1
  315. package/app/.next/static/chunks/{5846-19c878280decbd16.js โ†’ 5846-4d550ce248336a0a.js} +1 -1
  316. package/app/.next/static/chunks/{782-5e138760b7f7bf48.js โ†’ 8055-5844ff783b2e8a99.js} +3 -3
  317. package/app/.next/static/chunks/{993-e3050ebfd4f5032f.js โ†’ 993-cf9fe6c017bc7e67.js} +3 -3
  318. package/app/.next/static/chunks/app/(dashboard)/dashboard/analytics/page-52f76c7c91444ec2.js +1 -0
  319. package/app/.next/static/chunks/app/(dashboard)/dashboard/api-manager/page-1dd4d0c348a7b0a6.js +1 -0
  320. package/app/.next/static/chunks/app/(dashboard)/dashboard/audit-log/page-e5bf8955e7b9a4f5.js +1 -0
  321. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-11e68927df2ceb77.js +15 -0
  322. package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/{page-ede2315b6918315e.js โ†’ page-6abed29d64c46388.js} +1 -1
  323. package/app/.next/static/chunks/app/(dashboard)/dashboard/costs/page-3ed2a7685adf9b91.js +1 -0
  324. package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-1420c3ca376f1585.js +1 -0
  325. package/app/.next/static/chunks/app/(dashboard)/dashboard/health/page-9a6519bf1468f16e.js +1 -0
  326. package/app/.next/static/chunks/app/(dashboard)/dashboard/limits/page-f4a2d6d07df5ddc4.js +1 -0
  327. package/app/.next/static/chunks/app/(dashboard)/dashboard/logs/{page-6ee69634597daee0.js โ†’ page-833d24f322a20f5a.js} +1 -1
  328. package/app/.next/static/chunks/app/(dashboard)/dashboard/onboarding/page-d424641c7e428be9.js +1 -0
  329. package/app/.next/static/chunks/app/(dashboard)/dashboard/page-388840686801f3f5.js +1 -0
  330. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-9c8ffb212f855704.js +1 -0
  331. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-31cdb6e15134d8c2.js +1 -0
  332. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-1f022385b812b987.js +1 -0
  333. package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/page-1393d4935fc087cf.js +1 -0
  334. package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/pricing/{page-77158451270c1852.js โ†’ page-f10a8d4bb8236913.js} +1 -1
  335. package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-83b07523f81d6282.js +4 -0
  336. package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-9cc99ab874fc36e7.js +1 -0
  337. package/app/.next/static/chunks/app/(dashboard)/{layout-b23c2c5427e04dcf.js โ†’ layout-00d5d56af65098a9.js} +1 -1
  338. package/app/.next/static/chunks/app/callback/page-585a53f7dc6a30f1.js +1 -0
  339. package/app/.next/static/chunks/app/docs/page-2fe9dcbeb3f738c0.js +1 -0
  340. package/app/.next/static/chunks/app/forbidden/{page-4a39fedc08aaaf55.js โ†’ page-df886dfa2d5bd9fa.js} +1 -1
  341. package/app/.next/static/chunks/app/forgot-password/page-2a495f0b0c653ab4.js +1 -0
  342. package/app/.next/static/chunks/app/landing/page-9d540ab1716f8e3e.js +1 -0
  343. package/app/.next/static/chunks/app/login/page-121c612ee459e7c2.js +1 -0
  344. package/app/.next/static/chunks/app/privacy/page-2fe9dcbeb3f738c0.js +1 -0
  345. package/app/.next/static/chunks/app/terms/page-2fe9dcbeb3f738c0.js +1 -0
  346. package/app/.next/static/css/6f101b114a4a7286.css +1 -0
  347. package/app/package.json +3 -3
  348. package/bin/omniroute.mjs +27 -14
  349. package/package.json +3 -3
  350. package/app/.next/server/chunks/1259.js +0 -2
  351. package/app/.next/server/chunks/4509.js +0 -1
  352. package/app/.next/static/chunks/app/(dashboard)/dashboard/analytics/page-a50474b6ebdf468a.js +0 -1
  353. package/app/.next/static/chunks/app/(dashboard)/dashboard/api-manager/page-d806e4f28c15636a.js +0 -1
  354. package/app/.next/static/chunks/app/(dashboard)/dashboard/audit-log/page-27bc511cf3930e1e.js +0 -1
  355. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-ad885fdf9806e9a6.js +0 -15
  356. package/app/.next/static/chunks/app/(dashboard)/dashboard/costs/page-08f3ed204d01b6a0.js +0 -1
  357. package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-6e4f3ca7ac9778be.js +0 -1
  358. package/app/.next/static/chunks/app/(dashboard)/dashboard/health/page-8725f1a181e558a3.js +0 -1
  359. package/app/.next/static/chunks/app/(dashboard)/dashboard/limits/page-fbe1442b61df950a.js +0 -1
  360. package/app/.next/static/chunks/app/(dashboard)/dashboard/onboarding/page-931fa0c45dca76c9.js +0 -1
  361. package/app/.next/static/chunks/app/(dashboard)/dashboard/page-04bc41f9e9de17ef.js +0 -1
  362. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-6b6d62c5872aee46.js +0 -1
  363. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-2dc2a865e90681dd.js +0 -1
  364. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-ac85ce5066cd9044.js +0 -1
  365. package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/page-88cac9e6f2fbe335.js +0 -1
  366. package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-b351778975cb8622.js +0 -4
  367. package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-f0809c7842e4f5b4.js +0 -1
  368. package/app/.next/static/chunks/app/callback/page-e439cd5a287000d8.js +0 -1
  369. package/app/.next/static/chunks/app/docs/page-8f74097544a61b9d.js +0 -1
  370. package/app/.next/static/chunks/app/forgot-password/page-a440e0c1675842bf.js +0 -1
  371. package/app/.next/static/chunks/app/landing/page-09741814aaca7548.js +0 -1
  372. package/app/.next/static/chunks/app/login/page-164f6b6b41167c5a.js +0 -1
  373. package/app/.next/static/chunks/app/privacy/page-8f74097544a61b9d.js +0 -1
  374. package/app/.next/static/chunks/app/terms/page-8f74097544a61b9d.js +0 -1
  375. package/app/.next/static/css/e90887a86e63903f.css +0 -1
  376. /package/app/.next/static/{g7Mie-iq39oZ7ts610YtL โ†’ 8-doeVY8E2CPMK7rYufd5}/_buildManifest.js +0 -0
  377. /package/app/.next/static/{g7Mie-iq39oZ7ts610YtL โ†’ 8-doeVY8E2CPMK7rYufd5}/_ssgManifest.js +0 -0
package/README.ko.md ADDED
@@ -0,0 +1,1238 @@
1
+ <div align="center">
2
+ <img src="./docs/screenshots/MainOmniRoute.png" alt="OmniRoute Dashboard" width="800"/>
3
+
4
+ # ๐Ÿš€ OmniRoute โ€” ๋ฌด๋ฃŒ AI ๊ฒŒ์ดํŠธ์›จ์ด
5
+
6
+ ๐ŸŒ **[English](#-omniroute--the-free-ai-gateway)** | **[Portuguรชs (BR)](#-omniroute--gateway-de-ia-gratuito)**
7
+
8
+ ### ์ฝ”๋”ฉ์„ ๋ฉˆ์ถ”์ง€ ๋งˆ์„ธ์š”. ์ž๋™ ํด๋ฐฑ์„ ํ†ตํ•ด **๋ฌด๋ฃŒ ๋ฐ ์ €๊ฐ€ํ˜• AI ๋ชจ๋ธ**๋กœ ์Šค๋งˆํŠธ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค.
9
+
10
+ _๋ฒ”์šฉ API ํ”„๋ก์‹œ โ€” ํ•˜๋‚˜์˜ ์—”๋“œํฌ์ธํŠธ, 36๊ฐœ ์ด์ƒ์˜ ๊ณต๊ธ‰์ž, ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„ ์—†์Œ._
11
+
12
+ **์ฑ„ํŒ… ์™„๋ฃŒ โ€ข ์ž„๋ฒ ๋”ฉ โ€ข ์ด๋ฏธ์ง€ ์ƒ์„ฑ โ€ข ์˜ค๋””์˜ค โ€ข ์ˆœ์œ„ ์žฌ์ง€์ • โ€ข 100% TypeScript**
13
+
14
+ ---
15
+
16
+ ### ๐Ÿค– ์ข‹์•„ํ•˜๋Š” ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋ฅผ ์œ„ํ•œ ๋ฌด๋ฃŒ AI ์ œ๊ณต์—…์ฒด
17
+
18
+ _๋ฌด์ œํ•œ ์ฝ”๋”ฉ์„ ์œ„ํ•œ ๋ฌด๋ฃŒ API ๊ฒŒ์ดํŠธ์›จ์ด์ธ OmniRoute๋ฅผ ํ†ตํ•ด AI ๊ธฐ๋ฐ˜ IDE ๋˜๋Š” CLI ๋„๊ตฌ๋ฅผ ์—ฐ๊ฒฐํ•˜์„ธ์š”._
19
+
20
+ <table>
21
+ <tr>
22
+ <td align="center" width="110">
23
+ <a href="https://github.com/cline/cline">
24
+ <img src="./public/providers/openclaw.png" alt="OpenClaw" width="48"/><br/>
25
+ <b>OpenClaw</b>
26
+ </a><br/>
27
+ <sub>โญ 205K</sub>
28
+ </td>
29
+ <td align="center" width="110">
30
+ <a href="https://github.com/HKUDS/nanobot">
31
+ <img src="./public/providers/nanobot.png" alt="NanoBot" width="48"/><br/>
32
+ <b>NanoBot</b>
33
+ </a><br/>
34
+ <sub>โญ 20.9K</sub>
35
+ </td>
36
+ <td align="center" width="110">
37
+ <a href="https://github.com/sipeed/picoclaw">
38
+ <img src="./public/providers/picoclaw.jpg" alt="PicoClaw" width="48"/><br/>
39
+ <b>PicoClaw</b>
40
+ </a><br/>
41
+ <sub>โญ 14.6K</sub>
42
+ </td>
43
+ <td align="center" width="110">
44
+ <a href="https://github.com/zeroclaw-labs/zeroclaw">
45
+ <img src="./public/providers/zeroclaw.png" alt="ZeroClaw" width="48"/><br/>
46
+ <b>ZeroClaw</b>
47
+ </a><br/>
48
+ <sub>โญ 9.9K</sub>
49
+ </td>
50
+ <td align="center" width="110">
51
+ <a href="https://github.com/nearai/ironclaw">
52
+ <img src="./public/providers/ironclaw.png" alt="IronClaw" width="48"/><br/>
53
+ <b>IronClaw</b>
54
+ </a><br/>
55
+ <sub>โญ 2.1K</sub>
56
+ </td>
57
+ </tr>
58
+ <tr>
59
+ <td align="center" width="110">
60
+ <a href="https://github.com/anomalyco/opencode">
61
+ <img src="./public/providers/opencode.svg" alt="OpenCode" width="48"/><br/>
62
+ <b>OpenCode</b>
63
+ </a><br/>
64
+ <sub>โญ 106K</sub>
65
+ </td>
66
+ <td align="center" width="110">
67
+ <a href="https://github.com/openai/codex">
68
+ <img src="./public/providers/codex.png" alt="Codex CLI" width="48"/><br/>
69
+ <b>Codex CLI</b>
70
+ </a><br/>
71
+ <sub>โญ 60.8K</sub>
72
+ </td>
73
+ <td align="center" width="110">
74
+ <a href="https://github.com/anthropics/claude-code">
75
+ <img src="./public/providers/claude.png" alt="Claude Code" width="48"/><br/>
76
+ <b>Claude Code</b>
77
+ </a><br/>
78
+ <sub>โญ 67.3K</sub>
79
+ </td>
80
+ <td align="center" width="110">
81
+ <a href="https://github.com/google-gemini/gemini-cli">
82
+ <img src="./public/providers/gemini-cli.png" alt="Gemini CLI" width="48"/><br/>
83
+ <b>Gemini CLI</b>
84
+ </a><br/>
85
+ <sub>โญ 94.7K</sub>
86
+ </td>
87
+ <td align="center" width="110">
88
+ <a href="https://github.com/Kilo-Org/kilocode">
89
+ <img src="./public/providers/kilocode.png" alt="Kilo Code" width="48"/><br/>
90
+ <b>Kilo Code</b>
91
+ </a><br/>
92
+ <sub>โญ 15.5K</sub>
93
+ </td>
94
+ </tr>
95
+ </table>
96
+
97
+ <sub>๐Ÿ“ก ๋ชจ๋“  ์—์ด์ „ํŠธ๋Š” <code>http://localhost:20128/v1</code> ๋˜๋Š” <code>http://cloud.omniroute.online/v1</code>์„ ํ†ตํ•ด ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. โ€” ํ•˜๋‚˜์˜ ๊ตฌ์„ฑ, ๋ฌด์ œํ•œ ๋ชจ๋ธ ๋ฐ ํ• ๋‹น๋Ÿ‰</sub>
98
+
99
+ ---
100
+
101
+ [![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute)
102
+ [![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute)
103
+ [![License](https://img.shields.io/github/license/diegosouzapw/OmniRoute)](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE)
104
+ [![Website](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online)
105
+ [![WhatsApp](https://img.shields.io/badge/WhatsApp-Community-25D366?logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
106
+
107
+ [๐ŸŒ 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)
108
+
109
+ ๐ŸŒ **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)
110
+
111
+ </div>
112
+
113
+ ---
114
+
115
+ ## ๐Ÿค” ์™œ OmniRoute์ธ๊ฐ€์š”?
116
+
117
+ **๋ˆ์„ ๋‚ญ๋น„ํ•˜์ง€ ๋ง๊ณ  ํ•œ๋„์— ๋„๋‹ฌํ•˜์ง€ ๋งˆ์„ธ์š”.**
118
+
119
+ - <img src="https://img.shields.io/badge/โœ—-e74c3c?style=flat-square" height="16"/> ๊ตฌ๋… ํ• ๋‹น๋Ÿ‰์€ ๋งค๋‹ฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ์ฑ„ ๋งŒ๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
120
+ - <img src="https://img.shields.io/badge/โœ—-e74c3c?style=flat-square" height="16"/> ์†๋„ ์ œํ•œ์œผ๋กœ ์ธํ•ด ์ฝ”๋”ฉ์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.
121
+ - <img src="https://img.shields.io/badge/โœ—-e74c3c?style=flat-square" height="16"/> ๊ณ ๊ฐ€์˜ API(๊ณต๊ธ‰์ž๋‹น ์›” $20-50)
122
+ - <img src="https://img.shields.io/badge/โœ—-e74c3c?style=flat-square" height="16"/> ๊ณต๊ธ‰์ž ๊ฐ„ ์ˆ˜๋™ ์ „ํ™˜
123
+
124
+ **OmniRoute๋Š” ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.**
125
+
126
+ - โœ… **๊ตฌ๋… ๊ทน๋Œ€ํ™”** - ํ• ๋‹น๋Ÿ‰์„ ์ถ”์ ํ•˜๊ณ  ์žฌ์„ค์ •ํ•˜๊ธฐ ์ „์— ๋ชจ๋“  ๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
127
+ - โœ… **์ž๋™ ๋Œ€์ฒด** - ๊ตฌ๋… โ†’ API ํ‚ค โ†’ ์ €๋ ดํ•œ โ†’ ๋ฌด๋ฃŒ, ๋‹ค์šดํƒ€์ž„ ์—†์Œ
128
+ - โœ… **๋‹ค์ค‘ ๊ณ„์ •** - ๊ณต๊ธ‰์ž๋ณ„ ๊ณ„์ • ๊ฐ„ ๋ผ์šด๋“œ ๋กœ๋นˆ
129
+ - โœ… **์œ ๋‹ˆ๋ฒ„์„ค** - Claude Code, Codex, Gemini CLI, Cursor, Cline, OpenClaw, ๋ชจ๋“  CLI ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์ž‘๋™
130
+
131
+ ---
132
+
133
+ ## ๐Ÿ”„ ์ž‘๋™ ๋ฐฉ์‹
134
+
135
+ ```
136
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
137
+ โ”‚ Your CLI โ”‚ (Claude Code, Codex, Gemini CLI, OpenClaw, Cursor, Cline...)
138
+ โ”‚ Tool โ”‚
139
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜
140
+ โ”‚ http://localhost:20128/v1
141
+ โ†“
142
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
143
+ โ”‚ OmniRoute (Smart Router) โ”‚
144
+ โ”‚ โ€ข Format translation (OpenAI โ†” Claude) โ”‚
145
+ โ”‚ โ€ข Quota tracking + Embeddings + Images โ”‚
146
+ โ”‚ โ€ข Auto token refresh โ”‚
147
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
148
+ โ”‚
149
+ โ”œโ”€โ†’ [Tier 1: SUBSCRIPTION] Claude Code, Codex, Gemini CLI
150
+ โ”‚ โ†“ quota exhausted
151
+ โ”œโ”€โ†’ [Tier 2: API KEY] DeepSeek, Groq, xAI, Mistral, NVIDIA NIM, etc.
152
+ โ”‚ โ†“ budget limit
153
+ โ”œโ”€โ†’ [Tier 3: CHEAP] GLM ($0.6/1M), MiniMax ($0.2/1M)
154
+ โ”‚ โ†“ budget limit
155
+ โ””โ”€โ†’ [Tier 4: FREE] iFlow, Qwen, Kiro (unlimited)
156
+
157
+ Result: Never stop coding, minimal cost
158
+ ```
159
+
160
+ ---
161
+
162
+ ## โšก ๋น ๋ฅธ ์‹œ์ž‘
163
+
164
+ **1. ์ „์—ญ์ ์œผ๋กœ ์„ค์น˜:**
165
+
166
+ ```bash
167
+ npm install -g omniroute
168
+ omniroute
169
+ ```
170
+
171
+ ๐ŸŽ‰ ๋Œ€์‹œ๋ณด๋“œ๋Š” `http://localhost:20128`์—์„œ ์—ด๋ฆฝ๋‹ˆ๋‹ค.
172
+
173
+ | ๋ช…๋ น | ์„ค๋ช… |
174
+ | ----------------------- | ----------------------------- |
175
+ | `omniroute` | ์„œ๋ฒ„ ์‹œ์ž‘(๊ธฐ๋ณธ ํฌํŠธ 20128) |
176
+ | `omniroute --port 3000` | ์‚ฌ์šฉ์ž ์ •์˜ ํฌํŠธ ์‚ฌ์šฉ |
177
+ | `omniroute --no-open` | ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ž๋™์œผ๋กœ ์—ด์ง€ ์•Š์Œ |
178
+ | `omniroute --help` | ๋„์›€๋ง ํ‘œ์‹œ |
179
+
180
+ **2. ๋ฌด๋ฃŒ ๊ณต๊ธ‰์ž ์—ฐ๊ฒฐ:**
181
+
182
+ ๋Œ€์‹œ๋ณด๋“œ โ†’ ๊ณต๊ธ‰์ž โ†’ **Claude Code** ๋˜๋Š” **Antigravity** ์—ฐ๊ฒฐ โ†’ OAuth ๋กœ๊ทธ์ธ โ†’ ์™„๋ฃŒ!
183
+
184
+ **3. CLI ๋„๊ตฌ์—์„œ ์‚ฌ์šฉ:**
185
+
186
+ ```
187
+ Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline Settings:
188
+ Endpoint: http://localhost:20128/v1
189
+ API Key: [copy from dashboard]
190
+ Model: if/kimi-k2-thinking
191
+ ```
192
+
193
+ **๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค!** ๋ฌด๋ฃŒ AI ๋ชจ๋ธ๋กœ ์ฝ”๋”ฉ์„ ์‹œ์ž‘ํ•ด ๋ณด์„ธ์š”.
194
+
195
+ **๋Œ€์•ˆ โ€” ์†Œ์Šค์—์„œ ์‹คํ–‰:**
196
+
197
+ ```bash
198
+ cp .env.example .env
199
+ npm install
200
+ PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
201
+ ```
202
+
203
+ ---
204
+
205
+ ## ๐Ÿณ ๋„์ปค
206
+
207
+ OmniRoute๋Š” [Docker Hub](https://hub.docker.com/r/diegosouzapw/omniroute)์—์„œ ๊ณต๊ฐœ Docker ์ด๋ฏธ์ง€๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
208
+
209
+ **๋น ๋ฅธ ์‹คํ–‰:**
210
+
211
+ ```bash
212
+ docker run -d \
213
+ --name omniroute \
214
+ --restart unless-stopped \
215
+ -p 20128:20128 \
216
+ -v omniroute-data:/app/data \
217
+ diegosouzapw/omniroute:latest
218
+ ```
219
+
220
+ **ํ™˜๊ฒฝ ํŒŒ์ผ ํฌํ•จ:**
221
+
222
+ ```bash
223
+ # Copy and edit .env first
224
+ cp .env.example .env
225
+
226
+ docker run -d \
227
+ --name omniroute \
228
+ --restart unless-stopped \
229
+ --env-file .env \
230
+ -p 20128:20128 \
231
+ -v omniroute-data:/app/data \
232
+ diegosouzapw/omniroute:latest
233
+ ```
234
+
235
+ **Docker Compose ์‚ฌ์šฉ:**
236
+
237
+ ```bash
238
+ # Base profile (no CLI tools)
239
+ docker compose --profile base up -d
240
+
241
+ # CLI profile (Claude Code, Codex, OpenClaw built-in)
242
+ docker compose --profile cli up -d
243
+ ```
244
+
245
+ | ์ด๋ฏธ์ง€ | ํƒœ๊ทธ | ์‚ฌ์ด์ฆˆ | ์„ค๋ช… |
246
+ | ------------------------ | -------- | ------ | ---------------- |
247
+ | `diegosouzapw/omniroute` | `latest` | ~250MB | ์ตœ์‹  ์•ˆ์ • ๋ฆด๋ฆฌ์Šค |
248
+ | `diegosouzapw/omniroute` | `1.0.3` | ~250MB | ํ˜„์žฌ ๋ฒ„์ „ |
249
+
250
+ ---
251
+
252
+ ## ๐Ÿ’ฐ ๊ฐ€๊ฒฉ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ
253
+
254
+ | ๊ณ„์ธต | ๊ณต๊ธ‰์ž | ๋น„์šฉ | ํ• ๋‹น๋Ÿ‰ ์žฌ์„ค์ • | ์ตœ๊ณ ์˜ ๋Œ€์ƒ |
255
+ | ------------- | ------------------- | --------------------- | --------------- | ----------------- |
256
+ | **๐Ÿ’ณ ๊ตฌ๋…** | ํด๋กœ๋“œ ์ฝ”๋“œ (Pro) | $20/์›” | 5์‹œ๊ฐ„ + ๋งค์ฃผ | ์ด๋ฏธ ๊ตฌ๋… ์ค‘ |
257
+ | | ์ฝ”๋ฑ์Šค(ํ”Œ๋Ÿฌ์Šค/ํ”„๋กœ) | $20-200/์›” | 5์‹œ๊ฐ„ + ๋งค์ฃผ | OpenAI ์‚ฌ์šฉ์ž |
258
+ | | ์ œ๋ฏธ๋‹ˆ CLI | **๋ฌด๋ฃŒ** | 180K/์›” + 1K/์ผ | ๋ชจ๋“  ์‚ฌ๋žŒ! |
259
+ | | GitHub ๋ถ€์กฐ์ข…์‚ฌ | $10-19/์›” | ์›”๊ฐ„ | GitHub ์‚ฌ์šฉ์ž |
260
+ | **๐Ÿ”‘ API ํ‚ค** | ์—”๋น„๋””์•„ NIM | **๋ฌด๋ฃŒ** (1000ํฌ๋ ˆ๋”ง) | ์ผํšŒ์„ฑ | ๋ฌด๋ฃŒ ๋“ฑ๊ธ‰ ํ…Œ์ŠคํŠธ |
261
+ | | ๋”ฅ์‹œํฌ | ์ข…๋Ÿ‰์ œ | ์—†์Œ | ์ตœ๊ณ ์˜ ๊ฐ€๊ฒฉ/ํ’ˆ์งˆ |
262
+ | | ๊ทธ๋กœํฌ | ๋ฌด๋ฃŒ ๋“ฑ๊ธ‰ + ์œ ๋ฃŒ | ์š”๊ธˆ ์ œํ•œ | ์ดˆ๊ณ ์† ์ถ”๋ก  |
263
+ | | xAI(๊ทธ๋ก) | ์ข…๋Ÿ‰์ œ | ์—†์Œ | ๊ทธ๋ก ๋ชจ๋ธ |
264
+ | | ๋ฏธ์ŠคํŠธ๋ž„ | ๋ฌด๋ฃŒ ๋“ฑ๊ธ‰ + ์œ ๋ฃŒ | ์š”๊ธˆ ์ œํ•œ | ์œ ๋Ÿฝ์˜ AI |
265
+ | | ์˜คํ”ˆ๋ผ์šฐํ„ฐ | ์ข…๋Ÿ‰์ œ | ์—†์Œ | 100๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ |
266
+ | **๐Ÿ’ฐ ์ €๋ ดํ•œ** | GLM-4.7 | $0.6/1M | ๋งค์ผ ์˜ค์ „ 10์‹œ | ์˜ˆ์‚ฐ ๋ฐฑ์—… |
267
+ | | ๋ฏธ๋‹ˆ๋งฅ์Šค M2.1 | $0.2/1M | 5์‹œ๊ฐ„ ๋กค๋ง | ๊ฐ€์žฅ ์ €๋ ดํ•œ ์˜ต์…˜ |
268
+ | | ํ‚ค๋ฏธ K2 | $9/์›” ์ •์•ก | 1000๋งŒ ํ† ํฐ/์›” | ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋น„์šฉ |
269
+ | **๐Ÿ†“ ๋ฌด๋ฃŒ** | ์•„์ดํ”Œ๋กœ์šฐ | $0 | ๋ฌด์ œํ•œ | 8๊ฐœ ๋ชจ๋ธ ๋ฌด๋ฃŒ |
270
+ | | ํ€€ | $0 | ๋ฌด์ œํ•œ | 3๊ฐœ ๋ชจ๋ธ ๋ฌด๋ฃŒ |
271
+ | | ํ‚ค๋กœ | $0 | ๋ฌด์ œํ•œ | ํด๋กœ๋“œ ํ”„๋ฆฌ |
272
+
273
+ **๐Ÿ’ก ์ „๋ฌธ๊ฐ€ ํŒ:** Gemini CLI(์›” 180K ๋ฌด๋ฃŒ) + iFlow(๋ฌด์ œํ•œ ๋ฌด๋ฃŒ) ์ฝค๋ณด = ๋น„์šฉ $0๋กœ ์‹œ์ž‘ํ•˜์„ธ์š”!
274
+
275
+ ---
276
+
277
+ ## ๐ŸŽฏ ์‚ฌ์šฉ ์‚ฌ๋ก€
278
+
279
+ ### ์‚ฌ๋ก€ 1: "Claude Pro๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค."
280
+
281
+ **๋ฌธ์ œ:** ํ• ๋‹น๋Ÿ‰์€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋งŒ๋ฃŒ๋˜๋ฉฐ, ์ฝ”๋”ฉ ์ž‘์—…์ด ๋งŽ์€ ๋™์•ˆ ์†๋„ ์ œํ•œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
282
+
283
+ ```
284
+ Combo: "maximize-claude"
285
+ 1. cc/claude-opus-4-6 (use subscription fully)
286
+ 2. glm/glm-4.7 (cheap backup when quota out)
287
+ 3. if/kimi-k2-thinking (free emergency fallback)
288
+
289
+ Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total
290
+ vs. $20 + hitting limits = frustration
291
+ ```
292
+
293
+ ### ์‚ฌ๋ก€ 2: "๋น„์šฉ์ด 0์ด๊ธธ ์›ํ•ฉ๋‹ˆ๋‹ค"
294
+
295
+ **๋ฌธ์ œ:** ๊ตฌ๋…๋ฃŒ๋ฅผ ๊ฐ๋‹นํ•  ์ˆ˜ ์—†๊ณ  ์•ˆ์ •์ ์ธ AI ์ฝ”๋”ฉ์ด ํ•„์š”ํ•จ
296
+
297
+ ```
298
+ Combo: "free-forever"
299
+ 1. gc/gemini-3-flash (180K free/month)
300
+ 2. if/kimi-k2-thinking (unlimited free)
301
+ 3. qw/qwen3-coder-plus (unlimited free)
302
+
303
+ Monthly cost: $0
304
+ Quality: Production-ready models
305
+ ```
306
+
307
+ ### ์‚ฌ๋ก€ 3: "์ค‘๋‹จ ์—†์ด ์—ฐ์ค‘๋ฌดํœด ์ฝ”๋”ฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค."
308
+
309
+ **๋ฌธ์ œ:** ๋งˆ๊ฐ์ผ, ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์„ ๊ฐ๋‹นํ•  ์ˆ˜ ์—†์Œ
310
+
311
+ ```
312
+ Combo: "always-on"
313
+ 1. cc/claude-opus-4-6 (best quality)
314
+ 2. cx/gpt-5.2-codex (second subscription)
315
+ 3. glm/glm-4.7 (cheap, resets daily)
316
+ 4. minimax/MiniMax-M2.1 (cheapest, 5h reset)
317
+ 5. if/kimi-k2-thinking (free unlimited)
318
+
319
+ Result: 5 layers of fallback = zero downtime
320
+ ```
321
+
322
+ ### ์‚ฌ๋ก€ 4: "OpenClaw์—์„œ ๋ฌด๋ฃŒ AI๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค"
323
+
324
+ **๋ฌธ์ œ:** ๋ฉ”์‹œ์ง• ์•ฑ์— AI ๋„์šฐ๋ฏธ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ ์™„์ „ ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค.
325
+
326
+ ```
327
+ Combo: "openclaw-free"
328
+ 1. if/glm-4.7 (unlimited free)
329
+ 2. if/minimax-m2.1 (unlimited free)
330
+ 3. if/kimi-k2-thinking (unlimited free)
331
+
332
+ Monthly cost: $0
333
+ Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal...
334
+ ```
335
+
336
+ ---
337
+
338
+ ## ๐Ÿ’ก ์ฃผ์š” ๊ธฐ๋Šฅ
339
+
340
+ ### ๐Ÿง  ์ฝ”์–ด ๋ผ์šฐํŒ… ๋ฐ ์ธํ…”๋ฆฌ์ „์Šค
341
+
342
+ | ๊ธฐ๋Šฅ | ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ |
343
+ | --------------------------- | ------------------------------------------------------------------------- |
344
+ | ๐ŸŽฏ **์Šค๋งˆํŠธ 4๊ณ„์ธต ํด๋ฐฑ** | ์ž๋™ ๊ฒฝ๋กœ: ๊ตฌ๋… โ†’ API ํ‚ค โ†’ ์ €๋ ดํ•œ โ†’ ๋ฌด๋ฃŒ |
345
+ | ๐Ÿ“Š **์‹ค์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰ ์ถ”์ ** | ๋ผ์ด๋ธŒ ํ† ํฐ ์ˆ˜ + ๊ณต๊ธ‰์ž๋ณ„ ์นด์šดํŠธ๋‹ค์šด ์žฌ์„ค์ • |
346
+ | ๐Ÿ”„ **ํ˜•์‹ ๋ฒˆ์—ญ** | OpenAI โ‡” Claude โ‡” Gemini โ‡” Cursor โ‡” Kiro ์‹ฌ๋ฆฌ์Šค + ๋ฐ˜์‘์œ„์ƒ |
347
+ | ๐Ÿ‘ฅ **๋‹ค์ค‘ ๊ณ„์ • ์ง€์›** | ์ง€๋Šฅ์ ์ธ ์„ ํƒ์„ ํ†ตํ•ด ๊ณต๊ธ‰์ž๋‹น ์—ฌ๋Ÿฌ ๊ณ„์ • |
348
+ | ๐Ÿ”„ **์ž๋™ ํ† ํฐ ์ƒˆ๋กœ๊ณ ์นจ** | ์žฌ์‹œ๋„ ์‹œ OAuth ํ† ํฐ์ด ์ž๋™์œผ๋กœ ์ƒˆ๋กœ ๊ณ ์ณ์ง‘๋‹ˆ๋‹ค. |
349
+ | ๐ŸŽจ **๋งž์ถคํ˜• ์ฝค๋ณด** | 6๊ฐ€์ง€ ์ „๋žต: ์ฑ„์šฐ๊ธฐ ์šฐ์„ , ๋ผ์šด๋“œ ๋กœ๋นˆ, p2c, ๋ฌด์ž‘์œ„, ์ตœ์†Œ ์‚ฌ์šฉ, ๋น„์šฉ ์ตœ์ ํ™” |
350
+ | ๐Ÿงฉ **๋งž์ถคํ˜• ๋ชจ๋ธ** | ๋ชจ๋“  ๊ณต๊ธ‰์ž์— ๋ชจ๋ธ ID ์ถ”๊ฐ€ |
351
+ | ๐ŸŒ **์™€์ผ๋“œ์นด๋“œ ๋ผ์šฐํ„ฐ** | `provider/*` ํŒจํ„ด์„ ๋ชจ๋“  ๊ณต๊ธ‰์ž์—๊ฒŒ ๋™์ ์œผ๋กœ ๋ผ์šฐํŒ… |
352
+ | ๐Ÿง  **์˜ˆ์‚ฐ ๊ณ ๋ ค** | ์ถ”๋ก  ๋ชจ๋ธ์„ ์œ„ํ•œ ํŒจ์Šค์Šค๋ฃจ, ์ž๋™, ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐ ์ ์‘ํ˜• ๋ชจ๋“œ |
353
+ | ๐Ÿ’ฌ **์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ์‚ฝ์ž…** | ๋ชจ๋“  ์š”์ฒญ์— โ€‹โ€‹์ „์—ญ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ์ ์šฉ |
354
+ | ๐Ÿ“„ **์‘๋‹ต API** | Codex์— ๋Œ€ํ•œ ์ „์ฒด OpenAI ์‘๋‹ต API(`/v1/responses`) ์ง€์› |
355
+
356
+ ### ๐ŸŽต ๋‹ค์ค‘ ๋ชจ๋“œ API
357
+
358
+ | ๊ธฐ๋Šฅ | ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ |
359
+ | ----------------------- | ------------------------------------------------------ |
360
+ | ๐Ÿ–ผ๏ธ **์ด๋ฏธ์ง€ ์ƒ์„ฑ** | `/v1/images/generations` โ€” 4๊ฐœ ๊ณต๊ธ‰์ž, 9๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ |
361
+ | ๐Ÿ“ **์ž„๋ฒ ๋”ฉ** | `/v1/embeddings` โ€” 6๊ฐœ ๊ณต๊ธ‰์ž, 9๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ |
362
+ | ๐ŸŽค **์˜ค๋””์˜ค ์ „์‚ฌ** | `/v1/audio/transcriptions` โ€” ์†์‚ญ์ž„ ํ˜ธํ™˜ |
363
+ | ๐Ÿ”Š **ํ…์ŠคํŠธ ์Œ์„ฑ ๋ณ€ํ™˜** | `/v1/audio/speech` โ€” ๋‹ค์ค‘ ์ œ๊ณต์ž ์˜ค๋””์˜ค ํ•ฉ์„ฑ |
364
+ | ๐Ÿ›ก๏ธ **์กฐ์ •** | `/v1/moderations` โ€” ์ฝ˜ํ…์ธ  ์•ˆ์ „ ํ™•์ธ |
365
+ | ๐Ÿ”€ **์žฌ์ˆœ์œ„** | `/v1/rerank` โ€” ๋ฌธ์„œ ๊ด€๋ จ์„ฑ ์žฌ์ˆœ์œ„ |
366
+
367
+ ### ๐Ÿ›ก๏ธ ๋ณต์›๋ ฅ ๋ฐ ๋ณด์•ˆ
368
+
369
+ | ๊ธฐ๋Šฅ | ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ |
370
+ | ---------------------------- | -------------------------------------------------------------------------- |
371
+ | ๐Ÿ”Œ **ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ** | ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์ž„๊ณ„๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต๊ธ‰์ž๋ณ„ ์ž๋™ ์—ด๊ธฐ/๋‹ซ๊ธฐ |
372
+ | ๐Ÿ›ก๏ธ **์ฒœ๋‘ฅ ๋ฐฉ์ง€ ๋ฌด๋ฆฌ** | API ํ‚ค ๊ณต๊ธ‰์ž์— ๋Œ€ํ•œ ๋ฎคํ…์Šค + ์„ธ๋งˆํฌ ์†๋„ ์ œํ•œ |
373
+ | ๐Ÿง  **์˜๋ฏธ๋ก ์  ์บ์‹œ** | 2๊ณ„์ธต ์บ์‹œ(์„œ๋ช… + ์˜๋ฏธ ์ฒด๊ณ„)๋กœ ๋น„์šฉ ๋ฐ ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๊ฐ์†Œ |
374
+ | โšก **๋ฉฑ๋“ฑ์„ฑ ์š”์ฒญ** | ์ค‘๋ณต ์š”์ฒญ์— ๋Œ€ํ•œ 5์ดˆ ์ค‘๋ณต ์ œ๊ฑฐ ๊ธฐ๊ฐ„ |
375
+ | ๐Ÿ”’ **TLS ์ง€๋ฌธ ์Šคํ‘ธํ•‘** | wreq-js๋ฅผ ํ†ตํ•ด TLS ๊ธฐ๋ฐ˜ ๋ด‡ ๊ฐ์ง€ ์šฐํšŒ |
376
+ | ๐ŸŒ **IP ํ•„ํ„ฐ๋ง** | API ์•ก์„ธ์Šค ์ œ์–ด๋ฅผ ์œ„ํ•œ ํ—ˆ์šฉ ๋ชฉ๋ก/์ฐจ๋‹จ ๋ชฉ๋ก |
377
+ | ๐Ÿ“Š **ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ์†๋„ ์ œํ•œ** | ์‹œ์Šคํ…œ ์ˆ˜์ค€์—์„œ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ RPM, ์ตœ์†Œ ๊ฐ„๊ฒฉ ๋ฐ ์ตœ๋Œ€ ๋™์‹œ |
378
+ | ๐Ÿ›ก **API ์—”๋“œํฌ์ธํŠธ ๋ณดํ˜ธ** | `/models` ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•œ ์ธ์ฆ ๊ฒŒ์ดํŒ… + ๊ณต๊ธ‰์ž ์ฐจ๋‹จ |
379
+ | ๐Ÿ”’ **ํ”„๋ก์‹œ ๊ฐ€์‹œ์„ฑ** | ์ƒ‰์ƒ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๋ฐฐ์ง€: ๐ŸŸข ๊ธ€๋กœ๋ฒŒ, ๐ŸŸก ๊ณต๊ธ‰์ž, ๐Ÿ”ต IP ๋””์Šคํ”Œ๋ ˆ์ด๋ฅผ ํ†ตํ•œ ์—ฐ๊ฒฐ๋ณ„ |
380
+ | ๐ŸŒ **3๋‹จ๊ณ„ ํ”„๋ก์‹œ ๊ตฌ์„ฑ** | ๊ธ€๋กœ๋ฒŒ, ๊ณต๊ธ‰์ž๋ณ„ ๋˜๋Š” ์—ฐ๊ฒฐ๋ณ„ ์ˆ˜์ค€์—์„œ ํ”„๋ก์‹œ ๊ตฌ์„ฑ |
381
+
382
+ ### ๐Ÿ“Š ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ ๋ฐ ๋ถ„์„
383
+
384
+ | ๊ธฐ๋Šฅ | ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ |
385
+ | ------------------------- | -------------------------------------------------------------------- |
386
+ | ๐Ÿ“ **๋กœ๊น… ์š”์ฒญ** | ์ „์ฒด ์š”์ฒญ/์‘๋‹ต ๋กœ๊ทธ๊ฐ€ ํฌํ•จ๋œ ๋””๋ฒ„๊ทธ ๋ชจ๋“œ |
387
+ | ๐Ÿ’พ **SQLite ํ”„๋ก์‹œ ๋กœ๊ทธ** | ์˜๊ตฌ ํ”„๋ก์‹œ ๋กœ๊ทธ๋Š” ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด๋„ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. |
388
+ | ๐Ÿ“Š **๋ถ„์„ ๋Œ€์‹œ๋ณด๋“œ** | Recharts ๊ธฐ๋ฐ˜: ํ†ต๊ณ„ ์นด๋“œ, ๋ชจ๋ธ ์‚ฌ์šฉ ์ฐจํŠธ, ๊ณต๊ธ‰์ž ํ…Œ์ด๋ธ” |
389
+ | ๐Ÿ“ˆ **์ง„ํ–‰ ์ƒํ™ฉ ์ถ”์ ** | ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์œ„ํ•œ ์˜ตํŠธ์ธ SSE ์ง„ํ–‰ ์ด๋ฒคํŠธ |
390
+ | ๐Ÿงช **LLM ํ‰๊ฐ€** | 4๊ฐ€์ง€ ๋งค์น˜ ์ „๋žต์„ ์‚ฌ์šฉํ•œ ๊ณจ๋“  ์„ธํŠธ ํ…Œ์ŠคํŠธ |
391
+ | ๐Ÿ” **์›๊ฒฉ ์ธก์ • ์š”์ฒญ** | p50/p95/p99 ๋Œ€๊ธฐ ์‹œ๊ฐ„ ์ง‘๊ณ„ + X-์š”์ฒญ-ID ์ถ”์  |
392
+ | ๐Ÿ“‹ **๋กœ๊ทธ ๋Œ€์‹œ๋ณด๋“œ** | ํ†ตํ•ฉ๋œ 4๊ฐœ ํƒญ ํŽ˜์ด์ง€: ์š”์ฒญ ๋กœ๊ทธ, ํ”„๋ก์‹œ ๋กœ๊ทธ, ๊ฐ์‚ฌ ๋กœ๊ทธ, ์ฝ˜์†” |
393
+ | ๐Ÿ–ฅ๏ธ **์ฝ˜์†” ๋กœ๊ทธ ๋ทฐ์–ด** | ๋ ˆ๋ฒจ ํ•„ํ„ฐ, ๊ฒ€์ƒ‰, ์ž๋™ ์Šคํฌ๋กค ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ์‹ค์‹œ๊ฐ„ ํ„ฐ๋ฏธ๋„ ์Šคํƒ€์ผ ๋ทฐ์–ด |
394
+ | ๐Ÿ“‘ **ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋กœ๊น…** | ์ฝ˜์†” ์ธํ„ฐ์…‰ํ„ฐ๋Š” ํšŒ์ „์„ ํ†ตํ•ด ๋ชจ๋“  ์ถœ๋ ฅ์„ JSON ๋กœ๊ทธ ํŒŒ์ผ๋กœ ์บก์ฒ˜ํ•ฉ๋‹ˆ๋‹ค. |
395
+ | ๐Ÿฅ **๊ฑด๊ฐ• ๋Œ€์‹œ๋ณด๋“œ** | ์‹œ์Šคํ…œ ๊ฐ€๋™ ์‹œ๊ฐ„, ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ ์ƒํƒœ, ์ž ๊ธˆ, ์บ์‹œ ํ†ต๊ณ„ |
396
+ | ๐Ÿ’ฐ **๋น„์šฉ ์ถ”์ ** | ์˜ˆ์‚ฐ ๊ด€๋ฆฌ + ๋ชจ๋ธ๋ณ„ ๊ฐ€๊ฒฉ ๊ตฌ์„ฑ |
397
+
398
+ ### โ˜๏ธ ๋ฐฐํฌ ๋ฐ ๋™๊ธฐํ™”
399
+
400
+ | ๊ธฐ๋Šฅ | ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ |
401
+ | ---------------------------------- | ----------------------------------------------------------------- |
402
+ | ๐Ÿ’พ **ํด๋ผ์šฐ๋“œ ๋™๊ธฐํ™”** | Cloudflare Workers๋ฅผ ํ†ตํ•ด ์žฅ์น˜ ๊ฐ„ ๊ตฌ์„ฑ ๋™๊ธฐํ™” |
403
+ | ๐ŸŒ **์–ด๋””์„œ๋‚˜ ๋ฐฐํฌ** | ๋กœ์ปฌํ˜ธ์ŠคํŠธ, VPS, Docker, Cloudflare ์ž‘์—…์ž |
404
+ | ๐Ÿ”‘ **API ํ‚ค ๊ด€๋ฆฌ** | ๊ณต๊ธ‰์ž๋ณ„ API ํ‚ค ์ƒ์„ฑ, ํšŒ์ „ ๋ฐ ๋ฒ”์œ„ ์ง€์ • |
405
+ | ๐Ÿง™ **์˜จ๋ณด๋”ฉ ๋งˆ๋ฒ•์‚ฌ** | ์ฒ˜์Œ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ 4๋‹จ๊ณ„ ์•ˆ๋‚ด ์„ค์ • |
406
+ | ๐Ÿ”ง **CLI ๋„๊ตฌ ๋Œ€์‹œ๋ณด๋“œ** | ์›ํด๋ฆญ ๊ตฌ์„ฑ Claude, Codex, Cline, OpenClaw, Kilo, Antigravity |
407
+ | ๐Ÿ”„ **DB ๋ฐฑ์—…** | ๋ชจ๋“  ์„ค์ •์— ๋Œ€ํ•œ ์ž๋™ ๋ฐฑ์—…, ๋ณต์›, ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฐ ๊ฐ€์ ธ์˜ค๊ธฐ |
408
+ | ๐ŸŒ **๊ตญ์ œํ™”** | next-intl์ด ํฌํ•จ๋œ ์ „์ฒด i18n โ€” ์˜์–ด + ํฌ๋ฅดํˆฌ๊ฐˆ์–ด(๋ธŒ๋ผ์งˆ) ์ง€์› |
409
+ | ๐ŸŒ **์–ธ์–ด ์„ ํƒ๊ธฐ** | ์‹ค์‹œ๊ฐ„ ์–ธ์–ด ์ „ํ™˜์„ ์œ„ํ•œ ํ—ค๋”์˜ ์ง€๊ตฌ๋ณธ ์•„์ด์ฝ˜(๐Ÿ‡บ๐Ÿ‡ธ/๐Ÿ‡ง๐Ÿ‡ท) |
410
+ | ๐Ÿ“‚ **์‚ฌ์šฉ์ž ์ •์˜ ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ** | `DATA_DIR` env var๋Š” ๊ธฐ๋ณธ `~/.omniroute` ์ €์žฅ ๊ฒฝ๋กœ๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค |
411
+
412
+ <details>
413
+ <summary><b>๐Ÿ“– ๊ธฐ๋Šฅ ์„ธ๋ถ€์ •๋ณด</b></summary>
414
+
415
+ ### ๐ŸŽฏ ์Šค๋งˆํŠธ 4๊ณ„์ธต ํด๋ฐฑ
416
+
417
+ ์ž๋™ ๋Œ€์ฒด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝค๋ณด ๋งŒ๋“ค๊ธฐ:
418
+
419
+ ```
420
+ Combo: "my-coding-stack"
421
+ 1. cc/claude-opus-4-6 (your subscription)
422
+ 2. nvidia/llama-3.3-70b (free NVIDIA API)
423
+ 3. glm/glm-4.7 (cheap backup, $0.6/1M)
424
+ 4. if/kimi-k2-thinking (free fallback)
425
+
426
+ โ†’ Auto switches when quota runs out or errors occur
427
+ ```
428
+
429
+ ### ๐Ÿ“Š ์‹ค์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰ ์ถ”์ 
430
+
431
+ - ์ œ๊ณต์ž๋ณ„ ํ† ํฐ ์†Œ๋น„
432
+ - ์นด์šดํŠธ๋‹ค์šด ์žฌ์„ค์ •(5์‹œ๊ฐ„, ๋งค์ผ, ๋งค์ฃผ)
433
+ - ์œ ๋ฃŒ ๊ณ„์ธต์— ๋Œ€ํ•œ ๋น„์šฉ ์ถ”์ •
434
+ - ์›”๋ณ„ ์ง€์ถœ ๋ณด๊ณ ์„œ
435
+
436
+ ### ๐Ÿ”„ ํ˜•์‹ ๋ฒˆ์—ญ
437
+
438
+ ํ˜•์‹ ๊ฐ„ ์›ํ™œํ•œ ๋ฒˆ์—ญ:
439
+
440
+ - **OpenAI** โ† **Claude** โ† **Gemini** โ† **OpenAI ์‘๋‹ต**
441
+ - CLI ๋„๊ตฌ๊ฐ€ OpenAI ํ˜•์‹ ์ „์†ก โ†’ OmniRoute ๋ณ€ํ™˜ โ†’ ๊ณต๊ธ‰์ž๊ฐ€ ๊ธฐ๋ณธ ํ˜•์‹ ์ˆ˜์‹ 
442
+ - ๋งž์ถคํ˜• OpenAI ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์ž‘๋™
443
+ - **์‘๋‹ต ์‚ญ์ œ** โ€” ์—„๊ฒฉํ•œ OpenAI SDK ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๋น„ํ‘œ์ค€ ํ•„๋“œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
444
+ - **์—ญํ•  ์ •๊ทœํ™”** โ€” OpenAI๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ `developer` โ†’ `system`; `system` โ†’ GLM/ERNIE ๋ชจ๋ธ์˜ ๊ฒฝ์šฐ `user`
445
+ - **์‚ฌ๊ณ  ํƒœ๊ทธ ์ถ”์ถœ** โ€” ์‚ฌ๊ณ  ๋ชจ๋ธ์˜ ๊ฒฝ์šฐ `<think>` ๋ธ”๋ก โ†’ `reasoning_content`
446
+ - **๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ** โ€” `json_schema` โ†’ Gemini์˜ `responseMimeType`/`responseSchema`
447
+
448
+ ### ๐Ÿ‘ฅ ๋‹ค์ค‘ ๊ณ„์ • ์ง€์›
449
+
450
+ - ๊ณต๊ธ‰์ž๋‹น ์—ฌ๋Ÿฌ ๊ณ„์ • ์ถ”๊ฐ€
451
+ - ์ž๋™ ๋ผ์šด๋“œ ๋กœ๋นˆ ๋˜๋Š” ์šฐ์„ ์ˆœ์œ„ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…
452
+ - ํ•œ ๊ณ„์ •์ด ํ• ๋‹น๋Ÿ‰์— ๋„๋‹ฌํ•˜๋ฉด ๋‹ค์Œ ๊ณ„์ •์œผ๋กœ ๋Œ€์ฒด
453
+
454
+ ### ๐Ÿ”„ ์ž๋™ ํ† ํฐ ์ƒˆ๋กœ๊ณ ์นจ
455
+
456
+ - OAuth ํ† ํฐ์€ ๋งŒ๋ฃŒ๋˜๊ธฐ ์ „์— ์ž๋™์œผ๋กœ ์ƒˆ๋กœ ๊ณ ์ณ์ง‘๋‹ˆ๋‹ค.
457
+ - ์ˆ˜๋™ ์žฌ์ธ์ฆ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
458
+ - ๋ชจ๋“  ์ œ๊ณต์—…์ฒด์— ๊ฑธ์นœ ์›ํ™œํ•œ ๊ฒฝํ—˜
459
+
460
+ ### ๐ŸŽจ ๋งž์ถค ์ฝค๋ณด
461
+
462
+ - ๋ฌด์ œํ•œ ๋ชจ๋ธ ์กฐํ•ฉ ์ƒ์„ฑ
463
+ - 6๊ฐ€์ง€ ์ „๋žต: ์ฑ„์šฐ๊ธฐ ์šฐ์„ , ๋ผ์šด๋“œ ๋กœ๋นˆ, ๋‘ ๊ฐ€์ง€ ์„ ํƒ์˜ ํž˜, ๋ฌด์ž‘์œ„, ์ตœ์†Œ ์‚ฌ์šฉ, ๋น„์šฉ ์ตœ์ ํ™”
464
+ - Cloud Sync๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๊ธฐ๊ธฐ์—์„œ ์ฝค๋ณด๋ฅผ ๊ณต์œ ํ•˜์„ธ์š”
465
+
466
+ ### ๐Ÿฅ ๊ฑด๊ฐ• ๋Œ€์‹œ๋ณด๋“œ
467
+
468
+ - ์‹œ์Šคํ…œ ์ƒํƒœ(๊ฐ€๋™ ์‹œ๊ฐ„, ๋ฒ„์ „, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰)
469
+ - ๊ณต๊ธ‰์ž๋ณ„ ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ ์ƒํƒœ(Closed/Open/Half-Open)
470
+ - ์†๋„ ์ œํ•œ ์ƒํƒœ ๋ฐ ํ™œ์„ฑ ์ž ๊ธˆ
471
+ - ์„œ๋ช… ์บ์‹œ ํ†ต๊ณ„
472
+ - ๋Œ€๊ธฐ ์‹œ๊ฐ„ ์›๊ฒฉ ์ธก์ •(p50/p95/p99) + ํ”„๋กฌํ”„ํŠธ ์บ์‹œ
473
+ - ํ•œ ๋ฒˆ์˜ ํด๋ฆญ์œผ๋กœ ๊ฑด๊ฐ• ์ƒํƒœ ์žฌ์„ค์ •
474
+
475
+ ### ๐Ÿ”ง ๋ฒˆ์—ญ๊ธฐ ๋†€์ดํ„ฐ
476
+
477
+ OmniRoute์—๋Š” API ๋ฒˆ์—ญ ๋””๋ฒ„๊น…, ํ…Œ์ŠคํŠธ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•œ **4๊ฐ€์ง€ ๋ชจ๋“œ**๋ฅผ ๊ฐ–์ถ˜ ๊ฐ•๋ ฅํ•œ ๋‚ด์žฅ ๋ฒˆ์—ญ๊ธฐ ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
478
+
479
+ | ๋ชจ๋“œ | ์„ค๋ช… |
480
+ | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
481
+ | **๐Ÿ’ป ๋†€์ดํ„ฐ** | ์ง์ ‘ ํ˜•์‹ ๋ณ€ํ™˜ โ€” API ์š”์ฒญ ๋ณธ๋ฌธ์„ ๋ถ™์—ฌ๋„ฃ๊ณ  OmniRoute๊ฐ€ ๊ณต๊ธ‰์ž ํ˜•์‹(OpenAI โ† Claude โ† Gemini โ† Responses API) ๊ฐ„์— ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™˜ํ•˜๋Š”์ง€ ์ฆ‰์‹œ ํ™•์ธํ•˜์„ธ์š”. ์˜ˆ์ œ ํ…œํ”Œ๋ฆฟ๊ณผ ํ˜•์‹ ์ž๋™ ๊ฐ์ง€๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. |
482
+ | **๐Ÿ’ฌ ์ฑ„ํŒ… ํ…Œ์Šคํ„ฐ** | OmniRoute๋ฅผ ํ†ตํ•ด ์‹ค์ œ ์ฑ„ํŒ… ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์ „์ฒด ์™•๋ณต(์ž…๋ ฅ, ๋ฒˆ์—ญ๋œ ์š”์ฒญ, ๊ณต๊ธ‰์ž ์‘๋‹ต, ๋ฒˆ์—ญ๋œ ์‘๋‹ต)์„ ํ™•์ธํ•˜์„ธ์š”. ์ฝค๋ณด ๋ผ์šฐํŒ…์„ ๊ฒ€์ฆํ•˜๋Š” ๋ฐ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. |
483
+ | **๐Ÿงช ํ…Œ์ŠคํŠธ ๋ฒค์น˜** | ๋ฐฐ์น˜ ํ…Œ์ŠคํŠธ ๋ชจ๋“œ โ€” ์„œ๋กœ ๋‹ค๋ฅธ ์ž…๋ ฅ๊ณผ ์˜ˆ์ƒ ์ถœ๋ ฅ์œผ๋กœ ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ •์˜ํ•˜๊ณ , ์ด๋ฅผ ๋ชจ๋‘ ํ•œ ๋ฒˆ์— ์‹คํ–‰ํ•˜๊ณ , ๊ณต๊ธ‰์ž์™€ ๋ชจ๋ธ ๊ฐ„์— ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. |
484
+ | **๐Ÿ“ฑ ๋ผ์ด๋ธŒ ๋ชจ๋‹ˆํ„ฐ** | ์‹ค์‹œ๊ฐ„ ์š”์ฒญ ๋ชจ๋‹ˆํ„ฐ๋ง โ€” OmniRoute๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ๊ฐ์‹œํ•˜๊ณ , ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ํ˜•์‹ ๋ณ€ํ™˜์„ ํ™•์ธํ•˜๊ณ , ๋ฌธ์ œ๋ฅผ ์ฆ‰์‹œ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. |
485
+
486
+ **์•ก์„ธ์Šค:** ๋Œ€์‹œ๋ณด๋“œ โ†’ ๋ฒˆ์—ญ๊ธฐ(์‚ฌ์ด๋“œ๋ฐ”)
487
+
488
+ ### ๐Ÿ’พ ํด๋ผ์šฐ๋“œ ๋™๊ธฐํ™”
489
+
490
+ - ์—ฌ๋Ÿฌ ์žฅ์น˜์—์„œ ๊ณต๊ธ‰์ž, ์ฝค๋ณด ๋ฐ ์„ค์ •์„ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
491
+ - ์ž๋™ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋™๊ธฐํ™”
492
+ - ์•ˆ์ „ํ•œ ์•”ํ˜ธํ™” ์ €์žฅ
493
+
494
+ </details>
495
+
496
+ ---
497
+
498
+ ## ๐Ÿ“– ์„ค์ • ๊ฐ€์ด๋“œ
499
+
500
+ <details>
501
+ <summary><b>๐Ÿ’ณ ๊ตฌ๋… ์ œ๊ณต์—…์ฒด</b></summary>
502
+
503
+ ### ํด๋กœ๋“œ ์ฝ”๋“œ(Pro/Max)
504
+
505
+ ```bash
506
+ Dashboard โ†’ Providers โ†’ Connect Claude Code
507
+ โ†’ OAuth login โ†’ Auto token refresh
508
+ โ†’ 5-hour + weekly quota tracking
509
+
510
+ Models:
511
+ cc/claude-opus-4-6
512
+ cc/claude-sonnet-4-5-20250929
513
+ cc/claude-haiku-4-5-20251001
514
+ ```
515
+
516
+ **ํ”„๋กœ ํŒ:** ๋ณต์žกํ•œ ์ž‘์—…์—๋Š” Opus๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์†๋„๋ฅผ ๋†’์ด๋ ค๋ฉด Sonnet์„ ์‚ฌ์šฉํ•˜์„ธ์š”. OmniRoute๋Š” ๋ชจ๋ธ๋‹น ํ• ๋‹น๋Ÿ‰์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค!
517
+
518
+ ### OpenAI ์ฝ”๋ฑ์Šค(Plus/Pro)
519
+
520
+ ```bash
521
+ Dashboard โ†’ Providers โ†’ Connect Codex
522
+ โ†’ OAuth login (port 1455)
523
+ โ†’ 5-hour + weekly reset
524
+
525
+ Models:
526
+ cx/gpt-5.2-codex
527
+ cx/gpt-5.1-codex-max
528
+ ```
529
+
530
+ ### Gemini CLI(์›” 180,000 ๋ฌด๋ฃŒ!)
531
+
532
+ ```bash
533
+ Dashboard โ†’ Providers โ†’ Connect Gemini CLI
534
+ โ†’ Google OAuth
535
+ โ†’ 180K completions/month + 1K/day
536
+
537
+ Models:
538
+ gc/gemini-3-flash-preview
539
+ gc/gemini-2.5-pro
540
+ ```
541
+
542
+ **์ตœ๊ณ ์˜ ๊ฐ€์น˜:** ์—„์ฒญ๋‚œ ๋ฌด๋ฃŒ ๋“ฑ๊ธ‰! ์œ ๋ฃŒ ๋“ฑ๊ธ‰ ์ด์ „์— ์‚ฌ์šฉํ•˜์„ธ์š”.
543
+
544
+ ### GitHub ์ฝ”ํŒŒ์ผ๋Ÿฟ
545
+
546
+ ```bash
547
+ Dashboard โ†’ Providers โ†’ Connect GitHub
548
+ โ†’ OAuth via GitHub
549
+ โ†’ Monthly reset (1st of month)
550
+
551
+ Models:
552
+ gh/gpt-5
553
+ gh/claude-4.5-sonnet
554
+ gh/gemini-3-pro
555
+ ```
556
+
557
+ </details>
558
+
559
+ <details>
560
+ <summary><b>๐Ÿ”‘ API ํ‚ค ์ œ๊ณต์ž</b></summary>
561
+
562
+ ### NVIDIA NIM(๋ฌด๋ฃŒ 1000 ํฌ๋ ˆ๋”ง!)
563
+
564
+ 1. ๊ฐ€์ž…: [build.nvidia.com](https://build.nvidia.com)
565
+ 2. ๋ฌด๋ฃŒ API ํ‚ค ๋ฐ›๊ธฐ(1000 ์ถ”๋ก  ํฌ๋ ˆ๋”ง ํฌํ•จ)
566
+ 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ ๊ณต๊ธ‰์ž ์ถ”๊ฐ€ โ†’ NVIDIA NIM:
567
+ - API ํ‚ค: `nvapi-your-key`
568
+
569
+ **๋ชจ๋ธ:** `nvidia/llama-3.3-70b-instruct`, `nvidia/mistral-7b-instruct` ์™ธ 50๊ฐœ ์ด์ƒ
570
+
571
+ **ํ”„๋กœ ํŒ:** OpenAI ํ˜ธํ™˜ API โ€” OmniRoute์˜ ํ˜•์‹ ๋ณ€ํ™˜๊ณผ ์›ํ™œํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!
572
+
573
+ ### ๋”ฅ์‹œํฌ
574
+
575
+ 1. ๊ฐ€์ž…: [platform.deepseek.com](https://platform.deepseek.com)
576
+ 2. API ํ‚ค ๋ฐ›๊ธฐ
577
+ 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ ๊ณต๊ธ‰์ž ์ถ”๊ฐ€ โ†’ DeepSeek
578
+
579
+ **๋ชจ๋ธ:** `deepseek/deepseek-chat`, `deepseek/deepseek-coder`
580
+
581
+ ### Groq(๋ฌด๋ฃŒ ๋“ฑ๊ธ‰ ์‚ฌ์šฉ ๊ฐ€๋Šฅ!)
582
+
583
+ 1. ๊ฐ€์ž…: [console.groq.com](https://console.groq.com)
584
+ 2. API ํ‚ค ๋ฐ›๊ธฐ(๋ฌด๋ฃŒ ๋“ฑ๊ธ‰ ํฌํ•จ)
585
+ 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ ๊ณต๊ธ‰์ž ์ถ”๊ฐ€ โ†’ Groq
586
+
587
+ **๋ชจ๋ธ:** `groq/llama-3.3-70b`, `groq/mixtral-8x7b`
588
+
589
+ **ํ”„๋กœ ํŒ:** ์ดˆ๊ณ ์† ์ถ”๋ก  โ€” ์‹ค์‹œ๊ฐ„ ์ฝ”๋”ฉ์— ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค!
590
+
591
+ ### OpenRouter(100๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ)
592
+
593
+ 1. ๊ฐ€์ž…: [openrouter.ai](https://openrouter.ai)
594
+ 2. API ํ‚ค ๋ฐ›๊ธฐ
595
+ 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ ๊ณต๊ธ‰์ž ์ถ”๊ฐ€ โ†’ OpenRouter
596
+
597
+ **๋ชจ๋ธ:** ๋‹จ์ผ API ํ‚ค๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ์ฃผ์š” ์ œ๊ณต์—…์ฒด์˜ 100๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
598
+
599
+ </details>
600
+
601
+ <details>
602
+ <summary><b>๐Ÿ’ฐ ์ €๋ ดํ•œ ๊ณต๊ธ‰์ž(๋ฐฑ์—…)</b></summary>
603
+
604
+ ### GLM-4.7 (์ผ์ผ ์žฌ์„ค์ •, $0.6/1M)
605
+
606
+ 1. ๊ฐ€์ž…: [Zhipu AI](https://open.bigmodel.cn/)
607
+ 2. Coding Plan์—์„œ API Key ๋ฐ›๊ธฐ
608
+ 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ API ํ‚ค ์ถ”๊ฐ€:
609
+ - ์ œ๊ณต์ž: `glm`
610
+ - API ํ‚ค: `your-key`
611
+
612
+ **์‚ฌ์šฉ:** `glm/glm-4.7`
613
+
614
+ **ํ”„๋กœ ํŒ:** ์ฝ”๋”ฉ ๊ณ„ํš์€ 1/7 ๋น„์šฉ์œผ๋กœ 3๋ฐฐ ํ• ๋‹น๋Ÿ‰์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค! ๋งค์ผ ์˜ค์ „ 10์‹œ์— ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.
615
+
616
+ ### MiniMax M2.1(5์‹œ๊ฐ„ ์žฌ์„ค์ •, $0.20/1M)
617
+
618
+ 1. ๊ฐ€์ž…: [MiniMax](https://www.minimax.io/)
619
+ 2. API ํ‚ค ๋ฐ›๊ธฐ
620
+ 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ API Key ์ถ”๊ฐ€
621
+
622
+ **์‚ฌ์šฉ:** `minimax/MiniMax-M2.1`
623
+
624
+ **ํ”„๋กœ ํŒ:** ๊ธด ์ปจํ…์ŠคํŠธ(100๋งŒ ํ† ํฐ)๋ฅผ ์œ„ํ•œ ๊ฐ€์žฅ ์ €๋ ดํ•œ ์˜ต์…˜์ž…๋‹ˆ๋‹ค!
625
+
626
+ ### Kimi K2($9/์›” ์ •์•ก)
627
+
628
+ 1. ๊ตฌ๋…: [Moonshot AI](https://platform.moonshot.ai/)
629
+ 2. API ํ‚ค ๋ฐ›๊ธฐ
630
+ 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ API Key ์ถ”๊ฐ€
631
+
632
+ **์‚ฌ์šฉ:** `kimi/kimi-latest`
633
+
634
+ **ํ”„๋กœ ํŒ:** 1,000๋งŒ ํ† ํฐ์— ๋Œ€ํ•ด ๊ณ ์ • $9/์›” = $0.90/1M ์œ ํšจ ๋น„์šฉ!
635
+
636
+ </details>
637
+
638
+ <details>
639
+ <summary><b>๐Ÿ†“ ๋ฌด๋ฃŒ ์ œ๊ณต์—…์ฒด(๊ธด๊ธ‰ ๋ฐฑ์—…)</b></summary>
640
+
641
+ ### iFlow(8๊ฐœ ๋ฌด๋ฃŒ ๋ชจ๋ธ)
642
+
643
+ ```bash
644
+ Dashboard โ†’ Connect iFlow
645
+ โ†’ iFlow OAuth login
646
+ โ†’ Unlimited usage
647
+
648
+ Models:
649
+ if/kimi-k2-thinking
650
+ if/qwen3-coder-plus
651
+ if/glm-4.7
652
+ if/minimax-m2
653
+ if/deepseek-r1
654
+ ```
655
+
656
+ ### Qwen(3๊ฐœ ๋ฌด๋ฃŒ ๋ชจ๋ธ)
657
+
658
+ ```bash
659
+ Dashboard โ†’ Connect Qwen
660
+ โ†’ Device code authorization
661
+ โ†’ Unlimited usage
662
+
663
+ Models:
664
+ qw/qwen3-coder-plus
665
+ qw/qwen3-coder-flash
666
+ ```
667
+
668
+ ### ํ‚ค๋กœ(ํด๋กœ๋“œ ํ”„๋ฆฌ)
669
+
670
+ ```bash
671
+ Dashboard โ†’ Connect Kiro
672
+ โ†’ AWS Builder ID or Google/GitHub
673
+ โ†’ Unlimited usage
674
+
675
+ Models:
676
+ kr/claude-sonnet-4.5
677
+ kr/claude-haiku-4.5
678
+ ```
679
+
680
+ </details>
681
+
682
+ <details>
683
+ <summary><b>๐ŸŽจ ์ฝค๋ณด ๋งŒ๋“ค๊ธฐ</b></summary>
684
+
685
+ ### ์˜ˆ์‹œ 1: ๊ตฌ๋… ์ตœ๋Œ€ํ™” โ†’ ์ €๋ ดํ•œ ๋ฐฑ์—…
686
+
687
+ ```
688
+ Dashboard โ†’ Combos โ†’ Create New
689
+
690
+ Name: premium-coding
691
+ Models:
692
+ 1. cc/claude-opus-4-6 (Subscription primary)
693
+ 2. glm/glm-4.7 (Cheap backup, $0.6/1M)
694
+ 3. minimax/MiniMax-M2.1 (Cheapest fallback, $0.20/1M)
695
+
696
+ Use in CLI: premium-coding
697
+ ```
698
+
699
+ ### ์˜ˆ์‹œ 2: ๋ฌด๋ฃŒ ์ „์šฉ(๋น„์šฉ ์—†์Œ)
700
+
701
+ ```
702
+ Name: free-combo
703
+ Models:
704
+ 1. gc/gemini-3-flash-preview (180K free/month)
705
+ 2. if/kimi-k2-thinking (unlimited)
706
+ 3. qw/qwen3-coder-plus (unlimited)
707
+
708
+ Cost: $0 forever!
709
+ ```
710
+
711
+ </details>
712
+
713
+ <details>
714
+ <summary><b>๐Ÿ”ง CLI ํ†ตํ•ฉ</b></summary>
715
+
716
+ ### ์ปค์„œ IDE
717
+
718
+ ```
719
+ Settings โ†’ Models โ†’ Advanced:
720
+ OpenAI API Base URL: http://localhost:20128/v1
721
+ OpenAI API Key: [from OmniRoute dashboard]
722
+ Model: cc/claude-opus-4-6
723
+ ```
724
+
725
+ ### ํด๋กœ๋“œ ์ฝ”๋“œ
726
+
727
+ ์›ํด๋ฆญ ๊ตฌ์„ฑ์„ ์œ„ํ•ด ๋Œ€์‹œ๋ณด๋“œ์˜ **CLI ๋„๊ตฌ** ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ `~/.claude/settings.json`์„ ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ํ•˜์„ธ์š”.
728
+
729
+ ### ์ฝ”๋ฑ์Šค CLI
730
+
731
+ ```bash
732
+ export OPENAI_BASE_URL="http://localhost:20128"
733
+ export OPENAI_API_KEY="your-omniroute-api-key"
734
+
735
+ codex "your prompt"
736
+ ```
737
+
738
+ ### ์˜คํ”ˆํด๋กœ
739
+
740
+ **์˜ต์…˜ 1 - ๋Œ€์‹œ๋ณด๋“œ(๊ถŒ์žฅ):**
741
+
742
+ ```
743
+ Dashboard โ†’ CLI Tools โ†’ OpenClaw โ†’ Select Model โ†’ Apply
744
+ ```
745
+
746
+ **์˜ต์…˜ 2 โ€” ์ˆ˜๋™:** `~/.openclaw/openclaw.json` ํŽธ์ง‘:
747
+
748
+ ```json
749
+ {
750
+ "models": {
751
+ "providers": {
752
+ "omniroute": {
753
+ "baseUrl": "http://127.0.0.1:20128/v1",
754
+ "apiKey": "sk_omniroute",
755
+ "api": "openai-completions"
756
+ }
757
+ }
758
+ }
759
+ }
760
+ ```
761
+
762
+ > **์ฐธ๊ณ :** OpenClaw๋Š” ๋กœ์ปฌ OmniRoute์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. IPv6 ํ™•์ธ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด `localhost` ๋Œ€์‹  `127.0.0.1`์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
763
+
764
+ ### ํด๋ผ์ธ / ๊ณ„์† / RooCode
765
+
766
+ ```
767
+ Settings โ†’ API Configuration:
768
+ Provider: OpenAI Compatible
769
+ Base URL: http://localhost:20128/v1
770
+ API Key: [from OmniRoute dashboard]
771
+ Model: if/kimi-k2-thinking
772
+ ```
773
+
774
+ </details>
775
+
776
+ ---
777
+
778
+ ## ๐Ÿ“Š ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋ธ
779
+
780
+ <details>
781
+ <summary><b>์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ชจ๋ธ ๋ณด๊ธฐ</b></summary>
782
+
783
+ **Claude ์ฝ”๋“œ(`cc/`)** - Pro/Max:
784
+
785
+ - `cc/claude-opus-4-6`
786
+ - `cc/claude-sonnet-4-5-20250929`
787
+ - `cc/claude-haiku-4-5-20251001`
788
+
789
+ **์ฝ”๋ฑ์Šค(`cx/`)** - ํ”Œ๋Ÿฌ์Šค/ํ”„๋กœ:
790
+
791
+ - `cx/gpt-5.2-codex`
792
+ - `cx/gpt-5.1-codex-max`
793
+
794
+ **Gemini CLI(`gc/`)** - ๋ฌด๋ฃŒ:
795
+
796
+ - `gc/gemini-3-flash-preview`
797
+ - `gc/gemini-2.5-pro`
798
+
799
+ **GitHub ๋ถ€์กฐ์ข…์‚ฌ(`gh/`)**:
800
+
801
+ - `gh/gpt-5`
802
+ - `gh/claude-4.5-sonnet`
803
+
804
+ **NVIDIA NIM(`nvidia/`)** - ๋ฌด๋ฃŒ ํฌ๋ ˆ๋”ง:
805
+
806
+ - `nvidia/llama-3.3-70b-instruct`
807
+ - `nvidia/mistral-7b-instruct`
808
+ - [build.nvidia.com](https://build.nvidia.com)์˜ 50๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ
809
+
810
+ **GLM(`glm/`)** - $0.6/1M:
811
+
812
+ - `glm/glm-4.7`
813
+
814
+ **MiniMax(`minimax/`)** - $0.2/1M:
815
+
816
+ - `minimax/MiniMax-M2.1`
817
+
818
+ **iFlow(`if/`)** - ๋ฌด๋ฃŒ:
819
+
820
+ - `if/kimi-k2-thinking`
821
+ - `if/qwen3-coder-plus`
822
+ - `if/deepseek-r1`
823
+ - `if/glm-4.7`
824
+ - `if/minimax-m2`
825
+
826
+ **Qwen(`qw/`)** - ๋ฌด๋ฃŒ:
827
+
828
+ - `qw/qwen3-coder-plus`
829
+ - `qw/qwen3-coder-flash`
830
+
831
+ **ํ‚ค๋กœ(`kr/`)** - ๋ฌด๋ฃŒ:
832
+
833
+ - `kr/claude-sonnet-4.5`
834
+ - `kr/claude-haiku-4.5`
835
+
836
+ **OpenRouter(`or/`)** - 100๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ:
837
+
838
+ - `or/anthropic/claude-4-sonnet`
839
+ - `or/google/gemini-2.5-pro`
840
+ - [openrouter.ai/models](https://openrouter.ai/models)์˜ ๋ชจ๋“  ๋ชจ๋ธ
841
+
842
+ </details>
843
+
844
+ ---
845
+
846
+ ## ๐Ÿงช ํ‰๊ฐ€(Evals)
847
+
848
+ OmniRoute์—๋Š” ๊ณจ๋“  ์„ธํŠธ์— ๋Œ€ํ•ด LLM ์‘๋‹ต ํ’ˆ์งˆ์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•œ ๋‚ด์žฅ ํ‰๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹œ๋ณด๋“œ์˜ **๋ถ„์„ โ†’ ํ‰๊ฐ€**๋ฅผ ํ†ตํ•ด ์•ก์„ธ์Šคํ•˜์„ธ์š”.
849
+
850
+ ### ๋‚ด์žฅ ๊ณจ๋“  ์„ธํŠธ
851
+
852
+ ์‚ฌ์ „ ๋กœ๋“œ๋œ "OmniRoute Golden Set"์—๋Š” ๋‹ค์Œ์„ ๋‹ค๋ฃจ๋Š” 10๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
853
+
854
+ - ์ธ์‚ฌ๋ง, ์ˆ˜ํ•™, ์ง€๋ฆฌ, ์ฝ”๋“œ ์ƒ์„ฑ
855
+ - JSON ํ˜•์‹ ์ค€์ˆ˜, ๋ฒˆ์—ญ, ๋งˆํฌ๋‹ค์šด
856
+ - ์•ˆ์ „ ๊ฑฐ๋ถ€(์œ ํ•ด ์ฝ˜ํ…์ธ ), ์นด์šดํŒ…, ๋ถ€์šธ ๋…ผ๋ฆฌ
857
+
858
+ ### ํ‰๊ฐ€ ์ „๋žต
859
+
860
+ | ์ „๋žต | ์„ค๋ช… | ์˜ˆ |
861
+ | ---------- | -------------------------------------------------------------- | -------------------------------- |
862
+ | `exact` | ์ถœ๋ ฅ์€ ์ •ํ™•ํžˆ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค | `"4"` |
863
+ | `contains` | ์ถœ๋ ฅ์—๋Š” ํ•˜์œ„ ๋ฌธ์ž์—ด(๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์•ˆ ํ•จ)์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. | `"Paris"` |
864
+ | `regex` | ์ถœ๋ ฅ์€ ์ •๊ทœ์‹ ํŒจํ„ด๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค | `"1.*2.*3"` |
865
+ | `custom` | ์‚ฌ์šฉ์ž ์ •์˜ JS ํ•จ์ˆ˜๊ฐ€ true/false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. | `(output) => output.length > 10` |
866
+
867
+ ---
868
+
869
+ ## ๐Ÿ” OAuth em Servidor Remoto(์›๊ฒฉ OAuth ์„ค์ •)
870
+
871
+ <a name="oauth-em-servidor-remoto"></a>
872
+
873
+ > **โš ๏ธ VPS/Docker/remotor์˜ OmniRoute๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ค‘์š”**
874
+
875
+ ### OAuth์—์„œ Antigravity/Gemini CLI๋ฅผ ์›๊ฒฉ ์„œ๋น„์Šค๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?
876
+
877
+ Os๋Š” **๋ฐ˜์ค‘๋ ฅ** ๋ฐ **Gemini CLI**๋ฅผ ์ธ์ฆํ•˜๊ธฐ ์œ„ํ•ด **Google OAuth 2.0**์„ ์ž…์ฆํ–ˆ์Šต๋‹ˆ๋‹ค. O Google exige que a `redirect_uri` usada no fluxo OAuth seja **exatamente** uma das URIs pre-cadastradas no Google Cloud Console do aplicativo.
878
+
879
+ OAuth๋Š” OmniRoute์— ๋Œ€ํ•œ ์‹ ์šฉ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ **`localhost`**์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. Quando vocรช acessa o OmniRoute em um servidor remoto (์˜ˆ: `https://omniroute.meuservidor.com`), o Google rejeita autenticaรงรฃo com:
880
+
881
+ ```
882
+ Error 400: redirect_uri_mismatch
883
+ ```
884
+
885
+ ### ํ•ด๊ฒฐ์ฑ…: ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ OAuth ๊ตฌ์„ฑ
886
+
887
+ Vocรช precisa criar um **OAuth 2.0 Client ID** no Google Cloud Console com a URI do seu servidor.
888
+
889
+ #### ํŒŒ์˜ ์•„ ํŒŒ์†Œ
890
+
891
+ **1. Google Cloud Console์— ์•ก์„ธ์Šค**
892
+
893
+ ์•„๋ธŒ๋ผ: [https://console.cloud.google.com/apis/credentials](https://console.cloud.google.com/apis/credentials)
894
+
895
+ **2. Crie um novo OAuth 2.0 ํด๋ผ์ด์–ธํŠธ ID**
896
+
897
+ - em ํด๋ฆญ **"+ ์ž๊ฒฉ ์ฆ๋ช… ๋งŒ๋“ค๊ธฐ"** โ†’ **"OAuth ํด๋ผ์ด์–ธํŠธ ID"**
898
+ - ์ ์šฉ ๋ถ„์•ผ: **"์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜"**
899
+ - ์ด๋ฆ„: escolha qualquer nome (์˜ˆ: `OmniRoute Remote`)
900
+
901
+ **3. ์Šน์ธ๋œ ๋ฆฌ๋””๋ ‰์…˜ URI๋กœ์„œ์˜ Adicione**
902
+
903
+ ์•„๋‹ˆ์š” **"์Šน์ธ๋œ ๋ฆฌ๋””๋ ‰์…˜ URI"**, ์ถ”๊ฐ€:
904
+
905
+ ```
906
+ https://seu-servidor.com/callback
907
+ ```
908
+
909
+ > `seu-servidor.com` pelo domรญnio ๋˜๋Š” IP do seu servidor๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค(ํ•„์š”ํ•œ ํฌํŠธ ํฌํ•จ, ์˜ˆ: `http://45.33.32.156:20128/callback`).
910
+
911
+ **4. ์‚ฌ๋ณธ์„ ์ž๊ฒฉ ์ฆ๋ช…์œผ๋กœ ์ €์žฅ**
912
+
913
+ Apรณs criar, o Google morerรก o **ํด๋ผ์ด์–ธํŠธ ID** e o **ํด๋ผ์ด์–ธํŠธ ๋น„๋ฐ€๋ฒˆํ˜ธ**.
914
+
915
+ **5. ๋‹ค์–‘ํ•œ ์ฃผ๋ณ€ ํ™˜๊ฒฝ์œผ๋กœ ๊ตฌ์„ฑ**
916
+
917
+ `.env`(Docker์˜ ์ฃผ๋ณ€ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„)์ด ์—†์Šต๋‹ˆ๋‹ค.
918
+
919
+ ```bash
920
+ # Para Antigravity:
921
+ ANTIGRAVITY_OAUTH_CLIENT_ID=seu-client-id.apps.googleusercontent.com
922
+ ANTIGRAVITY_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
923
+
924
+ # Para Gemini CLI:
925
+ GEMINI_OAUTH_CLIENT_ID=seu-client-id.apps.googleusercontent.com
926
+ GEMINI_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
927
+ GEMINI_CLI_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
928
+ ```
929
+
930
+ **6. Reinicie ๋˜๋Š” OmniRoute**
931
+
932
+ ```bash
933
+ # Se usando npm:
934
+ npm run dev
935
+
936
+ # Se usando Docker:
937
+ docker restart omniroute
938
+ ```
939
+
940
+ **7. Tente conectar novamente**
941
+
942
+ ๋Œ€์‹œ๋ณด๋“œ โ†’ ๊ณต๊ธ‰์ž โ†’ Antigravity(๋˜๋Š” Gemini CLI) โ†’ OAuth
943
+
944
+ Agora๋Š” `https://seu-servidor.com/callback` ๋ฐ ์ž๋™ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ Google ๋ฆฌ๋””๋ ‰์…˜์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
945
+
946
+ ---
947
+
948
+ ### ์ž„์‹œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•(sem configurar credenciais prรณprias)
949
+
950
+ Se nรฃo quiser criar credenciais prรณprias agora, ainda รฉ possรญvel usar o fluxo **manual de URL**:
951
+
952
+ 1. OmniRoute๋Š” Google ์ž๋™ ์ƒ์„ฑ URL์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
953
+ 2. Apรณs vocรช autorizar, o Google tentarรก redirectionar para `localhost` (que falha no servidor remoto)
954
+ 3. **URL ๋ณต์‚ฌ ์™„๋ฃŒ** da barra de endereรงo do seu browser (mesmo que a pรกgina nรฃo carregue)
955
+ 4. Cole essa URL no campo que aparece no modal de conexรฃo do OmniRoute
956
+ 5. Clique em **"์—ฐ๊ฒฐ"**
957
+
958
+ > ์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ URL์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
959
+
960
+ ---
961
+
962
+ ## ๐Ÿ› ๋ฌธ์ œ ํ•ด๊ฒฐ
963
+
964
+ <details>
965
+ <summary><b>๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€์ด๋“œ๋ฅผ ํ™•์žฅํ•˜๋ ค๋ฉด ํด๋ฆญํ•˜์„ธ์š”</b></summary>
966
+
967
+ **"์–ธ์–ด ๋ชจ๋ธ์ด ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค"**
968
+
969
+ - ๊ณต๊ธ‰์ž ํ• ๋‹น๋Ÿ‰ ์†Œ์ง„ โ†’ ๋Œ€์‹œ๋ณด๋“œ ํ• ๋‹น๋Ÿ‰ ์ถ”์ ๊ธฐ ํ™•์ธ
970
+ - ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ์ฝค๋ณด ํด๋ฐฑ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋” ์ €๋ ดํ•œ ๊ณ„์ธต์œผ๋กœ ์ „ํ™˜ํ•˜์„ธ์š”.
971
+
972
+ **๋น„์œจ ์ œํ•œ**
973
+
974
+ - ๊ตฌ๋… ํ• ๋‹น๋Ÿ‰ ์ดˆ๊ณผ โ†’ GLM/MiniMax๋กœ ๋Œ€์ฒด
975
+ - ์ฝค๋ณด ์ถ”๊ฐ€: `cc/claude-opus-4-6 โ†’ glm/glm-4.7 โ†’ if/kimi-k2-thinking`
976
+
977
+ **OAuth ํ† ํฐ์ด ๋งŒ๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค**
978
+
979
+ - OmniRoute์— ์˜ํ•ด ์ž๋™ ์ƒˆ๋กœ๊ณ ์นจ
980
+ - ๋ฌธ์ œ๊ฐ€ ์ง€์†๋˜๋Š” ๊ฒฝ์šฐ: Dashboard โ†’ Provider โ†’ Reconnect
981
+
982
+ **๋†’์€ ๋น„์šฉ**
983
+
984
+ - ๋Œ€์‹œ๋ณด๋“œ โ†’ ๋น„์šฉ์—์„œ ์‚ฌ์šฉ ํ†ต๊ณ„๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
985
+ - ๊ธฐ๋ณธ ๋ชจ๋ธ์„ GLM/MiniMax๋กœ ์ „ํ™˜
986
+ - ์ค‘์š”ํ•˜์ง€ ์•Š์€ ์ž‘์—…์—๋Š” ๋ฌด๋ฃŒ ๊ณ„์ธต(Gemini CLI, iFlow)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
987
+
988
+ **๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ์ž˜๋ชป๋œ ํฌํŠธ์—์„œ ์—ด๋ฆฝ๋‹ˆ๋‹ค**
989
+
990
+ - `PORT=20128` ๋ฐ `NEXT_PUBLIC_BASE_URL=http://localhost:20128` ์„ค์ •
991
+
992
+ **ํด๋ผ์šฐ๋“œ ๋™๊ธฐํ™” ์˜ค๋ฅ˜**
993
+
994
+ - `BASE_URL`์ด ์‹คํ–‰ ์ค‘์ธ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
995
+ - `CLOUD_URL`์ด ์˜ˆ์ƒ ํด๋ผ์šฐ๋“œ ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.
996
+ - `NEXT_PUBLIC_*` ๊ฐ’์„ ์„œ๋ฒ„์ธก ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋„๋ก ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
997
+
998
+ **์ฒซ ๋ฒˆ์งธ ๋กœ๊ทธ์ธ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค**
999
+
1000
+ - `.env`์—์„œ `INITIAL_PASSWORD`์„ ํ™•์ธํ•˜์„ธ์š”.
1001
+ - ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋Œ€์ฒด ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” `123456`์ž…๋‹ˆ๋‹ค.
1002
+
1003
+ **์š”์ฒญ ๋กœ๊ทธ ์—†์Œ**
1004
+
1005
+ - `.env`์— `ENABLE_REQUEST_LOGS=true`์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
1006
+
1007
+ **OpenAI ํ˜ธํ™˜ ๊ณต๊ธ‰์ž์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ์—์„œ "์ž˜๋ชป๋จ"์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค**
1008
+
1009
+ - ๋งŽ์€ ๊ณต๊ธ‰์ž๊ฐ€ `/models` ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
1010
+ - OmniRoute v1.0.6+์—๋Š” ์ฑ„ํŒ… ์™„๋ฃŒ๋ฅผ ํ†ตํ•œ ๋Œ€์ฒด ๊ฒ€์ฆ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
1011
+ - ๊ธฐ๋ณธ URL์— `/v1` ์ ‘๋ฏธ์‚ฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.
1012
+
1013
+ </details>
1014
+
1015
+ ---
1016
+
1017
+ ## ๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ
1018
+
1019
+ - **๋Ÿฐํƒ€์ž„**: Node.js 18โ€“22 LTS(โš ๏ธ Node.js 24+๋Š” **์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค** โ€” `better-sqlite3` ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค)
1020
+ - **์–ธ์–ด**: TypeScript 5.9 โ€” `src/` ๋ฐ `open-sse/`์—์„œ **100% TypeScript**(v1.0.6)
1021
+ - **ํ”„๋ ˆ์ž„์›Œํฌ**: Next.js 16 + React 19 + Tailwind CSS 4
1022
+ - **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค**: LowDB(JSON) + SQLite(๋„๋ฉ”์ธ ์ƒํƒœ + ํ”„๋ก์‹œ ๋กœ๊ทธ)
1023
+ - **์ŠคํŠธ๋ฆฌ๋ฐ**: ์„œ๋ฒ„์—์„œ ๋ณด๋‚ธ ์ด๋ฒคํŠธ(SSE)
1024
+ - **์ธ์ฆ**: OAuth 2.0(PKCE) + JWT + API ํ‚ค
1025
+ - **ํ…Œ์ŠคํŠธ**: Node.js ํ…Œ์ŠคํŠธ ์‹คํ–‰๊ธฐ(368๊ฐœ ์ด์ƒ์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ)
1026
+ - **CI/CD**: GitHub Actions(์ž๋™ npm ๊ฒŒ์‹œ + ์ถœ์‹œ ์‹œ Docker Hub)
1027
+ - **์›น์‚ฌ์ดํŠธ**: [omniroute.online](https://omniroute.online)
1028
+ - **ํŒจํ‚ค์ง€**: [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute)
1029
+ - **๋„์ปค**: [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute)
1030
+ - **๋ณต์›๋ ฅ**: ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ, ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„, ์ฒœ๋‘ฅ ๋ฐฉ์ง€ ๋ฌด๋ฆฌ, TLS ์Šคํ‘ธํ•‘
1031
+
1032
+ ---
1033
+
1034
+ ## ๐Ÿ“– ๋ฌธ์„œ
1035
+
1036
+ | ๋ฌธ์„œ | ์„ค๋ช… |
1037
+ | -------------------------------------------- | ------------------------------------------ |
1038
+ | [User Guide](docs/USER_GUIDE.md) | ๊ณต๊ธ‰์ž, ์ฝค๋ณด, CLI ํ†ตํ•ฉ, ๋ฐฐํฌ |
1039
+ | [API Reference](docs/API_REFERENCE.md) | ์˜ˆ์ œ๊ฐ€ ํฌํ•จ๋œ ๋ชจ๋“  ์—”๋“œํฌ์ธํŠธ |
1040
+ | [Troubleshooting](docs/TROUBLESHOOTING.md) | ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ ๋ฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• |
1041
+ | [Architecture](docs/ARCHITECTURE.md) | ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ๋‚ด๋ถ€ |
1042
+ | [Contributing](CONTRIBUTING.md) | ๊ฐœ๋ฐœ ์„ค์ • ๋ฐ ์ง€์นจ |
1043
+ | [OpenAPI Spec](docs/openapi.yaml) | OpenAPI 3.0 ์‚ฌ์–‘ |
1044
+ | [Security Policy](SECURITY.md) | ์ทจ์•ฝ์  ๋ณด๊ณ  ๋ฐ ๋ณด์•ˆ ๊ด€ํ–‰ |
1045
+ | [VM Deployment](docs/VM_DEPLOYMENT_GUIDE.md) | ์ „์ฒด ๊ฐ€์ด๋“œ: VM + nginx + Cloudflare ์„ค์ • |
1046
+ | [Features Gallery](docs/FEATURES.md) | ์Šคํฌ๋ฆฐ์ƒท์„ ํฌํ•จํ•œ ์‹œ๊ฐ์  ๋Œ€์‹œ๋ณด๋“œ ๋‘˜๋Ÿฌ๋ณด๊ธฐ |
1047
+
1048
+ ### ๐Ÿ“ธ ๋Œ€์‹œ๋ณด๋“œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
1049
+
1050
+ <details>
1051
+ <summary><b>๋Œ€์‹œ๋ณด๋“œ ์Šคํฌ๋ฆฐ์ƒท์„ ๋ณด๋ ค๋ฉด ํด๋ฆญํ•˜์„ธ์š”.</b></summary>
1052
+
1053
+ | ํŽ˜์ด์ง€ | ์Šคํฌ๋ฆฐ์ƒท |
1054
+ | -------------- | ------------------------------------------------- |
1055
+ | **๊ณต๊ธ‰์ž** | ![Providers](docs/screenshots/01-providers.png) |
1056
+ | **์ฝค๋ณด** | ![Combos](docs/screenshots/02-combos.png) |
1057
+ | **๋ถ„์„** | ![Analytics](docs/screenshots/03-analytics.png) |
1058
+ | **๊ฑด๊ฐ•** | ![Health](docs/screenshots/04-health.png) |
1059
+ | **๋ฒˆ์—ญ๊ฐ€** | ![Translator](docs/screenshots/05-translator.png) |
1060
+ | **์„ค์ •** | ![Settings](docs/screenshots/06-settings.png) |
1061
+ | **CLI ๋„๊ตฌ** | ![CLI Tools](docs/screenshots/07-cli-tools.png) |
1062
+ | **์‚ฌ์šฉ ๋กœ๊ทธ** | ![Usage](docs/screenshots/08-usage.png) |
1063
+ | **์—”๋“œํฌ์ธํŠธ** | ![Endpoint](docs/screenshots/09-endpoint.png) |
1064
+
1065
+ </details>
1066
+
1067
+ ---
1068
+
1069
+ ## ๐Ÿ—บ๏ธ ๋กœ๋“œ๋งต
1070
+
1071
+ OmniRoute์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์— ๊ฑธ์ณ **210๊ฐœ ์ด์ƒ์˜ ๊ธฐ๋Šฅ์ด ๊ณ„ํš๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค**. ์ฃผ์š” ์˜์—ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
1072
+
1073
+ | ์นดํ…Œ๊ณ ๋ฆฌ | ๊ณ„ํš๋œ ๊ธฐ๋Šฅ | ํ•˜์ด๋ผ์ดํŠธ |
1074
+ | --------------------------- | ----------- | ------------------------------------------------------------------------------ |
1075
+ | ๐Ÿง  **๋ผ์šฐํŒ… ๋ฐ ์ธํ…”๋ฆฌ์ „์Šค** | 25์„ธ ์ด์ƒ | ์ตœ์ € ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋ผ์šฐํŒ…, ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…, ์‹คํ–‰ ์ „ ํ• ๋‹น๋Ÿ‰, P2C ๊ณ„์ • ์„ ํƒ |
1076
+ | ๐Ÿ”’ **๋ณด์•ˆ ๋ฐ ๊ทœ์ • ์ค€์ˆ˜** | 20์„ธ ์ด์ƒ | SSRF ๊ฐ•ํ™”, ์ž๊ฒฉ ์ฆ๋ช… ํด๋กœํ‚น, ์—”๋“œํฌ์ธํŠธ๋‹น ์†๋„ ์ œํ•œ, ๊ด€๋ฆฌ ํ‚ค ๋ฒ”์œ„ ์ง€์ • |
1077
+ | ๐Ÿ“Š **๊ด€์ธก์„ฑ** | 15์„ธ ์ด์ƒ | OpenTelemetry ํ†ตํ•ฉ, ์‹ค์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง, ๋ชจ๋ธ๋ณ„ ๋น„์šฉ ์ถ”์  |
1078
+ | ๐Ÿ”„ **๊ณต๊ธ‰์ž ํ†ตํ•ฉ** | 20์„ธ ์ด์ƒ | ๋™์  ๋ชจ๋ธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ, ๊ณต๊ธ‰์ž ์ฟจ๋‹ค์šด, ๋‹ค์ค‘ ๊ณ„์ • Codex, Copilot ํ• ๋‹น๋Ÿ‰ ๊ตฌ๋ฌธ ๋ถ„์„ |
1079
+ | โšก **์„ฑ๋Šฅ** | 15์„ธ ์ด์ƒ | ๋“€์–ผ ์บ์‹œ ๋ ˆ์ด์–ด, ํ”„๋กฌํ”„ํŠธ ์บ์‹œ, ์‘๋‹ต ์บ์‹œ, ์ŠคํŠธ๋ฆฌ๋ฐ Keepalive, ๋ฐฐ์น˜ API |
1080
+ | ๐ŸŒ **์ƒํƒœ๊ณ„** | 10์„ธ ์ด์ƒ | WebSocket API, ๊ตฌ์„ฑ ํ•ซ ๋ฆฌ๋กœ๋“œ, ๋ถ„์‚ฐ ๊ตฌ์„ฑ ์ €์žฅ์†Œ, ์ƒ์šฉ ๋ชจ๋“œ |
1081
+
1082
+ ### ๐Ÿ”œ ์ถœ์‹œ ์˜ˆ์ •
1083
+
1084
+ - ๐Ÿ”— **OpenCode ํ†ตํ•ฉ** โ€” OpenCode AI ์ฝ”๋”ฉ IDE์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๊ณต๊ธ‰์ž ์ง€์›
1085
+ - ๐Ÿ”— **TRAE ํ†ตํ•ฉ** โ€” TRAE AI ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›
1086
+ - ๐Ÿ“ฆ **Batch API** โ€” ๋Œ€๋Ÿ‰ ์š”์ฒญ์— ๋Œ€ํ•œ ๋น„๋™๊ธฐ์‹ ์ผ๊ด„ ์ฒ˜๋ฆฌ
1087
+ - ๐ŸŽฏ **ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…** โ€” ์‚ฌ์šฉ์ž ์ •์˜ ํƒœ๊ทธ ๋ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์š”์ฒญ ๋ผ์šฐํŒ…
1088
+ - ๐Ÿ’ฐ **์ตœ์ € ๋น„์šฉ ์ „๋žต** โ€” ๊ฐ€์žฅ ์ €๋ ดํ•œ ์ œ๊ณต์—…์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
1089
+
1090
+ > ๐Ÿ“ [link](docs/new-features/)์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ „์ฒด ๊ธฐ๋Šฅ ์‚ฌ์–‘(217๊ฐœ ์„ธ๋ถ€ ์‚ฌ์–‘)
1091
+
1092
+ ---
1093
+
1094
+ ## ๐Ÿ“ง ์ง€์›
1095
+
1096
+ > ๐Ÿ’ฌ **์ปค๋ฎค๋‹ˆํ‹ฐ์— ๊ฐ€์ž…ํ•˜์„ธ์š”!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) โ€” ๋„์›€์„ ๋ฐ›๊ณ , ํŒ์„ ๊ณต์œ ํ•˜๊ณ , ์ตœ์‹  ์†Œ์‹์„ ๋ฐ›์•„๋ณด์„ธ์š”.
1097
+
1098
+ - **์›น์‚ฌ์ดํŠธ**: [omniroute.online](https://omniroute.online)
1099
+ - **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute)
1100
+ - **๋ฌธ์ œ**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues)
1101
+ - **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
1102
+ - **์›๋ž˜ ํ”„๋กœ์ ํŠธ**: [9router by decolua](https://github.com/decolua/9router)
1103
+
1104
+ ---
1105
+
1106
+ ## ๐Ÿ‘ฅ ๊ธฐ์—ฌ์ž
1107
+
1108
+ [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors)
1109
+
1110
+ ### ๊ธฐ์—ฌ ๋ฐฉ๋ฒ•
1111
+
1112
+ 1. ์ €์žฅ์†Œ ํฌํฌ
1113
+ 2. ๊ธฐ๋Šฅ ๋ถ„๊ธฐ ์ƒ์„ฑ(`git checkout -b feature/amazing-feature`)
1114
+ 3. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค(`git commit -m 'Add amazing feature'`).
1115
+ 4. ๋ธŒ๋žœ์น˜(`git push origin feature/amazing-feature`)๋กœ ํ‘ธ์‹œ
1116
+ 5. ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ์—ด๊ธฐ
1117
+
1118
+ ์ž์„ธํ•œ ์ง€์นจ์€ [CONTRIBUTING.md](CONTRIBUTING.md)์„ ์ฐธ์กฐํ•˜์„ธ์š”.
1119
+
1120
+ ### ์ƒˆ ๋ฒ„์ „ ์ถœ์‹œ
1121
+
1122
+ ```bash
1123
+ # Create a release โ€” npm publish happens automatically
1124
+ gh release create v1.0.6 --title "v1.0.6" --generate-notes
1125
+ ```
1126
+
1127
+ ---
1128
+
1129
+ ## ๐Ÿ“Š ์Šคํƒ€ ํžˆ์Šคํ† ๋ฆฌ
1130
+
1131
+ <a href="https://star-history.com/#diegosouzapw/OmniRoute&Date">
1132
+ <picture>
1133
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date&theme=dark" />
1134
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date" />
1135
+ <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date" />
1136
+ </picture>
1137
+ </a>
1138
+
1139
+ ---
1140
+
1141
+ ## ๐Ÿ™ ๊ฐ์‚ฌ์˜ ๋ง์”€
1142
+
1143
+ ์ด ํฌํฌ์— ์˜๊ฐ์„ ์ค€ ์›๋ณธ ํ”„๋กœ์ ํŠธ์ธ **[decolua](https://github.com/decolua)**์˜ **[9router](https://github.com/decolua/9router)**์—๊ฒŒ ํŠน๋ณ„ํžˆ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. OmniRoute๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ, ๋‹ค์ค‘ ๋ชจ๋“œ API ๋ฐ ์ „์ฒด TypeScript ์žฌ์ž‘์„ฑ์„ ํ†ตํ•ด ๋†€๋ผ์šด ๊ธฐ๋ฐ˜์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.
1144
+
1145
+ ์ด JavaScript ํฌํŠธ์— ์˜๊ฐ์„ ์ค€ ์ตœ์ดˆ์˜ Go ๊ตฌํ˜„์ธ **[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)**์—๊ฒŒ ํŠน๋ณ„ํžˆ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
1146
+
1147
+ ---
1148
+
1149
+ ## ๐Ÿ“„ ๋ผ์ด์„ผ์Šค
1150
+
1151
+ MIT ๋ผ์ด์„ ์Šค - ์ž์„ธํ•œ ๋‚ด์šฉ์€ [LICENSE](LICENSE)์„ ์ฐธ์กฐํ•˜์„ธ์š”.
1152
+
1153
+ ---
1154
+
1155
+ ---
1156
+
1157
+ ## ๐Ÿ‡ง๐Ÿ‡ท OmniRoute โ€” IA ๋ฌด๋ฃŒ ๊ฒŒ์ดํŠธ์›จ์ด
1158
+
1159
+ <a name="-omniroute--gateway-de-ia-gratuito"></a>
1160
+
1161
+ ### Nunca pare de codar. **IA ๋ฌด๋ฃŒ ๋ชจ๋ธ ๋ฐ ์‚ฌ์šฉ์ž ์ •์˜**๊ฐ€ ์ž๋™ ๋Œ€์ฒด ๊ธฐ๋Šฅ์œผ๋กœ ์ง€๋Šฅํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
1162
+
1163
+ _Seu ํ”„๋ก์‹œ ๋ฒ”์šฉ API โ€” ์Œ ์—”๋“œํฌ์ธํŠธ, 36๊ฐœ ์ด์ƒ์˜ Prodoores, ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„ ์—†์Œ._
1164
+
1165
+ ### ๐ŸŒ ๊ตญ์ œํ™”(i18n)
1166
+
1167
+ O ๋Œ€์‹œ๋ณด๋“œ๋Š” OmniRoute๋ฅผ ์ง€์›ํ•˜์—ฌ **๋‹ค์–‘ํ•œ ๊ด€์šฉ์–ด**๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋ถˆ๋งŒ์ด ์žˆ๋Š” ๊ฒฝ์šฐ:
1168
+
1169
+ | ๊ด€์šฉ๊ตฌ | ์ฝ”๋””๊ณ  | ์ƒํƒœ |
1170
+ | --------------------- | ------- | ------- |
1171
+ | ๐Ÿ‡บ๐Ÿ‡ธ ์˜์–ด | `en` | โœ… ์™„๋ฃŒ |
1172
+ | ๐Ÿ‡ง๐Ÿ‡ท ํฌ๋ฅดํˆฌ๊ฐˆ์–ด(๋ธŒ๋ผ์งˆ) | `pt-BR` | โœ… ์™„๋ฃŒ |
1173
+
1174
+ **Para trocar o idioma:** Clique no seletor de idioma(๐Ÿ‡บ๐Ÿ‡ธ EN) ํ—ค๋” ์—†์Œ ๋Œ€์‹œ๋ณด๋“œ โ†’ selecione o idioma desejado.
1175
+
1176
+ **์ถ”๊ฐ€์ ์ธ ํ‘œํ˜„:**
1177
+
1178
+ 1. `src/i18n/messages/{codigo}.json` ์†Œ๋ฆฌ ์ง€๋ฅด๊ธฐ `en.json` ๊ธฐ๋ฐ˜์œผ๋กœ
1179
+ 2. `src/i18n/config.ts` โ†’ `LOCALES` e `LANGUAGES` ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
1180
+ 3. Reinicie o servidor
1181
+
1182
+ ### โšก ์ด๋‹ˆ์‹œ์˜ค ๋ผํ”ผ๋„
1183
+
1184
+ ```bash
1185
+ # Instalar via npm
1186
+ npx omniroute@latest
1187
+
1188
+ # Ou rodar do cรณdigo-fonte
1189
+ cp .env.example .env
1190
+ npm install
1191
+ PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
1192
+ ```
1193
+
1194
+ ### ๐Ÿณ ๋„์ปค
1195
+
1196
+ ```bash
1197
+ docker run -d --name omniroute -p 20128:20128 diegosouzapw/omniroute:latest
1198
+ ```
1199
+
1200
+ ### ๐Ÿ”‘ Funcionalidades Principais
1201
+
1202
+ - **36๊ฐœ ์ด์ƒ์˜ IA ์ธ์ฆ** โ€” Claude, GPT, Gemini, Llama, Qwen, DeepSeek ๋“ฑ
1203
+ - **์ง€๋Šฅํ˜• ํšŒ์ „** โ€” ์˜ˆ๋น„ ์ž๋™ ๋Œ€์ฒด
1204
+ - **Traduรงรฃo de formato** โ€” OpenAI โ‡” Claude โ‡” Gemini ์ž๋™ ๋ฒˆ์—ญ
1205
+ - **๋‹ค์ค‘ ์—ฐ๊ฒฐ** โ€” ์ง€๋Šฅ์ ์ธ ์„ ํƒ์„ ํ†ตํ•ด ์ž…์ฆ๋œ ์—ฌ๋Ÿฌ ์ฝ˜ํƒ€์Šค
1206
+ - **์บ์‹œ ์˜๋ฏธ** โ€” Reduz custos and latรชncia
1207
+ - **OAuth ์ž๋™** โ€” ํ† ํฐ ์ž๋™ ์—…๋ฐ์ดํŠธ
1208
+ - **๋งž์ถคํ˜• ์ฝค๋ณด** โ€” 6๊ฐ€์ง€ ๊ธฐ๋ณธ ์ „๋žต
1209
+ - **๋Œ€์‹œ๋ณด๋“œ ์™„๋ฃŒ** โ€” ๋ชจ๋‹ˆํ„ฐ๋ง, ๋กœ๊ทธ, ๋ถ„์„, ๊ตฌ์„ฑ
1210
+ - **CLI ๋„๊ตฌ** โ€” Claude Code, Codex, Cursor, Cline com um clique ๊ตฌ์„ฑ
1211
+ - **100% TypeScript** โ€” Cรณdigo limpo etipado
1212
+
1213
+ ### ๐Ÿ“– ๋ฌธ์„œ
1214
+
1215
+ | ๋„ํ๋ฉ˜ํ†  | ์„ค๋ช… |
1216
+ | ----------------------------------------------- | ------------------------------------ |
1217
+ | [Guia do Usuรกrio](docs/USER_GUIDE.md) | Provedore, ์ฝค๋ณด, CLI, ๋ฐฐํฌ |
1218
+ | [Referรชncia da API](docs/API_REFERENCE.md) | ์˜ˆ๋ฅผ ๋“ค์–ด Todos OS ์—”๋“œํฌ์ธํŠธ |
1219
+ | [Soluรงรฃo de Problemas](docs/TROUBLESHOOTING.md) | ๋ฌธ์ œ ๋ฐ ์†”๋ฃจ์…˜ ๋ฌธ์ œ |
1220
+ | [Arquitetura](docs/ARCHITECTURE.md) | Arquitetura e internos do sistema |
1221
+ | [Contribuiรงรฃo](CONTRIBUTING.md) | ์ž์œ  ์˜์ง€ ์„ค์ • ์ง€์นจ |
1222
+ | [Deploy em VM](docs/VM_DEPLOYMENT_GUIDE.md) | ์™„์ „ํ•œ ๊ธฐ๋Šฅ: VM + nginx + Cloudflare |
1223
+
1224
+ ### ๐Ÿ“ง ์ง€์›
1225
+
1226
+ > ๐Ÿ’ฌ **๊ณต๋™์ฒด์— ์ฐธ์—ฌํ•˜์„ธ์š”!** [Grupo WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) โ€” Tire dรบvidas, compartilhe dicas e fique atualizado.
1227
+
1228
+ - **์›น์‚ฌ์ดํŠธ**: [omniroute.online](https://omniroute.online)
1229
+ - **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute)
1230
+ - **๋ฌธ์ œ**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues)
1231
+
1232
+ ---
1233
+
1234
+ <div align="center">
1235
+ <sub> ์—ฐ์ค‘๋ฌดํœด</sub>์„ ์ฝ”๋”ฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด โค๏ธ์œผ๋กœ ๊ตฌ์ถ•๋จ
1236
+ <br/>
1237
+ <sub><a href="https://omniroute.online">omniroute.online</a></sub>
1238
+ </div>