polyrouter 1.0.4 ā 1.0.6
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 +67 -85
- package/app/.next-cli-build/BUILD_ID +1 -1
- package/app/.next-cli-build/app-path-routes-manifest.json +12 -12
- package/app/.next-cli-build/build-manifest.json +2 -2
- package/app/.next-cli-build/prerender-manifest.json +3 -3
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
- 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 +4 -4
- 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 +2 -2
- 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.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +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.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +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 +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/media-providers/[kind]/[id]/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +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.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +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.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +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.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +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.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +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 +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.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +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.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +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.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +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.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +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.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +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/pxpipe/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +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/realtime/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/realtime/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/realtime/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +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/token-saver/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +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.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +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.js.nft.json +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.js +1 -1
- package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +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 +8 -8
- package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +8 -8
- 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 +8 -8
- 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 +3 -3
- package/app/.next-cli-build/server/app/api/auth/login/route.js +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 +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 +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 +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 +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 +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 +9 -9
- 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 +2 -2
- 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 +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/claude-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
- 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-mcp-registry/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +2 -2
- 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/cli-tools/deepseek-tui-settings/route.js +3 -3
- package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js +5 -5
- package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +3 -3
- package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/[id]/route.js +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/headroom/extras/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/restart/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/start/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/stop/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/init/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/locale/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js +2 -2
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js +2 -2
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/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/media-providers/tts/voices/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/route.js.nft.json +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 +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 +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 +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/auto-import/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/api-key/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/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/import-cli-proxy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/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/provider-nodes/validate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/validate/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.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/client/route.js +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/kilo/free-models/route.js.nft.json +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/suggested-models/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 +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 +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 +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/pxpipe/health/route.js +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/install/route.js +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/restart/route.js +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/start/route.js +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/stats/route.js +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/status/route.js +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/stop/route.js +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/realtime/authorize/route.js +1 -1
- package/app/.next-cli-build/server/app/api/realtime/authorize/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/route.js +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/proxy-test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/proxy-test/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 +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/shutdown/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/send/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 +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 +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]/codex-reset-credits/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +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/logs/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 +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 +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/audio/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +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 +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 +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/count_tokens/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/route.js +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/info/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 +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 +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 +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/videos/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +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 +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/v1beta/models/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/route.js.nft.json +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.js +1 -1
- package/app/.next-cli-build/server/app/callback/page.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 +8 -8
- package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +8 -8
- 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 +8 -8
- package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +3 -3
- 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 +10 -10
- 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 +10 -10
- 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 +8 -8
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +10 -10
- 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 +10 -10
- 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 +8 -8
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.rsc +10 -10
- 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 +10 -10
- 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 +8 -8
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +10 -10
- 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 +10 -10
- 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 +8 -8
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +3 -3
- 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 +10 -10
- 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 +10 -10
- 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 +8 -8
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.rsc +10 -10
- 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 +10 -10
- 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 +8 -8
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.rsc +10 -10
- 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 +10 -10
- 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 +8 -8
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +10 -10
- 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 +10 -10
- 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 +8 -8
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.rsc +10 -10
- 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 +10 -10
- 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 +8 -8
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +10 -10
- 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 +10 -10
- 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 +8 -8
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/quota.rsc +11 -11
- 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 +11 -11
- 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 +8 -8
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/realtime.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/realtime.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/realtime.segments/!KGRhc2hib2FyZCk/dashboard/realtime/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/realtime.segments/!KGRhc2hib2FyZCk/dashboard/realtime.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/realtime.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/realtime.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/realtime.segments/_full.segment.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/realtime.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/realtime.segments/_index.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/realtime.segments/_tree.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +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 +8 -8
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +8 -8
- 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 +8 -8
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +3 -3
- 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 +10 -10
- 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 +10 -10
- 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 +8 -8
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.rsc +10 -10
- 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 +10 -10
- 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 +8 -8
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.rsc +10 -10
- 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 +10 -10
- 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 +8 -8
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard.html +1 -1
- package/app/.next-cli-build/server/app/dashboard.rsc +10 -10
- 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 +10 -10
- 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 +8 -8
- package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/index.html +1 -1
- package/app/.next-cli-build/server/app/index.rsc +8 -8
- 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 +8 -8
- 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 +8 -8
- package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/landing/page.js +1 -1
- package/app/.next-cli-build/server/app/landing/page.js.nft.json +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 +9 -9
- package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +9 -9
- 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 +8 -8
- package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login/page.js +1 -1
- package/app/.next-cli-build/server/app/login/page.js.nft.json +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 +9 -9
- package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +9 -9
- 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 +8 -8
- package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +3 -3
- 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/manifest.webmanifest/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/page.js +1 -1
- package/app/.next-cli-build/server/app/page.js.nft.json +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 +12 -12
- package/app/.next-cli-build/server/chunks/1220.js +1 -1
- package/app/.next-cli-build/server/chunks/1455.js +1 -0
- package/app/.next-cli-build/server/chunks/1605.js +1 -0
- package/app/.next-cli-build/server/chunks/2112.js +1 -1
- package/app/.next-cli-build/server/chunks/2194.js +1 -1
- package/app/.next-cli-build/server/chunks/238.js +1 -1
- package/app/.next-cli-build/server/chunks/318.js +2 -2
- package/app/.next-cli-build/server/chunks/3535.js +1 -1
- package/app/.next-cli-build/server/chunks/3726.js +1 -1
- package/app/.next-cli-build/server/chunks/3943.js +1 -1
- package/app/.next-cli-build/server/chunks/412.js +1 -1
- package/app/.next-cli-build/server/chunks/4123.js +3 -3
- package/app/.next-cli-build/server/chunks/4293.js +1 -0
- package/app/.next-cli-build/server/chunks/4433.js +1 -0
- package/app/.next-cli-build/server/chunks/4884.js +1 -1
- package/app/.next-cli-build/server/chunks/4930.js +1 -0
- package/app/.next-cli-build/server/chunks/5612.js +1 -1
- package/app/.next-cli-build/server/chunks/5615.js +1 -1
- package/app/.next-cli-build/server/chunks/6805.js +3 -3
- package/app/.next-cli-build/server/chunks/6922.js +1 -0
- package/app/.next-cli-build/server/chunks/7807.js +1 -1
- package/app/.next-cli-build/server/chunks/{3850.js ā 8008.js} +1 -1
- package/app/.next-cli-build/server/chunks/8038.js +19 -19
- package/app/.next-cli-build/server/chunks/8145.js +1 -1
- package/app/.next-cli-build/server/chunks/8185.js +1 -0
- package/app/.next-cli-build/server/chunks/8251.js +2 -2
- package/app/.next-cli-build/server/chunks/827.js +1 -1
- package/app/.next-cli-build/server/chunks/8363.js +1 -0
- package/app/.next-cli-build/server/chunks/869.js +1 -1
- package/app/.next-cli-build/server/chunks/8910.js +1 -1
- package/app/.next-cli-build/server/chunks/915.js +6 -6
- package/app/.next-cli-build/server/chunks/9660.js +1 -1
- package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/app/.next-cli-build/server/middleware.js +3 -3
- 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/server/server-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
- package/app/.next-cli-build/static/chunks/{1321-5363e10d6bc83255.js ā 1321-e91fcc77031966c2.js} +1 -1
- package/app/.next-cli-build/static/chunks/5116-57607d97ad30f27c.js +70 -0
- package/app/.next-cli-build/static/chunks/{533-74450af7ce8a32b6.js ā 533-34fc7f5a3c79da82.js} +1 -1
- package/app/.next-cli-build/static/chunks/{5497-78a8a8716352195f.js ā 5497-84dfd144b30eda56.js} +1 -1
- package/app/.next-cli-build/static/chunks/9da6db1e-d4cbd87a5f1d0209.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/page-3b24dec9f1a5c678.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/{page-63a707f86838189f.js ā page-c737bc25a827d251.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/profile/page-26f454785dc626b1.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/realtime/{page-81a6d2a3fffb86dc.js ā page-f4b382f06f0f8eb6.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/skills/page-07a0044d9e135cb8.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/token-saver/{page-ec365dbdc0860d04.js ā page-d488121dc0c130ad.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/landing/page-1f76869d947f63aa.js +1 -0
- package/app/.next-cli-build/static/chunks/app/layout-2654a5701747e5bc.js +1 -0
- package/app/.next-cli-build/static/chunks/app/login/{page-744fd018e592b5f6.js ā page-e0dc71d92b91cd3f.js} +1 -1
- package/app/.next-cli-build/static/css/ada9b169590290e6.css +1 -0
- package/app/.next-cli-build/static/css/b71ca13188930393.css +1 -0
- package/app/node_modules/baseline-browser-mapping/dist/index.cjs +1 -1
- package/app/node_modules/baseline-browser-mapping/package.json +1 -1
- package/app/package.json +11 -9
- package/app/public/i18n/literals/ar.json +4 -4
- package/app/public/i18n/literals/bn.json +4 -4
- package/app/public/i18n/literals/cs.json +4 -4
- package/app/public/i18n/literals/da.json +4 -4
- package/app/public/i18n/literals/de.json +4 -4
- package/app/public/i18n/literals/el.json +4 -4
- package/app/public/i18n/literals/es.json +4 -4
- package/app/public/i18n/literals/fa.json +33 -33
- package/app/public/i18n/literals/fi.json +4 -4
- package/app/public/i18n/literals/fr.json +4 -4
- package/app/public/i18n/literals/he.json +4 -4
- package/app/public/i18n/literals/hi.json +4 -4
- package/app/public/i18n/literals/hu.json +4 -4
- package/app/public/i18n/literals/id.json +4 -4
- package/app/public/i18n/literals/it.json +4 -4
- package/app/public/i18n/literals/ja.json +4 -4
- package/app/public/i18n/literals/km.json +33 -33
- package/app/public/i18n/literals/ko.json +4 -4
- package/app/public/i18n/literals/nl.json +4 -4
- package/app/public/i18n/literals/no.json +4 -4
- package/app/public/i18n/literals/pl.json +4 -4
- package/app/public/i18n/literals/pt-BR.json +4 -4
- package/app/public/i18n/literals/pt-PT.json +4 -4
- package/app/public/i18n/literals/ro.json +4 -4
- package/app/public/i18n/literals/ru.json +4 -4
- package/app/public/i18n/literals/sv.json +4 -4
- package/app/public/i18n/literals/th.json +33 -33
- package/app/public/i18n/literals/tl.json +4 -4
- package/app/public/i18n/literals/tr.json +4 -4
- package/app/public/i18n/literals/uk.json +4 -4
- package/app/public/i18n/literals/ur.json +4 -4
- package/app/public/i18n/literals/vi.json +4 -4
- package/app/public/i18n/literals/zh-CN.json +33 -33
- package/app/public/i18n/literals/zh-TW.json +4 -4
- package/app/src/lib/updater/updater.js +3 -3
- package/app/src/mitm/server.js +3 -3
- package/app/src/realtime/protocol.js +1 -1
- package/app/src/realtime/runtime.js +6 -4
- package/cli.js +16 -16
- package/hooks/postinstall.js +5 -5
- package/hooks/sqliteRuntime.js +4 -4
- package/hooks/trayRuntime.js +6 -6
- package/package.json +14 -8
- package/src/cli/api/client.js +2 -2
- package/src/cli/commands/xaiVideo.js +7 -7
- package/src/cli/menus/cliTools.js +16 -16
- package/src/cli/terminalUI.js +2 -2
- package/src/cli/tray/autostart.js +9 -9
- package/src/cli/tray/tray.js +5 -5
- package/src/cli/tray/tray.ps1 +1 -1
- package/app/.next-cli-build/server/chunks/3350.js +0 -1
- package/app/.next-cli-build/server/chunks/4223.js +0 -11
- package/app/.next-cli-build/server/chunks/4306.js +0 -1
- package/app/.next-cli-build/server/chunks/6832.js +0 -1
- package/app/.next-cli-build/server/chunks/6935.js +0 -1
- package/app/.next-cli-build/server/chunks/8658.js +0 -1
- package/app/.next-cli-build/server/chunks/8971.js +0 -1
- package/app/.next-cli-build/static/chunks/3122-7d92444836703c7a.js +0 -11
- package/app/.next-cli-build/static/chunks/5116-8422f68a0c01ef77.js +0 -70
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/page-4c5a22762fe663b8.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/profile/page-f8b4e4dc27c90c0c.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/skills/page-d73bd129f40d6396.js +0 -1
- package/app/.next-cli-build/static/chunks/app/landing/page-d0dc2acaf2a1c239.js +0 -1
- package/app/.next-cli-build/static/chunks/app/layout-1c95599c7054cadc.js +0 -1
- package/app/.next-cli-build/static/css/f21ca4a324c22a6c.css +0 -1
- package/app/.next-cli-build/static/css/fa9e956ea578b5b8.css +0 -1
- /package/app/.next-cli-build/static/{P86gd5BC-j6FbnOx3-K8q ā Fq1kR9_FoWmz8b123uFBu}/_buildManifest.js +0 -0
- /package/app/.next-cli-build/static/{P86gd5BC-j6FbnOx3-K8q ā Fq1kR9_FoWmz8b123uFBu}/_ssgManifest.js +0 -0
|
@@ -15,19 +15,19 @@
|
|
|
15
15
|
"1. CLI & SDKs": "1. CLI å SDK",
|
|
16
16
|
"1. Client Request (Input)": "1. 客ę·ē«ÆčÆ·ę±ļ¼č¾å
„ļ¼",
|
|
17
17
|
"1. Generates SSL cert & adds to system keychain": "1. ēę SSL čÆä¹¦å¹¶ę·»å å°ē³»ē»é„åäø²",
|
|
18
|
-
"2.
|
|
18
|
+
"2. PolyRouter Hub": "2. PolyRouter ę¢ēŗ½",
|
|
19
19
|
"2. Provider Request (Translated)": "2. ęä¾å请ę±ļ¼å·²āāēæ»čÆļ¼",
|
|
20
20
|
"2. Redirects": "2. éå®å",
|
|
21
21
|
"24h": "24å°ę¶",
|
|
22
22
|
"3. AI Providers": "3. AI ęä¾å",
|
|
23
|
-
"3. Maps Antigravity models to any provider via
|
|
23
|
+
"3. Maps Antigravity models to any provider via PolyRouter": "3. éčæ PolyRouter å°Antigravity樔åę å°å°ä»»ä½ęä¾å",
|
|
24
24
|
"3. Provider Response (Raw)": "3. ęä¾åååŗļ¼åå§ļ¼",
|
|
25
25
|
"30D": "30 天",
|
|
26
26
|
"4. Client Response (Final)": "4. 客ę·ē«Æååŗļ¼ęē»ļ¼",
|
|
27
27
|
"60D": "60 天",
|
|
28
28
|
"7D": "7 天",
|
|
29
|
-
"
|
|
30
|
-
"
|
|
29
|
+
"PolyRouter (Entry)": "PolyRouterļ¼å
„å£ļ¼",
|
|
30
|
+
"PolyRouter Base URL": "PolyRouter åŗē” URL",
|
|
31
31
|
": Account | Workers Scripts | Edit": "ļ¼č“¦å· | Workers čę¬ | ē¼č¾",
|
|
32
32
|
": Include | Account |": "ļ¼å
å« | č“¦å· |",
|
|
33
33
|
"AI endpoint proxy with web dashboard - A JavaScript port of CLIProxyAPI. Works seamlessly with Claude Code, OpenAI Codex, Cline, RooCode, and other CLI tools.": "AI 端ē¹ä»£ēļ¼éåø¦ Web 仪蔨ē ā CLIProxyAPI ē JavaScript ē§»ę¤ēćäø Claude CodećOpenAI CodexćClinećRooCode åå
¶ä» CLI å·„å
·ę ē¼åä½ć",
|
|
@@ -88,12 +88,12 @@
|
|
|
88
88
|
"Add the following configuration to your models array:": "å°ä»„äøé
置添å å°ęØē models ę°ē»äøļ¼",
|
|
89
89
|
"Add your first connection to get started": "ę·»å ęØē第äøäøŖčæę„仄å¼å§ä½æēØ",
|
|
90
90
|
"Administrator required": "éč¦ē®”ēåęé",
|
|
91
|
-
"Administrator required ā restart
|
|
91
|
+
"Administrator required ā restart PolyRouter as Administrator to use MITM": "éč¦ē®”ēåęé ā 仄箔ēå身份éę°åÆåØ PolyRouter ä»„ä½æēØ MITM",
|
|
92
92
|
"After authorization, copy the full URL from your browser address bar.": "ęęåļ¼ä»ęµč§åØå°åę äøå¤å¶å®ę“ē URLć",
|
|
93
93
|
"After authorization, copy the full URL from your browser.": "ęęåļ¼ä»ęµč§åØå¤å¶å®ę“ē URLć",
|
|
94
94
|
"After installation, run": "å®č£
åļ¼čæč”",
|
|
95
95
|
"After login, you'll need to copy the callback URL from your browser and paste it back here.": "ē»å½åļ¼ęØéč¦ä»ęµč§åØå¤å¶åč° URL å¹¶å°å
¶ē²č““åę¤å¤ć",
|
|
96
|
-
"Alibaba Qwen Code CLI ā supports OpenAI, Anthropic & Gemini providers via
|
|
96
|
+
"Alibaba Qwen Code CLI ā supports OpenAI, Anthropic & Gemini providers via PolyRouter": "éæéå·“å·“ Qwen Code CLI ā éčæ PolyRouter ęÆę OpenAIćAnthropic å Gemini ęä¾å",
|
|
97
97
|
"All": "å
ØéØ",
|
|
98
98
|
"All AI Providers": "ęę AI ęä¾å",
|
|
99
99
|
"All Providers": "ęęęä¾å",
|
|
@@ -108,8 +108,8 @@
|
|
|
108
108
|
"Anthropic Claude Code CLI": "Anthropic Claude Code CLI",
|
|
109
109
|
"Anthropic Compatible (Prod)": "Anthropic å
¼å®¹ļ¼ēäŗ§ļ¼",
|
|
110
110
|
"Anthropic Compatible Details": "Anthropic å
¼å®¹čƦę
",
|
|
111
|
-
"Antigravity/Copilot IDE request ā DNS redirect to localhost:443 ā MITM proxy intercepts ā
|
|
112
|
-
"Any model available in
|
|
111
|
+
"Antigravity/Copilot IDE request ā DNS redirect to localhost:443 ā MITM proxy intercepts ā PolyRouter ā response to Antigravity/Copilot": "Antigravity/Copilot IDE čÆ·ę± ā DNS éå®åå° localhost:443 ā MITM 代ēę¦ęŖ ā PolyRouter ā ååŗčæå Antigravity/Copilot",
|
|
112
|
+
"Any model available in PolyRouter can be used ā not just Qwen models. Select from Qwen, Claude, Gemini, GPT, and more.": "PolyRouter äøåÆēØēä»»ä½ęØ”åé½åÆä»„使ēØāāäøä»
ä»
ęÆ Qwen 樔åćä» QwenćClaudećGeminićGPT ēäøéę©ć",
|
|
113
113
|
"App Name": "åŗēØåē§°",
|
|
114
114
|
"Apply": "åŗēØ",
|
|
115
115
|
"Apply Proxy": "åŗēØä»£ē",
|
|
@@ -253,7 +253,7 @@
|
|
|
253
253
|
"Config path: Linux/macOS ~/.deepseek/config.toml ⢠Windows %USERPROFILE%\\.deepseek\\config.toml": "é
置路å¾ļ¼Linux/macOS ~/.deepseek/config.toml ⢠Windows %USERPROFILE%\\.deepseek\\config.toml",
|
|
254
254
|
"Config path: Linux/macOS ~/.qwen/settings.json ⢠Windows %USERPROFILE%\\.qwen\\settings.json": "é
置路å¾ļ¼Linux/macOS ~/.qwen/settings.json ⢠Windows %USERPROFILE%\\.qwen\\settings.json",
|
|
255
255
|
"Configuration": "é
ē½®",
|
|
256
|
-
"Configure
|
|
256
|
+
"Configure polyrouter as an OpenAI-compatible provider to route all jcode requests through polyrouter's optimization layer.": "å° polyrouter é
置为 OpenAI å
¼å®¹ęä¾åļ¼ä»„éčæ polyrouter ēä¼åå±č·Æē±ęę jcode 请ę±ć",
|
|
257
257
|
"Configure CLI tools": "é
ē½® CLI å·„å
·",
|
|
258
258
|
"Configure a new AI provider to use with your applications.": "é
ē½®ę°ē AI ęä¾ēØåŗä»„äøęØēåŗēØēØåŗäøčµ·ä½æēØć",
|
|
259
259
|
"Configure pricing rates for cost tracking and calculations": "é
ē½®å®ä»·ä»„čæč”ęę¬č·čøŖåč®”ē®",
|
|
@@ -296,7 +296,7 @@
|
|
|
296
296
|
"Copy": "å¤å¶",
|
|
297
297
|
"Copy & Shutdown": "å¤å¶å¹¶å
³é",
|
|
298
298
|
"Copy This URL": "å¤å¶ę¤ URL",
|
|
299
|
-
"Copy a link and paste to your AI to use
|
|
299
|
+
"Copy a link and paste to your AI to use PolyRouter ā no install needed": "å¤å¶é¾ę„å¹¶ē²č““å°ęØē AI ä»„ä½æēØ PolyRouter ā ę éå®č£
",
|
|
300
300
|
"Copy combo name": "å¤å¶ē»ååē§°",
|
|
301
301
|
"Copy install command": "å¤å¶å®č£
å½ä»¤",
|
|
302
302
|
"Copy model": "å¤å¶ęØ”å",
|
|
@@ -354,7 +354,7 @@
|
|
|
354
354
|
"Debug translation flow between formats": "č°čÆę ¼å¼ä¹é“ēēæ»čÆęµēØ",
|
|
355
355
|
"DeepSeek TUI - Manual Configuration": "DeepSeek TUI - ęåØé
ē½®",
|
|
356
356
|
"DeepSeek TUI not detected locally": "ęŖåØę¬å°ę£ęµå° DeepSeek TUI",
|
|
357
|
-
"DeepSeek TUI uses ~/.deepseek/config.toml for configuration.
|
|
357
|
+
"DeepSeek TUI uses ~/.deepseek/config.toml for configuration. PolyRouter will update the provider to 'openai' mode with your base_url, api_key, and model.": "DeepSeek TUI ä½æēØ ~/.deepseek/config.toml čæč”é
ē½®ćPolyRouter å°ęä¾åę“ę°äøŗ 'openai' 樔å¼ļ¼å
å«ęØē base_urlćapi_key å modelć",
|
|
358
358
|
"DeepSeek Terminal Coding Agent (Rust TUI)": "DeepSeek ē»ē«Æē¼ēØä»£ēļ¼Rust TUIļ¼",
|
|
359
359
|
"Default Model": "é»č®¤ęØ”å",
|
|
360
360
|
"Default password is": "é»č®¤åÆē äøŗ",
|
|
@@ -454,7 +454,7 @@
|
|
|
454
454
|
"Expires At": "čæęę¶é“",
|
|
455
455
|
"Expiring first": "å³å°čæęä¼å
",
|
|
456
456
|
"Expiring-first currently reorders accounts inside the current page. Cross-page ordering still follows backend pagination.": "ćå³å°čæęä¼å
ćå½åä¼åØå½å锵é¢å
éę°ęåŗč“¦å·ć跨锵é¢ęåŗä»éµå¾Ŗå端å锵ć",
|
|
457
|
-
"Expose your local
|
|
457
|
+
"Expose your local PolyRouter to the internet. No port forwarding, no static IP needed. Share endpoint URL with your team or use it in Cursor, Cline, and other AI tools from anywhere.": "å°ęØę¬å°ē PolyRouter ę“é²å°äŗčē½ćę é端å£č½¬åļ¼ę ééę IPćäøęØēå¢éå
±äŗ«ē«Æē¹ URL ęä»ä»»ä½å°ę¹åØ CursorćCline åå
¶ä» AI å·„å
·äøä½æēØå®ć",
|
|
458
458
|
"Factory Droid - Manual Configuration": "Factory Droid - ęåØé
ē½®",
|
|
459
459
|
"Factory Droid AI Assistant": "Factory Droid AI å©ę",
|
|
460
460
|
"Factory Droid CLI not detected locally": "ęŖåØę¬å°ę£ęµå° Factory Droid CLI",
|
|
@@ -532,7 +532,7 @@
|
|
|
532
532
|
"High performance global routing and IP masking via Cloudflare Workers": "éčæ Cloudflare Workers å®ē°é«ę§č½å
Øå±č·Æē±å IP éč",
|
|
533
533
|
"High-performance Rust-based coding agent harness": "åŗäŗ Rust ēé«ę§č½ē¼ēØä»£ēę”ę¶",
|
|
534
534
|
"History": "åå²č®°å½",
|
|
535
|
-
"How
|
|
535
|
+
"How PolyRouter Works": "PolyRouter å·„ä½åē",
|
|
536
536
|
"How Pricing Works": "å®ä»·å¦ä½čæä½",
|
|
537
537
|
"How it Works": "å·„ä½åē",
|
|
538
538
|
"How it works:": "å·„ä½åēļ¼",
|
|
@@ -561,8 +561,8 @@
|
|
|
561
561
|
"Input Tokens": "č¾å
„ Token",
|
|
562
562
|
"Input Tokens:": "č¾å
„ Tokenļ¼",
|
|
563
563
|
"Input:": "č¾å
„ļ¼",
|
|
564
|
-
"Install
|
|
565
|
-
"Install
|
|
564
|
+
"Install PolyRouter": "å®č£
PolyRouter",
|
|
565
|
+
"Install PolyRouter, configure your providers via web dashboard, and start routing AI requests.": "å®č£
PolyRouterļ¼éčæ Web 仪蔨ēé
ē½®ęØēęä¾åļ¼ē¶åå¼å§č·Æē± AI 请ę±ć",
|
|
566
566
|
"Install Chrome extension": "å®č£
Chrome ę©å±",
|
|
567
567
|
"Install Cline VS Code extension or CLI from": "ä»ä»„äøä½ē½®å®č£
Cline VS Code ę©å±ę CLI",
|
|
568
568
|
"Install Kilo Code from": "ä»ä»„äøä½ē½®å®č£
Kilo Code",
|
|
@@ -576,14 +576,14 @@
|
|
|
576
576
|
"Installation Guide": "å®č£
ęå",
|
|
577
577
|
"Installing Tailscale...": "ę£åØå®č£
Tailscale...",
|
|
578
578
|
"Interactive diagram visible on desktop": "ę”é¢äøåÆč§ēäŗ¤äŗå¼å¾č”Ø",
|
|
579
|
-
"Intercept CLI tool traffic and route through
|
|
580
|
-
"Intercepts Antigravity traffic via DNS redirect, letting you reroute models through
|
|
579
|
+
"Intercept CLI tool traffic and route through PolyRouter": "ę¦ęŖ CLI å·„å
·ęµéå¹¶éčæ PolyRouter č·Æē±",
|
|
580
|
+
"Intercepts Antigravity traffic via DNS redirect, letting you reroute models through PolyRouter.": "éčæ DNS éå®åę¦ęŖAntigravityęµéļ¼č®©ęØåÆä»„éčæ PolyRouter éę°č·Æē±ęØ”åć",
|
|
581
581
|
"Intercepts Claude Code's topic-naming requests and returns a fake response locally, saving API tokens.": "ę¦ęŖ Claude Code ēäø»é¢å½å请ę±å¹¶åØę¬å°čæåä¼Ŗååŗļ¼čē API Tokenć",
|
|
582
582
|
"Invalid": "ę ę",
|
|
583
583
|
"Invalid password": "åÆē é误",
|
|
584
584
|
"Issuer URL": "åč”č
URL",
|
|
585
585
|
"JSON Response": "JSON ååŗ",
|
|
586
|
-
"Join developers who are streamlining their AI integrations with
|
|
586
|
+
"Join developers who are streamlining their AI integrations with PolyRouter. Open source and free to start.": "å å
„ę£åØä½æēØ PolyRouter ē®å AI éęēå¼åč
č”åćå¼ęŗäøå
蓹ć",
|
|
587
587
|
"Judge": "č£å¤",
|
|
588
588
|
"Just now": "åå",
|
|
589
589
|
"KB per field": "ęÆäøŖåꮵē KB",
|
|
@@ -664,8 +664,8 @@
|
|
|
664
664
|
"Manual / current endpoint": "ęåØ/å½å端ē¹",
|
|
665
665
|
"Manual Callback Required": "éč¦ęåØåč°",
|
|
666
666
|
"Manual Config": "ęåØé
ē½®",
|
|
667
|
-
"Manual configuration is still available if
|
|
668
|
-
"Map Amp shorthand names such as g25p or cs45 to
|
|
667
|
+
"Manual configuration is still available if polyrouter is deployed on a remote server.": "å¦ę polyrouter éØē½²åØčæēØęå”åØäøļ¼ä»åÆä½æēØęåØé
ē½®ć",
|
|
668
|
+
"Map Amp shorthand names such as g25p or cs45 to PolyRouter aliases in your local config.": "å° Amp ē®ååē§°ļ¼å¦ g25p ę cs45ļ¼ę å°å°ę¬å°é
ē½®äøē PolyRouter å«åć",
|
|
669
669
|
"Mask (URL)": "é®ē½©ļ¼URLļ¼",
|
|
670
670
|
"Max JSON Size (KB)": "ę大 JSON å¤§å° (KB)",
|
|
671
671
|
"Max Records": "ę大记å½ę°",
|
|
@@ -916,8 +916,8 @@
|
|
|
916
916
|
"Python ā„ 3.10 required for local managed mode. Install Python first, or use an external proxy URL.": "ę¬å°ē®”ē樔å¼éč¦ Python ā„ 3.10ć请å
å®č£
Pythonļ¼ę使ēØå¤éØä»£ē URLć",
|
|
917
917
|
"Quota Tracker": "é
é¢č·čøŖåØ",
|
|
918
918
|
"Qwen": "Qwen",
|
|
919
|
-
"Qwen Code supports multiple provider types (openai, anthropic, gemini) via modelProviders in settings.json.
|
|
920
|
-
"Qwen OAuth free tier was discontinued on 2026-04-15. Use
|
|
919
|
+
"Qwen Code supports multiple provider types (openai, anthropic, gemini) via modelProviders in settings.json. PolyRouter works as an OpenAI-compatible endpoint.": "Qwen Code éčæ settings.json äøē modelProviders ęÆęå¤ē§ęä¾åē±»åļ¼openaićanthropicćgeminiļ¼ćPolyRouter ä½äøŗ OpenAI å
¼å®¹ē«Æē¹å·„ä½ć",
|
|
920
|
+
"Qwen OAuth free tier was discontinued on 2026-04-15. Use PolyRouter with alicode/openrouter/anthropic/gemini providers instead.": "Qwen OAuth å
蓹å„é¤å·²äŗ 2026-04-15 åę¢ć请ę¹ēØåø¦ę alicode/openrouter/anthropic/gemini ęä¾åē PolyRouterć",
|
|
921
921
|
"Rate Limited": "被éęµ",
|
|
922
922
|
"Read Documentation": "é
读ę攣",
|
|
923
923
|
"Reading from AWS SSO cache": "ä» AWS SSO ē¼åäøčÆ»å",
|
|
@@ -1104,7 +1104,7 @@
|
|
|
1104
1104
|
"Start Server": "åÆåØęå”åØ",
|
|
1105
1105
|
"Start Tunnel": "å¼å§é§é",
|
|
1106
1106
|
"Start a conversation": "å¼å§äøäøŖåƹčÆ",
|
|
1107
|
-
"Starting
|
|
1107
|
+
"Starting PolyRouter...": "ę£åØåÆåØ PolyRouter...",
|
|
1108
1108
|
"Status": "ē¶ę",
|
|
1109
1109
|
"Status:": "ē¶ęļ¼",
|
|
1110
1110
|
"Step 1: Open this URL in your browser": "第 1 ę„ļ¼åØęµč§åØäøęå¼ę¤ URL",
|
|
@@ -1223,7 +1223,7 @@
|
|
|
1223
1223
|
"Unknown": "ęŖē„",
|
|
1224
1224
|
"Unselect all": "åę¶éę©å
ØéØ",
|
|
1225
1225
|
"Update": "ę“ę°",
|
|
1226
|
-
"Update
|
|
1226
|
+
"Update PolyRouter": "ę“ę° PolyRouter",
|
|
1227
1227
|
"Update Password": "äæ®ę¹åÆē ",
|
|
1228
1228
|
"Update now": "ē«å³ę“ę°",
|
|
1229
1229
|
"Upstream Auth Error": "äøęøøč®¤čÆé误",
|
|
@@ -1238,8 +1238,8 @@
|
|
|
1238
1238
|
"Usage by Endpoint": "ę端ē¹ē»č®”",
|
|
1239
1239
|
"Usage by Model": "ę樔åē»č®”",
|
|
1240
1240
|
"Usage:": "ēØę³ļ¼",
|
|
1241
|
-
"Use
|
|
1242
|
-
"Use Antigravity IDE & GitHub Copilot ā with ANY provider/model from
|
|
1241
|
+
"Use PolyRouter model aliases to keep Amp shorthand mappings stable across provider updates.": "ä½æēØ PolyRouter 樔åå«åę„äæę Amp ē®åę å°åØęä¾åę“ę°ę¶ēسå®ć",
|
|
1242
|
+
"Use Antigravity IDE & GitHub Copilot ā with ANY provider/model from PolyRouter": "ä½æēØ Antigravity IDE å GitHub Copilot ā äø PolyRouter ēä»»ä½ęä¾å/樔å",
|
|
1243
1243
|
"Use Authentik or any OIDC provider to sign in to the dashboard.": "ä½æēØ Authentik ęä»»ä½ OIDC ęä¾åē»å½ä»Ŗč”Øēć",
|
|
1244
1244
|
"Use Authentik or any OIDC provider to sign in to the dashboard. You can enable password-only, OIDC-only, or both for the dashboard; model API access still uses API keys.": "ä½æēØ Authentik ęä»»ä½ OIDC ęä¾åē»å½ä»Ŗč”ØēćęØåÆä»„åÆēØä»
åÆē ćä»
OIDC ęäø¤č
åę¶åÆēØļ¼ęØ”å API 访é®ä»ä½æēØ API åÆé„ć",
|
|
1245
1245
|
"Use a GitLab OAuth application": "ä½æēØ GitLab OAuth åŗēØ",
|
|
@@ -1279,8 +1279,8 @@
|
|
|
1279
1279
|
"When": "ę¶é“",
|
|
1280
1280
|
"When ON, dashboard requires password. When OFF, access without login.": "å½ęå¼ę¶ļ¼ä»Ŗč”Øęæéč¦åÆē ćå½å
³éę¶ļ¼ę éē»å½å³åÆč®æé®ć",
|
|
1281
1281
|
"Windows:": "Windowsļ¼",
|
|
1282
|
-
"Windows: Run
|
|
1283
|
-
"Windows: Run terminal (
|
|
1282
|
+
"Windows: Run PolyRouter terminal as Administrator": "Windowsļ¼ä»„ē®”ēå身份čæč” PolyRouter ē»ē«Æ",
|
|
1283
|
+
"Windows: Run terminal (PolyRouter) as Administrator to enable MITM": "Windowsļ¼ä»„ē®”ēå身份čæč”ē»ē«Æ (PolyRouter) 仄åÆēØ MITM",
|
|
1284
1284
|
"Worker Name": "Worker åē§°",
|
|
1285
1285
|
"Works on any device": "éēØäŗä»»ä½č®¾å¤",
|
|
1286
1286
|
"Writes to": "åå
„å°",
|
|
@@ -1341,8 +1341,8 @@
|
|
|
1341
1341
|
"name|apiKey": "name|apiKey",
|
|
1342
1342
|
"no_proxy:": "ę 代ēļ¼",
|
|
1343
1343
|
"not detected locally": "ęŖåØę¬å°ę£ęµå°",
|
|
1344
|
-
"npm install -g
|
|
1345
|
-
"npx
|
|
1344
|
+
"npm install -g polyrouter": "npm install -g polyrouter",
|
|
1345
|
+
"npx polyrouter": "npx polyrouter",
|
|
1346
1346
|
"open http://localhost:9099": "open http://localhost:9099",
|
|
1347
1347
|
"openid profile email": "openid profile email",
|
|
1348
1348
|
"optional context to improve accuracy": "åÆéēäøäøęļ¼ēØäŗęé«åē”®ę§",
|
|
@@ -1359,20 +1359,20 @@
|
|
|
1359
1359
|
"seconds...": "ē§...",
|
|
1360
1360
|
"sends image/PDF/audio requests to a model that supports them first": "å°å¾ē/PDF/é³é¢čÆ·ę±ä¼å
åéå°ęÆęē樔å",
|
|
1361
1361
|
"sk-...": "sk-...",
|
|
1362
|
-
"
|
|
1362
|
+
"sk_polyrouter (default)": "sk_polyrouterļ¼é»č®¤ļ¼",
|
|
1363
1363
|
"system": "č·éē³»ē»",
|
|
1364
1364
|
"tested": "å·²ęµčÆ",
|
|
1365
1365
|
"the database.": "ę°ę®åŗć",
|
|
1366
1366
|
"to apply changes": "仄使ę“ę¹ēę",
|
|
1367
1367
|
"to verify.": "ę„éŖčÆć",
|
|
1368
|
-
"traffic through
|
|
1368
|
+
"traffic through PolyRouter via MITM.": "éčæ MITM éčæ PolyRouter ēęµéć",
|
|
1369
1369
|
"tries models in order (next on failure)": "ę锺åŗå°čÆęØ”åļ¼å¤±č“„ę¶åę¢å°äøäøäøŖļ¼",
|
|
1370
1370
|
"unknown": "ęŖē„",
|
|
1371
1371
|
"v1.0 is now live": "v1.0 ē°å·²äøēŗæ",
|
|
1372
1372
|
"vercel relay": "vercel äøē»§",
|
|
1373
1373
|
"yet.": "ć",
|
|
1374
1374
|
"your-org.deno.net": "your-org.deno.net",
|
|
1375
|
-
"Ā© 2025
|
|
1375
|
+
"Ā© 2025 PolyRouter. All rights reserved.": "Ā© 2025 PolyRouterćäæēęęęå©ć",
|
|
1376
1376
|
"ā queries all models in parallel, then a judge synthesizes one answer. Best quality, but costs the most: every request bills all panel models + the judge (N+1 calls)": "ā å¹¶č”ę„询ęę樔åļ¼ē¶åē±č£å¤ē»¼ååŗäøäøŖēę”ć蓨éęä½³ä½ęę¬ęé«ļ¼ęÆę¬”请ę±ä¼č®”蓹ęęé¢ęæęØ”å + č£å¤ļ¼N+1 ꬔč°ēØļ¼",
|
|
1377
1377
|
"ā rotates models across requests to spread load": "ā åØčÆ·ę±é“č½®ę¢ęØ”å仄åę£č“č½½",
|
|
1378
1378
|
"ā sends image/PDF/audio requests to a model that supports them first": "ā å°å¾ē/PDF/é³é¢čÆ·ę±ä¼å
åéå°ęÆęē樔å",
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
"Manage your AI provider connections": "ē®”ēęØē AI ęä¾č
é£ę„",
|
|
109
109
|
"Model combos with fallback": "å
·ęåēØē樔åēµå",
|
|
110
110
|
"Monitor your API usage, token consumption, and request logs": "ē£ę§ęØē API 使ēØć令ēę¶čåč«ę±ę„čŖ",
|
|
111
|
-
"Intercept CLI tool traffic and route through
|
|
111
|
+
"Intercept CLI tool traffic and route through PolyRouter": "ęęŖ CLI å·„å
·ęµéäø¦éé PolyRouter č·Æē±",
|
|
112
112
|
"Configure CLI tools": "é
ē½® CLI å·„å
·",
|
|
113
113
|
"API endpoint configuration": "API 端é»é
ē½®",
|
|
114
114
|
"Manage your preferences": "ē®”ēęØēé¦éøé
",
|
|
@@ -172,11 +172,11 @@
|
|
|
172
172
|
"Cert": "čęø",
|
|
173
173
|
"Server": "ęååØ",
|
|
174
174
|
"Purpose:": "ē®ēļ¼",
|
|
175
|
-
"Use Antigravity IDE & GitHub Copilot ā with ANY provider/model from
|
|
175
|
+
"Use Antigravity IDE & GitHub Copilot ā with ANY provider/model from PolyRouter": "ä½æēØ Antigravity IDE å GitHub Copilot ā č PolyRouter äøēä»»ä½ęä¾č
/樔åäøčµ·",
|
|
176
176
|
"How it works:": "å·„ä½åēļ¼",
|
|
177
|
-
"Antigravity/Copilot IDE request ā DNS redirect to localhost:443 ā MITM proxy intercepts ā
|
|
177
|
+
"Antigravity/Copilot IDE request ā DNS redirect to localhost:443 ā MITM proxy intercepts ā PolyRouter ā response to Antigravity/Copilot": "Antigravity/Copilot IDE č«ę± ā DNS éå®åå° localhost:443 ā MITM 代ēęęŖ ā PolyRouter ā åęå° Antigravity/Copilot",
|
|
178
178
|
"No API keys ā create one in Keys page": "ę²ę API éé° ā åØéé°é é¢äøåµå»ŗäøå",
|
|
179
|
-
"
|
|
179
|
+
"sk_polyrouter (default)": "sk_polyrouterļ¼é»čŖļ¼",
|
|
180
180
|
"Server started": "ęååØå·²åå",
|
|
181
181
|
"Failed to start server": "ååęååØå¤±ę",
|
|
182
182
|
"Server stopped ā all DNS cleared": "ęååØå·²åę¢ ā å·²ęø
é¤ęę DNS",
|
|
@@ -9,7 +9,7 @@ const path = require("path");
|
|
|
9
9
|
const fs = require("fs");
|
|
10
10
|
const os = require("os");
|
|
11
11
|
|
|
12
|
-
const packageName = process.env.UPDATER_PKG_NAME || "
|
|
12
|
+
const packageName = process.env.UPDATER_PKG_NAME || "polyrouter";
|
|
13
13
|
const port = parseInt(process.env.UPDATER_PORT || "20129", 10);
|
|
14
14
|
const tailLines = parseInt(process.env.UPDATER_TAIL_LINES || "8", 10);
|
|
15
15
|
const maxRetries = parseInt(process.env.UPDATER_RETRIES || "3", 10);
|
|
@@ -24,9 +24,9 @@ const appPort = parseInt(process.env.UPDATER_APP_PORT || "20128", 10);
|
|
|
24
24
|
function getDataDir() {
|
|
25
25
|
if (process.env.DATA_DIR) return process.env.DATA_DIR;
|
|
26
26
|
if (process.platform === "win32") {
|
|
27
|
-
return path.join(process.env.APPDATA || path.join(os.homedir(), "AppData", "Roaming"), "
|
|
27
|
+
return path.join(process.env.APPDATA || path.join(os.homedir(), "AppData", "Roaming"), "polyrouter");
|
|
28
28
|
}
|
|
29
|
-
return path.join(os.homedir(), ".
|
|
29
|
+
return path.join(os.homedir(), ".polyrouter");
|
|
30
30
|
}
|
|
31
31
|
const updateDir = path.join(getDataDir(), "update");
|
|
32
32
|
try { fs.mkdirSync(updateDir, { recursive: true }); } catch { /* best effort */ }
|
package/app/src/mitm/server.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var F=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var rr=F((nh,zn)=>{var yu=require("fs"),Fr=require("path"),qn=require("os"),_a="
|
|
1
|
+
var F=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var rr=F((nh,zn)=>{var yu=require("fs"),Fr=require("path"),qn=require("os"),_a="polyrouter";function Hn(){return process.platform==="win32"?Fr.join(process.env.APPDATA||Fr.join(qn.homedir(),"AppData","Roaming"),_a):Fr.join(qn.homedir(),`.${_a}`)}function vu(){let e=process.env.DATA_DIR;if(!e)return Hn();try{return yu.mkdirSync(e,{recursive:!0}),e}catch(t){if(t?.code==="EACCES"||t?.code==="EPERM")return console.warn(`[DATA_DIR] '${e}' not writable \u2192 fallback ~/.${_a}`),Hn();throw t}}var Gn=vu(),mu=Fr.join(Gn,"mitm");zn.exports={DATA_DIR:Gn,MITM_DIR:mu}});var Er=F((ih,Yn)=>{var Qn=require("fs"),Cu=process.env.NODE_ENV==="development",Eu=(()=>{if(process.platform==="win32")return null;for(let e of["/usr/sbin/lsof","/usr/bin/lsof","/sbin/lsof"])try{return Qn.accessSync(e,Qn.constants.X_OK),e}catch{}return"lsof"})(),xu=["daily-cloudcode-pa.googleapis.com","cloudcode-pa.googleapis.com","api.individual.githubcopilot.com","q.us-east-1.amazonaws.com","codewhisperer.us-east-1.amazonaws.com","runtime.us-east-1.kiro.dev","api2.cursor.sh"],Su={antigravity:[":generateContent",":streamGenerateContent"],copilot:["/chat/completions","/v1/messages","/responses"],kiro:["/generateAssistantResponse"],cursor:["/BidiAppend","/RunSSE","/RunPoll","/Run"]},Tu={antigravity:{"gemini-default":"gemini-3.5-flash-low","gemini-3.5-flash-high":"gemini-3-flash-agent","gemini-3.5-flash-medium":"gemini-3.5-flash-low","gemini-3.5-flash-extra-low":"gemini-3.5-flash-extra-low","gemini-3.1-pro-high":"gemini-pro-agent","gemini-3-pro-high":"gemini-pro-agent","gemini-3-pro-low":"gemini-3.1-pro-low"}},Au={antigravity:[{match:/flash.*extra.*low|extra.*low.*flash|flash.*low|low.*flash/i,alias:"gemini-3.5-flash-extra-low"},{match:/flash.*medium|medium.*flash/i,alias:"gemini-3.5-flash-low"},{match:/flash.*agent|agent.*flash|flash/i,alias:"gemini-3-flash-agent"},{match:/pro.*low|low.*pro/i,alias:"gemini-3.1-pro-low"},{match:/gemini.*pro|pro.*gemini/i,alias:"gemini-pro-agent"},{match:/opus/i,alias:"claude-opus-4-6-thinking"},{match:/sonnet|claude/i,alias:"claude-sonnet-4-6"},{match:/gpt.*oss|oss/i,alias:"gpt-oss-120b-medium"}]},Iu={antigravity:[/^tab[_-]/i]},Bu=["recordCodeAssistMetrics","recordTrajectoryAnalytics","fetchAdminControls","listExperiments","fetchUserInfo"];function bu(e){let t=(e||"").split(":")[0];return t==="api.individual.githubcopilot.com"?"copilot":t==="daily-cloudcode-pa.googleapis.com"||t==="cloudcode-pa.googleapis.com"?"antigravity":t==="q.us-east-1.amazonaws.com"||t==="codewhisperer.us-east-1.amazonaws.com"||t==="runtime.us-east-1.kiro.dev"?"kiro":t==="api2.cursor.sh"?"cursor":null}Yn.exports={IS_DEV:Cu,LSOF_BIN:Eu,TARGET_HOSTS:xu,URL_PATTERNS:Su,MODEL_SYNONYMS:Tu,MODEL_PATTERNS:Au,MODEL_NO_MAP:Iu,LOG_BLACKLIST_URL_PARTS:Bu,getToolForHost:bu}});var Gt=F((sh,Xn)=>{var qt=require("fs"),Kr=require("path"),Na=require("zlib"),{DATA_DIR:_u}=rr(),{LOG_BLACKLIST_URL_PARTS:Nu}=Er();function $n(){return new Date().toLocaleTimeString("en-US",{hour12:!1})}var wu=e=>console.log(`[${$n()}] [MITM] ${e}`),Ru=e=>console.error(`[${$n()}] \u274C [MITM] ${e}`),Ht=Kr.join(_u,"logs","mitm");qt.existsSync(Ht)||qt.mkdirSync(Ht,{recursive:!0});function Lu(){try{if(!qt.existsSync(Ht))return;for(let e of qt.readdirSync(Ht))try{qt.rmSync(Kr.join(Ht,e),{recursive:!0,force:!0})}catch{}}catch{}}var ku=/^\s*(\{\s*\}|\[\s*\]|null)?\s*$/;function jn(e,t=80){return String(e).replace(/[^a-zA-Z0-9]/g,"_").substring(0,t)}function Wn(e){return e?Nu.some(t=>e.includes(t)):!1}function Du(e,t){if(!e||e.length===0)return e;try{let a=(t||"").toLowerCase();if(a.includes("gzip"))return Na.gunzipSync(e);if(a.includes("br"))return Na.brotliDecompressSync(e);if(a.includes("deflate"))return Na.inflateSync(e)}catch{}return e}function Uu(e,t,a="raw"){if(Wn(e.url))return null;try{let r=new Date().toISOString().replace(/[:.]/g,"-"),n=jn((e.headers.host||"")+e.url),s=Kr.join(Ht,`${r}_${a}_${n}.req.json`),i=null;try{i=JSON.parse(t.toString())}catch{}return qt.writeFileSync(s,JSON.stringify({method:e.method,url:e.url,host:e.headers.host,headers:e.headers,body:i??t.toString("utf8")},null,2)),s}catch{return null}}function Pu(e,t="raw"){if(Wn(e.url))return null;let a=new Date().toISOString().replace(/[:.]/g,"-"),r=jn((e.headers.host||"")+e.url),n=Kr.join(Ht,`${a}_${t}_${r}.res.txt`),s=0,i={},o=[];return{writeHeader:(u,l)=>{s=u,i=l||{}},writeChunk:u=>{u!=null&&o.push(Buffer.isBuffer(u)?u:Buffer.from(u))},end:()=>{try{let u=Buffer.concat(o),l=i["content-encoding"]||i["Content-Encoding"],c=Du(u,l).toString("utf8");if(ku.test(c))return;let g={...i};delete g["content-encoding"],delete g["Content-Encoding"];let v=`STATUS: ${s}
|
|
2
2
|
HEADERS: ${JSON.stringify(g,null,2)}
|
|
3
3
|
---BODY---
|
|
4
4
|
${c}`;qt.writeFileSync(n,v)}catch{}},file:n}}Xn.exports={log:wu,err:Ru,dumpRequest:Uu,createResponseDumper:Pu,clearDumpDir:Lu}});var Y=F((oh,Jn)=>{Jn.exports={options:{usePureJavaScript:!1}}});var ti=F((uh,ei)=>{var wa={};ei.exports=wa;var Zn={};wa.encode=function(e,t,a){if(typeof t!="string")throw new TypeError('"alphabet" must be a string.');if(a!==void 0&&typeof a!="number")throw new TypeError('"maxline" must be a number.');var r="";if(!(e instanceof Uint8Array))r=Ou(e,t);else{var n=0,s=t.length,i=t.charAt(0),o=[0];for(n=0;n<e.length;++n){for(var u=0,l=e[n];u<o.length;++u)l+=o[u]<<8,o[u]=l%s,l=l/s|0;for(;l>0;)o.push(l%s),l=l/s|0}for(n=0;e[n]===0&&n<e.length-1;++n)r+=i;for(n=o.length-1;n>=0;--n)r+=t[o[n]]}if(a){var f=new RegExp(".{1,"+a+"}","g");r=r.match(f).join(`\r
|
|
@@ -22,7 +22,7 @@ ${c}`;qt.writeFileSync(n,v)}catch{}},file:n}}Xn.exports={log:wu,err:Ru,dumpReque
|
|
|
22
22
|
Private-Lines: `+u+`\r
|
|
23
23
|
`,s+=f;var S=va("putty-private-key-file-mac-key",t),A=Ce.util.createBuffer();vr(A,r),vr(A,n),vr(A,a),A.putInt32(i.length()),A.putBuffer(i),A.putInt32(l.length()),A.putBuffer(l);var B=Ce.hmac.create();return B.start("sha1",S),B.update(A.bytes()),s+=`\r
|
|
24
24
|
Private-MAC: `+B.digest().toHex()+`\r
|
|
25
|
-
`,s};ma.publicKeyToOpenSSH=function(e,t){var a="ssh-rsa";t=t||"";var r=Ce.util.createBuffer();return vr(r,a),Et(r,e.e),Et(r,e.n),a+" "+Ce.util.encode64(r.bytes())+" "+t};ma.privateKeyToOpenSSH=function(e,t){return t?Ce.pki.encryptRsaPrivateKey(e,t,{legacy:!0,algorithm:"aes128"}):Ce.pki.privateKeyToPem(e)};ma.getPublicKeyFingerprint=function(e,t){t=t||{};var a=t.md||Ce.md.md5.create(),r="ssh-rsa",n=Ce.util.createBuffer();vr(n,r),Et(n,e.e),Et(n,e.n),a.start(),a.update(n.getBytes());var s=a.digest();if(t.encoding==="hex"){var i=s.toHex();return t.delimiter?i.match(/.{2}/g).join(t.delimiter):i}else{if(t.encoding==="binary")return s.getBytes();if(t.encoding)throw new Error('Unknown encoding "'+t.encoding+'".')}return s};function Et(e,t){var a=t.toString(16);a[0]>="8"&&(a="00"+a);var r=Ce.util.hexToBytes(a);e.putInt32(r.length),e.putBytes(r)}function vr(e,t){e.putInt32(t.length),e.putString(t)}function va(){for(var e=Ce.md.sha1.create(),t=arguments.length,a=0;a<t;++a)e.update(arguments[a]);return e.digest()}});var po=F(($h,ho)=>{ho.exports=Y();wt();Ls();lt();qr();Ir();Ws();ir();eo();no();so();nn();Zr();Qt();Ja();un();lo();fn();en();Ga();sa();tt();Ya();co();yn();re()});var mo=F((jh,vo)=>{var go=require("path"),Xe=require("fs"),Je=po(),{MITM_DIR:Ca}=rr(),Ft=go.join(Ca,"rootCA.key"),Bt=go.join(Ca,"rootCA.crt");function yo(e){try{let t=Je.pki.certificateFromPem(Xe.readFileSync(e,"utf8")),a=new Date(Date.now()+720*60*60*1e3);return t.validity.notAfter<a}catch{return!0}}function Sc(){let e=Xe.existsSync(Ft)&&Xe.existsSync(Bt);if(e&&!yo(Bt))return console.log("\u2705 Root CA already exists"),{key:Ft,cert:Bt};if(e){console.log("\u{1F510} Root CA expired or expiring soon \u2014 regenerating...");try{Xe.unlinkSync(Ft)}catch{}try{Xe.unlinkSync(Bt)}catch{}}Xe.existsSync(Ca)||Xe.mkdirSync(Ca,{recursive:!0}),console.log("\u{1F510} Generating Root CA certificate...");let t=Je.pki.rsa.generateKeyPair(2048),a=Je.pki.createCertificate();a.publicKey=t.publicKey,a.serialNumber="01",a.validity.notBefore=new Date,a.validity.notAfter=new Date,a.validity.notAfter.setFullYear(a.validity.notBefore.getFullYear()+10);let r=[{name:"commonName",value:"
|
|
25
|
+
`,s};ma.publicKeyToOpenSSH=function(e,t){var a="ssh-rsa";t=t||"";var r=Ce.util.createBuffer();return vr(r,a),Et(r,e.e),Et(r,e.n),a+" "+Ce.util.encode64(r.bytes())+" "+t};ma.privateKeyToOpenSSH=function(e,t){return t?Ce.pki.encryptRsaPrivateKey(e,t,{legacy:!0,algorithm:"aes128"}):Ce.pki.privateKeyToPem(e)};ma.getPublicKeyFingerprint=function(e,t){t=t||{};var a=t.md||Ce.md.md5.create(),r="ssh-rsa",n=Ce.util.createBuffer();vr(n,r),Et(n,e.e),Et(n,e.n),a.start(),a.update(n.getBytes());var s=a.digest();if(t.encoding==="hex"){var i=s.toHex();return t.delimiter?i.match(/.{2}/g).join(t.delimiter):i}else{if(t.encoding==="binary")return s.getBytes();if(t.encoding)throw new Error('Unknown encoding "'+t.encoding+'".')}return s};function Et(e,t){var a=t.toString(16);a[0]>="8"&&(a="00"+a);var r=Ce.util.hexToBytes(a);e.putInt32(r.length),e.putBytes(r)}function vr(e,t){e.putInt32(t.length),e.putString(t)}function va(){for(var e=Ce.md.sha1.create(),t=arguments.length,a=0;a<t;++a)e.update(arguments[a]);return e.digest()}});var po=F(($h,ho)=>{ho.exports=Y();wt();Ls();lt();qr();Ir();Ws();ir();eo();no();so();nn();Zr();Qt();Ja();un();lo();fn();en();Ga();sa();tt();Ya();co();yn();re()});var mo=F((jh,vo)=>{var go=require("path"),Xe=require("fs"),Je=po(),{MITM_DIR:Ca}=rr(),Ft=go.join(Ca,"rootCA.key"),Bt=go.join(Ca,"rootCA.crt");function yo(e){try{let t=Je.pki.certificateFromPem(Xe.readFileSync(e,"utf8")),a=new Date(Date.now()+720*60*60*1e3);return t.validity.notAfter<a}catch{return!0}}function Sc(){let e=Xe.existsSync(Ft)&&Xe.existsSync(Bt);if(e&&!yo(Bt))return console.log("\u2705 Root CA already exists"),{key:Ft,cert:Bt};if(e){console.log("\u{1F510} Root CA expired or expiring soon \u2014 regenerating...");try{Xe.unlinkSync(Ft)}catch{}try{Xe.unlinkSync(Bt)}catch{}}Xe.existsSync(Ca)||Xe.mkdirSync(Ca,{recursive:!0}),console.log("\u{1F510} Generating Root CA certificate...");let t=Je.pki.rsa.generateKeyPair(2048),a=Je.pki.createCertificate();a.publicKey=t.publicKey,a.serialNumber="01",a.validity.notBefore=new Date,a.validity.notAfter=new Date,a.validity.notAfter.setFullYear(a.validity.notBefore.getFullYear()+10);let r=[{name:"commonName",value:"PolyRouter MITM Root CA"},{name:"organizationName",value:"PolyRouter"},{name:"countryName",value:"US"}];a.setSubject(r),a.setIssuer(r),a.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,cRLSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),a.sign(t.privateKey,Je.md.sha256.create());let n=Je.pki.privateKeyToPem(t.privateKey),s=Je.pki.certificateToPem(a);return Xe.writeFileSync(Ft,n),Xe.writeFileSync(Bt,s),console.log("\u2705 Root CA generated successfully"),{key:Ft,cert:Bt}}function Tc(){if(!Xe.existsSync(Ft)||!Xe.existsSync(Bt))throw new Error("Root CA not found. Generate it first.");let e=Xe.readFileSync(Ft,"utf8"),t=Xe.readFileSync(Bt,"utf8");return{key:Je.pki.privateKeyFromPem(e),cert:Je.pki.certificateFromPem(t)}}function Ac(e,t){let a=Je.pki.rsa.generateKeyPair(2048),r=Je.pki.createCertificate();return r.publicKey=a.publicKey,r.serialNumber=Math.floor(Math.random()*1e6).toString(),r.validity.notBefore=new Date,r.validity.notAfter=new Date,r.validity.notAfter.setFullYear(r.validity.notBefore.getFullYear()+1),r.setSubject([{name:"commonName",value:e}]),r.setIssuer(t.cert.subject.attributes),r.setExtensions([{name:"basicConstraints",cA:!1},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"subjectAltName",altNames:[{type:2,value:e},{type:2,value:`*.${e}`}]}]),r.sign(t.key,Je.md.sha256.create()),{key:Je.pki.privateKeyToPem(a.privateKey),cert:Je.pki.certificateToPem(r)}}vo.exports={generateRootCA:Sc,loadRootCA:Tc,generateLeafCert:Ac,isCertExpired:yo,ROOT_CA_CERT_PATH:Bt,ROOT_CA_KEY_PATH:Ft}});var Eo=F((Zh,Co)=>{var Wh=require("path"),Xh=require("fs"),{MITM_DIR:Jh}=rr(),{generateRootCA:Ic,loadRootCA:Bc,generateLeafCert:bc}=mo();function _c(){return Ic()}function Nc(e){try{let t=Bc(),a=bc(e,t);return{key:a.key,cert:a.cert}}catch(t){return console.error(`Failed to generate cert for ${e}:`,t.message),null}}Co.exports={generateCert:_c,getCertForDomain:Nc}});var Ao=F((ep,To)=>{var xo=require("fs"),wc=require("path"),{DATA_DIR:Rc}=rr(),So=wc.join(Rc,"mitm","aliases.json");function Lc(){try{return xo.existsSync(So)?JSON.parse(xo.readFileSync(So,"utf-8")):null}catch{return null}}function kc(e){return Lc()?.[e]||null}To.exports={getMitmAlias:kc}});var bo=F((tp,Bo)=>{"use strict";var mr="1.23.2";function Dc(e){return!e||typeof e!="object"||Array.isArray(e)?!1:String(e.ideName||"").toLowerCase()==="antigravity"||String(e.ideType||"").toUpperCase()==="ANTIGRAVITY"?!0:Object.prototype.hasOwnProperty.call(e,"ideVersion")}function Io(e,t){return typeof e!="string"||!e.includes("antigravity/")?e:e.replace(/antigravity\/[^\s]+/,`antigravity/${t}`)}function Uc(e,t){let a={...t},r=Io(a["user-agent"],mr),n=r!==a["user-agent"];n&&(a["user-agent"]=r);try{let s=JSON.parse(e.toString());return Dc(s?.metadata)?(s.metadata.ideVersion=mr,{bodyBuffer:Buffer.from(JSON.stringify(s)),headers:a,applied:!0,version:mr}):{bodyBuffer:e,headers:a,applied:n,version:mr}}catch{return{bodyBuffer:e,headers:a,applied:n,version:mr}}}Bo.exports={ANTIGRAVITY_IDE_VERSION:mr,applyAntigravityIdeVersionOverride:Uc,rewriteAntigravityUserAgent:Io}});var xa=F((ap,wo)=>{var{log:Ea,err:rp}=Gt(),_o="http://localhost:20128",Pc=String(process.env.MITM_ROUTER_BASE||_o).trim().replace(/\/+$/,"")||_o,No=process.env.ROUTER_API_KEY,Oc=new Set(["host","content-length","connection","transfer-encoding","content-type","authorization"]);async function Vc(e,t="/v1/chat/completions",a={}){let r={};for(let[s,i]of Object.entries(a))Oc.has(s.toLowerCase())||(r[s]=i);return await fetch(`${Pc}${t}`,{method:"POST",headers:{...r,"Content-Type":"application/json",...No&&{Authorization:`Bearer ${No}`}},body:JSON.stringify(e)})}async function Fc(e,t,a){let r=e.headers.get("content-type")||"application/json",n=e.status||200,s={"Content-Type":r,"Cache-Control":"no-cache",Connection:"keep-alive"};if(r.includes("text/event-stream")&&(s["X-Accel-Buffering"]="no"),t.writeHead(n,s),a&&a.writeHeader(e.status,Object.fromEntries(e.headers)),!e.body){let u=await e.text().catch(()=>"");a&&(a.writeChunk(u),a.end()),t.end(u);return}let i=e.body.getReader(),o=new TextDecoder;for(;;){let{done:u,value:l}=await i.read();if(u){a&&a.end(),t.end();break}a&&a.writeChunk(l),t.write(o.decode(l,{stream:!0}))}}async function Kc(e,t,a,r){let n=e.headers.get("content-type")||"application/json",s={"Content-Type":n,"Cache-Control":"no-cache",Connection:"keep-alive"};if(n.includes("text/event-stream")&&(s["X-Accel-Buffering"]="no"),t.writeHead(200,s),!e.body){t.end(await e.text().catch(()=>""));return}let i=e.body.getReader(),o=new TextDecoder("utf-8",{fatal:!1}),u="";for(;;){let{done:l,value:f}=await i.read();if(l)break;u+=o.decode(f,{stream:!0});let c=u.split(`
|
|
26
26
|
`);u=c.pop()||"";for(let g of c){let v=g.trim();if(!v||!v.startsWith("data:"))continue;let y=v.slice(5).trim();if(y!=="[DONE]"){process.env.DEBUG_MITM&&Ea(`[SSE in] ${y.slice(0,200)}`);try{let x=JSON.parse(y),S=a(x,r);if(S!=null){let A=Array.isArray(S)?S:[S];for(let B of A){if(process.env.DEBUG_MITM){let b=B.length||B.byteLength||0;Ea(`[write binary frame] (${b}B) first 20B: ${Array.from(B.slice(0,20)).join(",")}`)}t.write(Buffer.from(B))}}}catch{}}}}try{let l=a(null,r);if(l!=null){let f=Array.isArray(l)?l:[l];for(let c of f)t.write(c)}}catch{}t.end()}async function Mc(e,t,a,r){let n={"Content-Type":"application/vnd.amazon.eventstream","Cache-Control":"no-cache",Connection:"keep-alive"};if(t.writeHead(200,n),!e.body){t.end(await e.text().catch(()=>""));return}let s=e.body.getReader(),i=new TextDecoder("utf-8",{fatal:!1}),o="";for(;;){let{done:u,value:l}=await s.read();if(u)break;o+=i.decode(l,{stream:!0});let f=o.split(`
|
|
27
27
|
`);o=f.pop()||"";for(let c of f){let g=c.trim();if(!g||!g.startsWith("data:"))continue;let v=g.slice(5).trim();if(v!=="[DONE]"){process.env.DEBUG_MITM&&Ea(`[SSE in] ${v.slice(0,200)}`);try{let y=JSON.parse(v),x=a(y,r);if(x!=null){let S=Array.isArray(x)?x:[x];for(let A of S){if(process.env.DEBUG_MITM){let B=A.length||A.byteLength||0;Ea(`[write binary frame] (${B}B) first 20B: ${Array.from(A.slice(0,20)).join(",")}`)}t.write(Buffer.from(A))}}}catch{}}}}try{let u=a(null,r);if(u!=null){let l=Array.isArray(u)?u:[u];for(let f of l)t.write(f)}}catch{}t.end()}wo.exports={fetchRouter:Vc,pipeSSE:Fc,pipeTransformedSSE:Kc,pipeTransformedEventStream:Mc}});var Lo=F((np,Ro)=>{var{err:qc,createResponseDumper:Hc}=Gt(),{IS_DEV:Gc}=Er(),{fetchRouter:zc,pipeSSE:Qc}=xa();async function Yc(e,t,a,r){let n=Gc?Hc(e,"intercept-antigravity"):null,s=e.url.includes(":streamGenerateContent");try{let i=JSON.parse(a.toString());i.model&&(i.model=r);let o=await zc(i,"/v1/chat/completions",e.headers);await Qc(o,t,n)}catch(i){qc(`[antigravity] ${i.message}`),n&&(n.writeChunk(`
|
|
28
28
|
[ERROR] ${i.message}
|
|
@@ -36,7 +36,7 @@ Private-MAC: `+B.digest().toHex()+`\r
|
|
|
36
36
|
'-WindowStyle','Hidden','-EncodedCommand','${t}'
|
|
37
37
|
) -Verb RunAs -Wait -PassThru -WindowStyle Hidden;
|
|
38
38
|
if ($proc.ExitCode -ne 0) { throw "Elevated command exited with code $($proc.ExitCode)" }
|
|
39
|
-
`;return new Promise((r,n)=>{zo(`powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -Command ${$o(a)}`,{windowsHide:!0},(s,i,o)=>{if(s){let u=o||s.message;u.includes("canceled by the user")||u.includes("operation was canceled")?n(new Error("User canceled UAC prompt")):n(new Error(u))}else r(i)})})}jo.exports={isAdmin:Yo,runElevatedPowerShell:Ed,quotePs:$o}});var iu=F((hp,nu)=>{var{exec:fp,spawn:Xo,execSync:Or}=require("child_process"),_e=require("fs"),xd=require("path"),cp=require("os"),{log:Sa,err:Sd}=Gt(),{TOOL_HOSTS:Kt}=Go(),{runElevatedPowerShell:Jo,isAdmin:dp}=Wo();function Zo(e,t,a){let r=`${e}.
|
|
39
|
+
`;return new Promise((r,n)=>{zo(`powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -Command ${$o(a)}`,{windowsHide:!0},(s,i,o)=>{if(s){let u=o||s.message;u.includes("canceled by the user")||u.includes("operation was canceled")?n(new Error("User canceled UAC prompt")):n(new Error(u))}else r(i)})})}jo.exports={isAdmin:Yo,runElevatedPowerShell:Ed,quotePs:$o}});var iu=F((hp,nu)=>{var{exec:fp,spawn:Xo,execSync:Or}=require("child_process"),_e=require("fs"),xd=require("path"),cp=require("os"),{log:Sa,err:Sd}=Gt(),{TOOL_HOSTS:Kt}=Go(),{runElevatedPowerShell:Jo,isAdmin:dp}=Wo();function Zo(e,t,a){let r=`${e}.polyrouter.new`,n=`${e}.polyrouter.bak`;try{_e.writeFileSync(r,a,"utf8");try{_e.unlinkSync(n)}catch{}_e.renameSync(e,n);try{_e.renameSync(r,e)}catch(s){try{_e.renameSync(n,e)}catch{_e.writeFileSync(e,t,"utf8")}throw s}try{_e.unlinkSync(n)}catch{}}finally{try{_e.unlinkSync(r)}catch{}}}var bt=process.platform==="win32",eu=process.platform==="darwin",Ze=bt?xd.join(process.env.SystemRoot||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts";function Ta(){if(bt)return!1;try{return Or("command -v sudo",{stdio:"ignore",windowsHide:!0}),!0}catch{return!1}}function tu(){if(bt||!Ta())return!0;try{return Or("sudo -n true",{stdio:"ignore",windowsHide:!0}),!0}catch{return!1}}function Td(){return!bt&&Ta()&&!tu()}function Vr(e,t){return new Promise((a,r)=>{let n=Ta(),s=n?Xo("sudo",["-S","sh","-c",e],{stdio:["pipe","pipe","pipe"],windowsHide:!0}):Xo("sh",["-c",e],{stdio:["ignore","pipe","pipe"],windowsHide:!0}),i="",o="";s.stdout.on("data",u=>{i+=u}),s.stderr.on("data",u=>{o+=u}),s.on("close",u=>{u===0?a(i):r(new Error(o||`Exit code ${u}`))}),n&&(s.stdin.write(`${t}
|
|
40
40
|
`),s.stdin.end())})}async function ru(e){bt||(eu?await Vr("dscacheutil -flushcache && killall -HUP mDNSResponder",e):await Vr("resolvectl flush-caches 2>/dev/null || true",e))}function Dn(e=null){try{let t=_e.readFileSync(Ze,"utf8");return e?t.includes(e):Kt.antigravity.every(a=>t.includes(a))}catch{return!1}}function Ad(){try{let e=_e.readFileSync(Ze,"utf8"),t={};for(let[a,r]of Object.entries(Kt))t[a]=r.every(n=>e.includes(n));return t}catch{return Object.fromEntries(Object.keys(Kt).map(e=>[e,!1]))}}async function Id(e,t){let a=Kt[e];if(!a)throw new Error(`Unknown tool: ${e}`);let r=a.filter(n=>!Dn(n));if(r.length===0){Sa(`\u{1F310} DNS ${e}: already active`);return}try{if(bt){let n=_e.readFileSync(Ze,"utf8"),s=n.replace(/[\r\n\s]+$/g,""),i=r.map(u=>`127.0.0.1 ${u}`).join(`\r
|
|
41
41
|
`),o=`${s}\r
|
|
42
42
|
${i}\r
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const MAX_EVENT_BYTES = 256 * 1024;
|
|
2
2
|
|
|
3
3
|
export const REALTIME_PATH = "/v1/realtime";
|
|
4
|
-
export const REALTIME_PROTOCOL = "
|
|
4
|
+
export const REALTIME_PROTOCOL = "polyrouter.realtime.voice.v1";
|
|
5
5
|
// ChatGPT/Codex OAuth accounts use the realtime model exposed by the
|
|
6
6
|
// reference OAuth bridge. Keep the public API model names as fallbacks.
|
|
7
7
|
export const DEFAULT_REALTIME_MODEL = "gpt-realtime-2";
|
|
@@ -8,10 +8,12 @@ import {
|
|
|
8
8
|
} from "./protocol.js";
|
|
9
9
|
async function authenticateUpgrade(request, host) {
|
|
10
10
|
const url = new URL(request.url || "/", `http://${host}`);
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
|
|
11
|
+
// Always use 127.0.0.1 for the in-process auth hop ā it is reachable
|
|
12
|
+
// regardless of whether the server binds 0.0.0.0, localhost, ::, or ::1.
|
|
13
|
+
// `localhost` is ambiguous on Windows (resolves to IPv6 ::1, unreachable
|
|
14
|
+
// when the server binds IPv4-only 0.0.0.0).
|
|
15
|
+
const internalHost = (host === "0.0.0.0" || host === "::" || host === "localhost" || host === "::1")
|
|
16
|
+
? "127.0.0.1" : host;
|
|
15
17
|
const response = await fetch(`http://${internalHost}:${process.env.PORT || 20128}/api/realtime/authorize`, {
|
|
16
18
|
method: "POST",
|
|
17
19
|
headers: {
|
package/cli.js
CHANGED
|
@@ -67,7 +67,7 @@ const { ensureSqliteRuntime, buildEnvWithRuntime } = require("./hooks/sqliteRunt
|
|
|
67
67
|
const { ensureTrayRuntime } = require("./hooks/trayRuntime");
|
|
68
68
|
const args = process.argv.slice(2);
|
|
69
69
|
|
|
70
|
-
// Subcommands (`
|
|
70
|
+
// Subcommands (`polyrouter xai video ā¦`) run against an already-running gateway
|
|
71
71
|
// and bypass the launcher flow (no runtime self-heal, no server spawn).
|
|
72
72
|
if (args[0] === "xai" && args[1] === "video") {
|
|
73
73
|
const { run } = require("./src/cli/commands/xaiVideo");
|
|
@@ -80,7 +80,7 @@ if (args[0] === "xai" && args[1] === "video") {
|
|
|
80
80
|
return;
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
// Self-heal SQLite runtime deps (sql.js + better-sqlite3) into ~/.
|
|
83
|
+
// Self-heal SQLite runtime deps (sql.js + better-sqlite3) into ~/.polyrouter/runtime
|
|
84
84
|
// so the server can resolve them via NODE_PATH. Best-effort ā sql.js is required,
|
|
85
85
|
// better-sqlite3 is optional. Logs to stderr only on failure.
|
|
86
86
|
try { ensureSqliteRuntime({ silent: true }); } catch {}
|
|
@@ -110,9 +110,9 @@ function getDisplayHost() {
|
|
|
110
110
|
return host === DEFAULT_HOST ? "localhost" : host;
|
|
111
111
|
}
|
|
112
112
|
const MAX_PORT_ATTEMPTS = 10;
|
|
113
|
-
// Identifiers for killAllAppProcesses - only kill
|
|
113
|
+
// Identifiers for killAllAppProcesses - only kill polyrouter specifically
|
|
114
114
|
const PROCESS_IDENTIFIERS = [
|
|
115
|
-
'
|
|
115
|
+
'polyrouter' // Only package name - avoid killing other apps
|
|
116
116
|
];
|
|
117
117
|
|
|
118
118
|
// Parse arguments
|
|
@@ -188,8 +188,8 @@ function compareVersions(a, b) {
|
|
|
188
188
|
// Get app data dir (matches app/src/lib/dataDir.js convention)
|
|
189
189
|
function getAppDataDir() {
|
|
190
190
|
return process.platform === "win32"
|
|
191
|
-
? path.join(process.env.APPDATA || "", "
|
|
192
|
-
: path.join(os.homedir(), ".
|
|
191
|
+
? path.join(process.env.APPDATA || "", "polyrouter")
|
|
192
|
+
: path.join(os.homedir(), ".polyrouter");
|
|
193
193
|
}
|
|
194
194
|
|
|
195
195
|
// Kill PID from file (best-effort, removes file after)
|
|
@@ -246,7 +246,7 @@ function killCloudflaredByAppPort(appPort) {
|
|
|
246
246
|
return pids;
|
|
247
247
|
}
|
|
248
248
|
|
|
249
|
-
// Kill all
|
|
249
|
+
// Kill all polyrouter processes
|
|
250
250
|
function killAllAppProcesses(appPort) {
|
|
251
251
|
return new Promise((resolve) => {
|
|
252
252
|
try {
|
|
@@ -273,11 +273,11 @@ function killAllAppProcesses(appPort) {
|
|
|
273
273
|
});
|
|
274
274
|
const lines = output.split("\n").slice(1).filter(l => l.trim());
|
|
275
275
|
lines.forEach(line => {
|
|
276
|
-
// Whitelist: real node process running
|
|
277
|
-
// Avoids killing editors/grep/strace/cursor that just have "
|
|
276
|
+
// Whitelist: real node process running polyrouter/cli.js, or next-server.
|
|
277
|
+
// Avoids killing editors/grep/strace/cursor that just have "polyrouter" in cmdline.
|
|
278
278
|
const cmd = line.toLowerCase();
|
|
279
279
|
const isAppProcess =
|
|
280
|
-
(cmd.includes("node") && cmd.includes("
|
|
280
|
+
(cmd.includes("node") && cmd.includes("polyrouter") && (cmd.includes("cli.js") || cmd.includes("\\polyrouter") || cmd.includes("/polyrouter")))
|
|
281
281
|
|| cmd.includes("next-server");
|
|
282
282
|
if (isAppProcess) {
|
|
283
283
|
const match = line.match(/^"(\d+)"/);
|
|
@@ -299,11 +299,11 @@ function killAllAppProcesses(appPort) {
|
|
|
299
299
|
const lines = output.split('\n');
|
|
300
300
|
|
|
301
301
|
lines.forEach(line => {
|
|
302
|
-
// Whitelist: real node process running
|
|
303
|
-
// Avoids killing grep/strace/editors/cursor that incidentally match "
|
|
302
|
+
// Whitelist: real node process running polyrouter/cli.js, or next-server.
|
|
303
|
+
// Avoids killing grep/strace/editors/cursor that incidentally match "polyrouter".
|
|
304
304
|
const cmd = line.toLowerCase();
|
|
305
305
|
const isAppProcess =
|
|
306
|
-
(cmd.includes("node") && cmd.includes("
|
|
306
|
+
(cmd.includes("node") && cmd.includes("polyrouter") && (cmd.includes("cli.js") || cmd.includes("/polyrouter")))
|
|
307
307
|
|| cmd.includes("next-server");
|
|
308
308
|
if (isAppProcess) {
|
|
309
309
|
const parts = line.trim().split(/\s+/);
|
|
@@ -774,7 +774,7 @@ function startServer(updatePromise) {
|
|
|
774
774
|
process.on("SIGHUP", () => {});
|
|
775
775
|
|
|
776
776
|
console.log(`\nā³ Switching to tray mode... (icon already visible in menu bar)`);
|
|
777
|
-
console.log(`š
|
|
777
|
+
console.log(`š PolyRouter is running in tray (PID: ${process.pid})`);
|
|
778
778
|
console.log(` Server: http://${displayHost}:${port}`);
|
|
779
779
|
console.log(`\nš” You can close this terminal. Right-click tray icon to quit.\n`);
|
|
780
780
|
|
|
@@ -793,7 +793,7 @@ function startServer(updatePromise) {
|
|
|
793
793
|
});
|
|
794
794
|
bgProcess.unref();
|
|
795
795
|
|
|
796
|
-
console.log(`š
|
|
796
|
+
console.log(`š PolyRouter is now running in background (PID: ${bgProcess.pid})`);
|
|
797
797
|
console.log(` Server: http://${displayHost}:${port}`);
|
|
798
798
|
console.log(`\nš” You can close this terminal. Right-click tray icon to quit.\n`);
|
|
799
799
|
|
|
@@ -838,7 +838,7 @@ function startServer(updatePromise) {
|
|
|
838
838
|
if (restartCount >= MAX_RESTARTS) {
|
|
839
839
|
console.error(`\nā ļø Server crashed ${MAX_RESTARTS} times. Disabling MIT and restarting...`);
|
|
840
840
|
try {
|
|
841
|
-
const dbPath = path.join(os.homedir(), process.platform === "win32" ? path.join("AppData", "Roaming", "
|
|
841
|
+
const dbPath = path.join(os.homedir(), process.platform === "win32" ? path.join("AppData", "Roaming", "polyrouter", "db.json") : path.join(".polyrouter", "db.json"));
|
|
842
842
|
if (fs.existsSync(dbPath)) {
|
|
843
843
|
const db = JSON.parse(fs.readFileSync(dbPath, "utf-8"));
|
|
844
844
|
if (db.settings) db.settings.mitmEnabled = false;
|
package/hooks/postinstall.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
// Postinstall: warm-up SQLite deps into ~/.
|
|
4
|
-
// `
|
|
3
|
+
// Postinstall: warm-up SQLite deps into ~/.polyrouter/runtime so the first
|
|
4
|
+
// `polyrouter` start doesn't need network. Failure here is non-fatal ā
|
|
5
5
|
// cli.js will retry at runtime if anything is missing.
|
|
6
6
|
const { ensureSqliteRuntime } = require("./sqliteRuntime");
|
|
7
7
|
const { ensureTrayRuntime } = require("./trayRuntime");
|
|
8
8
|
|
|
9
9
|
try {
|
|
10
10
|
ensureSqliteRuntime({ silent: false });
|
|
11
|
-
console.log("[
|
|
11
|
+
console.log("[polyrouter] runtime SQLite deps ready");
|
|
12
12
|
} catch (e) {
|
|
13
|
-
console.warn(`[
|
|
13
|
+
console.warn(`[polyrouter] runtime warm-up skipped: ${e.message}`);
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
try {
|
|
17
17
|
ensureTrayRuntime({ silent: false });
|
|
18
18
|
} catch (e) {
|
|
19
|
-
console.warn(`[
|
|
19
|
+
console.warn(`[polyrouter] tray runtime skipped: ${e.message}`);
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
process.exit(0);
|
package/hooks/sqliteRuntime.js
CHANGED
|
@@ -12,8 +12,8 @@ const SQL_JS_VERSION = "1.14.1";
|
|
|
12
12
|
function getDataDir() {
|
|
13
13
|
if (process.env.DATA_DIR) return process.env.DATA_DIR;
|
|
14
14
|
return process.platform === "win32"
|
|
15
|
-
? path.join(process.env.APPDATA || os.homedir(), "
|
|
16
|
-
: path.join(os.homedir(), ".
|
|
15
|
+
? path.join(process.env.APPDATA || os.homedir(), "polyrouter")
|
|
16
|
+
: path.join(os.homedir(), ".polyrouter");
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
function getRuntimeDir() {
|
|
@@ -32,10 +32,10 @@ function ensureRuntimeDir() {
|
|
|
32
32
|
const pkgPath = path.join(dir, "package.json");
|
|
33
33
|
if (!fs.existsSync(pkgPath)) {
|
|
34
34
|
fs.writeFileSync(pkgPath, JSON.stringify({
|
|
35
|
-
name: "
|
|
35
|
+
name: "polyrouter-runtime",
|
|
36
36
|
version: "1.0.0",
|
|
37
37
|
private: true,
|
|
38
|
-
description: "User-writable runtime deps for
|
|
38
|
+
description: "User-writable runtime deps for polyrouter (better-sqlite3 native binary)",
|
|
39
39
|
}, null, 2));
|
|
40
40
|
}
|
|
41
41
|
return dir;
|
package/hooks/trayRuntime.js
CHANGED
|
@@ -23,8 +23,8 @@ function hasSystray() {
|
|
|
23
23
|
// On Windows it was an AV false-positive risk; on macOS/Linux its bundled
|
|
24
24
|
// binary is broken on modern OS versions.
|
|
25
25
|
function cleanupLegacySystray({ silent = false } = {}) {
|
|
26
|
-
// 1) Runtime dir: ~/.
|
|
27
|
-
// 2) npm global nested: <npm_prefix>/node_modules/
|
|
26
|
+
// 1) Runtime dir: ~/.polyrouter/runtime/node_modules/systray (or %APPDATA% on Win)
|
|
27
|
+
// 2) npm global nested: <npm_prefix>/node_modules/polyrouter/node_modules/systray
|
|
28
28
|
// __dirname here = <pkg root>/hooks ā up 1 = pkg root
|
|
29
29
|
const targets = [
|
|
30
30
|
path.join(getRuntimeNodeModules(), LEGACY_SYSTRAY_PKG),
|
|
@@ -34,9 +34,9 @@ function cleanupLegacySystray({ silent = false } = {}) {
|
|
|
34
34
|
if (fs.existsSync(dir)) {
|
|
35
35
|
try {
|
|
36
36
|
fs.rmSync(dir, { recursive: true, force: true });
|
|
37
|
-
if (!silent) console.log(`[
|
|
37
|
+
if (!silent) console.log(`[polyrouter][runtime] removed legacy systray: ${dir}`);
|
|
38
38
|
} catch (e) {
|
|
39
|
-
if (!silent) console.warn(`[
|
|
39
|
+
if (!silent) console.warn(`[polyrouter][runtime] failed to remove ${dir}: ${e.message}`);
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
}
|
|
@@ -53,7 +53,7 @@ function chmodSystrayBin({ silent = false } = {}) {
|
|
|
53
53
|
try {
|
|
54
54
|
fs.chmodSync(binPath, 0o755);
|
|
55
55
|
} catch (e) {
|
|
56
|
-
if (!silent) console.warn(`[
|
|
56
|
+
if (!silent) console.warn(`[polyrouter][runtime] chmod tray bin failed: ${e.message}`);
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
|
|
@@ -63,7 +63,7 @@ function ensureRuntimeDir() {
|
|
|
63
63
|
const pkgPath = path.join(dir, "package.json");
|
|
64
64
|
if (!fs.existsSync(pkgPath)) {
|
|
65
65
|
fs.writeFileSync(pkgPath, JSON.stringify({
|
|
66
|
-
name: "
|
|
66
|
+
name: "polyrouter-runtime",
|
|
67
67
|
version: "1.0.0",
|
|
68
68
|
private: true
|
|
69
69
|
}, null, 2));
|