@sifxprime/krouter 0.5.81 → 0.5.83

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 (394) hide show
  1. package/README.md +166 -1141
  2. package/app/.next-cli-build/BUILD_ID +1 -1
  3. package/app/.next-cli-build/app-path-routes-manifest.json +8 -8
  4. package/app/.next-cli-build/build-manifest.json +2 -2
  5. package/app/.next-cli-build/prerender-manifest.json +3 -3
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/environment/page_client-reference-manifest.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  32. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  33. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  34. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  35. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  36. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  37. package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  38. package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  39. package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  40. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  41. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  42. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  43. package/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  44. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  45. package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  46. package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
  47. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  48. package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  49. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  50. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  51. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  52. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  53. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  54. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  55. package/app/.next-cli-build/server/app/api/auth/reset-password/route.js.nft.json +1 -1
  56. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  57. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +4 -4
  58. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  59. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  60. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  61. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  62. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
  63. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +2 -2
  64. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
  65. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  66. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  67. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
  68. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
  69. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  70. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  71. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +2 -2
  72. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +1 -1
  73. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -2
  74. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
  75. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  76. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  77. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  78. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  79. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  80. package/app/.next-cli-build/server/app/api/import/route.js.nft.json +1 -1
  81. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  82. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  83. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  84. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  85. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  86. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  87. package/app/.next-cli-build/server/app/api/mitm/cert/route.js.nft.json +1 -1
  88. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  89. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  90. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  91. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  92. package/app/.next-cli-build/server/app/api/models/live/route.js +1 -1
  93. package/app/.next-cli-build/server/app/api/models/live/route.js.nft.json +1 -1
  94. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  95. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  96. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  97. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  98. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  99. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
  100. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  101. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  102. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  103. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  104. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  105. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  106. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  107. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  108. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  109. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  112. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  113. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  114. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  115. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  116. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  117. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js +1 -1
  118. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  119. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  120. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  121. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  122. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  123. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  124. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  125. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  126. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  127. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  129. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  130. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  131. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  133. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  135. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  136. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  137. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  139. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
  140. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  141. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  142. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  143. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  144. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  145. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  146. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  147. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  148. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  149. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  150. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  151. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  152. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  153. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  154. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  155. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  156. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  157. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  158. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  160. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  162. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  163. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  165. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  166. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  167. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  168. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  169. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  170. package/app/.next-cli-build/server/app/callback.html +1 -1
  171. package/app/.next-cli-build/server/app/callback.rsc +3 -3
  172. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  173. package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  174. package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
  175. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  176. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  177. package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  178. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  179. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
  180. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  181. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  182. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  183. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  184. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  185. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  186. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  187. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  188. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  189. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
  190. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  191. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  192. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  193. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  194. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  195. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  196. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  197. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  198. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  199. package/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
  200. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  201. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  202. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  203. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  204. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  205. package/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  206. package/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  207. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  208. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  209. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
  210. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  211. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  212. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  213. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  214. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  215. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  216. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  217. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  218. package/app/.next-cli-build/server/app/dashboard/environment.html +1 -1
  219. package/app/.next-cli-build/server/app/dashboard/environment.rsc +5 -5
  220. package/app/.next-cli-build/server/app/dashboard/environment.segments/!KGRhc2hib2FyZCk/dashboard/environment/__PAGE__.segment.rsc +2 -2
  221. package/app/.next-cli-build/server/app/dashboard/environment.segments/!KGRhc2hib2FyZCk/dashboard/environment.segment.rsc +1 -1
  222. package/app/.next-cli-build/server/app/dashboard/environment.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  223. package/app/.next-cli-build/server/app/dashboard/environment.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  224. package/app/.next-cli-build/server/app/dashboard/environment.segments/_full.segment.rsc +5 -5
  225. package/app/.next-cli-build/server/app/dashboard/environment.segments/_head.segment.rsc +1 -1
  226. package/app/.next-cli-build/server/app/dashboard/environment.segments/_index.segment.rsc +3 -3
  227. package/app/.next-cli-build/server/app/dashboard/environment.segments/_tree.segment.rsc +1 -1
  228. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  229. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
  230. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  231. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  232. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  233. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  234. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  235. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  236. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  237. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  238. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  239. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  240. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
  241. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  242. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  243. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  244. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  245. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  246. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  247. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  248. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  249. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  250. package/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
  251. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  252. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  253. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  254. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  255. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  256. package/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  257. package/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  258. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  259. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  260. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
  261. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  262. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  263. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  264. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  265. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  266. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  267. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  268. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  269. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  270. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  271. package/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
  272. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  273. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  274. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  275. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  276. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  277. package/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  278. package/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  279. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  280. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  281. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
  282. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  283. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  284. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  285. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  286. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  287. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  288. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  289. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  290. package/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  291. package/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
  292. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  293. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  294. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  295. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  296. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  297. package/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  298. package/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  299. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  300. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  301. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  302. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  303. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  304. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  305. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  306. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  307. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  308. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  309. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  310. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  311. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  312. package/app/.next-cli-build/server/app/dashboard/skills.rsc +5 -5
  313. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
  314. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
  315. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  316. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  317. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +5 -5
  318. package/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
  319. package/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +3 -3
  320. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
  321. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  322. package/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
  323. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  324. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  325. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  326. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  327. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  328. package/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  329. package/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  330. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  331. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  332. package/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
  333. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  334. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  335. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  336. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  337. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  338. package/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  339. package/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  340. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  341. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  342. package/app/.next-cli-build/server/app/dashboard.rsc +5 -5
  343. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  344. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  345. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  346. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
  347. package/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  348. package/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
  349. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  350. package/app/.next-cli-build/server/app/index.html +1 -1
  351. package/app/.next-cli-build/server/app/index.rsc +3 -3
  352. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  353. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  354. package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  355. package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
  356. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  357. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  358. package/app/.next-cli-build/server/app/landing.html +1 -1
  359. package/app/.next-cli-build/server/app/landing.rsc +3 -3
  360. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
  361. package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  362. package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
  363. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  364. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  365. package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  366. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  367. package/app/.next-cli-build/server/app/login.html +1 -1
  368. package/app/.next-cli-build/server/app/login.rsc +4 -4
  369. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  370. package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  371. package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
  372. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  373. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  374. package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  375. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  376. package/app/.next-cli-build/server/app-paths-manifest.json +8 -8
  377. package/app/.next-cli-build/server/chunks/2365.js +1 -1
  378. package/app/.next-cli-build/server/chunks/706.js +1 -1
  379. package/app/.next-cli-build/server/chunks/7153.js +1 -1
  380. package/app/.next-cli-build/server/chunks/8361.js +1 -1
  381. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  382. package/app/.next-cli-build/server/pages/404.html +1 -1
  383. package/app/.next-cli-build/server/pages/500.html +1 -1
  384. package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
  385. package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
  386. package/app/.next-cli-build/static/chunks/{1321-9dbda4f26cf61d56.js → 1321-c6109e2292def00c.js} +1 -1
  387. package/app/cli/.build-home/.krouter/db/backups/{upgrade-0.5.77-to-0.5.78-0.5.78-20260629-161340 → upgrade-0.5.80-to-0.5.81-0.5.81-20260701-080435}/data.sqlite +0 -0
  388. package/app/cli/.build-home/.krouter/db/backups/{upgrade-0.5.74-to-0.5.77-0.5.77-20260629-155425 → upgrade-0.5.81-to-0.5.82-0.5.82-20260703-023738}/data.sqlite +0 -0
  389. package/app/cli/.build-home/.krouter/db/data.sqlite +0 -0
  390. package/app/cli/package.json +1 -1
  391. package/app/package.json +1 -1
  392. package/package.json +1 -1
  393. /package/app/.next-cli-build/static/{qA34fPT5vtoo2OHC8wSCa → zONsDwNNNy06iFLvDZIX6}/_buildManifest.js +0 -0
  394. /package/app/.next-cli-build/static/{qA34fPT5vtoo2OHC8wSCa → zONsDwNNNy06iFLvDZIX6}/_ssgManifest.js +0 -0
package/README.md CHANGED
@@ -3,17 +3,18 @@
3
3
 
4
4
  # kRouter — Kodelyth AI Infrastructure
5
5
 
6
- **Hardened FREE AI router & token saver — save 20-40% tokens with RTK + auto-fallback across 40+ AI providers.**
6
+ **The universal AI router that saves 20–40% tokens and never stops working.**
7
7
 
8
- **Never stop coding. Save 20-40% tokens with RTK + auto-fallback to FREE & cheap AI models. Connect Claude Code, Cursor, Antigravity, Copilot, Codex, Gemini, OpenCode, Cline, Kiro, OpenClaw... to 40+ AI providers & 100+ models — through one local endpoint.**
8
+ Connect Claude Code, Cursor, Antigravity, Kiro, Copilot, Codex, OpenCode, Cline, OpenClaw, and any OpenAI-compatible client to **40+ AI providers and 100+ models** through a single local endpoint. Route intelligently. Fall back instantly. Save tokens automatically.
9
9
 
