@sifxprime/krouter 0.5.82 → 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.
- package/README.md +166 -1141
- package/app/.next-cli-build/BUILD_ID +1 -1
- package/app/.next-cli-build/app-path-routes-manifest.json +4 -4
- package/app/.next-cli-build/build-manifest.json +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/environment/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/app/.next-cli-build/server/app/_not-found.rsc +3 -3
- package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/reset-password/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mitm/cert/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/live/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/callback.html +1 -1
- package/app/.next-cli-build/server/app/callback.rsc +3 -3
- package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/environment.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/environment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/environment.segments/!KGRhc2hib2FyZCk/dashboard/environment/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/environment.segments/!KGRhc2hib2FyZCk/dashboard/environment.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/environment.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/environment.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/environment.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/environment.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/environment.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/environment.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard.html +1 -1
- package/app/.next-cli-build/server/app/dashboard.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/index.html +1 -1
- package/app/.next-cli-build/server/app/index.rsc +3 -3
- package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/landing.html +1 -1
- package/app/.next-cli-build/server/app/landing.rsc +3 -3
- package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/login.html +1 -1
- package/app/.next-cli-build/server/app/login.rsc +4 -4
- package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app-paths-manifest.json +4 -4
- package/app/.next-cli-build/server/chunks/2365.js +1 -1
- package/app/.next-cli-build/server/chunks/706.js +1 -1
- package/app/.next-cli-build/server/chunks/7153.js +1 -1
- package/app/.next-cli-build/server/chunks/8361.js +1 -1
- package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/app/.next-cli-build/server/pages/404.html +1 -1
- package/app/.next-cli-build/server/pages/500.html +1 -1
- package/app/.next-cli-build/static/chunks/{1321-fd2a8d31b9361689.js → 1321-c6109e2292def00c.js} +1 -1
- package/app/cli/.build-home/.krouter/db/backups/{upgrade-0.5.77-to-0.5.78-0.5.78-20260629-161340 → upgrade-0.5.81-to-0.5.82-0.5.82-20260703-023738}/data.sqlite +0 -0
- package/app/cli/.build-home/.krouter/db/data.sqlite +0 -0
- package/app/cli/package.json +1 -1
- package/app/package.json +1 -1
- package/package.json +1 -1
- /package/app/.next-cli-build/static/{UTomCbHArtSiS_p1H_9KU → zONsDwNNNy06iFLvDZIX6}/_buildManifest.js +0 -0
- /package/app/.next-cli-build/static/{UTomCbHArtSiS_p1H_9KU → zONsDwNNNy06iFLvDZIX6}/_ssgManifest.js +0 -0
package/README.md
CHANGED
|
@@ -3,17 +3,18 @@
|
|
|
3
3
|
|
|
4
4
|
# kRouter — Kodelyth AI Infrastructure
|
|
5
5
|
|
|
6
|
-
**
|
|
6
|
+
**The universal AI router that saves 20–40% tokens and never stops working.**
|
|
7
7
|
|
|
8
|
-
|
|
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
|
[](https://www.npmjs.com/package/@sifxprime/krouter)
|
|
11
11
|
[](https://github.com/sifxprime/krouter)
|
|
12
|
+
[](https://krouter.kodelyht.com)
|
|
12
13
|
[](https://github.com/sifxprime/krouter/blob/main/LICENSE)
|
|
13
14
|
|
|
14
|
-
[
|
|
15
|
+
**[🌐 Website & Full Docs — krouter.kodelyht.com](https://krouter.kodelyht.com)**
|
|
15
16
|
|
|
16
|
-
[
|
|
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
|
-
##
|
|
25
|
+
## 🚀 Quick Start
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
```bash
|
|
28
|
+
# Install globally from npm
|
|
29
|
+
npm install -g @sifxprime/krouter
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
|
|
35
|
+
Dashboard opens at **[http://localhost:20128/dashboard](http://localhost:20128/dashboard)**.
|
|
39
36
|
|
|
40
|
-
|
|
37
|
+
Prefer running in the foreground with live logs? Just use `krouter` (no flag).
|
|
41
38
|
|
|
42
|
-
|
|
39
|
+
### CLI Options
|
|
43
40
|
|
|
44
|
-
|
|
41
|
+
```bash
|
|
42
|
+
krouter --help
|
|
45
43
|
|
|
46
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
62
|
+
### Docker
|
|
68
63
|
|
|
69
|
-
|
|
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
|
-
|
|
72
|
+
Then open **[http://localhost:20128/dashboard](http://localhost:20128/dashboard)**.
|
|
72
73
|
|
|
73
74
|
---
|
|
74
75
|
|
|
75
76
|
## 🤔 Why kRouter?
|
|
76
77
|
|
|
77
|
-
|
|
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
|
|
82
|
-
- ❌ Expensive APIs
|
|
83
|
-
- ❌
|
|
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**
|
|
88
|
-
- ✅ **
|
|
89
|
-
- ✅ **
|
|
90
|
-
- ✅ **
|
|
91
|
-
- ✅ **Universal**
|
|
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
|
-
│ •
|
|
111
|
+
│ • Live quota tracking │
|
|
109
112
|
│ • Auto token refresh │
|
|
110
113
|
└──────┬──────────────────────────────────────┘
|
|
111
114
|
│
|
|
112
|
-
├─→ [
|
|
113
|
-
│
|
|
114
|
-
├─→ [
|
|
115
|
-
│
|
|
116
|
-
└─→ [
|
|
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 kRouter: 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/krouter
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
Start the router in the background:
|
|
136
|
-
```bash
|
|
137
|
-
krouter -t
|
|
138
|
-
```
|
|
139
|
-
Dashboard opens at **http://localhost:20128/dashboard**.
|
|
140
|
-
|
|
141
|
-
**To upgrade later:**
|
|
142
|
-
```bash
|
|
143
|
-
npm install -g @sifxprime/krouter@latest
|
|
144
|
-
krouter -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 krouter)
|
|
150
|
-
# 2. Remove the package
|
|
151
|
-
npm uninstall -g @sifxprime/krouter
|
|
152
|
-
# 3. Clean up the local database and settings (optional)
|
|
153
|
-
rm -rf ~/.krouter
|
|
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/krouter.git
|
|
162
|
-
cd krouter
|
|
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/krouter`) 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/.krouter:/app/data" \
|
|
181
|
-
-e DATA_DIR=/app/data \
|
|
182
|
-
--name krouter \
|
|
183
|
-
sifxprime/krouter: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
|
-
|
|
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
|
-
|
|
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 / Cursor 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 `~/.krouter/` (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
|
-
|
|
|
239
|
-
|
|
240
|
-
| **
|
|
241
|
-
| **
|
|
242
|
-
| **
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
210
|
+
Claude Code · Antigravity · Codex · GitHub Copilot · Cursor · Kiro AI
|
|
727
211
|
|
|
728
|
-
|
|
212
|
+
### 🆓 Free Tier (with API key)
|
|
729
213
|
|
|
730
|
-
|
|
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
|
-
|
|
216
|
+
### 🆓 Free Proxy (no auth or included key)
|
|
734
217
|
|
|
735
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
###
|
|
236
|
+
### Step 2 · Start in Background
|
|
863
237
|
|
|
864
238
|
```bash
|
|
865
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
251
|
+
### Step 4 · Point Your AI Tool at kRouter
|
|
891
252
|
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
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
|
-
|
|
259
|
+
Works with any OpenAI-compatible client.
|
|
899
260
|
|
|
900
|
-
**
|
|
261
|
+
📖 **Detailed integration guide (Claude Code, Cursor, Cline, and more) → [krouter.kodelyht.com](https://krouter.kodelyht.com)**
|
|
901
262
|
|
|
902
|
-
|
|
263
|
+
---
|
|
903
264
|
|
|
904
|
-
|
|
905
|
-
2. Get API key
|
|
906
|
-
3. Dashboard → Add API Key
|
|
265
|
+
## ⚙️ Environment Variables
|
|
907
266
|
|
|
908
|
-
|
|
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
|
-
|
|
277
|
+
Full env reference → **[krouter.kodelyht.com](https://krouter.kodelyht.com)**
|
|
911
278
|
|
|
912
|
-
|
|
279
|
+
---
|
|
913
280
|
|
|
914
|
-
|
|
915
|
-
<summary><b>🆓 FREE Providers (Recommended)</b></summary>
|
|
281
|
+
## 🚢 Deployment
|
|
916
282
|
|
|
917
|
-
###
|
|
283
|
+
### VPS
|
|
918
284
|
|
|
919
285
|
```bash
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
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
|
-
|
|
291
|
+
Behind Nginx / Caddy + Cloudflare Tunnel for HTTPS.
|
|
934
292
|
|
|
935
|
-
###
|
|
293
|
+
### Docker
|
|
936
294
|
|
|
937
295
|
```bash
|
|
938
|
-
|
|
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
|
-
|
|
944
|
-
|
|
945
|
-
### Vertex AI ($300 free credits for new GCP accounts)
|
|
299
|
+
### PM2
|
|
946
300
|
|
|
947
301
|
```bash
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
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
|
-
|
|
1017
|
-
|
|
1018
|
-
### Claude Code
|
|
1019
|
-
|
|
1020
|
-
Edit `~/.claude/config.json`:
|
|
308
|
+
---
|
|
1021
309
|
|
|
1022
|
-
|
|
1023
|
-
{
|
|
1024
|
-
"anthropic_api_base": "http://localhost:20128/v1",
|
|
1025
|
-
"anthropic_api_key": "your-9router-api-key"
|
|
1026
|
-
}
|
|
1027
|
-
```
|
|
310
|
+
## 📡 API
|
|
1028
311
|
|
|
1029
|
-
###
|
|
312
|
+
### Chat Completions
|
|
1030
313
|
|
|
1031
314
|
```bash
|
|
1032
|
-
|
|
1033
|
-
|
|
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
|
-
"
|
|
1051
|
-
|
|
1052
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1132
|
-
|
|
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
|
-
|
|
1140
|
-
|
|
1141
|
-
**Build from source (dev):**
|
|
333
|
+
Returns every configured provider + custom combo in OpenAI format.
|
|
1142
334
|
|
|
1143
|
-
|
|
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
|
-
|
|
337
|
+
## 🗑️ Uninstall
|
|
1156
338
|
|
|
1157
339
|
```bash
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
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
|
-
**"
|
|
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
|
|
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
|
-
**
|
|
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
|
-
**
|
|
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
|
-
**
|
|
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
|
|
1306
|
-
- **Framework
|
|
1307
|
-
- **UI
|
|
1308
|
-
- **Database
|
|
1309
|
-
- **Streaming
|
|
1310
|
-
- **Auth
|
|
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
|
-
##
|
|
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
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
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
|
-
## 🙏
|
|
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)**  — Rust token-saver. kRouter ports its compression pipeline to JS → **−20-40% input tokens** on every request.
|
|
1356
|
-
- **[Caveman](https://github.com/JuliusBrussee/caveman)**  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
|
|
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
|
|
389
|
+
MIT License — see [LICENSE](LICENSE) for details.
|
|
1365
390
|
|
|
1366
391
|
---
|
|
1367
392
|
|
|
1368
393
|
<div align="center">
|
|
1369
|
-
<sub>Built with ❤️
|
|
394
|
+
<sub>Built with ❤️ by <a href="https://krouter.kodelyht.com">Kodelyth AI Infrastructure</a></sub>
|
|
1370
395
|
</div>
|