n9router 0.4.35 → 0.4.36
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/app/.next/BUILD_ID +1 -1
- package/app/.next/app-path-routes-manifest.json +31 -18
- package/app/.next/build-manifest.json +3 -3
- package/app/.next/prerender-manifest.json +3 -3
- package/app/.next/required-server-files.json +5 -0
- package/app/.next/routes-manifest.json +120 -36
- package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +24 -0
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -0
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -0
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +23 -17
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +5 -3
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +5 -3
- package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/quota/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/skills/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error/page.js +3 -3
- package/app/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +1 -1
- package/app/.next/server/app/_global-error.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page.js +2 -2
- package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_not-found.html +1 -1
- package/app/.next/server/app/_not-found.rsc +5 -6
- package/app/.next/server/app/_not-found.segments/_full.segment.rsc +5 -6
- package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/api/antigravity-app/route.js +1 -1
- package/app/.next/server/app/api/antigravity-app/route.js.nft.json +1 -1
- package/app/.next/server/app/api/antigravity-app-v2/route.js +1 -1
- package/app/.next/server/app/api/antigravity-app-v2/route.js.nft.json +1 -1
- package/app/.next/server/app/api/antigravity-ide/route.js +1 -1
- package/app/.next/server/app/api/antigravity-ide/route.js.nft.json +1 -1
- package/app/.next/server/app/api/antigravity-tools/import/route.js +1 -1
- package/app/.next/server/app/api/antigravity-tools/import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/antigravity-tools/import-refresh-tokens/route.js +1 -1
- package/app/.next/server/app/api/antigravity-tools/import-refresh-tokens/route.js.nft.json +1 -1
- package/app/.next/server/app/api/auth/login/route.js +1 -1
- package/app/.next/server/app/api/auth/login/route.js.nft.json +1 -1
- package/app/.next/server/app/api/auth/logout/route.js +1 -1
- package/app/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/app/.next/server/app/api/auth/oidc/callback/route.js +1 -0
- package/app/.next/server/app/api/{cloud/credentials/update → auth/oidc/callback}/route.js.nft.json +1 -1
- package/app/.next/server/app/api/{cloud/models/alias → auth/oidc/callback}/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/auth/oidc/start/route.js +1 -0
- package/app/.next/server/app/api/{cloud/models/alias → auth/oidc/start}/route.js.nft.json +1 -1
- package/app/.next/server/app/api/auth/oidc/start/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/auth/oidc/test/route.js +1 -0
- package/app/.next/server/app/api/{cloud/model/resolve → auth/oidc/test}/route.js.nft.json +1 -1
- package/app/.next/server/app/api/auth/oidc/test/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/auth/status/route.js +1 -0
- package/app/.next/server/app/api/{tunnel/tailscale-login → auth/status}/route.js.nft.json +1 -1
- package/app/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/cli-tools/all-statuses/route.js +17 -0
- package/app/.next/server/app/api/{tunnel/tailscale-start-daemon → cli-tools/all-statuses}/route.js.nft.json +1 -1
- package/app/.next/server/app/api/{tunnel/tailscale-login → cli-tools/all-statuses}/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/cline-settings/route.js +2 -0
- package/app/.next/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -0
- package/app/.next/server/app/api/{cloud/credentials/update → cli-tools/cline-settings}/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/codex-settings/route.js +1 -32
- package/app/.next/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/copilot-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -0
- package/app/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -0
- package/app/.next/server/app/api/cli-tools/cowork-mcp-tools/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/cli-tools/cowork-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/deepseek-tui-settings/route.js +9 -0
- package/app/.next/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -0
- package/app/.next/server/app/api/cli-tools/deepseek-tui-settings/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/cli-tools/droid-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/hermes-settings/route.js +3 -3
- package/app/.next/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/jcode-settings/route.js +2 -0
- package/app/.next/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -0
- package/app/.next/server/app/api/cli-tools/jcode-settings/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +2 -0
- package/app/.next/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -0
- package/app/.next/server/app/api/cli-tools/kilo-settings/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/opencode-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/combos/[id]/route.js +1 -1
- package/app/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/combos/route.js +1 -1
- package/app/.next/server/app/api/combos/route.js.nft.json +1 -1
- package/app/.next/server/app/api/donate/route.js +1 -0
- package/app/.next/server/app/api/donate/route.js.nft.json +1 -0
- package/app/.next/server/app/api/donate/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/health/route.js +1 -1
- package/app/.next/server/app/api/health/route.js.nft.json +1 -1
- package/app/.next/server/app/api/init/route.js +1 -1
- package/app/.next/server/app/api/init/route.js.nft.json +1 -1
- package/app/.next/server/app/api/internal/account-health/route.js +1 -1
- package/app/.next/server/app/api/internal/account-health/route.js.nft.json +1 -1
- package/app/.next/server/app/api/internal/request-detail/route.js +1 -1
- package/app/.next/server/app/api/internal/request-detail/route.js.nft.json +1 -1
- package/app/.next/server/app/api/internal/usage/route.js +1 -1
- package/app/.next/server/app/api/internal/usage/route.js.nft.json +1 -1
- package/app/.next/server/app/api/keys/[id]/reset-usage/route.js +1 -1
- package/app/.next/server/app/api/keys/[id]/reset-usage/route.js.nft.json +1 -1
- package/app/.next/server/app/api/keys/[id]/route.js +1 -1
- package/app/.next/server/app/api/keys/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/keys/[id]/usage/route.js +1 -1
- package/app/.next/server/app/api/keys/[id]/usage/route.js.nft.json +1 -1
- package/app/.next/server/app/api/keys/route.js +1 -1
- package/app/.next/server/app/api/keys/route.js.nft.json +1 -1
- package/app/.next/server/app/api/locale/route.js +1 -1
- package/app/.next/server/app/api/locale/route.js.nft.json +1 -1
- package/app/.next/server/app/api/mcp/[plugin]/message/route.js +7 -0
- package/app/.next/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -0
- package/app/.next/server/app/api/mcp/[plugin]/message/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/mcp/[plugin]/sse/route.js +7 -0
- package/app/.next/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -0
- package/app/.next/server/app/api/mcp/[plugin]/sse/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
- package/app/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
- package/app/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
- package/app/.next/server/app/api/media-providers/tts/minimax/voices/route.js +1 -0
- package/app/.next/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -0
- package/app/.next/server/app/api/media-providers/tts/minimax/voices/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/media-providers/tts/voices/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/alias/route.js +1 -1
- package/app/.next/server/app/api/models/alias/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/availability/route.js +1 -1
- package/app/.next/server/app/api/models/availability/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/custom/route.js +1 -1
- package/app/.next/server/app/api/models/custom/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/disabled/route.js +1 -1
- package/app/.next/server/app/api/models/disabled/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/route.js +1 -1
- package/app/.next/server/app/api/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/test/route.js +1 -1
- package/app/.next/server/app/api/models/test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -6
- package/app/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/codex/import-token/route.js +1 -0
- package/app/.next/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -0
- package/app/.next/server/app/api/oauth/codex/import-token/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
- package/app/.next/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/cursor/import/route.js +1 -1
- package/app/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
- package/app/.next/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
- package/app/.next/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/kiro/auto-import/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/kiro/import/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
- package/app/.next/server/app/api/pricing/route.js +1 -1
- package/app/.next/server/app/api/pricing/route.js.nft.json +1 -1
- package/app/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
- package/app/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/provider-nodes/route.js +1 -1
- package/app/.next/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/app/.next/server/app/api/provider-nodes/validate/route.js +1 -1
- package/app/.next/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/models/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/client/route.js +1 -1
- package/app/.next/server/app/api/providers/client/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
- package/app/.next/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/route.js +1 -1
- package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/suggested-models/route.js +1 -1
- package/app/.next/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
- package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/validate/route.js +1 -1
- package/app/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/app/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
- package/app/.next/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
- package/app/.next/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js +43 -0
- package/app/.next/server/app/api/{cloud/auth → proxy-pools/cloudflare-deploy}/route.js.nft.json +1 -1
- package/app/.next/server/app/api/proxy-pools/cloudflare-deploy/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/proxy-pools/deno-deploy/route.js +40 -0
- package/app/.next/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -0
- package/app/.next/server/app/api/proxy-pools/deno-deploy/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/proxy-pools/route.js +1 -1
- package/app/.next/server/app/api/proxy-pools/route.js.nft.json +1 -1
- package/app/.next/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
- package/app/.next/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/database/route.js +1 -1
- package/app/.next/server/app/api/settings/database/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/proxy-test/route.js +1 -1
- package/app/.next/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/require-login/route.js +1 -1
- package/app/.next/server/app/api/settings/require-login/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/route.js +1 -1
- package/app/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/shutdown/route.js +1 -1
- package/app/.next/server/app/api/shutdown/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tags/route.js +1 -1
- package/app/.next/server/app/api/tags/route.js.nft.json +1 -1
- package/app/.next/server/app/api/translator/console-logs/route.js +1 -1
- package/app/.next/server/app/api/translator/console-logs/route.js.nft.json +1 -1
- package/app/.next/server/app/api/translator/console-logs/stream/route.js +2 -2
- package/app/.next/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
- package/app/.next/server/app/api/translator/load/route.js +1 -1
- package/app/.next/server/app/api/translator/load/route.js.nft.json +1 -1
- package/app/.next/server/app/api/translator/save/route.js +1 -1
- package/app/.next/server/app/api/translator/save/route.js.nft.json +1 -1
- package/app/.next/server/app/api/translator/send/route.js +1 -1
- package/app/.next/server/app/api/translator/send/route.js.nft.json +1 -1
- package/app/.next/server/app/api/translator/translate/route.js +1 -1
- package/app/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/disable/route.js +1 -1
- package/app/.next/server/app/api/tunnel/disable/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/enable/route.js +1 -1
- package/app/.next/server/app/api/tunnel/enable/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/status/route.js +1 -1
- package/app/.next/server/app/api/tunnel/status/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-check/route.js +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-install/route.js +4 -4
- package/app/.next/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
- package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/chart/route.js +1 -1
- package/app/.next/server/app/api/usage/chart/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/history/route.js +1 -1
- package/app/.next/server/app/api/usage/history/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/logs/route.js +1 -1
- package/app/.next/server/app/api/usage/logs/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/providers/route.js +1 -1
- package/app/.next/server/app/api/usage/providers/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/report/route.js +1 -1
- package/app/.next/server/app/api/usage/report/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/request-details/route.js +1 -1
- package/app/.next/server/app/api/usage/request-details/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/request-logs/route.js +1 -1
- package/app/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/stats/route.js +1 -1
- package/app/.next/server/app/api/usage/stats/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/stream/route.js +2 -2
- package/app/.next/server/app/api/usage/stream/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/api/chat/route.js +1 -1
- package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/audio/speech/route.js +1 -1
- package/app/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
- package/app/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/audio/voices/route.js +1 -1
- package/app/.next/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
- package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
- package/app/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/images/generations/route.js +2 -2
- package/app/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
- package/app/.next/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/messages/route.js +1 -1
- package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/models/[kind]/route.js +1 -1
- package/app/.next/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/models/info/route.js +1 -1
- package/app/.next/server/app/api/v1/models/info/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/models/route.js +1 -1
- package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/responses/compact/route.js +1 -1
- package/app/.next/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/responses/route.js +1 -1
- package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/route.js +1 -1
- package/app/.next/server/app/api/v1/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/search/route.js +1 -1
- package/app/.next/server/app/api/v1/search/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/web/fetch/route.js +1 -1
- package/app/.next/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
- package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1beta/models/route.js +1 -1
- package/app/.next/server/app/api/v1beta/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/version/route.js +1 -1
- package/app/.next/server/app/api/version/route.js.nft.json +1 -1
- package/app/.next/server/app/api/version/shutdown/route.js +1 -0
- package/app/.next/server/app/api/version/shutdown/route.js.nft.json +1 -0
- package/app/.next/server/app/api/version/shutdown/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/version/update/route.js +1 -1
- package/app/.next/server/app/api/version/update/route.js.nft.json +1 -1
- package/app/.next/server/app/callback/page.js +2 -2
- package/app/.next/server/app/callback/page.js.nft.json +1 -1
- package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/callback.html +1 -1
- package/app/.next/server/app/callback.rsc +6 -7
- package/app/.next/server/app/callback.segments/_full.segment.rsc +6 -7
- package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/callback.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/callback.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.html +1 -1
- package/app/.next/server/app/dashboard/basic-chat.rsc +7 -8
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +7 -8
- package/app/.next/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next/server/app/dashboard/cli-tools.rsc +7 -8
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +7 -8
- package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/dashboard/combos.html +1 -1
- package/app/.next/server/app/dashboard/combos.rsc +7 -8
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +7 -8
- package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/dashboard/endpoint.html +1 -1
- package/app/.next/server/app/dashboard/endpoint.rsc +7 -8
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +7 -8
- package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/dashboard/media-providers/web.html +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.rsc +7 -8
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +7 -8
- package/app/.next/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/dashboard/mitm.html +1 -1
- package/app/.next/server/app/dashboard/mitm.rsc +7 -8
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/mitm.segments/_full.segment.rsc +7 -8
- package/app/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/dashboard/profile.html +1 -1
- package/app/.next/server/app/dashboard/profile.rsc +7 -8
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.segments/_full.segment.rsc +7 -8
- package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/dashboard/providers/new.html +1 -1
- package/app/.next/server/app/dashboard/providers/new.rsc +7 -8
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +7 -8
- package/app/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/dashboard/providers.html +1 -1
- package/app/.next/server/app/dashboard/providers.rsc +7 -8
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.segments/_full.segment.rsc +7 -8
- package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.rsc +7 -8
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +7 -8
- package/app/.next/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/dashboard/quota.html +2 -2
- package/app/.next/server/app/dashboard/quota.rsc +8 -9
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/quota.segments/_full.segment.rsc +8 -9
- package/app/.next/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/quota.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/dashboard/settings/pricing/page.js +2 -2
- package/app/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
- package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.rsc +5 -6
- package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +5 -6
- package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/skills.html +1 -1
- package/app/.next/server/app/dashboard/skills.rsc +7 -8
- package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/skills.segments/_full.segment.rsc +7 -8
- package/app/.next/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/skills.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/dashboard/skills.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/dashboard/translator.html +1 -1
- package/app/.next/server/app/dashboard/translator.rsc +7 -8
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +7 -8
- package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/dashboard/usage.html +1 -1
- package/app/.next/server/app/dashboard/usage.rsc +7 -8
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +7 -8
- package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/dashboard.html +1 -1
- package/app/.next/server/app/dashboard.rsc +7 -8
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard.segments/_full.segment.rsc +7 -8
- package/app/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/dashboard.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/favicon.ico/route.js +1 -1
- package/app/.next/server/app/favicon.ico/route.js.nft.json +1 -1
- package/app/.next/server/app/index.html +1 -1
- package/app/.next/server/app/index.rsc +5 -6
- package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/index.segments/_full.segment.rsc +5 -6
- package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/index.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/index.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/landing/page.js +2 -2
- package/app/.next/server/app/landing/page.js.nft.json +1 -1
- package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing.html +1 -1
- package/app/.next/server/app/landing.rsc +5 -6
- package/app/.next/server/app/landing.segments/_full.segment.rsc +5 -6
- package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/landing.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/landing.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
- package/app/.next/server/app/login/page.js +2 -2
- package/app/.next/server/app/login/page.js.nft.json +1 -1
- package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/login.html +1 -1
- package/app/.next/server/app/login.rsc +6 -7
- package/app/.next/server/app/login.segments/_full.segment.rsc +6 -7
- package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/login.segments/_index.segment.rsc +5 -6
- package/app/.next/server/app/login.segments/_tree.segment.rsc +3 -4
- package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/app/.next/server/app/manifest.webmanifest/route.js +2 -2
- package/app/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- package/app/.next/server/app/page.js +2 -2
- package/app/.next/server/app/page.js.nft.json +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app-paths-manifest.json +31 -18
- package/app/.next/server/chunks/1051.js +1 -0
- package/app/.next/server/chunks/1476.js +1 -0
- package/app/.next/server/chunks/1498.js +1 -0
- package/app/.next/server/chunks/1531.js +1 -0
- package/app/.next/server/chunks/1569.js +1 -0
- package/app/.next/server/chunks/1699.js +1 -0
- package/app/.next/server/chunks/1998.js +1 -0
- package/app/.next/server/chunks/3104.js +43 -0
- package/app/.next/server/chunks/3110.js +56 -5
- package/app/.next/server/chunks/318.js +41 -15
- package/app/.next/server/chunks/3245.js +1 -1
- package/app/.next/server/chunks/3588.js +1 -0
- package/app/.next/server/chunks/365.js +1 -0
- package/app/.next/server/chunks/4013.js +1 -0
- package/app/.next/server/chunks/412.js +5 -5
- package/app/.next/server/chunks/4177.js +1 -0
- package/app/.next/server/chunks/4250.js +1 -1
- package/app/.next/server/chunks/4334.js +1 -1
- package/app/.next/server/chunks/4389.js +1 -0
- package/app/.next/server/chunks/4404.js +1 -0
- package/app/.next/server/chunks/4989.js +2 -2
- package/app/.next/server/chunks/{7861.js → 5221.js} +1 -1
- package/app/.next/server/chunks/5433.js +1 -0
- package/app/.next/server/chunks/5681.js +1 -1
- package/app/.next/server/chunks/5995.js +53 -0
- package/app/.next/server/chunks/6108.js +1 -1
- package/app/.next/server/chunks/6182.js +61 -5
- package/app/.next/server/chunks/6251.js +1 -0
- package/app/.next/server/chunks/6457.js +4 -0
- package/app/.next/server/chunks/6811.js +1 -0
- package/app/.next/server/chunks/6935.js +1 -0
- package/app/.next/server/chunks/7341.js +1 -1
- package/app/.next/server/chunks/7828.js +1 -1
- package/app/.next/server/chunks/7879.js +10 -0
- package/app/.next/server/chunks/7994.js +2 -2
- package/app/.next/server/chunks/8255.js +1 -0
- package/app/.next/server/chunks/8473.js +8 -0
- package/app/.next/server/chunks/8590.js +1 -1
- package/app/.next/server/chunks/8895.js +4 -4
- package/app/.next/server/chunks/8971.js +1 -0
- package/app/.next/server/chunks/9396.js +44 -0
- package/app/.next/server/chunks/9489.js +1 -1
- package/app/.next/server/chunks/9528.js +32 -0
- package/app/.next/server/chunks/9609.js +1 -1
- package/app/.next/server/chunks/9718.js +1 -1
- package/app/.next/server/chunks/9807.js +7 -0
- package/app/.next/server/functions-config-manifest.json +4 -30
- package/app/.next/server/middleware-build-manifest.js +1 -1
- package/app/.next/server/middleware.js +2 -2
- package/app/.next/server/pages/404.html +1 -1
- package/app/.next/server/pages/500.html +1 -1
- package/app/.next/server/server-reference-manifest.js +1 -1
- package/app/.next/server/server-reference-manifest.json +1 -1
- package/app/.next/static/4coXBNn9VafqaS8iRnddC/_buildManifest.js +1 -0
- package/app/.next/static/chunks/1321-4e2ed43c8724597f.js +1 -0
- package/app/.next/static/chunks/1a258343-5938f676ed376386.js +1 -0
- package/app/.next/static/chunks/2589-eefad05f65704f6b.js +3 -0
- package/app/.next/static/chunks/4406-05ac5641472f331e.js +53 -0
- package/app/.next/static/chunks/5497-73d5899267432022.js +7 -0
- package/app/.next/static/chunks/7055-e60e20f43bfbe5f8.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/basic-chat/page-068dda6eab2b9c36.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-67d36bbaeb6af871.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-51957200aaa0e0f7.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-1271df5d411ef013.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page-e680a27ecacbfd49.js +59 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/page-af17247a74fa851d.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/mitm/page-8cb9c569a7822a0a.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/page-8eaef671b213ee9e.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-90eac92387b41cd4.js +6 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-de08b6b9ad238de4.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/page-b9da35538f423062.js +4 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-1389351bfdd842f9.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-d6fce7b8e1d3fdec.js +3 -0
- package/app/.next/static/chunks/app/(dashboard)/layout-1244fdc593309aa9.js +1 -0
- package/app/.next/static/chunks/app/_global-error/page-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/antigravity-app/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/antigravity-app-v2/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/antigravity-ide/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/antigravity-tools/import/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/antigravity-tools/import-refresh-tokens/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/auth/login/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/auth/logout/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/auth/oidc/callback/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/auth/oidc/start/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/auth/oidc/test/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/auth/status/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/all-statuses/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/jcode-settings/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/combos/[id]/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/combos/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/donate/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/health/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/init/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/internal/account-health/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/internal/request-detail/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/internal/usage/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/keys/[id]/reset-usage/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/keys/[id]/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/keys/[id]/usage/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/keys/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/locale/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/mcp/[plugin]/message/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/mcp/[plugin]/sse/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/models/alias/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/models/availability/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/models/custom/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/models/disabled/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/models/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/models/test/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/codex/import-token/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/pricing/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/providers/client/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/providers/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/providers/suggested-models/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/providers/test-batch/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/providers/validate/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/settings/database/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/settings/proxy-test/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/settings/require-login/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/settings/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/shutdown/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/tags/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/translator/console-logs/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/translator/load/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/translator/save/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/translator/send/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/translator/translate/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/disable/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/enable/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/status/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/usage/chart/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/usage/history/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/usage/logs/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/usage/providers/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/usage/report/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/usage/request-details/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/usage/request-logs/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/usage/stats/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/usage/stream/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/v1/api/chat/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/voices/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/v1/embeddings/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/v1/images/generations/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/v1/messages/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/[kind]/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/info/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/v1/responses/compact/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/v1/responses/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/v1/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/v1/search/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/v1/web/fetch/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/v1beta/models/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/version/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/version/shutdown/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/api/version/update/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/callback/page-1ac4b69a5de26857.js +1 -0
- package/app/.next/static/chunks/app/layout-35b23f7e08fe3978.js +1 -0
- package/app/.next/static/chunks/app/login/page-98aaabbf53ef75f6.js +1 -0
- package/app/.next/static/chunks/app/manifest.webmanifest/route-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/app/page-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/{main-1b1bc8be25c3ce13.js → main-436691d9f611641e.js} +3 -3
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-7a42dc789702ab06.js +1 -0
- package/app/.next/static/chunks/{webpack-a33c667c0bbf302f.js → webpack-c2bac8d80aa27536.js} +1 -1
- package/app/.next/static/css/{081a0afca5a9bd20.css → 0f03023a765dc337.css} +1 -1
- package/app/.next/static/css/237aeed62967f245.css +1 -0
- package/app/.next/static/media/material-symbols-outlined.50fdf095.woff2 +0 -0
- package/app/open-sse/config/appConstants.js +9 -3
- package/app/open-sse/config/kiroConstants.js +262 -0
- package/app/open-sse/config/providerModels.js +221 -20
- package/app/open-sse/config/providers.js +86 -23
- package/app/open-sse/config/runtimeConfig.js +6 -0
- package/app/open-sse/executors/base.js +21 -4
- package/app/open-sse/executors/codex.js +255 -28
- package/app/open-sse/executors/cursor.js +52 -2
- package/app/open-sse/executors/default.js +32 -6
- package/app/open-sse/executors/gemini-cli.js +26 -4
- package/app/open-sse/executors/github.js +16 -2
- package/app/open-sse/executors/kiro.js +37 -0
- package/app/open-sse/executors/opencode.js +6 -1
- package/app/open-sse/executors/qoder.js +420 -43
- package/app/open-sse/handlers/chatCore.js +22 -6
- package/app/open-sse/handlers/embeddingProviders/gemini.js +15 -3
- package/app/open-sse/handlers/imageProviders/codex.js +1 -1
- package/app/open-sse/handlers/imageProviders/index.js +1 -0
- package/app/open-sse/handlers/imageProviders/openai.js +7 -0
- package/app/open-sse/handlers/ttsProviders/genericFormats.js +2 -0
- package/app/open-sse/handlers/ttsProviders/minimax.js +59 -0
- package/app/open-sse/rtk/autodetect.js +9 -2
- package/app/open-sse/rtk/constants.js +2 -1
- package/app/open-sse/rtk/filters/buildOutput.js +127 -0
- package/app/open-sse/rtk/index.js +36 -0
- package/app/open-sse/services/kiroModels.js +332 -0
- package/app/open-sse/services/model.js +73 -0
- package/app/open-sse/services/qoderModels.js +214 -0
- package/app/open-sse/services/tokenRefresh.js +94 -19
- package/app/open-sse/services/usage.js +141 -39
- package/app/open-sse/translator/helpers/openaiHelper.js +3 -0
- package/app/open-sse/translator/request/openai-responses.js +28 -2
- package/app/open-sse/translator/request/openai-to-kiro.js +48 -4
- package/app/open-sse/translator/response/kiro-to-openai.js +10 -4
- package/app/open-sse/translator/response/openai-responses.js +10 -3
- package/app/open-sse/translator/response/openai-to-claude.js +59 -16
- package/app/open-sse/utils/clientDetector.js +6 -3
- package/app/open-sse/utils/debugLog.js +14 -0
- package/app/open-sse/utils/proxyFetch.js +101 -1
- package/app/open-sse/utils/reasoningContentInjector.js +41 -3
- package/app/open-sse/utils/stream.js +15 -3
- package/app/open-sse/utils/streamHandler.js +106 -6
- package/app/open-sse/utils/toolDeduper.js +49 -0
- package/app/open-sse/utils/usageTracking.js +10 -0
- package/app/package.json +7 -5
- package/app/public/i18n/literals/ar.json +4 -6
- package/app/public/i18n/literals/bn.json +4 -6
- package/app/public/i18n/literals/cs.json +4 -6
- package/app/public/i18n/literals/da.json +4 -6
- package/app/public/i18n/literals/de.json +4 -6
- package/app/public/i18n/literals/el.json +4 -6
- package/app/public/i18n/literals/es.json +4 -6
- package/app/public/i18n/literals/fi.json +4 -6
- package/app/public/i18n/literals/fr.json +4 -6
- package/app/public/i18n/literals/he.json +4 -6
- package/app/public/i18n/literals/hi.json +4 -6
- package/app/public/i18n/literals/hu.json +4 -6
- package/app/public/i18n/literals/id.json +4 -6
- package/app/public/i18n/literals/it.json +4 -6
- package/app/public/i18n/literals/ja.json +4 -6
- package/app/public/i18n/literals/ko.json +4 -6
- package/app/public/i18n/literals/nl.json +4 -6
- package/app/public/i18n/literals/no.json +4 -6
- package/app/public/i18n/literals/pl.json +4 -6
- package/app/public/i18n/literals/pt-BR.json +4 -6
- package/app/public/i18n/literals/pt-PT.json +4 -6
- package/app/public/i18n/literals/ro.json +5 -7
- package/app/public/i18n/literals/ru.json +4 -6
- package/app/public/i18n/literals/sv.json +4 -6
- package/app/public/i18n/literals/th.json +4 -6
- package/app/public/i18n/literals/tl.json +4 -6
- package/app/public/i18n/literals/tr.json +4 -6
- package/app/public/i18n/literals/uk.json +4 -6
- package/app/public/i18n/literals/ur.json +4 -6
- package/app/public/i18n/literals/vi.json +6 -8
- package/app/public/i18n/literals/zh-CN.json +5 -29
- package/app/public/i18n/literals/zh-TW.json +4 -6
- package/app/public/providers/amp.png +0 -0
- package/app/public/providers/deepseek-tui.png +0 -0
- package/app/public/providers/jcode.png +0 -0
- package/app/public/providers/qoder.png +0 -0
- package/app/public/providers/xiaomi-tokenplan.png +0 -0
- package/app/server.js +1 -1
- package/app/src/lib/oauth/services/qoder.js +216 -0
- package/app/src/lib/oauth/services/xai.js +238 -0
- package/app/src/lib/updater/updater.js +25 -0
- package/app/src/mitm/cert/install.js +123 -153
- package/app/src/mitm/config.js +34 -2
- package/app/src/mitm/handlers/antigravity.js +2 -1
- package/app/src/mitm/logger.js +11 -1
- package/app/src/shared/constants/cliTools.js +146 -29
- package/app/src/shared/constants/config.js +9 -2
- package/app/src/shared/constants/coworkPlugins.js +64 -944
- package/app/src/shared/constants/pricing.js +5 -2
- package/app/src/shared/constants/providers.js +71 -14
- package/app/src/shared/constants/ttsProviders.js +16 -0
- package/package.json +1 -1
- package/app/.next/server/app/api/cloud/auth/route.js +0 -1
- package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +0 -1
- package/app/.next/server/app/api/cloud/credentials/update/route.js +0 -1
- package/app/.next/server/app/api/cloud/model/resolve/route.js +0 -1
- package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +0 -1
- package/app/.next/server/app/api/cloud/models/alias/route.js +0 -1
- package/app/.next/server/app/api/tunnel/tailscale-login/route.js +0 -1
- package/app/.next/server/app/api/tunnel/tailscale-start-daemon/route.js +0 -2
- package/app/.next/server/app/api/tunnel/tailscale-start-daemon/route_client-reference-manifest.js +0 -1
- package/app/.next/server/chunks/1985.js +0 -23
- package/app/.next/server/chunks/2417.js +0 -1
- package/app/.next/server/chunks/2506.js +0 -3
- package/app/.next/server/chunks/2549.js +0 -1
- package/app/.next/server/chunks/2583.js +0 -1
- package/app/.next/server/chunks/3646.js +0 -1
- package/app/.next/server/chunks/3855.js +0 -1
- package/app/.next/server/chunks/4084.js +0 -35
- package/app/.next/server/chunks/436.js +0 -1
- package/app/.next/server/chunks/4632.js +0 -1
- package/app/.next/server/chunks/5296.js +0 -1
- package/app/.next/server/chunks/5434.js +0 -1
- package/app/.next/server/chunks/5627.js +0 -23
- package/app/.next/server/chunks/6114.js +0 -1
- package/app/.next/server/chunks/7595.js +0 -1
- package/app/.next/server/chunks/7924.js +0 -1
- package/app/.next/server/chunks/8491.js +0 -1
- package/app/.next/server/chunks/8760.js +0 -1
- package/app/.next/server/chunks/8838.js +0 -1
- package/app/.next/static/DMu6oAfCAJu7LOUJpB89l/_buildManifest.js +0 -1
- package/app/.next/static/chunks/1321-bd1e73c270cd20da.js +0 -1
- package/app/.next/static/chunks/1a258343-4878413fb430abba.js +0 -1
- package/app/.next/static/chunks/2589-1e9bb7a900f2c1b0.js +0 -3
- package/app/.next/static/chunks/5497-c5298509cc559792.js +0 -7
- package/app/.next/static/chunks/7844-acf8217cdcb39d9a.js +0 -23
- package/app/.next/static/chunks/app/(dashboard)/dashboard/basic-chat/page-b279697882f0ed2a.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-40604134b500e7ee.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-de34ae04d784597b.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page-4c2d312eba93f6fa.js +0 -53
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/page-2a196db0213415bf.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/mitm/page-08e3714a029236f2.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/page-b6595aeb7c5b386f.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-48670924de911859.js +0 -4
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-280dceda93ddf1cb.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/page-d1fe33a3d1c02c4e.js +0 -2
- package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-6420e67a5bd79512.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-1a126c66d5e5f689.js +0 -3
- package/app/.next/static/chunks/app/(dashboard)/layout-27244e694148142c.js +0 -1
- package/app/.next/static/chunks/app/_global-error/page-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-app/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-app-v2/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-ide/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-tools/import/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-tools/import-refresh-tokens/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/auth/login/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/auth/logout/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/auth/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/credentials/update/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/model/resolve/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/models/alias/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/combos/[id]/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/combos/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/health/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/init/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/internal/account-health/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/internal/request-detail/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/internal/usage/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/keys/[id]/reset-usage/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/keys/[id]/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/keys/[id]/usage/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/keys/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/locale/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/models/alias/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/models/availability/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/models/custom/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/models/disabled/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/models/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/models/test/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/pricing/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/providers/client/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/providers/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/providers/suggested-models/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/providers/test-batch/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/providers/validate/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/settings/database/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/settings/proxy-test/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/settings/require-login/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/settings/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/shutdown/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/tags/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/translator/console-logs/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/translator/load/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/translator/save/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/translator/send/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/translator/translate/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/disable/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/enable/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/status/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-login/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-start-daemon/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/usage/chart/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/usage/history/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/usage/logs/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/usage/providers/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/usage/report/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/usage/request-details/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/usage/request-logs/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/usage/stats/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/usage/stream/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/v1/api/chat/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/voices/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/v1/embeddings/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/v1/images/generations/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/[kind]/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/info/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/v1/responses/compact/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/v1/responses/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/v1/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/v1/search/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/v1/web/fetch/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/version/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/api/version/update/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/callback/page-2d6169978b33b3bc.js +0 -1
- package/app/.next/static/chunks/app/layout-fa54526b5d7255bf.js +0 -1
- package/app/.next/static/chunks/app/login/page-69f6d8a6f709da51.js +0 -1
- package/app/.next/static/chunks/app/manifest.webmanifest/route-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/app/page-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-fb42fdff0ddaa89d.js +0 -1
- package/app/.next/static/css/5903295427476216.css +0 -1
- /package/app/.next/static/{DMu6oAfCAJu7LOUJpB89l → 4coXBNn9VafqaS8iRnddC}/_ssgManifest.js +0 -0
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"Logout": "Đăng xuất",
|
|
13
13
|
"Login": "Đăng nhập",
|
|
14
14
|
"Providers": "Nhà cung cấp",
|
|
15
|
-
"Usage": "
|
|
15
|
+
"Usage": "Thống kê",
|
|
16
16
|
"API Key": "Khóa API",
|
|
17
17
|
"Connected": " Đã kết nối",
|
|
18
18
|
"Disconnected": "Chưa kết nối",
|
|
@@ -91,22 +91,20 @@
|
|
|
91
91
|
"Dark": "Tối",
|
|
92
92
|
"Auto": "Tự động",
|
|
93
93
|
"Endpoint": "Điểm cuối",
|
|
94
|
-
"Providers": "Nhà cung cấp",
|
|
95
94
|
"Combos": "Kết hợp",
|
|
96
|
-
"Usage": "Thống kê",
|
|
97
95
|
"Quota Tracker": "Theo dõi hạn mức",
|
|
98
96
|
"MITM": "MITM",
|
|
99
97
|
"CLI Tools": "Công cụ",
|
|
100
98
|
"Console Log": "Nhật ký Console",
|
|
101
99
|
"System": "Hệ thống",
|
|
102
100
|
"Debug": "Gỡ lỗi",
|
|
103
|
-
"Shutdown": "Tắt
|
|
101
|
+
"Shutdown": "Tắt ứng dụng",
|
|
104
102
|
"Close Proxy": "Đóng Proxy",
|
|
105
103
|
"Are you sure you want to close the proxy server?": "Bạn có chắc chắn muốn đóng máy chủ proxy không?",
|
|
106
104
|
"Server Disconnected": "Máy chủ đã ngắt kết nối",
|
|
107
105
|
"The proxy server has been stopped.": "Máy chủ proxy đã bị dừng.",
|
|
108
106
|
"Reload Page": "Tải lại trang",
|
|
109
|
-
"Service is running in terminal. You can close this web page. Shutdown will stop the service.": "Dịch vụ đang chạy trong terminal. Bạn có thể đóng trang web này. Tắt
|
|
107
|
+
"Service is running in terminal. You can close this web page. Shutdown will stop the service.": "Dịch vụ đang chạy trong terminal. Bạn có thể đóng trang web này. Tắt ứng dụng sẽ dừng dịch vụ.",
|
|
110
108
|
"Manage your AI provider connections": "Quản lý kết nối nhà cung cấp AI của bạn",
|
|
111
109
|
"Model combos with fallback": "Kết hợp mô hình với dự phòng",
|
|
112
110
|
"Monitor your API usage, token consumption, and request logs": "Theo dõi việc sử dụng API, tiêu thụ token và nhật ký yêu cầu",
|
|
@@ -150,7 +148,6 @@
|
|
|
150
148
|
"No Proxy": "Không có Proxy",
|
|
151
149
|
"Comma-separated hostnames/domains to bypass the proxy.": "Tên máy chủ/tên miền được phân tách bằng dấu phẩy để bỏ qua proxy.",
|
|
152
150
|
"Test proxy URL": "Kiểm tra URL proxy",
|
|
153
|
-
"Apply": "Áp dụng",
|
|
154
151
|
"Proxy settings applied": "Đã áp dụng cài đặt proxy",
|
|
155
152
|
"Proxy enabled": "Đã bật proxy",
|
|
156
153
|
"Proxy disabled": "Đã tắt proxy",
|
|
@@ -178,7 +175,6 @@
|
|
|
178
175
|
"Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Sử dụng Antigravity IDE & GitHub Copilot → với BẤT KỲ nhà cung cấp/mô hình nào từ 9Router",
|
|
179
176
|
"How it works:": "Cách hoạt động:",
|
|
180
177
|
"Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Yêu cầu Antigravity/Copilot IDE → Chuyển hướng DNS đến localhost:443 → MITM proxy chặn → 9Router → phản hồi đến Antigravity/Copilot",
|
|
181
|
-
"API Key": "Khóa API",
|
|
182
178
|
"No API keys — create one in Keys page": "Không có khóa API — tạo một khóa trong trang Keys",
|
|
183
179
|
"sk_9router (default)": "sk_9router (mặc định)",
|
|
184
180
|
"Server started": "Đã khởi động máy chủ",
|
|
@@ -192,5 +188,7 @@
|
|
|
192
188
|
"Sudo Password Required": "Yêu cầu mật khẩu Sudo",
|
|
193
189
|
"Enter your sudo password to start/stop MITM server": "Nhập mật khẩu sudo của bạn để khởi động/dừng máy chủ MITM",
|
|
194
190
|
"Sudo Password": "Mật khẩu Sudo",
|
|
195
|
-
"
|
|
191
|
+
"Click to add, click again to remove. Changes are saved automatically.": "Nhấp để thêm, nhấp lại để xóa. Thay đổi được lưu tự động.",
|
|
192
|
+
"⚠️ Risk Notice: This provider uses a subscription/OAuth session not officially licensed for proxy/router use. Account may be restricted or banned. Use at your own risk.": "⚠️ Cảnh báo rủi ro: Provider này sử dụng subscription/OAuth không được cấp phép chính thức cho mục đích proxy/router. Tài khoản có thể bị hạn chế hoặc cấm. Người dùng tự chịu trách nhiệm.",
|
|
193
|
+
"⚠️ MITM intercepts HTTPS traffic of IDE tools (Antigravity, GitHub Copilot, Kiro) via local CA to redirect requests to your providers. May violate ToS → account ban. Use at your own risk.": "⚠️ MITM chặn lưu lượng HTTPS của các IDE tools (Antigravity, GitHub Copilot, Kiro) qua CA cục bộ để chuyển hướng request đến providers của bạn. Có thể vi phạm ToS → rủi ro bị ban tài khoản. Sử dụng với rủi ro của bạn."
|
|
196
194
|
}
|
|
@@ -512,13 +512,11 @@
|
|
|
512
512
|
"The proxy server has been stopped.": "代理服务器已停止。",
|
|
513
513
|
"Reload Page": "重新加载页面",
|
|
514
514
|
"Service is running in terminal. You can close this web page. Shutdown will stop the service.": "服务正在终端中运行。您可以关闭此网页。关闭将停止服务。",
|
|
515
|
-
|
|
516
515
|
"One Endpoint for": "统一端点,接入",
|
|
517
516
|
"All AI Providers": "所有 AI 提供商",
|
|
518
517
|
"Route AI requests through subscription, cheap, and free tiers with auto-fallback. One endpoint for Claude, GPT, Gemini, and more.": "通过订阅、低价和免费层级路由 AI 请求并自动回退。一个端点接入 Claude、GPT、Gemini 等。",
|
|
519
518
|
"Get Started": "开始使用",
|
|
520
519
|
"View on GitHub": "在 GitHub 上查看",
|
|
521
|
-
|
|
522
520
|
"How 9Router Works": "9Router 工作原理",
|
|
523
521
|
"Data flows seamlessly through our intelligent routing system": "数据通过我们的智能路由系统无缝流转",
|
|
524
522
|
"1. CLI & SDKs": "1. CLI 和 SDK",
|
|
@@ -527,7 +525,6 @@
|
|
|
527
525
|
"Our engine analyzes the prompt and routes through your subscription, cheap, and free provider tiers with automatic fallback.": "我们的引擎分析提示词并通过您的订阅、低价和免费提供商层级路由,自动回退。",
|
|
528
526
|
"3. AI Providers": "3. AI 提供商",
|
|
529
527
|
"The request is fulfilled by OpenAI, Anthropic, Gemini, or others instantly.": "请求由 OpenAI、Anthropic、Gemini 或其他提供商即时响应。",
|
|
530
|
-
|
|
531
528
|
"Powerful Features": "强大功能",
|
|
532
529
|
"Everything you need to manage your AI infrastructure efficiently.": "高效管理 AI 基础设施所需的一切。",
|
|
533
530
|
"Unified Endpoint": "统一端点",
|
|
@@ -546,7 +543,6 @@
|
|
|
546
543
|
"Native CLI tool support for Cursor, Claude, Copilot, and more.": "原生支持 Cursor、Claude、Copilot 等 CLI 工具。",
|
|
547
544
|
"Dashboard": "仪表盘",
|
|
548
545
|
"Beautiful web dashboard for managing providers and monitoring usage.": "精美的 Web 仪表盘,用于管理提供商和监控使用情况。",
|
|
549
|
-
|
|
550
546
|
"Get Started in 30 Seconds": "30 秒快速上手",
|
|
551
547
|
"Install 9Router": "安装 9Router",
|
|
552
548
|
"Open Dashboard": "打开仪表盘",
|
|
@@ -554,13 +550,10 @@
|
|
|
554
550
|
"npm install -g 9router": "npm install -g 9router",
|
|
555
551
|
"open http://localhost:9099": "open http://localhost:9099",
|
|
556
552
|
"Ready! Requests route automatically through your configured providers.": "就绪!请求将自动通过您配置的提供商路由。",
|
|
557
|
-
|
|
558
553
|
"How it Works": "工作原理",
|
|
559
554
|
"Docs": "文档",
|
|
560
555
|
"GitHub": "GitHub",
|
|
561
|
-
|
|
562
556
|
"Legal": "法律",
|
|
563
|
-
|
|
564
557
|
"Manage your AI provider connections": "管理您的 AI 提供商连接",
|
|
565
558
|
"Model combos with fallback": "模型组合及回退",
|
|
566
559
|
"Monitor your API usage, token consumption, and request logs": "监控您的 API 使用量、Token 消耗和请求日志",
|
|
@@ -575,15 +568,12 @@
|
|
|
575
568
|
"MITM Proxy": "MITM 代理",
|
|
576
569
|
"Translator": "翻译器",
|
|
577
570
|
"Media Providers": "媒体提供商",
|
|
578
|
-
|
|
579
571
|
"Theme": "主题",
|
|
580
572
|
"Remote": "远程",
|
|
581
573
|
"Logout": "退出登录",
|
|
582
574
|
"Change Log": "更新日志",
|
|
583
|
-
|
|
584
575
|
"Proxy Pools": "代理池",
|
|
585
576
|
"MITM": "MITM",
|
|
586
|
-
|
|
587
577
|
"Loading...": "加载中...",
|
|
588
578
|
"Enter your password to access the dashboard": "输入密码以访问仪表盘",
|
|
589
579
|
"Password": "密码",
|
|
@@ -592,7 +582,6 @@
|
|
|
592
582
|
"Default password is 123456": "默认密码为 123456",
|
|
593
583
|
"Invalid password": "密码错误",
|
|
594
584
|
"An error occurred. Please try again.": "发生错误,请重试。",
|
|
595
|
-
|
|
596
585
|
"light": "浅色",
|
|
597
586
|
"dark": "深色",
|
|
598
587
|
"system": "跟随系统",
|
|
@@ -602,11 +591,9 @@
|
|
|
602
591
|
"Record request details for inspection in the logs view": "记录请求详情以在日志视图中查看",
|
|
603
592
|
"Update Password": "修改密码",
|
|
604
593
|
"Set Password": "设置密码",
|
|
605
|
-
|
|
606
594
|
"Overview": "概览",
|
|
607
595
|
"Details": "详情",
|
|
608
596
|
"Search...": "搜索...",
|
|
609
|
-
|
|
610
597
|
"Saving...": "保存中...",
|
|
611
598
|
"Save": "保存",
|
|
612
599
|
"Save Changes": "保存更改",
|
|
@@ -615,27 +602,22 @@
|
|
|
615
602
|
"Import": "导入",
|
|
616
603
|
"Deploying... (may take ~1 min)": "部署中...(可能需要约 1 分钟)",
|
|
617
604
|
"Deploy": "部署",
|
|
618
|
-
|
|
619
605
|
"Enable": "启用",
|
|
620
606
|
"Disable": "禁用",
|
|
621
607
|
"Token Saver": "Token 节省器",
|
|
622
608
|
"Experimental": "实验性",
|
|
623
609
|
"Compress tool output to reduce token usage.": "压缩工具输出以减少 Token 使用量。",
|
|
624
610
|
"sk_9router (default)": "sk_9router(默认)",
|
|
625
|
-
|
|
626
611
|
"Install Tailscale": "安装 Tailscale",
|
|
627
612
|
"Installing Tailscale...": "正在安装 Tailscale...",
|
|
628
613
|
"Tailscale installed": "Tailscale 已安装",
|
|
629
614
|
"Tailscale Funnel": "Tailscale Funnel",
|
|
630
615
|
"Allow dashboard access via tunnel": "允许通过隧道访问仪表盘",
|
|
631
|
-
|
|
632
616
|
"Disconnected from server": "与服务器断开连接",
|
|
633
617
|
"Attempting to reconnect...": "正在尝试重新连接...",
|
|
634
618
|
"Click to retry": "点击重试",
|
|
635
|
-
|
|
636
619
|
"Failed to load changelog:": "加载更新日志失败:",
|
|
637
620
|
"Copied!": "已复制!",
|
|
638
|
-
|
|
639
621
|
"Manage reusable per-connection proxies and bind them to provider connections.": "管理可复用的连接代理并绑定到提供商连接。",
|
|
640
622
|
"Vercel Relay": "Vercel Relay",
|
|
641
623
|
"Batch Import": "批量导入",
|
|
@@ -665,7 +647,6 @@
|
|
|
665
647
|
"Proxy pool deleted": "代理池已删除",
|
|
666
648
|
"Proxy test passed": "代理测试通过",
|
|
667
649
|
"Proxy test failed": "代理测试失败",
|
|
668
|
-
|
|
669
650
|
"Replay request flow — matches log files": "重放请求流程——匹配日志文件",
|
|
670
651
|
"Client Request": "客户端请求",
|
|
671
652
|
"Source Body": "源请求体",
|
|
@@ -678,7 +659,6 @@
|
|
|
678
659
|
"Send": "发送",
|
|
679
660
|
"→ OpenAI": "→ OpenAI",
|
|
680
661
|
"→ Target": "→ 目标",
|
|
681
|
-
|
|
682
662
|
"Terminal": "终端",
|
|
683
663
|
"Full shell access": "完整 Shell 访问",
|
|
684
664
|
"Desktop": "桌面",
|
|
@@ -690,7 +670,6 @@
|
|
|
690
670
|
"Works on any device": "适用于任何设备",
|
|
691
671
|
"Access your terminal, desktop & files from anywhere": "从任何地方访问您的终端、桌面和文件",
|
|
692
672
|
"Get 9Remote": "获取 9Remote",
|
|
693
|
-
|
|
694
673
|
"Manual configuration is still available if 9router is deployed on a remote server.": "如果 9router 部署在远程服务器上,仍可使用手动配置。",
|
|
695
674
|
"How to Install": "如何安装",
|
|
696
675
|
"Hide": "隐藏",
|
|
@@ -714,9 +693,7 @@
|
|
|
714
693
|
"Trust Cert": "信任证书",
|
|
715
694
|
"Trusted": "已信任",
|
|
716
695
|
"not detected locally": "未在本地检测到",
|
|
717
|
-
|
|
718
696
|
"Select to pre-fill, then edit model ID in the input": "选择以预填充,然后在输入框中编辑模型 ID",
|
|
719
|
-
|
|
720
697
|
"Free & Free Tier Providers": "免费及免费额度提供商",
|
|
721
698
|
"Testing...": "测试中...",
|
|
722
699
|
"Test All": "全部测试",
|
|
@@ -740,13 +717,11 @@
|
|
|
740
717
|
"Model ID (optional)": "模型 ID(可选)",
|
|
741
718
|
"If provider lacks /models endpoint, enter a model ID to validate via chat/completions instead.": "如果提供商不支持 /models 端点,请输入模型 ID 通过 chat/completions 进行验证。",
|
|
742
719
|
"(via inference test)": "(通过推理测试)",
|
|
743
|
-
|
|
744
720
|
"Delete this combo?": "删除此组合?",
|
|
745
721
|
"Name is required": "名称为必填项",
|
|
746
722
|
"Failed to create combo": "创建组合失败",
|
|
747
723
|
"Failed to update combo": "更新组合失败",
|
|
748
724
|
"Only letters, numbers, -, _ and . allowed": "仅允许使用字母、数字、-、_ 和 .",
|
|
749
|
-
|
|
750
725
|
"Input Cost": "输入成本",
|
|
751
726
|
"Output Cost": "输出成本",
|
|
752
727
|
"Total Cost": "总成本",
|
|
@@ -755,18 +730,15 @@
|
|
|
755
730
|
"Just now": "刚刚",
|
|
756
731
|
"m ago": "分钟前",
|
|
757
732
|
"h ago": "小时前",
|
|
758
|
-
|
|
759
733
|
"None": "无",
|
|
760
734
|
"disabled": "已禁用",
|
|
761
735
|
"OAuth Account": "OAuth 账号",
|
|
762
736
|
"no_proxy:": "无代理:",
|
|
763
737
|
"Pool:": "代理池:",
|
|
764
738
|
"Legacy:": "旧版:",
|
|
765
|
-
|
|
766
739
|
"Error": "错误",
|
|
767
740
|
"more": "更多",
|
|
768
741
|
"Proxy": "代理",
|
|
769
|
-
|
|
770
742
|
"No authentication required": "无需身份验证",
|
|
771
743
|
"This provider is ready to use.": "此提供商已准备就绪。",
|
|
772
744
|
"Available Models": "可用模型",
|
|
@@ -788,5 +760,9 @@
|
|
|
788
760
|
"connections": "个连接",
|
|
789
761
|
"Suggested free models (≥200k context):": "推荐的免费模型(≥200k 上下文):",
|
|
790
762
|
"Get API Key →": "获取 API 密钥 →",
|
|
791
|
-
"OAuth": "OAuth"
|
|
763
|
+
"OAuth": "OAuth",
|
|
764
|
+
"Click to add, click again to remove. Changes are saved automatically.": "点击添加,再次点击删除。更改将自动保存。",
|
|
765
|
+
"Close": "关闭",
|
|
766
|
+
"⚠️ Risk Notice: This provider uses a subscription/OAuth session not officially licensed for proxy/router use. Account may be restricted or banned. Use at your own risk.": "⚠️ 风险提示:此提供商使用的订阅/OAuth 会话未获官方授权用于代理/路由器使用。账户可能被限制或封禁。使用风险自负。",
|
|
767
|
+
"⚠️ MITM intercepts HTTPS traffic of IDE tools (Antigravity, GitHub Copilot, Kiro) via local CA to redirect requests to your providers. May violate ToS → account ban. Use at your own risk.": "⚠️ MITM 通过本地 CA 拦截 IDE 工具(Antigravity、GitHub Copilot、Kiro)的 HTTPS 流量,将请求重定向到您的提供商。可能违反 ToS → 账户封禁风险。使用风险自负。"
|
|
792
768
|
}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"Logout": "登出",
|
|
13
13
|
"Login": "登錄",
|
|
14
14
|
"Providers": "提供者",
|
|
15
|
-
"Usage": "
|
|
15
|
+
"Usage": "統計",
|
|
16
16
|
"API Key": "API 金鑰",
|
|
17
17
|
"Connected": "已連接",
|
|
18
18
|
"Disconnected": "未連接",
|
|
@@ -91,9 +91,7 @@
|
|
|
91
91
|
"Dark": "深色",
|
|
92
92
|
"Auto": "自動",
|
|
93
93
|
"Endpoint": "端點",
|
|
94
|
-
"Providers": "提供者",
|
|
95
94
|
"Combos": "組合",
|
|
96
|
-
"Usage": "統計",
|
|
97
95
|
"Quota Tracker": "配額跟蹤",
|
|
98
96
|
"MITM": "MITM",
|
|
99
97
|
"CLI Tools": "CLI 工具",
|
|
@@ -150,7 +148,6 @@
|
|
|
150
148
|
"No Proxy": "無代理",
|
|
151
149
|
"Comma-separated hostnames/domains to bypass the proxy.": "逗號分隔的主機名/域以繞過代理。",
|
|
152
150
|
"Test proxy URL": "測試代理 URL",
|
|
153
|
-
"Apply": "應用",
|
|
154
151
|
"Proxy settings applied": "已應用代理設置",
|
|
155
152
|
"Proxy enabled": "已啟用代理",
|
|
156
153
|
"Proxy disabled": "已禁用代理",
|
|
@@ -178,7 +175,6 @@
|
|
|
178
175
|
"Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "使用 Antigravity IDE 和 GitHub Copilot → 與 9Router 中的任何提供者/模型一起",
|
|
179
176
|
"How it works:": "工作原理:",
|
|
180
177
|
"Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Antigravity/Copilot IDE 請求 → DNS 重定向到 localhost:443 → MITM 代理攔截 → 9Router → 响應到 Antigravity/Copilot",
|
|
181
|
-
"API Key": "API 金鑰",
|
|
182
178
|
"No API keys — create one in Keys page": "沒有 API 金鑰 — 在金鑰頁面中創建一個",
|
|
183
179
|
"sk_9router (default)": "sk_9router(默認)",
|
|
184
180
|
"Server started": "服務器已啟動",
|
|
@@ -192,5 +188,7 @@
|
|
|
192
188
|
"Sudo Password Required": "需要 Sudo 密碼",
|
|
193
189
|
"Enter your sudo password to start/stop MITM server": "輸入您的 Sudo 密碼以啟動/停止 MITM 服務器",
|
|
194
190
|
"Sudo Password": "Sudo 密碼",
|
|
195
|
-
"
|
|
191
|
+
"Click to add, click again to remove. Changes are saved automatically.": "點擊新增,再次點擊移除。變更將自動儲存。",
|
|
192
|
+
"⚠️ Risk Notice: This provider uses a subscription/OAuth session not officially licensed for proxy/router use. Account may be restricted or banned. Use at your own risk.": "⚠️ 風險提示:此提供商使用的訂閱/OAuth 工作階段未獲官方授權用於代理/路由器使用。帳戶可能被限制或封禁。使用風險自負。",
|
|
193
|
+
"⚠️ MITM intercepts HTTPS traffic of IDE tools (Antigravity, GitHub Copilot, Kiro) via local CA to redirect requests to your providers. May violate ToS → account ban. Use at your own risk.": "⚠️ MITM 透過本地 CA 攔截 IDE 工具(Antigravity、GitHub Copilot、Kiro)的 HTTPS 流量,將請求重新導向到您的提供商。可能違反 ToS → 帳戶封禁風險。使用風險自負。"
|
|
196
194
|
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/app/server.js
CHANGED
|
@@ -9,7 +9,7 @@ const currentPort = parseInt(process.env.PORT, 10) || 3000
|
|
|
9
9
|
const hostname = process.env.HOSTNAME || '0.0.0.0'
|
|
10
10
|
|
|
11
11
|
let keepAliveTimeout = parseInt(process.env.KEEP_ALIVE_TIMEOUT, 10)
|
|
12
|
-
const nextConfig = {"env":{},"typescript":{"ignoreBuildErrors":false},"typedRoutes":false,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.mjs","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":true,"customCacheHandler":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{"serverFunctions":true,"browserToTerminal":"warn"},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/Users/cuongquach/projects/vibe/n9router","cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"appNewScrollHandler":false,"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"cachedNavigations":false,"partialFallbacks":false,"dynamicOnHover":false,"varyParams":false,"prefetchInlining":false,"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":9,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"imgOptSkipMetadata":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"strictRouteTypes":false,"viewTransition":false,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":false,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":true,"serverComponentsHmrCache":true,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"gestureTransition":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":"warn","lockDistDir":true,"proxyClientMaxBodySize":10485760,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":false,"turbopackInferModuleSideEffects":true,"turbopackPluginRuntimeStrategy":"childProcesses","optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.mjs","outputFileTracingIncludes":{"/*":["src/mitm/**/*","src/shared/constants/**/*","src/lib/dbFileSafety.js","open-sse/rtk/**/*"]},"serverExternalPackages":["better-sqlite3"],"turbopack":{"root":"/Users/cuongquach/projects/vibe/n9router"},"distDirRoot":".next","_originalRewrites":{"beforeFiles":[],"afterFiles":[{"source":"/v1/v1/:path*","destination":"/api/v1/:path*"},{"source":"/v1/v1","destination":"/api/v1"},{"source":"/codex/:path*","destination":"/api/v1/responses"},{"source":"/v1/:path*","destination":"/api/v1/:path*"},{"source":"/v1","destination":"/api/v1"}],"fallback":[]}}
|
|
12
|
+
const nextConfig = {"env":{},"typescript":{"ignoreBuildErrors":false},"typedRoutes":false,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.mjs","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":true,"customCacheHandler":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{"serverFunctions":true,"browserToTerminal":"warn"},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/Users/cuongquach/projects/vibe/n9router","cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"appNewScrollHandler":false,"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"cachedNavigations":false,"partialFallbacks":false,"dynamicOnHover":false,"varyParams":false,"prefetchInlining":false,"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":9,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"imgOptSkipMetadata":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"strictRouteTypes":false,"viewTransition":false,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":false,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":true,"serverComponentsHmrCache":true,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"gestureTransition":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":"warn","lockDistDir":true,"proxyClientMaxBodySize":10485760,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":false,"turbopackInferModuleSideEffects":true,"turbopackPluginRuntimeStrategy":"childProcesses","optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.mjs","outputFileTracingIncludes":{"/*":["src/mitm/**/*","src/shared/constants/**/*","src/lib/dbFileSafety.js","open-sse/rtk/**/*"]},"serverExternalPackages":["better-sqlite3"],"turbopack":{"root":"/Users/cuongquach/projects/vibe/n9router"},"outputFileTracingExcludes":{"*":["./gitbook/**/*"]},"distDirRoot":".next","_originalRewrites":{"beforeFiles":[],"afterFiles":[{"source":"/v1/v1/:path*","destination":"/api/v1/:path*"},{"source":"/v1/v1","destination":"/api/v1"},{"source":"/codex/:path*","destination":"/api/v1/responses"},{"source":"/v1/:path*","destination":"/api/v1/:path*"},{"source":"/v1","destination":"/api/v1"}],"fallback":[]}}
|
|
13
13
|
|
|
14
14
|
process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(nextConfig)
|
|
15
15
|
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import {
|
|
2
|
+
QODER_DEVICE_TOKEN_URL,
|
|
3
|
+
QODER_LOGIN_URL,
|
|
4
|
+
QODER_USERINFO_URL,
|
|
5
|
+
} from "../../qoder/constants.js";
|
|
6
|
+
import crypto from "crypto";
|
|
7
|
+
import { v4 as uuidv4 } from "uuid";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Qoder OAuth Service
|
|
11
|
+
* Implements the device-token flow:
|
|
12
|
+
* 1. Generate PKCE pair + nonce + machine_id locally.
|
|
13
|
+
* 2. Open https://qoder.com/device/selectAccounts?challenge=...&nonce=...
|
|
14
|
+
* in the user's browser.
|
|
15
|
+
* 3. Poll openapi.qoder.sh/api/v1/deviceToken/poll until the user authorizes
|
|
16
|
+
* and the upstream returns a `dt-...` access token.
|
|
17
|
+
*
|
|
18
|
+
* Tokens live ~30 days; refresh is a no-op (the upstream refresh endpoint
|
|
19
|
+
* returns 403 for our flow). Users re-run login when expired.
|
|
20
|
+
*
|
|
21
|
+
* Mirrors the structure of KiroService — the COSY signing / WAF-bypass body
|
|
22
|
+
* encoding / chat protocol live separately in src/lib/qoder/ because they're
|
|
23
|
+
* used by every signed request, not just OAuth.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
// Timeout for OAuth helper calls. The OAuth modal polls every 2s for up to
|
|
27
|
+
// 5 minutes; an individual request that stalls beyond this is treated as a
|
|
28
|
+
// failed poll attempt and the next poll iteration retries.
|
|
29
|
+
const FETCH_TIMEOUT_MS = 15_000;
|
|
30
|
+
|
|
31
|
+
function base64Url(buf) {
|
|
32
|
+
return buf
|
|
33
|
+
.toString("base64")
|
|
34
|
+
.replace(/=/g, "")
|
|
35
|
+
.replace(/\+/g, "-")
|
|
36
|
+
.replace(/\//g, "_");
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Wrap fetch with an AbortController-based timeout. Without this, a stalled
|
|
41
|
+
* upstream socket hangs on Node's default keepalive timeout (minutes) and
|
|
42
|
+
* abandoned polls accumulate hung sockets.
|
|
43
|
+
*/
|
|
44
|
+
async function fetchWithTimeout(url, init = {}) {
|
|
45
|
+
const controller = new AbortController();
|
|
46
|
+
const timer = setTimeout(() => controller.abort("timeout"), FETCH_TIMEOUT_MS);
|
|
47
|
+
try {
|
|
48
|
+
return await fetch(url, { ...init, signal: controller.signal });
|
|
49
|
+
} finally {
|
|
50
|
+
clearTimeout(timer);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export class QoderService {
|
|
55
|
+
/**
|
|
56
|
+
* Generate a PKCE verifier + S256 challenge pair.
|
|
57
|
+
* Uses 32 random bytes (matches qodercli/Veria).
|
|
58
|
+
*/
|
|
59
|
+
generatePkcePair() {
|
|
60
|
+
const verifier = base64Url(crypto.randomBytes(32));
|
|
61
|
+
const challenge = base64Url(crypto.createHash("sha256").update(verifier).digest());
|
|
62
|
+
return { verifier, challenge };
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Initiate the device flow. Returns the URL to open in a browser plus the
|
|
67
|
+
* verifier/nonce/machineId we'll need to poll and to sign future requests.
|
|
68
|
+
*/
|
|
69
|
+
initiateDeviceFlow() {
|
|
70
|
+
const { verifier, challenge } = this.generatePkcePair();
|
|
71
|
+
const nonce = uuidv4();
|
|
72
|
+
const machineId = uuidv4();
|
|
73
|
+
|
|
74
|
+
const params = new URLSearchParams({
|
|
75
|
+
challenge,
|
|
76
|
+
challenge_method: "S256",
|
|
77
|
+
machine_id: machineId,
|
|
78
|
+
nonce,
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
verificationUriComplete: `${QODER_LOGIN_URL}?${params.toString()}`,
|
|
83
|
+
codeVerifier: verifier,
|
|
84
|
+
nonce,
|
|
85
|
+
machineId,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Single poll attempt. Returns one of:
|
|
91
|
+
* { status: "pending" } — keep polling
|
|
92
|
+
* { status: "ok", token, ... } — user authorized, tokens captured
|
|
93
|
+
* throws Error — terminal failure
|
|
94
|
+
*
|
|
95
|
+
* Upstream returns 202/404 while waiting; 200 with a JSON body when done.
|
|
96
|
+
*/
|
|
97
|
+
async pollDeviceToken({ nonce, codeVerifier }) {
|
|
98
|
+
if (!nonce || !codeVerifier) {
|
|
99
|
+
throw new Error("pollDeviceToken: missing nonce or code verifier");
|
|
100
|
+
}
|
|
101
|
+
const url = `${QODER_DEVICE_TOKEN_URL}?nonce=${encodeURIComponent(nonce)}&verifier=${encodeURIComponent(codeVerifier)}&challenge_method=S256`;
|
|
102
|
+
|
|
103
|
+
const response = await fetchWithTimeout(url, {
|
|
104
|
+
method: "GET",
|
|
105
|
+
headers: {
|
|
106
|
+
Accept: "application/json",
|
|
107
|
+
"User-Agent": "Go-http-client/2.0",
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
// Pending — server has registered the device code but the user hasn't
|
|
112
|
+
// finished the browser flow yet. Both 202 and 404 mean "keep polling".
|
|
113
|
+
if (response.status === 202 || response.status === 404) {
|
|
114
|
+
return { status: "pending" };
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const text = await response.text();
|
|
118
|
+
|
|
119
|
+
if (!response.ok) {
|
|
120
|
+
let message = `Qoder device token poll failed: HTTP ${response.status}`;
|
|
121
|
+
try {
|
|
122
|
+
const body = JSON.parse(text);
|
|
123
|
+
if (body.message) message = `Qoder device token poll failed: ${body.message}`;
|
|
124
|
+
} catch {}
|
|
125
|
+
throw new Error(message);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
let body;
|
|
129
|
+
try {
|
|
130
|
+
body = JSON.parse(text);
|
|
131
|
+
} catch (err) {
|
|
132
|
+
throw new Error(`Qoder device token poll: invalid JSON response (${err.message})`);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Defensive: 200 + empty token means the upstream changed shape.
|
|
136
|
+
if (!body.token) {
|
|
137
|
+
throw new Error("Qoder device token poll returned 200 but no token");
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const expireMs = QoderService.parseExpiry(body.expires_at, body.expires_in);
|
|
141
|
+
|
|
142
|
+
return {
|
|
143
|
+
status: "ok",
|
|
144
|
+
accessToken: body.token,
|
|
145
|
+
refreshToken: body.refresh_token || "",
|
|
146
|
+
userId: body.user_id || "",
|
|
147
|
+
expireTime: expireMs,
|
|
148
|
+
rawResponse: body,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Fetch profile info for the freshly-issued token. Best-effort — failures
|
|
154
|
+
* shouldn't block login; returning empty strings is fine.
|
|
155
|
+
*/
|
|
156
|
+
async fetchUserInfo(accessToken) {
|
|
157
|
+
try {
|
|
158
|
+
const response = await fetchWithTimeout(QODER_USERINFO_URL, {
|
|
159
|
+
method: "GET",
|
|
160
|
+
headers: {
|
|
161
|
+
Authorization: `Bearer ${accessToken}`,
|
|
162
|
+
Accept: "application/json",
|
|
163
|
+
"User-Agent": "Go-http-client/2.0",
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
if (!response.ok) return { name: "", email: "" };
|
|
167
|
+
const body = await response.json();
|
|
168
|
+
return {
|
|
169
|
+
name: (body.name || body.username || "").trim(),
|
|
170
|
+
email: (body.email || "").trim(),
|
|
171
|
+
organizationId: (body.organization_id || "").trim(),
|
|
172
|
+
};
|
|
173
|
+
} catch {
|
|
174
|
+
return { name: "", email: "" };
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Convert the upstream's expiry hint into a Unix-millisecond timestamp.
|
|
180
|
+
* Accepts:
|
|
181
|
+
* - numeric (ms-epoch): returned as-is
|
|
182
|
+
* - numeric string of ms-epoch: e.g. "1781594470000"
|
|
183
|
+
* - RFC3339 string: e.g. "2026-06-16T07:15:04Z"
|
|
184
|
+
* - seconds-from-now via expiresInSeconds (>= 0)
|
|
185
|
+
* Falls back to "now + 30 days" when both are missing.
|
|
186
|
+
*
|
|
187
|
+
* Order matters: try numeric (string or number) before Date.parse, since
|
|
188
|
+
* Date.parse accepts short numeric strings like "2026" as years and would
|
|
189
|
+
* otherwise return a misleading year-2026 timestamp instead of falling
|
|
190
|
+
* through to the integer branch.
|
|
191
|
+
*
|
|
192
|
+
* Static so callers (and tests) can use it without instantiating.
|
|
193
|
+
*/
|
|
194
|
+
static parseExpiry(expiresAt, expiresInSeconds) {
|
|
195
|
+
if (typeof expiresAt === "number" && Number.isFinite(expiresAt) && expiresAt > 0) {
|
|
196
|
+
return expiresAt;
|
|
197
|
+
}
|
|
198
|
+
const trimmed = typeof expiresAt === "string" ? expiresAt.trim() : "";
|
|
199
|
+
if (trimmed) {
|
|
200
|
+
// Pure numeric string → ms-epoch (don't let Date.parse swallow short
|
|
201
|
+
// numerics as years).
|
|
202
|
+
if (/^\d+$/.test(trimmed)) {
|
|
203
|
+
const ms = Number.parseInt(trimmed, 10);
|
|
204
|
+
if (Number.isFinite(ms) && ms > 0) return ms;
|
|
205
|
+
}
|
|
206
|
+
const parsed = Date.parse(trimmed);
|
|
207
|
+
if (!Number.isNaN(parsed)) return parsed;
|
|
208
|
+
}
|
|
209
|
+
// expiresInSeconds === 0 means "already expired"; honor that by returning
|
|
210
|
+
// the current time rather than fabricating a 30-day default.
|
|
211
|
+
if (typeof expiresInSeconds === "number" && Number.isFinite(expiresInSeconds) && expiresInSeconds >= 0) {
|
|
212
|
+
return Date.now() + expiresInSeconds * 1000;
|
|
213
|
+
}
|
|
214
|
+
return Date.now() + 30 * 24 * 60 * 60 * 1000;
|
|
215
|
+
}
|
|
216
|
+
}
|