10
10
  [![npm](https://img.shields.io/npm/v/@sifxprime/krouter.svg)](https://www.npmjs.com/package/@sifxprime/krouter)
11
11
  [![GitHub](https://img.shields.io/badge/github-sifxprime%2Fkrouter-blue?logo=github)](https://github.com/sifxprime/krouter)
12
+ [![Website](https://img.shields.io/badge/website-krouter.kodelyht.com-orange)](https://krouter.kodelyht.com)
12
13
  [![License](https://img.shields.io/npm/l/@sifxprime/krouter.svg)](https://github.com/sifxprime/krouter/blob/main/LICENSE)
13
14
 
14
- [🚀 Quick Start](#-quick-start) • [💡 Features](#-key-features) • [📖 Setup](#-setup-guide) • [🔧 About this fork](#-about-this-fork--sifxprimekrouter)
15
+ **[🌐 Website & Full Docs — krouter.kodelyht.com](https://krouter.kodelyht.com)**
15
16
 
16
- [🇻🇳 Tiếng Việt](https://github.com/sifxprime/krouter/blob/main/i18n/README.vi.md) • [🇨🇳 中文](https://github.com/sifxprime/krouter/blob/main/i18n/README.zh-CN.md) • [🇯🇵 日本語](https://github.com/sifxprime/krouter/blob/main/i18n/README.ja-JP.md) • [🇷🇺 Русский](https://github.com/sifxprime/krouter/blob/main/i18n/README.ru.md)
17
+ [🚀 Quick Start](#-quick-start) • [💡 Features](#-features) • [📖 Setup](#-setup-guide) • [🌐 Supported Providers](#-supported-providers)
17
18
  </div>
18
19
 
19
20
 
@@ -21,74 +22,75 @@
21
22
 
22
23
  ---
23
24
 
24
- ## 🔧 About this fork — `sifxprime/krouter`
25
+ ## 🚀 Quick Start
25
26
 
26
- This is a hardened fork of the upstream **[decolua/9router](https://github.com/decolua/9router)**, rebranded as **kRouter** by **Kodelyth AI Infrastructure** and maintained at **[sifxprime/krouter](https://github.com/sifxprime/krouter)**.
27
-
28
- It tracks upstream but adds an audited security + stability layer focused on production reliability when kRouter is exposed via tunnel (Cloudflare, Tailscale) or used under concurrent multi-agent load. **Eleven audit findings closed across nine atomic commits**, each with reproducing unit tests and live end-to-end verification before commit.
27
+ ```bash
28
+ # Install globally from npm
29
+ npm install -g @sifxprime/krouter
29
30
 
30
- | Area | Hardening in this fork |
31
- |---|---|
32
- | MITM stream layer | Upstream HTTP error → parseable Kiro `exception` frame instead of `"Truncated event message received"`. Read-loop guarded against socket hang-up. EventStream encoder bounds-checked (name ≤ 255, value ≤ 65 535, frame ≤ 16 MiB) to prevent silent frame corruption. |
33
- | Auth & sessions | Token refresh no longer mutates caller credentials under concurrency. Post-refresh retry always adopts its own response (no stale-401 masking). Timing-safe CLI token compare. Per-IP brute-force lockout for API-key + CLI-token paths. |
34
- | Account fallback | `backoffLevel` read-modify-write made atomic via SQLite transaction — concurrent failures no longer lose increments and stall exponential backoff. |
35
- | Provider SSRF | `GET /api/providers/[id]/models` validates user-supplied `baseUrl`: blocks cloud metadata endpoints (169.254.169.254, ECS, GCP, Alibaba) + non-`http(s)` schemes. Loopback and private LAN ranges remain allowed for legitimate self-hosted LLMs. |
36
- | Combo routing | Recursion depth guard (max 3) prevents infinite loops on misconfigured combo-of-combo cycles. Single `getSettings()` DB read per request (was 2–3). |
31
+ # Run in background (tray mode)
32
+ krouter -t
33
+ ```
37
34
 
38
- See [CHANGELOG.md](https://github.com/sifxprime/krouter/blob/main/CHANGELOG.md) entry `v0.4.80+sifxprime.1` for the full commit log with one-line summaries. Each finding's reproduction + verification approach is recorded in the commit body.
35
+ Dashboard opens at **[http://localhost:20128/dashboard](http://localhost:20128/dashboard)**.
39
36
 
40
- Upstream features, providers, docs, and roadmap remain authoritative — credit and stars belong to **[@decolua](https://github.com/decolua)** and the upstream contributors.
37
+ Prefer running in the foreground with live logs? Just use `krouter` (no flag).
41
38
 
42
- ---
39
+ ### CLI Options
43
40
 
44
- ## ⚖️ kRouter vs 9router vs OmniRoute — what's actually different
41
+ ```bash
42
+ krouter --help
45
43
 
46
- Honest head-to-head. All three projects share a common ancestor (CLIProxyAPI in Go); each takes the idea in a different direction.
44
+ Options:
45
+ -p, --port <port> Port to run the server (default: 20128)
46
+ -l, --log Show server logs (default: hidden)
47
+ -t, --tray Run in system tray mode (background)
48
+ --skip-update Skip auto-update check
49
+ -h, --help Show this help
50
+ -v, --version Show version
51
+ ```
47
52
 
48
- | Feature / Concern | **kRouter** (this fork) | 9router (upstream) | OmniRoute |
49
- |---|---|---|---|
50
- | **Origin** | Hardened fork of 9router | Original AI router & token saver | Independent fork lineage; large rewrite |
51
- | **Language** | Node.js / Next.js / React | Node.js / Next.js / React | TypeScript |
52
- | **Antigravity ban handling** | Bootstrap metadata uses numeric enums (matches real binary), `verify your account` classified as 24h permanent lock with UI badge, MITM anti-loop header preserved | Same upstream code path — string enums in bootstrap, generic 1h cooldown, no permanent-ban classifier | Permanent-ban classifier; broader stealth surface (fingerprint rotator, header scrub, ZWJ obfuscation) |
53
- | **Quota tracker accuracy** | Distinguishes "0% remaining" (red bar) from "no fraction reported" (amber "Exhausted • awaiting reset"). TPM vs daily-quota disambiguated on 429. | `\|\| 0` fallback paints exhausted Claude as fake 100%-used red bar | Similar to kRouter for exhausted handling; no TPM/daily disambiguation in core |
54
- | **Token usage analytics** | Extracts wrapped Antigravity `usageMetadata` (was 0/0 in upstream). Auto-backfills historical rows on `krouter` startup. | Records 0/0 tokens for all Antigravity rows (wrapped shape not handled) | Correct extraction; no historical backfill |
55
- | **Combo retry loop** | Per-provider concurrency (Kiro 4, Claude 5, Antigravity 2). Per-provider semaphore timeouts (Kiro 20s, Claude 15s, Antigravity 5s). Block-on-busy 503 routes to next account. | Flat concurrency, flat 30s semaphore timeout. IDE Autopilot floods → 25s "busy" cascades. | Tunable concurrency; account semaphore upstream of fallback |
56
- | **MITM stream layer** | Frame size + bounds-checked encoding, NGHTTP2 stream-recovery → HTTP/1.1 fallback, parseable Kiro `exception` frames on upstream errors | Stream errors surface as `Truncated event message received` | Different MITM stack — production-tuned but a different design (deno/edge focus) |
57
- | **Provider SSRF guards** | `baseUrl` validates: blocks cloud-metadata endpoints (AWS/GCP/Azure/Alibaba), non-`http(s)` schemes | No metadata-endpoint guard | Edge-runtime sandboxed; SSRF surface different |
58
- | **Auth race conditions** | Token refresh no longer mutates caller credentials concurrently. Atomic `backoffLevel` increment via SQLite transaction. | Race conditions present (concurrent failures lose backoff increments) | Different concurrency model |
59
- | **Image / vision support** | Skips ZWJ obfuscator on `inline_data.data`, `bytes`, `b64_json` (was corrupting base64 → 400 errors) | Obfuscator runs on all strings → corrupts large image payloads | Obfuscation off by default |
60
- | **Reasoning / thinking preservation** | Translates Claude `{thinking.type=enabled, budget_tokens}` and OpenAI `reasoning_effort` into Gemini `generationConfig.thinkingConfig` BEFORE the request blacklist runs | Blacklist strips `thinking` without translating → reasoning never runs | Translates at the format-converter level |
61
- | **License** | MIT, dual-copyright (upstream + fork) | MIT | MIT |
62
- | **Update cadence** | Tracks upstream, ships hardening fixes within 24-72h of report | Active feature development | Active independent development (v3.8+) |
63
- | **NPM** | `@sifxprime/krouter` | `9router` | `omniroute` |
53
+ ### From Source (Contributors)
64
54
 
65
- **Pick kRouter if:** you want the upstream feature surface plus production-hardening fixes specifically for MITM reliability, Antigravity ban handling, and honest quota tracking.
55
+ ```bash
56
+ git clone https://github.com/sifxprime/krouter.git
57
+ cd krouter
58
+ npm install
59
+ npm run dev
60
+ ```
66
61
 
67
- **Pick 9router upstream if:** you want the latest upstream feature work and don't need the hardening layer (no MITM tunnel, low-concurrency single-user use).
62
+ ### Docker
68
63
 
69
- **Pick OmniRoute if:** you want an edge-runtime / Deno-friendly stack with a different architectural philosophy and broader stealth surface.
64
+ ```bash
65
+ docker run -d \
66
+ -p 20128:20128 \
67
+ -v "$HOME/.krouter:/app/data" \
68
+ --name krouter \
69
+ sifxprime/krouter:latest
70
+ ```
70
71
 
71
- All three are MIT-licensed forks of a common ancestor — choose by fit, not loyalty.
72
+ Then open **[http://localhost:20128/dashboard](http://localhost:20128/dashboard)**.
72
73
 
73
74
  ---
74
75
 
75
76
  ## 🤔 Why kRouter?
76
77
 
77
- **Stop wasting money, tokens and hitting limits:**
78
+ Stop wasting money, tokens, and hitting limits:
78
79
 
79
80
  - ❌ Subscription quota expires unused every month
80
81
  - ❌ Rate limits stop you mid-coding
81
- - ❌ Tool outputs (git diff, grep, ls...) burn tokens fast
82
- - ❌ Expensive APIs ($20-50/month per provider)
83
- - ❌ Manual switching between providers
82
+ - ❌ Tool outputs (git diff, grep, ls…) burn tokens fast
83
+ - ❌ Expensive APIs cost $20–50/month per provider
84
+ - ❌ Manually switching between providers
84
85
 
85
86
  **kRouter solves this:**
86
87
 
87
- - ✅ **RTK Token Saver** - Auto-compress tool_result content, save 20-40% tokens per request
88
- - ✅ **Maximize subscriptions** - Track quota, use every bit before reset
89
- - ✅ **Auto fallback** - Subscription → Cheap → Free, zero downtime
90
- - ✅ **Multi-account** - Round-robin between accounts per provider
91
- - ✅ **Universal** - Works with Claude Code, Codex, Cursor, Cline, any CLI tool
88
+ - ✅ **RTK Token Saver** — auto-compress tool outputs, save 20–40% tokens per request
89
+ - ✅ **Zenith intelligent routing** — instant sub-1ms failover, ranked by live quota + latency
90
+ - ✅ **Multi-account rotation** — round-robin across accounts with real-time quota tracking
91
+ - ✅ **Auto token refresh** — OAuth tokens refresh transparently
92
+ - ✅ **Universal client support** — works with any OpenAI-compatible AI client
93
+ - ✅ **MITM interception** — Kiro, Antigravity, Copilot, and Cursor natively supported
92
94
 
93
95
  ---
94
96
 
@@ -96,7 +98,7 @@ All three are MIT-licensed forks of a common ancestor — choose by fit, not loy
96
98
 
97
99
  ```
98
100
  ┌─────────────┐
99
- │ Your CLI │ (Claude Code, Codex, OpenClaw, Cursor, Cline...)
101
+ │ Your CLI │ (Claude Code, Codex, OpenClaw, Cursor, Cline…)
100
102
  │ Tool │
101
103
  └──────┬──────┘
102
104
  │ http://localhost:20128/v1
@@ -104,161 +106,50 @@ All three are MIT-licensed forks of a common ancestor — choose by fit, not loy
104
106
  ┌─────────────────────────────────────────────┐
105
107
  │ kRouter (Smart Router) │
106
108
  │ • RTK Token Saver (cut tool_result tokens) │
109
+ │ • Zenith Score Engine (sub-1ms routing) │
107
110
  │ • Format translation (OpenAI ↔ Claude) │
108
- │ • Quota tracking │
111
+ │ • Live quota tracking │
109
112
  │ • Auto token refresh │
110
113
  └──────┬──────────────────────────────────────┘
111
114
  │
112
- ├─→ [Tier 1: SUBSCRIPTION] Claude Code, Codex, GitHub Copilot
113
- │ ↓ quota exhausted
114
- ├─→ [Tier 2: CHEAP] GLM ($0.6/1M), MiniMax ($0.2/1M)
115
- │ ↓ budget limit
116
- └─→ [Tier 3: FREE] Kiro, OpenCode Free, Vertex ($300 credits)
117
-
118
- Result: Never stop coding, minimal cost + 20-40% token savings via RTK
119
- ```
120
-
121
- ---
122
-
123
- ## ⚡ Quick Start
124
-
125
- There are two ways to install k‍Router: via **NPM** (recommended for most users) or via **Git** (for development).
126
-
127
- ### Option 1: Install via NPM (Recommended)
128
-
129
- Requires Node.js 20+.
130
-
131
- ```bash
132
- npm install -g @sifxprime/k‍router
133
- ```
134
-
135
- Start the router in the background:
136
- ```bash
137
- k‍router -t
138
- ```
139
- Dashboard opens at **http://localhost:20128/dashboard**.
140
-
141
- **To upgrade later:**
142
- ```bash
143
- npm install -g @sifxprime/k‍router@latest
144
- k‍router -t
145
- ```
146
-
147
- **To uninstall:**
148
- ```bash
149
- # 1. Stop the router if it's running (Right-click tray icon -> Quit, or pkill -f k‍router)
150
- # 2. Remove the package
151
- npm uninstall -g @sifxprime/k‍router
152
- # 3. Clean up the local database and settings (optional)
153
- rm -rf ~/.k‍router
154
- ```
155
-
156
- ### Option 2: Install via Git (For Development)
157
-
158
- If you want to modify the code or run the hot-reloading dev server:
159
-
160
- ```bash
161
- git clone https://github.com/sifxprime/k‍router.git
162
- cd k‍router
163
- npm install
164
- npm run dev
165
- ```
166
-
167
- For production-style standalone from source (smaller memory, no HMR):
168
- ```bash
169
- npm run build:deploy # one-time build + copy static assets
170
- npm run start # standalone server on PORT=20128
171
- ```
172
-
173
- ### Option 3: Install via Docker
174
-
175
- The official Docker image (`sifxprime/k‍router`) is published to both Docker Hub and GitHub Container Registry. It supports `linux/amd64` and `linux/arm64`.
176
-
177
- ```bash
178
- docker run -d \
179
- -p 20128:20128 \
180
- -v "$HOME/.k‍router:/app/data" \
181
- -e DATA_DIR=/app/data \
182
- --name k‍router \
183
- sifxprime/k‍router:latest
115
+ ├─→ [SUBSCRIPTION] Claude Code · Codex · Copilot · Cursor
116
+ │
117
+ ├─→ [FREE TIER] Cloudflare · Vertex · Gemini · Ollama · OpenRouter
118
+ │
119
+ └─→ [FREE PROXY] Kiro · OpenCode · Atomesus · MiMo
184
120
  ```
185
121
 
186
- App listens on port `20128`. Open: http://localhost:20128/dashboard
187
-
188
- See [DOCKER.md](DOCKER.md) for full container management instructions.
122
+ If one provider fails, kRouter instantly falls back through your entire pre-ranked stack — with zero manual intervention.
189
123
 
190
124
  ---
191
125
 
192
- ### Prerequisites
193
-
194
- | Tool | Minimum | Notes |
195
- |---|---|---|
196
- | **Node.js** | ≥ 20 (22 recommended) | `node -v` to check. Windows: nodejs.org. macOS: `brew install node@22`. |
197
- | **Sudo / admin** | only if you enable MITM | Pure router mode (chat completions only) needs **no** privileges. MITM intercept for Kiro / Antigravity / C‍ursor binds `:443` and edits `/etc/hosts`, which requires admin rights. |
198
-
199
- ### What happens next (no reboot, no extra config)
200
-
201
- On first run the app creates `~/.k‍router/` (SQLite DB, machine-id, MITM CA) — it's per-user and fully reset by deleting that folder.
202
-
203
- 1. **Dashboard → Providers** → pick any provider tile.
204
- - **Free, no signup needed**: MiMo Code Free, OpenCode Free → click [+] on the suggested model.
205
- - **Free, login required**: Kiro AI (AWS Builder ID **or** Google **or** GitHub thanks to this fork's device-code OAuth), Gemini CLI, Qoder.
206
- - **API key**: OpenRouter, NVIDIA NIM, Anthropic, OpenAI, etc.
207
- 2. **Dashboard → API Keys** → create one local API key (e.g. `sk-krouter-XXXX`).
208
- 3. Point any AI tool at kRouter:
209
-
210
- ```text
211
- Endpoint: http://localhost:20128/v1
212
- API key: sk-krouter-XXXX (from step 2)
213
- Model: kr/claude-sonnet-4.5 (or whatever provider/model you connected)
214
- ```
215
-
216
- Works with Claude Code, Cursor, Antigravity, Copilot, Codex CLI, OpenCode, Cline, OpenClaw, any OpenAI-compatible client.
217
-
218
- ### Updating to the latest fork commits
219
-
220
- ```bash
221
- cd krouter
222
- git pull origin main
223
- npm install # only if package.json changed
224
- # restart dev/start
225
- ```
226
-
227
- ### Default URLs
228
-
229
- - Dashboard: `http://localhost:20128/dashboard`
230
- - OpenAI-compatible API: `http://localhost:20128/v1`
231
- - Anthropic-compatible API: `http://localhost:20128/v1/messages`
232
- - Health probe: `http://localhost:20128/api/health`
233
-
234
- ### Platform support — honest status
235
-
236
- This fork's changes are pure cross-platform JavaScript and re-use upstream's per-OS cert/DNS install code. Here is what is actually verified vs what should work but I haven't personally driven on every OS:
126
+ ## 💡 Features
237
127
 
238
- | OS | Pure router mode (chat completions) | MITM mode (Kiro / Antigravity / Copilot IDE intercept) |
239
- |---|---|---|
240
- | **macOS** (Intel + Apple Silicon) | ✅ verified in development | ✅ Kiro driven live, end-to-end |
241
- | **Windows** 10 / 11 | ✅ verified by a fork user | ✅ confirmed by a fork user: Antigravity streamed `gemini-pro-agent` end-to-end through MITM, 10.6 s, complete, no errors. Cert install via elevated PowerShell + `certutil -addstore -f Root` works as upstream ships it. |
242
- | **Linux** (Debian / Ubuntu / Arch / Fedora / RHEL / openSUSE) | ✅ pure-JS, high confidence | ⚠️ untested as of now; upstream's distro-aware `update-ca-certificates` / `update-ca-trust` path is in place and the same JS runs everywhere |
243
-
244
- **MITM mode is confirmed on macOS and Windows** — Antigravity, Copilot, and Kiro share the same hardened pipe layer (`base.js`) that I verified live. Upstream already supports the Linux distro families above via the OS-aware code in `src/mitm/cert/install.js`. If MITM fails on Linux, the most likely cause is the OS-level cert-install flow (upstream territory), not anything this fork touched.
245
-
246
- **Windows note:** MITM requires an elevated process (binds `:443`, edits `C:\Windows\System32\drivers\etc\hosts`, installs the root CA). Launch your CMD or PowerShell as **Run as administrator**, then `cd` into the project and run `npm run dev`. The dashboard will hide the "Administrator required" banner once `net session` succeeds inside the dev server's Node process.
128
+ | Feature | What It Does | Why It Matters |
129
+ |---------|--------------|----------------|
130
+ | 🚀 **RTK Token Saver** | Auto-compress tool outputs (git diff, grep, ls, tree…) | Save **20–40% input tokens** on every request |
131
+ | ⚡ **Zenith Routing** | Pre-ranks accounts by live health + quota in RAM | Instant sub-1ms failover, zero wasted 429s |
132
+ | 🎯 **Smart Fallback** | Subscription → Free tier → Free proxy | Never stop coding |
133
+ | 📊 **Real-Time Quota** | Live remaining %, reset countdown, exhaustion badge | Maximize every subscription |
134
+ | 🔄 **Format Translation** | OpenAI ↔ Claude ↔ Gemini ↔ Cursor ↔ Kiro ↔ Vertex | Works with any CLI tool |
135
+ | 👥 **Multi-Account** | Multiple accounts per provider with rotation strategies | Load balancing + redundancy |
136
+ | 🔄 **Auto Token Refresh** | OAuth tokens refresh automatically | No manual re-login |
137
+ | 🎨 **Custom Combos** | Unlimited model combinations with per-combo strategies | Tailor fallback to your workflow |
138
+ | 🖥️ **System Tray** | Runs quietly in background with tray icon | Set-and-forget deployment |
139
+ | 🐳 **Deploy Anywhere** | Localhost · VPS · Docker · Cloudflare Workers | Wherever you need it |
247
140
 
248
- If you hit anything OS-specific, [open an issue](https://github.com/sifxprime/krouter/issues) — I'll try to repro and patch.
141
+ 📖 **Full feature guide with screenshots → [krouter.kodelyht.com](https://krouter.kodelyht.com)**
249
142
 
250
143
  ---
251
144
 
252
145
  ## 🛠️ Supported CLI Tools
253
146
 
254
- kRouter works seamlessly with all major AI coding tools:
255
-
256
147
  <div align="center">
257
148
  <table>
258
149
  <tr>
259
150
  <td align="center" width="120">
260
151
  <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/claude.png" width="60" alt="Claude Code"/><br/>
261
- <b>Claude-Code</b>
152
+ <b>Claude Code</b>
262
153
  </td>
263
154
  <td align="center" width="120">
264
155
  <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/openclaw.png" width="60" alt="OpenClaw"/><br/>
@@ -314,1057 +205,191 @@ kRouter works seamlessly with all major AI coding tools:
314
205
 
315
206
  ## 🌐 Supported Providers
316
207
 
317
- ### 🔐 OAuth Providers
318
-
319
- <div align="center">
320
- <table>
321
- <tr>
322
- <td align="center" width="120">
323
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/claude.png" width="60" alt="Claude Code"/><br/>
324
- <b>Claude-Code</b>
325
- </td>
326
- <td align="center" width="120">
327
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/antigravity.png" width="60" alt="Antigravity"/><br/>
328
- <b>Antigravity</b>
329
- </td>
330
- <td align="center" width="120">
331
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/codex.png" width="60" alt="Codex"/><br/>
332
- <b>Codex</b>
333
- </td>
334
- <td align="center" width="120">
335
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/github.png" width="60" alt="GitHub"/><br/>
336
- <b>GitHub</b>
337
- </td>
338
- <td align="center" width="120">
339
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/cursor.png" width="60" alt="Cursor"/><br/>
340
- <b>Cursor</b>
341
- </td>
342
- </tr>
343
- </table>
344
- </div>
345
-
346
- ### 🆓 Free Providers
347
-
348
- <div align="center">
349
- <table>
350
- <tr>
351
- <td align="center" width="150">
352
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/kiro.png" width="70" alt="Kiro"/><br/>
353
- <b>Kiro AI</b><br/>
354
- <sub>Claude 4.5 + GLM-5 + MiniMax<br/>Unlimited FREE</sub>
355
- </td>
356
- <td align="center" width="150">
357
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/opencode.png" width="70" alt="OpenCode Free"/><br/>
358
- <b>OpenCode Free</b><br/>
359
- <sub>No auth • Auto-fetch models<br/>Unlimited FREE</sub>
360
- </td>
361
- <td align="center" width="150">
362
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/gemini.png" width="70" alt="Vertex AI"/><br/>
363
- <b>Vertex AI</b><br/>
364
- <sub>Gemini 3 Pro + GLM-5 + DeepSeek<br/>$300 credits free</sub>
365
- </td>
366
- </tr>
367
- </table>
368
- </div>
369
-
370
- > **Note:** iFlow, Qwen and Gemini CLI free tiers were discontinued in 2026. Use Kiro / OpenCode Free / Vertex instead.
371
-
372
- ### 🔑 API Key Providers (40+)
373
-
374
- <div align="center">
375
- <table>
376
- <tr>
377
- <td align="center" width="100">
378
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/openrouter.png" width="50" alt="OpenRouter"/><br/>
379
- <sub>OpenRouter</sub>
380
- </td>
381
- <td align="center" width="100">
382
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/glm.png" width="50" alt="GLM"/><br/>
383
- <sub>GLM</sub>
384
- </td>
385
- <td align="center" width="100">
386
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/kimi.png" width="50" alt="Kimi"/><br/>
387
- <sub>Kimi</sub>
388
- </td>
389
- <td align="center" width="100">
390
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/minimax.png" width="50" alt="MiniMax"/><br/>
391
- <sub>MiniMax</sub>
392
- </td>
393
- <td align="center" width="100">
394
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/openai.png" width="50" alt="OpenAI"/><br/>
395
- <sub>OpenAI</sub>
396
- </td>
397
- <td align="center" width="100">
398
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/anthropic.png" width="50" alt="Anthropic"/><br/>
399
- <sub>Anthropic</sub>
400
- </td>
401
- </tr>
402
- <tr>
403
- <td align="center" width="100">
404
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/gemini.png" width="50" alt="Gemini"/><br/>
405
- <sub>Gemini</sub>
406
- </td>
407
- <td align="center" width="100">
408
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/deepseek.png" width="50" alt="DeepSeek"/><br/>
409
- <sub>DeepSeek</sub>
410
- </td>
411
- <td align="center" width="100">
412
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/groq.png" width="50" alt="Groq"/><br/>
413
- <sub>Groq</sub>
414
- </td>
415
- <td align="center" width="100">
416
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/xai.png" width="50" alt="xAI"/><br/>
417
- <sub>xAI</sub>
418
- </td>
419
- <td align="center" width="100">
420
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/mistral.png" width="50" alt="Mistral"/><br/>
421
- <sub>Mistral</sub>
422
- </td>
423
- <td align="center" width="100">
424
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/perplexity.png" width="50" alt="Perplexity"/><br/>
425
- <sub>Perplexity</sub>
426
- </td>
427
- </tr>
428
- <tr>
429
- <td align="center" width="100">
430
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/together.png" width="50" alt="Together"/><br/>
431
- <sub>Together AI</sub>
432
- </td>
433
- <td align="center" width="100">
434
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/fireworks.png" width="50" alt="Fireworks"/><br/>
435
- <sub>Fireworks</sub>
436
- </td>
437
- <td align="center" width="100">
438
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/cerebras.png" width="50" alt="Cerebras"/><br/>
439
- <sub>Cerebras</sub>
440
- </td>
441
- <td align="center" width="100">
442
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/cohere.png" width="50" alt="Cohere"/><br/>
443
- <sub>Cohere</sub>
444
- </td>
445
- <td align="center" width="100">
446
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/nvidia.png" width="50" alt="NVIDIA"/><br/>
447
- <sub>NVIDIA</sub>
448
- </td>
449
- <td align="center" width="100">
450
- <img src="https://raw.githubusercontent.com/sifxprime/krouter/main/public/providers/siliconflow.png" width="50" alt="SiliconFlow"/><br/>
451
- <sub>SiliconFlow</sub>
452
- </td>
453
- </tr>
454
- </table>
455
- <p><i>...and 20+ more providers including Nebius, Chutes, Hyperbolic, and custom OpenAI/Anthropic compatible endpoints</i></p>
456
- </div>
457
-
458
- ---
459
-
460
- ## 💡 Key Features
461
-
462
- | Feature | What It Does | Why It Matters |
463
- |---------|--------------|----------------|
464
- | 🚀 **RTK Token Saver** ([RTK](https://github.com/rtk-ai/rtk) ⭐40K) | Compress tool outputs (`git diff`, `grep`, `ls`, `tree`...) before sending to LLM | Save **20-40% input tokens** per request |
465
- | 🪨 **Caveman Mode** ([Caveman](https://github.com/JuliusBrussee/caveman) ⭐52K) | Inject caveman-speak prompt → LLM replies terse, technical substance preserved | Save **up to 65% output tokens** |
466
- | 🎯 **Smart 3-Tier Fallback** | Auto-route: Subscription → Cheap → Free | Never stop coding, zero downtime |
467
- | 📊 **Real-Time Quota Tracking** | Live token count + reset countdown | Maximize subscription value |
468
- | 🔄 **Format Translation** | OpenAI ↔ Claude ↔ Gemini ↔ Cursor ↔ Kiro ↔ Vertex | Works with any CLI tool |
469
- | 👥 **Multi-Account Support** | Multiple accounts per provider | Load balancing + redundancy |
470
- | 🔄 **Auto Token Refresh** | OAuth tokens refresh automatically | No manual re-login needed |
471
- | 🎨 **Custom Combos** | Create unlimited model combinations | Tailor fallback to your needs |
472
- | 📝 **Request Logging** | Debug mode with full request/response logs | Troubleshoot issues easily |
473
- | 💾 **Cloud Sync** | Sync config across devices | Same setup everywhere |
474
- | 📊 **Usage Analytics** | Track tokens, cost, trends over time | Optimize spending |
475
- | 🌐 **Deploy Anywhere** | Localhost, VPS, Docker, Cloudflare Workers | Flexible deployment options |
476
-
477
- <details>
478
- <summary><b>📖 Feature Details</b></summary>
479
-
480
- ### 🚀 RTK Token Saver
481
-
482
- Tool outputs (`git diff`, `grep`, `find`, `ls`, `tree`, log dumps...) often eat 30-50% of your prompt budget. RTK detects them and applies smart, lossless compression **before** the request hits the LLM:
483
-
484
- - **Filters:** `git-diff`, `git-status`, `grep`, `find`, `ls`, `tree`, `dedup-log`, `smart-truncate`, `read-numbered`, `search-list`
485
- - **Auto-detect:** No config needed — RTK peeks the first 1KB of each `tool_result` and picks the right filter.
486
- - **Safe by design:** If a filter fails, throws, or makes output bigger, RTK silently keeps the original text. Errors never break your request.
487
- - **Universal:** Works across all formats (OpenAI, Claude, Gemini, Cursor, Kiro, OpenAI Responses) because it runs **before** any format translation.
488
- - **Default ON:** Toggle anytime in Dashboard → Endpoint settings.
489
-
490
- ```
491
- Without RTK: 47K tokens sent to LLM
492
- With RTK: 28K tokens sent to LLM (40% saved · same context · same answer)
493
- ```
494
-
495
- ### 🎯 Smart 3-Tier Fallback
496
-
497
- Create combos with automatic fallback:
498
-
499
- ```
500
- Combo: "my-coding-stack"
501
- 1. cc/claude-opus-4-6 (your subscription)
502
- 2. glm/glm-4.7 (cheap backup, $0.6/1M)
503
- 3. if/kimi-k2-thinking (free fallback)
504
-
505
- → Auto switches when quota runs out or errors occur
506
- ```
507
-
508
- ### 📊 Real-Time Quota Tracking
509
-
510
- - Token consumption per provider
511
- - Reset countdown (5-hour, daily, weekly)
512
- - Cost estimation for paid tiers
513
- - Monthly spending reports
514
-
515
- ### 🔄 Format Translation
516
-
517
- Seamless translation between formats:
518
- - **OpenAI** ↔ **Claude** ↔ **Gemini** ↔ **Cursor** ↔ **Kiro** ↔ **Vertex** ↔ **Antigravity** ↔ **Ollama** ↔ **OpenAI Responses**
519
- - Your CLI tool sends OpenAI format → kRouter translates → Provider receives native format
520
- - Works with any tool that supports custom OpenAI endpoints
521
-
522
- ### 👥 Multi-Account Support
523
-
524
- - Add multiple accounts per provider
525
- - Auto round-robin or priority-based routing
526
- - Fallback to next account when one hits quota
527
-
528
- ### 🔄 Auto Token Refresh
529
-
530
- - OAuth tokens automatically refresh before expiration
531
- - No manual re-authentication needed
532
- - Seamless experience across all providers
533
-
534
- ### 🎨 Custom Combos
535
-
536
- - Create unlimited model combinations
537
- - Mix subscription, cheap, and free tiers
538
- - Name your combos for easy access
539
- - Share combos across devices with Cloud Sync
540
-
541
- ### 📝 Request Logging
542
-
543
- - Enable debug mode for full request/response logs
544
- - Track API calls, headers, and payloads
545
- - Troubleshoot integration issues
546
- - Export logs for analysis
547
-
548
- ### 💾 Cloud Sync
549
-
550
- - Sync providers, combos, and settings across devices
551
- - Automatic background sync
552
- - Secure encrypted storage
553
- - Access your setup from anywhere
554
-
555
- #### Cloud Runtime Notes
556
-
557
- - Prefer server-side cloud variables in production:
558
- - `BASE_URL` (internal callback URL used by sync scheduler)
559
- - `CLOUD_URL` (cloud sync endpoint base)
560
- - `NEXT_PUBLIC_BASE_URL` and `NEXT_PUBLIC_CLOUD_URL` are still supported for compatibility/UI, but server runtime now prioritizes `BASE_URL`/`CLOUD_URL`.
561
- - Cloud sync requests now use timeout + fail-fast behavior to avoid UI hanging when cloud DNS/network is unavailable.
562
-
563
- ### 📊 Usage Analytics
564
-
565
- - Track token usage per provider and model
566
- - Cost estimation and spending trends
567
- - Monthly reports and insights
568
- - Optimize your AI spending
569
-
570
- > **💡 IMPORTANT - Understanding Dashboard Costs:**
571
- >
572
- > The "cost" displayed in Usage Analytics is **for tracking and comparison purposes only**.
573
- > kRouter itself **never charges** you anything. You only pay providers directly (if using paid services).
574
- >
575
- > **Example:** If your dashboard shows "$290 total cost" while using iFlow models, this represents
576
- > what you would have paid using paid APIs directly. Your actual cost = **$0** (iFlow is free unlimited).
577
- >
578
- > Think of it as a "savings tracker" showing how much you're saving by using free models or
579
- > routing through kRouter!
580
-
581
- ### 🌐 Deploy Anywhere
582
-
583
- - 💻 **Localhost** - Default, works offline
584
- - ☁️ **VPS/Cloud** - Share across devices
585
- - 🐳 **Docker** - One-command deployment
586
- - 🚀 **Cloudflare Workers** - Global edge network
587
-
588
- </details>
589
-
590
- ---
591
-
592
- ## 💰 Pricing at a Glance
593
-
594
- | Tier | Provider | Cost | Quota Reset | Best For |
595
- |------|----------|------|-------------|----------|
596
- | **🚀 TOKEN SAVER** | **RTK (built-in)** | **FREE** | Always on | **Save 20-40% tokens on EVERY request** |
597
- | **💳 SUBSCRIPTION** | Claude Code (Pro/Max) | $20-200/mo | 5h + weekly | Already subscribed |
598
- | | Codex (Plus/Pro) | $20-200/mo | 5h + weekly | OpenAI users |
599
- | | GitHub Copilot | $10-19/mo | Monthly | GitHub users |
600
- | | Cursor IDE | $20/mo | Monthly | Cursor users |
601
- | **💰 CHEAP** | GLM-5.1 / GLM-4.7 | $0.6/1M | Daily 10AM | Budget backup |
602
- | | MiniMax M2.7 | $0.2/1M | 5-hour rolling | Cheapest option |
603
- | | Kimi K2.5 | $9/mo flat | 10M tokens/mo | Predictable cost |
604
- | **🆓 FREE** | Kiro AI | $0 | Unlimited | Claude 4.5 + GLM-5 + MiniMax free |
605
- | | OpenCode Free | $0 | Unlimited | No auth, auto-fetch models |
606
- | | Vertex AI | $300 credits | New GCP accounts | Gemini 3 Pro + DeepSeek + GLM-5 |
607
-
608
- **💡 Pro Tip:** RTK + Kiro AI + OpenCode Free combo = **$0 cost + 20-40% token savings**!
609
-
610
- ---
611
-
612
- ### 📊 Understanding kRouter Costs & Billing
613
-
614
- **kRouter Billing Reality:**
615
-
616
- ✅ **kRouter software = FREE forever** (open source, never charges)
617
- ✅ **Dashboard "costs" = Display/tracking only** (not actual bills)
618
- ✅ **You pay providers directly** (subscriptions or API fees)
619
- ✅ **FREE providers stay FREE** (iFlow, Kiro, Qwen = $0 unlimited)
620
- ❌ **kRouter never sends invoices** or charges your card
621
-
622
- **How Cost Display Works:**
623
-
624
- The dashboard shows **estimated costs** as if you were using paid APIs directly. This is **not billing** - it's a comparison tool to show your savings.
625
-
626
- **Example Scenario:**
627
- ```
628
- Dashboard Display:
629
- • Total Requests: 1,662
630
- • Total Tokens: 47M
631
- • Display Cost: $290
632
-
633
- Reality Check:
634
- • Provider: iFlow (FREE unlimited)
635
- • Actual Payment: $0.00
636
- • What $290 Means: Amount you SAVED by using free models!
637
- ```
638
-
639
- **Payment Rules:**
640
- - **Subscription providers** (Claude Code, Codex): Pay them directly via their websites
641
- - **Cheap providers** (GLM, MiniMax): Pay them directly, kRouter just routes
642
- - **FREE providers** (iFlow, Kiro, Qwen): Genuinely free forever, no hidden charges
643
- - **kRouter**: Never charges anything, ever
644
-
645
- ---
646
-
647
- ## 🎯 Use Cases
648
-
649
- ### Case 1: "I have Claude Pro subscription"
650
-
651
- **Problem:** Quota expires unused, rate limits during heavy coding
652
-
653
- **Solution:**
654
- ```
655
- Combo: "maximize-claude"
656
- 1. cc/claude-opus-4-7 (use subscription fully)
657
- 2. glm/glm-5.1 (cheap backup when quota out)
658
- 3. kr/claude-sonnet-4.5 (free emergency fallback)
659
-
660
- Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total
661
- vs. $20 + hitting limits = frustration
662
- ```
663
-
664
- ### Case 2: "I want zero cost"
665
-
666
- **Problem:** Can't afford subscriptions, need reliable AI coding
667
-
668
- **Solution:**
669
- ```
670
- Combo: "free-forever"
671
- 1. kr/claude-sonnet-4.5 (Claude 4.5 free unlimited)
672
- 2. kr/glm-5 (GLM-5 free via Kiro)
673
- 3. oc/<auto> (OpenCode Free, no auth)
674
-
675
- Monthly cost: $0
676
- Quality: Production-ready models + RTK saves 20-40% tokens
677
- ```
678
-
679
- ### Case 3: "I need 24/7 coding, no interruptions"
680
-
681
- **Problem:** Deadlines, can't afford downtime
682
-
683
- **Solution:**
684
- ```
685
- Combo: "always-on"
686
- 1. cc/claude-opus-4-7 (best quality)
687
- 2. cx/gpt-5.5 (second subscription)
688
- 3. glm/glm-5.1 (cheap, resets daily)
689
- 4. minimax/MiniMax-M2.7 (cheapest, 5h reset)
690
- 5. kr/claude-sonnet-4.5 (free unlimited)
691
-
692
- Result: 5 layers of fallback = zero downtime
693
- Monthly cost: $20-200 (subscriptions) + $10-20 (backup)
694
- ```
695
-
696
- ### Case 4: "I want FREE AI in OpenClaw"
697
-
698
- **Problem:** Need AI assistant in messaging apps (WhatsApp, Telegram, Slack...), completely free
699
-
700
- **Solution:**
701
- ```
702
- Combo: "openclaw-free"
703
- 1. kr/claude-sonnet-4.5 (Claude 4.5 free)
704
- 2. kr/glm-5 (GLM-5 free)
705
- 3. kr/MiniMax-M2.5 (MiniMax free)
706
-
707
- Monthly cost: $0
708
- Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal...
709
- ```
710
-
711
- ---
712
-
713
- ## ❓ Frequently Asked Questions
714
-
715
- <details>
716
- <summary><b>📊 Why does my dashboard show high costs?</b></summary>
717
-
718
- The dashboard tracks your token usage and displays **estimated costs** as if you were using paid APIs directly. This is **not actual billing** - it's a reference to show how much you're saving by using free models or existing subscriptions through kRouter.
719
-
720
- **Example:**
721
- - **Dashboard shows:** "$290 total cost"
722
- - **Reality:** You're using iFlow (FREE unlimited)
723
- - **Your actual cost:** **$0.00**
724
- - **What $290 means:** Amount you **saved** by using free models instead of paid APIs!
208
+ ### 🔐 OAuth (Bring Your Subscription)
725
209
 
726
- The cost display is a "savings tracker" to help you understand your usage patterns and optimization opportunities.
210
+ Claude Code · Antigravity · Codex · GitHub Copilot · Cursor · Kiro AI
727
211
 
728
- </details>
212
+ ### 🆓 Free Tier (with API key)
729
213
 
730
- <details>
731
- <summary><b>💳 Will I be charged by kRouter?</b></summary>
214
+ Cloudflare Workers AI · Vertex AI · Gemini · Ollama · OpenRouter · BytePlus · Atomesus · NVIDIA NIM
732
215
 
733
- **No.** kRouter is free, open-source software that runs on your own computer. It never charges you anything.
216
+ ### 🆓 Free Proxy (no auth or included key)
734
217
 
735
- **You only pay:**
736
- - ✅ **Subscription providers** (Claude Code $20/mo, Codex $20-200/mo) → Pay them directly on their websites
737
- - ✅ **Cheap providers** (GLM, MiniMax) → Pay them directly, kRouter just routes your requests
738
- - ❌ **kRouter itself** → **Never charges anything, ever**
218
+ OpenCode Free · MiMo Free
739
219
 
740
- kRouter is a local proxy/router. It doesn't have your credit card, can't send invoices, and has no billing system. It's completely free software.
741
-
742
- </details>
743
-
744
- <details>
745
- <summary><b>🆓 Are FREE providers really unlimited?</b></summary>
746
-
747
- **Yes!** The current FREE providers (Kiro, OpenCode Free, Vertex) are genuinely free with **no hidden charges**.
748
-
749
- These are free services offered by those respective companies:
750
- - **Kiro AI**: Free unlimited Claude 4.5 + GLM-5 + MiniMax via AWS Builder ID / Google / GitHub OAuth
751
- - **OpenCode Free**: No-auth passthrough proxy, models auto-fetched from `opencode.ai/zen/v1/models`
752
- - **Vertex AI**: $300 free credits for new Google Cloud accounts (90 days)
753
-
754
- kRouter just routes your requests to them - there's no "catch" or future billing. They're truly free services, and kRouter makes them easy to use with fallback support.
755
-
756
- **Discontinued free tiers (no longer recommended):**
757
- - ❌ **iFlow**: Was free unlimited, now changed to paid (2026)
758
- - ❌ **Qwen Code**: Free OAuth tier discontinued by Alibaba on 2026-04-15
759
- - ❌ **Gemini CLI**: Still works, but using it with non-CLI tools (Claude, Codex, Cursor...) may result in account bans — only use if you stick to Gemini CLI itself
760
-
761
- </details>
762
-
763
- <details>
764
- <summary><b>💰 How do I minimize my actual AI costs?</b></summary>
765
-
766
- **Free-First Strategy:**
767
-
768
- 1. **Start with 100% free combo:**
769
- ```
770
- 1. gc/gemini-3-flash (180K/month free from Google)
771
- 2. if/kimi-k2-thinking (unlimited free from iFlow)
772
- 3. qw/qwen3-coder-plus (unlimited free from Qwen)
773
- ```
774
- **Cost: $0/month**
775
-
776
- 2. **Add cheap backup** only if you need it:
777
- ```
778
- 4. glm/glm-4.7 ($0.6/1M tokens)
779
- ```
780
- **Additional cost: Only pay for what you actually use**
781
-
782
- 3. **Use subscription providers last:**
783
- - Only if you already have them
784
- - kRouter helps maximize their value through quota tracking
785
-
786
- **Result:** Most users can operate at $0/month using only free tiers!
787
-
788
- </details>
789
-
790
- <details>
791
- <summary><b>📈 What if my usage suddenly spikes?</b></summary>
792
-
793
- kRouter's smart fallback prevents surprise charges:
794
-
795
- **Scenario:** You're on a coding sprint and blow through your quotas
796
-
797
- **Without kRouter:**
798
- - ❌ Hit rate limit → Work stops → Frustration
799
- - ❌ Or: Accidentally rack up huge API bills
800
-
801
- **With kRouter:**
802
- - ✅ Subscription hits limit → Auto-fallback to cheap tier
803
- - ✅ Cheap tier gets expensive → Auto-fallback to free tier
804
- - ✅ Never stop coding → Predictable costs
220
+ ### 🔑 API Key Providers (40+)
805
221
 
806
- **You're in control:** Set spending limits per provider in dashboard, and kRouter respects them.
222
+ OpenAI · Anthropic · GLM · Kimi · MiniMax · DeepSeek · Groq · xAI · Mistral · Perplexity · Together AI · Fireworks · Cerebras · Cohere · SiliconFlow · Hyperbolic · Nebius · Chutes · and 20+ more
807
223
 
808
- </details>
224
+ 📖 **Full provider setup guide → [krouter.kodelyht.com](https://krouter.kodelyht.com)**
809
225
 
810
226
  ---
811
227
 
812
228
  ## 📖 Setup Guide
813
229
 
814
- <details>
815
- <summary><b>🔐 Subscription Providers (Maximize Value)</b></summary>
816
-
817
- ### Claude Code (Pro/Max)
818
-
819
- ```bash
820
- Dashboard → Providers → Connect Claude Code
821
- → OAuth login → Auto token refresh
822
- → 5-hour + weekly quota tracking
823
-
824
- Models:
825
- cc/claude-opus-4-7
826
- cc/claude-opus-4-6
827
- cc/claude-sonnet-4-6
828
- cc/claude-haiku-4-5-20251001
829
- ```
830
-
831
- **Pro Tip:** Use Opus for complex tasks, Sonnet for speed. kRouter tracks quota per model!
832
-
833
- ### OpenAI Codex (Plus/Pro)
834
-
835
- ```bash
836
- Dashboard → Providers → Connect Codex
837
- → OAuth login (port 1455)
838
- → 5-hour + weekly reset
839
-
840
- Models:
841
- cx/gpt-5.5
842
- cx/gpt-5.4
843
- cx/gpt-5.3-codex
844
- cx/gpt-5.2-codex
845
- ```
846
-
847
- ### GitHub Copilot
230
+ ### Step 1 · Install
848
231
 
849
232
  ```bash
850
- Dashboard → Providers → Connect GitHub
851
- → OAuth via GitHub
852
- → Monthly reset (1st of month)
853
-
854
- Models:
855
- gh/gpt-5.4
856
- gh/claude-opus-4.7
857
- gh/claude-sonnet-4.6
858
- gh/gemini-3.1-pro-preview
859
- gh/grok-code-fast-1
233
+ npm install -g @sifxprime/krouter
860
234
  ```
861
235
 
862
- ### Cursor IDE
236
+ ### Step 2 · Start in Background
863
237
 
864
238
  ```bash
865
- Dashboard → Providers → Connect Cursor
866
- → OAuth login
867
- → Monthly subscription
868
-
869
- Models:
870
- cu/claude-4.6-opus-max
871
- cu/claude-4.5-sonnet-thinking
872
- cu/gpt-5.3-codex
239
+ krouter -t
873
240
  ```
874
241
 
875
- </details>
876
-
877
- <details>
878
- <summary><b>💰 Cheap Providers (Backup)</b></summary>
879
-
880
- ### GLM-5.1 / GLM-4.7 (Daily reset, $0.6/1M)
242
+ You'll see a tray icon in your menu bar. Right-click for **Open Dashboard** or **Quit**.
881
243
 
882
- 1. Sign up: [Zhipu AI](https://open.bigmodel.cn/)
883
- 2. Get API key from Coding Plan
884
- 3. Dashboard → Add API Key:
885
- - Provider: `glm`
886
- - API Key: `your-key`
244
+ ### Step 3 · Add a Provider
887
245
 
888
- **Use:** `glm/glm-5.1`, `glm/glm-5`, `glm/glm-4.7`
246
+ 1. Open **[http://localhost:20128/dashboard](http://localhost:20128/dashboard)**
247
+ 2. Click **Providers → Add** and choose one (Cloudflare Workers AI is a great free start)
248
+ 3. Paste your API key or OAuth login
249
+ 4. Click **Test Connection** → done!
889
250
 
890
- **Pro Tip:** Coding Plan offers 3× quota at 1/7 cost! Reset daily 10:00 AM.
251
+ ### Step 4 · Point Your AI Tool at kRouter
891
252
 
892
- ### MiniMax M2.7 (5h reset, $0.20/1M)
893
-
894
- 1. Sign up: [MiniMax](https://www.minimax.io/)
895
- 2. Get API key
896
- 3. Dashboard → Add API Key
253
+ ```text
254
+ Endpoint: http://localhost:20128/v1
255
+ API Key: sk-krouter-XXXX (from Dashboard → API Keys)
256
+ Model: kr/claude-sonnet-4.5 (or any provider/model)
257
+ ```
897
258
 
898
- **Use:** `minimax/MiniMax-M2.7`, `minimax/MiniMax-M2.5`
259
+ Works with any OpenAI-compatible client.
899
260
 
900
- **Pro Tip:** Cheapest option for long context (1M tokens)!
261
+ 📖 **Detailed integration guide (Claude Code, Cursor, Cline, and more) → [krouter.kodelyht.com](https://krouter.kodelyht.com)**
901
262
 
902
- ### Kimi K2.5 ($9/month flat)
263
+ ---
903
264
 
904
- 1. Subscribe: [Moonshot AI](https://platform.moonshot.ai/)
905
- 2. Get API key
906
- 3. Dashboard → Add API Key
265
+ ## ⚙️ Environment Variables
907
266
 
908
- **Use:** `kimi/kimi-k2.5`, `kimi/kimi-k2.5-thinking`
267
+ | Variable | Default | Description |
268
+ |----------|---------|-------------|
269
+ | `PORT` | `20128` | Server port |
270
+ | `HOSTNAME` | `127.0.0.1` | Bind host |
271
+ | `DATA_DIR` | `~/.krouter` | Data directory (SQLite, certs, cache) |
272
+ | `NODE_ENV` | `production` | Runtime mode |
273
+ | `REQUIRE_API_KEY` | `false` | Enforce Bearer API key on `/v1/*` (recommended for public deploys) |
274
+ | `AUTH_COOKIE_SECURE` | `false` | Force `Secure` cookie (set behind HTTPS reverse proxy) |
275
+ | `HTTP_PROXY` / `HTTPS_PROXY` / `NO_PROXY` | — | Outbound proxy config |
909
276
 
910
- **Pro Tip:** Fixed $9/month for 10M tokens = $0.90/1M effective cost!
277
+ Full env reference → **[krouter.kodelyht.com](https://krouter.kodelyht.com)**
911
278
 
912
- </details>
279
+ ---
913
280
 
914
- <details>
915
- <summary><b>🆓 FREE Providers (Recommended)</b></summary>
281
+ ## 🚢 Deployment
916
282
 
917
- ### Kiro AI (Claude 4.5 + GLM-5 + MiniMax FREE)
283
+ ### VPS
918
284
 
919
285
  ```bash
920
- Dashboard → Connect Kiro
921
- → AWS Builder ID, AWS IAM Identity Center, Google, or GitHub
922
- → Unlimited usage
923
-
924
- Models:
925
- kr/claude-sonnet-4.5
926
- kr/claude-haiku-4.5
927
- kr/glm-5
928
- kr/MiniMax-M2.5
929
- kr/qwen3-coder-next
930
- kr/deepseek-3.2
286
+ npm install -g @sifxprime/krouter
287
+ export PORT=20128 HOSTNAME=0.0.0.0
288
+ krouter --skip-update
931
289
  ```
932
290
 
933
- **Pro Tip:** Best free option for Claude. No API key, no payment, fully unlimited.
291
+ Behind Nginx / Caddy + Cloudflare Tunnel for HTTPS.
934
292
 
935
- ### OpenCode Free (No auth, auto-fetch models)
293
+ ### Docker
936
294
 
937
295
  ```bash
938
- Dashboard → Connect OpenCode Free
939
- → No login required (passthrough proxy)
940
- → Models auto-fetched from opencode.ai/zen/v1/models
296
+ docker run -d -p 20128:20128 -v "$HOME/.krouter:/app/data" --name krouter sifxprime/krouter:latest
941
297
  ```
942
298
 
943
- **Pro Tip:** Fastest setup. Just connect and start coding.
944
-
945
- ### Vertex AI ($300 free credits for new GCP accounts)
299
+ ### PM2
946
300
 
947
301
  ```bash
948
- Dashboard → Connect Vertex AI
949
- → Upload Google Cloud Service Account JSON
950
- → Enable Vertex AI API in your GCP project
951
-
952
- Models:
953
- vertex/gemini-3.1-pro-preview
954
- vertex/gemini-3-flash-preview
955
- vertex/gemini-2.5-flash
956
-
957
- Vertex Partner (Anthropic / DeepSeek / GLM / Qwen via Vertex):
958
- vertex-partner/glm-5-maas
959
- vertex-partner/deepseek-v3.2-maas
960
- vertex-partner/qwen3-next-80b-a3b-thinking-maas
961
- ```
962
-
963
- **Pro Tip:** New Google Cloud accounts get $300 credits free for 90 days. Plenty for daily coding.
964
-
965
- </details>
966
-
967
- <details>
968
- <summary><b>🎨 Create Combos</b></summary>
969
-
970
- ### Example 1: Maximize Subscription → Cheap Backup
971
-
972
- ```
973
- Dashboard → Combos → Create New
974
-
975
- Name: premium-coding
976
- Models:
977
- 1. cc/claude-opus-4-7 (Subscription primary)
978
- 2. glm/glm-5.1 (Cheap backup, $0.6/1M)
979
- 3. minimax/MiniMax-M2.7 (Cheapest fallback, $0.20/1M)
980
-
981
- Use in CLI: premium-coding
982
-
983
- Monthly cost example (100M tokens):
984
- 80M via Claude (subscription): $0 extra
985
- 15M via GLM: $9
986
- 5M via MiniMax: $1
987
- Total: $10 + your subscription
988
- ```
989
-
990
- ### Example 2: Free-Only (Zero Cost)
991
-
992
- ```
993
- Name: free-combo
994
- Models:
995
- 1. kr/claude-sonnet-4.5 (Claude 4.5 free unlimited)
996
- 2. kr/glm-5 (GLM-5 free via Kiro)
997
- 3. vertex/gemini-3.1-pro-preview ($300 free credits)
998
-
999
- Cost: $0 forever (+ 20-40% token savings via RTK)!
1000
- ```
1001
-
1002
- </details>
1003
-
1004
- <details>
1005
- <summary><b>🔧 CLI Integration</b></summary>
1006
-
1007
- ### Cursor IDE
1008
-
1009
- ```
1010
- Settings → Models → Advanced:
1011
- OpenAI API Base URL: http://localhost:20128/v1
1012
- OpenAI API Key: [from 9router dashboard]
1013
- Model: cc/claude-opus-4-7
302
+ npm install -g @sifxprime/krouter pm2
303
+ pm2 start krouter --name krouter -- --skip-update
304
+ pm2 save
305
+ pm2 startup
1014
306
  ```
1015
307
 
1016
- Or use combo: `premium-coding`
1017
-
1018
- ### Claude Code
1019
-
1020
- Edit `~/.claude/config.json`:
308
+ ---
1021
309
 
1022
- ```json
1023
- {
1024
- "anthropic_api_base": "http://localhost:20128/v1",
1025
- "anthropic_api_key": "your-9router-api-key"
1026
- }
1027
- ```
310
+ ## 📡 API
1028
311
 
1029
- ### Codex CLI
312
+ ### Chat Completions
1030
313
 
1031
314
  ```bash
1032
- export OPENAI_BASE_URL="http://localhost:20128"
1033
- export OPENAI_API_KEY="your-9router-api-key"
1034
-
1035
- codex "your prompt"
1036
- ```
1037
-
1038
- ### OpenClaw
1039
-
1040
- **Option 1 — Dashboard (recommended):**
1041
-
1042
- ```
1043
- Dashboard → CLI Tools → OpenClaw → Select Model → Apply
1044
- ```
1045
-
1046
- **Option 2 — Manual:** Edit `~/.openclaw/openclaw.json`:
315
+ POST http://localhost:20128/v1/chat/completions
316
+ Authorization: Bearer <your-api-key>
317
+ Content-Type: application/json
1047
318
 
1048
- ```json
1049
319
  {
1050
- "agents": {
1051
- "defaults": {
1052
- "model": {
1053
- "primary": "krouter/kr/claude-sonnet-4.5"
1054
- }
1055
- }
1056
- },
1057
- "models": {
1058
- "providers": {
1059
- "krouter": {
1060
- "baseUrl": "http://127.0.0.1:20128/v1",
1061
- "apiKey": "sk_krouter",
1062
- "api": "openai-completions",
1063
- "models": [
1064
- {
1065
- "id": "kr/claude-sonnet-4.5",
1066
- "name": "Claude Sonnet 4.5 (Kiro Free)"
1067
- }
1068
- ]
1069
- }
1070
- }
1071
- }
320
+ "model": "kr/claude-sonnet-4.5",
321
+ "messages": [{"role": "user", "content": "Hello"}],
322
+ "stream": true
1072
323
  }
1073
324
  ```
1074
325
 
1075
- > **Note:** OpenClaw only works with local kRouter. Use `127.0.0.1` instead of `localhost` to avoid IPv6 resolution issues.
1076
-
1077
- ### Cline / Continue / RooCode
1078
-
1079
- ```
1080
- Provider: OpenAI Compatible
1081
- Base URL: http://localhost:20128/v1
1082
- API Key: [from dashboard]
1083
- Model: cc/claude-opus-4-7
1084
- ```
1085
-
1086
- </details>
1087
-
1088
- <details>
1089
- <summary><b>🚀 Deployment</b></summary>
1090
-
1091
- ### VPS Deployment
1092
-
1093
- ```bash
1094
- # Clone and install
1095
- git clone https://github.com/decolua/9router.git
1096
- cd krouter
1097
- npm install
1098
- npm run build
1099
-
1100
- # Configure
1101
- export JWT_SECRET="your-secure-secret-change-this"
1102
- export INITIAL_PASSWORD="your-password"
1103
- export DATA_DIR="/var/lib/9router"
1104
- export PORT="20128"
1105
- export HOSTNAME="0.0.0.0"
1106
- export NODE_ENV="production"
1107
- export NEXT_PUBLIC_BASE_URL="http://localhost:20128"
1108
- export NEXT_PUBLIC_CLOUD_URL="https://9router.com"
1109
- export API_KEY_SECRET="endpoint-proxy-api-key-secret"
1110
- export MACHINE_ID_SALT="endpoint-proxy-salt"
1111
-
1112
- # Start
1113
- npm run start
1114
-
1115
- # Or use PM2
1116
- npm install -g pm2
1117
- pm2 start npm --name 9router -- start
1118
- pm2 save
1119
- pm2 startup
1120
- ```
1121
-
1122
- ### Docker
1123
-
1124
- Published images (multi-platform `linux/amd64` + `linux/arm64`):
1125
- - Docker Hub: [`decolua/9router`](https://hub.docker.com/r/decolua/9router)
1126
- - GHCR: [`ghcr.io/decolua/9router`](https://github.com/decolua/9router/pkgs/container/9router)
1127
-
1128
- **Quick start (use published image):**
326
+ ### List Models
1129
327
 
1130
328
  ```bash
1131
- docker run -d \
1132
- --name 9router \
1133
- -p 20128:20128 \
1134
- -v "$HOME/.9router:/app/data" \
1135
- -e DATA_DIR=/app/data \
1136
- decolua/9router:latest
329
+ GET http://localhost:20128/v1/models
330
+ Authorization: Bearer <your-api-key>
1137
331
  ```
1138
332
 
1139
- → Open http://localhost:20128
1140
-
1141
- **Build from source (dev):**
333
+ Returns every configured provider + custom combo in OpenAI format.
1142
334
 
1143
- ```bash
1144
- git clone https://github.com/decolua/9router.git
1145
- cd 9router/app
1146
- docker build -t 9router .
1147
- docker run -d --name 9router -p 20128:20128 \
1148
- -v "$HOME/.9router:/app/data" -e DATA_DIR=/app/data 9router
1149
- ```
1150
-
1151
- **Container defaults:**
1152
- - `PORT=20128`
1153
- - `HOSTNAME=0.0.0.0`
335
+ ---
1154
336
 
1155
- **Useful commands:**
337
+ ## 🗑️ Uninstall
1156
338
 
1157
339
  ```bash
1158
- docker logs -f 9router
1159
- docker restart 9router
1160
- docker stop 9router && docker rm 9router
1161
- docker pull decolua/9router:latest # update to latest
340
+ # Stop kRouter (right-click tray → Quit, or pkill -f krouter)
341
+ npm uninstall -g @sifxprime/krouter
342
+ rm -rf ~/.krouter # optional: wipe database + certs
1162
343
  ```
1163
344
 
1164
- **Data persistence:** `$HOME/.9router/db/data.sqlite` on host ↔ `/app/data/db/data.sqlite` in container.
1165
-
1166
- ### Environment Variables
1167
-
1168
- | Variable | Default | Description |
1169
- |----------|---------|-------------|
1170
- | `JWT_SECRET` | Auto-generated (`~/.krouter/jwt-secret`) | JWT signing secret for dashboard auth cookie (override to share across instances) |
1171
- | `INITIAL_PASSWORD` | `123456` | First login password when no saved hash exists |
1172
- | `DATA_DIR` | `~/.krouter` | Main app data location (SQLite at `$DATA_DIR/db/data.sqlite`) |
1173
- | `PORT` | framework default | Service port (`20128` in examples) |
1174
- | `HOSTNAME` | framework default | Bind host (Docker defaults to `0.0.0.0`) |
1175
- | `NODE_ENV` | runtime default | Set `production` for deploy |
1176
- | `BASE_URL` | `http://localhost:20128` | Server-side internal base URL used by cloud sync jobs |
1177
- | `CLOUD_URL` | `https://9router.com` | Server-side cloud sync endpoint base URL |
1178
- | `NEXT_PUBLIC_BASE_URL` | `http://localhost:3000` | Backward-compatible/public base URL (prefer `BASE_URL` for server runtime) |
1179
- | `NEXT_PUBLIC_CLOUD_URL` | `https://9router.com` | Backward-compatible/public cloud URL (prefer `CLOUD_URL` for server runtime) |
1180
- | `API_KEY_SECRET` | `endpoint-proxy-api-key-secret` | HMAC secret for generated API keys |
1181
- | `MACHINE_ID_SALT` | `endpoint-proxy-salt` | Salt for stable machine ID hashing |
1182
- | `ENABLE_REQUEST_LOGS` | `false` | Enables request/response logs under `logs/` |
1183
- | `AUTH_COOKIE_SECURE` | `false` | Force `Secure` auth cookie (set `true` behind HTTPS reverse proxy) |
1184
- | `REQUIRE_API_KEY` | `false` | Enforce Bearer API key on `/v1/*` routes (recommended for internet-exposed deploys) |
1185
- | `HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY`, `NO_PROXY` | empty | Optional outbound proxy for upstream provider calls |
1186
-
1187
- Notes:
1188
- - Lowercase proxy variables are also supported: `http_proxy`, `https_proxy`, `all_proxy`, `no_proxy`.
1189
- - `.env` is not baked into Docker image (`.dockerignore`); inject runtime config with `--env-file` or `-e`.
1190
- - On Windows, `APPDATA` can be used for local storage path resolution.
1191
- - `INSTANCE_NAME` appears in older docs/env templates, but is currently not used at runtime.
1192
-
1193
- ### Runtime Files and Storage
1194
-
1195
- - Main app state: `${DATA_DIR}/db/data.sqlite` (SQLite — providers, combos, aliases, keys, settings, usage history)
1196
- - Auto backups: `${DATA_DIR}/db/backups/`
1197
- - Optional request/translator logs: `<repo>/logs/...` when `ENABLE_REQUEST_LOGS=true`
1198
- - Both `${DATA_DIR}` and `~/.9router` resolve to the same location in a Docker container — the symlink `/root/.9router -> /app/data` is created at build time.
1199
-
1200
- </details>
1201
-
1202
- ---
1203
-
1204
- ## 📊 Available Models
1205
-
1206
- <details>
1207
- <summary><b>View all available models</b></summary>
1208
-
1209
- **Claude Code (`cc/`)** - Pro/Max:
1210
- - `cc/claude-opus-4-7`
1211
- - `cc/claude-opus-4-6`
1212
- - `cc/claude-sonnet-4-6`
1213
- - `cc/claude-sonnet-4-5-20250929`
1214
- - `cc/claude-haiku-4-5-20251001`
1215
-
1216
- **Codex (`cx/`)** - Plus/Pro:
1217
- - `cx/gpt-5.5`
1218
- - `cx/gpt-5.4`
1219
- - `cx/gpt-5.3-codex`
1220
- - `cx/gpt-5.2-codex`
1221
- - `cx/gpt-5.1-codex-max`
1222
-
1223
- **GitHub Copilot (`gh/`)**:
1224
- - `gh/gpt-5.4`
1225
- - `gh/claude-opus-4.7`
1226
- - `gh/claude-sonnet-4.6`
1227
- - `gh/gemini-3.1-pro-preview`
1228
- - `gh/grok-code-fast-1`
1229
-
1230
- **Cursor (`cu/`)** - Subscription:
1231
- - `cu/claude-4.6-opus-max`
1232
- - `cu/claude-4.5-sonnet-thinking`
1233
- - `cu/gpt-5.3-codex`
1234
- - `cu/kimi-k2.5`
1235
-
1236
- **GLM (`glm/`)** - $0.6/1M:
1237
- - `glm/glm-5.1`
1238
- - `glm/glm-5`
1239
- - `glm/glm-4.7`
1240
-
1241
- **MiniMax (`minimax/`)** - $0.2/1M:
1242
- - `minimax/MiniMax-M2.7`
1243
- - `minimax/MiniMax-M2.5`
1244
-
1245
- **Kimi (`kimi/`)** - $9/mo flat:
1246
- - `kimi/kimi-k2.5`
1247
- - `kimi/kimi-k2.5-thinking`
1248
-
1249
- **Kiro (`kr/`)** - FREE unlimited:
1250
- - `kr/claude-sonnet-4.5`
1251
- - `kr/claude-haiku-4.5`
1252
- - `kr/glm-5`
1253
- - `kr/MiniMax-M2.5`
1254
- - `kr/qwen3-coder-next`
1255
- - `kr/deepseek-3.2`
1256
-
1257
- **OpenCode Free (`oc/`)** - FREE no-auth:
1258
- - Auto-fetched from `opencode.ai/zen/v1/models`
1259
-
1260
- **Vertex AI (`vertex/`)** - $300 free credits:
1261
- - `vertex/gemini-3.1-pro-preview`
1262
- - `vertex/gemini-3-flash-preview`
1263
- - `vertex/gemini-2.5-flash`
1264
- - `vertex-partner/glm-5-maas`
1265
- - `vertex-partner/deepseek-v3.2-maas`
1266
-
1267
- </details>
1268
-
1269
345
  ---
1270
346
 
1271
347
  ## 🐛 Troubleshooting
1272
348
 
1273
- **"Language model did not provide messages"**
1274
- - Provider quota exhausted → Check dashboard quota tracker
1275
- - Solution: Use combo fallback or switch to cheaper tier
349
+ **"No active credentials for provider"** — Add or reconnect the provider in Dashboard → Providers.
1276
350
 
1277
- **Rate limiting**
1278
- - Subscription quota out → Fallback to GLM/MiniMax
1279
- - Add combo: `cc/claude-opus-4-7 → glm/glm-5.1 → kr/claude-sonnet-4.5`
351
+ **Rate limited** — kRouter's Zenith engine will auto-fall back. To speed it up, add more accounts or configure a combo.
1280
352
 
1281
- **OAuth token expired**
1282
- - Auto-refreshed by kRouter
1283
- - If issues persist: Dashboard → Provider → Reconnect
353
+ **MITM cert errors** — Reinstall the root CA from Dashboard → CLI Tools → MITM.
1284
354
 
1285
- **High costs**
1286
- - Enable RTK in Dashboard → Endpoint settings (default ON, saves 20-40% tokens)
1287
- - Check usage stats in Dashboard
1288
- - Switch primary model to GLM/MiniMax
1289
- - Use free tier (Kiro, OpenCode Free, Vertex) for non-critical tasks
355
+ **Dashboard on wrong port** — `PORT=20128 krouter -t`
1290
356
 
1291
- **Dashboard opens on wrong port**
1292
- - Set `PORT=20128` and `NEXT_PUBLIC_BASE_URL=http://localhost:20128`
1293
-
1294
- **First login not working**
1295
- - Check `INITIAL_PASSWORD` in `.env`
1296
- - If unset, fallback password is `123456`
1297
-
1298
- **No request logs under `logs/`**
1299
- - Set `ENABLE_REQUEST_LOGS=true`
357
+ **Full troubleshooting guide → [krouter.kodelyht.com](https://krouter.kodelyht.com)**
1300
358
 
1301
359
  ---
1302
360
 
1303
361
  ## 🛠️ Tech Stack
1304
362
 
1305
- - **Runtime**: Node.js 20+
1306
- - **Framework**: Next.js 16
1307
- - **UI**: React 19 + Tailwind CSS 4
1308
- - **Database**: SQLite (better-sqlite3 / node:sqlite / sql.js fallback)
1309
- - **Streaming**: Server-Sent Events (SSE)
1310
- - **Auth**: OAuth 2.0 (PKCE) + JWT + API Keys
363
+ - **Runtime:** Node.js 20+
364
+ - **Framework:** Next.js 16
365
+ - **UI:** React 19 + Tailwind CSS 4
366
+ - **Database:** SQLite (better-sqlite3 / node:sqlite / sql.js)
367
+ - **Streaming:** Server-Sent Events (SSE)
368
+ - **Auth:** OAuth 2.0 (PKCE) + JWT + API Keys
1311
369
 
1312
370
  ---
1313
371
 
1314
- ## 📝 API Reference
1315
-
1316
- ### Chat Completions
1317
-
1318
- ```bash
1319
- POST http://localhost:20128/v1/chat/completions
1320
- Authorization: Bearer your-api-key
1321
- Content-Type: application/json
372
+ ## 📧 Links
1322
373
 
1323
- {
1324
- "model": "cc/claude-opus-4-6",
1325
- "messages": [
1326
- {"role": "user", "content": "Write a function to..."}
1327
- ],
1328
- "stream": true
1329
- }
1330
- ```
1331
-
1332
- ### List Models
1333
-
1334
- ```bash
1335
- GET http://localhost:20128/v1/models
1336
- Authorization: Bearer your-api-key
1337
-
1338
- → Returns all models + combos in OpenAI format
1339
- ```
1340
-
1341
- ## 📧 Support
1342
-
1343
- - **GitHub**: [github.com/sifxprime/krouter](https://github.com/sifxprime/krouter)
1344
- - **Issues**: [github.com/sifxprime/krouter/issues](https://github.com/sifxprime/krouter/issues)
1345
- - **npm**: [`@sifxprime/krouter`](https://www.npmjs.com/package/@sifxprime/krouter)
374
+ - **Website:** [krouter.kodelyht.com](https://krouter.kodelyht.com)
375
+ - **GitHub:** [github.com/sifxprime/krouter](https://github.com/sifxprime/krouter)
376
+ - **Issues:** [github.com/sifxprime/krouter/issues](https://github.com/sifxprime/krouter/issues)
377
+ - **npm:** [`@sifxprime/krouter`](https://www.npmjs.com/package/@sifxprime/krouter)
1346
378
 
1347
379
  ---
1348
380
 
1349
- ## 🙏 Acknowledgments
1350
-
1351
- Built on the shoulders of giants:
1352
-
1353
- - **[decolua/9router](https://github.com/decolua/9router)** — the upstream project this fork tracks. All core architecture, providers, dashboard, and ongoing feature work are authored upstream. kRouter only adds the security + stability hardening described in the [About this fork](#-about-this-fork--sifxprimekrouter) section.
1354
- - **[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)** — original Go implementation that inspired the upstream JavaScript port.
1355
- - **[RTK](https://github.com/rtk-ai/rtk)** ![Stars](https://img.shields.io/github/stars/rtk-ai/rtk?style=flat&color=yellow) — Rust token-saver. kRouter ports its compression pipeline to JS → **−20-40% input tokens** on every request.
1356
- - **[Caveman](https://github.com/JuliusBrussee/caveman)** ![Stars](https://img.shields.io/github/stars/JuliusBrussee/caveman?style=flat&color=yellow) by **[@JuliusBrussee](https://github.com/JuliusBrussee)** — viral *"why use many token when few token do trick"*. kRouter adapts its prompt → **−65% output tokens**.
381
+ ## 🙏 Credits
1357
382
 
1358
- Huge thanks to these authors — without their work, kRouter's token-saving features wouldn't exist. ⭐ them on GitHub!
383
+ kRouter is a hardened fork of the upstream **[decolua/9router](https://github.com/decolua/9router)**. Huge thanks to [@decolua](https://github.com/decolua) and the 9router contributors for the original project. ⭐ them on GitHub.
1359
384
 
1360
385
  ---
1361
386
 
1362
387
  ## 📄 License
1363
388
 
1364
- MIT License - see [LICENSE](LICENSE) for details.
389
+ MIT License — see [LICENSE](LICENSE) for details.
1365
390
 
1366
391
  ---
1367
392
 
1368
393
  <div align="center">
1369
- <sub>Built with ❤️ for developers who code 24/7</sub>
394
+ <sub>Built with ❤️ by <a href="https://krouter.kodelyht.com">Kodelyth AI Infrastructure</a></sub>
1370
395
  </div>