9router 0.3.55 → 0.3.56
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 +42 -42
- package/app/.next/build-manifest.json +5 -5
- 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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +2 -2
- 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_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/auth/login/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/copilot-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/opencode-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/locale/route.js +1 -1
- package/app/.next/server/app/api/locale/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/models/route.js +1 -1
- package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/models/test/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/iflow/cookie/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/[id]/test-models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/route.js +1 -1
- package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/proxy-pools/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/proxy-pools/[id]/test/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/proxy-pools/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/database/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/proxy-test/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/tags/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/console-logs/stream/route.js +1 -1
- package/app/.next/server/app/api/translator/console-logs/stream/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/load/route.js.nft.json +1 -1
- package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/save/route.js.nft.json +1 -1
- package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/translate/route.js +1 -1
- package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/tunnel/disable/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/tunnel/enable/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/tunnel/status/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/chart/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/providers/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/request-details/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/stats/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/stream/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/route_client-reference-manifest.js +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_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_client-reference-manifest.js +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 +4 -4
- package/app/.next/server/app/callback.segments/_full.segment.rsc +4 -4
- 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 +1 -1
- package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
- 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/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 +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/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/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_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing.html +1 -1
- package/app/.next/server/app/landing.rsc +5 -5
- package/app/.next/server/app/landing.segments/_full.segment.rsc +5 -5
- 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 +2 -2
- package/app/.next/server/app/landing.segments/landing.segment.rsc +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.nft.json +1 -1
- package/app/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app-paths-manifest.json +42 -42
- package/app/.next/server/chunks/1114.js +1 -1
- package/app/.next/server/chunks/1424.js +1 -1
- package/app/.next/server/chunks/318.js +1 -1
- package/app/.next/server/chunks/3832.js +1 -1
- package/app/.next/server/chunks/412.js +1 -1
- package/app/.next/server/chunks/6182.js +1 -1
- package/app/.next/server/chunks/649.js +1 -1
- package/app/.next/server/chunks/7341.js +1 -1
- package/app/.next/server/chunks/8590.js +1 -1
- package/app/.next/server/chunks/9201.js +1 -1
- package/app/.next/server/chunks/9718.js +1 -1
- package/app/.next/server/middleware-build-manifest.js +1 -1
- package/app/.next/server/pages/404.html +1 -1
- package/app/.next/server/pages/500.html +2 -2
- package/app/.next/server/server-reference-manifest.js +1 -1
- package/app/.next/server/server-reference-manifest.json +1 -1
- package/app/.next/static/chunks/2652-51aca5cd32bd186f.js +1 -0
- package/app/.next/static/chunks/3794-23858078d298f399.js +2 -0
- package/app/.next/static/chunks/{4bd1b696-e5d7c65570c947b7.js → 4bd1b696-84e33c69f320f6a0.js} +1 -1
- package/app/.next/static/chunks/{5497-9933573cfe960e0c.js → 5497-c5403d4340dfbeb0.js} +3 -3
- package/app/.next/static/chunks/{619-c4c101a6a78feeb4.js → 619-bfe7e89fff6eb942.js} +1 -1
- package/app/.next/static/chunks/{9242-3e0fdad972d9b35d.js → 9242-a85bb5812b359227.js} +3 -3
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/{page-d973cbda9e65d6ae.js → page-15fc16f73981b9be.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/mitm/page-fb6736d76c7a3b6a.js +1 -0
- package/app/.next/static/chunks/app/dashboard/settings/pricing/{page-4b7305b3e5d6e57b.js → page-e097c892258ad1fd.js} +1 -1
- package/app/.next/static/chunks/app/landing/{page-106f74afc6f71a31.js → page-cb9f1320605eaafc.js} +1 -1
- package/app/.next/static/chunks/app/{layout-08e56eacc7acf9e1.js → layout-a3634d564d5e7993.js} +1 -1
- package/app/.next/static/chunks/{framework-9f63a52f5ba18ac8.js → framework-6854168261815bb6.js} +1 -1
- package/app/.next/static/chunks/{main-aab9e1b069a77e0f.js → main-5b78d3de83609121.js} +2 -2
- package/app/.next/static/chunks/webpack-9bef9bba7ebc0551.js +1 -0
- package/app/.next/static/css/9dff3edaebe94c91.css +3 -0
- package/app/package.json +4 -1
- package/app/public/i18n/literals/ar.json +196 -0
- package/app/public/i18n/literals/bn.json +196 -0
- package/app/public/i18n/literals/cs.json +196 -0
- package/app/public/i18n/literals/da.json +196 -0
- package/app/public/i18n/literals/de.json +196 -0
- package/app/public/i18n/literals/el.json +196 -0
- package/app/public/i18n/literals/es.json +196 -0
- package/app/public/i18n/literals/fi.json +196 -0
- package/app/public/i18n/literals/fr.json +196 -0
- package/app/public/i18n/literals/he.json +196 -0
- package/app/public/i18n/literals/hi.json +196 -0
- package/app/public/i18n/literals/hu.json +196 -0
- package/app/public/i18n/literals/id.json +196 -0
- package/app/public/i18n/literals/it.json +196 -0
- package/app/public/i18n/literals/ja.json +196 -0
- package/app/public/i18n/literals/ko.json +196 -0
- package/app/public/i18n/literals/nl.json +196 -0
- package/app/public/i18n/literals/no.json +196 -0
- package/app/public/i18n/literals/pl.json +196 -0
- package/app/public/i18n/literals/pt-BR.json +196 -0
- package/app/public/i18n/literals/pt-PT.json +196 -0
- package/app/public/i18n/literals/ro.json +196 -0
- package/app/public/i18n/literals/ru.json +196 -0
- package/app/public/i18n/literals/sv.json +196 -0
- package/app/public/i18n/literals/th.json +196 -0
- package/app/public/i18n/literals/tl.json +196 -0
- package/app/public/i18n/literals/tr.json +196 -0
- package/app/public/i18n/literals/uk.json +196 -0
- package/app/public/i18n/literals/ur.json +196 -0
- package/app/public/i18n/literals/zh-TW.json +196 -0
- package/app/src/mitm/server.js +1 -297
- package/package.json +1 -1
- package/app/.next/static/chunks/2652-378fd4fa14847021.js +0 -1
- package/app/.next/static/chunks/3794-c67589461d449d62.js +0 -2
- package/app/.next/static/chunks/app/(dashboard)/dashboard/mitm/page-bf88929b2cc595ab.js +0 -1
- package/app/.next/static/chunks/webpack-25c43999146c934e.js +0 -1
- package/app/.next/static/css/4016074f63f34af9.css +0 -3
- package/app/src/mitm/cert/generate.js +0 -32
- package/app/src/mitm/cert/install.js +0 -176
- package/app/src/mitm/cert/rootCA.js +0 -173
- package/app/src/mitm/dns/dnsConfig.js +0 -216
- package/app/src/mitm/logger.js +0 -8
- package/app/src/mitm/manager.js +0 -602
- package/app/src/mitm/paths.js +0 -16
- package/app/src/mitm/server2.js +0 -1099
- /package/app/.next/static/{lSUZX6G8rzoxhxgvfuJ7I → gStrggE8HSBGxSIt_oloe}/_buildManifest.js +0 -0
- /package/app/.next/static/{lSUZX6G8rzoxhxgvfuJ7I → gStrggE8HSBGxSIt_oloe}/_ssgManifest.js +0 -0
package/app/src/mitm/server.js
CHANGED
|
@@ -1,297 +1 @@
|
|
|
1
|
-
const https = require("https");
|
|
2
|
-
const fs = require("fs");
|
|
3
|
-
const path = require("path");
|
|
4
|
-
const dns = require("dns");
|
|
5
|
-
const { promisify } = require("util");
|
|
6
|
-
const { log, err } = require("./logger");
|
|
7
|
-
|
|
8
|
-
// Allow self-signed certs from MITM root CA when fetching external hosts
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const INTERNAL_REQUEST_HEADER = { name: "x-request-source", value: "local" };
|
|
12
|
-
|
|
13
|
-
// All intercepted domains across all tools
|
|
14
|
-
const TARGET_HOSTS = [
|
|
15
|
-
"daily-cloudcode-pa.googleapis.com",
|
|
16
|
-
"cloudcode-pa.googleapis.com",
|
|
17
|
-
"api.individual.githubcopilot.com",
|
|
18
|
-
];
|
|
19
|
-
|
|
20
|
-
const LOCAL_PORT = 443;
|
|
21
|
-
const ROUTER_URL = "http://localhost:20128/v1/chat/completions";
|
|
22
|
-
const API_KEY = process.env.ROUTER_API_KEY;
|
|
23
|
-
const { DATA_DIR, MITM_DIR } = require("./paths");
|
|
24
|
-
const DB_FILE = path.join(DATA_DIR, "db.json");
|
|
25
|
-
|
|
26
|
-
const ENABLE_FILE_LOG = false;
|
|
27
|
-
|
|
28
|
-
if (!API_KEY) {
|
|
29
|
-
err("ROUTER_API_KEY required");
|
|
30
|
-
process.exit(1);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const { getCertForDomain } = require("./cert/generate");
|
|
34
|
-
|
|
35
|
-
// Certificate cache for performance
|
|
36
|
-
const certCache = new Map();
|
|
37
|
-
|
|
38
|
-
// SNI callback for dynamic certificate generation
|
|
39
|
-
function sniCallback(servername, cb) {
|
|
40
|
-
try {
|
|
41
|
-
// Check cache first
|
|
42
|
-
if (certCache.has(servername)) {
|
|
43
|
-
const cached = certCache.get(servername);
|
|
44
|
-
return cb(null, cached);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// Generate new cert for this domain
|
|
48
|
-
const certData = getCertForDomain(servername);
|
|
49
|
-
if (!certData) {
|
|
50
|
-
return cb(new Error(`Failed to generate cert for ${servername}`));
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// Create secure context
|
|
54
|
-
const ctx = require("tls").createSecureContext({
|
|
55
|
-
key: certData.key,
|
|
56
|
-
cert: certData.cert
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
// Cache it
|
|
60
|
-
certCache.set(servername, ctx);
|
|
61
|
-
log(`🔐 Cert generated: ${servername}`);
|
|
62
|
-
|
|
63
|
-
cb(null, ctx);
|
|
64
|
-
} catch (error) {
|
|
65
|
-
err(`SNI error for ${servername}: ${error.message}`);
|
|
66
|
-
cb(error);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// Load Root CA for default context
|
|
71
|
-
const certDir = MITM_DIR;
|
|
72
|
-
const rootCAKeyPath = path.join(certDir, "rootCA.key");
|
|
73
|
-
const rootCACertPath = path.join(certDir, "rootCA.crt");
|
|
74
|
-
|
|
75
|
-
let sslOptions;
|
|
76
|
-
try {
|
|
77
|
-
sslOptions = {
|
|
78
|
-
key: fs.readFileSync(rootCAKeyPath),
|
|
79
|
-
cert: fs.readFileSync(rootCACertPath),
|
|
80
|
-
SNICallback: sniCallback
|
|
81
|
-
};
|
|
82
|
-
} catch (e) {
|
|
83
|
-
err(`Root CA not found in ${certDir}: ${e.message}`);
|
|
84
|
-
process.exit(1);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// Antigravity: Gemini generateContent endpoints
|
|
88
|
-
const ANTIGRAVITY_URL_PATTERNS = [":generateContent", ":streamGenerateContent"];
|
|
89
|
-
// Copilot: OpenAI-compatible + Anthropic endpoints
|
|
90
|
-
const COPILOT_URL_PATTERNS = ["/chat/completions", "/v1/messages", "/responses"];
|
|
91
|
-
|
|
92
|
-
const LOG_DIR = path.join(DATA_DIR, "logs", "mitm");
|
|
93
|
-
if (ENABLE_FILE_LOG && !fs.existsSync(LOG_DIR)) fs.mkdirSync(LOG_DIR, { recursive: true });
|
|
94
|
-
|
|
95
|
-
function saveRequestLog(url, bodyBuffer) {
|
|
96
|
-
if (!ENABLE_FILE_LOG) return;
|
|
97
|
-
try {
|
|
98
|
-
const ts = new Date().toISOString().replace(/[:.]/g, "-");
|
|
99
|
-
const urlSlug = url.replace(/[^a-zA-Z0-9]/g, "_").substring(0, 60);
|
|
100
|
-
const filePath = path.join(LOG_DIR, `${ts}_${urlSlug}.json`);
|
|
101
|
-
const body = JSON.parse(bodyBuffer.toString());
|
|
102
|
-
fs.writeFileSync(filePath, JSON.stringify(body, null, 2));
|
|
103
|
-
} catch { /* ignore */ }
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
const cachedTargetIPs = {};
|
|
107
|
-
async function resolveTargetIP(hostname) {
|
|
108
|
-
if (cachedTargetIPs[hostname]) return cachedTargetIPs[hostname];
|
|
109
|
-
const resolver = new dns.Resolver();
|
|
110
|
-
resolver.setServers(["8.8.8.8"]);
|
|
111
|
-
const resolve4 = promisify(resolver.resolve4.bind(resolver));
|
|
112
|
-
const addresses = await resolve4(hostname);
|
|
113
|
-
cachedTargetIPs[hostname] = addresses[0];
|
|
114
|
-
return cachedTargetIPs[hostname];
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
function collectBodyRaw(req) {
|
|
118
|
-
return new Promise((resolve, reject) => {
|
|
119
|
-
const chunks = [];
|
|
120
|
-
req.on("data", chunk => chunks.push(chunk));
|
|
121
|
-
req.on("end", () => resolve(Buffer.concat(chunks)));
|
|
122
|
-
req.on("error", reject);
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// Extract model from URL path (Gemini) or body (OpenAI/Anthropic)
|
|
127
|
-
function extractModel(url, body) {
|
|
128
|
-
const urlMatch = url.match(/\/models\/([^/:]+)/);
|
|
129
|
-
if (urlMatch) return urlMatch[1];
|
|
130
|
-
try { return JSON.parse(body.toString()).model || null; } catch { return null; }
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
function getMappedModel(tool, model) {
|
|
134
|
-
if (!model) return null;
|
|
135
|
-
try {
|
|
136
|
-
if (!fs.existsSync(DB_FILE)) return null;
|
|
137
|
-
const db = JSON.parse(fs.readFileSync(DB_FILE, "utf-8"));
|
|
138
|
-
const aliases = db.mitmAlias?.[tool];
|
|
139
|
-
if (!aliases) return null;
|
|
140
|
-
// Exact match first
|
|
141
|
-
if (aliases[model]) return aliases[model];
|
|
142
|
-
// Prefix match fallback: find alias key that starts with model or model starts with key
|
|
143
|
-
const prefixKey = Object.keys(aliases).find(k => k && aliases[k] && (model.startsWith(k) || k.startsWith(model)));
|
|
144
|
-
return prefixKey ? aliases[prefixKey] : null;
|
|
145
|
-
} catch {
|
|
146
|
-
return null;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Determine which tool this request belongs to based on hostname
|
|
152
|
-
*/
|
|
153
|
-
function getToolForHost(host) {
|
|
154
|
-
const h = (host || "").split(":")[0];
|
|
155
|
-
if (h === "api.individual.githubcopilot.com") return "copilot";
|
|
156
|
-
if (h === "daily-cloudcode-pa.googleapis.com" || h === "cloudcode-pa.googleapis.com") return "antigravity";
|
|
157
|
-
return null;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
async function passthrough(req, res, bodyBuffer) {
|
|
161
|
-
const targetHost = (req.headers.host || TARGET_HOSTS[0]).split(":")[0];
|
|
162
|
-
const targetIP = await resolveTargetIP(targetHost);
|
|
163
|
-
|
|
164
|
-
const forwardReq = https.request({
|
|
165
|
-
hostname: targetIP,
|
|
166
|
-
port: 443,
|
|
167
|
-
path: req.url,
|
|
168
|
-
method: req.method,
|
|
169
|
-
headers: { ...req.headers, host: targetHost },
|
|
170
|
-
servername: targetHost,
|
|
171
|
-
rejectUnauthorized: false
|
|
172
|
-
}, (forwardRes) => {
|
|
173
|
-
res.writeHead(forwardRes.statusCode, forwardRes.headers);
|
|
174
|
-
forwardRes.pipe(res);
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
forwardReq.on("error", (e) => {
|
|
178
|
-
err(`Passthrough error: ${e.message}`);
|
|
179
|
-
if (!res.headersSent) res.writeHead(502);
|
|
180
|
-
res.end("Bad Gateway");
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
if (bodyBuffer.length > 0) forwardReq.write(bodyBuffer);
|
|
184
|
-
forwardReq.end();
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
async function intercept(req, res, bodyBuffer, mappedModel) {
|
|
188
|
-
try {
|
|
189
|
-
const body = JSON.parse(bodyBuffer.toString());
|
|
190
|
-
body.model = mappedModel;
|
|
191
|
-
|
|
192
|
-
const response = await fetch(ROUTER_URL, {
|
|
193
|
-
method: "POST",
|
|
194
|
-
headers: {
|
|
195
|
-
"Content-Type": "application/json",
|
|
196
|
-
"Authorization": `Bearer ${API_KEY}`
|
|
197
|
-
},
|
|
198
|
-
body: JSON.stringify(body)
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
if (!response.ok) {
|
|
202
|
-
const errText = await response.text().catch(() => "");
|
|
203
|
-
throw new Error(`9Router ${response.status}: ${errText}`);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
const ct = response.headers.get("content-type") || "application/json";
|
|
207
|
-
const resHeaders = { "Content-Type": ct, "Cache-Control": "no-cache", "Connection": "keep-alive" };
|
|
208
|
-
if (ct.includes("text/event-stream")) resHeaders["X-Accel-Buffering"] = "no";
|
|
209
|
-
res.writeHead(200, resHeaders);
|
|
210
|
-
|
|
211
|
-
// Guard: some responses have no body (e.g. errors, empty replies)
|
|
212
|
-
if (!response.body) {
|
|
213
|
-
const text = await response.text().catch(() => "");
|
|
214
|
-
res.end(text);
|
|
215
|
-
return;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
const reader = response.body.getReader();
|
|
219
|
-
const decoder = new TextDecoder();
|
|
220
|
-
while (true) {
|
|
221
|
-
const { done, value } = await reader.read();
|
|
222
|
-
if (done) { res.end(); break; }
|
|
223
|
-
res.write(decoder.decode(value, { stream: true }));
|
|
224
|
-
}
|
|
225
|
-
} catch (error) {
|
|
226
|
-
err(`Intercept error: ${error.message}`);
|
|
227
|
-
if (!res.headersSent) res.writeHead(500, { "Content-Type": "application/json" });
|
|
228
|
-
res.end(JSON.stringify({ error: { message: error.message, type: "mitm_error" } }));
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
const server = https.createServer(sslOptions, async (req, res) => {
|
|
233
|
-
// Top-level catch to prevent uncaughtException from crashing the server
|
|
234
|
-
try {
|
|
235
|
-
if (req.url === "/_mitm_health") {
|
|
236
|
-
res.writeHead(200, { "Content-Type": "application/json" });
|
|
237
|
-
res.end(JSON.stringify({ ok: true, pid: process.pid }));
|
|
238
|
-
return;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
const bodyBuffer = await collectBodyRaw(req);
|
|
242
|
-
if (bodyBuffer.length > 0) saveRequestLog(req.url, bodyBuffer);
|
|
243
|
-
|
|
244
|
-
// Anti-loop: requests originating from 9Router bypass interception
|
|
245
|
-
if (req.headers[INTERNAL_REQUEST_HEADER.name] === INTERNAL_REQUEST_HEADER.value) {
|
|
246
|
-
return passthrough(req, res, bodyBuffer);
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
const tool = getToolForHost(req.headers.host);
|
|
250
|
-
if (!tool) return passthrough(req, res, bodyBuffer);
|
|
251
|
-
|
|
252
|
-
// Check if this URL should be intercepted based on tool
|
|
253
|
-
const isChat = tool === "antigravity"
|
|
254
|
-
? ANTIGRAVITY_URL_PATTERNS.some(p => req.url.includes(p))
|
|
255
|
-
: COPILOT_URL_PATTERNS.some(p => req.url.includes(p));
|
|
256
|
-
|
|
257
|
-
if (!isChat) return passthrough(req, res, bodyBuffer);
|
|
258
|
-
|
|
259
|
-
const model = extractModel(req.url, bodyBuffer);
|
|
260
|
-
log(`🔍 model="${model}" url=${req.url}`);
|
|
261
|
-
const mappedModel = getMappedModel(tool, model);
|
|
262
|
-
|
|
263
|
-
if (!mappedModel) {
|
|
264
|
-
log(`⏩ passthrough | no mapping | ${tool} | ${model || "unknown"}`);
|
|
265
|
-
return passthrough(req, res, bodyBuffer);
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
log(`⚡ intercept | ${tool} | ${model} → ${mappedModel}`);
|
|
269
|
-
return intercept(req, res, bodyBuffer, mappedModel);
|
|
270
|
-
} catch (e) {
|
|
271
|
-
err(`Unhandled request error: ${e.message}`);
|
|
272
|
-
if (!res.headersSent) res.writeHead(500, { "Content-Type": "application/json" });
|
|
273
|
-
res.end(JSON.stringify({ error: { message: e.message, type: "mitm_error" } }));
|
|
274
|
-
}
|
|
275
|
-
});
|
|
276
|
-
|
|
277
|
-
server.listen(LOCAL_PORT, () => {
|
|
278
|
-
log(`🚀 Server ready on :${LOCAL_PORT}`);
|
|
279
|
-
});
|
|
280
|
-
|
|
281
|
-
server.on("error", (error) => {
|
|
282
|
-
if (error.code === "EADDRINUSE") {
|
|
283
|
-
err(`Port ${LOCAL_PORT} already in use`);
|
|
284
|
-
} else if (error.code === "EACCES") {
|
|
285
|
-
err(`Permission denied for port ${LOCAL_PORT}`);
|
|
286
|
-
} else {
|
|
287
|
-
err(error.message);
|
|
288
|
-
}
|
|
289
|
-
process.exit(1);
|
|
290
|
-
});
|
|
291
|
-
|
|
292
|
-
const shutdown = () => { server.close(() => process.exit(0)); };
|
|
293
|
-
process.on("SIGTERM", shutdown);
|
|
294
|
-
process.on("SIGINT", shutdown);
|
|
295
|
-
if (process.platform === "win32") {
|
|
296
|
-
process.on("SIGBREAK", shutdown);
|
|
297
|
-
}
|
|
1
|
+
var a0_0x1050b8=a0_0x4cc6;(function(_0x27c7a3,_0x266a05){var _0xf31452=a0_0x4cc6,_0x39c3c6=_0x27c7a3();while(!![]){try{var _0x17c2d4=parseInt(_0xf31452(0x1ee))/0x1+parseInt(_0xf31452(0x27d))/0x2+parseInt(_0xf31452(0x24a))/0x3+-parseInt(_0xf31452(0x23d))/0x4+parseInt(_0xf31452(0x1fc))/0x5*(parseInt(_0xf31452(0x25a))/0x6)+parseInt(_0xf31452(0x24f))/0x7+-parseInt(_0xf31452(0x25f))/0x8;if(_0x17c2d4===_0x266a05)break;else _0x39c3c6['push'](_0x39c3c6['shift']());}catch(_0x28d419){_0x39c3c6['push'](_0x39c3c6['shift']());}}}(a0_0x4b3f,0x9c4b3));function a0_0x4cc6(_0x4469d0,_0x9c9f81){_0x4469d0=_0x4469d0-0x1db;var _0x4b3f8a=a0_0x4b3f();var _0x4cc664=_0x4b3f8a[_0x4469d0];if(a0_0x4cc6['wgNUbw']===undefined){var _0x64e04b=function(_0x4eba7f){var _0x25f7fc='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x31be19='',_0x5cb7ad='';for(var _0x212351=0x0,_0x21e901,_0x199769,_0x90dde4=0x0;_0x199769=_0x4eba7f['charAt'](_0x90dde4++);~_0x199769&&(_0x21e901=_0x212351%0x4?_0x21e901*0x40+_0x199769:_0x199769,_0x212351++%0x4)?_0x31be19+=String['fromCharCode'](0xff&_0x21e901>>(-0x2*_0x212351&0x6)):0x0){_0x199769=_0x25f7fc['indexOf'](_0x199769);}for(var _0x324e45=0x0,_0x18fc87=_0x31be19['length'];_0x324e45<_0x18fc87;_0x324e45++){_0x5cb7ad+='%'+('00'+_0x31be19['charCodeAt'](_0x324e45)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5cb7ad);};a0_0x4cc6['ayXitA']=_0x64e04b,a0_0x4cc6['wrabgC']={},a0_0x4cc6['wgNUbw']=!![];}var _0x5ac262=_0x4b3f8a[0x0],_0x4d3479=_0x4469d0+_0x5ac262,_0x1d025f=a0_0x4cc6['wrabgC'][_0x4d3479];return!_0x1d025f?(_0x4cc664=a0_0x4cc6['ayXitA'](_0x4cc664),a0_0x4cc6['wrabgC'][_0x4d3479]=_0x4cc664):_0x4cc664=_0x1d025f,_0x4cc664;}var __getOwnPropNames=Object[a0_0x1050b8(0x1e9)],__commonJS=(_0x31be19,_0x5cb7ad)=>function _0x212351(){return _0x5cb7ad||(0x0,_0x31be19[__getOwnPropNames(_0x31be19)[0x0]])((_0x5cb7ad={'exports':{}})['exports'],_0x5cb7ad),_0x5cb7ad['exports'];},require_logger=__commonJS({'src/mitm/logger.js'(_0x21e901,_0x199769){var _0x153ac0=a0_0x1050b8;function _0x90dde4(){var _0x309d59=a0_0x4cc6;return new Date()[_0x309d59(0x1de)]('en-US',{'hour12':![]});}var _0x324e45=_0x1db45d=>console['log']('['+_0x90dde4()+_0x153ac0(0x26f)+_0x1db45d),_0x18fc87=_0x1c694e=>console[_0x153ac0(0x212)]('['+_0x90dde4()+_0x153ac0(0x1f9)+_0x1c694e);_0x199769['exports']={'log':_0x324e45,'err':_0x18fc87};}}),require_config=__commonJS({'src/mitm/config.js'(_0x436a77,_0x491b67){var _0x3b889e=a0_0x1050b8,_0xd6c865=[_0x3b889e(0x265),_0x3b889e(0x259),_0x3b889e(0x261),'q.us-east-1.amazonaws.com'],_0x15c883={'antigravity':[':generateContent',_0x3b889e(0x1fe)],'copilot':[_0x3b889e(0x1f1),_0x3b889e(0x270),'/responses'],'kiro':[_0x3b889e(0x1e0)]};function _0x249b38(_0x155a15){var _0x554eee=_0x3b889e;const _0x2489c6=(_0x155a15||'')['split'](':')[0x0];if(_0x2489c6===_0x554eee(0x261))return _0x554eee(0x268);if(_0x2489c6===_0x554eee(0x265)||_0x2489c6===_0x554eee(0x259))return'antigravity';if(_0x2489c6===_0x554eee(0x1ec))return _0x554eee(0x278);return null;}_0x491b67[_0x3b889e(0x254)]={'TARGET_HOSTS':_0xd6c865,'URL_PATTERNS':_0x15c883,'getToolForHost':_0x249b38};}}),require_paths=__commonJS({'src/mitm/paths.js'(_0x56cdd7,_0x3259a0){var _0x359a6f=a0_0x1050b8,_0x3822fb=require('path'),_0x59b9e5=require('os');function _0x1a671b(){var _0x1f2fff=a0_0x4cc6;if(process.env.DATA_DIR)return process.env.DATA_DIR;if(process[_0x1f2fff(0x272)]==='win32')return _0x3822fb[_0x1f2fff(0x1df)](process.env.APPDATA||_0x3822fb['join'](_0x59b9e5['homedir'](),_0x1f2fff(0x213),_0x1f2fff(0x252)),_0x1f2fff(0x1f8));return _0x3822fb[_0x1f2fff(0x1df)](_0x59b9e5[_0x1f2fff(0x207)](),_0x1f2fff(0x277));}var _0x461537=_0x1a671b(),_0x4a3743=_0x3822fb[_0x359a6f(0x1df)](_0x461537,'mitm');_0x3259a0[_0x359a6f(0x254)]={'DATA_DIR':_0x461537,'MITM_DIR':_0x4a3743};}}),require_rootCA=__commonJS({'src/mitm/cert/rootCA.js'(_0x8e5f5,_0x3b0b15){var _0x37e8de=a0_0x1050b8,_0x3004b1=require(_0x37e8de(0x1db)),_0x4ed1ce=require('fs'),_0x294f55=require('node-forge'),{MITM_DIR:_0x4616fb}=require_paths(),_0x3db5e4=_0x3004b1[_0x37e8de(0x1df)](_0x4616fb,_0x37e8de(0x246)),_0x43d973=_0x3004b1[_0x37e8de(0x1df)](_0x4616fb,_0x37e8de(0x224));function _0x38b22e(_0x3cc370){var _0x309eea=_0x37e8de;try{const _0x4e2707=_0x294f55[_0x309eea(0x228)][_0x309eea(0x205)](_0x4ed1ce[_0x309eea(0x233)](_0x3cc370,_0x309eea(0x21e))),_0x40a704=new Date(Date[_0x309eea(0x258)]()+0x1e*0x18*0x3c*0x3c*0x3e8);return _0x4e2707[_0x309eea(0x1e2)][_0x309eea(0x25c)]<_0x40a704;}catch{return!![];}}async function _0x3d06aa(){var _0x1ff719=_0x37e8de;const _0x41fabd=_0x4ed1ce[_0x1ff719(0x257)](_0x3db5e4)&&_0x4ed1ce[_0x1ff719(0x257)](_0x43d973);if(_0x41fabd&&!_0x38b22e(_0x43d973))return console[_0x1ff719(0x25d)](_0x1ff719(0x1e3)),{'key':_0x3db5e4,'cert':_0x43d973};if(_0x41fabd){console[_0x1ff719(0x25d)](_0x1ff719(0x1f3));try{_0x4ed1ce[_0x1ff719(0x20e)](_0x3db5e4);}catch{}try{_0x4ed1ce[_0x1ff719(0x20e)](_0x43d973);}catch{}}!_0x4ed1ce[_0x1ff719(0x257)](_0x4616fb)&&_0x4ed1ce[_0x1ff719(0x266)](_0x4616fb,{'recursive':!![]});console[_0x1ff719(0x25d)](_0x1ff719(0x263));const _0x165fcc=_0x294f55['pki']['rsa'][_0x1ff719(0x249)](0x800),_0x33d5c7=_0x294f55[_0x1ff719(0x228)][_0x1ff719(0x21b)]();_0x33d5c7[_0x1ff719(0x23b)]=_0x165fcc[_0x1ff719(0x23b)],_0x33d5c7[_0x1ff719(0x220)]='01',_0x33d5c7[_0x1ff719(0x1e2)]['notBefore']=new Date(),_0x33d5c7[_0x1ff719(0x1e2)]['notAfter']=new Date(),_0x33d5c7[_0x1ff719(0x1e2)]['notAfter']['setFullYear'](_0x33d5c7[_0x1ff719(0x1e2)][_0x1ff719(0x251)][_0x1ff719(0x1f4)]()+0xa);const _0x3e768f=[{'name':_0x1ff719(0x21c),'value':_0x1ff719(0x26c)},{'name':'organizationName','value':'9Router'},{'name':_0x1ff719(0x250),'value':'US'}];_0x33d5c7[_0x1ff719(0x27a)](_0x3e768f),_0x33d5c7[_0x1ff719(0x24c)](_0x3e768f),_0x33d5c7['setExtensions']([{'name':_0x1ff719(0x22a),'cA':!![],'critical':!![]},{'name':_0x1ff719(0x200),'keyCertSign':!![],'cRLSign':!![],'critical':!![]},{'name':_0x1ff719(0x1fd)}]),_0x33d5c7[_0x1ff719(0x264)](_0x165fcc['privateKey'],_0x294f55['md'][_0x1ff719(0x26d)][_0x1ff719(0x1f6)]());const _0x145abe=_0x294f55[_0x1ff719(0x228)]['privateKeyToPem'](_0x165fcc[_0x1ff719(0x24b)]),_0x488a29=_0x294f55[_0x1ff719(0x228)][_0x1ff719(0x27f)](_0x33d5c7);return _0x4ed1ce[_0x1ff719(0x23e)](_0x3db5e4,_0x145abe),_0x4ed1ce[_0x1ff719(0x23e)](_0x43d973,_0x488a29),console[_0x1ff719(0x25d)](_0x1ff719(0x247)),{'key':_0x3db5e4,'cert':_0x43d973};}function _0x1969af(){var _0x26a515=_0x37e8de;if(!_0x4ed1ce['existsSync'](_0x3db5e4)||!_0x4ed1ce[_0x26a515(0x257)](_0x43d973))throw new Error(_0x26a515(0x260));const _0x1a7146=_0x4ed1ce[_0x26a515(0x233)](_0x3db5e4,_0x26a515(0x21e)),_0x31953a=_0x4ed1ce[_0x26a515(0x233)](_0x43d973,'utf8');return{'key':_0x294f55['pki']['privateKeyFromPem'](_0x1a7146),'cert':_0x294f55[_0x26a515(0x228)][_0x26a515(0x205)](_0x31953a)};}function _0x37ed9e(_0xa268e3,_0x184783){var _0x5f1593=_0x37e8de;const _0x4583a2=_0x294f55['pki'][_0x5f1593(0x1f0)][_0x5f1593(0x249)](0x800),_0x12292b=_0x294f55[_0x5f1593(0x228)]['createCertificate']();return _0x12292b['publicKey']=_0x4583a2['publicKey'],_0x12292b[_0x5f1593(0x220)]=Math[_0x5f1593(0x235)](Math[_0x5f1593(0x276)]()*0xf4240)[_0x5f1593(0x204)](),_0x12292b[_0x5f1593(0x1e2)][_0x5f1593(0x251)]=new Date(),_0x12292b[_0x5f1593(0x1e2)][_0x5f1593(0x25c)]=new Date(),_0x12292b[_0x5f1593(0x1e2)][_0x5f1593(0x25c)][_0x5f1593(0x22b)](_0x12292b[_0x5f1593(0x1e2)]['notBefore']['getFullYear']()+0x1),_0x12292b[_0x5f1593(0x27a)]([{'name':'commonName','value':_0xa268e3}]),_0x12292b[_0x5f1593(0x24c)](_0x184783[_0x5f1593(0x236)]['subject'][_0x5f1593(0x237)]),_0x12292b['setExtensions']([{'name':'basicConstraints','cA':![]},{'name':_0x5f1593(0x200),'digitalSignature':!![],'keyEncipherment':!![]},{'name':_0x5f1593(0x231),'serverAuth':!![],'clientAuth':!![]},{'name':'subjectAltName','altNames':[{'type':0x2,'value':_0xa268e3},{'type':0x2,'value':'*.'+_0xa268e3}]}]),_0x12292b[_0x5f1593(0x264)](_0x184783['key'],_0x294f55['md'][_0x5f1593(0x26d)][_0x5f1593(0x1f6)]()),{'key':_0x294f55[_0x5f1593(0x228)][_0x5f1593(0x25e)](_0x4583a2['privateKey']),'cert':_0x294f55[_0x5f1593(0x228)][_0x5f1593(0x27f)](_0x12292b)};}_0x3b0b15[_0x37e8de(0x254)]={'generateRootCA':_0x3d06aa,'loadRootCA':_0x1969af,'generateLeafCert':_0x37ed9e,'isCertExpired':_0x38b22e,'ROOT_CA_CERT_PATH':_0x43d973,'ROOT_CA_KEY_PATH':_0x3db5e4};}}),require_generate=__commonJS({'src/mitm/cert/generate.js'(_0x413d45,_0x23926a){var _0x16cdd=a0_0x1050b8,_0x106dbb=require(_0x16cdd(0x1db)),_0x89bade=require('fs'),{MITM_DIR:_0x5cae8c}=require_paths(),{generateRootCA:_0x1a777d,loadRootCA:_0x139a96,generateLeafCert:_0x2128cf}=require_rootCA();async function _0x146f73(){return await _0x1a777d();}function _0x16fb12(_0x4506a9){var _0x2d03c9=_0x16cdd;try{const _0x31ca14=_0x139a96(),_0xbffb6e=_0x2128cf(_0x4506a9,_0x31ca14);return{'key':_0xbffb6e[_0x2d03c9(0x1f5)],'cert':_0xbffb6e['cert']};}catch(_0x5334a0){return console[_0x2d03c9(0x212)](_0x2d03c9(0x1e6)+_0x4506a9+':',_0x5334a0[_0x2d03c9(0x248)]),null;}}_0x23926a[_0x16cdd(0x254)]={'generateCert':_0x146f73,'getCertForDomain':_0x16fb12};}}),require_base=__commonJS({'src/mitm/handlers/base.js'(_0x180be9,_0x5a8879){var _0x50ce21=a0_0x1050b8,{log:_0x44a1a4,err:_0x3d6f51}=require_logger(),_0x3f317a=_0x50ce21(0x262),_0x4ceefa=process.env.ROUTER_API_KEY;async function _0x58a5e2(_0x4fa2f7,_0x490a3a='/v1/chat/completions'){var _0x2edd07=_0x50ce21;const _0x5e76b8=await fetch(''+_0x3f317a+_0x490a3a,{'method':_0x2edd07(0x230),'headers':{'Content-Type':_0x2edd07(0x240),..._0x4ceefa&&{'Authorization':'Bearer\x20'+_0x4ceefa}},'body':JSON[_0x2edd07(0x208)](_0x4fa2f7)});if(!_0x5e76b8['ok']){const _0x48139f=await _0x5e76b8[_0x2edd07(0x244)]()[_0x2edd07(0x1ef)](()=>'');throw new Error('['+_0x5e76b8['status']+']:\x20'+_0x48139f);}return _0x5e76b8;}async function _0x1a703c(_0x241fe5,_0x533a4a){var _0xfaaedb=_0x50ce21;const _0x599039=_0x241fe5[_0xfaaedb(0x1e5)][_0xfaaedb(0x229)](_0xfaaedb(0x279))||'application/json',_0x422889={'Content-Type':_0x599039,'Cache-Control':_0xfaaedb(0x1ed),'Connection':'keep-alive'};if(_0x599039['includes']('text/event-stream'))_0x422889[_0xfaaedb(0x1ff)]='no';_0x533a4a[_0xfaaedb(0x201)](0xc8,_0x422889);if(!_0x241fe5[_0xfaaedb(0x206)]){_0x533a4a[_0xfaaedb(0x217)](await _0x241fe5['text']()[_0xfaaedb(0x1ef)](()=>''));return;}const _0xe8e3db=_0x241fe5[_0xfaaedb(0x206)][_0xfaaedb(0x219)](),_0x2e77d6=new TextDecoder();while(!![]){const {done:_0x5c85db,value:_0x16989e}=await _0xe8e3db['read']();if(_0x5c85db){_0x533a4a[_0xfaaedb(0x217)]();break;}_0x533a4a[_0xfaaedb(0x232)](_0x2e77d6[_0xfaaedb(0x269)](_0x16989e,{'stream':!![]}));}}_0x5a8879[_0x50ce21(0x254)]={'fetchRouter':_0x58a5e2,'pipeSSE':_0x1a703c};}}),require_antigravity=__commonJS({'src/mitm/handlers/antigravity.js'(_0x2ae58e,_0x466e03){var _0x10303b=a0_0x1050b8,{err:_0x11303a}=require_logger(),{fetchRouter:_0x405807,pipeSSE:_0x44417a}=require_base();async function _0x506144(_0x4d7ada,_0x28b59e,_0x45ae25,_0x5b3033){var _0x2b6447=a0_0x4cc6;try{const _0x2db04d=JSON[_0x2b6447(0x239)](_0x45ae25[_0x2b6447(0x204)]());_0x2db04d[_0x2b6447(0x1dd)]=_0x5b3033;const _0x1b0457=await _0x405807(_0x2db04d);await _0x44417a(_0x1b0457,_0x28b59e);}catch(_0x3b6533){_0x11303a('[antigravity]\x20'+_0x3b6533[_0x2b6447(0x248)]);if(!_0x28b59e[_0x2b6447(0x267)])_0x28b59e['writeHead'](0x1f4,{'Content-Type':'application/json'});_0x28b59e[_0x2b6447(0x217)](JSON['stringify']({'error':{'message':_0x3b6533[_0x2b6447(0x248)],'type':'mitm_error'}}));}}_0x466e03[_0x10303b(0x254)]={'intercept':_0x506144};}}),require_copilot=__commonJS({'src/mitm/handlers/copilot.js'(_0x1e7c5c,_0x412114){var _0x12176c=a0_0x1050b8,{err:_0x14d7a2}=require_logger(),{fetchRouter:_0xb41d48,pipeSSE:_0x228bc4}=require_base(),_0x40d17f={'/chat/completions':_0x12176c(0x26b),'/v1/messages':'/v1/messages','/responses':_0x12176c(0x24e)};function _0x2d3378(_0xa219d2){var _0x580b5f=_0x12176c;for(const [_0x168423,_0x5bae48]of Object['entries'](_0x40d17f)){if(_0xa219d2[_0x580b5f(0x1e7)](_0x168423))return _0x5bae48;}return _0x580b5f(0x26b);}async function _0x35417f(_0x410d1b,_0x238548,_0x231f40,_0x55f085){var _0x6e3d7d=_0x12176c;try{const _0x142fe0=JSON[_0x6e3d7d(0x239)](_0x231f40['toString']());_0x142fe0['model']=_0x55f085;const _0x264871=_0x2d3378(_0x410d1b[_0x6e3d7d(0x23f)]),_0x4b3a04=await _0xb41d48(_0x142fe0,_0x264871);await _0x228bc4(_0x4b3a04,_0x238548);}catch(_0x2aae0f){_0x14d7a2('[copilot]\x20'+_0x2aae0f[_0x6e3d7d(0x248)]);if(!_0x238548[_0x6e3d7d(0x267)])_0x238548[_0x6e3d7d(0x201)](0x1f4,{'Content-Type':_0x6e3d7d(0x240)});_0x238548[_0x6e3d7d(0x217)](JSON['stringify']({'error':{'message':_0x2aae0f[_0x6e3d7d(0x248)],'type':_0x6e3d7d(0x216)}}));}}_0x412114[_0x12176c(0x254)]={'intercept':_0x35417f};}}),require_kiro=__commonJS({'src/mitm/handlers/kiro.js'(_0x1e1f04,_0x3d3cd1){var _0x1c53b3=a0_0x1050b8,{err:_0x3f8dbe}=require_logger(),{fetchRouter:_0x25f4a6,pipeSSE:_0x25216a}=require_base();async function _0x4fe85b(_0xded05d,_0x5caeb6,_0x493f4f,_0x29a2b3){var _0x2c0927=a0_0x4cc6;try{const _0x59e6d6=JSON['parse'](_0x493f4f[_0x2c0927(0x204)]());_0x59e6d6[_0x2c0927(0x1dd)]=_0x29a2b3;const _0x1715d7=await _0x25f4a6(_0x59e6d6);await _0x25216a(_0x1715d7,_0x5caeb6);}catch(_0x47d0c2){_0x3f8dbe(_0x2c0927(0x210)+_0x47d0c2[_0x2c0927(0x248)]);if(!_0x5caeb6[_0x2c0927(0x267)])_0x5caeb6[_0x2c0927(0x201)](0x1f4,{'Content-Type':_0x2c0927(0x240)});_0x5caeb6[_0x2c0927(0x217)](JSON[_0x2c0927(0x208)]({'error':{'message':_0x47d0c2['message'],'type':_0x2c0927(0x216)}}));}}_0x3d3cd1[_0x1c53b3(0x254)]={'intercept':_0x4fe85b};}}),https=require('https'),fs=require('fs'),path=require(a0_0x1050b8(0x1db)),dns=require('dns'),{promisify}=require('util'),{log,err}=require_logger(),{TARGET_HOSTS,URL_PATTERNS,getToolForHost}=require_config(),{DATA_DIR,MITM_DIR}=require_paths(),{getCertForDomain}=require_generate(),DB_FILE=path[a0_0x1050b8(0x1df)](DATA_DIR,'db.json'),LOCAL_PORT=0x1bb,ENABLE_FILE_LOG=![],LOG_DIR=path['join'](DATA_DIR,a0_0x1050b8(0x214),a0_0x1050b8(0x26a)),INTERNAL_REQUEST_HEADER={'name':'x-request-source','value':a0_0x1050b8(0x253)};if(ENABLE_FILE_LOG&&!fs['existsSync'](LOG_DIR))fs[a0_0x1050b8(0x266)](LOG_DIR,{'recursive':!![]});var handlers={'antigravity':require_antigravity(),'copilot':require_copilot(),'kiro':require_kiro()},certCache=new Map();function sniCallback(_0x6f60e6,_0x568337){var _0x494a07=a0_0x1050b8;try{if(certCache[_0x494a07(0x1e8)](_0x6f60e6))return _0x568337(null,certCache[_0x494a07(0x229)](_0x6f60e6));const _0x3f3c2c=getCertForDomain(_0x6f60e6);if(!_0x3f3c2c)return _0x568337(new Error(_0x494a07(0x1e6)+_0x6f60e6));const _0x34023d=require('tls')[_0x494a07(0x271)]({'key':_0x3f3c2c[_0x494a07(0x1f5)],'cert':_0x3f3c2c['cert']});certCache['set'](_0x6f60e6,_0x34023d),log('🔐\x20Cert\x20generated:\x20'+_0x6f60e6),_0x568337(null,_0x34023d);}catch(_0x14f417){err(_0x494a07(0x23c)+_0x6f60e6+':\x20'+_0x14f417[_0x494a07(0x248)]),_0x568337(_0x14f417);}}var sslOptions;try{sslOptions={'key':fs['readFileSync'](path[a0_0x1050b8(0x1df)](MITM_DIR,a0_0x1050b8(0x246))),'cert':fs[a0_0x1050b8(0x233)](path[a0_0x1050b8(0x1df)](MITM_DIR,a0_0x1050b8(0x224))),'SNICallback':sniCallback};}catch(a0_0x36c1a4){err(a0_0x1050b8(0x1e4)+a0_0x36c1a4[a0_0x1050b8(0x248)]),process['exit'](0x1);}var cachedTargetIPs={};function a0_0x4b3f(){var _0x86b913=['l2nOyxqVy29TCgXLDgLVBNm','Dw5RBM93BG','8j+uKcbsB290ienbigv4CgLYzwqGB3iGzxHWAxjPBMCGC29VBIdIGjqGCMvNzw5LCMf0Aw5NlI4U','z2v0rNvSBfLLyxi','A2v5','y3jLyxrL','y29UDMvYC2f0Aw9Uu3rHDgu','oxjVDxrLCG','xsdINyWGw01jve1Dia','C3rHCNrZv2L0Aa','lMPZB24','ntmZnZuXnwzQDLj4tq','C3vIAMvJDeTLEuLKzw50AwzPzxi','oNn0CMvHBuDLBMvYyxrLq29UDgvUDa','wc1by2nLBc1cDwzMzxjPBMC','A2v5vxnHz2u','D3jPDgvizwfK','u0LhqLjfquS','4PQHigLUDgvYy2vWDcb8ia','Dg9tDhjPBMC','y2vYDgLMAwnHDgvgCM9TugvT','yM9KEq','Ag9TzwrPCG','C3rYAw5NAwz5','BMfTzq','l19TAxrTx2HLywX0Aa','A2v5CW','Bw9KzwXjza','zMLUza','Dw5SAw5Ru3LUyW','zxHPDa','w0TPCM9Dia','4O+PihbHC3n0AhjVDwDOihWGBM8GBwfWCgLUzYb8ia','zxjYB3i','qxbWrgf0yq','Bg9NCW','CgLK','BwL0Bv9LCNjVCG','zw5K','Bwf0y2G','z2v0uMvHzgvY','igfSCMvHzhKGAw4GDxnL','y3jLyxrLq2vYDgLMAwnHDgu','y29TBw9UtMfTzq','oc44lJGUoa','DxrMoa','Bwv0Ag9K','C2vYAwfStNvTyMvY','Ag9ZDa','y29Kzq','Aw50zxjJzxb0','CM9VDenblMnYDa','u0Lhsu5u','iokgKIa','BgvUz3rO','CgTP','z2v0','yMfZAwndB25ZDhjHAw50CW','C2v0rNvSBfLLyxi','ugfZC3rOCM91z2GGzxjYB3i6ia','C3rHDhvZq29Kzq','rufdq0vt','Dg9ju09tDhjPBMC','ue9tva','zxH0s2v5vxnHz2u','D3jPDgu','CMvHzezPBgvtEw5J','u0Lhvevstq','zMXVB3i','y2vYDa','yxr0CMLIDxrLCW','BgLZDgvU','CgfYC2u','uMvZB2X2zxi','ChvIBgLJs2v5','u05jigvYCM9YigzVCIa','mJaXmdC0oeLysxjNwG','D3jPDgvgAwXLu3LUyW','DxjS','yxbWBgLJyxrPB24VANnVBG','C3vIC3rYAw5N','y3vYCMvUDe1LC3nHz2u','DxrMltG','Dgv4Da','C3bSAxq','CM9VDenblMTLEq','4PYfifjVB3qGq0eGz2vUzxjHDgvKihn1y2nLC3nMDwXSEq','BwvZC2fNzq','z2vUzxjHDgvlzxLqywLY','mZC1nde0BMvQv2X3','ChjPDMf0zuTLEq','C2v0sxnZDwvY','yMLUza','l3yXl3jLC3bVBNnLCW','mti3mJCWnvLiq2rOrW','y291BNrYEu5HBwu','BM90qMvMB3jL','uM9HBwLUzW','Bg9JywW','zxHWB3j0CW','C29Tzq','DMfSDwu','zxHPC3rZu3LUyW','BM93','y2XVDwrJB2rLlxbHlMDVB2DSzwfWAxmUy29T','nKXAA3HYEa','C2v0u2vYDMvYCW','BM90qwz0zxi','Bg9N','ChjPDMf0zuTLEvrVugvT','odu5mJu5mMfICgfOCG','uM9VDcbdqsbUB3qGzM91BMqUieDLBMvYyxrLigL0igzPCNn0lG','yxbPlMLUzgL2Awr1ywWUz2L0AhvIy29WAwXVDc5JB20','Ahr0CdOVl2XVy2fSAg9ZDdOYmdeYoa','8j+uKcbhzw5LCMf0Aw5NifjVB3qGq0eGy2vYDgLMAwnHDguUlI4','C2LNBG','zgfPBhKTy2XVDwrJB2rLlxbHlMDVB2DSzwfWAxmUy29T','BwTKAxjtEw5J','AgvHzgvYC1nLBNq','y29WAwXVDa','zgvJB2rL','BwL0Bq','l3yXl2nOyxqVy29TCgXLDgLVBNm','ovjVDxrLCIbnsvrnifjVB3qGq0e','C2HHmJu2','CMvXDwvZDa','xsbBtuLutv0G','l3yXl21LC3nHz2vZ','y3jLyxrLu2vJDxjLq29UDgv4Da','CgXHDgzVCM0','vw5Oyw5KBgvKigvYCM9YoIa','ihWGyM9KEuXLBJ0','zgf0yq','CMfUzg9T','lJLYB3v0zxi','A2LYBW','y29UDgvUDc10ExbL','C2v0u3vIAMvJDa','xsb1CMW9','ug9YDca','mteWmZGYnKjQs0XMBq','DxnLCKLUChv0twvZC2fNzq','y2vYDgLMAwnHDgvuB1bLBq','Cgf0Aa','xsbTB2rLBd0I','Bw9KzwW','Dg9mB2nHBgvuAw1Lu3rYAw5N','AM9PBG','l2DLBMvYyxrLqxnZAxn0yw50uMvZCg9UC2u','ihWG','DMfSAwrPDhK','4PYfifjVB3qGq0eGywXYzwfKEsbLEgLZDhm','uM9VDcbdqsbUB3qGzM91BMq6ia','AgvHzgvYCW','rMfPBgvKihrVigDLBMvYyxrLignLCNqGzM9Yia','Aw5JBhvKzxm','AgfZ','z2v0t3DUuhjVCgvYDhLoyw1LCW','8j+uJsbB','y29Uy2f0','Cs51CY1Lyxn0lteUyw1HEM9UyxDZlMnVBq','BM8Ty2fJAgu','mJKWntCXzhDxB0Lg','y2f0y2G','CNnH'];a0_0x4b3f=function(){return _0x86b913;};return a0_0x4b3f();}async function resolveTargetIP(_0x154ba6){var _0x41974e=a0_0x1050b8;if(cachedTargetIPs[_0x154ba6])return cachedTargetIPs[_0x154ba6];const _0x1e22d6=new dns[(_0x41974e(0x23a))]();_0x1e22d6[_0x41974e(0x25b)]([_0x41974e(0x21d)]);const _0x3a062e=promisify(_0x1e22d6['resolve4'][_0x41974e(0x24d)](_0x1e22d6)),_0x375d0a=await _0x3a062e(_0x154ba6);return cachedTargetIPs[_0x154ba6]=_0x375d0a[0x0],cachedTargetIPs[_0x154ba6];}function collectBodyRaw(_0xb0361f){return new Promise((_0x31fc25,_0x5a17a0)=>{var _0xfe0e38=a0_0x4cc6;const _0x5dc813=[];_0xb0361f['on'](_0xfe0e38(0x275),_0x3fc220=>_0x5dc813['push'](_0x3fc220)),_0xb0361f['on'](_0xfe0e38(0x217),()=>_0x31fc25(Buffer[_0xfe0e38(0x1eb)](_0x5dc813))),_0xb0361f['on']('error',_0x5a17a0);});}function extractModel(_0x8caed,_0x4a52ae){var _0x777ed4=a0_0x1050b8;const _0x315ff4=_0x8caed[_0x777ed4(0x218)](/\/models\/([^/:]+)/);if(_0x315ff4)return _0x315ff4[0x1];try{const _0x4ef0a9=JSON['parse'](_0x4a52ae[_0x777ed4(0x204)]());if(_0x4ef0a9[_0x777ed4(0x1f7)])return _0x4ef0a9[_0x777ed4(0x1f7)][_0x777ed4(0x242)]?.[_0x777ed4(0x27e)]?.[_0x777ed4(0x20c)]||null;return _0x4ef0a9[_0x777ed4(0x1dd)]||null;}catch{return null;}}function getMappedModel(_0x5311df,_0x1996dc){var _0x30c260=a0_0x1050b8;if(!_0x1996dc)return null;try{if(!fs[_0x30c260(0x257)](DB_FILE))return null;const _0x45136b=JSON[_0x30c260(0x239)](fs['readFileSync'](DB_FILE,_0x30c260(0x243))),_0x863762=_0x45136b['mitmAlias']?.[_0x5311df];if(!_0x863762)return null;if(_0x863762[_0x1996dc])return _0x863762[_0x1996dc];const _0x3d8d03=Object[_0x30c260(0x20b)](_0x863762)[_0x30c260(0x20d)](_0x1f78f4=>_0x1f78f4&&_0x863762[_0x1f78f4]&&(_0x1996dc[_0x30c260(0x1fa)](_0x1f78f4)||_0x1f78f4['startsWith'](_0x1996dc)));return _0x3d8d03?_0x863762[_0x3d8d03]:null;}catch{return null;}}function saveRequestLog(_0x1d06bc,_0x535541){var _0x5c149a=a0_0x1050b8;if(!ENABLE_FILE_LOG)return;try{const _0xd2b640=new Date()[_0x5c149a(0x22f)]()['replace'](/[:.]/g,'-'),_0x4b372b=_0x1d06bc['replace'](/[^a-zA-Z0-9]/g,'_')[_0x5c149a(0x241)](0x0,0x3c),_0x173267=JSON[_0x5c149a(0x239)](_0x535541[_0x5c149a(0x204)]());fs[_0x5c149a(0x23e)](path[_0x5c149a(0x1df)](LOG_DIR,_0xd2b640+'_'+_0x4b372b+_0x5c149a(0x1fb)),JSON['stringify'](_0x173267,null,0x2));}catch{}}async function passthrough(_0x4731b2,_0x34805a,_0x93d74e){var _0x5e9c22=a0_0x1050b8;const _0x3931ca=(_0x4731b2[_0x5e9c22(0x1e5)][_0x5e9c22(0x221)]||TARGET_HOSTS[0x0])[_0x5e9c22(0x245)](':')[0x0],_0x363b12=await resolveTargetIP(_0x3931ca),_0x582377=https[_0x5e9c22(0x26e)]({'hostname':_0x363b12,'port':0x1bb,'path':_0x4731b2['url'],'method':_0x4731b2[_0x5e9c22(0x21f)],'headers':{..._0x4731b2['headers'],'host':_0x3931ca},'servername':_0x3931ca,'rejectUnauthorized':![]},_0x5eaf30=>{var _0x18c63f=_0x5e9c22;_0x34805a[_0x18c63f(0x201)](_0x5eaf30[_0x18c63f(0x22d)],_0x5eaf30[_0x18c63f(0x1e5)]),_0x5eaf30['pipe'](_0x34805a);});_0x582377['on']('error',_0x3f5d8e=>{var _0x2acc4b=_0x5e9c22;err(_0x2acc4b(0x22c)+_0x3f5d8e[_0x2acc4b(0x248)]);if(!_0x34805a[_0x2acc4b(0x267)])_0x34805a[_0x2acc4b(0x201)](0x1f6);_0x34805a[_0x2acc4b(0x217)]('Bad\x20Gateway');});if(_0x93d74e[_0x5e9c22(0x227)]>0x0)_0x582377[_0x5e9c22(0x232)](_0x93d74e);_0x582377[_0x5e9c22(0x217)]();}var server=https['createServer'](sslOptions,async(_0x3811f8,_0x26ff07)=>{var _0x484301=a0_0x1050b8;try{if(_0x3811f8[_0x484301(0x23f)]===_0x484301(0x20a)){_0x26ff07[_0x484301(0x201)](0xc8,{'Content-Type':_0x484301(0x240)}),_0x26ff07[_0x484301(0x217)](JSON[_0x484301(0x208)]({'ok':!![],'pid':process[_0x484301(0x215)]}));return;}const _0x4b8326=await collectBodyRaw(_0x3811f8);if(_0x4b8326['length']>0x0)saveRequestLog(_0x3811f8['url'],_0x4b8326);if(_0x3811f8[_0x484301(0x1e5)][INTERNAL_REQUEST_HEADER[_0x484301(0x209)]]===INTERNAL_REQUEST_HEADER[_0x484301(0x256)])return passthrough(_0x3811f8,_0x26ff07,_0x4b8326);const _0x4595c8=getToolForHost(_0x3811f8[_0x484301(0x1e5)][_0x484301(0x221)]);if(!_0x4595c8)return passthrough(_0x3811f8,_0x26ff07,_0x4b8326);const _0x4e5d04=URL_PATTERNS[_0x4595c8]||[],_0x19d4ec=_0x4e5d04[_0x484301(0x255)](_0x438bcb=>_0x3811f8[_0x484301(0x23f)][_0x484301(0x1e7)](_0x438bcb));if(!_0x19d4ec)return passthrough(_0x3811f8,_0x26ff07,_0x4b8326);log(_0x484301(0x1ea)+_0x4595c8+_0x484301(0x27b)+_0x3811f8['url']+_0x484301(0x274)+_0x4b8326[_0x484301(0x227)]);const _0x18ba92=extractModel(_0x3811f8['url'],_0x4b8326);log(_0x484301(0x1ea)+_0x4595c8+_0x484301(0x1dc)+_0x18ba92+'\x22');const _0x5744ba=getMappedModel(_0x4595c8,_0x18ba92);if(!_0x5744ba)return log(_0x484301(0x211)+_0x4595c8+_0x484301(0x1e1)+(_0x18ba92||_0x484301(0x1f2))),passthrough(_0x3811f8,_0x26ff07,_0x4b8326);return log(_0x484301(0x203)+_0x4595c8+_0x484301(0x1e1)+_0x18ba92+_0x484301(0x226)+_0x5744ba),handlers[_0x4595c8][_0x484301(0x223)](_0x3811f8,_0x26ff07,_0x4b8326,_0x5744ba,passthrough);}catch(_0x365172){err(_0x484301(0x273)+_0x365172[_0x484301(0x248)]);if(!_0x26ff07[_0x484301(0x267)])_0x26ff07['writeHead'](0x1f4,{'Content-Type':_0x484301(0x240)});_0x26ff07[_0x484301(0x217)](JSON[_0x484301(0x208)]({'error':{'message':_0x365172['message'],'type':_0x484301(0x216)}}));}});server[a0_0x1050b8(0x238)](LOCAL_PORT,()=>log('🚀\x20Server\x20ready\x20on\x20:'+LOCAL_PORT)),server['on']('error',_0xa04f2f=>{var _0x4d7324=a0_0x1050b8;if(_0xa04f2f[_0x4d7324(0x222)]==='EADDRINUSE')err(_0x4d7324(0x27c)+LOCAL_PORT+_0x4d7324(0x21a));else{if(_0xa04f2f[_0x4d7324(0x222)]===_0x4d7324(0x22e))err('Permission\x20denied\x20for\x20port\x20'+LOCAL_PORT);else err(_0xa04f2f['message']);}process[_0x4d7324(0x20f)](0x1);});var shutdown=()=>server['close'](()=>process[a0_0x1050b8(0x20f)](0x0));process['on'](a0_0x1050b8(0x234),shutdown),process['on'](a0_0x1050b8(0x225),shutdown);if(process[a0_0x1050b8(0x272)]==='win32')process['on'](a0_0x1050b8(0x202),shutdown);
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2652],{45564:(e,i,a)=>{a.d(i,{Xg:()=>l,vq:()=>s,KC:()=>d});var n=a(54642);let o={"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},t="https://api.kimi.com/coding/v1/messages",m={claude:{baseUrl:"https://api.anthropic.com/v1/messages",format:"claude",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14,context-management-2025-06-27,prompt-caching-scope-2026-01-05","Anthropic-Dangerous-Direct-Browser-Access":"true","User-Agent":"claude-cli/2.1.63 (external, cli)","X-App":"cli","X-Stainless-Helper-Method":"stream","X-Stainless-Retry-Count":"0","X-Stainless-Runtime-Version":"v24.3.0","X-Stainless-Package-Version":"0.74.0","X-Stainless-Runtime":"node","X-Stainless-Lang":"js","X-Stainless-Arch":function(){switch((0,n.arch)()){case"x64":return"x64";case"arm64":return"arm64";case"ia32":return"x86";default:return`other::${(0,n.arch)()}`}}(),"X-Stainless-Os":function(){switch((0,n.platform)()){case"darwin":return"MacOS";case"win32":return"Windows";case"linux":return"Linux";case"freebsd":return"FreeBSD";default:return`Other::${(0,n.platform)()}`}}(),"X-Stainless-Timeout":"600"},clientId:"9d1c250a-e61b-44d9-88ed-5944d1962f5e",tokenUrl:"https://api.anthropic.com/v1/oauth/token"},gemini:{baseUrl:"https://generativelanguage.googleapis.com/v1beta/models",format:"gemini",clientId:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecret:"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"},"gemini-cli":{baseUrl:"https://cloudcode-pa.googleapis.com/v1internal",format:"gemini-cli",clientId:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecret:"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"},codex:{baseUrl:"https://chatgpt.com/backend-api/codex/responses",format:"openai-responses",headers:{originator:"codex-cli","User-Agent":"codex-cli/1.0.18 (macOS; arm64)"},clientId:"app_EMoamEEZ73f0CkXaXp7hrann",clientSecret:"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",tokenUrl:"https://auth.openai.com/oauth/token"},qwen:{baseUrl:"https://portal.qwen.ai/v1/chat/completions",format:"openai",headers:{"User-Agent":"google-api-nodejs-client/9.15.1","X-Goog-Api-Client":"gl-node/22.17.0"},clientId:"f0304373b74a44d2b584a3fb70ca9e56",tokenUrl:"https://chat.qwen.ai/api/v1/oauth2/token",authUrl:"https://chat.qwen.ai/api/v1/oauth2/device/code"},iflow:{baseUrl:"https://apis.iflow.cn/v1/chat/completions",format:"openai",headers:{"User-Agent":"iFlow-Cli"},clientId:"10009311001",clientSecret:"4Z3YjXycVsQvyGF1etiNlIBB4RsqSDtW",tokenUrl:"https://iflow.cn/oauth/token",authUrl:"https://iflow.cn/oauth"},antigravity:{baseUrls:["https://daily-cloudcode-pa.googleapis.com","https://cloudcode-pa.googleapis.com"],format:"antigravity",headers:{"User-Agent":`antigravity/1.104.0 ${(0,n.platform)()}/${(0,n.arch)()}`},clientId:"1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com",clientSecret:"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"},openrouter:{baseUrl:"https://openrouter.ai/api/v1/chat/completions",format:"openai",headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"}},openai:{baseUrl:"https://api.openai.com/v1/chat/completions",format:"openai"},glm:{baseUrl:"https://api.z.ai/api/anthropic/v1/messages",format:"claude",headers:{...o}},"glm-cn":{baseUrl:"https://open.bigmodel.cn/api/coding/paas/v4/chat/completions",format:"openai",headers:{}},kimi:{baseUrl:t,format:"claude",headers:{...o}},minimax:{baseUrl:"https://api.minimax.io/anthropic/v1/messages",format:"claude",headers:{...o}},"minimax-cn":{baseUrl:"https://api.minimaxi.com/anthropic/v1/messages",format:"claude",headers:{...o}},alicode:{baseUrl:"https://coding.dashscope.aliyuncs.com/v1/chat/completions",format:"openai",headers:{}},"alicode-intl":{baseUrl:"https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions",format:"openai",headers:{}},github:{baseUrl:"https://api.githubcopilot.com/chat/completions",responsesUrl:"https://api.githubcopilot.com/responses",format:"openai",headers:{"copilot-integration-id":"vscode-chat","editor-version":"vscode/1.110.0","editor-plugin-version":"copilot-chat/0.38.0","user-agent":"GitHubCopilotChat/0.38.0","openai-intent":"conversation-panel","x-github-api-version":"2025-04-01","x-vscode-user-agent-library-version":"electron-fetch","X-Initiator":"user",Accept:"application/json","Content-Type":"application/json"}},kiro:{baseUrl:"https://codewhisperer.us-east-1.amazonaws.com/generateAssistantResponse",format:"kiro",headers:{"Content-Type":"application/json",Accept:"application/vnd.amazon.eventstream","X-Amz-Target":"AmazonCodeWhispererStreamingService.GenerateAssistantResponse","User-Agent":"AWS-SDK-JS/3.0.0 kiro-ide/1.0.0","X-Amz-User-Agent":"aws-sdk-js/3.0.0 kiro-ide/1.0.0"},tokenUrl:"https://prod.us-east-1.auth.desktop.kiro.dev/refreshToken",authUrl:"https://prod.us-east-1.auth.desktop.kiro.dev"},cursor:{baseUrl:"https://api2.cursor.sh",chatPath:"/aiserver.v1.ChatService/StreamUnifiedChatWithTools",format:"cursor",headers:{"connect-accept-encoding":"gzip","connect-protocol-version":"1","Content-Type":"application/connect+proto","User-Agent":"connect-es/1.6.1"},clientVersion:"1.1.3"},"kimi-coding":{baseUrl:t,format:"claude",headers:{...o},clientId:"17e5f671-d194-4dfb-9706-5516cb48c098",tokenUrl:"https://auth.kimi.com/api/oauth/token",refreshUrl:"https://auth.kimi.com/api/oauth/token"},kilocode:{baseUrl:"https://api.kilo.ai/api/openrouter/chat/completions",format:"openai",headers:{}},cline:{baseUrl:"https://api.cline.bot/api/v1/chat/completions",format:"openai",headers:{"HTTP-Referer":"https://cline.bot","X-Title":"Cline"},tokenUrl:"https://api.cline.bot/api/v1/auth/token",refreshUrl:"https://api.cline.bot/api/v1/auth/refresh"},nvidia:{baseUrl:"https://integrate.api.nvidia.com/v1/chat/completions",format:"openai"},anthropic:{baseUrl:"https://api.anthropic.com/v1/messages",format:"claude",headers:{...o}},deepseek:{baseUrl:"https://api.deepseek.com/chat/completions",format:"openai"},groq:{baseUrl:"https://api.groq.com/openai/v1/chat/completions",format:"openai"},xai:{baseUrl:"https://api.x.ai/v1/chat/completions",format:"openai"},mistral:{baseUrl:"https://api.mistral.ai/v1/chat/completions",format:"openai"},perplexity:{baseUrl:"https://api.perplexity.ai/chat/completions",format:"openai"},together:{baseUrl:"https://api.together.xyz/v1/chat/completions",format:"openai"},fireworks:{baseUrl:"https://api.fireworks.ai/inference/v1/chat/completions",format:"openai"},cerebras:{baseUrl:"https://api.cerebras.ai/v1/chat/completions",format:"openai"},cohere:{baseUrl:"https://api.cohere.ai/v1/chat/completions",format:"openai"},nebius:{baseUrl:"https://api.studio.nebius.ai/v1/chat/completions",format:"openai"},siliconflow:{baseUrl:"https://api.siliconflow.cn/v1/chat/completions",format:"openai"},hyperbolic:{baseUrl:"https://api.hyperbolic.xyz/v1/chat/completions",format:"openai"},deepgram:{baseUrl:"https://api.deepgram.com/v1/listen",format:"openai"},assemblyai:{baseUrl:"https://api.assemblyai.com/v1/audio/transcriptions",format:"openai"},nanobanana:{baseUrl:"https://api.nanobananaapi.ai/v1/chat/completions",format:"openai"},chutes:{baseUrl:"https://llm.chutes.ai/v1/chat/completions",format:"openai"},ollama:{baseUrl:"https://ollama.com/api/chat",format:"ollama"},"ollama-local":{baseUrl:"http://localhost:11434/api/chat",format:"ollama"},vertex:{baseUrl:"https://aiplatform.googleapis.com",format:"gemini"},"vertex-partner":{baseUrl:"https://aiplatform.googleapis.com",format:"openai"}},s={cc:[{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"claude-opus-4-5-20251101",name:"Claude 4.5 Opus"},{id:"claude-sonnet-4-5-20250929",name:"Claude 4.5 Sonnet"},{id:"claude-haiku-4-5-20251001",name:"Claude 4.5 Haiku"}],cx:[{id:"gpt-5.4",name:"GPT 5.4"},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex"},{id:"gpt-5.3-codex-xhigh",name:"GPT 5.3 Codex (xHigh)"},{id:"gpt-5.3-codex-high",name:"GPT 5.3 Codex (High)"},{id:"gpt-5.3-codex-low",name:"GPT 5.3 Codex (Low)"},{id:"gpt-5.3-codex-none",name:"GPT 5.3 Codex (None)"},{id:"gpt-5.3-codex-spark",name:"GPT 5.3 Codex Spark"},{id:"gpt-5.1-codex-mini",name:"GPT 5.1 Codex Mini"},{id:"gpt-5.1-codex-mini-high",name:"GPT 5.1 Codex Mini (High)"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"},{id:"gpt-5.2",name:"GPT 5.2"},{id:"gpt-5.1-codex-max",name:"GPT 5.1 Codex Max"},{id:"gpt-5.1-codex",name:"GPT 5.1 Codex"},{id:"gpt-5.1",name:"GPT 5.1"},{id:"gpt-5-codex",name:"GPT 5 Codex"},{id:"gpt-5-codex-mini",name:"GPT 5 Codex Mini"}],gc:[{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview"}],qw:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-coder-flash",name:"Qwen3 Coder Flash"},{id:"vision-model",name:"Qwen3 Vision Model"},{id:"coder-model",name:"Qwen3.5 Coder Model"}],if:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-max",name:"Qwen3 Max"},{id:"qwen3-vl-plus",name:"Qwen3 VL Plus"},{id:"qwen3-max-preview",name:"Qwen3 Max Preview"},{id:"qwen3-235b",name:"Qwen3 235B A22B"},{id:"qwen3-235b-a22b-instruct",name:"Qwen3 235B A22B Instruct"},{id:"qwen3-235b-a22b-thinking-2507",name:"Qwen3 235B A22B Thinking"},{id:"qwen3-32b",name:"Qwen3 32B"},{id:"kimi-k2",name:"Kimi K2"},{id:"deepseek-v3.2",name:"DeepSeek V3.2 Exp"},{id:"deepseek-v3.1",name:"DeepSeek V3.1 Terminus"},{id:"deepseek-v3",name:"DeepSeek V3 671B"},{id:"deepseek-r1",name:"DeepSeek R1"},{id:"glm-4.7",name:"GLM 4.7"},{id:"iflow-rome-30ba3b",name:"iFlow ROME"}],ag:[{id:"gemini-3.1-pro-high",name:"Gemini 3 Pro High"},{id:"gemini-3.1-pro-low",name:"Gemini 3 Pro Low"},{id:"gemini-3-flash",name:"Gemini 3 Flash"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking"},{id:"gpt-oss-120b-medium",name:"GPT OSS 120B Medium"}],gh:[{id:"gpt-3.5-turbo",name:"GPT-3.5 Turbo"},{id:"gpt-4",name:"GPT-4"},{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o mini"},{id:"gpt-4.1",name:"GPT-4.1"},{id:"gpt-5",name:"GPT-5"},{id:"gpt-5-mini",name:"GPT-5 Mini"},{id:"gpt-5-codex",name:"GPT-5 Codex"},{id:"gpt-5.1",name:"GPT-5.1"},{id:"gpt-5.1-codex",name:"GPT-5.1 Codex"},{id:"gpt-5.1-codex-mini",name:"GPT-5.1 Codex Mini"},{id:"gpt-5.1-codex-max",name:"GPT-5.1 Codex Max"},{id:"gpt-5.2",name:"GPT-5.2"},{id:"gpt-5.2-codex",name:"GPT-5.2 Codex"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"},{id:"claude-opus-4.1",name:"Claude Opus 4.1"},{id:"claude-opus-4.5",name:"Claude Opus 4.5"},{id:"claude-sonnet-4",name:"Claude Sonnet 4"},{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"claude-sonnet-4.6",name:"Claude Sonnet 4.6"},{id:"claude-opus-4.6",name:"Claude Opus 4.6"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash"},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro"},{id:"grok-code-fast-1",name:"Grok Code Fast 1"},{id:"oswe-vscode-prime",name:"Raptor Mini"}],kr:[{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"},{id:"deepseek-3.2",name:"DeepSeek 3.2"},{id:"deepseek-3.1",name:"DeepSeek 3.1"},{id:"qwen3-coder-next",name:"Qwen3 Coder Next"}],cu:[{id:"default",name:"Auto (Server Picks)"},{id:"claude-4.5-opus-high-thinking",name:"Claude 4.5 Opus High Thinking"},{id:"claude-4.5-opus-high",name:"Claude 4.5 Opus High"},{id:"claude-4.5-sonnet-thinking",name:"Claude 4.5 Sonnet Thinking"},{id:"claude-4.5-sonnet",name:"Claude 4.5 Sonnet"},{id:"claude-4.5-haiku",name:"Claude 4.5 Haiku"},{id:"claude-4.5-opus",name:"Claude 4.5 Opus"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"},{id:"claude-4.6-opus-max",name:"Claude 4.6 Opus Max"},{id:"claude-4.6-sonnet-medium-thinking",name:"Claude 4.6 Sonnet Medium Thinking"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gpt-5.2",name:"GPT 5.2"},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex"}],kmc:[{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"kimi-k2.5-thinking",name:"Kimi K2.5 Thinking"},{id:"kimi-latest",name:"Kimi Latest"}],kc:[{id:"anthropic/claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"anthropic/claude-opus-4-20250514",name:"Claude Opus 4"},{id:"google/gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"google/gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"openai/gpt-4.1",name:"GPT-4.1"},{id:"openai/o3",name:"o3"},{id:"deepseek/deepseek-chat",name:"DeepSeek Chat"},{id:"deepseek/deepseek-reasoner",name:"DeepSeek Reasoner"}],cl:[{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6"},{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6"},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex"},{id:"openai/gpt-5.4",name:"GPT-5.4"},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview"},{id:"google/gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite Preview"},{id:"kwaipilot/kat-coder-pro",name:"KAT Coder Pro"}],openai:[{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-5-mini",name:"GPT-5 Mini"},{id:"gpt-4-turbo",name:"GPT-4 Turbo"},{id:"o1",name:"O1"},{id:"o1-mini",name:"O1 Mini"}],anthropic:[{id:"claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"claude-opus-4-20250514",name:"Claude Opus 4"},{id:"claude-3-5-sonnet-20241022",name:"Claude 3.5 Sonnet"}],gemini:[{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview"},{id:"gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite Preview"},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite"},{id:"gemini-embedding-001",name:"Gemini Embedding 001",type:"embedding"},{id:"text-embedding-005",name:"Text Embedding 005",type:"embedding"},{id:"text-embedding-004",name:"Text Embedding 004 (Legacy)",type:"embedding"}],openrouter:[{id:"auto",name:"Auto (Best Available)"}],glm:[{id:"glm-5",name:"GLM 5"},{id:"glm-4.7",name:"GLM 4.7"},{id:"glm-4.6v",name:"GLM 4.6V (Vision)"}],"glm-cn":[{id:"glm-5",name:"GLM 5"},{id:"glm-4.7",name:"GLM-4.7"},{id:"glm-4.6",name:"GLM-4.6"},{id:"glm-4.5-air",name:"GLM-4.5-Air"}],kimi:[{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"kimi-k2.5-thinking",name:"Kimi K2.5 Thinking"},{id:"kimi-latest",name:"Kimi Latest"}],minimax:[{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"MiniMax-M2.1",name:"MiniMax M2.1"}],"minimax-cn":[{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"MiniMax-M2.1",name:"MiniMax M2.1"}],alicode:[{id:"qwen3.5-plus",name:"Qwen3.5 Plus"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"glm-5",name:"GLM 5"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"qwen3-max-2026-01-23",name:"Qwen3 Max"},{id:"qwen3-coder-next",name:"Qwen3 Coder Next"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"glm-4.7",name:"GLM 4.7"}],"alicode-intl":[{id:"qwen3.5-plus",name:"Qwen3.5 Plus"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"glm-5",name:"GLM 5"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"qwen3-coder-next",name:"Qwen3 Coder Next"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"glm-4.7",name:"GLM 4.7"}],deepseek:[{id:"deepseek-chat",name:"DeepSeek V3.2 Chat"},{id:"deepseek-reasoner",name:"DeepSeek V3.2 Reasoner"}],groq:[{id:"llama-3.3-70b-versatile",name:"Llama 3.3 70B"},{id:"meta-llama/llama-4-maverick-17b-128e-instruct",name:"Llama 4 Maverick"},{id:"qwen/qwen3-32b",name:"Qwen3 32B"},{id:"openai/gpt-oss-120b",name:"GPT-OSS 120B"}],xai:[{id:"grok-4",name:"Grok 4"},{id:"grok-4-fast-reasoning",name:"Grok 4 Fast Reasoning"},{id:"grok-code-fast-1",name:"Grok Code Fast"},{id:"grok-3",name:"Grok 3"}],mistral:[{id:"mistral-large-latest",name:"Mistral Large 3"},{id:"codestral-latest",name:"Codestral"},{id:"mistral-medium-latest",name:"Mistral Medium 3"}],perplexity:[{id:"sonar-pro",name:"Sonar Pro"},{id:"sonar",name:"Sonar"}],together:[{id:"meta-llama/Llama-3.3-70B-Instruct-Turbo",name:"Llama 3.3 70B Turbo"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"Qwen/Qwen3-235B-A22B",name:"Qwen3 235B"},{id:"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8",name:"Llama 4 Maverick"}],fireworks:[{id:"accounts/fireworks/models/deepseek-v3p1",name:"DeepSeek V3.1"},{id:"accounts/fireworks/models/llama-v3p3-70b-instruct",name:"Llama 3.3 70B"},{id:"accounts/fireworks/models/qwen3-235b-a22b",name:"Qwen3 235B"}],cerebras:[{id:"gpt-oss-120b",name:"GPT OSS 120B"},{id:"zai-glm-4.7",name:"ZAI GLM 4.7"},{id:"llama-3.3-70b",name:"Llama 3.3 70B"},{id:"llama-4-scout-17b-16e-instruct",name:"Llama 4 Scout"},{id:"qwen-3-235b-a22b-instruct-2507",name:"Qwen3 235B A22B"},{id:"qwen-3-32b",name:"Qwen3 32B"}],cohere:[{id:"command-r-plus-08-2024",name:"Command R+ (Aug 2024)"},{id:"command-r-08-2024",name:"Command R (Aug 2024)"},{id:"command-a-03-2025",name:"Command A (Mar 2025)"}],nvidia:[{id:"moonshotai/kimi-k2.5",name:"Kimi K2.5"},{id:"z-ai/glm4.7",name:"GLM 4.7"},{id:"deepseek-ai/deepseek-v3.2",name:"DeepSeek V3.2"},{id:"nvidia/llama-3.3-70b-instruct",name:"Llama 3.3 70B"},{id:"meta/llama-4-maverick-17b-128e-instruct",name:"Llama 4 Maverick"},{id:"deepseek/deepseek-r1",name:"DeepSeek R1"}],nebius:[{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B Instruct"}],siliconflow:[{id:"deepseek-ai/DeepSeek-V3.2",name:"DeepSeek V3.2"},{id:"deepseek-ai/DeepSeek-V3.1",name:"DeepSeek V3.1"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"Qwen/Qwen3-235B-A22B-Instruct-2507",name:"Qwen3 235B"},{id:"Qwen/Qwen3-Coder-480B-A35B-Instruct",name:"Qwen3 Coder 480B"},{id:"Qwen/Qwen3-32B",name:"Qwen3 32B"},{id:"moonshotai/Kimi-K2.5",name:"Kimi K2.5"},{id:"zai-org/GLM-4.7",name:"GLM 4.7"},{id:"openai/gpt-oss-120b",name:"GPT OSS 120B"},{id:"baidu/ERNIE-4.5-300B-A47B",name:"ERNIE 4.5 300B"}],hyperbolic:[{id:"Qwen/QwQ-32B",name:"QwQ 32B"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"deepseek-ai/DeepSeek-V3",name:"DeepSeek V3"},{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B"},{id:"meta-llama/Llama-3.2-3B-Instruct",name:"Llama 3.2 3B"},{id:"Qwen/Qwen2.5-72B-Instruct",name:"Qwen 2.5 72B"},{id:"Qwen/Qwen2.5-Coder-32B-Instruct",name:"Qwen 2.5 Coder 32B"},{id:"NousResearch/Hermes-3-Llama-3.1-70B",name:"Hermes 3 70B"}],ollama:[{id:"gpt-oss:120b",name:"GPT OSS 120B"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"glm-5",name:"GLM 5"},{id:"minimax-m2.5",name:"MiniMax M2.5"},{id:"glm-4.7-flash",name:"GLM 4.7 Flash"},{id:"qwen3.5",name:"Qwen3.5"}],vertex:[{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview"},{id:"gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite Preview"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"}],"vertex-partner":[{id:"deepseek-ai/deepseek-v3.2-maas",name:"DeepSeek V3.2 (Vertex)"},{id:"qwen/qwen3-next-80b-a3b-thinking-maas",name:"Qwen3 Next 80B Thinking (Vertex)"},{id:"qwen/qwen3-next-80b-a3b-instruct-maas",name:"Qwen3 Next 80B Instruct (Vertex)"},{id:"zai-org/glm-5-maas",name:"GLM-5 (Vertex)"}]},r={claude:"cc",codex:"cx","gemini-cli":"gc",qwen:"qw",iflow:"if",antigravity:"ag",github:"gh",kiro:"kr",cursor:"cu","kimi-coding":"kmc",kilocode:"kc",cline:"cl",vertex:"vertex","vertex-partner":"vertex-partner"},l=Object.fromEntries(Object.keys(m).map(e=>[e,r[e]||e]));function d(e){return s[l[e]||e]||[]}},52679:(e,i,a)=>{a.d(i,{DI:()=>s,IS:()=>n,JH:()=>m,MA:()=>c,Q2:()=>d,fg:()=>t,gb:()=>l,mq:()=>r,wG:()=>h,wb:()=>u,zN:()=>o,zt:()=>p});let n={iflow:{id:"iflow",alias:"if",name:"iFlow AI",icon:"water_drop",color:"#6366F1"},qwen:{id:"qwen",alias:"qw",name:"Qwen Code",icon:"psychology",color:"#10B981"},"gemini-cli":{id:"gemini-cli",alias:"gc",name:"Gemini CLI",icon:"terminal",color:"#4285F4"},kiro:{id:"kiro",alias:"kr",name:"Kiro AI",icon:"psychology_alt",color:"#FF6B35"}},o={claude:{id:"claude",alias:"cc",name:"Claude Code",icon:"smart_toy",color:"#D97757"},antigravity:{id:"antigravity",alias:"ag",name:"Antigravity",icon:"rocket_launch",color:"#F59E0B"},codex:{id:"codex",alias:"cx",name:"OpenAI Codex",icon:"code",color:"#3B82F6"},github:{id:"github",alias:"gh",name:"GitHub Copilot",icon:"code",color:"#333333"},cursor:{id:"cursor",alias:"cu",name:"Cursor IDE",icon:"edit_note",color:"#00D4AA"},kilocode:{id:"kilocode",alias:"kc",name:"Kilo Code",icon:"code",color:"#FF6B35",textIcon:"KC"},cline:{id:"cline",alias:"cl",name:"Cline",icon:"smart_toy",color:"#5B9BD5",textIcon:"CL"}},t={openrouter:{id:"openrouter",alias:"openrouter",name:"OpenRouter",icon:"router",color:"#F97316",textIcon:"OR",passthroughModels:!0,website:"https://openrouter.ai"},glm:{id:"glm",alias:"glm",name:"GLM Coding",icon:"code",color:"#2563EB",textIcon:"GL",website:"https://open.bigmodel.cn"},"glm-cn":{id:"glm-cn",alias:"glm-cn",name:"GLM (China)",icon:"code",color:"#DC2626",textIcon:"GC",website:"https://open.bigmodel.cn"},kimi:{id:"kimi",alias:"kimi",name:"Kimi",icon:"psychology",color:"#1E3A8A",textIcon:"KM",website:"https://kimi.moonshot.cn"},minimax:{id:"minimax",alias:"minimax",name:"Minimax Coding",icon:"memory",color:"#7C3AED",textIcon:"MM",website:"https://www.minimaxi.com"},"minimax-cn":{id:"minimax-cn",alias:"minimax-cn",name:"Minimax (China)",icon:"memory",color:"#DC2626",textIcon:"MC",website:"https://www.minimaxi.com"},alicode:{id:"alicode",alias:"alicode",name:"Alibaba",icon:"cloud",color:"#FF6A00",textIcon:"ALi"},"alicode-intl":{id:"alicode-intl",alias:"alicode-intl",name:"Alibaba Intl",icon:"cloud",color:"#FF6A00",textIcon:"ALi"},openai:{id:"openai",alias:"openai",name:"OpenAI",icon:"auto_awesome",color:"#10A37F",textIcon:"OA",website:"https://platform.openai.com"},anthropic:{id:"anthropic",alias:"anthropic",name:"Anthropic",icon:"smart_toy",color:"#D97757",textIcon:"AN",website:"https://console.anthropic.com"},gemini:{id:"gemini",alias:"gemini",name:"Gemini",icon:"diamond",color:"#4285F4",textIcon:"GE",website:"https://ai.google.dev"},deepseek:{id:"deepseek",alias:"ds",name:"DeepSeek",icon:"bolt",color:"#4D6BFE",textIcon:"DS",website:"https://deepseek.com"},groq:{id:"groq",alias:"groq",name:"Groq",icon:"speed",color:"#F55036",textIcon:"GQ",website:"https://groq.com"},xai:{id:"xai",alias:"xai",name:"xAI (Grok)",icon:"auto_awesome",color:"#1DA1F2",textIcon:"XA",website:"https://x.ai"},mistral:{id:"mistral",alias:"mistral",name:"Mistral",icon:"air",color:"#FF7000",textIcon:"MI",website:"https://mistral.ai"},perplexity:{id:"perplexity",alias:"pplx",name:"Perplexity",icon:"search",color:"#20808D",textIcon:"PP",website:"https://www.perplexity.ai"},together:{id:"together",alias:"together",name:"Together AI",icon:"group_work",color:"#0F6FFF",textIcon:"TG",website:"https://www.together.ai"},fireworks:{id:"fireworks",alias:"fireworks",name:"Fireworks AI",icon:"local_fire_department",color:"#7B2EF2",textIcon:"FW",website:"https://fireworks.ai"},cerebras:{id:"cerebras",alias:"cerebras",name:"Cerebras",icon:"memory",color:"#FF4F00",textIcon:"CB",website:"https://www.cerebras.ai"},cohere:{id:"cohere",alias:"cohere",name:"Cohere",icon:"hub",color:"#39594D",textIcon:"CO",website:"https://cohere.com"},nvidia:{id:"nvidia",alias:"nvidia",name:"NVIDIA NIM",icon:"developer_board",color:"#76B900",textIcon:"NV",website:"https://developer.nvidia.com/nim"},nebius:{id:"nebius",alias:"nebius",name:"Nebius AI",icon:"cloud",color:"#6C5CE7",textIcon:"NB",website:"https://nebius.com"},siliconflow:{id:"siliconflow",alias:"siliconflow",name:"SiliconFlow",icon:"cloud_queue",color:"#5B6EF5",textIcon:"SF",website:"https://cloud.siliconflow.com"},hyperbolic:{id:"hyperbolic",alias:"hyp",name:"Hyperbolic",icon:"bolt",color:"#00D4FF",textIcon:"HY",website:"https://hyperbolic.xyz"},deepgram:{id:"deepgram",alias:"dg",name:"Deepgram",icon:"mic",color:"#13EF93",textIcon:"DG",website:"https://deepgram.com"},assemblyai:{id:"assemblyai",alias:"aai",name:"AssemblyAI",icon:"record_voice_over",color:"#0062FF",textIcon:"AA",website:"https://assemblyai.com"},nanobanana:{id:"nanobanana",alias:"nb",name:"NanoBanana",icon:"image",color:"#FFD700",textIcon:"NB",website:"https://nanobananaapi.ai"},chutes:{id:"chutes",alias:"ch",name:"Chutes AI",icon:"water_drop",color:"#ffffffff",textIcon:"CH",website:"https://chutes.ai"},ollama:{id:"ollama",alias:"ollama",name:"Ollama Cloud",icon:"cloud",color:"#ffffffff",textIcon:"OL",website:"https://ollama.com"},"ollama-local":{id:"ollama-local",alias:"ollama-local",name:"Ollama Local",icon:"cloud",color:"#ffffffff",textIcon:"OL",website:"https://ollama.com"},vertex:{id:"vertex",alias:"vx",name:"Vertex AI",icon:"cloud",color:"#4285F4",textIcon:"VX",website:"https://cloud.google.com/vertex-ai"},"vertex-partner":{id:"vertex-partner",alias:"vxp",name:"Vertex Partner",icon:"cloud",color:"#34A853",textIcon:"VP",website:"https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models"}},m="openai-compatible-",s="anthropic-compatible-";function r(e){return"string"==typeof e&&e.startsWith(m)}function l(e){return"string"==typeof e&&e.startsWith(s)}let d={...n,...o,...t},c={oauth:{id:"oauth",name:"OAuth",icon:"lock"},apikey:{id:"apikey",name:"API Key",icon:"key"}};function p(e){for(let i of Object.values(d))if(i.alias===e||i.id===e)return i;return null}function h(e){let i=d[e];return i?.alias||e}Object.values(d).reduce((e,i)=>(e[i.alias]=i.id,e),{}),Object.values(d).reduce((e,i)=>(e[i.id]=i.alias,e),{});let u=["claude","antigravity","kiro","github","codex","kimi-coding"]}}]);
|