n9router 0.4.43 → 0.4.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/app/.next/BUILD_ID +1 -1
- package/app/.next/app-path-routes-manifest.json +23 -13
- package/app/.next/build-manifest.json +3 -3
- package/app/.next/prerender-manifest.json +27 -3
- package/app/.next/required-server-files.json +13 -1
- package/app/.next/routes-manifest.json +77 -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 +6 -6
- package/app/.next/server/app/_not-found.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_index.segment.rsc +5 -5
- 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 +4 -4
- package/app/.next/server/app/api/antigravity-app/route.js +1 -1
- package/app/.next/server/app/api/antigravity-app/route.js.nft.json +1 -1
- package/app/.next/server/app/api/antigravity-app-v2/route.js +1 -1
- package/app/.next/server/app/api/antigravity-app-v2/route.js.nft.json +1 -1
- package/app/.next/server/app/api/antigravity-ide/route.js +1 -1
- package/app/.next/server/app/api/antigravity-ide/route.js.nft.json +1 -1
- package/app/.next/server/app/api/antigravity-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 +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/cline-settings/route.js +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 -0
- package/app/.next/server/app/api/settings/database/selective/route.js.nft.json +1 -0
- package/app/.next/server/app/api/settings/database/selective/route_client-reference-manifest.js +1 -0
- 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 +7 -7
- package/app/.next/server/app/callback.segments/_full.segment.rsc +7 -7
- package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/callback.segments/_index.segment.rsc +5 -5
- package/app/.next/server/app/callback.segments/_tree.segment.rsc +4 -4
- package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.html +1 -1
- package/app/.next/server/app/dashboard/basic-chat.rsc +8 -8
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +8 -8
- package/app/.next/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.segments/_index.segment.rsc +5 -5
- package/app/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next/server/app/dashboard/cli-tools.rsc +8 -8
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +8 -8
- package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +5 -5
- package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/combos.html +1 -1
- package/app/.next/server/app/dashboard/combos.rsc +8 -8
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +8 -8
- package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +5 -5
- package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/endpoint.html +1 -1
- package/app/.next/server/app/dashboard/endpoint.rsc +8 -8
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +8 -8
- package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +5 -5
- package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/media-providers/web.html +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.rsc +8 -8
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +8 -8
- package/app/.next/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +5 -5
- package/app/.next/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/mitm.html +1 -1
- package/app/.next/server/app/dashboard/mitm.rsc +8 -8
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/mitm.segments/_full.segment.rsc +8 -8
- package/app/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +5 -5
- package/app/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/profile.html +1 -1
- package/app/.next/server/app/dashboard/profile.rsc +8 -8
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.segments/_full.segment.rsc +8 -8
- package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +5 -5
- package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/providers/new.html +1 -1
- package/app/.next/server/app/dashboard/providers/new.rsc +8 -8
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +8 -8
- package/app/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +5 -5
- package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/providers.html +1 -1
- package/app/.next/server/app/dashboard/providers.rsc +8 -8
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.segments/_full.segment.rsc +8 -8
- package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +5 -5
- package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.rsc +8 -8
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +8 -8
- package/app/.next/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +5 -5
- package/app/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/quota.html +2 -2
- package/app/.next/server/app/dashboard/quota.rsc +9 -9
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/quota.segments/_full.segment.rsc +9 -9
- package/app/.next/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/quota.segments/_index.segment.rsc +5 -5
- package/app/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/settings/pricing/page.js +2 -2
- package/app/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
- package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.rsc +7 -7
- package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +7 -7
- package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +5 -5
- package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +4 -4
- 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 +8 -8
- package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/skills.segments/_full.segment.rsc +8 -8
- package/app/.next/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/skills.segments/_index.segment.rsc +5 -5
- package/app/.next/server/app/dashboard/skills.segments/_tree.segment.rsc +4 -4
- 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 +8 -8
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +8 -8
- package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +5 -5
- package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/usage.html +1 -1
- package/app/.next/server/app/dashboard/usage.rsc +8 -8
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +8 -8
- package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +5 -5
- package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +4 -4
- package/app/.next/server/app/dashboard.html +1 -1
- package/app/.next/server/app/dashboard.rsc +8 -8
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard.segments/_full.segment.rsc +8 -8
- package/app/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard.segments/_index.segment.rsc +5 -5
- package/app/.next/server/app/dashboard.segments/_tree.segment.rsc +4 -4
- package/app/.next/server/app/favicon.ico/route.js +1 -1
- package/app/.next/server/app/favicon.ico/route.js.nft.json +1 -1
- package/app/.next/server/app/index.html +1 -1
- package/app/.next/server/app/index.rsc +6 -6
- package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/index.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/index.segments/_index.segment.rsc +5 -5
- package/app/.next/server/app/index.segments/_tree.segment.rsc +4 -4
- package/app/.next/server/app/landing/page.js +2 -2
- package/app/.next/server/app/landing/page.js.nft.json +1 -1
- package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing.html +1 -1
- package/app/.next/server/app/landing.rsc +6 -6
- package/app/.next/server/app/landing.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/landing.segments/_index.segment.rsc +5 -5
- package/app/.next/server/app/landing.segments/_tree.segment.rsc +4 -4
- package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
- package/app/.next/server/app/login/page.js +2 -2
- package/app/.next/server/app/login/page.js.nft.json +1 -1
- package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/login.html +1 -1
- package/app/.next/server/app/login.rsc +7 -7
- package/app/.next/server/app/login.segments/_full.segment.rsc +7 -7
- package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/login.segments/_index.segment.rsc +5 -5
- package/app/.next/server/app/login.segments/_tree.segment.rsc +4 -4
- package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/app/.next/server/app/manifest.webmanifest/route.js +2 -2
- package/app/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- package/app/.next/server/app/page.js +2 -2
- package/app/.next/server/app/page.js.nft.json +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app-paths-manifest.json +23 -13
- 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/365.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/6763.js +1 -0
- package/app/.next/server/chunks/6777.js +1 -0
- package/app/.next/server/chunks/7186.js +1 -0
- 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 +2 -2
- 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/8473.js +2 -2
- package/app/.next/server/chunks/8833.js +75 -0
- package/app/.next/server/chunks/8838.js +1 -0
- package/app/.next/server/chunks/8895.js +53 -5
- 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 +2 -2
- package/app/.next/server/next-font-manifest.js +1 -1
- package/app/.next/server/next-font-manifest.json +1 -1
- 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/T8rvyAbbOSQ8MIHxo1_4X/_buildManifest.js +1 -0
- package/app/.next/static/chunks/1321-691c34899090d436.js +1 -0
- package/app/.next/static/chunks/2589-89684df31938c4c7.js +3 -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-ddac36832067712f.js +1 -0
- 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/layout-c8d22221de81bd88.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/chunks/{webpack-c2bac8d80aa27536.js → webpack-3c02ff02ae0645c5.js} +1 -1
- package/app/.next/static/css/7eb3c00f858e3692.css +1 -0
- package/app/.next/static/css/aadc31e0cf060839.css +1 -0
- package/app/.next/static/media/6c596dfcddeca1e9-s.p.woff2 +0 -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 +20 -845
- 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 +24 -14
- package/app/open-sse/executors/codebuddy-cn.js +40 -0
- package/app/open-sse/executors/codex.js +34 -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 -133
- 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 +13 -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 +24 -16
- package/app/open-sse/executors/vertex.js +53 -7
- package/app/open-sse/executors/xiaomi-tokenplan.js +20 -0
- package/app/open-sse/handlers/chatCore/nonStreamingHandler.js +97 -13
- package/app/open-sse/handlers/chatCore/requestDetail.js +6 -10
- package/app/open-sse/handlers/chatCore/sseToJsonHandler.js +8 -3
- package/app/open-sse/handlers/chatCore/streamingHandler.js +56 -15
- package/app/open-sse/handlers/chatCore.js +69 -9
- 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 +4 -3
- 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 +8 -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 +10 -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/cavemanPrompts.js +46 -3
- 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 -143
- package/app/open-sse/services/oauthCredentialManager.js +156 -0
- 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 -723
- 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/transformer/streamToJsonConverter.js +1 -1
- 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 +83 -94
- 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 +290 -64
- 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 +69 -124
- 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 +36 -13
- package/app/open-sse/utils/claudeSignature.js +41 -0
- package/app/open-sse/utils/reasoningContentInjector.js +5 -6
- package/app/open-sse/utils/responsesStreamHelpers.js +50 -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 +106 -40
- package/app/open-sse/utils/streamHandler.js +33 -21
- package/app/open-sse/utils/usageTracking.js +93 -18
- package/app/package.json +5 -2
- package/app/public/i18n/literals/ar.json +2 -1
- package/app/public/i18n/literals/bn.json +2 -1
- package/app/public/i18n/literals/cs.json +2 -1
- package/app/public/i18n/literals/da.json +2 -1
- package/app/public/i18n/literals/de.json +2 -1
- package/app/public/i18n/literals/el.json +2 -1
- package/app/public/i18n/literals/es.json +2 -1
- package/app/public/i18n/literals/fi.json +2 -1
- package/app/public/i18n/literals/fr.json +2 -1
- package/app/public/i18n/literals/he.json +2 -1
- package/app/public/i18n/literals/hi.json +2 -1
- package/app/public/i18n/literals/hu.json +2 -1
- package/app/public/i18n/literals/id.json +2 -1
- package/app/public/i18n/literals/it.json +2 -1
- package/app/public/i18n/literals/ja.json +2 -1
- package/app/public/i18n/literals/ko.json +2 -1
- package/app/public/i18n/literals/nl.json +2 -1
- package/app/public/i18n/literals/no.json +2 -1
- package/app/public/i18n/literals/pl.json +2 -1
- package/app/public/i18n/literals/pt-BR.json +2 -1
- package/app/public/i18n/literals/pt-PT.json +2 -1
- package/app/public/i18n/literals/ro.json +2 -1
- package/app/public/i18n/literals/ru.json +2 -1
- package/app/public/i18n/literals/sv.json +2 -1
- package/app/public/i18n/literals/th.json +2 -1
- package/app/public/i18n/literals/tl.json +2 -1
- package/app/public/i18n/literals/tr.json +2 -1
- package/app/public/i18n/literals/uk.json +2 -1
- package/app/public/i18n/literals/ur.json +2 -1
- package/app/public/i18n/literals/vi.json +2 -1
- package/app/public/i18n/literals/zh-CN.json +6 -1
- package/app/public/i18n/literals/zh-TW.json +2 -1
- 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 +19 -3
- package/app/src/mitm/handlers/base.js +159 -1
- package/app/src/mitm/manager.js +29 -2
- package/app/src/mitm/tokenPool.js +206 -81
- package/app/src/shared/constants/cliTools.js +23 -12
- package/app/src/shared/constants/config.js +28 -18
- package/app/src/shared/constants/coworkPlugins.js +1 -4
- package/app/src/shared/constants/locales.js +36 -0
- 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/1569.js +0 -1
- package/app/.next/server/chunks/1699.js +0 -1
- package/app/.next/server/chunks/3104.js +0 -43
- package/app/.next/server/chunks/3110.js +0 -65
- 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/5221.js +0 -1
- package/app/.next/server/chunks/5681.js +0 -1
- package/app/.next/server/chunks/6108.js +0 -1
- package/app/.next/server/chunks/6251.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/8590.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/9609.js +0 -1
- package/app/.next/server/chunks/9807.js +0 -7
- package/app/.next/static/chunks/1321-03808de72db0a766.js +0 -1
- package/app/.next/static/chunks/2589-d4f1afc5e9f94887.js +0 -3
- package/app/.next/static/chunks/4406-abc51cf55210026c.js +0 -53
- package/app/.next/static/chunks/5497-6693628388854075.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/profile/page-ff34887f020e7a37.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-90eac92387b41cd4.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-1244fdc593309aa9.js +0 -1
- package/app/.next/static/chunks/app/_global-error/page-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-app/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-app-v2/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-ide/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-targets/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-tools/import/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-tools/import-refresh-tokens/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/auth/login/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/auth/logout/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/auth/oidc/callback/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/auth/oidc/start/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/auth/oidc/test/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/auth/status/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/all-statuses/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/jcode-settings/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/combos/[id]/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/combos/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/donate/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/health/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/init/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/internal/account-health/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/internal/request-detail/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/internal/usage/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/keys/[id]/reset-usage/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/keys/[id]/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/keys/[id]/usage/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/keys/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/locale/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/mcp/[plugin]/message/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/mcp/[plugin]/sse/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/models/alias/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/models/availability/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/models/custom/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/models/disabled/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/models/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/models/test/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/codex/import-token/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/pricing/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/providers/client/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/providers/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/providers/suggested-models/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/providers/test-batch/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/providers/validate/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/settings/database/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/settings/proxy-test/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/settings/require-login/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/settings/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/shutdown/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/tags/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/translator/console-logs/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/translator/load/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/translator/save/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/translator/send/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/translator/translate/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/disable/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/enable/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/status/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/usage/chart/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/usage/history/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/usage/logs/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/usage/providers/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/usage/report/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/usage/request-details/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/usage/request-logs/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/usage/stats/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/usage/stream/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/v1/api/chat/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/voices/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/v1/embeddings/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/v1/images/generations/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/[kind]/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/info/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/v1/responses/compact/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/v1/responses/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/v1/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/v1/search/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/v1/web/fetch/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/version/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/version/shutdown/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/api/version/update/route-9e73c1f718efb820.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/layout-35b23f7e08fe3978.js +0 -1
- package/app/.next/static/chunks/app/login/page-98aaabbf53ef75f6.js +0 -1
- package/app/.next/static/chunks/app/manifest.webmanifest/route-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/app/page-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-9e73c1f718efb820.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-9e73c1f718efb820.js +0 -1
- package/app/.next/static/css/0f03023a765dc337.css +0 -1
- package/app/.next/static/css/958bcd529c8d4b7c.css +0 -1
- package/app/.next/static/media/19cfc7226ec3afaa-s.woff2 +0 -0
- package/app/.next/static/media/21350d82a1f187e9-s.woff2 +0 -0
- package/app/.next/static/media/8e9860b6e62d6359-s.woff2 +0 -0
- package/app/.next/static/media/ba9851c3c22cd980-s.woff2 +0 -0
- package/app/.next/static/media/c5fe6dc8356a8c31-s.woff2 +0 -0
- package/app/.next/static/media/df0a9ae256c0569c-s.woff2 +0 -0
- package/app/.next/static/media/e4af272ccee01ff0-s.p.woff2 +0 -0
- package/app/.next/static/p_zZZ7bGM2zUCztNMVhuB/_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/{p_zZZ7bGM2zUCztNMVhuB → T8rvyAbbOSQ8MIHxo1_4X}/_ssgManifest.js +0 -0
|
@@ -4,6 +4,82 @@
|
|
|
4
4
|
|
|
5
5
|
import { checkFallbackError, formatRetryAfter } from "./accountFallback.js";
|
|
6
6
|
import { unavailableResponse } from "../utils/error.js";
|
|
7
|
+
import { getCapabilitiesForModel } from "../providers/capabilities.js";
|
|
8
|
+
import { extractTextContent } from "../translator/formats/gemini.js";
|
|
9
|
+
|
|
10
|
+
// Hard capabilities = input modalities; missing one drops request data (e.g. image
|
|
11
|
+
// stripped). Must be prioritized. Soft (e.g. search) only degrades a feature.
|
|
12
|
+
const HARD_CAPS = new Set(["vision", "pdf", "audioInput", "videoInput"]);
|
|
13
|
+
|
|
14
|
+
// Prefixes used when flattening tool turns into plain prose for panel models.
|
|
15
|
+
const TOOL_CALL_PREFIX = "[Called tools: ";
|
|
16
|
+
const TOOL_RESULT_PREFIX = "[Tool result: ";
|
|
17
|
+
|
|
18
|
+
// Flatten tool turns into prose so panel models keep the context but can't loop
|
|
19
|
+
// on tools: drop the request's tools, turn tool/function results into assistant
|
|
20
|
+
// text, and inline assistant tool_calls names instead of the structured field.
|
|
21
|
+
function flattenToolHistory(messages) {
|
|
22
|
+
return messages
|
|
23
|
+
.filter((msg) => msg)
|
|
24
|
+
.map((msg) => {
|
|
25
|
+
if (msg.role === "tool" || msg.role === "function") {
|
|
26
|
+
return { role: "assistant", content: `${TOOL_RESULT_PREFIX}${extractTextContent(msg.content) || String(msg.content ?? "")}]` };
|
|
27
|
+
}
|
|
28
|
+
if (msg.role === "assistant" && Array.isArray(msg.tool_calls)) {
|
|
29
|
+
const { tool_calls, ...rest } = msg;
|
|
30
|
+
const names = tool_calls.map((c) => c?.function?.name || c?.name || "tool").join(", ");
|
|
31
|
+
const base = extractTextContent(rest.content) || (typeof rest.content === "string" ? rest.content : "");
|
|
32
|
+
return { ...rest, content: `${base}${base ? "\n" : ""}${TOOL_CALL_PREFIX}${names}]` };
|
|
33
|
+
}
|
|
34
|
+
if (Array.isArray(msg.content)) {
|
|
35
|
+
const hasToolUse = msg.content.some((c) => c.type === "tool_use");
|
|
36
|
+
const hasToolResult = msg.content.some((c) => c.type === "tool_result");
|
|
37
|
+
if (hasToolUse || hasToolResult) {
|
|
38
|
+
const textParts = [];
|
|
39
|
+
const toolNames = [];
|
|
40
|
+
const toolResults = [];
|
|
41
|
+
for (const block of msg.content) {
|
|
42
|
+
if (block.type === "text" && block.text) textParts.push(block.text);
|
|
43
|
+
if (block.type === "tool_use") toolNames.push(block.name || "tool");
|
|
44
|
+
if (block.type === "tool_result") toolResults.push(extractTextContent(block.content) || String(block.content ?? ""));
|
|
45
|
+
}
|
|
46
|
+
const { ...rest } = msg;
|
|
47
|
+
let newContent = textParts.join("\n");
|
|
48
|
+
if (toolNames.length > 0) {
|
|
49
|
+
newContent = `${newContent}${newContent ? "\n" : ""}${TOOL_CALL_PREFIX}${toolNames.join(", ")}]`;
|
|
50
|
+
}
|
|
51
|
+
if (toolResults.length > 0) {
|
|
52
|
+
newContent = `${newContent}${newContent ? "\n" : ""}${TOOL_RESULT_PREFIX}${toolResults.join("\n")}]`;
|
|
53
|
+
}
|
|
54
|
+
return { ...rest, content: newContent };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return msg;
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Reorder combo models by capability fit. Stable; never drops a model (fallback intact).
|
|
62
|
+
// Tier 0: satisfies all hard + all soft. Tier 1: all hard only. Tier 2: rest.
|
|
63
|
+
export function reorderByCapabilities(models, required) {
|
|
64
|
+
if (!required || required.size === 0 || !Array.isArray(models) || models.length <= 1) return models;
|
|
65
|
+
const hard = [...required].filter((c) => HARD_CAPS.has(c));
|
|
66
|
+
const soft = [...required].filter((c) => !HARD_CAPS.has(c));
|
|
67
|
+
|
|
68
|
+
const tierOf = (m) => {
|
|
69
|
+
const slash = typeof m === "string" ? m.indexOf("/") : -1;
|
|
70
|
+
const provider = slash > 0 ? m.slice(0, slash) : "";
|
|
71
|
+
const model = slash > 0 ? m.slice(slash + 1) : m;
|
|
72
|
+
const caps = getCapabilitiesForModel(provider, model);
|
|
73
|
+
if (!hard.every((c) => caps[c] === true)) return 2;
|
|
74
|
+
return soft.every((c) => caps[c] === true) ? 0 : 1;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// Stable sort by tier (Array.prototype.sort is stable in modern engines).
|
|
78
|
+
return models
|
|
79
|
+
.map((m, i) => ({ m, i, t: tierOf(m) }))
|
|
80
|
+
.sort((a, b) => a.t - b.t || a.i - b.i)
|
|
81
|
+
.map((x) => x.m);
|
|
82
|
+
}
|
|
7
83
|
|
|
8
84
|
/**
|
|
9
85
|
* Track rotation state per combo (for round-robin strategy)
|
|
@@ -11,6 +87,51 @@ import { unavailableResponse } from "../utils/error.js";
|
|
|
11
87
|
*/
|
|
12
88
|
const comboRotationState = new Map();
|
|
13
89
|
|
|
90
|
+
// Trailing run of items after the last assistant/model turn = the current user
|
|
91
|
+
// turn. It may span several messages (e.g. text + image split across blocks),
|
|
92
|
+
// so we return all of them. History media (older turns) must not pin the combo
|
|
93
|
+
// to a vision model — those get stripped + placeholdered downstream instead.
|
|
94
|
+
function trailingUserItems(arr) {
|
|
95
|
+
if (!Array.isArray(arr) || arr.length === 0) return [];
|
|
96
|
+
const isAssistant = (r) => r === "assistant" || r === "model";
|
|
97
|
+
let i = arr.length - 1;
|
|
98
|
+
while (i >= 0 && !isAssistant(arr[i]?.role)) i--;
|
|
99
|
+
return arr.slice(i + 1);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Detect which capabilities a request needs. Modalities (vision/pdf) are scanned
|
|
103
|
+
// only on the current user turn; "search" is request-wide (lives in tools).
|
|
104
|
+
// Returns a Set of: "vision" | "pdf" | "search".
|
|
105
|
+
export function detectRequiredCapabilities(body) {
|
|
106
|
+
const required = new Set();
|
|
107
|
+
if (!body || typeof body !== "object") return required;
|
|
108
|
+
|
|
109
|
+
const scanBlock = (b) => {
|
|
110
|
+
if (!b || typeof b !== "object") return;
|
|
111
|
+
const t = b.type;
|
|
112
|
+
if (t === "image_url" || t === "image" || t === "input_image") required.add("vision");
|
|
113
|
+
if (t === "file" || t === "document" || t === "input_file") required.add("pdf");
|
|
114
|
+
// gemini parts: inlineData/fileData carry a mime
|
|
115
|
+
const mime = b.inlineData?.mimeType || b.fileData?.mimeType;
|
|
116
|
+
if (typeof mime === "string" && mime.startsWith("image/")) required.add("vision");
|
|
117
|
+
if (mime === "application/pdf") required.add("pdf");
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
const scanContent = (content) => {
|
|
121
|
+
if (Array.isArray(content)) for (const b of content) scanBlock(b);
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
// Modalities: current user turn only (trailing user run across each known shape).
|
|
125
|
+
for (const m of trailingUserItems(body.messages)) scanContent(m.content); // openai / claude
|
|
126
|
+
for (const it of trailingUserItems(body.input)) scanContent(it.content); // responses
|
|
127
|
+
const contents = body.contents || body.request?.contents; // gemini / antigravity
|
|
128
|
+
for (const c of trailingUserItems(contents)) scanContent(c.parts);
|
|
129
|
+
|
|
130
|
+
// search: temporarily disabled in auto-switch (feature not wired yet).
|
|
131
|
+
|
|
132
|
+
return required;
|
|
133
|
+
}
|
|
134
|
+
|
|
14
135
|
function normalizeStickyLimit(stickyLimit) {
|
|
15
136
|
const parsed = Number.parseInt(stickyLimit, 10);
|
|
16
137
|
return Number.isFinite(parsed) && parsed > 0 ? parsed : 1;
|
|
@@ -105,9 +226,21 @@ export function getComboModelsFromData(modelStr, combosData) {
|
|
|
105
226
|
* @param {number|string} [options.comboStickyLimit=1] - Requests per combo model before switching
|
|
106
227
|
* @returns {Promise<Response>}
|
|
107
228
|
*/
|
|
108
|
-
export async function handleComboChat({ body, models, handleSingleModel, log, comboName, comboStrategy, comboStickyLimit = 1 }) {
|
|
229
|
+
export async function handleComboChat({ body, models, handleSingleModel, log, comboName, comboStrategy, comboStickyLimit = 1, autoSwitch = true }) {
|
|
109
230
|
// Apply rotation strategy if enabled
|
|
110
|
-
|
|
231
|
+
let rotatedModels = getRotatedModels(models, comboName, comboStrategy, comboStickyLimit);
|
|
232
|
+
|
|
233
|
+
// Auto-switch: float models that satisfy the request's required capabilities to the front.
|
|
234
|
+
if (autoSwitch) {
|
|
235
|
+
const required = detectRequiredCapabilities(body);
|
|
236
|
+
if (required.size > 0) {
|
|
237
|
+
const reordered = reorderByCapabilities(rotatedModels, required);
|
|
238
|
+
if (reordered[0] !== rotatedModels[0]) {
|
|
239
|
+
log.info("COMBO", `auto-switch for [${[...required].join(",")}] → ${reordered[0]}`);
|
|
240
|
+
}
|
|
241
|
+
rotatedModels = reordered;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
111
244
|
|
|
112
245
|
let lastError = null;
|
|
113
246
|
let earliestRetryAfter = null;
|
|
@@ -196,3 +329,243 @@ export async function handleComboChat({ body, models, handleSingleModel, log, co
|
|
|
196
329
|
{ status, headers: { "Content-Type": "application/json" } }
|
|
197
330
|
);
|
|
198
331
|
}
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Extract assistant text from a non-stream completion across formats
|
|
335
|
+
* (OpenAI chat, Claude messages, Gemini, OpenAI Responses). Returns "" if none.
|
|
336
|
+
* Panel responses are already translated to the client format by chatCore, so the
|
|
337
|
+
* leaf content→string step reuses the translator's own extractTextContent.
|
|
338
|
+
*/
|
|
339
|
+
function extractPanelText(json) {
|
|
340
|
+
if (!json || typeof json !== "object") return "";
|
|
341
|
+
|
|
342
|
+
// OpenAI chat completion
|
|
343
|
+
const choice = json.choices?.[0];
|
|
344
|
+
if (choice) {
|
|
345
|
+
const msg = choice.message ?? choice.delta ?? {};
|
|
346
|
+
const t = extractTextContent(msg.content);
|
|
347
|
+
if (t.trim()) return t;
|
|
348
|
+
if (typeof choice.text === "string" && choice.text.trim()) return choice.text;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
// Claude messages (text blocks share OpenAI's {type:"text"} shape)
|
|
352
|
+
const claudeText = extractTextContent(json.content);
|
|
353
|
+
if (claudeText.trim()) return claudeText;
|
|
354
|
+
|
|
355
|
+
// Gemini (parts carry .text without a type discriminator)
|
|
356
|
+
const parts = json.candidates?.[0]?.content?.parts;
|
|
357
|
+
if (Array.isArray(parts)) {
|
|
358
|
+
const t = parts.map((p) => p?.text || "").join("");
|
|
359
|
+
if (t.trim()) return t;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// OpenAI Responses API
|
|
363
|
+
if (Array.isArray(json.output)) {
|
|
364
|
+
const t = json.output
|
|
365
|
+
.flatMap((o) => (Array.isArray(o.content) ? o.content.map((c) => c?.text || "") : []))
|
|
366
|
+
.join("");
|
|
367
|
+
if (t.trim()) return t;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
return "";
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* Append a synthesized user turn to whichever message array the request format uses.
|
|
375
|
+
* Preserves the original conversation + system prompt so the judge has full context.
|
|
376
|
+
*/
|
|
377
|
+
function appendUserTurn(body, text) {
|
|
378
|
+
const next = { ...body };
|
|
379
|
+
if (Array.isArray(body.messages)) {
|
|
380
|
+
next.messages = [...body.messages, { role: "user", content: text }];
|
|
381
|
+
} else if (Array.isArray(body.input)) {
|
|
382
|
+
next.input = [...body.input, { role: "user", content: text }];
|
|
383
|
+
} else if (Array.isArray(body.contents)) {
|
|
384
|
+
next.contents = [...body.contents, { role: "user", parts: [{ text }] }];
|
|
385
|
+
} else {
|
|
386
|
+
next.messages = [{ role: "user", content: text }];
|
|
387
|
+
}
|
|
388
|
+
return next;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* Build the judge directive. Per OpenRouter's Fusion design, the judge does NOT
|
|
393
|
+
* merge — it analyzes (consensus / contradictions / partial coverage / unique
|
|
394
|
+
* insights / blind spots) then writes one answer grounded in that analysis.
|
|
395
|
+
* ~3/4 of fusion's quality lift comes from this synthesis step.
|
|
396
|
+
*
|
|
397
|
+
* Sources are anonymized ("Source N") so the judge weighs substance, not the
|
|
398
|
+
* reputation of a model brand.
|
|
399
|
+
*/
|
|
400
|
+
function buildJudgePrompt(answers) {
|
|
401
|
+
const panel = answers
|
|
402
|
+
.map((a, i) => `[Source ${i + 1}]\n${a.text}`)
|
|
403
|
+
.join("\n\n");
|
|
404
|
+
|
|
405
|
+
return [
|
|
406
|
+
`You are the JUDGE in a model-fusion panel. ${answers.length} expert models independently answered the user's most recent request. Their responses are below, anonymized by source.`,
|
|
407
|
+
"",
|
|
408
|
+
"Do NOT mention that multiple models were used, and do NOT refer to the sources. Produce ONE authoritative final answer addressed directly to the user.",
|
|
409
|
+
"",
|
|
410
|
+
"First, internally analyze the panel along these dimensions: consensus (points most sources agree on — treat as higher-confidence), contradictions (where they disagree — resolve with your own judgment), partial coverage, unique insights only one source surfaced, and blind spots every source missed. Then write the best possible final answer grounded in that analysis — more complete and correct than any single response, with no filler.",
|
|
411
|
+
"",
|
|
412
|
+
"=== PANEL RESPONSES ===",
|
|
413
|
+
panel,
|
|
414
|
+
"=== END PANEL RESPONSES ===",
|
|
415
|
+
"",
|
|
416
|
+
"Now write the final answer to the user's original request.",
|
|
417
|
+
].join("\n");
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
// Fusion tuning. Overridable per-combo via settings.comboStrategies[name].
|
|
421
|
+
const FUSION_DEFAULTS = {
|
|
422
|
+
minPanel: 2, // answers needed before stragglers get a grace window
|
|
423
|
+
stragglerGraceMs: 8000, // wait this long for laggards once quorum is reached
|
|
424
|
+
panelHardTimeoutMs: 90000, // absolute cap so one hung model can't stall forever
|
|
425
|
+
};
|
|
426
|
+
|
|
427
|
+
// Resolve a Response (or {__error}) within ms; the loser keeps running but is ignored.
|
|
428
|
+
function withTimeout(promise, ms) {
|
|
429
|
+
return new Promise((resolve) => {
|
|
430
|
+
const t = setTimeout(() => resolve({ __timeout: true }), ms);
|
|
431
|
+
Promise.resolve(promise)
|
|
432
|
+
.then((v) => { clearTimeout(t); resolve(v); })
|
|
433
|
+
.catch((e) => { clearTimeout(t); resolve({ __error: e }); });
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
/**
|
|
438
|
+
* Collect panel responses with quorum-grace: as soon as `minPanel` calls succeed,
|
|
439
|
+
* start a short grace timer for the rest, then proceed with whatever arrived. This
|
|
440
|
+
* caps the straggler penalty (the slowest model otherwise dominates wall time) while
|
|
441
|
+
* still preferring a full panel when everyone is fast. Bounded by a hard timeout.
|
|
442
|
+
* Returns a sparse array aligned to `calls` (undefined = not yet / dropped).
|
|
443
|
+
*/
|
|
444
|
+
function collectPanel(calls, { minPanel, stragglerGraceMs, panelHardTimeoutMs }) {
|
|
445
|
+
return new Promise((resolve) => {
|
|
446
|
+
const out = new Array(calls.length);
|
|
447
|
+
let settled = 0;
|
|
448
|
+
let ok = 0;
|
|
449
|
+
let finished = false;
|
|
450
|
+
let graceTimer = null;
|
|
451
|
+
const finish = () => {
|
|
452
|
+
if (finished) return;
|
|
453
|
+
finished = true;
|
|
454
|
+
clearTimeout(hardTimer);
|
|
455
|
+
if (graceTimer) clearTimeout(graceTimer);
|
|
456
|
+
resolve(out);
|
|
457
|
+
};
|
|
458
|
+
const hardTimer = setTimeout(finish, panelHardTimeoutMs);
|
|
459
|
+
calls.forEach((p, i) => {
|
|
460
|
+
Promise.resolve(p)
|
|
461
|
+
.then((v) => { out[i] = v; })
|
|
462
|
+
.catch((e) => { out[i] = { __error: e }; })
|
|
463
|
+
.finally(() => {
|
|
464
|
+
settled++;
|
|
465
|
+
if (out[i] && out[i].ok) ok++;
|
|
466
|
+
if (settled === calls.length) return finish();
|
|
467
|
+
if (ok >= minPanel && !graceTimer) graceTimer = setTimeout(finish, stragglerGraceMs);
|
|
468
|
+
});
|
|
469
|
+
});
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* Handle a fusion combo: fan the prompt out to every panel model in parallel,
|
|
475
|
+
* then a judge model synthesizes one final answer from all panel responses.
|
|
476
|
+
*
|
|
477
|
+
* Panel calls are forced non-streaming with tools stripped (the judge needs
|
|
478
|
+
* complete prose to synthesize). The judge call keeps the client's original
|
|
479
|
+
* stream flag + tools, so streaming and downstream tool use still work.
|
|
480
|
+
*
|
|
481
|
+
* Speed: quorum-grace collection caps the straggler penalty. Quality: the judge
|
|
482
|
+
* runs the consensus/contradiction/blind-spot analysis before writing.
|
|
483
|
+
*
|
|
484
|
+
* Degrades gracefully: 0 panel answers -> 503, exactly 1 -> return it directly.
|
|
485
|
+
*
|
|
486
|
+
* @param {Object} options
|
|
487
|
+
* @param {Object} options.body - Request body (client format)
|
|
488
|
+
* @param {string[]} options.models - Panel model strings
|
|
489
|
+
* @param {Function} options.handleSingleModel - (body, modelStr) => Promise<Response>
|
|
490
|
+
* @param {Object} options.log - Logger
|
|
491
|
+
* @param {string} [options.comboName] - Combo name (logging)
|
|
492
|
+
* @param {string} [options.judgeModel] - Judge model; falls back to panel[0]
|
|
493
|
+
* @param {Object} [options.tuning] - Override FUSION_DEFAULTS (minPanel, grace, timeout)
|
|
494
|
+
* @returns {Promise<Response>}
|
|
495
|
+
*/
|
|
496
|
+
export async function handleFusionChat({ body, models, handleSingleModel, log, comboName, judgeModel, tuning }) {
|
|
497
|
+
const panel = Array.isArray(models) ? models.filter(Boolean) : [];
|
|
498
|
+
if (panel.length === 0) {
|
|
499
|
+
return new Response(
|
|
500
|
+
JSON.stringify({ error: { message: "Fusion combo has no models" } }),
|
|
501
|
+
{ status: 400, headers: { "Content-Type": "application/json" } }
|
|
502
|
+
);
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
// A single-model fusion has nothing to fuse — just answer directly.
|
|
506
|
+
if (panel.length === 1) {
|
|
507
|
+
return handleSingleModel(body, panel[0]);
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
const cfg = { ...FUSION_DEFAULTS, ...(tuning || {}) };
|
|
511
|
+
const minPanel = Math.min(Math.max(2, cfg.minPanel), panel.length);
|
|
512
|
+
const judge = judgeModel && judgeModel.trim() ? judgeModel.trim() : panel[0];
|
|
513
|
+
log.info("FUSION", `Combo "${comboName}" | panel=${panel.length} [${panel.join(", ")}] | judge=${judge} | quorum=${minPanel}`);
|
|
514
|
+
|
|
515
|
+
// 1. Fan out to the panel in parallel: non-streaming, tools stripped (we want prose).
|
|
516
|
+
const { tools, tool_choice, ...rest } = body;
|
|
517
|
+
const panelBody = { ...rest, stream: false };
|
|
518
|
+
|
|
519
|
+
// Flatten tool turns to prose so panel models keep context without emitting tool_calls.
|
|
520
|
+
if (Array.isArray(panelBody.messages)) {
|
|
521
|
+
panelBody.messages = flattenToolHistory(panelBody.messages);
|
|
522
|
+
} else if (Array.isArray(panelBody.input)) {
|
|
523
|
+
panelBody.input = flattenToolHistory(panelBody.input);
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
const t0 = Date.now();
|
|
527
|
+
const calls = panel.map((m) => withTimeout(handleSingleModel(panelBody, m, true), cfg.panelHardTimeoutMs));
|
|
528
|
+
const settled = await collectPanel(calls, { ...cfg, minPanel });
|
|
529
|
+
log.info("FUSION", `fan-out collected in ${Date.now() - t0}ms`);
|
|
530
|
+
|
|
531
|
+
// 2. Collect successful answers.
|
|
532
|
+
const answers = [];
|
|
533
|
+
for (let i = 0; i < settled.length; i++) {
|
|
534
|
+
const res = settled[i];
|
|
535
|
+
const model = panel[i];
|
|
536
|
+
if (!res) { log.warn("FUSION", `Panel ${model} dropped (straggler/timeout)`); continue; }
|
|
537
|
+
if (res.__timeout) { log.warn("FUSION", `Panel ${model} timed out`); continue; }
|
|
538
|
+
if (res.__error) { log.warn("FUSION", `Panel ${model} threw`, { error: res.__error?.message || String(res.__error) }); continue; }
|
|
539
|
+
if (!res.ok) { log.warn("FUSION", `Panel ${model} failed`, { status: res.status }); continue; }
|
|
540
|
+
try {
|
|
541
|
+
const json = await res.clone().json();
|
|
542
|
+
const text = extractPanelText(json);
|
|
543
|
+
if (text) {
|
|
544
|
+
answers.push({ model, text });
|
|
545
|
+
log.info("FUSION", `Panel ${model} ok (${text.length} chars)`);
|
|
546
|
+
} else {
|
|
547
|
+
log.warn("FUSION", `Panel ${model} returned empty content`);
|
|
548
|
+
}
|
|
549
|
+
} catch (e) {
|
|
550
|
+
log.warn("FUSION", `Panel ${model} unparseable`, { error: e.message || String(e) });
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
// 3. Degrade gracefully when the panel is too thin to fuse.
|
|
555
|
+
if (answers.length === 0) {
|
|
556
|
+
log.warn("FUSION", "All panel models failed");
|
|
557
|
+
return new Response(
|
|
558
|
+
JSON.stringify({ error: { message: "All fusion panel models failed" } }),
|
|
559
|
+
{ status: 503, headers: { "Content-Type": "application/json" } }
|
|
560
|
+
);
|
|
561
|
+
}
|
|
562
|
+
if (answers.length === 1) {
|
|
563
|
+
log.info("FUSION", `Only ${answers[0].model} succeeded — answering directly (no fusion)`);
|
|
564
|
+
return handleSingleModel(body, answers[0].model);
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
// 4. Judge analyzes + writes one final answer (streams to client if requested).
|
|
568
|
+
const judgeBody = appendUserTurn(body, buildJudgePrompt(answers));
|
|
569
|
+
log.info("FUSION", `Judging ${answers.length} answers with ${judge}`);
|
|
570
|
+
return handleSingleModel(judgeBody, judge);
|
|
571
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Copilot model catalog fetcher.
|
|
3
|
+
*
|
|
4
|
+
* Calls Copilot's `GET /models` endpoint to get the live catalog for an
|
|
5
|
+
* authenticated account, so `/v1/models` reflects what the account can
|
|
6
|
+
* actually use (e.g. newly shipped `claude-opus-4.8`, `gpt-5.5`) instead of
|
|
7
|
+
* the hand-maintained static registry, which inevitably lags behind.
|
|
8
|
+
*
|
|
9
|
+
* Returns chat-capable models the account's policy allows. Embeddings and
|
|
10
|
+
* disabled models are filtered out.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { proxyAwareFetch } from "../utils/proxyFetch.js";
|
|
14
|
+
import { GITHUB_COPILOT } from "../config/appConstants.js";
|
|
15
|
+
import { refreshCopilotToken } from "./tokenRefresh.js";
|
|
16
|
+
|
|
17
|
+
const MODELS_URL = "https://api.githubcopilot.com/models";
|
|
18
|
+
const FETCH_TIMEOUT_MS = 10_000;
|
|
19
|
+
const CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes per credential
|
|
20
|
+
|
|
21
|
+
/** @type {Map<string, { expiresAt: number, models: any[] }>} */
|
|
22
|
+
const catalogCache = new Map();
|
|
23
|
+
|
|
24
|
+
function cacheKey(credentials) {
|
|
25
|
+
return credentials?.providerSpecificData?.copilotToken
|
|
26
|
+
|| credentials?.accessToken
|
|
27
|
+
|| "copilot-anonymous";
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function buildHeaders(token) {
|
|
31
|
+
return {
|
|
32
|
+
"Authorization": `Bearer ${token}`,
|
|
33
|
+
"Content-Type": "application/json",
|
|
34
|
+
"Copilot-Integration-Id": "vscode-chat",
|
|
35
|
+
"editor-version": `vscode/${GITHUB_COPILOT.VSCODE_VERSION}`,
|
|
36
|
+
"editor-plugin-version": `copilot-chat/${GITHUB_COPILOT.COPILOT_CHAT_VERSION}`,
|
|
37
|
+
"user-agent": GITHUB_COPILOT.USER_AGENT,
|
|
38
|
+
"x-github-api-version": GITHUB_COPILOT.API_VERSION,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
async function fetchCatalogRaw(token, signal) {
|
|
43
|
+
const controller = new AbortController();
|
|
44
|
+
const timeoutId = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
|
|
45
|
+
try {
|
|
46
|
+
const response = await proxyAwareFetch(MODELS_URL, {
|
|
47
|
+
method: "GET",
|
|
48
|
+
headers: buildHeaders(token),
|
|
49
|
+
cache: "no-store",
|
|
50
|
+
signal: signal || controller.signal,
|
|
51
|
+
});
|
|
52
|
+
if (!response.ok) {
|
|
53
|
+
const err = new Error(`Copilot /models returned ${response.status}`);
|
|
54
|
+
err.status = response.status;
|
|
55
|
+
throw err;
|
|
56
|
+
}
|
|
57
|
+
const data = await response.json();
|
|
58
|
+
return Array.isArray(data?.data) ? data.data : [];
|
|
59
|
+
} finally {
|
|
60
|
+
clearTimeout(timeoutId);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Keep only chat models the account is allowed to use. The static registry
|
|
65
|
+
// surfaced disabled/embedding entries inconsistently; here we trust upstream.
|
|
66
|
+
function expandCatalog(raw) {
|
|
67
|
+
const seen = new Set();
|
|
68
|
+
const models = [];
|
|
69
|
+
for (const m of raw) {
|
|
70
|
+
if (!m || typeof m !== "object") continue;
|
|
71
|
+
if (m.capabilities?.type !== "chat") continue;
|
|
72
|
+
if (m.policy && m.policy.state !== "enabled") continue;
|
|
73
|
+
const id = m.id;
|
|
74
|
+
if (!id || seen.has(id)) continue;
|
|
75
|
+
seen.add(id);
|
|
76
|
+
models.push({ id, name: m.name || id });
|
|
77
|
+
}
|
|
78
|
+
return models;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Resolve the live Copilot model catalog for a connection.
|
|
83
|
+
*
|
|
84
|
+
* @param {object} credentials Connection record (accessToken, refreshToken,
|
|
85
|
+
* providerSpecificData {copilotToken, copilotTokenExpiresAt}).
|
|
86
|
+
* @param {object} [options]
|
|
87
|
+
* @param {boolean} [options.forceRefresh] Bypass the per-credential cache.
|
|
88
|
+
* @param {object} [options.log] Logger.
|
|
89
|
+
* @param {function} [options.onCredentialsRefreshed] Persist a refreshed
|
|
90
|
+
* Copilot token back to your store. Called with `{ copilotToken,
|
|
91
|
+
* copilotTokenExpiresAt }` whenever a 401 triggers a refresh.
|
|
92
|
+
* @returns {Promise<{ models: object[] } | null>}
|
|
93
|
+
*/
|
|
94
|
+
export async function resolveCopilotModels(credentials, options = {}) {
|
|
95
|
+
const token = credentials?.providerSpecificData?.copilotToken || credentials?.accessToken;
|
|
96
|
+
if (!token) {
|
|
97
|
+
options.log?.debug?.("COPILOT_MODELS", "No copilotToken/accessToken; skipping live fetch");
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const key = cacheKey(credentials);
|
|
102
|
+
const now = Date.now();
|
|
103
|
+
if (!options.forceRefresh) {
|
|
104
|
+
const cached = catalogCache.get(key);
|
|
105
|
+
if (cached && cached.expiresAt > now) {
|
|
106
|
+
return { models: cached.models };
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
let raw;
|
|
111
|
+
try {
|
|
112
|
+
raw = await fetchCatalogRaw(token, options.signal);
|
|
113
|
+
} catch (err) {
|
|
114
|
+
// A 401/403 means the Copilot token is stale — refresh from the GitHub
|
|
115
|
+
// access token and retry once.
|
|
116
|
+
if (err && (err.status === 401 || err.status === 403) && credentials.accessToken) {
|
|
117
|
+
options.log?.info?.("COPILOT_MODELS", `Got ${err.status}; refreshing Copilot token`);
|
|
118
|
+
const refreshed = await refreshCopilotToken(credentials.accessToken);
|
|
119
|
+
if (refreshed?.token) {
|
|
120
|
+
if (typeof options.onCredentialsRefreshed === "function") {
|
|
121
|
+
try {
|
|
122
|
+
await options.onCredentialsRefreshed({
|
|
123
|
+
copilotToken: refreshed.token,
|
|
124
|
+
copilotTokenExpiresAt: refreshed.expiresAt,
|
|
125
|
+
});
|
|
126
|
+
} catch (e) {
|
|
127
|
+
options.log?.warn?.("COPILOT_MODELS", `onCredentialsRefreshed failed: ${e?.message || e}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
raw = await fetchCatalogRaw(refreshed.token, options.signal);
|
|
132
|
+
} catch (err2) {
|
|
133
|
+
options.log?.warn?.("COPILOT_MODELS", `Retry after refresh failed: ${err2?.message || err2}`);
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
} else {
|
|
137
|
+
options.log?.warn?.("COPILOT_MODELS", "Token refresh did not return a token");
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
} else {
|
|
141
|
+
options.log?.warn?.("COPILOT_MODELS", `Live model fetch failed: ${err?.message || err}`);
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const models = expandCatalog(raw);
|
|
147
|
+
if (!models.length) return null;
|
|
148
|
+
|
|
149
|
+
catalogCache.set(key, { expiresAt: now + CACHE_TTL_MS, models });
|
|
150
|
+
return { models };
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export function clearCopilotModelCache() {
|
|
154
|
+
catalogCache.clear();
|
|
155
|
+
}
|