n9router 0.4.44 → 0.4.46
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 +25 -16
- package/app/.next/build-manifest.json +2 -2
- package/app/.next/prerender-manifest.json +27 -3
- package/app/.next/required-server-files.json +12 -0
- package/app/.next/routes-manifest.json +71 -0
- 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 +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- 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 +30 -30
- 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 +3 -3
- 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 +10 -6
- 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 +3 -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/token-saver/page.js +2 -0
- package/app/.next/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -0
- package/app/.next/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -0
- 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 +4 -4
- package/app/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
- 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 +2 -2
- 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-targets/route.js +1 -1
- package/app/.next/server/app/api/antigravity-targets/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 -1
- package/app/.next/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
- package/app/.next/server/app/api/auth/oidc/start/route.js +1 -1
- package/app/.next/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
- package/app/.next/server/app/api/auth/oidc/test/route.js +1 -1
- package/app/.next/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/auth/reset-password/route.js +1 -0
- package/app/.next/server/app/api/auth/reset-password/route.js.nft.json +1 -0
- package/app/.next/server/app/api/auth/reset-password/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/auth/status/route.js +1 -1
- package/app/.next/server/app/api/auth/status/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/all-statuses/route.js +4 -4
- package/app/.next/server/app/api/cli-tools/all-statuses/route.js.nft.json +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 +1 -1
- package/app/.next/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
- 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 +2 -2
- 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 -2
- package/app/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
- 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 +3 -3
- package/app/.next/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
- 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 +2 -2
- 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 -2
- package/app/.next/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
- 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 +1 -1
- 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 -1
- package/app/.next/server/app/api/donate/route.js.nft.json +1 -1
- package/app/.next/server/app/api/headroom/start/route.js +1 -0
- package/app/.next/server/app/api/headroom/start/route.js.nft.json +1 -0
- package/app/.next/server/app/api/headroom/start/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/headroom/status/route.js +1 -0
- package/app/.next/server/app/api/headroom/status/route.js.nft.json +1 -0
- package/app/.next/server/app/api/headroom/status/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/headroom/stop/route.js +1 -0
- package/app/.next/server/app/api/headroom/stop/route.js.nft.json +1 -0
- package/app/.next/server/app/api/headroom/stop/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 +3 -3
- package/app/.next/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
- package/app/.next/server/app/api/mcp/[plugin]/sse/route.js +6 -3
- package/app/.next/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
- 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 -1
- package/app/.next/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
- 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 -1
- package/app/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/codex/bulk-import/route.js +1 -0
- package/app/.next/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -0
- package/app/.next/server/app/api/oauth/codex/bulk-import/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/oauth/codex/import-token/route.js +1 -1
- package/app/.next/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
- 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/api-key/route.js +1 -0
- package/app/.next/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -0
- package/app/.next/server/app/api/oauth/kiro/api-key/route_client-reference-manifest.js +1 -0
- 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/import-cli-proxy/route.js +1 -0
- package/app/.next/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -0
- package/app/.next/server/app/api/oauth/kiro/import-cli-proxy/route_client-reference-manifest.js +1 -0
- 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 +2 -2
- package/app/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
- package/app/.next/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
- package/app/.next/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
- 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/database/selective/route.js +1 -1
- package/app/.next/server/app/api/settings/database/selective/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 +4 -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 +2 -2
- package/app/.next/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -0
- package/app/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -0
- package/app/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route_client-reference-manifest.js +1 -0
- 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/[...path]/route_client-reference-manifest.js +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/v1beta/models/route_client-reference-manifest.js +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 -1
- package/app/.next/server/app/api/version/shutdown/route.js.nft.json +1 -1
- 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 +5 -5
- package/app/.next/server/app/callback.segments/_full.segment.rsc +5 -5
- package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/callback.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
- 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 +6 -6
- 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 +6 -6
- 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 +4 -4
- package/app/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next/server/app/dashboard/cli-tools.rsc +6 -6
- 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 +6 -6
- 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 +4 -4
- package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.html +1 -1
- package/app/.next/server/app/dashboard/combos.rsc +6 -6
- 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 +6 -6
- package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.html +1 -1
- package/app/.next/server/app/dashboard/endpoint.rsc +6 -6
- 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 +6 -6
- package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/media-providers/web.html +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.rsc +6 -6
- 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 +6 -6
- 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 +4 -4
- package/app/.next/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/mitm.html +1 -1
- package/app/.next/server/app/dashboard/mitm.rsc +6 -6
- 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 +6 -6
- package/app/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.html +1 -1
- package/app/.next/server/app/dashboard/profile.rsc +6 -6
- 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 +6 -6
- package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.html +1 -1
- package/app/.next/server/app/dashboard/providers/new.rsc +6 -6
- 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 +6 -6
- 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 +4 -4
- package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.html +1 -1
- package/app/.next/server/app/dashboard/providers.rsc +6 -6
- 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 +6 -6
- package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.rsc +6 -6
- 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 +6 -6
- 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 +4 -4
- package/app/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/quota.html +2 -2
- package/app/.next/server/app/dashboard/quota.rsc +7 -7
- 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 +7 -7
- package/app/.next/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/quota.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
- 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 -5
- package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +5 -5
- 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 +4 -4
- package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +2 -2
- 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 +6 -6
- 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 +6 -6
- package/app/.next/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/skills.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/token-saver.html +1 -0
- package/app/.next/server/app/dashboard/token-saver.meta +17 -0
- package/app/.next/server/app/dashboard/token-saver.rsc +23 -0
- package/app/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +6 -0
- package/app/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +5 -0
- package/app/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
- package/app/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
- package/app/.next/server/app/dashboard/token-saver.segments/_full.segment.rsc +23 -0
- package/app/.next/server/app/dashboard/token-saver.segments/_head.segment.rsc +6 -0
- package/app/.next/server/app/dashboard/token-saver.segments/_index.segment.rsc +8 -0
- package/app/.next/server/app/dashboard/token-saver.segments/_tree.segment.rsc +5 -0
- package/app/.next/server/app/dashboard/translator.html +1 -1
- package/app/.next/server/app/dashboard/translator.rsc +6 -6
- 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 +6 -6
- package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.html +1 -1
- package/app/.next/server/app/dashboard/usage.rsc +6 -6
- 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 +6 -6
- package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard.html +1 -1
- package/app/.next/server/app/dashboard.rsc +6 -6
- 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 +6 -6
- package/app/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard.segments/_tree.segment.rsc +2 -2
- 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 +4 -4
- package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/index.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- 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 +4 -4
- package/app/.next/server/app/landing.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/landing.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
- 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 +5 -5
- package/app/.next/server/app/login.segments/_full.segment.rsc +5 -5
- package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/login.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- 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 +25 -16
- package/app/.next/server/chunks/1051.js +1 -1
- package/app/.next/server/chunks/1241.js +1 -0
- package/app/.next/server/chunks/1350.js +1 -0
- package/app/.next/server/chunks/1470.js +1 -0
- package/app/.next/server/chunks/1719.js +1 -0
- package/app/.next/server/chunks/2041.js +1 -0
- package/app/.next/server/chunks/220.js +1 -0
- package/app/.next/server/chunks/2701.js +10 -0
- package/app/.next/server/chunks/318.js +21 -44
- package/app/.next/server/chunks/3535.js +1 -0
- package/app/.next/server/chunks/{1531.js → 3546.js} +1 -1
- package/app/.next/server/chunks/3955.js +1 -0
- package/app/.next/server/chunks/412.js +5 -5
- package/app/.next/server/chunks/4250.js +2 -2
- package/app/.next/server/chunks/4306.js +1 -0
- package/app/.next/server/chunks/4334.js +1 -1
- package/app/.next/server/chunks/4632.js +1 -0
- package/app/.next/server/chunks/4989.js +2 -2
- package/app/.next/server/chunks/5612.js +1 -0
- package/app/.next/server/chunks/5615.js +43 -0
- package/app/.next/server/chunks/5699.js +1 -0
- package/app/.next/server/chunks/5961.js +1 -0
- package/app/.next/server/chunks/5995.js +3 -3
- package/app/.next/server/chunks/6070.js +1 -0
- package/app/.next/server/chunks/6114.js +1 -0
- package/app/.next/server/chunks/615.js +1 -0
- package/app/.next/server/chunks/6182.js +6 -6
- package/app/.next/server/chunks/6292.js +1 -0
- package/app/.next/server/chunks/63.js +3 -3
- package/app/.next/server/chunks/6306.js +1 -0
- package/app/.next/server/chunks/6328.js +1 -0
- package/app/.next/server/chunks/6457.js +4 -4
- package/app/.next/server/chunks/{5433.js → 6630.js} +1 -1
- package/app/.next/server/chunks/{6108.js → 6763.js} +1 -1
- package/app/.next/server/chunks/6777.js +1 -0
- package/app/.next/server/chunks/{7912.js → 7186.js} +1 -1
- package/app/.next/server/chunks/7774.js +2 -2
- package/app/.next/server/chunks/7886.js +1 -0
- package/app/.next/server/chunks/7994.js +1 -1
- package/app/.next/server/chunks/8056.js +1 -0
- package/app/.next/server/chunks/8238.js +1 -0
- package/app/.next/server/chunks/8271.js +1 -0
- package/app/.next/server/chunks/8833.js +75 -0
- package/app/.next/server/chunks/8895.js +52 -6
- package/app/.next/server/chunks/8910.js +2 -0
- package/app/.next/server/chunks/8920.js +1 -0
- package/app/.next/server/chunks/9718.js +1 -1
- package/app/.next/server/middleware-build-manifest.js +1 -1
- package/app/.next/server/middleware.js +4 -4
- 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/27Vk-YuF5IVK9FBSw9u-7/_buildManifest.js +1 -0
- package/app/.next/static/chunks/1321-04bdf1999f780065.js +1 -0
- package/app/.next/static/chunks/4406-7c91480ba4750afb.js +53 -0
- package/app/.next/static/chunks/5497-5cecb2d0cc54a0f8.js +7 -0
- package/app/.next/static/chunks/705-979ff3eb195b9023.js +1 -0
- package/app/.next/static/chunks/8198-78a2e809aa3deb41.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/basic-chat/{page-068dda6eab2b9c36.js → page-32d43003bf779725.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/{page-67d36bbaeb6af871.js → page-15778114f19494f8.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/{page-51957200aaa0e0f7.js → page-925d6a9314cf0c45.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-4bb3df15dc91fcb2.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-f60417f258999845.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-74bfeda48c347058.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page-73b10fa11c40c00c.js +59 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/{page-af17247a74fa851d.js → page-0f5128a45c7624cc.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/{page-2db8cc9e18677705.js → page-ff27d7416104ba6f.js} +2 -2
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/web/{page-3dda3de79f6783b9.js → page-e95e43c710b79a65.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/mitm/{page-8cb9c569a7822a0a.js → page-7c06afe89ff9c503.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/page-89ea8a0102dcfaa6.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/{page-5d6cf330f43257e2.js → page-ddac36832067712f.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-658bcd33b491d685.js +10 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/new/{page-90c4c56b239fd343.js → page-01642ff508f9e4da.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-cf238376512e0f73.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/{page-b9da35538f423062.js → page-5d746bc98c25d89d.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-c38f42b5a56fb89a.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/skills/{page-00d80332b8940cff.js → page-78cef8869d7870c1.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/token-saver/page-74ebd1e0d5566f44.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/{page-216b24f865b63695.js → page-260de68ca87258e3.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-40fda9a4c08e7bd5.js +3 -0
- package/app/.next/static/chunks/app/(dashboard)/layout-9e8819851f57b3cb.js +1 -0
- package/app/.next/static/chunks/app/_global-error/page-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/antigravity-app/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/antigravity-app-v2/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/antigravity-ide/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/antigravity-targets/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/antigravity-tools/import/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/antigravity-tools/import-refresh-tokens/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/auth/login/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/auth/logout/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/auth/oidc/callback/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/auth/oidc/start/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/auth/oidc/test/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/auth/reset-password/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/auth/status/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/all-statuses/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/jcode-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/combos/[id]/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/combos/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/donate/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/headroom/start/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/headroom/status/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/headroom/stop/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/health/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/init/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/internal/account-health/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/internal/request-detail/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/internal/usage/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/keys/[id]/reset-usage/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/keys/[id]/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/keys/[id]/usage/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/keys/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/locale/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/mcp/[plugin]/message/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/mcp/[plugin]/sse/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/models/alias/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/models/availability/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/models/custom/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/models/disabled/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/models/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/models/test/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/codex/bulk-import/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/codex/import-token/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/api-key/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/import-cli-proxy/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/pricing/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/providers/client/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/providers/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/providers/suggested-models/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/providers/test-batch/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/providers/validate/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/settings/database/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/settings/database/selective/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/settings/proxy-test/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/settings/require-login/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/shutdown/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/tags/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/translator/console-logs/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/translator/load/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/translator/save/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/translator/send/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/translator/translate/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/disable/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/enable/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/status/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/chart/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/history/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/logs/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/providers/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/report/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/request-details/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/request-logs/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/stats/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/stream/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/api/chat/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/voices/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/embeddings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/images/generations/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/messages/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/[kind]/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/info/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/responses/compact/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/responses/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/search/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/web/fetch/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1beta/models/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/version/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/version/shutdown/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/version/update/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/callback/page-b12814e445464090.js +1 -0
- package/app/.next/static/chunks/app/dashboard/settings/pricing/page-71c6f6edfe7b111f.js +1 -0
- package/app/.next/static/chunks/app/login/page-1b46e625d19cb04a.js +1 -0
- package/app/.next/static/chunks/app/manifest.webmanifest/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/page-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-270635328efa0901.js +1 -0
- package/app/.next/static/css/7eb3c00f858e3692.css +1 -0
- package/app/open-sse/AGENTS.md +39 -0
- package/app/open-sse/config/appConstants.js +20 -41
- package/app/open-sse/config/kiroConstants.js +55 -40
- package/app/open-sse/config/mediaConfig.js +27 -0
- package/app/open-sse/config/providerModels.js +15 -851
- package/app/open-sse/config/providers.js +6 -444
- package/app/open-sse/config/runtimeConfig.js +18 -3
- package/app/open-sse/config/ttsModels.js +2 -0
- package/app/open-sse/executors/antigravity.js +211 -125
- package/app/open-sse/executors/base.js +18 -8
- package/app/open-sse/executors/codebuddy-cn.js +40 -0
- package/app/open-sse/executors/codex.js +21 -89
- package/app/open-sse/executors/commandcode.js +10 -4
- package/app/open-sse/executors/cursor.js +96 -203
- package/app/open-sse/executors/default.js +148 -130
- package/app/open-sse/executors/github.js +5 -39
- package/app/open-sse/executors/grok-web.js +5 -7
- package/app/open-sse/executors/index.js +10 -0
- package/app/open-sse/executors/kimchi.js +123 -0
- package/app/open-sse/executors/kiro.js +126 -25
- package/app/open-sse/executors/mimo-free.js +167 -0
- package/app/open-sse/executors/opencode-go.js +12 -4
- package/app/open-sse/executors/opencode.js +1 -1
- package/app/open-sse/executors/perplexity-web.js +5 -7
- package/app/open-sse/executors/qoder.js +18 -10
- package/app/open-sse/executors/vertex.js +53 -7
- package/app/open-sse/executors/xiaomi-tokenplan.js +6 -5
- package/app/open-sse/handlers/chatCore/nonStreamingHandler.js +103 -12
- package/app/open-sse/handlers/chatCore/requestDetail.js +6 -10
- package/app/open-sse/handlers/chatCore/sseToJsonHandler.js +6 -2
- package/app/open-sse/handlers/chatCore/streamingHandler.js +51 -15
- package/app/open-sse/handlers/chatCore.js +58 -5
- package/app/open-sse/handlers/embeddingProviders/index.js +1 -0
- package/app/open-sse/handlers/embeddingProviders/openai.js +8 -16
- package/app/open-sse/handlers/imageGenerationCore.js +66 -6
- package/app/open-sse/handlers/imageProviders/antigravity.js +73 -0
- package/app/open-sse/handlers/imageProviders/blackForestLabs.js +2 -1
- package/app/open-sse/handlers/imageProviders/cloudflareAi.js +2 -1
- package/app/open-sse/handlers/imageProviders/codex.js +2 -1
- package/app/open-sse/handlers/imageProviders/comfyui.js +5 -1
- package/app/open-sse/handlers/imageProviders/falAi.js +2 -1
- package/app/open-sse/handlers/imageProviders/gemini.js +2 -1
- package/app/open-sse/handlers/imageProviders/huggingface.js +2 -1
- package/app/open-sse/handlers/imageProviders/index.js +5 -0
- package/app/open-sse/handlers/imageProviders/nanobanana.js +4 -2
- package/app/open-sse/handlers/imageProviders/openai.js +15 -22
- package/app/open-sse/handlers/imageProviders/runwayml.js +2 -1
- package/app/open-sse/handlers/imageProviders/sdwebui.js +4 -1
- package/app/open-sse/handlers/imageProviders/stabilityAi.js +2 -1
- package/app/open-sse/handlers/responsesHandler.js +3 -7
- package/app/open-sse/handlers/search/chatSearch.js +13 -14
- package/app/open-sse/handlers/sttCore.js +2 -3
- package/app/open-sse/handlers/ttsProviders/gemini.js +14 -3
- package/app/open-sse/handlers/ttsProviders/index.js +4 -2
- package/app/open-sse/handlers/ttsProviders/openai.js +4 -1
- package/app/open-sse/handlers/ttsProviders/openrouter.js +7 -4
- package/app/open-sse/index.js +0 -3
- package/app/open-sse/providers/REGISTRY_TEMPLATE.js +98 -0
- package/app/open-sse/providers/capabilities.js +291 -0
- package/app/open-sse/providers/index.js +51 -0
- package/app/open-sse/providers/models/helpers.js +20 -0
- package/app/open-sse/providers/models/namePatterns.js +33 -0
- package/app/open-sse/providers/models/schema.js +31 -0
- package/app/{src/shared/constants → open-sse/providers}/pricing.js +8 -5
- package/app/open-sse/providers/registry/alicode-intl.js +30 -0
- package/app/open-sse/providers/registry/alicode.js +31 -0
- package/app/open-sse/providers/registry/anthropic.js +32 -0
- package/app/open-sse/providers/registry/antigravity.js +85 -0
- package/app/open-sse/providers/registry/assemblyai.js +38 -0
- package/app/open-sse/providers/registry/aws-polly.js +45 -0
- package/app/open-sse/providers/registry/azure.js +21 -0
- package/app/open-sse/providers/registry/black-forest-labs.js +32 -0
- package/app/open-sse/providers/registry/blackbox.js +41 -0
- package/app/open-sse/providers/registry/brave-search.js +35 -0
- package/app/open-sse/providers/registry/byteplus.js +35 -0
- package/app/open-sse/providers/registry/cartesia.js +36 -0
- package/app/open-sse/providers/registry/cerebras.js +31 -0
- package/app/open-sse/providers/registry/chutes.js +24 -0
- package/app/open-sse/providers/registry/claude.js +89 -0
- package/app/open-sse/providers/registry/cline.js +51 -0
- package/app/open-sse/providers/registry/clinepass.js +57 -0
- package/app/open-sse/providers/registry/cloudflare-ai.js +55 -0
- package/app/open-sse/providers/registry/codebuddy-cn.js +77 -0
- package/app/open-sse/providers/registry/codex.js +95 -0
- package/app/open-sse/providers/registry/cohere.js +25 -0
- package/app/open-sse/providers/registry/comfyui.js +20 -0
- package/app/open-sse/providers/registry/commandcode.js +43 -0
- package/app/open-sse/providers/registry/coqui.js +30 -0
- package/app/open-sse/providers/registry/cursor.js +58 -0
- package/app/open-sse/providers/registry/deepgram.js +33 -0
- package/app/open-sse/providers/registry/deepseek.js +51 -0
- package/app/open-sse/providers/registry/edge-tts.js +24 -0
- package/app/open-sse/providers/registry/elevenlabs.js +35 -0
- package/app/open-sse/providers/registry/exa.js +50 -0
- package/app/open-sse/providers/registry/fal-ai.js +34 -0
- package/app/open-sse/providers/registry/firecrawl.js +34 -0
- package/app/open-sse/providers/registry/fireworks.js +29 -0
- package/app/open-sse/providers/registry/gemini-cli.js +58 -0
- package/app/open-sse/providers/registry/gemini.js +81 -0
- package/app/open-sse/providers/registry/github.js +82 -0
- package/app/open-sse/providers/registry/gitlab.js +32 -0
- package/app/open-sse/providers/registry/glm-cn.js +35 -0
- package/app/open-sse/providers/registry/glm.js +58 -0
- package/app/open-sse/providers/registry/google-pse.js +35 -0
- package/app/open-sse/providers/registry/google-tts.js +24 -0
- package/app/open-sse/providers/registry/grok-web.js +39 -0
- package/app/open-sse/providers/registry/groq.js +37 -0
- package/app/open-sse/providers/registry/huggingface.js +34 -0
- package/app/open-sse/providers/registry/hyperbolic.js +35 -0
- package/app/open-sse/providers/registry/iflow.js +52 -0
- package/app/open-sse/providers/registry/index.js +198 -0
- package/app/open-sse/providers/registry/inworld.js +36 -0
- package/app/open-sse/providers/registry/jina-ai.js +42 -0
- package/app/open-sse/providers/registry/jina-reader.js +34 -0
- package/app/open-sse/providers/registry/kilocode.js +51 -0
- package/app/open-sse/providers/registry/kimchi.js +49 -0
- package/app/open-sse/providers/registry/kimi-coding.js +65 -0
- package/app/open-sse/providers/registry/kimi.js +56 -0
- package/app/open-sse/providers/registry/kiro.js +96 -0
- package/app/open-sse/providers/registry/linkup.js +34 -0
- package/app/open-sse/providers/registry/local-device.js +24 -0
- package/app/open-sse/providers/registry/mimo-free.js +24 -0
- package/app/open-sse/providers/registry/minimax-cn.js +76 -0
- package/app/open-sse/providers/registry/minimax.js +83 -0
- package/app/open-sse/providers/registry/mistral.js +31 -0
- package/app/open-sse/providers/registry/mmf.js +19 -0
- package/app/open-sse/providers/registry/nanobanana.js +35 -0
- package/app/open-sse/providers/registry/nebius.js +27 -0
- package/app/open-sse/providers/registry/nvidia.js +43 -0
- package/app/open-sse/providers/registry/ollama-local.js +19 -0
- package/app/open-sse/providers/registry/ollama.js +36 -0
- package/app/open-sse/providers/registry/openai.js +81 -0
- package/app/open-sse/providers/registry/opencode-go.js +41 -0
- package/app/open-sse/providers/registry/opencode.js +25 -0
- package/app/open-sse/providers/registry/openrouter.js +60 -0
- package/app/open-sse/providers/registry/perplexity-web.js +33 -0
- package/app/open-sse/providers/registry/perplexity.js +35 -0
- package/app/open-sse/providers/registry/playht.js +36 -0
- package/app/open-sse/providers/registry/qoder.js +54 -0
- package/app/open-sse/providers/registry/qwen.js +33 -0
- package/app/open-sse/providers/registry/recraft.js +24 -0
- package/app/open-sse/providers/registry/runwayml.js +30 -0
- package/app/open-sse/providers/registry/sdwebui.js +20 -0
- package/app/open-sse/providers/registry/searchapi.js +35 -0
- package/app/open-sse/providers/registry/searxng.js +33 -0
- package/app/open-sse/providers/registry/serper.js +35 -0
- package/app/open-sse/providers/registry/siliconflow.js +39 -0
- package/app/open-sse/providers/registry/stability-ai.js +31 -0
- package/app/open-sse/providers/registry/tavily.js +50 -0
- package/app/open-sse/providers/registry/together.js +31 -0
- package/app/open-sse/providers/registry/topaz.js +19 -0
- package/app/open-sse/providers/registry/tortoise.js +30 -0
- package/app/open-sse/providers/registry/venice.js +56 -0
- package/app/open-sse/providers/registry/vercel-ai-gateway.js +41 -0
- package/app/open-sse/providers/registry/vertex-partner.js +29 -0
- package/app/open-sse/providers/registry/vertex.js +32 -0
- package/app/open-sse/providers/registry/volcengine-ark.js +35 -0
- package/app/open-sse/providers/registry/voyage-ai.js +30 -0
- package/app/open-sse/providers/registry/xai.js +43 -0
- package/app/open-sse/providers/registry/xiaomi-mimo.js +46 -0
- package/app/open-sse/providers/registry/xiaomi-tokenplan.js +63 -0
- package/app/open-sse/providers/registry/youcom.js +35 -0
- package/app/open-sse/providers/schema.js +76 -0
- package/app/open-sse/providers/shared.js +67 -0
- package/app/open-sse/rtk/caveman.js +2 -93
- package/app/open-sse/rtk/constants.js +6 -2
- package/app/open-sse/rtk/filters/find.js +2 -3
- package/app/open-sse/rtk/headroom.js +215 -0
- package/app/open-sse/rtk/ponytail.js +9 -0
- package/app/open-sse/rtk/ponytailPrompt.js +52 -0
- package/app/open-sse/rtk/systemInject.js +98 -0
- package/app/open-sse/services/clinepassModels.js +63 -0
- package/app/open-sse/services/combo.js +375 -2
- package/app/open-sse/services/copilotModels.js +155 -0
- package/app/open-sse/services/kimchiModels.js +176 -0
- package/app/open-sse/services/model.js +22 -145
- package/app/open-sse/services/oauthCredentialManager.js +10 -5
- package/app/open-sse/services/provider.js +17 -204
- package/app/open-sse/services/qoderModels.js +2 -2
- package/app/open-sse/services/tokenRefresh/dedup.js +31 -0
- package/app/open-sse/services/tokenRefresh/providers.js +624 -0
- package/app/open-sse/services/tokenRefresh.js +97 -735
- package/app/open-sse/services/usage/claude.js +147 -0
- package/app/open-sse/services/usage/codebuddy-cn.js +138 -0
- package/app/open-sse/services/usage/codex.js +201 -0
- package/app/open-sse/services/usage/github.js +100 -0
- package/app/open-sse/services/usage/google.js +279 -0
- package/app/open-sse/services/usage/kiro.js +188 -0
- package/app/open-sse/services/usage/minimax.js +234 -0
- package/app/open-sse/services/usage/misc.js +269 -0
- package/app/open-sse/services/usage/shared.js +70 -0
- package/app/open-sse/services/usage.js +40 -1295
- package/app/open-sse/shared/clineAuth.js +37 -0
- package/app/open-sse/shared/machineId.js +19 -0
- package/app/open-sse/shared/qoder/constants.js +64 -0
- package/app/open-sse/shared/qoder/cosy.js +175 -0
- package/app/open-sse/shared/qoder/encoding.js +55 -0
- package/app/open-sse/translator/concerns/chunk.js +11 -0
- package/app/open-sse/translator/concerns/finishReason.js +63 -0
- package/app/open-sse/translator/concerns/image.js +124 -0
- package/app/open-sse/translator/concerns/json.js +5 -0
- package/app/open-sse/translator/concerns/message.js +7 -0
- package/app/open-sse/translator/concerns/modality.js +155 -0
- package/app/open-sse/translator/concerns/paramSupport.js +44 -0
- package/app/open-sse/translator/concerns/prefetch.js +96 -0
- package/app/open-sse/translator/concerns/reasoning.js +24 -0
- package/app/open-sse/translator/concerns/thinking.js +53 -0
- package/app/open-sse/translator/concerns/thinkingUnified.js +271 -0
- package/app/open-sse/translator/{helpers/toolCallHelper.js → concerns/toolCall.js} +5 -0
- package/app/open-sse/translator/concerns/usage.js +69 -0
- package/app/open-sse/translator/formats/claude.js +351 -0
- package/app/open-sse/translator/{helpers/geminiHelper.js → formats/gemini.js} +24 -16
- package/app/open-sse/translator/{helpers/maxTokensHelper.js → formats/maxTokens.js} +4 -1
- package/app/open-sse/translator/{helpers/openaiHelper.js → formats/openai.js} +35 -31
- package/app/open-sse/translator/{helpers/responsesApiHelper.js → formats/responsesApi.js} +17 -15
- package/app/open-sse/translator/index.js +89 -56
- package/app/open-sse/translator/request/antigravity-to-openai.js +40 -27
- package/app/open-sse/translator/request/claude-to-kiro.js +466 -0
- package/app/open-sse/translator/request/claude-to-openai.js +61 -33
- package/app/open-sse/translator/request/gemini-to-openai.js +18 -13
- package/app/open-sse/translator/request/openai-responses.js +39 -30
- package/app/open-sse/translator/request/openai-to-claude.js +59 -90
- package/app/open-sse/translator/request/openai-to-commandcode.js +23 -21
- package/app/open-sse/translator/request/openai-to-cursor.js +25 -23
- package/app/open-sse/translator/request/openai-to-gemini.js +42 -46
- package/app/open-sse/translator/request/openai-to-kiro.js +56 -36
- package/app/open-sse/translator/request/openai-to-ollama.js +16 -13
- package/app/open-sse/translator/response/claude-to-openai.js +51 -80
- package/app/open-sse/translator/response/commandcode-to-openai.js +25 -38
- package/app/open-sse/translator/response/cursor-to-openai.js +2 -2
- package/app/open-sse/translator/response/gemini-to-openai.js +66 -164
- package/app/open-sse/translator/response/kiro-to-claude.js +261 -0
- package/app/open-sse/translator/response/kiro-to-openai.js +37 -72
- package/app/open-sse/translator/response/ollama-to-openai.js +21 -39
- package/app/open-sse/translator/response/openai-responses.js +68 -123
- package/app/open-sse/translator/response/openai-to-antigravity.js +7 -6
- package/app/open-sse/translator/response/openai-to-claude.js +18 -19
- package/app/open-sse/translator/schema/blocks.js +43 -0
- package/app/open-sse/translator/schema/defaults.js +7 -0
- package/app/open-sse/translator/schema/finishReasons.js +27 -0
- package/app/open-sse/translator/schema/index.js +8 -0
- package/app/open-sse/translator/schema/roles.js +16 -0
- package/app/open-sse/utils/bypassHandler.js +18 -3
- package/app/open-sse/utils/claudeCloaking.js +15 -5
- package/app/open-sse/utils/claudeSignature.js +41 -0
- package/app/open-sse/utils/reasoningContentInjector.js +4 -7
- package/app/open-sse/utils/responsesStreamHelpers.js +1 -0
- package/app/open-sse/utils/sessionManager.js +149 -0
- package/app/open-sse/utils/sse.js +14 -0
- package/app/open-sse/utils/sseConstants.js +23 -0
- package/app/open-sse/utils/stream.js +47 -39
- package/app/open-sse/utils/streamHandler.js +8 -6
- package/app/open-sse/utils/usageTracking.js +93 -18
- package/app/package.json +5 -2
- package/app/public/i18n/literals/zh-CN.json +1 -0
- package/app/public/providers/clinepass.png +0 -0
- package/app/public/providers/codebuddy-cn.png +0 -0
- package/app/public/providers/kimchi.png +0 -0
- package/app/public/providers/kimchi.svg +4 -0
- package/app/public/providers/mimo-free.png +0 -0
- package/app/server.js +1 -1
- package/app/src/mitm/cert/generate.js +2 -2
- package/app/src/mitm/cert/rootCA.js +1 -1
- package/app/src/mitm/config.js +3 -1
- package/app/src/mitm/manager.js +29 -2
- package/app/src/shared/constants/cliTools.js +23 -25
- package/app/src/shared/constants/config.js +28 -18
- package/app/src/shared/constants/coworkPlugins.js +1 -4
- package/app/src/shared/constants/mitmToolHosts.js +1 -1
- package/app/src/shared/constants/models.js +9 -0
- package/app/src/shared/constants/providers.js +65 -180
- package/app/src/shared/constants/providersDisplay.js +12 -0
- package/package.json +1 -1
- package/app/.next/server/chunks/1476.js +0 -1
- package/app/.next/server/chunks/1498.js +0 -1
- package/app/.next/server/chunks/1699.js +0 -1
- package/app/.next/server/chunks/2569.js +0 -1
- package/app/.next/server/chunks/3104.js +0 -43
- package/app/.next/server/chunks/3110.js +0 -67
- package/app/.next/server/chunks/3245.js +0 -1
- package/app/.next/server/chunks/3588.js +0 -1
- package/app/.next/server/chunks/4013.js +0 -1
- package/app/.next/server/chunks/4177.js +0 -1
- package/app/.next/server/chunks/4389.js +0 -1
- package/app/.next/server/chunks/4404.js +0 -1
- package/app/.next/server/chunks/5681.js +0 -1
- package/app/.next/server/chunks/5859.js +0 -1
- package/app/.next/server/chunks/6811.js +0 -1
- package/app/.next/server/chunks/7341.js +0 -1
- package/app/.next/server/chunks/7828.js +0 -1
- package/app/.next/server/chunks/7879.js +0 -10
- package/app/.next/server/chunks/8255.js +0 -1
- package/app/.next/server/chunks/9295.js +0 -1
- package/app/.next/server/chunks/9396.js +0 -44
- package/app/.next/server/chunks/9489.js +0 -1
- package/app/.next/server/chunks/9807.js +0 -7
- package/app/.next/static/chunks/1321-5ac5b0e0510e7bc1.js +0 -1
- package/app/.next/static/chunks/4406-9357c0d7c2c19d9b.js +0 -53
- package/app/.next/static/chunks/5497-f16d2c74532d4ad3.js +0 -7
- package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-1271df5d411ef013.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-56d9eac21ab09df1.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-770486eb0371891f.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page-e680a27ecacbfd49.js +0 -59
- package/app/.next/static/chunks/app/(dashboard)/dashboard/page-68288fb612a60026.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-bc4b466a331dbb31.js +0 -6
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-de08b6b9ad238de4.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-1389351bfdd842f9.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-d6fce7b8e1d3fdec.js +0 -3
- package/app/.next/static/chunks/app/(dashboard)/layout-5d6111c3c8c1af01.js +0 -1
- package/app/.next/static/chunks/app/_global-error/page-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-app/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-app-v2/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-ide/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-targets/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-tools/import/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-tools/import-refresh-tokens/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/auth/login/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/auth/logout/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/auth/oidc/callback/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/auth/oidc/start/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/auth/oidc/test/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/auth/status/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/all-statuses/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/jcode-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/combos/[id]/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/combos/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/donate/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/health/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/init/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/internal/account-health/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/internal/request-detail/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/internal/usage/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/keys/[id]/reset-usage/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/keys/[id]/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/keys/[id]/usage/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/keys/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/locale/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/mcp/[plugin]/message/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/mcp/[plugin]/sse/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/models/alias/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/models/availability/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/models/custom/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/models/disabled/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/models/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/models/test/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/codex/import-token/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/pricing/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/providers/client/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/providers/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/providers/suggested-models/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/providers/test-batch/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/providers/validate/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/settings/database/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/settings/database/selective/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/settings/proxy-test/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/settings/require-login/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/shutdown/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/tags/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/translator/console-logs/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/translator/load/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/translator/save/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/translator/send/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/translator/translate/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/disable/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/enable/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/status/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/usage/chart/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/usage/history/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/usage/logs/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/usage/providers/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/usage/report/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/usage/request-details/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/usage/request-logs/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/usage/stats/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/usage/stream/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/api/chat/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/voices/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/embeddings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/images/generations/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/[kind]/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/info/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/responses/compact/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/responses/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/search/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/web/fetch/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/version/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/version/shutdown/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/version/update/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/callback/page-1ac4b69a5de26857.js +0 -1
- package/app/.next/static/chunks/app/dashboard/settings/pricing/page-29c50a560c8c4d2b.js +0 -1
- package/app/.next/static/chunks/app/login/page-98aaabbf53ef75f6.js +0 -1
- package/app/.next/static/chunks/app/manifest.webmanifest/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/page-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-663014002ada02ea.js +0 -1
- package/app/.next/static/css/d73c8ccb42eb9a7d.css +0 -1
- package/app/.next/static/zOWV4f8WCIf4AVjdpAv5I/_buildManifest.js +0 -1
- package/app/open-sse/translator/helpers/claudeHelper.js +0 -216
- package/app/open-sse/translator/helpers/imageHelper.js +0 -34
- package/app/open-sse/translator/request/openai-to-kiro.old.js +0 -278
- /package/app/.next/static/{zOWV4f8WCIf4AVjdpAv5I → 27Vk-YuF5IVK9FBSw9u-7}/_ssgManifest.js +0 -0
|
@@ -1,11 +1,33 @@
|
|
|
1
1
|
import { BaseExecutor } from "./base.js";
|
|
2
2
|
import { PROVIDERS } from "../config/providers.js";
|
|
3
|
-
import { parseVertexSaJson, refreshVertexToken } from "../services/tokenRefresh.js";
|
|
3
|
+
import { parseVertexSaJson, refreshVertexToken, refreshGoogleToken } from "../services/tokenRefresh.js";
|
|
4
4
|
import { proxyAwareFetch } from "../utils/proxyFetch.js";
|
|
5
5
|
|
|
6
6
|
// Cache project IDs resolved from raw API keys { apiKey → projectId }
|
|
7
7
|
const projectIdCache = new Map();
|
|
8
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Parse Google ADC user credential JSON from apiKey string.
|
|
11
|
+
* This is the format produced by `gcloud auth application-default login`.
|
|
12
|
+
*/
|
|
13
|
+
function parseVertexAdcJson(apiKey) {
|
|
14
|
+
if (typeof apiKey !== "string") return null;
|
|
15
|
+
try {
|
|
16
|
+
const parsed = JSON.parse(apiKey);
|
|
17
|
+
if (
|
|
18
|
+
parsed.type === "authorized_user" &&
|
|
19
|
+
parsed.client_id &&
|
|
20
|
+
parsed.client_secret &&
|
|
21
|
+
parsed.refresh_token
|
|
22
|
+
) {
|
|
23
|
+
return parsed;
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
} catch {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
9
31
|
/**
|
|
10
32
|
* Resolve GCP project ID from a raw Vertex API key.
|
|
11
33
|
* Sends a dummy 404 request and parses "projects/{id}" from the error message.
|
|
@@ -43,8 +65,13 @@ export class VertexExecutor extends BaseExecutor {
|
|
|
43
65
|
|
|
44
66
|
buildUrl(model, stream, urlIndex = 0, credentials = null) {
|
|
45
67
|
const saJson = parseVertexSaJson(credentials?.apiKey);
|
|
46
|
-
const
|
|
47
|
-
const
|
|
68
|
+
const adcJson = parseVertexAdcJson(credentials?.apiKey);
|
|
69
|
+
const usesOAuth = !!saJson || !!adcJson || !!credentials?.accessToken;
|
|
70
|
+
const rawKey = !usesOAuth ? credentials?.apiKey : null;
|
|
71
|
+
const projectId =
|
|
72
|
+
saJson?.project_id ||
|
|
73
|
+
adcJson?.quota_project_id ||
|
|
74
|
+
credentials?.providerSpecificData?.projectId;
|
|
48
75
|
|
|
49
76
|
if (this.provider === "vertex-partner") {
|
|
50
77
|
// Partner models require project_id in path regardless of auth method
|
|
@@ -56,8 +83,14 @@ export class VertexExecutor extends BaseExecutor {
|
|
|
56
83
|
// Gemini on Vertex
|
|
57
84
|
const action = stream ? "streamGenerateContent" : "generateContent";
|
|
58
85
|
|
|
59
|
-
if (
|
|
60
|
-
// SA JSON
|
|
86
|
+
if (usesOAuth) {
|
|
87
|
+
// SA JSON / ADC / pre-set accessToken: must use project-scoped path to avoid RESOURCE_PROJECT_INVALID
|
|
88
|
+
if (!projectId) {
|
|
89
|
+
throw new Error(
|
|
90
|
+
"Vertex OAuth/ADC requires a project_id. " +
|
|
91
|
+
"Add quota_project_id to your ADC JSON or set providerSpecificData.projectId."
|
|
92
|
+
);
|
|
93
|
+
}
|
|
61
94
|
const location = credentials?.providerSpecificData?.location || "us-central1";
|
|
62
95
|
let url = `https://aiplatform.googleapis.com/v1/projects/${projectId}/locations/${location}/publishers/google/models/${model}:${action}`;
|
|
63
96
|
if (stream) url += "?alt=sse";
|
|
@@ -97,16 +130,29 @@ export class VertexExecutor extends BaseExecutor {
|
|
|
97
130
|
|
|
98
131
|
async execute({ model, body, stream, credentials, signal, log, proxyOptions = null }) {
|
|
99
132
|
const saJson = parseVertexSaJson(credentials?.apiKey);
|
|
133
|
+
const adcJson = parseVertexAdcJson(credentials?.apiKey);
|
|
100
134
|
|
|
101
|
-
// SA JSON flow: mint Bearer token (cached)
|
|
135
|
+
// SA JSON flow: mint Bearer token via JWT assertion (cached)
|
|
102
136
|
if (saJson) {
|
|
103
137
|
const result = await refreshVertexToken(saJson, log);
|
|
104
138
|
if (!result?.accessToken) throw new Error("Vertex: failed to mint access token from Service Account JSON");
|
|
105
139
|
credentials.accessToken = result.accessToken;
|
|
106
140
|
}
|
|
107
141
|
|
|
142
|
+
// ADC user credential flow: refresh Bearer token via Google OAuth2 token endpoint
|
|
143
|
+
if (adcJson) {
|
|
144
|
+
const result = await refreshGoogleToken(
|
|
145
|
+
adcJson.refresh_token,
|
|
146
|
+
adcJson.client_id,
|
|
147
|
+
adcJson.client_secret,
|
|
148
|
+
log
|
|
149
|
+
);
|
|
150
|
+
if (!result?.accessToken) throw new Error("Vertex: failed to refresh access token from ADC JSON (authorized_user)");
|
|
151
|
+
credentials.accessToken = result.accessToken;
|
|
152
|
+
}
|
|
153
|
+
|
|
108
154
|
// vertex-partner with raw key: auto-resolve project_id if not provided
|
|
109
|
-
if (this.provider === "vertex-partner" && !saJson && !credentials?.providerSpecificData?.projectId) {
|
|
155
|
+
if (this.provider === "vertex-partner" && !saJson && !adcJson && !credentials?.providerSpecificData?.projectId) {
|
|
110
156
|
const projectId = await resolveProjectId(credentials.apiKey);
|
|
111
157
|
if (!projectId) throw new Error("Vertex: could not resolve project_id from API key. Please add it manually in provider settings.");
|
|
112
158
|
log?.debug?.("VERTEX", `Resolved project_id: ${projectId}`);
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import { DefaultExecutor } from "./default.js";
|
|
2
2
|
import { resolveXiaomiTokenplanBaseUrl } from "../config/providers.js";
|
|
3
|
-
import { getModelTargetFormat } from "../config/providerModels.js";
|
|
4
|
-
import { FORMATS } from "../translator/formats.js";
|
|
3
|
+
// import { getModelTargetFormat } from "../config/providerModels.js";
|
|
4
|
+
// import { FORMATS } from "../translator/formats.js";
|
|
5
5
|
|
|
6
6
|
export class XiaomiTokenplanExecutor extends DefaultExecutor {
|
|
7
7
|
constructor() {
|
|
8
8
|
super("xiaomi-tokenplan");
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
//
|
|
11
|
+
// Token Plan keys are region-specific. Route per sourceFormat-matched transport:
|
|
12
|
+
// claude → Anthropic /anthropic/v1/messages, openai → /chat/completions.
|
|
12
13
|
buildUrl(model, stream, urlIndex = 0, credentials = null) {
|
|
13
14
|
const baseUrl = resolveXiaomiTokenplanBaseUrl(credentials);
|
|
14
|
-
if (
|
|
15
|
-
return `${baseUrl.replace(/\/v1\/?$/, "/anthropic/v1
|
|
15
|
+
if (credentials?.runtimeTransport?.format === "claude") {
|
|
16
|
+
return `${baseUrl.replace(/\/v1\/?$/, "")}/anthropic/v1/messages`;
|
|
16
17
|
}
|
|
17
18
|
return `${baseUrl}/chat/completions`;
|
|
18
19
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { FORMATS } from "../../translator/formats.js";
|
|
2
2
|
import { needsTranslation } from "../../translator/index.js";
|
|
3
|
+
import { fromOpenAIFinish } from "../../translator/concerns/finishReason.js";
|
|
3
4
|
import { ollamaBodyToOpenAI } from "../../translator/response/ollama-to-openai.js";
|
|
4
5
|
import { addBufferToUsage, filterUsageForFormat } from "../../utils/usageTracking.js";
|
|
5
6
|
import { createErrorResult } from "../../utils/error.js";
|
|
@@ -9,11 +10,75 @@ import { buildRequestDetail, extractRequestConfig, extractUsageFromResponse, sav
|
|
|
9
10
|
import { appendRequestLog, saveRequestDetail } from "@/lib/usageDb.js";
|
|
10
11
|
import { decloakToolNames } from "../../utils/claudeCloaking.js";
|
|
11
12
|
|
|
13
|
+
function parseToolArguments(value) {
|
|
14
|
+
if (!value) return {};
|
|
15
|
+
if (typeof value === "object") return value;
|
|
16
|
+
try {
|
|
17
|
+
return JSON.parse(value);
|
|
18
|
+
} catch {
|
|
19
|
+
return {};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function unwrapOpenAIDataEnvelope(responseBody) {
|
|
24
|
+
const inner = responseBody?.data;
|
|
25
|
+
if (!inner || typeof inner !== "object" || !Array.isArray(inner.choices)) return responseBody;
|
|
26
|
+
return {
|
|
27
|
+
...inner,
|
|
28
|
+
object: inner.object || responseBody.object,
|
|
29
|
+
created: inner.created || responseBody.created,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function openAICompletionToClaudeMessage(responseBody) {
|
|
34
|
+
if (!responseBody?.choices?.[0]) return responseBody;
|
|
35
|
+
const choice = responseBody.choices[0];
|
|
36
|
+
const message = choice.message || {};
|
|
37
|
+
const content = [];
|
|
38
|
+
|
|
39
|
+
const reasoning = message.reasoning_content || message.provider_specific_fields?.reasoning_content || "";
|
|
40
|
+
if (reasoning) {
|
|
41
|
+
content.push({ type: "thinking", thinking: reasoning });
|
|
42
|
+
}
|
|
43
|
+
if (typeof message.content === "string" && message.content.length > 0) {
|
|
44
|
+
content.push({ type: "text", text: message.content });
|
|
45
|
+
}
|
|
46
|
+
for (const toolCall of message.tool_calls || []) {
|
|
47
|
+
const fn = toolCall.function || {};
|
|
48
|
+
content.push({
|
|
49
|
+
type: "tool_use",
|
|
50
|
+
id: toolCall.id || `toolu_${Date.now()}_${content.length}`,
|
|
51
|
+
name: fn.name || toolCall.name || "",
|
|
52
|
+
input: parseToolArguments(fn.arguments || toolCall.arguments),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
if (content.length === 0) content.push({ type: "text", text: "" });
|
|
56
|
+
|
|
57
|
+
const usage = responseBody.usage || {};
|
|
58
|
+
return {
|
|
59
|
+
id: String(responseBody.id || `msg_${Date.now()}`).replace(/^chatcmpl-/, ""),
|
|
60
|
+
type: "message",
|
|
61
|
+
role: "assistant",
|
|
62
|
+
model: responseBody.model || "unknown",
|
|
63
|
+
content,
|
|
64
|
+
stop_reason: fromOpenAIFinish(choice.finish_reason, FORMATS.CLAUDE),
|
|
65
|
+
stop_sequence: null,
|
|
66
|
+
usage: {
|
|
67
|
+
input_tokens: usage.prompt_tokens || usage.input_tokens || 0,
|
|
68
|
+
output_tokens: usage.completion_tokens || usage.output_tokens || 0,
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
12
73
|
/**
|
|
13
74
|
* Translate non-streaming response body from provider format → OpenAI format.
|
|
14
75
|
*/
|
|
15
76
|
export function translateNonStreamingResponse(responseBody, targetFormat, sourceFormat) {
|
|
16
|
-
if (targetFormat === sourceFormat
|
|
77
|
+
if (targetFormat === sourceFormat) return responseBody;
|
|
78
|
+
if (targetFormat === FORMATS.OPENAI && sourceFormat === FORMATS.CLAUDE) {
|
|
79
|
+
return openAICompletionToClaudeMessage(responseBody);
|
|
80
|
+
}
|
|
81
|
+
if (targetFormat === FORMATS.OPENAI) return responseBody;
|
|
17
82
|
|
|
18
83
|
// Gemini / Antigravity
|
|
19
84
|
if (targetFormat === FORMATS.GEMINI || targetFormat === FORMATS.ANTIGRAVITY || targetFormat === FORMATS.GEMINI_CLI || targetFormat === FORMATS.VERTEX) {
|
|
@@ -37,6 +102,12 @@ export function translateNonStreamingResponse(responseBody, targetFormat, source
|
|
|
37
102
|
function: { name: part.functionCall.name, arguments: JSON.stringify(part.functionCall.args || {}) }
|
|
38
103
|
});
|
|
39
104
|
}
|
|
105
|
+
// Handle inline image data (from image generation models)
|
|
106
|
+
const inlineData = part.inlineData || part.inline_data;
|
|
107
|
+
if (inlineData?.data) {
|
|
108
|
+
const mimeType = inlineData.mimeType || inlineData.mime_type || "image/png";
|
|
109
|
+
textContent += `\n\n`;
|
|
110
|
+
}
|
|
40
111
|
}
|
|
41
112
|
}
|
|
42
113
|
|
|
@@ -76,7 +147,12 @@ export function translateNonStreamingResponse(responseBody, targetFormat, source
|
|
|
76
147
|
// missing/null (e.g. M3 with max_tokens:1 spends the budget on thinking
|
|
77
148
|
// and returns `content: null`). Returning the raw body would leave the
|
|
78
149
|
// OpenAI client without a `choices` array and surface as a UI test error.
|
|
79
|
-
if
|
|
150
|
+
// Early return if the response is already in OpenAI format (has choices array)
|
|
151
|
+
// or if it has content as a non-array value (likely a different non-Claude format).
|
|
152
|
+
// Some providers (e.g. xiaomi-tokenplan) return OpenAI-format responses even when
|
|
153
|
+
// the request was translated to Claude format — the targetFormat is Claude but the
|
|
154
|
+
// actual response is OpenAI-native and needs no further translation.
|
|
155
|
+
if (responseBody.choices || (responseBody.content && !Array.isArray(responseBody.content))) return responseBody;
|
|
80
156
|
|
|
81
157
|
let textContent = "", thinkingContent = "";
|
|
82
158
|
const toolCalls = [];
|
|
@@ -156,10 +232,17 @@ export async function handleNonStreamingResponse({ providerResponse, provider, m
|
|
|
156
232
|
}
|
|
157
233
|
|
|
158
234
|
reqLogger.logProviderResponse(providerResponse.status, providerResponse.statusText, providerResponse.headers, responseBody);
|
|
159
|
-
if (onRequestSuccess)
|
|
235
|
+
if (onRequestSuccess) {
|
|
236
|
+
Promise.resolve()
|
|
237
|
+
.then(onRequestSuccess)
|
|
238
|
+
.catch(err => {
|
|
239
|
+
console.error("[ChatCore] onRequestSuccess failed:", err?.message || err);
|
|
240
|
+
});
|
|
241
|
+
}
|
|
160
242
|
|
|
161
243
|
// Decloak tool_use names once on raw Claude body, before any translation (INPUT side)
|
|
162
244
|
responseBody = decloakToolNames(responseBody, toolNameMap);
|
|
245
|
+
responseBody = unwrapOpenAIDataEnvelope(responseBody);
|
|
163
246
|
|
|
164
247
|
const usage = extractUsageFromResponse(responseBody);
|
|
165
248
|
appendLog({ tokens: usage, status: "200 OK" });
|
|
@@ -168,6 +251,7 @@ export async function handleNonStreamingResponse({ providerResponse, provider, m
|
|
|
168
251
|
const translatedResponse = needsTranslation(targetFormat, sourceFormat)
|
|
169
252
|
? translateNonStreamingResponse(responseBody, targetFormat, sourceFormat)
|
|
170
253
|
: responseBody;
|
|
254
|
+
const isClaudeMessageResponse = sourceFormat === FORMATS.CLAUDE && translatedResponse?.type === "message";
|
|
171
255
|
|
|
172
256
|
// Fix finish_reason for tool_calls: some providers return non-standard values (e.g. "other")
|
|
173
257
|
if (translatedResponse?.choices?.[0]) {
|
|
@@ -180,24 +264,31 @@ export async function handleNonStreamingResponse({ providerResponse, provider, m
|
|
|
180
264
|
}
|
|
181
265
|
|
|
182
266
|
// Ensure OpenAI-required fields
|
|
183
|
-
if (!
|
|
184
|
-
|
|
267
|
+
if (!isClaudeMessageResponse) {
|
|
268
|
+
if (!translatedResponse.object) translatedResponse.object = "chat.completion";
|
|
269
|
+
if (!translatedResponse.created) translatedResponse.created = Math.floor(Date.now() / 1000);
|
|
270
|
+
}
|
|
185
271
|
|
|
186
272
|
// Strip Azure-specific fields
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
273
|
+
if (!isClaudeMessageResponse) {
|
|
274
|
+
delete translatedResponse.prompt_filter_results;
|
|
275
|
+
if (translatedResponse?.choices) {
|
|
276
|
+
for (const choice of translatedResponse.choices) delete choice.content_filter_results;
|
|
277
|
+
}
|
|
190
278
|
}
|
|
191
279
|
|
|
192
280
|
if (translatedResponse?.usage) {
|
|
193
281
|
translatedResponse.usage = filterUsageForFormat(addBufferToUsage(translatedResponse.usage), sourceFormat);
|
|
194
282
|
}
|
|
195
283
|
|
|
196
|
-
// Strip reasoning_content
|
|
197
|
-
//
|
|
198
|
-
|
|
284
|
+
// Strip reasoning_content only when content is non-empty.
|
|
285
|
+
// When content is empty (e.g. thinking models that used all tokens for reasoning),
|
|
286
|
+
// reasoning_content is the only useful output and must be preserved.
|
|
287
|
+
if (!isClaudeMessageResponse && translatedResponse?.choices) {
|
|
199
288
|
for (const choice of translatedResponse.choices) {
|
|
200
|
-
if (choice?.message
|
|
289
|
+
if (choice?.message?.reasoning_content && choice.message.content) {
|
|
290
|
+
delete choice.message.reasoning_content;
|
|
291
|
+
}
|
|
201
292
|
}
|
|
202
293
|
}
|
|
203
294
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { saveRequestUsage, appendRequestLog, saveRequestDetail } from "@/lib/usageDb.js";
|
|
2
2
|
import { COLORS } from "../../utils/stream.js";
|
|
3
|
+
import { canonicalizeUsage } from "../../utils/usageTracking.js";
|
|
3
4
|
|
|
4
5
|
const OPTIONAL_PARAMS = [
|
|
5
6
|
"temperature", "top_p", "top_k",
|
|
@@ -48,8 +49,8 @@ export function extractUsageFromResponse(responseBody) {
|
|
|
48
49
|
return {
|
|
49
50
|
prompt_tokens: responseBody.usageMetadata.promptTokenCount || 0,
|
|
50
51
|
completion_tokens: responseBody.usageMetadata.candidatesTokenCount || 0,
|
|
51
|
-
cached_tokens: responseBody.usageMetadata.cachedContentTokenCount,
|
|
52
|
-
reasoning_tokens: responseBody.usageMetadata.thoughtsTokenCount
|
|
52
|
+
cached_tokens: responseBody.usageMetadata.cachedContentTokenCount || 0,
|
|
53
|
+
reasoning_tokens: responseBody.usageMetadata.thoughtsTokenCount || 0
|
|
53
54
|
};
|
|
54
55
|
}
|
|
55
56
|
|
|
@@ -86,16 +87,11 @@ export function saveUsageStats({ provider, model, tokens, connectionId, apiKey,
|
|
|
86
87
|
const accountSuffix = connectionId ? ` | account=${connectionId.slice(0, 8)}...` : "";
|
|
87
88
|
console.log(`${COLORS.green}[${time}] 📊 [${label}] ${provider.toUpperCase()} | in=${inTokens} | out=${outTokens}${accountSuffix}${COLORS.reset}`);
|
|
88
89
|
|
|
89
|
-
//
|
|
90
|
-
|
|
91
|
-
const
|
|
92
|
-
const reasoning = tokens.reasoning_tokens || tokens.completion_tokens_details?.reasoning_tokens || 0;
|
|
93
|
-
const normalized = {
|
|
90
|
+
// Canonicalize to one storage convention (prompt_tokens cache-inclusive) so
|
|
91
|
+
// cached/cache-creation tokens survive to cost calc + stats. See canonicalizeUsage.
|
|
92
|
+
const normalized = canonicalizeUsage(tokens) || {
|
|
94
93
|
prompt_tokens: tokens.prompt_tokens ?? tokens.input_tokens ?? 0,
|
|
95
94
|
completion_tokens: tokens.completion_tokens ?? tokens.output_tokens ?? 0,
|
|
96
|
-
...(cacheRead > 0 && { cache_read_input_tokens: cacheRead }),
|
|
97
|
-
...(cacheCreation > 0 && { cache_creation_input_tokens: cacheCreation }),
|
|
98
|
-
...(reasoning > 0 && { reasoning_tokens: reasoning }),
|
|
99
95
|
};
|
|
100
96
|
|
|
101
97
|
saveRequestUsage({
|
|
@@ -2,7 +2,11 @@ import { convertResponsesStreamToJson } from "../../transformer/streamToJsonConv
|
|
|
2
2
|
import { createErrorResult } from "../../utils/error.js";
|
|
3
3
|
import { HTTP_STATUS } from "../../config/runtimeConfig.js";
|
|
4
4
|
import { FORMATS } from "../../translator/formats.js";
|
|
5
|
+
import { PROVIDERS } from "../../config/providers.js";
|
|
5
6
|
import { buildRequestDetail, extractRequestConfig, saveUsageStats } from "./requestDetail.js";
|
|
7
|
+
|
|
8
|
+
// Responses-API providers (e.g. codex) may emit SSE without content-type + use Responses output shape
|
|
9
|
+
const isResponsesProvider = (p) => PROVIDERS[p]?.format === FORMATS.OPENAI_RESPONSES;
|
|
6
10
|
import { saveRequestDetail, appendRequestLog } from "@/lib/usageDb.js";
|
|
7
11
|
|
|
8
12
|
function textFromResponsesMessageItem(item) {
|
|
@@ -100,7 +104,7 @@ export function parseSSEToOpenAIResponse(rawSSE, fallbackModel) {
|
|
|
100
104
|
*/
|
|
101
105
|
export async function handleForcedSSEToJson({ providerResponse, sourceFormat, provider, model, body, stream, translatedBody, finalBody, requestStartTime, connectionId, apiKey, clientRawRequest, onRequestSuccess, trackDone, appendLog }) {
|
|
102
106
|
const contentType = providerResponse.headers.get("content-type") || "";
|
|
103
|
-
const isSSE = contentType.includes("text/event-stream") || (contentType === "" && provider
|
|
107
|
+
const isSSE = contentType.includes("text/event-stream") || (contentType === "" && isResponsesProvider(provider));
|
|
104
108
|
if (!isSSE) return null; // not handled here
|
|
105
109
|
|
|
106
110
|
trackDone();
|
|
@@ -112,7 +116,7 @@ export async function handleForcedSSEToJson({ providerResponse, sourceFormat, pr
|
|
|
112
116
|
};
|
|
113
117
|
|
|
114
118
|
// Codex/Responses API SSE path
|
|
115
|
-
const isCodexResponsesApi = provider
|
|
119
|
+
const isCodexResponsesApi = isResponsesProvider(provider) || sourceFormat === FORMATS.OPENAI_RESPONSES;
|
|
116
120
|
if (isCodexResponsesApi) {
|
|
117
121
|
try {
|
|
118
122
|
const jsonResponse = await convertResponsesStreamToJson(providerResponse.body);
|
|
@@ -2,15 +2,21 @@ import { FORMATS } from "../../translator/formats.js";
|
|
|
2
2
|
import { needsTranslation } from "../../translator/index.js";
|
|
3
3
|
import { createSSETransformStreamWithLogger, createPassthroughStreamWithLogger } from "../../utils/stream.js";
|
|
4
4
|
import { pipeWithDisconnect } from "../../utils/streamHandler.js";
|
|
5
|
+
import { PROVIDERS } from "../../config/providers.js";
|
|
6
|
+
import { STREAM_STALL_TIMEOUT_MS } from "../../config/runtimeConfig.js";
|
|
5
7
|
import { buildAbortedResponsesTerminalBytes } from "../../utils/responsesStreamHelpers.js";
|
|
6
8
|
import { buildRequestDetail, extractRequestConfig, saveUsageStats } from "./requestDetail.js";
|
|
7
9
|
import { saveRequestDetail } from "@/lib/usageDb.js";
|
|
10
|
+
import { SSE_HEADERS_CORS as SSE_HEADERS } from "../../utils/sseConstants.js";
|
|
8
11
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
// Codex returns Responses API SSE → which client format to translate INTO, by request sourceFormat.
|
|
13
|
+
// Gemini-family all map to ANTIGRAVITY decoder; unknown sources fall back to OPENAI.
|
|
14
|
+
const CODEX_SOURCE_TO_TARGET = {
|
|
15
|
+
[FORMATS.OPENAI_RESPONSES]: FORMATS.OPENAI_RESPONSES,
|
|
16
|
+
[FORMATS.CLAUDE]: FORMATS.CLAUDE,
|
|
17
|
+
[FORMATS.ANTIGRAVITY]: FORMATS.ANTIGRAVITY,
|
|
18
|
+
[FORMATS.GEMINI]: FORMATS.ANTIGRAVITY,
|
|
19
|
+
[FORMATS.GEMINI_CLI]: FORMATS.ANTIGRAVITY,
|
|
14
20
|
};
|
|
15
21
|
|
|
16
22
|
/**
|
|
@@ -18,15 +24,12 @@ const SSE_HEADERS = {
|
|
|
18
24
|
*/
|
|
19
25
|
function buildTransformStream({ provider, sourceFormat, targetFormat, userAgent, reqLogger, toolNameMap, model, connectionId, body, onStreamComplete, apiKey }) {
|
|
20
26
|
const isDroidCLI = userAgent?.toLowerCase().includes("droid") || userAgent?.toLowerCase().includes("codex-cli");
|
|
21
|
-
|
|
27
|
+
// Responses-API providers (e.g. codex) emit Responses SSE → translate into client format
|
|
28
|
+
const isResponsesProvider = PROVIDERS[provider]?.format === FORMATS.OPENAI_RESPONSES;
|
|
29
|
+
const needsCodexTranslation = isResponsesProvider && targetFormat === FORMATS.OPENAI_RESPONSES && !isDroidCLI;
|
|
22
30
|
|
|
23
31
|
if (needsCodexTranslation) {
|
|
24
|
-
|
|
25
|
-
let codexTarget;
|
|
26
|
-
if (sourceFormat === FORMATS.OPENAI_RESPONSES) codexTarget = FORMATS.OPENAI_RESPONSES;
|
|
27
|
-
else if (sourceFormat === FORMATS.CLAUDE) codexTarget = FORMATS.CLAUDE;
|
|
28
|
-
else if (sourceFormat === FORMATS.ANTIGRAVITY || sourceFormat === FORMATS.GEMINI || sourceFormat === FORMATS.GEMINI_CLI) codexTarget = FORMATS.ANTIGRAVITY;
|
|
29
|
-
else codexTarget = FORMATS.OPENAI;
|
|
32
|
+
const codexTarget = CODEX_SOURCE_TO_TARGET[sourceFormat] || FORMATS.OPENAI;
|
|
30
33
|
return createSSETransformStreamWithLogger(FORMATS.OPENAI_RESPONSES, codexTarget, provider, reqLogger, toolNameMap, model, connectionId, body, onStreamComplete, apiKey);
|
|
31
34
|
}
|
|
32
35
|
|
|
@@ -40,15 +43,48 @@ function buildTransformStream({ provider, sourceFormat, targetFormat, userAgent,
|
|
|
40
43
|
/**
|
|
41
44
|
* Handle streaming response — pipe provider SSE through transform stream to client.
|
|
42
45
|
*/
|
|
43
|
-
export function handleStreamingResponse({ providerResponse, provider, model, sourceFormat, targetFormat, userAgent, body, stream, translatedBody, finalBody, requestStartTime, connectionId, apiKey, clientRawRequest, onRequestSuccess, reqLogger, toolNameMap, streamController, onStreamComplete, streamDetailId, streamWatchdogEnabled = true }) {
|
|
44
|
-
if (onRequestSuccess)
|
|
46
|
+
export async function handleStreamingResponse({ providerResponse, provider, model, sourceFormat, targetFormat, userAgent, body, stream, translatedBody, finalBody, requestStartTime, connectionId, apiKey, clientRawRequest, onRequestSuccess, reqLogger, toolNameMap, streamController, onStreamComplete, streamDetailId, streamWatchdogEnabled = true }) {
|
|
47
|
+
if (onRequestSuccess) {
|
|
48
|
+
Promise.resolve()
|
|
49
|
+
.then(onRequestSuccess)
|
|
50
|
+
.catch(err => {
|
|
51
|
+
console.error("[ChatCore] onRequestSuccess failed:", err?.message || err);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// When upstream returns HTML/text instead of SSE (e.g. Cloudflare 5xx error
|
|
56
|
+
// page), piping it through the SSE transform stream causes Next.js
|
|
57
|
+
// "failed to pipe response" and crashes the chat router. Read the body,
|
|
58
|
+
// pull a short human-readable message from the <title>, sanitize it, and
|
|
59
|
+
// return a clean JSON error instead. The message is stripped of HTML tags
|
|
60
|
+
// and clamped so untrusted upstream text never reaches the client verbatim
|
|
61
|
+
// (the UI may render error.message as HTML).
|
|
62
|
+
const upstreamContentType = (providerResponse.headers.get('content-type') || '').toLowerCase();
|
|
63
|
+
if (upstreamContentType && !upstreamContentType.includes('text/event-stream') && !upstreamContentType.includes('application/json')) {
|
|
64
|
+
const bodyText = await providerResponse.text().catch(() => '');
|
|
65
|
+
const titleMatch = bodyText.match(/<title>([^<]+)<\/title>/i);
|
|
66
|
+
const sanitizedTitle = (titleMatch?.[1] || '').replace(/<[^>]*>/g, '').replace(/[\r\n]+/g, ' ').trim().slice(0, 160);
|
|
67
|
+
const shortMsg = sanitizedTitle
|
|
68
|
+
|| (bodyText.length < 200 ? bodyText.replace(/<[^>]*>/g, '').trim().slice(0, 160) : `Upstream returned non-SSE response (${upstreamContentType})`);
|
|
69
|
+
const status = providerResponse.status || 502;
|
|
70
|
+
console.warn(`[STREAM] ${provider} | ${model} | blocked pipe: ${shortMsg} [${status}]`);
|
|
71
|
+
streamController?.handleError?.(new Error(`upstream non-SSE: ${status}`));
|
|
72
|
+
return {
|
|
73
|
+
success: false,
|
|
74
|
+
response: new Response(JSON.stringify({ error: { message: `[${status}]: ${shortMsg}` } }), {
|
|
75
|
+
status,
|
|
76
|
+
headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' },
|
|
77
|
+
}),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
45
80
|
|
|
46
81
|
const transformStream = buildTransformStream({ provider, sourceFormat, targetFormat, userAgent, reqLogger, toolNameMap, model, connectionId, body, onStreamComplete, apiKey });
|
|
47
82
|
|
|
48
83
|
// Responses passthrough: synthesize response.failed + [DONE] if the stream aborts/stalls before a terminal event
|
|
49
84
|
const isResponsesPassthrough = sourceFormat === FORMATS.OPENAI_RESPONSES && targetFormat === FORMATS.OPENAI_RESPONSES;
|
|
50
85
|
const onAbortTerminal = isResponsesPassthrough ? buildAbortedResponsesTerminalBytes : null;
|
|
51
|
-
const
|
|
86
|
+
const stallTimeoutMs = PROVIDERS[provider]?.stallTimeoutMs || STREAM_STALL_TIMEOUT_MS;
|
|
87
|
+
const transformedBody = pipeWithDisconnect(providerResponse, transformStream, streamController, streamWatchdogEnabled, onAbortTerminal, stallTimeoutMs);
|
|
52
88
|
|
|
53
89
|
saveRequestDetail(buildRequestDetail({
|
|
54
90
|
provider, model, connectionId, apiKey,
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { detectFormat, getTargetFormat } from "../services/provider.js";
|
|
1
|
+
import { detectFormat, getTargetFormat, resolveTransport } from "../services/provider.js";
|
|
2
2
|
import { translateRequest } from "../translator/index.js";
|
|
3
3
|
import { FORMATS } from "../translator/formats.js";
|
|
4
|
+
import { normalizeClaudePassthrough } from "../translator/formats/claude.js";
|
|
4
5
|
import { COLORS } from "../utils/stream.js";
|
|
5
6
|
import { createStreamController } from "../utils/streamHandler.js";
|
|
6
7
|
import { refreshWithRetry } from "../services/tokenRefresh.js";
|
|
7
8
|
import { createRequestLogger } from "../utils/requestLogger.js";
|
|
8
9
|
import { getModelTargetFormat, getModelStrip, getModelUpstreamId, getModelType, PROVIDER_ID_TO_ALIAS } from "../config/providerModels.js";
|
|
10
|
+
import { PROVIDERS } from "../config/providers.js";
|
|
9
11
|
import { createErrorResult, parseUpstreamError, formatProviderError } from "../utils/error.js";
|
|
10
12
|
import { HTTP_STATUS } from "../config/runtimeConfig.js";
|
|
11
13
|
import { handleBypassRequest } from "../utils/bypassHandler.js";
|
|
@@ -18,7 +20,12 @@ import { handleStreamingResponse, buildOnStreamComplete } from "./chatCore/strea
|
|
|
18
20
|
import { detectClientTool, isNativePassthrough } from "../utils/clientDetector.js";
|
|
19
21
|
import { dedupeTools } from "../utils/toolDeduper.js";
|
|
20
22
|
import { injectCaveman } from "../rtk/caveman.js";
|
|
23
|
+
import { injectPonytail } from "../rtk/ponytail.js";
|
|
21
24
|
import { compressMessages, formatRtkLog } from "../rtk/index.js";
|
|
25
|
+
import { compressWithHeadroom, formatHeadroomLog, formatHeadroomSizeLog, isHeadroomPhantomSavings } from "../rtk/headroom.js";
|
|
26
|
+
import { getCapabilitiesForModel } from "../providers/capabilities.js";
|
|
27
|
+
import { stripUnsupportedModalities } from "../translator/concerns/modality.js";
|
|
28
|
+
import { prefetchRemoteImages } from "../translator/concerns/prefetch.js";
|
|
22
29
|
|
|
23
30
|
/**
|
|
24
31
|
* Core chat handler - shared between SSE and Worker
|
|
@@ -27,7 +34,7 @@ import { compressMessages, formatRtkLog } from "../rtk/index.js";
|
|
|
27
34
|
* @param {object} options.credentials - Provider credentials
|
|
28
35
|
* @param {string} options.sourceFormatOverride - Override detected source format (e.g. "openai-responses")
|
|
29
36
|
*/
|
|
30
|
-
export async function handleChatCore({ body, modelInfo, credentials, log, onCredentialsRefreshed, onRequestSuccess, onDisconnect, clientRawRequest, connectionId, userAgent, apiKey, ccFilterNaming, rtkEnabled, cavemanEnabled, cavemanLevel, sourceFormatOverride, providerThinking, streamWatchdogEnabled = true }) {
|
|
37
|
+
export async function handleChatCore({ body, modelInfo, credentials, log, onCredentialsRefreshed, onRequestSuccess, onDisconnect, clientRawRequest, connectionId, userAgent, apiKey, ccFilterNaming, rtkEnabled, headroomEnabled, headroomUrl, headroomCompressUserMessages, cavemanEnabled, cavemanLevel, ponytailEnabled, ponytailLevel, sourceFormatOverride, providerThinking, streamWatchdogEnabled = true }) {
|
|
31
38
|
const { provider, model } = modelInfo;
|
|
32
39
|
const requestStartTime = Date.now();
|
|
33
40
|
|
|
@@ -39,7 +46,10 @@ export async function handleChatCore({ body, modelInfo, credentials, log, onCred
|
|
|
39
46
|
|
|
40
47
|
const alias = PROVIDER_ID_TO_ALIAS[provider] || provider;
|
|
41
48
|
const modelTargetFormat = getModelTargetFormat(alias, model);
|
|
42
|
-
|
|
49
|
+
// Multi-endpoint providers: pick transport matching sourceFormat → zero translation
|
|
50
|
+
const runtimeTransport = resolveTransport(provider, sourceFormat);
|
|
51
|
+
const targetFormat = modelTargetFormat || runtimeTransport?.format || getTargetFormat(provider);
|
|
52
|
+
if (runtimeTransport && credentials) credentials.runtimeTransport = runtimeTransport;
|
|
43
53
|
const stripList = getModelStrip(alias, model);
|
|
44
54
|
const upstreamModel = getModelUpstreamId(alias, model);
|
|
45
55
|
|
|
@@ -58,9 +68,16 @@ export async function handleChatCore({ body, modelInfo, credentials, log, onCred
|
|
|
58
68
|
}
|
|
59
69
|
|
|
60
70
|
const clientRequestedStreaming = body.stream === true || sourceFormat === FORMATS.ANTIGRAVITY || sourceFormat === FORMATS.GEMINI || sourceFormat === FORMATS.GEMINI_CLI;
|
|
61
|
-
const providerRequiresStreaming = provider ===
|
|
71
|
+
const providerRequiresStreaming = PROVIDERS[provider]?.forceStream === true;
|
|
62
72
|
let stream = providerRequiresStreaming ? true : (body.stream !== false);
|
|
63
73
|
|
|
74
|
+
// Image generation models require non-streaming (Google v1internal:generateContent)
|
|
75
|
+
const modelType = getModelType(alias, model);
|
|
76
|
+
const isImageGenModel = modelType === "imageGen" || /image|imagen|image-generation/i.test(model);
|
|
77
|
+
if (isImageGenModel && (provider === "antigravity" || provider === "gemini-cli")) {
|
|
78
|
+
stream = false;
|
|
79
|
+
}
|
|
80
|
+
|
|
64
81
|
// DeepSeek-TUI: interactive TUI panel sends stream:true and needs SSE.
|
|
65
82
|
// Non-interactive mode (-p flag) sends without stream and can't parse SSE.
|
|
66
83
|
// Only force non-streaming when client didn't explicitly request it.
|
|
@@ -72,7 +89,7 @@ export async function handleChatCore({ body, modelInfo, credentials, log, onCred
|
|
|
72
89
|
const acceptHeader = clientRawRequest?.headers?.accept || "";
|
|
73
90
|
const clientPrefersJson = acceptHeader.includes("application/json");
|
|
74
91
|
const clientPrefersSSE = acceptHeader.includes("text/event-stream");
|
|
75
|
-
if (clientPrefersJson && !clientPrefersSSE && body.stream !== true) {
|
|
92
|
+
if (clientPrefersJson && !clientPrefersSSE && body.stream !== true && !providerRequiresStreaming) {
|
|
76
93
|
stream = false;
|
|
77
94
|
}
|
|
78
95
|
|
|
@@ -86,11 +103,29 @@ export async function handleChatCore({ body, modelInfo, credentials, log, onCred
|
|
|
86
103
|
const clientTool = detectClientTool(clientRawRequest?.headers || {}, body);
|
|
87
104
|
const passthrough = isNativePassthrough(clientTool, provider);
|
|
88
105
|
|
|
106
|
+
// Expose raw client headers to translators/executors for session-id resolution
|
|
107
|
+
if (credentials) credentials.rawHeaders = clientRawRequest?.headers || {};
|
|
108
|
+
|
|
109
|
+
// Auto-strip media blocks the model can't read (vision/audio/pdf) before translation.
|
|
110
|
+
if (!passthrough) {
|
|
111
|
+
const caps = getCapabilitiesForModel(provider, model);
|
|
112
|
+
if (stripUnsupportedModalities(body, sourceFormat, caps)) {
|
|
113
|
+
log?.debug?.("MODALITY", `stripped unsupported media for ${provider}/${model}`);
|
|
114
|
+
}
|
|
115
|
+
// Convert remote image URLs to base64 for targets that can't fetch URLs.
|
|
116
|
+
try {
|
|
117
|
+
const n = await prefetchRemoteImages(body, sourceFormat, targetFormat, { signal: undefined });
|
|
118
|
+
if (n > 0) log?.debug?.("MODALITY", `prefetched ${n} remote image(s) for ${targetFormat}`);
|
|
119
|
+
} catch (e) { log?.warn?.("MODALITY", `image prefetch failed: ${e.message}`); }
|
|
120
|
+
}
|
|
121
|
+
|
|
89
122
|
let translatedBody;
|
|
90
123
|
let toolNameMap;
|
|
91
124
|
if (passthrough) {
|
|
92
125
|
log?.debug?.("PASSTHROUGH", `${clientTool} → ${provider} | native lossless`);
|
|
93
126
|
translatedBody = { ...body, model: upstreamModel };
|
|
127
|
+
// Normalize newer Cowork/CC beta shapes (adaptive thinking, mid-conversation system) the API rejects
|
|
128
|
+
if (clientTool === "claude") normalizeClaudePassthrough(translatedBody, upstreamModel);
|
|
94
129
|
} else {
|
|
95
130
|
translatedBody = translateRequest(sourceFormat, targetFormat, upstreamModel, body, stream, credentials, provider, reqLogger, stripList, connectionId, clientTool);
|
|
96
131
|
if (!translatedBody) {
|
|
@@ -126,12 +161,30 @@ export async function handleChatCore({ body, modelInfo, credentials, log, onCred
|
|
|
126
161
|
const rtkLine = formatRtkLog(rtkStats);
|
|
127
162
|
if (rtkLine) console.log(rtkLine);
|
|
128
163
|
|
|
164
|
+
// Headroom: optional external proxy compression; fail open if proxy is absent.
|
|
165
|
+
const headroomDiagnostics = {};
|
|
166
|
+
const headroomStats = await compressWithHeadroom(translatedBody, { enabled: headroomEnabled, url: headroomUrl, model: upstreamModel, format: finalFormat, compressUserMessages: headroomCompressUserMessages, diagnostics: headroomDiagnostics });
|
|
167
|
+
const headroomLine = formatHeadroomLog(headroomStats);
|
|
168
|
+
const headroomSizeLine = formatHeadroomSizeLog(headroomDiagnostics);
|
|
169
|
+
if (headroomLine) {
|
|
170
|
+
log?.info?.("HEADROOM", `${headroomLine}${headroomSizeLine ? ` | ${headroomSizeLine}` : ""}`);
|
|
171
|
+
if (isHeadroomPhantomSavings(headroomStats, headroomDiagnostics)) {
|
|
172
|
+
log?.warn?.("HEADROOM", `reported token delta, but outbound JSON shrank <5%; provider may bill near-original payload | ${headroomSizeLine}`);
|
|
173
|
+
}
|
|
174
|
+
} else if (headroomEnabled) log?.warn?.("HEADROOM", `skipped: ${headroomDiagnostics.reason || "compression unavailable"}${headroomDiagnostics.endpoint ? ` (${headroomDiagnostics.endpoint})` : ""}`);
|
|
175
|
+
|
|
129
176
|
// Caveman: inject terse-style system prompt
|
|
130
177
|
if (cavemanEnabled && cavemanLevel) {
|
|
131
178
|
injectCaveman(translatedBody, finalFormat, cavemanLevel);
|
|
132
179
|
log?.debug?.("CAVEMAN", `${cavemanLevel} | ${finalFormat}`);
|
|
133
180
|
}
|
|
134
181
|
|
|
182
|
+
// Ponytail: inject lazy-senior-dev system prompt
|
|
183
|
+
if (ponytailEnabled && ponytailLevel) {
|
|
184
|
+
injectPonytail(translatedBody, finalFormat, ponytailLevel);
|
|
185
|
+
log?.debug?.("PONYTAIL", `${ponytailLevel} | ${finalFormat}`);
|
|
186
|
+
}
|
|
187
|
+
|
|
135
188
|
const executor = getExecutor(provider);
|
|
136
189
|
trackPendingRequest(model, provider, connectionId, true);
|
|
137
190
|
appendRequestLog({ model, provider, connectionId, status: "PENDING" }).catch(() => { });
|