n9router 0.4.44 → 0.4.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/.next/BUILD_ID +1 -1
- package/app/.next/app-path-routes-manifest.json +25 -16
- package/app/.next/build-manifest.json +2 -2
- package/app/.next/prerender-manifest.json +27 -3
- package/app/.next/required-server-files.json +12 -0
- package/app/.next/routes-manifest.json +71 -0
- package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +30 -30
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +10 -6
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/quota/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/skills/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/token-saver/page.js +2 -0
- package/app/.next/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -0
- package/app/.next/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -0
- package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error/page.js +3 -3
- package/app/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +1 -1
- package/app/.next/server/app/_global-error.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page.js +2 -2
- package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_not-found.html +1 -1
- package/app/.next/server/app/_not-found.rsc +4 -4
- package/app/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/api/antigravity-app/route.js +1 -1
- package/app/.next/server/app/api/antigravity-app/route.js.nft.json +1 -1
- package/app/.next/server/app/api/antigravity-app-v2/route.js +1 -1
- package/app/.next/server/app/api/antigravity-app-v2/route.js.nft.json +1 -1
- package/app/.next/server/app/api/antigravity-ide/route.js +1 -1
- package/app/.next/server/app/api/antigravity-ide/route.js.nft.json +1 -1
- package/app/.next/server/app/api/antigravity-targets/route.js +1 -1
- package/app/.next/server/app/api/antigravity-targets/route.js.nft.json +1 -1
- package/app/.next/server/app/api/antigravity-tools/import/route.js +1 -1
- package/app/.next/server/app/api/antigravity-tools/import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/antigravity-tools/import-refresh-tokens/route.js +1 -1
- package/app/.next/server/app/api/antigravity-tools/import-refresh-tokens/route.js.nft.json +1 -1
- package/app/.next/server/app/api/auth/login/route.js +1 -1
- package/app/.next/server/app/api/auth/login/route.js.nft.json +1 -1
- package/app/.next/server/app/api/auth/logout/route.js +1 -1
- package/app/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/app/.next/server/app/api/auth/oidc/callback/route.js +1 -1
- package/app/.next/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
- package/app/.next/server/app/api/auth/oidc/start/route.js +1 -1
- package/app/.next/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
- package/app/.next/server/app/api/auth/oidc/test/route.js +1 -1
- package/app/.next/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/auth/reset-password/route.js +1 -0
- package/app/.next/server/app/api/auth/reset-password/route.js.nft.json +1 -0
- package/app/.next/server/app/api/auth/reset-password/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/auth/status/route.js +1 -1
- package/app/.next/server/app/api/auth/status/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/all-statuses/route.js +4 -4
- package/app/.next/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/cline-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/copilot-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/cowork-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/deepseek-tui-settings/route.js +3 -3
- package/app/.next/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/droid-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/hermes-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/jcode-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/opencode-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/combos/[id]/route.js +1 -1
- package/app/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/combos/route.js +1 -1
- package/app/.next/server/app/api/combos/route.js.nft.json +1 -1
- package/app/.next/server/app/api/donate/route.js +1 -1
- package/app/.next/server/app/api/donate/route.js.nft.json +1 -1
- package/app/.next/server/app/api/headroom/start/route.js +1 -0
- package/app/.next/server/app/api/headroom/start/route.js.nft.json +1 -0
- package/app/.next/server/app/api/headroom/start/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/headroom/status/route.js +1 -0
- package/app/.next/server/app/api/headroom/status/route.js.nft.json +1 -0
- package/app/.next/server/app/api/headroom/status/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/headroom/stop/route.js +1 -0
- package/app/.next/server/app/api/headroom/stop/route.js.nft.json +1 -0
- package/app/.next/server/app/api/headroom/stop/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/health/route.js +1 -1
- package/app/.next/server/app/api/health/route.js.nft.json +1 -1
- package/app/.next/server/app/api/init/route.js +1 -1
- package/app/.next/server/app/api/init/route.js.nft.json +1 -1
- package/app/.next/server/app/api/internal/account-health/route.js +1 -1
- package/app/.next/server/app/api/internal/account-health/route.js.nft.json +1 -1
- package/app/.next/server/app/api/internal/request-detail/route.js +1 -1
- package/app/.next/server/app/api/internal/request-detail/route.js.nft.json +1 -1
- package/app/.next/server/app/api/internal/usage/route.js +1 -1
- package/app/.next/server/app/api/internal/usage/route.js.nft.json +1 -1
- package/app/.next/server/app/api/keys/[id]/reset-usage/route.js +1 -1
- package/app/.next/server/app/api/keys/[id]/reset-usage/route.js.nft.json +1 -1
- package/app/.next/server/app/api/keys/[id]/route.js +1 -1
- package/app/.next/server/app/api/keys/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/keys/[id]/usage/route.js +1 -1
- package/app/.next/server/app/api/keys/[id]/usage/route.js.nft.json +1 -1
- package/app/.next/server/app/api/keys/route.js +1 -1
- package/app/.next/server/app/api/keys/route.js.nft.json +1 -1
- package/app/.next/server/app/api/locale/route.js +1 -1
- package/app/.next/server/app/api/locale/route.js.nft.json +1 -1
- package/app/.next/server/app/api/mcp/[plugin]/message/route.js +3 -3
- package/app/.next/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
- package/app/.next/server/app/api/mcp/[plugin]/sse/route.js +6 -3
- package/app/.next/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
- package/app/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
- package/app/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
- package/app/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
- package/app/.next/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
- package/app/.next/server/app/api/media-providers/tts/voices/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/alias/route.js +1 -1
- package/app/.next/server/app/api/models/alias/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/availability/route.js +1 -1
- package/app/.next/server/app/api/models/availability/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/custom/route.js +1 -1
- package/app/.next/server/app/api/models/custom/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/disabled/route.js +1 -1
- package/app/.next/server/app/api/models/disabled/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/route.js +1 -1
- package/app/.next/server/app/api/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/test/route.js +1 -1
- package/app/.next/server/app/api/models/test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
- package/app/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/codex/bulk-import/route.js +1 -0
- package/app/.next/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -0
- package/app/.next/server/app/api/oauth/codex/bulk-import/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/oauth/codex/import-token/route.js +1 -1
- package/app/.next/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
- package/app/.next/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/cursor/import/route.js +1 -1
- package/app/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
- package/app/.next/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
- package/app/.next/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/kiro/api-key/route.js +1 -0
- package/app/.next/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -0
- package/app/.next/server/app/api/oauth/kiro/api-key/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/oauth/kiro/auto-import/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/kiro/import/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/kiro/import-cli-proxy/route.js +1 -0
- package/app/.next/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -0
- package/app/.next/server/app/api/oauth/kiro/import-cli-proxy/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
- package/app/.next/server/app/api/pricing/route.js +1 -1
- package/app/.next/server/app/api/pricing/route.js.nft.json +1 -1
- package/app/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
- package/app/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/provider-nodes/route.js +1 -1
- package/app/.next/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/app/.next/server/app/api/provider-nodes/validate/route.js +1 -1
- package/app/.next/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/models/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/client/route.js +1 -1
- package/app/.next/server/app/api/providers/client/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
- package/app/.next/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/route.js +1 -1
- package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/suggested-models/route.js +1 -1
- package/app/.next/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
- package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/validate/route.js +1 -1
- package/app/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/app/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
- package/app/.next/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
- package/app/.next/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js +2 -2
- package/app/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
- package/app/.next/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
- package/app/.next/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
- package/app/.next/server/app/api/proxy-pools/route.js +1 -1
- package/app/.next/server/app/api/proxy-pools/route.js.nft.json +1 -1
- package/app/.next/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
- package/app/.next/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/database/route.js +1 -1
- package/app/.next/server/app/api/settings/database/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/database/selective/route.js +1 -1
- package/app/.next/server/app/api/settings/database/selective/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/proxy-test/route.js +1 -1
- package/app/.next/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/require-login/route.js +1 -1
- package/app/.next/server/app/api/settings/require-login/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/route.js +1 -1
- package/app/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/shutdown/route.js +1 -1
- package/app/.next/server/app/api/shutdown/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tags/route.js +1 -1
- package/app/.next/server/app/api/tags/route.js.nft.json +1 -1
- package/app/.next/server/app/api/translator/console-logs/route.js +1 -1
- package/app/.next/server/app/api/translator/console-logs/route.js.nft.json +1 -1
- package/app/.next/server/app/api/translator/console-logs/stream/route.js +4 -2
- package/app/.next/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
- package/app/.next/server/app/api/translator/load/route.js +1 -1
- package/app/.next/server/app/api/translator/load/route.js.nft.json +1 -1
- package/app/.next/server/app/api/translator/save/route.js +1 -1
- package/app/.next/server/app/api/translator/save/route.js.nft.json +1 -1
- package/app/.next/server/app/api/translator/send/route.js +1 -1
- package/app/.next/server/app/api/translator/send/route.js.nft.json +1 -1
- package/app/.next/server/app/api/translator/translate/route.js +1 -1
- package/app/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/disable/route.js +1 -1
- package/app/.next/server/app/api/tunnel/disable/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/enable/route.js +1 -1
- package/app/.next/server/app/api/tunnel/enable/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/status/route.js +1 -1
- package/app/.next/server/app/api/tunnel/status/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-check/route.js +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-install/route.js +2 -2
- package/app/.next/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -0
- package/app/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -0
- package/app/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
- package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/chart/route.js +1 -1
- package/app/.next/server/app/api/usage/chart/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/history/route.js +1 -1
- package/app/.next/server/app/api/usage/history/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/logs/route.js +1 -1
- package/app/.next/server/app/api/usage/logs/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/providers/route.js +1 -1
- package/app/.next/server/app/api/usage/providers/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/report/route.js +1 -1
- package/app/.next/server/app/api/usage/report/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/request-details/route.js +1 -1
- package/app/.next/server/app/api/usage/request-details/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/request-logs/route.js +1 -1
- package/app/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/stats/route.js +1 -1
- package/app/.next/server/app/api/usage/stats/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/stream/route.js +2 -2
- package/app/.next/server/app/api/usage/stream/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/api/chat/route.js +1 -1
- package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/audio/speech/route.js +1 -1
- package/app/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
- package/app/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/audio/voices/route.js +1 -1
- package/app/.next/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
- package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
- package/app/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/images/generations/route.js +2 -2
- package/app/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
- package/app/.next/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/messages/route.js +1 -1
- package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/models/[kind]/route.js +1 -1
- package/app/.next/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/models/info/route.js +1 -1
- package/app/.next/server/app/api/v1/models/info/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/models/route.js +1 -1
- package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/responses/compact/route.js +1 -1
- package/app/.next/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/responses/route.js +1 -1
- package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/route.js +1 -1
- package/app/.next/server/app/api/v1/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/search/route.js +1 -1
- package/app/.next/server/app/api/v1/search/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/web/fetch/route.js +1 -1
- package/app/.next/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
- package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1beta/models/route.js +1 -1
- package/app/.next/server/app/api/v1beta/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/version/route.js +1 -1
- package/app/.next/server/app/api/version/route.js.nft.json +1 -1
- package/app/.next/server/app/api/version/shutdown/route.js +1 -1
- package/app/.next/server/app/api/version/shutdown/route.js.nft.json +1 -1
- package/app/.next/server/app/api/version/update/route.js +1 -1
- package/app/.next/server/app/api/version/update/route.js.nft.json +1 -1
- package/app/.next/server/app/callback/page.js +2 -2
- package/app/.next/server/app/callback/page.js.nft.json +1 -1
- package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/callback.html +1 -1
- package/app/.next/server/app/callback.rsc +5 -5
- package/app/.next/server/app/callback.segments/_full.segment.rsc +5 -5
- package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/callback.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.html +1 -1
- package/app/.next/server/app/dashboard/basic-chat.rsc +6 -6
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next/server/app/dashboard/cli-tools.rsc +6 -6
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.html +1 -1
- package/app/.next/server/app/dashboard/combos.rsc +6 -6
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.html +1 -1
- package/app/.next/server/app/dashboard/endpoint.rsc +6 -6
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/media-providers/web.html +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.rsc +6 -6
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/mitm.html +1 -1
- package/app/.next/server/app/dashboard/mitm.rsc +6 -6
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.html +1 -1
- package/app/.next/server/app/dashboard/profile.rsc +6 -6
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.html +1 -1
- package/app/.next/server/app/dashboard/providers/new.rsc +6 -6
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.html +1 -1
- package/app/.next/server/app/dashboard/providers.rsc +6 -6
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.rsc +6 -6
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/quota.html +2 -2
- package/app/.next/server/app/dashboard/quota.rsc +7 -7
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/quota.segments/_full.segment.rsc +7 -7
- package/app/.next/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/quota.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/settings/pricing/page.js +2 -2
- package/app/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
- package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.rsc +5 -5
- package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +5 -5
- package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/skills.html +1 -1
- package/app/.next/server/app/dashboard/skills.rsc +6 -6
- package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/skills.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/skills.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/token-saver.html +1 -0
- package/app/.next/server/app/dashboard/token-saver.meta +17 -0
- package/app/.next/server/app/dashboard/token-saver.rsc +23 -0
- package/app/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +6 -0
- package/app/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +5 -0
- package/app/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
- package/app/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
- package/app/.next/server/app/dashboard/token-saver.segments/_full.segment.rsc +23 -0
- package/app/.next/server/app/dashboard/token-saver.segments/_head.segment.rsc +6 -0
- package/app/.next/server/app/dashboard/token-saver.segments/_index.segment.rsc +8 -0
- package/app/.next/server/app/dashboard/token-saver.segments/_tree.segment.rsc +5 -0
- package/app/.next/server/app/dashboard/translator.html +1 -1
- package/app/.next/server/app/dashboard/translator.rsc +6 -6
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.html +1 -1
- package/app/.next/server/app/dashboard/usage.rsc +6 -6
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard.html +1 -1
- package/app/.next/server/app/dashboard.rsc +6 -6
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/favicon.ico/route.js +1 -1
- package/app/.next/server/app/favicon.ico/route.js.nft.json +1 -1
- package/app/.next/server/app/index.html +1 -1
- package/app/.next/server/app/index.rsc +4 -4
- package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/index.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/landing/page.js +2 -2
- package/app/.next/server/app/landing/page.js.nft.json +1 -1
- package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing.html +1 -1
- package/app/.next/server/app/landing.rsc +4 -4
- package/app/.next/server/app/landing.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/landing.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
- package/app/.next/server/app/login/page.js +2 -2
- package/app/.next/server/app/login/page.js.nft.json +1 -1
- package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/login.html +1 -1
- package/app/.next/server/app/login.rsc +5 -5
- package/app/.next/server/app/login.segments/_full.segment.rsc +5 -5
- package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/login.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/app/.next/server/app/manifest.webmanifest/route.js +2 -2
- package/app/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- package/app/.next/server/app/page.js +2 -2
- package/app/.next/server/app/page.js.nft.json +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app-paths-manifest.json +25 -16
- package/app/.next/server/chunks/1051.js +1 -1
- package/app/.next/server/chunks/1241.js +1 -0
- package/app/.next/server/chunks/1350.js +1 -0
- package/app/.next/server/chunks/1470.js +1 -0
- package/app/.next/server/chunks/1719.js +1 -0
- package/app/.next/server/chunks/2041.js +1 -0
- package/app/.next/server/chunks/220.js +1 -0
- package/app/.next/server/chunks/2701.js +10 -0
- package/app/.next/server/chunks/318.js +21 -44
- package/app/.next/server/chunks/3535.js +1 -0
- package/app/.next/server/chunks/{1531.js → 3546.js} +1 -1
- package/app/.next/server/chunks/3955.js +1 -0
- package/app/.next/server/chunks/412.js +5 -5
- package/app/.next/server/chunks/4250.js +2 -2
- package/app/.next/server/chunks/4306.js +1 -0
- package/app/.next/server/chunks/4334.js +1 -1
- package/app/.next/server/chunks/4632.js +1 -0
- package/app/.next/server/chunks/4989.js +2 -2
- package/app/.next/server/chunks/5612.js +1 -0
- package/app/.next/server/chunks/5615.js +43 -0
- package/app/.next/server/chunks/5699.js +1 -0
- package/app/.next/server/chunks/5961.js +1 -0
- package/app/.next/server/chunks/5995.js +3 -3
- package/app/.next/server/chunks/6070.js +1 -0
- package/app/.next/server/chunks/6114.js +1 -0
- package/app/.next/server/chunks/615.js +1 -0
- package/app/.next/server/chunks/6182.js +6 -6
- package/app/.next/server/chunks/6292.js +1 -0
- package/app/.next/server/chunks/63.js +3 -3
- package/app/.next/server/chunks/6306.js +1 -0
- package/app/.next/server/chunks/6328.js +1 -0
- package/app/.next/server/chunks/6457.js +4 -4
- package/app/.next/server/chunks/{5433.js → 6630.js} +1 -1
- package/app/.next/server/chunks/{6108.js → 6763.js} +1 -1
- package/app/.next/server/chunks/6777.js +1 -0
- package/app/.next/server/chunks/{7912.js → 7186.js} +1 -1
- package/app/.next/server/chunks/7774.js +2 -2
- package/app/.next/server/chunks/7886.js +1 -0
- package/app/.next/server/chunks/7994.js +1 -1
- package/app/.next/server/chunks/8056.js +1 -0
- package/app/.next/server/chunks/8238.js +1 -0
- package/app/.next/server/chunks/8271.js +1 -0
- package/app/.next/server/chunks/8833.js +75 -0
- package/app/.next/server/chunks/8895.js +52 -6
- package/app/.next/server/chunks/8910.js +2 -0
- package/app/.next/server/chunks/8920.js +1 -0
- package/app/.next/server/chunks/9718.js +1 -1
- package/app/.next/server/middleware-build-manifest.js +1 -1
- package/app/.next/server/middleware.js +4 -4
- package/app/.next/server/pages/404.html +1 -1
- package/app/.next/server/pages/500.html +1 -1
- package/app/.next/server/server-reference-manifest.js +1 -1
- package/app/.next/server/server-reference-manifest.json +1 -1
- package/app/.next/static/27Vk-YuF5IVK9FBSw9u-7/_buildManifest.js +1 -0
- package/app/.next/static/chunks/1321-04bdf1999f780065.js +1 -0
- package/app/.next/static/chunks/4406-7c91480ba4750afb.js +53 -0
- package/app/.next/static/chunks/5497-5cecb2d0cc54a0f8.js +7 -0
- package/app/.next/static/chunks/705-979ff3eb195b9023.js +1 -0
- package/app/.next/static/chunks/8198-78a2e809aa3deb41.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/basic-chat/{page-068dda6eab2b9c36.js → page-32d43003bf779725.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/{page-67d36bbaeb6af871.js → page-15778114f19494f8.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/{page-51957200aaa0e0f7.js → page-925d6a9314cf0c45.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-4bb3df15dc91fcb2.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-f60417f258999845.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-74bfeda48c347058.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page-73b10fa11c40c00c.js +59 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/{page-af17247a74fa851d.js → page-0f5128a45c7624cc.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/{page-2db8cc9e18677705.js → page-ff27d7416104ba6f.js} +2 -2
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/web/{page-3dda3de79f6783b9.js → page-e95e43c710b79a65.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/mitm/{page-8cb9c569a7822a0a.js → page-7c06afe89ff9c503.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/page-89ea8a0102dcfaa6.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/{page-5d6cf330f43257e2.js → page-ddac36832067712f.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-658bcd33b491d685.js +10 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/new/{page-90c4c56b239fd343.js → page-01642ff508f9e4da.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-cf238376512e0f73.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/{page-b9da35538f423062.js → page-5d746bc98c25d89d.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-c38f42b5a56fb89a.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/skills/{page-00d80332b8940cff.js → page-78cef8869d7870c1.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/token-saver/page-74ebd1e0d5566f44.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/{page-216b24f865b63695.js → page-260de68ca87258e3.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-40fda9a4c08e7bd5.js +3 -0
- package/app/.next/static/chunks/app/(dashboard)/layout-9e8819851f57b3cb.js +1 -0
- package/app/.next/static/chunks/app/_global-error/page-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/antigravity-app/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/antigravity-app-v2/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/antigravity-ide/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/antigravity-targets/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/antigravity-tools/import/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/antigravity-tools/import-refresh-tokens/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/auth/login/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/auth/logout/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/auth/oidc/callback/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/auth/oidc/start/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/auth/oidc/test/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/auth/reset-password/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/auth/status/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/all-statuses/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/jcode-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/combos/[id]/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/combos/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/donate/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/headroom/start/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/headroom/status/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/headroom/stop/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/health/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/init/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/internal/account-health/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/internal/request-detail/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/internal/usage/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/keys/[id]/reset-usage/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/keys/[id]/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/keys/[id]/usage/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/keys/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/locale/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/mcp/[plugin]/message/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/mcp/[plugin]/sse/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/models/alias/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/models/availability/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/models/custom/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/models/disabled/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/models/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/models/test/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/codex/bulk-import/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/codex/import-token/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/api-key/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/import-cli-proxy/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/pricing/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/providers/client/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/providers/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/providers/suggested-models/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/providers/test-batch/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/providers/validate/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/settings/database/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/settings/database/selective/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/settings/proxy-test/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/settings/require-login/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/settings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/shutdown/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/tags/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/translator/console-logs/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/translator/load/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/translator/save/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/translator/send/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/translator/translate/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/disable/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/enable/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/status/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/chart/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/history/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/logs/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/providers/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/report/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/request-details/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/request-logs/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/stats/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/usage/stream/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/api/chat/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/voices/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/embeddings/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/images/generations/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/messages/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/[kind]/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/info/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/responses/compact/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/responses/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/search/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1/web/fetch/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/v1beta/models/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/version/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/version/shutdown/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/api/version/update/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/callback/page-b12814e445464090.js +1 -0
- package/app/.next/static/chunks/app/dashboard/settings/pricing/page-71c6f6edfe7b111f.js +1 -0
- package/app/.next/static/chunks/app/login/page-1b46e625d19cb04a.js +1 -0
- package/app/.next/static/chunks/app/manifest.webmanifest/route-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/app/page-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-270635328efa0901.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-270635328efa0901.js +1 -0
- package/app/.next/static/css/7eb3c00f858e3692.css +1 -0
- package/app/open-sse/AGENTS.md +39 -0
- package/app/open-sse/config/appConstants.js +20 -41
- package/app/open-sse/config/kiroConstants.js +55 -40
- package/app/open-sse/config/mediaConfig.js +27 -0
- package/app/open-sse/config/providerModels.js +15 -851
- package/app/open-sse/config/providers.js +6 -444
- package/app/open-sse/config/runtimeConfig.js +18 -3
- package/app/open-sse/config/ttsModels.js +2 -0
- package/app/open-sse/executors/antigravity.js +211 -125
- package/app/open-sse/executors/base.js +18 -8
- package/app/open-sse/executors/codebuddy-cn.js +40 -0
- package/app/open-sse/executors/codex.js +21 -89
- package/app/open-sse/executors/commandcode.js +10 -4
- package/app/open-sse/executors/cursor.js +96 -203
- package/app/open-sse/executors/default.js +148 -130
- package/app/open-sse/executors/github.js +5 -39
- package/app/open-sse/executors/grok-web.js +5 -7
- package/app/open-sse/executors/index.js +10 -0
- package/app/open-sse/executors/kimchi.js +123 -0
- package/app/open-sse/executors/kiro.js +126 -25
- package/app/open-sse/executors/mimo-free.js +167 -0
- package/app/open-sse/executors/opencode-go.js +12 -4
- package/app/open-sse/executors/opencode.js +1 -1
- package/app/open-sse/executors/perplexity-web.js +5 -7
- package/app/open-sse/executors/qoder.js +18 -10
- package/app/open-sse/executors/vertex.js +53 -7
- package/app/open-sse/executors/xiaomi-tokenplan.js +6 -5
- package/app/open-sse/handlers/chatCore/nonStreamingHandler.js +103 -12
- package/app/open-sse/handlers/chatCore/requestDetail.js +6 -10
- package/app/open-sse/handlers/chatCore/sseToJsonHandler.js +6 -2
- package/app/open-sse/handlers/chatCore/streamingHandler.js +51 -15
- package/app/open-sse/handlers/chatCore.js +58 -5
- package/app/open-sse/handlers/embeddingProviders/index.js +1 -0
- package/app/open-sse/handlers/embeddingProviders/openai.js +8 -16
- package/app/open-sse/handlers/imageGenerationCore.js +66 -6
- package/app/open-sse/handlers/imageProviders/antigravity.js +73 -0
- package/app/open-sse/handlers/imageProviders/blackForestLabs.js +2 -1
- package/app/open-sse/handlers/imageProviders/cloudflareAi.js +2 -1
- package/app/open-sse/handlers/imageProviders/codex.js +2 -1
- package/app/open-sse/handlers/imageProviders/comfyui.js +5 -1
- package/app/open-sse/handlers/imageProviders/falAi.js +2 -1
- package/app/open-sse/handlers/imageProviders/gemini.js +2 -1
- package/app/open-sse/handlers/imageProviders/huggingface.js +2 -1
- package/app/open-sse/handlers/imageProviders/index.js +5 -0
- package/app/open-sse/handlers/imageProviders/nanobanana.js +4 -2
- package/app/open-sse/handlers/imageProviders/openai.js +15 -22
- package/app/open-sse/handlers/imageProviders/runwayml.js +2 -1
- package/app/open-sse/handlers/imageProviders/sdwebui.js +4 -1
- package/app/open-sse/handlers/imageProviders/stabilityAi.js +2 -1
- package/app/open-sse/handlers/responsesHandler.js +3 -7
- package/app/open-sse/handlers/search/chatSearch.js +13 -14
- package/app/open-sse/handlers/sttCore.js +2 -3
- package/app/open-sse/handlers/ttsProviders/gemini.js +14 -3
- package/app/open-sse/handlers/ttsProviders/index.js +4 -2
- package/app/open-sse/handlers/ttsProviders/openai.js +4 -1
- package/app/open-sse/handlers/ttsProviders/openrouter.js +7 -4
- package/app/open-sse/index.js +0 -3
- package/app/open-sse/providers/REGISTRY_TEMPLATE.js +98 -0
- package/app/open-sse/providers/capabilities.js +291 -0
- package/app/open-sse/providers/index.js +51 -0
- package/app/open-sse/providers/models/helpers.js +20 -0
- package/app/open-sse/providers/models/namePatterns.js +33 -0
- package/app/open-sse/providers/models/schema.js +31 -0
- package/app/{src/shared/constants → open-sse/providers}/pricing.js +8 -5
- package/app/open-sse/providers/registry/alicode-intl.js +30 -0
- package/app/open-sse/providers/registry/alicode.js +31 -0
- package/app/open-sse/providers/registry/anthropic.js +32 -0
- package/app/open-sse/providers/registry/antigravity.js +85 -0
- package/app/open-sse/providers/registry/assemblyai.js +38 -0
- package/app/open-sse/providers/registry/aws-polly.js +45 -0
- package/app/open-sse/providers/registry/azure.js +21 -0
- package/app/open-sse/providers/registry/black-forest-labs.js +32 -0
- package/app/open-sse/providers/registry/blackbox.js +41 -0
- package/app/open-sse/providers/registry/brave-search.js +35 -0
- package/app/open-sse/providers/registry/byteplus.js +35 -0
- package/app/open-sse/providers/registry/cartesia.js +36 -0
- package/app/open-sse/providers/registry/cerebras.js +31 -0
- package/app/open-sse/providers/registry/chutes.js +24 -0
- package/app/open-sse/providers/registry/claude.js +89 -0
- package/app/open-sse/providers/registry/cline.js +51 -0
- package/app/open-sse/providers/registry/clinepass.js +57 -0
- package/app/open-sse/providers/registry/cloudflare-ai.js +55 -0
- package/app/open-sse/providers/registry/codebuddy-cn.js +77 -0
- package/app/open-sse/providers/registry/codex.js +95 -0
- package/app/open-sse/providers/registry/cohere.js +25 -0
- package/app/open-sse/providers/registry/comfyui.js +20 -0
- package/app/open-sse/providers/registry/commandcode.js +43 -0
- package/app/open-sse/providers/registry/coqui.js +30 -0
- package/app/open-sse/providers/registry/cursor.js +58 -0
- package/app/open-sse/providers/registry/deepgram.js +33 -0
- package/app/open-sse/providers/registry/deepseek.js +51 -0
- package/app/open-sse/providers/registry/edge-tts.js +24 -0
- package/app/open-sse/providers/registry/elevenlabs.js +35 -0
- package/app/open-sse/providers/registry/exa.js +50 -0
- package/app/open-sse/providers/registry/fal-ai.js +34 -0
- package/app/open-sse/providers/registry/firecrawl.js +34 -0
- package/app/open-sse/providers/registry/fireworks.js +29 -0
- package/app/open-sse/providers/registry/gemini-cli.js +58 -0
- package/app/open-sse/providers/registry/gemini.js +81 -0
- package/app/open-sse/providers/registry/github.js +82 -0
- package/app/open-sse/providers/registry/gitlab.js +32 -0
- package/app/open-sse/providers/registry/glm-cn.js +35 -0
- package/app/open-sse/providers/registry/glm.js +58 -0
- package/app/open-sse/providers/registry/google-pse.js +35 -0
- package/app/open-sse/providers/registry/google-tts.js +24 -0
- package/app/open-sse/providers/registry/grok-web.js +39 -0
- package/app/open-sse/providers/registry/groq.js +37 -0
- package/app/open-sse/providers/registry/huggingface.js +34 -0
- package/app/open-sse/providers/registry/hyperbolic.js +35 -0
- package/app/open-sse/providers/registry/iflow.js +52 -0
- package/app/open-sse/providers/registry/index.js +198 -0
- package/app/open-sse/providers/registry/inworld.js +36 -0
- package/app/open-sse/providers/registry/jina-ai.js +42 -0
- package/app/open-sse/providers/registry/jina-reader.js +34 -0
- package/app/open-sse/providers/registry/kilocode.js +51 -0
- package/app/open-sse/providers/registry/kimchi.js +49 -0
- package/app/open-sse/providers/registry/kimi-coding.js +65 -0
- package/app/open-sse/providers/registry/kimi.js +56 -0
- package/app/open-sse/providers/registry/kiro.js +96 -0
- package/app/open-sse/providers/registry/linkup.js +34 -0
- package/app/open-sse/providers/registry/local-device.js +24 -0
- package/app/open-sse/providers/registry/mimo-free.js +24 -0
- package/app/open-sse/providers/registry/minimax-cn.js +76 -0
- package/app/open-sse/providers/registry/minimax.js +83 -0
- package/app/open-sse/providers/registry/mistral.js +31 -0
- package/app/open-sse/providers/registry/mmf.js +19 -0
- package/app/open-sse/providers/registry/nanobanana.js +35 -0
- package/app/open-sse/providers/registry/nebius.js +27 -0
- package/app/open-sse/providers/registry/nvidia.js +43 -0
- package/app/open-sse/providers/registry/ollama-local.js +19 -0
- package/app/open-sse/providers/registry/ollama.js +36 -0
- package/app/open-sse/providers/registry/openai.js +81 -0
- package/app/open-sse/providers/registry/opencode-go.js +41 -0
- package/app/open-sse/providers/registry/opencode.js +25 -0
- package/app/open-sse/providers/registry/openrouter.js +60 -0
- package/app/open-sse/providers/registry/perplexity-web.js +33 -0
- package/app/open-sse/providers/registry/perplexity.js +35 -0
- package/app/open-sse/providers/registry/playht.js +36 -0
- package/app/open-sse/providers/registry/qoder.js +54 -0
- package/app/open-sse/providers/registry/qwen.js +33 -0
- package/app/open-sse/providers/registry/recraft.js +24 -0
- package/app/open-sse/providers/registry/runwayml.js +30 -0
- package/app/open-sse/providers/registry/sdwebui.js +20 -0
- package/app/open-sse/providers/registry/searchapi.js +35 -0
- package/app/open-sse/providers/registry/searxng.js +33 -0
- package/app/open-sse/providers/registry/serper.js +35 -0
- package/app/open-sse/providers/registry/siliconflow.js +39 -0
- package/app/open-sse/providers/registry/stability-ai.js +31 -0
- package/app/open-sse/providers/registry/tavily.js +50 -0
- package/app/open-sse/providers/registry/together.js +31 -0
- package/app/open-sse/providers/registry/topaz.js +19 -0
- package/app/open-sse/providers/registry/tortoise.js +30 -0
- package/app/open-sse/providers/registry/venice.js +56 -0
- package/app/open-sse/providers/registry/vercel-ai-gateway.js +41 -0
- package/app/open-sse/providers/registry/vertex-partner.js +29 -0
- package/app/open-sse/providers/registry/vertex.js +32 -0
- package/app/open-sse/providers/registry/volcengine-ark.js +35 -0
- package/app/open-sse/providers/registry/voyage-ai.js +30 -0
- package/app/open-sse/providers/registry/xai.js +43 -0
- package/app/open-sse/providers/registry/xiaomi-mimo.js +46 -0
- package/app/open-sse/providers/registry/xiaomi-tokenplan.js +63 -0
- package/app/open-sse/providers/registry/youcom.js +35 -0
- package/app/open-sse/providers/schema.js +76 -0
- package/app/open-sse/providers/shared.js +67 -0
- package/app/open-sse/rtk/caveman.js +2 -93
- package/app/open-sse/rtk/constants.js +6 -2
- package/app/open-sse/rtk/filters/find.js +2 -3
- package/app/open-sse/rtk/headroom.js +215 -0
- package/app/open-sse/rtk/ponytail.js +9 -0
- package/app/open-sse/rtk/ponytailPrompt.js +52 -0
- package/app/open-sse/rtk/systemInject.js +98 -0
- package/app/open-sse/services/clinepassModels.js +63 -0
- package/app/open-sse/services/combo.js +375 -2
- package/app/open-sse/services/copilotModels.js +155 -0
- package/app/open-sse/services/kimchiModels.js +176 -0
- package/app/open-sse/services/model.js +22 -145
- package/app/open-sse/services/oauthCredentialManager.js +10 -5
- package/app/open-sse/services/provider.js +17 -204
- package/app/open-sse/services/qoderModels.js +2 -2
- package/app/open-sse/services/tokenRefresh/dedup.js +31 -0
- package/app/open-sse/services/tokenRefresh/providers.js +624 -0
- package/app/open-sse/services/tokenRefresh.js +97 -735
- package/app/open-sse/services/usage/claude.js +147 -0
- package/app/open-sse/services/usage/codebuddy-cn.js +138 -0
- package/app/open-sse/services/usage/codex.js +201 -0
- package/app/open-sse/services/usage/github.js +100 -0
- package/app/open-sse/services/usage/google.js +279 -0
- package/app/open-sse/services/usage/kiro.js +188 -0
- package/app/open-sse/services/usage/minimax.js +234 -0
- package/app/open-sse/services/usage/misc.js +269 -0
- package/app/open-sse/services/usage/shared.js +70 -0
- package/app/open-sse/services/usage.js +40 -1295
- package/app/open-sse/shared/clineAuth.js +37 -0
- package/app/open-sse/shared/machineId.js +19 -0
- package/app/open-sse/shared/qoder/constants.js +64 -0
- package/app/open-sse/shared/qoder/cosy.js +175 -0
- package/app/open-sse/shared/qoder/encoding.js +55 -0
- package/app/open-sse/translator/concerns/chunk.js +11 -0
- package/app/open-sse/translator/concerns/finishReason.js +63 -0
- package/app/open-sse/translator/concerns/image.js +124 -0
- package/app/open-sse/translator/concerns/json.js +5 -0
- package/app/open-sse/translator/concerns/message.js +7 -0
- package/app/open-sse/translator/concerns/modality.js +155 -0
- package/app/open-sse/translator/concerns/paramSupport.js +44 -0
- package/app/open-sse/translator/concerns/prefetch.js +96 -0
- package/app/open-sse/translator/concerns/reasoning.js +24 -0
- package/app/open-sse/translator/concerns/thinking.js +53 -0
- package/app/open-sse/translator/concerns/thinkingUnified.js +271 -0
- package/app/open-sse/translator/{helpers/toolCallHelper.js → concerns/toolCall.js} +5 -0
- package/app/open-sse/translator/concerns/usage.js +69 -0
- package/app/open-sse/translator/formats/claude.js +351 -0
- package/app/open-sse/translator/{helpers/geminiHelper.js → formats/gemini.js} +24 -16
- package/app/open-sse/translator/{helpers/maxTokensHelper.js → formats/maxTokens.js} +4 -1
- package/app/open-sse/translator/{helpers/openaiHelper.js → formats/openai.js} +35 -31
- package/app/open-sse/translator/{helpers/responsesApiHelper.js → formats/responsesApi.js} +17 -15
- package/app/open-sse/translator/index.js +89 -56
- package/app/open-sse/translator/request/antigravity-to-openai.js +40 -27
- package/app/open-sse/translator/request/claude-to-kiro.js +466 -0
- package/app/open-sse/translator/request/claude-to-openai.js +61 -33
- package/app/open-sse/translator/request/gemini-to-openai.js +18 -13
- package/app/open-sse/translator/request/openai-responses.js +39 -30
- package/app/open-sse/translator/request/openai-to-claude.js +59 -90
- package/app/open-sse/translator/request/openai-to-commandcode.js +23 -21
- package/app/open-sse/translator/request/openai-to-cursor.js +25 -23
- package/app/open-sse/translator/request/openai-to-gemini.js +42 -46
- package/app/open-sse/translator/request/openai-to-kiro.js +56 -36
- package/app/open-sse/translator/request/openai-to-ollama.js +16 -13
- package/app/open-sse/translator/response/claude-to-openai.js +51 -80
- package/app/open-sse/translator/response/commandcode-to-openai.js +25 -38
- package/app/open-sse/translator/response/cursor-to-openai.js +2 -2
- package/app/open-sse/translator/response/gemini-to-openai.js +66 -164
- package/app/open-sse/translator/response/kiro-to-claude.js +261 -0
- package/app/open-sse/translator/response/kiro-to-openai.js +37 -72
- package/app/open-sse/translator/response/ollama-to-openai.js +21 -39
- package/app/open-sse/translator/response/openai-responses.js +68 -123
- package/app/open-sse/translator/response/openai-to-antigravity.js +7 -6
- package/app/open-sse/translator/response/openai-to-claude.js +18 -19
- package/app/open-sse/translator/schema/blocks.js +43 -0
- package/app/open-sse/translator/schema/defaults.js +7 -0
- package/app/open-sse/translator/schema/finishReasons.js +27 -0
- package/app/open-sse/translator/schema/index.js +8 -0
- package/app/open-sse/translator/schema/roles.js +16 -0
- package/app/open-sse/utils/bypassHandler.js +18 -3
- package/app/open-sse/utils/claudeCloaking.js +15 -5
- package/app/open-sse/utils/claudeSignature.js +41 -0
- package/app/open-sse/utils/reasoningContentInjector.js +4 -7
- package/app/open-sse/utils/responsesStreamHelpers.js +1 -0
- package/app/open-sse/utils/sessionManager.js +149 -0
- package/app/open-sse/utils/sse.js +14 -0
- package/app/open-sse/utils/sseConstants.js +23 -0
- package/app/open-sse/utils/stream.js +47 -39
- package/app/open-sse/utils/streamHandler.js +8 -6
- package/app/open-sse/utils/usageTracking.js +93 -18
- package/app/package.json +5 -2
- package/app/public/i18n/literals/zh-CN.json +1 -0
- package/app/public/providers/clinepass.png +0 -0
- package/app/public/providers/codebuddy-cn.png +0 -0
- package/app/public/providers/kimchi.png +0 -0
- package/app/public/providers/kimchi.svg +4 -0
- package/app/public/providers/mimo-free.png +0 -0
- package/app/server.js +1 -1
- package/app/src/mitm/cert/generate.js +2 -2
- package/app/src/mitm/cert/rootCA.js +1 -1
- package/app/src/mitm/config.js +3 -1
- package/app/src/mitm/manager.js +29 -2
- package/app/src/shared/constants/cliTools.js +23 -25
- package/app/src/shared/constants/config.js +28 -18
- package/app/src/shared/constants/coworkPlugins.js +1 -4
- package/app/src/shared/constants/mitmToolHosts.js +1 -1
- package/app/src/shared/constants/models.js +9 -0
- package/app/src/shared/constants/providers.js +65 -180
- package/app/src/shared/constants/providersDisplay.js +12 -0
- package/package.json +1 -1
- package/app/.next/server/chunks/1476.js +0 -1
- package/app/.next/server/chunks/1498.js +0 -1
- package/app/.next/server/chunks/1699.js +0 -1
- package/app/.next/server/chunks/2569.js +0 -1
- package/app/.next/server/chunks/3104.js +0 -43
- package/app/.next/server/chunks/3110.js +0 -67
- package/app/.next/server/chunks/3245.js +0 -1
- package/app/.next/server/chunks/3588.js +0 -1
- package/app/.next/server/chunks/4013.js +0 -1
- package/app/.next/server/chunks/4177.js +0 -1
- package/app/.next/server/chunks/4389.js +0 -1
- package/app/.next/server/chunks/4404.js +0 -1
- package/app/.next/server/chunks/5681.js +0 -1
- package/app/.next/server/chunks/5859.js +0 -1
- package/app/.next/server/chunks/6811.js +0 -1
- package/app/.next/server/chunks/7341.js +0 -1
- package/app/.next/server/chunks/7828.js +0 -1
- package/app/.next/server/chunks/7879.js +0 -10
- package/app/.next/server/chunks/8255.js +0 -1
- package/app/.next/server/chunks/9295.js +0 -1
- package/app/.next/server/chunks/9396.js +0 -44
- package/app/.next/server/chunks/9489.js +0 -1
- package/app/.next/server/chunks/9807.js +0 -7
- package/app/.next/static/chunks/1321-5ac5b0e0510e7bc1.js +0 -1
- package/app/.next/static/chunks/4406-9357c0d7c2c19d9b.js +0 -53
- package/app/.next/static/chunks/5497-f16d2c74532d4ad3.js +0 -7
- package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-1271df5d411ef013.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-56d9eac21ab09df1.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-770486eb0371891f.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page-e680a27ecacbfd49.js +0 -59
- package/app/.next/static/chunks/app/(dashboard)/dashboard/page-68288fb612a60026.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-bc4b466a331dbb31.js +0 -6
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-de08b6b9ad238de4.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-1389351bfdd842f9.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-d6fce7b8e1d3fdec.js +0 -3
- package/app/.next/static/chunks/app/(dashboard)/layout-5d6111c3c8c1af01.js +0 -1
- package/app/.next/static/chunks/app/_global-error/page-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-app/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-app-v2/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-ide/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-targets/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-tools/import/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/antigravity-tools/import-refresh-tokens/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/auth/login/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/auth/logout/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/auth/oidc/callback/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/auth/oidc/start/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/auth/oidc/test/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/auth/status/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/all-statuses/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/jcode-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/combos/[id]/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/combos/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/donate/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/health/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/init/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/internal/account-health/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/internal/request-detail/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/internal/usage/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/keys/[id]/reset-usage/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/keys/[id]/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/keys/[id]/usage/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/keys/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/locale/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/mcp/[plugin]/message/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/mcp/[plugin]/sse/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/models/alias/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/models/availability/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/models/custom/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/models/disabled/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/models/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/models/test/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/codex/import-token/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/pricing/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/providers/client/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/providers/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/providers/suggested-models/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/providers/test-batch/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/providers/validate/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/settings/database/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/settings/database/selective/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/settings/proxy-test/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/settings/require-login/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/settings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/shutdown/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/tags/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/translator/console-logs/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/translator/load/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/translator/save/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/translator/send/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/translator/translate/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/disable/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/enable/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/status/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/usage/chart/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/usage/history/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/usage/logs/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/usage/providers/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/usage/report/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/usage/request-details/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/usage/request-logs/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/usage/stats/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/usage/stream/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/api/chat/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/voices/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/embeddings/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/images/generations/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/[kind]/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/info/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/responses/compact/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/responses/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/search/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1/web/fetch/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/version/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/version/shutdown/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/api/version/update/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/callback/page-1ac4b69a5de26857.js +0 -1
- package/app/.next/static/chunks/app/dashboard/settings/pricing/page-29c50a560c8c4d2b.js +0 -1
- package/app/.next/static/chunks/app/login/page-98aaabbf53ef75f6.js +0 -1
- package/app/.next/static/chunks/app/manifest.webmanifest/route-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/app/page-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-663014002ada02ea.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-663014002ada02ea.js +0 -1
- package/app/.next/static/css/d73c8ccb42eb9a7d.css +0 -1
- package/app/.next/static/zOWV4f8WCIf4AVjdpAv5I/_buildManifest.js +0 -1
- package/app/open-sse/translator/helpers/claudeHelper.js +0 -216
- package/app/open-sse/translator/helpers/imageHelper.js +0 -34
- package/app/open-sse/translator/request/openai-to-kiro.old.js +0 -278
- /package/app/.next/static/{zOWV4f8WCIf4AVjdpAv5I → 27Vk-YuF5IVK9FBSw9u-7}/_ssgManifest.js +0 -0
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { translateResponse, initState } from "../translator/index.js";
|
|
2
2
|
import { FORMATS } from "../translator/formats.js";
|
|
3
3
|
import { trackPendingRequest, appendRequestLog } from "@/lib/usageDb.js";
|
|
4
|
-
import { extractUsage, hasValidUsage, estimateUsage, logUsage, addBufferToUsage, filterUsageForFormat, COLORS } from "./usageTracking.js";
|
|
4
|
+
import { extractUsage, mergeUsage, hasValidUsage, estimateUsage, logUsage, addBufferToUsage, filterUsageForFormat, COLORS } from "./usageTracking.js";
|
|
5
5
|
import { parseSSELine, hasValuableContent, fixInvalidId, formatSSE } from "./streamHelpers.js";
|
|
6
6
|
import { getOpenAIResponsesEventName, isOpenAIResponsesTerminalEvent, formatIncompleteOpenAIResponsesStreamFailure } from "./responsesStreamHelpers.js";
|
|
7
7
|
import { dbg, isDebugEnabled } from "./debugLog.js";
|
|
8
8
|
|
|
9
|
+
import { SSE_DONE, SSE_HEADERS, SSE_HEADERS_NO_BUFFER } from "./sseConstants.js";
|
|
10
|
+
|
|
9
11
|
export { COLORS, formatSSE };
|
|
12
|
+
export { SSE_DONE, SSE_HEADERS, SSE_HEADERS_NO_BUFFER };
|
|
10
13
|
|
|
11
14
|
// sharedEncoder is stateless — safe to share across streams
|
|
12
15
|
const sharedEncoder = new TextEncoder();
|
|
@@ -68,6 +71,7 @@ export function createSSEStream(options = {}) {
|
|
|
68
71
|
let currentOpenAIResponsesEvent = null;
|
|
69
72
|
let openAIResponsesTerminalSeen = false;
|
|
70
73
|
let openAIResponsesDoneSent = false;
|
|
74
|
+
let streamDoneSent = false; // track duplicate [DONE] across transform + flush
|
|
71
75
|
|
|
72
76
|
return new TransformStream({
|
|
73
77
|
transform(chunk, controller) {
|
|
@@ -126,6 +130,20 @@ export function createSSEStream(options = {}) {
|
|
|
126
130
|
}
|
|
127
131
|
}
|
|
128
132
|
|
|
133
|
+
// Strip empty tool_calls arrays that break AI SDK reasoning tracking.
|
|
134
|
+
// Some providers (e.g. CodeBuddy CN) include `"tool_calls": []` in
|
|
135
|
+
// every streaming delta. @ai-sdk/openai-compatible checks
|
|
136
|
+
// `delta.tool_calls != null` — an empty array passes this check,
|
|
137
|
+
// causing premature `reasoning-end` on every chunk.
|
|
138
|
+
if (parsed?.choices) {
|
|
139
|
+
for (const choice of parsed.choices) {
|
|
140
|
+
if (choice.delta?.tool_calls && Array.isArray(choice.delta.tool_calls) && choice.delta.tool_calls.length === 0) {
|
|
141
|
+
delete choice.delta.tool_calls;
|
|
142
|
+
fieldsInjected = true;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
129
147
|
if (!hasValuableContent(parsed, FORMATS.OPENAI)) {
|
|
130
148
|
continue;
|
|
131
149
|
}
|
|
@@ -144,16 +162,7 @@ export function createSSEStream(options = {}) {
|
|
|
144
162
|
|
|
145
163
|
const extracted = extractUsage(parsed);
|
|
146
164
|
if (extracted) {
|
|
147
|
-
|
|
148
|
-
// and output_tokens in message_delta — both must be preserved.
|
|
149
|
-
usage = usage ? {
|
|
150
|
-
prompt_tokens: Math.max(usage.prompt_tokens || 0, extracted.prompt_tokens || 0),
|
|
151
|
-
completion_tokens: Math.max(usage.completion_tokens || 0, extracted.completion_tokens || 0),
|
|
152
|
-
cache_read_input_tokens: extracted.cache_read_input_tokens ?? usage.cache_read_input_tokens,
|
|
153
|
-
cache_creation_input_tokens: extracted.cache_creation_input_tokens ?? usage.cache_creation_input_tokens,
|
|
154
|
-
cached_tokens: extracted.cached_tokens ?? usage.cached_tokens,
|
|
155
|
-
reasoning_tokens: extracted.reasoning_tokens ?? usage.reasoning_tokens
|
|
156
|
-
} : extracted;
|
|
165
|
+
usage = mergeUsage(usage, extracted);
|
|
157
166
|
}
|
|
158
167
|
|
|
159
168
|
const isFinishChunk = parsed.choices?.[0]?.finish_reason;
|
|
@@ -172,7 +181,12 @@ export function createSSEStream(options = {}) {
|
|
|
172
181
|
output = `data: ${JSON.stringify(parsed)}\n`;
|
|
173
182
|
injectedUsage = true;
|
|
174
183
|
}
|
|
175
|
-
} catch {
|
|
184
|
+
} catch {
|
|
185
|
+
// Skip non-JSON data lines silently — don't forward garbage to clients.
|
|
186
|
+
// Upstream providers sometimes return plain-text errors (HTML, rate-limit
|
|
187
|
+
// messages) in the SSE stream that would break downstream JSON decoders.
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
176
190
|
}
|
|
177
191
|
|
|
178
192
|
if (!injectedUsage) {
|
|
@@ -217,9 +231,12 @@ export function createSSEStream(options = {}) {
|
|
|
217
231
|
sseEmittedCount++;
|
|
218
232
|
}
|
|
219
233
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
234
|
+
if (keepsOpenAIResponsesFormat && !streamDoneSent) {
|
|
235
|
+
const doneOutput = "data: [DONE]\n\n";
|
|
236
|
+
reqLogger?.appendConvertedChunk?.(doneOutput);
|
|
237
|
+
controller.enqueue(sharedEncoder.encode(doneOutput));
|
|
238
|
+
}
|
|
239
|
+
streamDoneSent = true;
|
|
223
240
|
if (keepsOpenAIResponsesFormat) openAIResponsesDoneSent = true;
|
|
224
241
|
continue;
|
|
225
242
|
}
|
|
@@ -234,7 +251,7 @@ export function createSSEStream(options = {}) {
|
|
|
234
251
|
totalContentLength += parsed.delta.thinking.length;
|
|
235
252
|
accumulatedThinking += parsed.delta.thinking;
|
|
236
253
|
}
|
|
237
|
-
|
|
254
|
+
|
|
238
255
|
// OpenAI format - content
|
|
239
256
|
if (parsed.choices?.[0]?.delta?.content) {
|
|
240
257
|
totalContentLength += parsed.choices[0].delta.content.length;
|
|
@@ -246,11 +263,6 @@ export function createSSEStream(options = {}) {
|
|
|
246
263
|
accumulatedThinking += parsed.choices[0].delta.reasoning_content;
|
|
247
264
|
}
|
|
248
265
|
|
|
249
|
-
if (parsed.type === "response.output_text.delta" && typeof parsed.delta === "string") {
|
|
250
|
-
totalContentLength += parsed.delta.length;
|
|
251
|
-
accumulatedContent += parsed.delta;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
266
|
// Gemini format
|
|
255
267
|
if (parsed.candidates?.[0]?.content?.parts) {
|
|
256
268
|
for (const part of parsed.candidates[0].content.parts) {
|
|
@@ -266,19 +278,9 @@ export function createSSEStream(options = {}) {
|
|
|
266
278
|
}
|
|
267
279
|
}
|
|
268
280
|
|
|
269
|
-
// Extract usage
|
|
270
|
-
// output_tokens in message_delta; both must survive to produce correct totals).
|
|
281
|
+
// Extract usage
|
|
271
282
|
const extracted = extractUsage(parsed);
|
|
272
|
-
if (extracted)
|
|
273
|
-
state.usage = state.usage ? {
|
|
274
|
-
prompt_tokens: Math.max(state.usage.prompt_tokens || 0, extracted.prompt_tokens || 0),
|
|
275
|
-
completion_tokens: Math.max(state.usage.completion_tokens || 0, extracted.completion_tokens || 0),
|
|
276
|
-
cache_read_input_tokens: extracted.cache_read_input_tokens ?? state.usage.cache_read_input_tokens,
|
|
277
|
-
cache_creation_input_tokens: extracted.cache_creation_input_tokens ?? state.usage.cache_creation_input_tokens,
|
|
278
|
-
cached_tokens: extracted.cached_tokens ?? state.usage.cached_tokens,
|
|
279
|
-
reasoning_tokens: extracted.reasoning_tokens ?? state.usage.reasoning_tokens
|
|
280
|
-
} : extracted;
|
|
281
|
-
}
|
|
283
|
+
if (extracted) state.usage = mergeUsage(state.usage, extracted); // Keep original usage for logging
|
|
282
284
|
|
|
283
285
|
// Responses same-format passthrough: re-emit with original event framing
|
|
284
286
|
if (keepsOpenAIResponsesFormat && openAIResponsesEventName) {
|
|
@@ -359,14 +361,18 @@ export function createSSEStream(options = {}) {
|
|
|
359
361
|
} else {
|
|
360
362
|
appendRequestLog({ model, provider, connectionId, tokens: null, status: "200 OK" }).catch(() => { });
|
|
361
363
|
}
|
|
362
|
-
|
|
364
|
+
|
|
363
365
|
// IMPORTANT: In passthrough mode we still must terminate the SSE stream.
|
|
364
366
|
// Some clients (e.g. OpenClaw) expect the OpenAI-style sentinel:
|
|
365
367
|
// data: [DONE]\n\n
|
|
366
368
|
// Without it they can hang until timeout and trigger failover.
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
369
|
+
// Gemini-family clients (Antigravity, Vertex, Gemini) reject this sentinel with 400 syntax errors.
|
|
370
|
+
const isGeminiFamily = provider === "antigravity" || provider === "gemini" || provider === "vertex";
|
|
371
|
+
if (!streamDoneSent && !isGeminiFamily) {
|
|
372
|
+
const doneOutput = "data: [DONE]\n\n";
|
|
373
|
+
reqLogger?.appendConvertedChunk?.(doneOutput);
|
|
374
|
+
controller.enqueue(sharedEncoder.encode(doneOutput));
|
|
375
|
+
}
|
|
370
376
|
|
|
371
377
|
if (onStreamComplete) {
|
|
372
378
|
onStreamComplete({
|
|
@@ -427,10 +433,12 @@ export function createSSEStream(options = {}) {
|
|
|
427
433
|
openAIResponsesTerminalSeen = true;
|
|
428
434
|
}
|
|
429
435
|
|
|
430
|
-
if (
|
|
436
|
+
if (keepsOpenAIResponsesFormat && !openAIResponsesDoneSent && !streamDoneSent) {
|
|
431
437
|
const doneOutput = "data: [DONE]\n\n";
|
|
432
438
|
reqLogger?.appendConvertedChunk?.(doneOutput);
|
|
433
439
|
controller.enqueue(sharedEncoder.encode(doneOutput));
|
|
440
|
+
openAIResponsesDoneSent = true;
|
|
441
|
+
streamDoneSent = true;
|
|
434
442
|
}
|
|
435
443
|
|
|
436
444
|
if (!hasValidUsage(state?.usage) && totalContentLength > 0) {
|
|
@@ -442,7 +450,7 @@ export function createSSEStream(options = {}) {
|
|
|
442
450
|
} else {
|
|
443
451
|
appendRequestLog({ model, provider, connectionId, tokens: null, status: "200 OK" }).catch(() => { });
|
|
444
452
|
}
|
|
445
|
-
|
|
453
|
+
|
|
446
454
|
if (onStreamComplete) {
|
|
447
455
|
onStreamComplete({
|
|
448
456
|
content: accumulatedContent,
|
|
@@ -153,7 +153,10 @@ export function createDisconnectAwareStream(transformStream, streamController, s
|
|
|
153
153
|
controller.enqueue(value);
|
|
154
154
|
} catch (error) {
|
|
155
155
|
const wasConnected = streamController.isConnected();
|
|
156
|
-
|
|
156
|
+
// Controller already closed = downstream ended; not an upstream error, skip noisy log.
|
|
157
|
+
const msg0 = error?.message || "";
|
|
158
|
+
const isControllerClosed = msg0.includes("already closed") || msg0.includes("Invalid state");
|
|
159
|
+
if (!isControllerClosed) streamController.handleError(error);
|
|
157
160
|
reader.cancel().catch(() => {});
|
|
158
161
|
writer.abort().catch(() => {});
|
|
159
162
|
|
|
@@ -212,7 +215,7 @@ export function createDisconnectAwareStream(transformStream, streamController, s
|
|
|
212
215
|
* @param {TransformStream} transformStream - Transform stream for SSE
|
|
213
216
|
* @param {object} streamController - Stream controller from createStreamController
|
|
214
217
|
*/
|
|
215
|
-
export function pipeWithDisconnect(providerResponse, transformStream, streamController, streamWatchdogEnabled = true, onAbortTerminal = null) {
|
|
218
|
+
export function pipeWithDisconnect(providerResponse, transformStream, streamController, streamWatchdogEnabled = true, onAbortTerminal = null, stallTimeoutMs = STREAM_STALL_TIMEOUT_MS) {
|
|
216
219
|
let stallTimer = null;
|
|
217
220
|
let chunkCount = 0;
|
|
218
221
|
let totalBytes = 0;
|
|
@@ -227,10 +230,10 @@ export function pipeWithDisconnect(providerResponse, transformStream, streamCont
|
|
|
227
230
|
clearStall();
|
|
228
231
|
stallTimer = setTimeout(() => {
|
|
229
232
|
stallTimer = null;
|
|
230
|
-
dbg(tag, `STALL TIMEOUT ${
|
|
233
|
+
dbg(tag, `STALL TIMEOUT ${stallTimeoutMs}ms | chunks=${chunkCount} | bytes=${totalBytes} | sinceLast=${Date.now() - lastChunkAt}ms`);
|
|
231
234
|
streamController.handleError?.(new Error("stream stall timeout"));
|
|
232
235
|
streamController.abort?.();
|
|
233
|
-
},
|
|
236
|
+
}, stallTimeoutMs);
|
|
234
237
|
};
|
|
235
238
|
|
|
236
239
|
// Wrap controller so every termination path clears the stall timer.
|
|
@@ -247,7 +250,7 @@ export function pipeWithDisconnect(providerResponse, transformStream, streamCont
|
|
|
247
250
|
};
|
|
248
251
|
|
|
249
252
|
armStall();
|
|
250
|
-
dbg(tag, `pipe start | watchdog=${streamWatchdogEnabled ? `on stallTimeout=${
|
|
253
|
+
dbg(tag, `pipe start | watchdog=${streamWatchdogEnabled ? `on stallTimeout=${stallTimeoutMs}ms` : "off (legacy)"}`);
|
|
251
254
|
|
|
252
255
|
const upstreamTap = new TransformStream({
|
|
253
256
|
transform(chunk, controller) {
|
|
@@ -277,4 +280,3 @@ export function pipeWithDisconnect(providerResponse, transformStream, streamCont
|
|
|
277
280
|
onAbortTerminal
|
|
278
281
|
);
|
|
279
282
|
}
|
|
280
|
-
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* Token Usage Tracking - Extract, normalize, estimate and log token usage
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { appendRequestLog } from "@/lib/usageDb.js";
|
|
6
5
|
import { FORMATS } from "../translator/formats.js";
|
|
7
6
|
|
|
8
7
|
// ANSI color codes
|
|
@@ -142,6 +141,68 @@ export function normalizeUsage(usage) {
|
|
|
142
141
|
return normalized;
|
|
143
142
|
}
|
|
144
143
|
|
|
144
|
+
/**
|
|
145
|
+
* Canonicalize usage into ONE storage/cost convention so token counts and cost
|
|
146
|
+
* are consistent across providers:
|
|
147
|
+
* prompt_tokens = total input INCLUDING cache read + cache creation
|
|
148
|
+
* cached_tokens = cache-read portion (subset of prompt_tokens)
|
|
149
|
+
* cache_creation_input_tokens = cache-write portion (subset of prompt_tokens)
|
|
150
|
+
* completion_tokens, reasoning_tokens, total_tokens
|
|
151
|
+
*
|
|
152
|
+
* Discriminator: Claude reports cache_read_input_tokens with a prompt that
|
|
153
|
+
* EXCLUDES cache, so we fold cache into prompt. OpenAI/Gemini report
|
|
154
|
+
* cached_tokens already counted inside prompt, so we pass through. Idempotent:
|
|
155
|
+
* once folded the output carries cached_tokens (not cache_read_input_tokens),
|
|
156
|
+
* so re-running takes the passthrough branch and does not double-add.
|
|
157
|
+
*
|
|
158
|
+
* @param {object} usage - a normalizeUsage()-shaped object
|
|
159
|
+
* @returns {object|null} canonical token object, or null for invalid input
|
|
160
|
+
*/
|
|
161
|
+
export function canonicalizeUsage(usage) {
|
|
162
|
+
if (!usage || typeof usage !== "object" || Array.isArray(usage)) return null;
|
|
163
|
+
|
|
164
|
+
const num = (v) => (Number.isFinite(Number(v)) ? Number(v) : 0);
|
|
165
|
+
const completion = num(usage.completion_tokens ?? usage.output_tokens);
|
|
166
|
+
const reasoning = num(usage.reasoning_tokens);
|
|
167
|
+
// Fall back to the nested prompt_tokens_details.cache_creation_tokens shape
|
|
168
|
+
// (buildUsage()'s OpenAI-forwarding format) when the top-level field is
|
|
169
|
+
// absent, so callers that pass a buildUsage() object through don't silently
|
|
170
|
+
// drop cache_creation.
|
|
171
|
+
const cacheCreation = num(usage.cache_creation_input_tokens ?? usage.prompt_tokens_details?.cache_creation_tokens);
|
|
172
|
+
|
|
173
|
+
let prompt = num(usage.prompt_tokens ?? usage.input_tokens);
|
|
174
|
+
let cached;
|
|
175
|
+
|
|
176
|
+
// Claude path: prompt excludes cache; cache_read_input_tokens and/or
|
|
177
|
+
// cache_creation_input_tokens are separate. A cache-miss "first write" only
|
|
178
|
+
// carries cache_creation_input_tokens (no cache_read_input_tokens yet), so
|
|
179
|
+
// check both fields — otherwise a first-write request falls through to the
|
|
180
|
+
// OpenAI passthrough branch below and cache_creation never gets folded in.
|
|
181
|
+
// Guard on the absence of `cached_tokens`: our own canonical output always
|
|
182
|
+
// sets that key (even to 0), so re-running canonicalizeUsage on an already-
|
|
183
|
+
// folded result takes the passthrough branch instead of folding again.
|
|
184
|
+
if (usage.cached_tokens === undefined &&
|
|
185
|
+
(usage.cache_read_input_tokens !== undefined || usage.cache_creation_input_tokens !== undefined)) {
|
|
186
|
+
cached = num(usage.cache_read_input_tokens);
|
|
187
|
+
prompt = prompt + cached + cacheCreation;
|
|
188
|
+
} else {
|
|
189
|
+
// OpenAI/Gemini path (or already-canonical input): prompt already includes cached_tokens.
|
|
190
|
+
cached = num(usage.cached_tokens);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
const result = {
|
|
194
|
+
prompt_tokens: prompt,
|
|
195
|
+
completion_tokens: completion,
|
|
196
|
+
// Recompute rather than pass through: when the fold branch ran above,
|
|
197
|
+
// an upstream total_tokens (cache-exclusive) would otherwise be stale.
|
|
198
|
+
total_tokens: prompt + completion,
|
|
199
|
+
cached_tokens: cached,
|
|
200
|
+
cache_creation_input_tokens: cacheCreation,
|
|
201
|
+
};
|
|
202
|
+
if (reasoning > 0) result.reasoning_tokens = reasoning;
|
|
203
|
+
return result;
|
|
204
|
+
}
|
|
205
|
+
|
|
145
206
|
/**
|
|
146
207
|
* Check if usage has valid token data
|
|
147
208
|
* Valid = has at least one token field with value > 0
|
|
@@ -172,18 +233,20 @@ export function hasValidUsage(usage) {
|
|
|
172
233
|
export function extractUsage(chunk) {
|
|
173
234
|
if (!chunk || typeof chunk !== "object") return null;
|
|
174
235
|
|
|
175
|
-
// Claude format (message_start event
|
|
176
|
-
|
|
177
|
-
|
|
236
|
+
// Claude format (message_start event): carries input_tokens + cache_read +
|
|
237
|
+
// cache_creation. message_delta later carries only the final output_tokens,
|
|
238
|
+
// so callers must MERGE (mergeUsage), not overwrite, to keep cache counts.
|
|
239
|
+
if (chunk.type === "message_start" && chunk.message?.usage && typeof chunk.message.usage === "object") {
|
|
240
|
+
const u = chunk.message.usage;
|
|
178
241
|
return normalizeUsage({
|
|
179
|
-
prompt_tokens:
|
|
180
|
-
completion_tokens:
|
|
181
|
-
cache_read_input_tokens:
|
|
182
|
-
cache_creation_input_tokens:
|
|
242
|
+
prompt_tokens: u.input_tokens || 0,
|
|
243
|
+
completion_tokens: u.output_tokens || 0,
|
|
244
|
+
cache_read_input_tokens: u.cache_read_input_tokens,
|
|
245
|
+
cache_creation_input_tokens: u.cache_creation_input_tokens
|
|
183
246
|
});
|
|
184
247
|
}
|
|
185
248
|
|
|
186
|
-
// Claude format (message_delta event
|
|
249
|
+
// Claude format (message_delta event)
|
|
187
250
|
if (chunk.type === "message_delta" && chunk.usage && typeof chunk.usage === "object") {
|
|
188
251
|
return normalizeUsage({
|
|
189
252
|
prompt_tokens: chunk.usage.input_tokens || 0,
|
|
@@ -244,6 +307,27 @@ export function extractUsage(chunk) {
|
|
|
244
307
|
return null;
|
|
245
308
|
}
|
|
246
309
|
|
|
310
|
+
// Field-wise max-merge of two usage objects. Anthropic splits usage across
|
|
311
|
+
// events: message_start has real input+cache (output is a placeholder 1),
|
|
312
|
+
// message_delta has the real cumulative output (input/cache absent). Max keeps
|
|
313
|
+
// the meaningful value from each without clobbering. Idempotent for other
|
|
314
|
+
// providers that emit a single complete usage object.
|
|
315
|
+
export function mergeUsage(prev, next) {
|
|
316
|
+
if (!prev) return next || null;
|
|
317
|
+
if (!next) return prev;
|
|
318
|
+
const merged = { ...prev };
|
|
319
|
+
for (const [k, v] of Object.entries(next)) {
|
|
320
|
+
// typeof NaN === "number" — guard with Number.isFinite so one malformed
|
|
321
|
+
// chunk can't poison the whole accumulation (Math.max(x, NaN) is NaN).
|
|
322
|
+
if (typeof v === "number" && Number.isFinite(v)) {
|
|
323
|
+
merged[k] = Math.max(typeof merged[k] === "number" ? merged[k] : 0, v);
|
|
324
|
+
} else if (v && typeof v === "object") {
|
|
325
|
+
merged[k] = v; // nested details objects: take latest
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
return merged;
|
|
329
|
+
}
|
|
330
|
+
|
|
247
331
|
/**
|
|
248
332
|
* Estimate input tokens from request body
|
|
249
333
|
* Calculate total body size for more accurate estimation
|
|
@@ -344,13 +428,4 @@ export function logUsage(provider, usage, model = null, connectionId = null, api
|
|
|
344
428
|
if (reasoning) msg += ` | reasoning=${reasoning}`;
|
|
345
429
|
|
|
346
430
|
console.log(msg);
|
|
347
|
-
|
|
348
|
-
const tokens = {
|
|
349
|
-
prompt_tokens: inTokens,
|
|
350
|
-
completion_tokens: outTokens,
|
|
351
|
-
cache_read_input_tokens: cacheRead || 0,
|
|
352
|
-
cache_creation_input_tokens: cacheCreation || 0,
|
|
353
|
-
reasoning_tokens: reasoning || 0
|
|
354
|
-
};
|
|
355
|
-
appendRequestLog({ model, provider, connectionId, tokens, status: "200 OK" }).catch(() => { });
|
|
356
431
|
}
|
package/app/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "n9router",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.46",
|
|
4
4
|
"description": "Self-hosted AI routing gateway — local proxy for Claude, Gemini, OpenAI and 40+ providers",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -45,7 +45,9 @@
|
|
|
45
45
|
"publish:npm:dry": "./scripts/publish-npm.sh --dry-run",
|
|
46
46
|
"publish:npm:next": "./scripts/publish-npm.sh --tag next",
|
|
47
47
|
"publish:docker": "./scripts/publish-docker.sh",
|
|
48
|
-
"publish:docker:force": "./scripts/publish-docker.sh --force"
|
|
48
|
+
"publish:docker:force": "./scripts/publish-docker.sh --force",
|
|
49
|
+
"cli:pack": "npm --prefix cli run pack:cli",
|
|
50
|
+
"cli:publish": "npm --prefix cli run publish:cli"
|
|
49
51
|
},
|
|
50
52
|
"dependencies": {
|
|
51
53
|
"@dnd-kit/core": "^6.3.1",
|
|
@@ -53,6 +55,7 @@
|
|
|
53
55
|
"@dnd-kit/sortable": "^10.0.0",
|
|
54
56
|
"@dnd-kit/utilities": "^3.2.2",
|
|
55
57
|
"@monaco-editor/react": "^4.7.0",
|
|
58
|
+
"@next/third-parties": "^16.2.9",
|
|
56
59
|
"@xyflow/react": "^12.10.1",
|
|
57
60
|
"bcryptjs": "^3.0.3",
|
|
58
61
|
"better-sqlite3": "^12.6.2",
|
|
@@ -187,6 +187,7 @@
|
|
|
187
187
|
"End Date": "结束日期",
|
|
188
188
|
"End-to-end TLS via Cloudflare": "通过 Cloudflare 的端到端 TLS",
|
|
189
189
|
"Endpoint": "端点",
|
|
190
|
+
"Endpoint & Key": "端点与密钥",
|
|
190
191
|
"Enter current password": "输入当前密码",
|
|
191
192
|
"Enter new API key": "输入新的 API 密钥",
|
|
192
193
|
"Enter new password": "输入新密码",
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="104" height="104" viewBox="0 0 104 104">
|
|
2
|
+
<circle cx="52" cy="52" r="52" fill="#FF521D"/>
|
|
3
|
+
<path d="M68.4459 24.9438C69.8639 24.1762 71.6471 23.7178 73.4821 24.2163C73.8278 24.2966 74.1339 24.3916 74.4362 24.5024L75.9186 25.0464L75.5104 26.5727C75.3469 27.1827 75.202 27.723 75.0387 28.3325L74.6442 29.8042L73.1354 29.5972C73.0242 29.5819 72.9246 29.5753 72.8082 29.5747C72.2474 29.5865 71.7542 29.8645 71.2662 30.6772C70.8883 31.307 70.5939 32.1486 70.3815 33.1079C74.871 36.0331 77.8444 41.0994 77.8444 46.8638C77.8443 49.5292 77.2072 52.0505 76.0758 54.2798C71.5108 64.3996 54.1783 84.8815 23.4655 79.0083C21.8797 78.7048 20.9918 77.4165 20.902 76.1245C20.8141 74.8561 21.479 73.487 22.8981 72.8813C31.0698 69.394 35.5884 65.7091 38.5983 61.2329C41.6553 56.6866 43.2606 51.1907 45.3287 43.7251C46.7942 36.1645 53.4462 30.4547 61.4362 30.4546L61.8834 30.4604C62.4398 30.4755 62.9894 30.519 63.5309 30.5884C63.9515 29.7288 64.4424 28.8863 65.0211 28.0659L65.1745 27.8423C65.9623 26.731 67.1108 25.6667 68.4459 24.9438Z" fill="#18181A"/>
|
|
4
|
+
</svg>
|
|
Binary file
|
package/app/server.js
CHANGED
|
@@ -9,7 +9,7 @@ const currentPort = parseInt(process.env.PORT, 10) || 3000
|
|
|
9
9
|
const hostname = process.env.HOSTNAME || '0.0.0.0'
|
|
10
10
|
|
|
11
11
|
let keepAliveTimeout = parseInt(process.env.KEEP_ALIVE_TIMEOUT, 10)
|
|
12
|
-
const nextConfig = {"env":{},"typescript":{"ignoreBuildErrors":false},"typedRoutes":false,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.mjs","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":true,"customCacheHandler":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{"serverFunctions":true,"browserToTerminal":"warn"},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/Users/cuongquach/projects/vibe/n9router","cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"appNewScrollHandler":false,"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"cachedNavigations":false,"partialFallbacks":false,"dynamicOnHover":false,"varyParams":false,"prefetchInlining":false,"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":9,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"imgOptSkipMetadata":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"strictRouteTypes":false,"viewTransition":false,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":false,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":true,"serverComponentsHmrCache":true,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"gestureTransition":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":"warn","lockDistDir":true,"proxyClientMaxBodySize":134217728,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":false,"turbopackInferModuleSideEffects":true,"turbopackPluginRuntimeStrategy":"childProcesses","optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.mjs","outputFileTracingIncludes":{"/*":["src/mitm/**/*","src/shared/constants/**/*","src/lib/dbFileSafety.js","open-sse/rtk/**/*"]},"serverExternalPackages":["better-sqlite3"],"turbopack":{"root":"/Users/cuongquach/projects/vibe/n9router"},"outputFileTracingExcludes":{"*":["./gitbook/**/*"]},"distDirRoot":".next","_originalRewrites":{"beforeFiles":[],"afterFiles":[{"source":"/v1/v1/:path*","destination":"/api/v1/:path*"},{"source":"/v1/v1","destination":"/api/v1"},{"source":"/codex/:path*","destination":"/api/v1/responses"},{"source":"/v1/:path*","destination":"/api/v1/:path*"},{"source":"/v1","destination":"/api/v1"}],"fallback":[]}}
|
|
12
|
+
const nextConfig = {"env":{},"typescript":{"ignoreBuildErrors":false},"typedRoutes":false,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.mjs","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":true,"customCacheHandler":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{"serverFunctions":true,"browserToTerminal":"warn"},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/Users/cuongquach/projects/vibe/n9router","cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"appNewScrollHandler":false,"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"cachedNavigations":false,"partialFallbacks":false,"dynamicOnHover":false,"varyParams":false,"prefetchInlining":false,"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":9,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"imgOptSkipMetadata":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"strictRouteTypes":false,"viewTransition":false,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":false,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":true,"serverComponentsHmrCache":true,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"gestureTransition":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":"warn","lockDistDir":true,"proxyClientMaxBodySize":134217728,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":false,"turbopackInferModuleSideEffects":true,"turbopackPluginRuntimeStrategy":"childProcesses","optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.mjs","outputFileTracingIncludes":{"/*":["src/mitm/**/*","src/shared/constants/**/*","src/lib/dbFileSafety.js","open-sse/rtk/**/*"]},"serverExternalPackages":["better-sqlite3"],"turbopack":{"root":"/Users/cuongquach/projects/vibe/n9router"},"outputFileTracingExcludes":{"*":["./gitbook/**/*"]},"distDirRoot":".next","_originalRewrites":{"beforeFiles":[],"afterFiles":[{"source":"/v1/v1/:path*","destination":"/api/v1/:path*"},{"source":"/v1/v1","destination":"/api/v1"},{"source":"/codex/:path*","destination":"/api/v1/responses"},{"source":"/responses","destination":"/api/v1/responses"},{"source":"/v1beta/:path*","destination":"/api/v1beta/:path*"},{"source":"/v1beta","destination":"/api/v1beta"},{"source":"/v1/:path*","destination":"/api/v1/:path*"},{"source":"/v1","destination":"/api/v1"}],"fallback":[]}}
|
|
13
13
|
|
|
14
14
|
process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(nextConfig)
|
|
15
15
|
|
|
@@ -7,8 +7,8 @@ const { generateRootCA, loadRootCA, generateLeafCert } = require("./rootCA");
|
|
|
7
7
|
* Generate Root CA certificate (one-time setup)
|
|
8
8
|
* This replaces the old static wildcard cert approach
|
|
9
9
|
*/
|
|
10
|
-
|
|
11
|
-
return
|
|
10
|
+
function generateCert() {
|
|
11
|
+
return generateRootCA();
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
/**
|
|
@@ -23,7 +23,7 @@ function isCertExpired(certPath) {
|
|
|
23
23
|
* Generate Root CA certificate (only once, auto-regenerate if expired)
|
|
24
24
|
* This Root CA will sign all dynamic leaf certificates
|
|
25
25
|
*/
|
|
26
|
-
|
|
26
|
+
function generateRootCA() {
|
|
27
27
|
const exists = fs.existsSync(ROOT_CA_KEY_PATH) && fs.existsSync(ROOT_CA_CERT_PATH);
|
|
28
28
|
if (exists && !isCertExpired(ROOT_CA_CERT_PATH)) {
|
|
29
29
|
console.log("✅ Root CA already exists");
|
package/app/src/mitm/config.js
CHANGED
|
@@ -18,6 +18,8 @@ const TARGET_HOSTS = [
|
|
|
18
18
|
"cloudcode-pa.googleapis.com",
|
|
19
19
|
"api.individual.githubcopilot.com",
|
|
20
20
|
"q.us-east-1.amazonaws.com",
|
|
21
|
+
"codewhisperer.us-east-1.amazonaws.com",
|
|
22
|
+
"runtime.us-east-1.kiro.dev",
|
|
21
23
|
"api2.cursor.sh",
|
|
22
24
|
];
|
|
23
25
|
|
|
@@ -79,7 +81,7 @@ function getToolForHost(host) {
|
|
|
79
81
|
const h = (host || "").split(":")[0];
|
|
80
82
|
if (h === "api.individual.githubcopilot.com") return "copilot";
|
|
81
83
|
if (h === "daily-cloudcode-pa.googleapis.com" || h === "cloudcode-pa.googleapis.com") return "antigravity";
|
|
82
|
-
if (h === "q.us-east-1.amazonaws.com") return "kiro";
|
|
84
|
+
if (h === "q.us-east-1.amazonaws.com" || h === "codewhisperer.us-east-1.amazonaws.com" || h === "runtime.us-east-1.kiro.dev") return "kiro";
|
|
83
85
|
if (h === "api2.cursor.sh") return "cursor";
|
|
84
86
|
return null;
|
|
85
87
|
}
|
package/app/src/mitm/manager.js
CHANGED
|
@@ -39,6 +39,7 @@ async function resolveMitmRouterBaseUrl() {
|
|
|
39
39
|
const MITM_PORT = 443;
|
|
40
40
|
const MITM_WIN_NODE_PORT = 8443;
|
|
41
41
|
const PID_FILE = path.join(MITM_DIR, ".mitm.pid");
|
|
42
|
+
const LOCK_FILE = path.join(MITM_DIR, ".mitm.lock");
|
|
42
43
|
|
|
43
44
|
const MITM_MAX_RESTARTS = 5;
|
|
44
45
|
const MITM_RESTART_DELAYS_MS = [5000, 10000, 20000, 30000, 60000];
|
|
@@ -317,19 +318,22 @@ async function getMitmStatus() {
|
|
|
317
318
|
|
|
318
319
|
async function scheduleMitmRestart(apiKey) {
|
|
319
320
|
if (mitmIsRestarting) return;
|
|
321
|
+
// Set guard synchronously before any await to prevent concurrent calls
|
|
322
|
+
// from passing the check above.
|
|
323
|
+
mitmIsRestarting = true;
|
|
320
324
|
|
|
321
325
|
const aliveMs = Date.now() - mitmLastStartTime;
|
|
322
326
|
if (aliveMs >= MITM_RESTART_RESET_MS) mitmRestartCount = 0;
|
|
323
327
|
|
|
324
328
|
if (mitmRestartCount >= MITM_MAX_RESTARTS) {
|
|
325
329
|
err("Max restart attempts reached. Giving up.");
|
|
330
|
+
mitmIsRestarting = false;
|
|
326
331
|
return;
|
|
327
332
|
}
|
|
328
333
|
|
|
329
334
|
const attempt = mitmRestartCount;
|
|
330
335
|
const delay = MITM_RESTART_DELAYS_MS[Math.min(attempt, MITM_RESTART_DELAYS_MS.length - 1)];
|
|
331
336
|
mitmRestartCount++;
|
|
332
|
-
mitmIsRestarting = true;
|
|
333
337
|
|
|
334
338
|
log(`Restarting in ${delay / 1000}s... (${mitmRestartCount}/${MITM_MAX_RESTARTS})`);
|
|
335
339
|
await new Promise((r) => setTimeout(r, delay));
|
|
@@ -384,7 +388,19 @@ async function startServer(apiKey, sudoPassword) {
|
|
|
384
388
|
throw new Error("MITM server is already running");
|
|
385
389
|
}
|
|
386
390
|
|
|
387
|
-
|
|
391
|
+
// Atomically claim lock to prevent concurrent startServer across processes.
|
|
392
|
+
// O_EXCL (flag: "wx") fails with EEXIST if the file already exists.
|
|
393
|
+
try {
|
|
394
|
+
fs.writeFileSync(LOCK_FILE, String(process.pid), { flag: "wx" });
|
|
395
|
+
} catch (e) {
|
|
396
|
+
if (e.code === "EEXIST") {
|
|
397
|
+
throw new Error("MITM server is already starting (lock contention)");
|
|
398
|
+
}
|
|
399
|
+
throw e;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
try {
|
|
403
|
+
await killLeftoverMitm(sudoPassword);
|
|
388
404
|
|
|
389
405
|
if (!IS_WIN) {
|
|
390
406
|
const portStatus = await checkPort443Free();
|
|
@@ -559,6 +575,7 @@ async function startServer(apiKey, sudoPassword) {
|
|
|
559
575
|
serverProcess = null;
|
|
560
576
|
serverPid = null;
|
|
561
577
|
try { fs.unlinkSync(PID_FILE); } catch { /* ignore */ }
|
|
578
|
+
try { fs.unlinkSync(LOCK_FILE); } catch { /* ignore */ }
|
|
562
579
|
// Auto-restart on unexpected exit
|
|
563
580
|
if (code !== 0 && !mitmIsRestarting) scheduleMitmRestart(apiKey);
|
|
564
581
|
});
|
|
@@ -586,7 +603,15 @@ async function startServer(apiKey, sudoPassword) {
|
|
|
586
603
|
await saveMitmSettings(true, sudoPassword);
|
|
587
604
|
if (sudoPassword) setCachedPassword(sudoPassword);
|
|
588
605
|
|
|
606
|
+
// Server is healthy — remove lock file (PID file persists as the marker)
|
|
607
|
+
try { fs.unlinkSync(LOCK_FILE); } catch { /* ignore */ }
|
|
608
|
+
|
|
589
609
|
return { running: true, pid: serverPid };
|
|
610
|
+
} catch (e) {
|
|
611
|
+
// Clean up lock on any failure
|
|
612
|
+
try { fs.unlinkSync(LOCK_FILE); } catch { /* ignore */ }
|
|
613
|
+
throw e;
|
|
614
|
+
}
|
|
590
615
|
}
|
|
591
616
|
|
|
592
617
|
/**
|
|
@@ -659,6 +684,8 @@ async function stopServer(sudoPassword) {
|
|
|
659
684
|
});
|
|
660
685
|
}
|
|
661
686
|
|
|
687
|
+
try { fs.unlinkSync(PID_FILE); } catch { /* ignore */ }
|
|
688
|
+
try { fs.unlinkSync(LOCK_FILE); } catch { /* ignore */ }
|
|
662
689
|
await saveMitmSettings(false, null);
|
|
663
690
|
mitmIsRestarting = false;
|
|
664
691
|
|