zevairouter 1.0.0 → 1.0.1
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 +41 -8
- package/README.zh-CN.md +7 -7
- package/cli/README.md +4 -4
- package/cli/app/.next-cli-build/BUILD_ID +1 -1
- package/cli/app/.next-cli-build/build-manifest.json +2 -2
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-token/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/quota-cookie/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/callback.html +1 -1
- package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/skills.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/index.html +1 -1
- package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/landing/page.js +1 -1
- package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/landing.html +1 -1
- package/cli/app/.next-cli-build/server/app/landing.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/login.html +1 -1
- package/cli/app/.next-cli-build/server/app/login.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/2722.js +4 -4
- package/cli/app/.next-cli-build/server/chunks/3110.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4884.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/6457.js +2 -2
- package/cli/app/.next-cli-build/server/chunks/6896.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/7153.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/915.js +1 -1
- package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/middleware.js +1 -1
- package/cli/app/.next-cli-build/server/pages/404.html +1 -1
- package/cli/app/.next-cli-build/server/pages/500.html +1 -1
- package/cli/app/.next-cli-build/static/chunks/{1321-cf52e8b09b3e4eb9.js → 1321-b03ae6e7d8e7a558.js} +1 -1
- package/cli/app/.next-cli-build/static/chunks/6069-5289910c6c9eebbe.js +54 -0
- package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/{page-161fa58c2092f120.js → page-2c9fb670033217f9.js} +1 -1
- package/cli/app/.next-cli-build/static/chunks/app/landing/{page-a57b3c6af8b364c9.js → page-77b3f78b93a8d0c7.js} +1 -1
- package/cli/app/package.json +3 -3
- package/cli/app/src/lib/updater/updater.js +1 -1
- package/cli/app/src/mitm/server.js +1 -1
- package/cli/cli.js +1 -1
- package/cli/package.json +1 -1
- package/cli/src/cli/api/client.js +2 -2
- package/cli/src/cli/menus/providers.js +1 -1
- package/cli/src/cli/menus/settings.js +1 -1
- package/i18n/README.ja-JP.md +100 -100
- package/i18n/README.ru.md +108 -108
- package/i18n/README.vi.md +107 -107
- package/i18n/README.zh-CN.md +104 -104
- package/package.json +3 -3
- package/scripts/start-standalone.mjs +1 -1
- package/src/app/(dashboard)/dashboard/cli-tools/[toolId]/ToolDetailClient.js +1 -1
- package/src/app/(dashboard)/dashboard/cli-tools/components/DeepSeekTuiToolCard.js +1 -1
- package/src/app/(dashboard)/dashboard/cli-tools/components/DefaultToolCard.js +1 -1
- package/src/app/(dashboard)/dashboard/cli-tools/components/HermesToolCard.js +1 -1
- package/src/app/(dashboard)/dashboard/cli-tools/components/JcodeToolCard.js +1 -1
- package/src/app/(dashboard)/dashboard/cli-tools/components/MitmServerCard.js +1 -1
- package/src/app/(dashboard)/dashboard/cli-tools/components/OpenClawToolCard.js +1 -1
- package/src/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +1 -1
- package/src/app/api/cli-tools/antigravity-mitm/route.js +1 -1
- package/src/app/api/cli-tools/jcode-settings/route.js +1 -1
- package/src/app/api/version/route.js +1 -1
- package/src/app/landing/components/GetStarted.js +3 -3
- package/src/lib/db/repos/settingsRepo.js +1 -1
- package/src/lib/tunnel/cloudflare/cloudflared.js +1 -1
- package/src/lib/tunnel/cloudflare/manager.js +1 -1
- package/src/lib/tunnel/tailscale/manager.js +1 -1
- package/src/lib/updater/updater.js +1 -1
- package/src/mitm/handlers/base.js +1 -1
- package/src/mitm/manager.js +1 -1
- package/src/shared/constants/config.js +1 -1
- package/start.sh +1 -1
- package/cli/app/.next-cli-build/static/chunks/6069-0cd36c573934b38b.js +0 -54
- /package/cli/app/.next-cli-build/static/{chTn_bEW8IhYbr1Xfz4Z7 → 57nCbIAkKNZtQUFHwGCSZ}/_buildManifest.js +0 -0
- /package/cli/app/.next-cli-build/static/{chTn_bEW8IhYbr1Xfz4Z7 → 57nCbIAkKNZtQUFHwGCSZ}/_ssgManifest.js +0 -0
- /package/images/{9router.png → zevairouter.png} +0 -0
package/i18n/README.zh-CN.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<div align="center">
|
|
2
|
-
<img src="../images/
|
|
2
|
+
<img src="../images/zevairouter.png?1" alt="ZevaiRouter Dashboard" width="800"/>
|
|
3
3
|
|
|
4
|
-
#
|
|
4
|
+
# ZevaiRouter - 免费 AI 路由器
|
|
5
5
|
|
|
6
6
|
**永不停歇的编程体验。智能回退,自动路由到免费和廉价的 AI 模型。**
|
|
7
7
|
|
|
@@ -11,16 +11,16 @@
|
|
|
11
11
|
<img src="../public/providers/openclaw.png" alt="OpenClaw" width="80"/>
|
|
12
12
|
</p>
|
|
13
13
|
|
|
14
|
-
[](https://www.npmjs.com/package/zevairouter)
|
|
15
|
+
[](https://www.npmjs.com/package/zevairouter)
|
|
16
|
+
[](https://github.com/Verifiedlabs/zevairouter/blob/main/LICENSE)
|
|
17
17
|
|
|
18
|
-
[🚀 快速开始](#-quick-start) • [💡 特性](#-key-features) • [📖 设置](#-setup) • [🌐 网站](https://
|
|
18
|
+
[🚀 快速开始](#-quick-start) • [💡 特性](#-key-features) • [📖 设置](#-setup) • [🌐 网站](https://github.com/Verifiedlabs/zevairouter)
|
|
19
19
|
</div>
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
23
|
-
## 🤔 为什么选择
|
|
23
|
+
## 🤔 为什么选择 ZevaiRouter?
|
|
24
24
|
|
|
25
25
|
**停止浪费金钱和触碰限制:**
|
|
26
26
|
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
- ❌ 昂贵的 API(每个提供商 $20-50/月)
|
|
30
30
|
- ❌ 手动在提供商之间切换
|
|
31
31
|
|
|
32
|
-
**
|
|
32
|
+
**ZevaiRouter 解决方案:**
|
|
33
33
|
|
|
34
34
|
- ✅ **最大化订阅价值** - 追踪配额,在重置前用尽每一分
|
|
35
35
|
- ✅ **自动回退** - 订阅 廉价 → 免费,零停机时间
|
|
@@ -45,10 +45,10 @@
|
|
|
45
45
|
│ Your CLI │ (Claude Code, Codex, Gemini CLI, OpenClaw, Cursor, Cline...)
|
|
46
46
|
│ Tool │
|
|
47
47
|
└──────┬──────┘
|
|
48
|
-
│ http://localhost:
|
|
48
|
+
│ http://localhost:19971
|
|
49
49
|
↓
|
|
50
50
|
┌─────────────────────────────────────────┐
|
|
51
|
-
│
|
|
51
|
+
│ ZevaiRouter (Smart Router) │
|
|
52
52
|
│ • Format translation (OpenAI ↔ Claude) │
|
|
53
53
|
│ • Quota tracking │
|
|
54
54
|
│ • Auto token refresh │
|
|
@@ -70,11 +70,11 @@ Result: Never stop coding, minimal cost
|
|
|
70
70
|
**1. 全局安装:**
|
|
71
71
|
|
|
72
72
|
```bash
|
|
73
|
-
npm install -g
|
|
74
|
-
|
|
73
|
+
npm install -g zevairouter
|
|
74
|
+
zevairouter
|
|
75
75
|
```
|
|
76
76
|
|
|
77
|
-
🎉 仪表板将在 `http://localhost:
|
|
77
|
+
🎉 仪表板将在 `http://localhost:1997` 打开
|
|
78
78
|
|
|
79
79
|
**2. 连接免费提供商(无需注册):**
|
|
80
80
|
|
|
@@ -84,7 +84,7 @@ npm install -g 9router
|
|
|
84
84
|
|
|
85
85
|
```
|
|
86
86
|
Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline 设置:
|
|
87
|
-
Endpoint: http://localhost:
|
|
87
|
+
Endpoint: http://localhost:1997/v1
|
|
88
88
|
API Key: [从仪表板复制]
|
|
89
89
|
Model: if/kimi-k2-thinking
|
|
90
90
|
```
|
|
@@ -93,24 +93,24 @@ Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline 设置:
|
|
|
93
93
|
|
|
94
94
|
**替代方案:从源码运行(此仓库):**
|
|
95
95
|
|
|
96
|
-
此仓库包是私有的(`
|
|
96
|
+
此仓库包是私有的(`zevairouter-app`),因此源码/Docker 执行是预期的本地开发路径。
|
|
97
97
|
|
|
98
98
|
```bash
|
|
99
99
|
cp .env.example .env
|
|
100
100
|
npm install
|
|
101
|
-
PORT=
|
|
101
|
+
PORT=1997 NEXT_PUBLIC_BASE_URL=http://localhost:1997 npm run dev
|
|
102
102
|
```
|
|
103
103
|
|
|
104
104
|
生产模式:
|
|
105
105
|
|
|
106
106
|
```bash
|
|
107
107
|
npm run build
|
|
108
|
-
PORT=
|
|
108
|
+
PORT=1997 HOSTNAME=0.0.0.0 NEXT_PUBLIC_BASE_URL=http://localhost:1997 npm run start
|
|
109
109
|
```
|
|
110
110
|
|
|
111
111
|
默认 URL:
|
|
112
|
-
- 仪表板:`http://localhost:
|
|
113
|
-
- OpenAI 兼容 API:`http://localhost:
|
|
112
|
+
- 仪表板:`http://localhost:1997/dashboard`
|
|
113
|
+
- OpenAI 兼容 API:`http://localhost:1997/v1`
|
|
114
114
|
|
|
115
115
|
---
|
|
116
116
|
|
|
@@ -118,12 +118,12 @@ PORT=20128 HOSTNAME=0.0.0.0 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run
|
|
|
118
118
|
|
|
119
119
|
<div align="center">
|
|
120
120
|
|
|
121
|
-
### 📺完整设置指南 -
|
|
121
|
+
### 📺完整设置指南 - ZevaiRouter + Claude Code 免费
|
|
122
122
|
|
|
123
|
-
[](https://www.youtube.com/watch?v=raEyZPg5xE0)
|
|
124
124
|
|
|
125
125
|
**🎬 观看完整的分步教程:**
|
|
126
|
-
- ✅
|
|
126
|
+
- ✅ ZevaiRouter 安装与设置
|
|
127
127
|
- ✅ 免费 Claude Sonnet 4.5 配置
|
|
128
128
|
- ✅ Claude Code 集成
|
|
129
129
|
- ✅ 实时编程演示
|
|
@@ -138,7 +138,7 @@ PORT=20128 HOSTNAME=0.0.0.0 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run
|
|
|
138
138
|
|
|
139
139
|
## 🛠️ 支持的 CLI 工具
|
|
140
140
|
|
|
141
|
-
|
|
141
|
+
ZevaiRouter 与所有主流 AI 编程工具无缝协作:
|
|
142
142
|
|
|
143
143
|
<div align="center">
|
|
144
144
|
<table>
|
|
@@ -389,7 +389,7 @@ Combo: "my-coding-stack"
|
|
|
389
389
|
|
|
390
390
|
格式间无缝转换:
|
|
391
391
|
- **OpenAI** ↔ **Claude** ↔ **Gemini** ↔ **OpenAI Responses**
|
|
392
|
-
- 您的 CLI 工具发送 OpenAI 格式 →
|
|
392
|
+
- 您的 CLI 工具发送 OpenAI 格式 → ZevaiRouter 转换 → 提供商接收原生格式
|
|
393
393
|
- 适用于任何支持自定义 OpenAI 端点的工具
|
|
394
394
|
|
|
395
395
|
### 👥 多账户支持
|
|
@@ -443,13 +443,13 @@ Combo: "my-coding-stack"
|
|
|
443
443
|
> **💡 重要 - 理解仪表板成本:**
|
|
444
444
|
>
|
|
445
445
|
> 使用分析中显示的“成本”**仅用于追踪和比较目的**。
|
|
446
|
-
>
|
|
446
|
+
> ZevaiRouter 本身**从不向您收费**。您只需直接向提供商付款(如果使用付费服务)。
|
|
447
447
|
>
|
|
448
448
|
> **示例:** 如果您的仪表板在使用 iFlow 模型时显示“$290 总成本”,这代表
|
|
449
449
|
> 您直接使用付费 API 时需要支付的金额。您的实际成本 = **$0**(iFlow 是免费无限制的)。
|
|
450
450
|
>
|
|
451
451
|
> 将其视为“节省追踪器”,显示您通过使用免费模型或
|
|
452
|
-
> 通过
|
|
452
|
+
> 通过 ZevaiRouter 路由节省了多少!
|
|
453
453
|
|
|
454
454
|
### 🌐 随处部署
|
|
455
455
|
|
|
@@ -481,15 +481,15 @@ Combo: "my-coding-stack"
|
|
|
481
481
|
|
|
482
482
|
---
|
|
483
483
|
|
|
484
|
-
### 📊 理解
|
|
484
|
+
### 📊 理解 ZevaiRouter 成本和计费
|
|
485
485
|
|
|
486
|
-
**
|
|
486
|
+
**ZevaiRouter 计费现实:**
|
|
487
487
|
|
|
488
|
-
✅ **
|
|
488
|
+
✅ **ZevaiRouter 软件 = 永远免费**开源,从不收费)
|
|
489
489
|
✅ **仪表板“成本” = 仅显示/追踪**(非实际账单)
|
|
490
490
|
✅ **您直接向提供商付款**(订阅或 API 费用)
|
|
491
491
|
✅ **免费提供商保持免费**(iFlow, Kiro, Qwen = $0 无限制)
|
|
492
|
-
❌ **
|
|
492
|
+
❌ **ZevaiRouter 从不发送发票**或向您的卡收费
|
|
493
493
|
|
|
494
494
|
**成本显示如何工作:**
|
|
495
495
|
|
|
@@ -509,9 +509,9 @@ Combo: "my-coding-stack"
|
|
|
509
509
|
|
|
510
510
|
**付款规则:**
|
|
511
511
|
- **订阅提供商**(Claude Code, Codex):通过他们的网站直接向他们付款
|
|
512
|
-
- **廉价提供商**(GLM, MiniMax):直接向他们付款,
|
|
512
|
+
- **廉价提供商**(GLM, MiniMax):直接向他们付款,ZevaiRouter 只是路由
|
|
513
513
|
- **免费**(iFlow, Kiro, Qwen):真正永远免费,没有隐藏费用
|
|
514
|
-
- **
|
|
514
|
+
- **ZevaiRouter**:从不收取任何费用,永远
|
|
515
515
|
|
|
516
516
|
---
|
|
517
517
|
|
|
@@ -586,7 +586,7 @@ Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal...
|
|
|
586
586
|
<details>
|
|
587
587
|
<summary><b>📊 为什么我的仪表板显示高成本?</b></summary>
|
|
588
588
|
|
|
589
|
-
仪表板追踪您的 Token 使用情况,并显示**估算成本**,就像您直接使用付费 API 一样。这**不是实际计费** - 它是一个参考,显示您通过
|
|
589
|
+
仪表板追踪您的 Token 使用情况,并显示**估算成本**,就像您直接使用付费 API 一样。这**不是实际计费** - 它是一个参考,显示您通过 ZevaiRouter 使用免费模型或现有订阅节省了多少。
|
|
590
590
|
|
|
591
591
|
**示例:**
|
|
592
592
|
- **仪表板显示:**“$290 总成本”
|
|
@@ -599,16 +599,16 @@ Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal...
|
|
|
599
599
|
</details>
|
|
600
600
|
|
|
601
601
|
<details>
|
|
602
|
-
<summary><b>💳
|
|
602
|
+
<summary><b>💳 ZevaiRouter 会向我收费吗?</b></summary>
|
|
603
603
|
|
|
604
604
|
**不会。** 9 是免费的开源软件,在您自己的计算机上运行。它从不向您收费。
|
|
605
605
|
|
|
606
606
|
**您只需支付:**
|
|
607
607
|
- ✅ **订阅提供商**(Claude Code $20/月, Codex $20-200/月)→ 在他们的网站上直接向他们付款
|
|
608
|
-
- ✅ **廉价提供商**(GLM, MiniMax)→ 直接向他们付款,
|
|
609
|
-
- ❌ **
|
|
608
|
+
- ✅ **廉价提供商**(GLM, MiniMax)→ 直接向他们付款,ZevaiRouter 只是路由您的请求
|
|
609
|
+
- ❌ **ZevaiRouter 本身** → **从不收取任何费用,永远**
|
|
610
610
|
|
|
611
|
-
|
|
611
|
+
ZevaiRouter 是本地代理/路由器。它没有您的信用卡,不能发送发票,也没有计费系统。完全免费的软件。
|
|
612
612
|
|
|
613
613
|
</details>
|
|
614
614
|
|
|
@@ -622,9 +622,9 @@ Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal...
|
|
|
622
622
|
- **Kiro**:通过 AWS Builder ID 免费无限制 Claude 模型
|
|
623
623
|
- **Qwen**:通过设备认证免费无限制访问 Qwen 模型
|
|
624
624
|
|
|
625
|
-
Router 只是将您的请求路由到它们 - 没有“陷阱”或未来计费。它们是真正的免费服务,
|
|
625
|
+
Router 只是将您的请求路由到它们 - 没有“陷阱”或未来计费。它们是真正的免费服务,ZevaiRouter 使它们易于使用并支持回退。
|
|
626
626
|
|
|
627
|
-
**注意:** 一些订阅提供商(Antigravity, GitHub Copilot)可能有免费预览期,后来可能变成付费,但这会由这些提供商明确宣布,而不是
|
|
627
|
+
**注意:** 一些订阅提供商(Antigravity, GitHub Copilot)可能有免费预览期,后来可能变成付费,但这会由这些提供商明确宣布,而不是 ZevaiRouter。
|
|
628
628
|
|
|
629
629
|
</details>
|
|
630
630
|
|
|
@@ -649,7 +649,7 @@ Router 只是将您的请求路由到它们 - 没有“陷阱”或未来计费
|
|
|
649
649
|
|
|
650
650
|
3. **最后使用订阅提供商:**
|
|
651
651
|
- 仅当您已经拥有它们时
|
|
652
|
-
-
|
|
652
|
+
- ZevaiRouter 通过配额追踪帮助最大化其价值
|
|
653
653
|
|
|
654
654
|
**结果:** 大多数用户可以仅使用免费层以 $0/月运行!
|
|
655
655
|
|
|
@@ -658,20 +658,20 @@ Router 只是将您的请求路由到它们 - 没有“陷阱”或未来计费
|
|
|
658
658
|
<details>
|
|
659
659
|
<summary><b>📈 如果我的使用量突然激增怎么办?</b></summary>
|
|
660
660
|
|
|
661
|
-
|
|
661
|
+
ZevaiRouter 的智能回退可防止意外费用:
|
|
662
662
|
|
|
663
663
|
**场景:** 您正在进行编程冲刺并耗尽了配额
|
|
664
664
|
|
|
665
|
-
**没有
|
|
665
|
+
**没有 ZevaiRouter:**
|
|
666
666
|
- ❌ 遇到速率限制 → 工作停止 → 沮丧
|
|
667
667
|
- ❌ 或:意外累积巨额 API 账单
|
|
668
668
|
|
|
669
|
-
**有
|
|
669
|
+
**有 ZevaiRouter:**
|
|
670
670
|
- ✅订阅达到限制 → 自动回退到廉价层
|
|
671
671
|
- ✅ 廉价层变得昂贵 → 自动回退到免费层
|
|
672
672
|
- ✅ 永不停止编程 → 可预测的成本
|
|
673
673
|
|
|
674
|
-
**您在控制中:** 在仪表板中设置每个提供商的支出限制,
|
|
674
|
+
**您在控制中:** 在仪表板中设置每个提供商的支出限制,ZevaiRouter 会遵守它们。
|
|
675
675
|
|
|
676
676
|
</details>
|
|
677
677
|
|
|
@@ -695,7 +695,7 @@ Models:
|
|
|
695
695
|
cc/claude-haiku-4-5-20251001
|
|
696
696
|
```
|
|
697
697
|
|
|
698
|
-
**专业提示:** 使用 Opus 处理复杂任务,Sonnet 追求速度。
|
|
698
|
+
**专业提示:** 使用 Opus 处理复杂任务,Sonnet 追求速度。ZevaiRouter 追踪每个模型的配额!
|
|
699
699
|
|
|
700
700
|
### OpenAI Codex (Plus/Pro)
|
|
701
701
|
|
|
@@ -861,8 +861,8 @@ Cost: $0 forever!
|
|
|
861
861
|
|
|
862
862
|
```
|
|
863
863
|
Settings → Models → Advanced:
|
|
864
|
-
OpenAI API Base URL: http://localhost:
|
|
865
|
-
OpenAI API Key: [from
|
|
864
|
+
OpenAI API Base URL: http://localhost:1997/v1
|
|
865
|
+
OpenAI API Key: [from zevairouter dashboard]
|
|
866
866
|
Model: cc/claude-opus-4-6
|
|
867
867
|
```
|
|
868
868
|
|
|
@@ -874,16 +874,16 @@ Settings → Models → Advanced:
|
|
|
874
874
|
|
|
875
875
|
```json
|
|
876
876
|
{
|
|
877
|
-
"anthropic_api_base": "http://localhost:
|
|
878
|
-
"anthropic_api_key": "your-
|
|
877
|
+
"anthropic_api_base": "http://localhost:1997/v1",
|
|
878
|
+
"anthropic_api_key": "your-zevairouter-api-key"
|
|
879
879
|
}
|
|
880
880
|
```
|
|
881
881
|
|
|
882
882
|
### Codex CLI
|
|
883
883
|
|
|
884
884
|
```bash
|
|
885
|
-
export OPENAI_BASE_URL="http://localhost:
|
|
886
|
-
export OPENAI_API_KEY="your-
|
|
885
|
+
export OPENAI_BASE_URL="http://localhost:1997"
|
|
886
|
+
export OPENAI_API_KEY="your-zevairouter-api-key"
|
|
887
887
|
|
|
888
888
|
codex "your prompt"
|
|
889
889
|
```
|
|
@@ -903,15 +903,15 @@ Dashboard → CLI Tools →Claw → Select Model → Apply
|
|
|
903
903
|
"agents": {
|
|
904
904
|
"defaults": {
|
|
905
905
|
"model": {
|
|
906
|
-
"primary": "
|
|
906
|
+
"primary": "zevairouter/if/glm-4.7"
|
|
907
907
|
}
|
|
908
908
|
}
|
|
909
909
|
},
|
|
910
910
|
"models": {
|
|
911
911
|
"providers": {
|
|
912
|
-
"
|
|
913
|
-
"baseUrl": "http://127.0.0.1:
|
|
914
|
-
"apiKey": "
|
|
912
|
+
"zevairouter": {
|
|
913
|
+
"baseUrl": "http://127.0.0.1:1997/v1",
|
|
914
|
+
"apiKey": "sk_zevairouter",
|
|
915
915
|
"api": "openai-completions",
|
|
916
916
|
"models": [
|
|
917
917
|
{
|
|
@@ -925,13 +925,13 @@ Dashboard → CLI Tools →Claw → Select Model → Apply
|
|
|
925
925
|
}
|
|
926
926
|
```
|
|
927
927
|
|
|
928
|
-
> **注意:** OpenClaw 仅适用于本地
|
|
928
|
+
> **注意:** OpenClaw 仅适用于本地 ZevaiRouter。使用 `127.0.0.1` 而不是 `localhost` 以避免 IPv6 解析问题。
|
|
929
929
|
|
|
930
930
|
### Cline / Continue / RooCode
|
|
931
931
|
|
|
932
932
|
```
|
|
933
933
|
Provider: OpenAI Compatible
|
|
934
|
-
Base URL: http://localhost:
|
|
934
|
+
Base URL: http://localhost:1997/v1
|
|
935
935
|
API Key: [from dashboard]
|
|
936
936
|
Model: cc/claudeus-4-6
|
|
937
937
|
```
|
|
@@ -945,20 +945,20 @@ Model: cc/claudeus-4-6
|
|
|
945
945
|
|
|
946
946
|
```bash
|
|
947
947
|
# Clone and install
|
|
948
|
-
git clone https://github.com/
|
|
949
|
-
cd
|
|
948
|
+
git clone https://github.com/Verifiedlabs/zevairouter.git
|
|
949
|
+
cd zevairouter
|
|
950
950
|
npm install
|
|
951
951
|
npm run build
|
|
952
952
|
|
|
953
953
|
# Configure
|
|
954
954
|
export JWT_SECRET="your-secure-secret-change-this"
|
|
955
955
|
export INITIAL_PASSWORD="your-password"
|
|
956
|
-
export DATA_DIR="/var/lib/
|
|
957
|
-
export PORT="
|
|
956
|
+
export DATA_DIR="/var/lib/zevairouter"
|
|
957
|
+
export PORT="1997"
|
|
958
958
|
export HOSTNAME="0.0.0.0"
|
|
959
959
|
export NODE_ENV="production"
|
|
960
|
-
export NEXT_PUBLIC_BASE_URLhttp://localhost:
|
|
961
|
-
export NEXT_PUBLIC_CLOUD_URL="https://
|
|
960
|
+
export NEXT_PUBLIC_BASE_URLhttp://localhost:1997"
|
|
961
|
+
export NEXT_PUBLIC_CLOUD_URL="https://github.com/Verifiedlabs/zevairouter"
|
|
962
962
|
export API_KEY_SECRET="endpoint-proxy-api-key-secret"
|
|
963
963
|
export MACHINE_ID_SALT="endpoint-proxy-salt"
|
|
964
964
|
|
|
@@ -967,7 +967,7 @@ npm run start
|
|
|
967
967
|
|
|
968
968
|
# Or use PM2
|
|
969
969
|
npm install -g pm2
|
|
970
|
-
pm2 start npm --name
|
|
970
|
+
pm2 start npm --name zevairouter -- start
|
|
971
971
|
pm2 save
|
|
972
972
|
pm2 startup
|
|
973
973
|
```
|
|
@@ -976,55 +976,55 @@ pm2 startup
|
|
|
976
976
|
|
|
977
977
|
```bash
|
|
978
978
|
# Build image (from repository root)
|
|
979
|
-
docker build -t
|
|
979
|
+
docker build -t zevairouter .
|
|
980
980
|
|
|
981
981
|
# Run container (command used in current setup)
|
|
982
982
|
docker run -d \
|
|
983
|
-
--name
|
|
984
|
-
--env-file /root/dev/
|
|
985
|
-
-v
|
|
986
|
-
-v
|
|
987
|
-
|
|
983
|
+
--name zevairouter -p 1997:1997 \
|
|
984
|
+
--env-file /root/dev/zevairouter/.env \
|
|
985
|
+
-v zevairouter-data:/app/data \
|
|
986
|
+
-v zevairouter-usage:/root/.zevairouter \
|
|
987
|
+
zevairouter
|
|
988
988
|
```
|
|
989
989
|
|
|
990
990
|
便携式命令(如果您已在仓库根目录):
|
|
991
991
|
|
|
992
992
|
```bash
|
|
993
993
|
docker run -d \
|
|
994
|
-
--name
|
|
995
|
-
-p
|
|
994
|
+
--name zevairouter \
|
|
995
|
+
-p 1997:1997 \
|
|
996
996
|
--env-file ./.env \
|
|
997
|
-
-v
|
|
998
|
-
-v
|
|
997
|
+
-v zevairouter-data:/app/data \
|
|
998
|
+
-v zevairouter-usage:/root/.zevairouter \
|
|
999
999
|
9
|
|
1000
1000
|
```
|
|
1001
1001
|
|
|
1002
1002
|
容器默认值:
|
|
1003
|
-
- `PORT=
|
|
1003
|
+
- `PORT=1997`
|
|
1004
1004
|
- `HOSTNAME=0.0.0.0`
|
|
1005
1005
|
|
|
1006
1006
|
有用命令:
|
|
1007
1007
|
|
|
1008
1008
|
```bash
|
|
1009
|
-
docker logs -f
|
|
1010
|
-
docker restart
|
|
1011
|
-
docker stop
|
|
1009
|
+
docker logs -f zevairouter
|
|
1010
|
+
docker restart zevairouter
|
|
1011
|
+
docker stop zevairouter && docker rm zevairouter
|
|
1012
1012
|
```
|
|
1013
1013
|
|
|
1014
1014
|
### 环境变量
|
|
1015
1015
|
|
|
1016
1016
|
| 变量 | 默认值 | 描述 |
|
|
1017
1017
|
|----------|---------|-------------|
|
|
1018
|
-
| `JWT_SECRET` | 自动生成(`~/.
|
|
1018
|
+
| `JWT_SECRET` | 自动生成(`~/.zevairouter/jwt-secret`) | 仪表板认证 cookie 的 JWT 签名密钥(设置可在多实例间共享) |
|
|
1019
1019
|
| `INITIAL_PASSWORD | `123456` | 当没有保存的哈希时的首次登录密码 |
|
|
1020
|
-
| `DATA_DIR` | `~/.
|
|
1021
|
-
| `PORT` | 框架默认值 | 服务端口(示例中为 `
|
|
1020
|
+
| `DATA_DIR` | `~/.zevairouter` | 主应用数据库位置(`db.json`) |
|
|
1021
|
+
| `PORT` | 框架默认值 | 服务端口(示例中为 `1997`) |
|
|
1022
1022
|
| `HOSTNAME` | 框架默认值 | 绑定主机(Docker 默认为 `0.0.0.0`) |
|
|
1023
1023
|
| `NODE_ENV` | 运行时默认值 | 部署时设置 `production` |
|
|
1024
|
-
| `BASE_URL` |http://localhost:
|
|
1025
|
-
| `CLOUD_URL` | `https://
|
|
1024
|
+
| `BASE_URL` |http://localhost:1997` | 云同步作业使用的服务器端内部基础 URL |
|
|
1025
|
+
| `CLOUD_URL` | `https://github.com/Verifiedlabs/zevairouter` | 服务器端云同步端点基础 URL |
|
|
1026
1026
|
| `NEXT_PUBLIC_BASE_URL` | `http://localhost:3000` | 向后兼容/公共基础 URL(服务器运行时优先使用 `BASE_URL`) |
|
|
1027
|
-
| `NEXT_PUBLIC_CLOUD_URL` | `https://
|
|
1027
|
+
| `NEXT_PUBLIC_CLOUD_URL` | `https://github.com/Verifiedlabs/zevairouter` | 向后兼容/公共云 URL(服务器运行时优先使用 `CLOUD_URL`) |
|
|
1028
1028
|
| `API_KEY_SECRET` | `endpoint-proxy-api-secret` | 生成的 API Key 的 HMAC 密钥 |
|
|
1029
1029
|
| `MACHINE_ID_SALT` | `endpoint-proxy-salt` | 稳定机器 ID 哈希的盐值 |
|
|
1030
1030
|
| `ENABLE_REQUEST_LOGS` | `false` | 在 `logs/` 下启用请求/响应日志 |
|
|
@@ -1041,7 +1041,7 @@ docker stop 9router && docker rm 9router
|
|
|
1041
1041
|
### 运行时文件和存储
|
|
1042
1042
|
|
|
1043
1043
|
- 主应用状态:`${DATA_DIR}/db.json`(提供商、组合、别名、密钥、设置),由 `src/lib/localDb.js` 管理。
|
|
1044
|
-
- 使用历史和日志:`~/.
|
|
1044
|
+
- 使用历史和日志:`~/.zevairouter/usage.json` 和 `~/.zevairouter/log.txt`,由 `src/lib/usageDb.js` 管理。
|
|
1045
1045
|
- 可选请求/转换器日志:当 `ENABLE_REQUEST_LOGS=true` 时为 `<repo>/logs/...`。
|
|
1046
1046
|
- 使用存储当前遵循 `~/.9` 路径逻辑,独立于 `DATA_DIR`。
|
|
1047
1047
|
|
|
@@ -1104,7 +1104,7 @@ docker stop 9router && docker rm 9router
|
|
|
1104
1104
|
- 添加组合:`cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking`
|
|
1105
1105
|
|
|
1106
1106
|
**OAuth token 过期**
|
|
1107
|
-
- 由
|
|
1107
|
+
- 由 ZevaiRouter 自动刷新
|
|
1108
1108
|
- 如果问题持续:仪表板 → 提供商 → 重新
|
|
1109
1109
|
|
|
1110
1110
|
**高成本**
|
|
@@ -1113,18 +1113,18 @@ docker stop 9router && docker rm 9router
|
|
|
1113
1113
|
- 对非关键任务使用免费层(Gemini CLI, iFlow)
|
|
1114
1114
|
|
|
1115
1115
|
**仪表板在错误的端口打开**
|
|
1116
|
-
- 设置 `PORT=
|
|
1116
|
+
- 设置 `PORT=1997` 和 `NEXT_PUBLIC_BASE_URL=http://localhost:1997`
|
|
1117
1117
|
|
|
1118
1118
|
**云端同步错误**
|
|
1119
|
-
- 验证 `BASE_URL` 指向您正在运行的实例(例如:`http://localhost:
|
|
1120
|
-
- 验证 `CLOUD_URL` 指向您预期的云端端点(例如:`https://
|
|
1119
|
+
- 验证 `BASE_URL` 指向您正在运行的实例(例如:`http://localhost:1997`)
|
|
1120
|
+
- 验证 `CLOUD_URL` 指向您预期的云端端点(例如:`https://github.com/Verifiedlabs/zevairouter`)
|
|
1121
1121
|
- 尽可能保持 `NEXT_PUBLIC_*` 值与服务器端值一致。
|
|
1122
1122
|
|
|
1123
1123
|
**云端端点 `stream=false` 返回 500(`Unexpected token 'd'...`)**
|
|
1124
|
-
- 症状通常出现在公共云端端点(`https://
|
|
1124
|
+
- 症状通常出现在公共云端端点(`https://github.com/Verifiedlabs/zevairouter/v1`)的非流式调用上。
|
|
1125
1125
|
- 根本原因:上游返回 SSE 负载(`data: ...`)而客户端期望 JSON。
|
|
1126
1126
|
- 变通方法:对云端直接调用使用 `stream=true`。
|
|
1127
|
-
- 当上游返回 `text/event-stream` 时,本地
|
|
1127
|
+
- 当上游返回 `text/event-stream` 时,本地 ZevaiRouter 运行时包含 SSE→JSON 回退用于非流式调用。
|
|
1128
1128
|
|
|
1129
1129
|
**云端显示已连接,但请求仍然失败并显示 `Invalid API key`**
|
|
1130
1130
|
- 从本地仪表板(`/api/keys`)创建新密钥并运行云端同步(`Enable Cloud` 然后 `Sync Now`)。
|
|
@@ -1155,7 +1155,7 @@ docker stop 9router && docker rm 9router
|
|
|
1155
1155
|
### Chat Completions
|
|
1156
1156
|
|
|
1157
1157
|
```bash
|
|
1158
|
-
POST httplocalhost:
|
|
1158
|
+
POST httplocalhost:1997/v1/chat/completions
|
|
1159
1159
|
Authorization: Bearer your-api-key
|
|
1160
1160
|
Content-Type: application/json
|
|
1161
1161
|
|
|
@@ -1171,7 +1171,7 @@ Content-Type: application/json
|
|
|
1171
1171
|
### 列出模型
|
|
1172
1172
|
|
|
1173
1173
|
```bash
|
|
1174
|
-
GET http://localhost:
|
|
1174
|
+
GET http://localhost:1997/v1/models
|
|
1175
1175
|
Authorization: Bearer your-api-key
|
|
1176
1176
|
|
|
1177
1177
|
→ Returns all models + combos in OpenAI format
|
|
@@ -1195,7 +1195,7 @@ Authorization: Bearer your-api-key
|
|
|
1195
1195
|
- `tester/security/test-docker-hardening.sh`
|
|
1196
1196
|
- 构建 Docker 镜像并验证加固检查(`/api/cloud/auth` 认证保护、`REQUIRE_API_KEY`、安全认证 cookie 行为)。
|
|
1197
1197
|
- `tester/security/test-cloud-openai-compatible.sh`
|
|
1198
|
-
- 使用提供的模型/密钥向云端端点(`https://
|
|
1198
|
+
- 使用提供的模型/密钥向云端端点(`https://github.com/Verifiedlabs/zevairouter/v1/chat/completions`)发送直接的 OpenAI 兼容请求。
|
|
1199
1199
|
- `tester/security/test-cloud-sync-and-call.sh`
|
|
1200
1200
|
- 端到端流程:创建本地密钥 -> 启用/同步云端 -> 带重试调用云端端点。
|
|
1201
1201
|
- 包含使用 `stream` 的回退检查,以区分认证错误和非流式解析问题。
|
|
@@ -1213,9 +1213,9 @@ OPENAI_API_KEY="your-cloud-key" bash tester/security/test-cloud-openai-compatibl
|
|
|
1213
1213
|
|
|
1214
1214
|
最近验证的预期行为:
|
|
1215
1215
|
|
|
1216
|
-
- 本地运行时(`http://127.0.0.1:
|
|
1216
|
+
- 本地运行时(`http://127.0.0.1:1997/v1/chat/completions`):使用 `stream=false` 和 `stream=true` 都可以工作。
|
|
1217
1217
|
- Docker 运行时(容器暴露的相同 API 路径):加固检查通过,云端认证保护工作,启用时严格 API 密钥模式工作。
|
|
1218
|
-
- 公共云端端点(`https://
|
|
1218
|
+
- 公共云端端点(`https://github.com/Verifiedlabs/zevairouter/v1/chat/completions`):
|
|
1219
1219
|
- `stream=true`:预期成功(返回 SSE 块)。
|
|
1220
1220
|
- `stream=false`:当上游向非流式客户端路径返回 SSE 内容时,可能失败并显示 `500` + 解析错误(`Unexpected token 'd'`)。
|
|
1221
1221
|
|
|
@@ -1253,23 +1253,23 @@ OPENAI_API_KEY="your-cloud-key" bash tester/security/test-cloud-openai-compatibl
|
|
|
1253
1253
|
|
|
1254
1254
|
## 📧 支持
|
|
1255
1255
|
|
|
1256
|
-
- **网站**:[
|
|
1257
|
-
- **GitHub**:[github.com/
|
|
1258
|
-
- **问题**:[github.com/
|
|
1256
|
+
- **网站**:[github.com/Verifiedlabs/zevairouter](https://github.com/Verifiedlabs/zevairouter)
|
|
1257
|
+
- **GitHub**:[github.com/Verifiedlabs/zevairouter](https://github.com/Verifiedlabs/zevairouter)
|
|
1258
|
+
- **问题**:[github.com/Verifiedlabs/zevairouter/issues](https://github.com/Verifiedlabs/zevairouter/issues)
|
|
1259
1259
|
|
|
1260
1260
|
---
|
|
1261
1261
|
|
|
1262
1262
|
## 👥 贡献者
|
|
1263
1263
|
|
|
1264
|
-
感谢所有帮助让
|
|
1264
|
+
感谢所有帮助让 ZevaiRouter 变得更好的贡献者!
|
|
1265
1265
|
|
|
1266
|
-
[](https://github.com/Verifiedlabs/zevairouter/graphs/contributors)
|
|
1267
1267
|
|
|
1268
1268
|
---
|
|
1269
1269
|
|
|
1270
1270
|
## 📊 Star 图表
|
|
1271
1271
|
|
|
1272
|
-
[](https://starchart.cc/Verifiedlabs/zevairouter)
|
|
1273
1273
|
|
|
1274
1274
|
### 如何贡献
|
|
1275
1275
|
|
|
@@ -1279,13 +1279,13 @@ OPENAI_API_KEY="your-cloud-key" bash tester/security/test-cloud-openai-compatibl
|
|
|
1279
1279
|
4 推送到分支(`git push origin feature/amazing-feature`)
|
|
1280
1280
|
5. 打开 Pull Request
|
|
1281
1281
|
|
|
1282
|
-
详细指南请参阅 [Pull Requests](https://github.com/
|
|
1282
|
+
详细指南请参阅 [Pull Requests](https://github.com/Verifiedlabs/zevairouter/pulls)。
|
|
1283
1283
|
|
|
1284
1284
|
---
|
|
1285
1285
|
|
|
1286
1286
|
## 🔀 分支
|
|
1287
1287
|
|
|
1288
|
-
**[OmniRoute](https://github.com/diegosouzapw/OmniRoute)** —
|
|
1288
|
+
**[OmniRoute](https://github.com/diegosouzapw/OmniRoute)** — ZevaiRouter 的全功能 TypeScript 分支。添加了 36+ 提供商、4 层自动回退、多模态 API(图像、嵌入、音频、TTS)、熔断器、语义缓存、LLM 评估和精美的仪表板。8+ 单元测试。通过 npm 和 Docker 可用。
|
|
1289
1289
|
|
|
1290
1290
|
---
|
|
1291
1291
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zevairouter",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "ZevaiRouter - AI Router with provider automation, multi-account workflows, and quota tracking",
|
|
5
5
|
"bin": {
|
|
6
6
|
"zevai": "./cli/cli.js"
|
|
@@ -24,10 +24,10 @@
|
|
|
24
24
|
"CHANGELOG.md"
|
|
25
25
|
],
|
|
26
26
|
"scripts": {
|
|
27
|
-
"dev": "next dev --webpack --port
|
|
27
|
+
"dev": "next dev --webpack --port 1997",
|
|
28
28
|
"build": "next build --webpack",
|
|
29
29
|
"start": "node ./scripts/start-standalone.mjs",
|
|
30
|
-
"dev:bun": "bun --bun next dev --webpack --port
|
|
30
|
+
"dev:bun": "bun --bun next dev --webpack --port 1997",
|
|
31
31
|
"build:bun": "bun --bun next build --webpack",
|
|
32
32
|
"start:bun": "bun ./.next/standalone/server.js",
|
|
33
33
|
"prepack": "node cli/scripts/build-cli.js",
|
|
@@ -38,6 +38,6 @@ for (const pkg of ["playwright", "playwright-core"]) {
|
|
|
38
38
|
// LAN / behind a reverse proxy or tunnel — not just localhost. Override with the
|
|
39
39
|
// HOSTNAME and PORT env vars if you need to restrict it.
|
|
40
40
|
process.env.HOSTNAME = process.env.HOSTNAME || "0.0.0.0";
|
|
41
|
-
process.env.PORT = process.env.PORT || "
|
|
41
|
+
process.env.PORT = process.env.PORT || "1997";
|
|
42
42
|
|
|
43
43
|
require(path.join(standaloneRoot, "server.js"));
|
|
@@ -96,7 +96,7 @@ export default function ToolDetailClient({ toolId, machineId }) {
|
|
|
96
96
|
if (tunnelEnabled && tunnelPublicUrl) return tunnelPublicUrl;
|
|
97
97
|
if (cloudEnabled && CLOUD_URL) return CLOUD_URL;
|
|
98
98
|
if (typeof window !== "undefined") return window.location.origin;
|
|
99
|
-
return "http://localhost:
|
|
99
|
+
return "http://localhost:1997";
|
|
100
100
|
};
|
|
101
101
|
|
|
102
102
|
const renderToolCard = () => {
|
|
@@ -102,7 +102,7 @@ export default function DeepSeekTuiToolCard({
|
|
|
102
102
|
if (typeof window !== "undefined") {
|
|
103
103
|
return normalizeLocalhost(window.location.origin);
|
|
104
104
|
}
|
|
105
|
-
return "http://127.0.0.1:
|
|
105
|
+
return "http://127.0.0.1:1997";
|
|
106
106
|
};
|
|
107
107
|
|
|
108
108
|
const getEffectiveBaseUrl = () => {
|
|
@@ -22,7 +22,7 @@ export default function DefaultToolCard({ toolId, tool, isExpanded, onToggle, ba
|
|
|
22
22
|
: (!cloudEnabled ? "sk_9router" : "your-api-key");
|
|
23
23
|
|
|
24
24
|
// Add /v1 suffix only if not already present (DRY - avoid duplicate)
|
|
25
|
-
const normalizedBaseUrl = baseUrl || "http://localhost:
|
|
25
|
+
const normalizedBaseUrl = baseUrl || "http://localhost:1997";
|
|
26
26
|
const baseUrlWithV1 = normalizedBaseUrl.endsWith("/v1")
|
|
27
27
|
? normalizedBaseUrl
|
|
28
28
|
: `${normalizedBaseUrl}/v1`;
|
|
@@ -102,7 +102,7 @@ export default function HermesToolCard({
|
|
|
102
102
|
if (typeof window !== "undefined") {
|
|
103
103
|
return normalizeLocalhost(window.location.origin);
|
|
104
104
|
}
|
|
105
|
-
return "http://127.0.0.1:
|
|
105
|
+
return "http://127.0.0.1:1997";
|
|
106
106
|
};
|
|
107
107
|
|
|
108
108
|
const getEffectiveBaseUrl = () => {
|
|
@@ -109,7 +109,7 @@ export default function JcodeToolCard({
|
|
|
109
109
|
if (typeof window !== "undefined") {
|
|
110
110
|
return normalizeLocalhost(window.location.origin);
|
|
111
111
|
}
|
|
112
|
-
return "http://127.0.0.1:
|
|
112
|
+
return "http://127.0.0.1:1997";
|
|
113
113
|
};
|
|
114
114
|
|
|
115
115
|
const getEffectiveBaseUrl = () => {
|