@yina-npm/openrouterx 0.4.21 → 0.4.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/app/.next/BUILD_ID +1 -1
- package/app/.next/app-path-routes-manifest.json +5 -2
- package/app/.next/build-manifest.json +2 -2
- package/app/.next/routes-manifest.json +18 -0
- package/app/.next/server/app/(dashboard)/dashboard/admin/keys/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/admin/keys/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/admin/users/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/admin/users/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/quota/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/skills/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/user/page.js +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/user/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error/page.js +3 -3
- package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +1 -1
- package/app/.next/server/app/_global-error.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page.js +2 -2
- package/app/.next/server/app/_not-found/page_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.js +1 -1
- package/app/.next/server/app/api/auth/logout/route.js +1 -1
- package/app/.next/server/app/api/auth/me/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/inject-auth/route.js +1 -0
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/inject-auth/route.js.nft.json +1 -0
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/inject-auth/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/restart/route.js +1 -0
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/restart/route.js.nft.json +1 -0
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/restart/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/test/route.js +1 -0
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/test/route.js.nft.json +1 -0
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/test/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/cli-tools/claude-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/codex-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/copilot-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/cowork-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/droid-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/hermes-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/opencode-settings/route.js +2 -2
- package/app/.next/server/app/api/cloud/auth/route.js +1 -1
- package/app/.next/server/app/api/cloud/credentials/update/route.js +1 -1
- package/app/.next/server/app/api/cloud/model/resolve/route.js +1 -1
- package/app/.next/server/app/api/cloud/models/alias/route.js +1 -1
- package/app/.next/server/app/api/combos/[id]/route.js +1 -1
- package/app/.next/server/app/api/combos/route.js +1 -1
- package/app/.next/server/app/api/health/route.js +1 -1
- package/app/.next/server/app/api/init/route.js +1 -1
- package/app/.next/server/app/api/keys/[id]/route.js +1 -1
- package/app/.next/server/app/api/keys/route.js +1 -1
- package/app/.next/server/app/api/locale/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/voices/route.js +1 -1
- package/app/.next/server/app/api/models/alias/route.js +1 -1
- package/app/.next/server/app/api/models/availability/route.js +1 -1
- package/app/.next/server/app/api/models/custom/route.js +1 -1
- package/app/.next/server/app/api/models/disabled/route.js +1 -1
- package/app/.next/server/app/api/models/route.js +1 -1
- package/app/.next/server/app/api/models/test/route.js +1 -1
- package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
- package/app/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
- package/app/.next/server/app/api/oauth/cursor/import/route.js +1 -1
- package/app/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
- package/app/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/auto-import/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/import/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
- package/app/.next/server/app/api/pricing/route.js +1 -1
- package/app/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
- package/app/.next/server/app/api/provider-nodes/route.js +1 -1
- package/app/.next/server/app/api/provider-nodes/validate/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/models/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
- package/app/.next/server/app/api/providers/client/route.js +1 -1
- package/app/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
- package/app/.next/server/app/api/providers/route.js +1 -1
- package/app/.next/server/app/api/providers/suggested-models/route.js +1 -1
- package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
- package/app/.next/server/app/api/providers/validate/route.js +1 -1
- package/app/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
- package/app/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
- package/app/.next/server/app/api/proxy-pools/route.js +1 -1
- package/app/.next/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
- package/app/.next/server/app/api/settings/database/route.js +1 -1
- package/app/.next/server/app/api/settings/proxy-test/route.js +1 -1
- package/app/.next/server/app/api/settings/require-login/route.js +1 -1
- package/app/.next/server/app/api/settings/route.js +1 -1
- package/app/.next/server/app/api/shutdown/route.js +1 -1
- package/app/.next/server/app/api/tags/route.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/stream/route.js +2 -2
- package/app/.next/server/app/api/translator/load/route.js +1 -1
- package/app/.next/server/app/api/translator/save/route.js +1 -1
- package/app/.next/server/app/api/translator/send/route.js +1 -1
- package/app/.next/server/app/api/translator/translate/route.js +1 -1
- package/app/.next/server/app/api/tunnel/disable/route.js +1 -1
- package/app/.next/server/app/api/tunnel/enable/route.js +1 -1
- package/app/.next/server/app/api/tunnel/status/route.js +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-check/route.js +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-install/route.js +2 -2
- package/app/.next/server/app/api/tunnel/tailscale-login/route.js +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-start-daemon/route.js +2 -2
- package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
- package/app/.next/server/app/api/usage/api-keys/route.js +1 -1
- package/app/.next/server/app/api/usage/chart/route.js +1 -1
- package/app/.next/server/app/api/usage/history/route.js +1 -1
- package/app/.next/server/app/api/usage/logs/route.js +1 -1
- package/app/.next/server/app/api/usage/providers/route.js +1 -1
- package/app/.next/server/app/api/usage/request-details/route.js +1 -1
- package/app/.next/server/app/api/usage/request-logs/route.js +1 -1
- package/app/.next/server/app/api/usage/stats/route.js +1 -1
- package/app/.next/server/app/api/usage/stream/route.js +2 -2
- package/app/.next/server/app/api/users/[id]/route.js +1 -1
- package/app/.next/server/app/api/users/route.js +1 -1
- package/app/.next/server/app/api/v1/api/chat/route.js +1 -1
- package/app/.next/server/app/api/v1/audio/speech/route.js +1 -1
- package/app/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
- package/app/.next/server/app/api/v1/audio/voices/route.js +1 -1
- package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
- package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
- package/app/.next/server/app/api/v1/images/generations/route.js +2 -2
- package/app/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
- package/app/.next/server/app/api/v1/messages/route.js +1 -1
- package/app/.next/server/app/api/v1/models/[kind]/route.js +1 -1
- package/app/.next/server/app/api/v1/models/info/route.js +1 -1
- package/app/.next/server/app/api/v1/models/route.js +1 -1
- package/app/.next/server/app/api/v1/responses/compact/route.js +1 -1
- package/app/.next/server/app/api/v1/responses/route.js +1 -1
- package/app/.next/server/app/api/v1/route.js +1 -1
- package/app/.next/server/app/api/v1/search/route.js +1 -1
- package/app/.next/server/app/api/v1/web/fetch/route.js +1 -1
- package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
- package/app/.next/server/app/api/v1beta/models/route.js +1 -1
- package/app/.next/server/app/api/version/route.js +1 -1
- package/app/.next/server/app/api/version/update/route.js +1 -1
- package/app/.next/server/app/callback/page.js +2 -2
- 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/settings/pricing/page.js +2 -2
- 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 +4 -4
- package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
- 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 +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/favicon.ico/route.js +1 -1
- package/app/.next/server/app/index.html +1 -1
- package/app/.next/server/app/index.rsc +4 -4
- package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/index.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/landing/page.js +2 -2
- package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing.html +1 -1
- package/app/.next/server/app/landing.rsc +4 -4
- package/app/.next/server/app/landing.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/landing.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
- package/app/.next/server/app/login/page.js +2 -2
- package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/login.html +1 -1
- package/app/.next/server/app/login.rsc +5 -5
- package/app/.next/server/app/login.segments/_full.segment.rsc +5 -5
- package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/login.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/app/.next/server/app/manifest.webmanifest/route.js +2 -2
- package/app/.next/server/app/page.js +2 -2
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app-paths-manifest.json +5 -2
- package/app/.next/server/chunks/4122.js +1 -1
- package/app/.next/server/chunks/5627.js +6 -4
- package/app/.next/server/chunks/6182.js +2 -2
- package/app/.next/server/chunks/7595.js +1 -1
- package/app/.next/server/chunks/7937.js +1 -1
- package/app/.next/server/chunks/9547.js +17 -2
- package/app/.next/server/functions-config-manifest.json +1 -0
- 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 +1 -1
- package/app/.next/static/chunks/{1321-b84130cd27e8b78c.js → 1321-c90a1f54884edb62.js} +1 -1
- package/app/.next/static/chunks/{2336-5b3617dc05c223ff.js → 2336-4ac589bb36571207.js} +19 -4
- package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/_global-error/page-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/auth/login/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/auth/logout/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/auth/me/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/inject-auth/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/restart/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/test/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/auth/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/credentials/update/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/model/resolve/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/models/alias/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/combos/[id]/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/combos/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/health/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/init/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/keys/[id]/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/keys/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/locale/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/models/alias/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/models/availability/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/models/custom/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/models/disabled/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/models/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/models/test/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/pricing/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/providers/client/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/providers/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/providers/suggested-models/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/providers/test-batch/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/providers/validate/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/settings/database/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/settings/proxy-test/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/settings/require-login/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/settings/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/shutdown/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/tags/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/translator/console-logs/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/translator/load/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/translator/save/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/translator/send/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/translator/translate/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/disable/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/enable/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/status/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-login/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-start-daemon/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/usage/api-keys/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/usage/chart/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/usage/history/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/usage/logs/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/usage/providers/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/usage/request-details/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/usage/request-logs/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/usage/stats/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/usage/stream/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/users/[id]/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/users/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/v1/api/chat/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/voices/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/v1/embeddings/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/v1/images/generations/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/v1/messages/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/[kind]/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/info/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/v1/responses/compact/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/v1/responses/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/v1/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/v1/search/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/v1/web/fetch/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/v1beta/models/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/version/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/api/version/update/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/manifest.webmanifest/route-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/app/page-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-6ec61ce021cdb9a6.js +1 -0
- package/app/.next/static/css/81b7abc9204a4458.css +1 -0
- package/app/.next/static/s_c_Y_7O0OBMovBwrwXBp/_buildManifest.js +1 -0
- package/app/package.json +1 -1
- package/app/src/mitm/antigravityAvailableModels.fixture.json +632 -0
- package/app/src/mitm/antigravityModels.js +265 -0
- package/app/src/mitm/config.js +18 -2
- package/app/src/mitm/dns/dnsConfig.js +113 -0
- package/app/src/mitm/handlers/antigravity.js +29 -2
- package/app/src/mitm/logger.js +1 -1
- package/app/src/mitm/manager.js +9 -1
- package/app/src/mitm/server.js +219 -18
- package/app/src/shared/constants/mitmToolHosts.js +5 -1
- package/package.json +1 -1
- package/app/.next/static/2TCKT7FIN7PE7ZJ20oAeb/_buildManifest.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/_global-error/page-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/auth/login/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/auth/logout/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/auth/me/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/auth/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/credentials/update/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/model/resolve/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/models/alias/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/combos/[id]/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/combos/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/health/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/init/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/keys/[id]/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/keys/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/locale/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/models/alias/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/models/availability/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/models/custom/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/models/disabled/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/models/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/models/test/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/pricing/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/providers/client/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/providers/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/providers/suggested-models/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/providers/test-batch/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/providers/validate/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/settings/database/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/settings/proxy-test/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/settings/require-login/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/settings/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/shutdown/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/tags/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/translator/console-logs/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/translator/load/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/translator/save/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/translator/send/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/translator/translate/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/disable/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/enable/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/status/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-login/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-start-daemon/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/usage/api-keys/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/usage/chart/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/usage/history/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/usage/logs/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/usage/providers/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/usage/request-details/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/usage/request-logs/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/usage/stats/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/usage/stream/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/users/[id]/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/users/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/v1/api/chat/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/voices/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/v1/embeddings/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/v1/images/generations/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/[kind]/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/info/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/v1/responses/compact/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/v1/responses/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/v1/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/v1/search/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/v1/web/fetch/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/version/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/api/version/update/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/manifest.webmanifest/route-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/app/page-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d1c369e2c3fb727b.js +0 -1
- package/app/.next/static/css/48caf49054c81db9.css +0 -1
- /package/app/.next/static/{2TCKT7FIN7PE7ZJ20oAeb → s_c_Y_7O0OBMovBwrwXBp}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
const REAL_AVAILABLE_MODELS_FIXTURE = require("./antigravityAvailableModels.fixture.json");
|
|
2
|
+
|
|
3
|
+
const BASE_MODEL_EXPERIMENTS = {
|
|
4
|
+
experiments: {
|
|
5
|
+
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
6
|
+
stringValue: JSON.stringify({
|
|
7
|
+
strategy: "CHECKPOINT_STRATEGY_SINGLE_PROMPT",
|
|
8
|
+
max_token_limit: "128000",
|
|
9
|
+
token_threshold: "50000",
|
|
10
|
+
max_overhead_ratio: "0.15",
|
|
11
|
+
moving_window_size: "1",
|
|
12
|
+
enabled: true,
|
|
13
|
+
max_output_tokens: "16384",
|
|
14
|
+
checkpoint_model: "MODEL_PLACEHOLDER_M50",
|
|
15
|
+
retry_config: {
|
|
16
|
+
max_retries: 0,
|
|
17
|
+
initial_sleep_duration_ms: 1000,
|
|
18
|
+
exponential_multiplier: 2,
|
|
19
|
+
include_error_feedback: false,
|
|
20
|
+
},
|
|
21
|
+
}, null, 4),
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const COMMON_CODE_MIME_TYPES = {
|
|
27
|
+
"application/json": true,
|
|
28
|
+
"application/pdf": true,
|
|
29
|
+
"application/rtf": true,
|
|
30
|
+
"application/x-ipynb+json": true,
|
|
31
|
+
"application/x-javascript": true,
|
|
32
|
+
"application/x-python-code": true,
|
|
33
|
+
"application/x-typescript": true,
|
|
34
|
+
"image/heic": true,
|
|
35
|
+
"image/heif": true,
|
|
36
|
+
"image/jpeg": true,
|
|
37
|
+
"image/png": true,
|
|
38
|
+
"image/webp": true,
|
|
39
|
+
"text/css": true,
|
|
40
|
+
"text/csv": true,
|
|
41
|
+
"text/html": true,
|
|
42
|
+
"text/javascript": true,
|
|
43
|
+
"text/markdown": true,
|
|
44
|
+
"text/plain": true,
|
|
45
|
+
"text/rtf": true,
|
|
46
|
+
"text/x-python": true,
|
|
47
|
+
"text/x-python-script": true,
|
|
48
|
+
"text/x-typescript": true,
|
|
49
|
+
"text/xml": true,
|
|
50
|
+
"video/mp4": true,
|
|
51
|
+
"video/webm": true,
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
function quota(resetDays = 7) {
|
|
55
|
+
const resetTime = new Date(Date.now() + resetDays * 24 * 60 * 60 * 1000).toISOString();
|
|
56
|
+
return { remainingFraction: 1, resetTime };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function geminiModel(displayName, model, options = {}) {
|
|
60
|
+
return {
|
|
61
|
+
displayName,
|
|
62
|
+
supportsImages: true,
|
|
63
|
+
supportsThinking: true,
|
|
64
|
+
thinkingBudget: options.thinkingBudget ?? 1024,
|
|
65
|
+
minThinkingBudget: options.minThinkingBudget ?? 128,
|
|
66
|
+
recommended: true,
|
|
67
|
+
maxTokens: 1048576,
|
|
68
|
+
maxOutputTokens: 65535,
|
|
69
|
+
tokenizerType: "LLAMA_WITH_SPECIAL",
|
|
70
|
+
quotaInfo: quota(options.resetDays),
|
|
71
|
+
model,
|
|
72
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
73
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
74
|
+
supportsVideo: true,
|
|
75
|
+
supportedMimeTypes: COMMON_CODE_MIME_TYPES,
|
|
76
|
+
requiresImageOutputOutsideFunctionResponses: options.requiresImageOutputOutsideFunctionResponses,
|
|
77
|
+
modelExperiments: BASE_MODEL_EXPERIMENTS,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function anthropicModel(displayName, model) {
|
|
82
|
+
return {
|
|
83
|
+
displayName,
|
|
84
|
+
supportsImages: true,
|
|
85
|
+
supportsThinking: true,
|
|
86
|
+
thinkingBudget: 1024,
|
|
87
|
+
recommended: true,
|
|
88
|
+
maxTokens: 250000,
|
|
89
|
+
maxOutputTokens: 64000,
|
|
90
|
+
tokenizerType: "LLAMA_WITH_SPECIAL",
|
|
91
|
+
quotaInfo: quota(),
|
|
92
|
+
model,
|
|
93
|
+
apiProvider: "API_PROVIDER_ANTHROPIC_VERTEX",
|
|
94
|
+
modelProvider: "MODEL_PROVIDER_ANTHROPIC",
|
|
95
|
+
supportedMimeTypes: {
|
|
96
|
+
"image/heic": true,
|
|
97
|
+
"image/heif": true,
|
|
98
|
+
"image/jpeg": true,
|
|
99
|
+
"image/png": true,
|
|
100
|
+
"image/webp": true,
|
|
101
|
+
},
|
|
102
|
+
modelExperiments: BASE_MODEL_EXPERIMENTS,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function openAiModel(displayName, model) {
|
|
107
|
+
return {
|
|
108
|
+
displayName,
|
|
109
|
+
supportsThinking: true,
|
|
110
|
+
thinkingBudget: 8192,
|
|
111
|
+
recommended: true,
|
|
112
|
+
maxTokens: 131072,
|
|
113
|
+
maxOutputTokens: 32768,
|
|
114
|
+
tokenizerType: "LLAMA_WITH_SPECIAL",
|
|
115
|
+
quotaInfo: quota(),
|
|
116
|
+
model,
|
|
117
|
+
apiProvider: "API_PROVIDER_OPENAI_VERTEX",
|
|
118
|
+
modelProvider: "MODEL_PROVIDER_OPENAI",
|
|
119
|
+
modelExperiments: BASE_MODEL_EXPERIMENTS,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function tabModel(model, maxTokens = 16384) {
|
|
124
|
+
return {
|
|
125
|
+
maxTokens,
|
|
126
|
+
maxOutputTokens: 4096,
|
|
127
|
+
tokenizerType: "QWEN2",
|
|
128
|
+
quotaInfo: { remainingFraction: 1 },
|
|
129
|
+
model,
|
|
130
|
+
apiProvider: "API_PROVIDER_INTERNAL",
|
|
131
|
+
supportsCumulativeContext: true,
|
|
132
|
+
supportsEstimateTokenCounter: true,
|
|
133
|
+
isInternal: true,
|
|
134
|
+
promptTemplaterType: "PROMPT_TEMPLATER_TYPE_CHATML",
|
|
135
|
+
toolFormatterType: "TOOL_FORMATTER_TYPE_XML",
|
|
136
|
+
requiresLeadInGeneration: true,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function googleTabModel(model, maxTokens = 16384) {
|
|
141
|
+
return {
|
|
142
|
+
maxTokens,
|
|
143
|
+
maxOutputTokens: 4096,
|
|
144
|
+
tokenizerType: "LLAMA_WITH_SPECIAL",
|
|
145
|
+
quotaInfo: { remainingFraction: 1 },
|
|
146
|
+
model,
|
|
147
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
148
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
149
|
+
supportsCumulativeContext: true,
|
|
150
|
+
supportsEstimateTokenCounter: true,
|
|
151
|
+
isInternal: true,
|
|
152
|
+
promptTemplaterType: "PROMPT_TEMPLATER_TYPE_CHATML",
|
|
153
|
+
toolFormatterType: "TOOL_FORMATTER_TYPE_XML",
|
|
154
|
+
requiresLeadInGeneration: true,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function imageModel(displayName, model) {
|
|
159
|
+
return {
|
|
160
|
+
displayName,
|
|
161
|
+
supportsImages: true,
|
|
162
|
+
maxTokens: 32768,
|
|
163
|
+
maxOutputTokens: 8192,
|
|
164
|
+
tokenizerType: "LLAMA_WITH_SPECIAL",
|
|
165
|
+
quotaInfo: quota(),
|
|
166
|
+
model,
|
|
167
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
168
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
169
|
+
supportedMimeTypes: COMMON_CODE_MIME_TYPES,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
function freshResetTime(days = 7) {
|
|
174
|
+
return new Date(Date.now() + days * 24 * 60 * 60 * 1000).toISOString();
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
function cloneFixtureWithFreshQuota() {
|
|
178
|
+
const payload = JSON.parse(JSON.stringify(REAL_AVAILABLE_MODELS_FIXTURE));
|
|
179
|
+
const agentIds = new Set(
|
|
180
|
+
(payload.agentModelSorts || [])
|
|
181
|
+
.flatMap((sort) => sort.groups || [])
|
|
182
|
+
.flatMap((group) => group.modelIds || []),
|
|
183
|
+
);
|
|
184
|
+
|
|
185
|
+
for (const [id, model] of Object.entries(payload.models || {})) {
|
|
186
|
+
if (!model.quotaInfo) model.quotaInfo = { remainingFraction: 1 };
|
|
187
|
+
model.quotaInfo.remainingFraction = typeof model.quotaInfo.remainingFraction === "number"
|
|
188
|
+
? model.quotaInfo.remainingFraction
|
|
189
|
+
: 1;
|
|
190
|
+
if (model.quotaInfo.resetTime) {
|
|
191
|
+
model.quotaInfo.resetTime = freshResetTime(agentIds.has(id) ? 7 : 1);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return payload;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
function buildAntigravityAvailableModelsResponse() {
|
|
199
|
+
if (REAL_AVAILABLE_MODELS_FIXTURE?.models) return cloneFixtureWithFreshQuota();
|
|
200
|
+
|
|
201
|
+
const models = {
|
|
202
|
+
"gemini-2.5-flash-thinking": geminiModel("Gemini 3.1 Flash Lite", "MODEL_GOOGLE_GEMINI_2_5_FLASH_THINKING"),
|
|
203
|
+
"gemini-2.5-pro": geminiModel("Gemini 2.5 Pro", "MODEL_GOOGLE_GEMINI_2_5_PRO", {
|
|
204
|
+
requiresImageOutputOutsideFunctionResponses: true,
|
|
205
|
+
}),
|
|
206
|
+
"gemini-2.5-flash-lite": geminiModel("Gemini 3.1 Flash Lite", "MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE"),
|
|
207
|
+
"gemini-2.5-flash": geminiModel("Gemini 3.1 Flash Lite", "MODEL_GOOGLE_GEMINI_2_5_FLASH"),
|
|
208
|
+
"gemini-3.1-flash-lite": geminiModel("Gemini 3.1 Flash Lite", "MODEL_PLACEHOLDER_M50"),
|
|
209
|
+
"gemini-3.1-pro-high": geminiModel("Gemini 3.1 Pro (High)", "MODEL_PLACEHOLDER_M37", {
|
|
210
|
+
thinkingBudget: 10001,
|
|
211
|
+
}),
|
|
212
|
+
"gemini-3.1-pro-low": geminiModel("Gemini 3.1 Pro (Low)", "MODEL_PLACEHOLDER_M36", {
|
|
213
|
+
thinkingBudget: 1001,
|
|
214
|
+
}),
|
|
215
|
+
"gemini-3-flash-agent": geminiModel("Gemini 3 Flash", "MODEL_PLACEHOLDER_M84", {
|
|
216
|
+
thinkingBudget: -1,
|
|
217
|
+
minThinkingBudget: 32,
|
|
218
|
+
}),
|
|
219
|
+
"gemini-3-flash": geminiModel("Gemini 3 Flash", "MODEL_PLACEHOLDER_M18", {
|
|
220
|
+
thinkingBudget: -1,
|
|
221
|
+
minThinkingBudget: 32,
|
|
222
|
+
}),
|
|
223
|
+
"gemini-3.1-flash-image": imageModel("Gemini 3.1 Flash Image", "MODEL_PLACEHOLDER_M21"),
|
|
224
|
+
"claude-sonnet-4-6": anthropicModel("Claude Sonnet 4.6 (Thinking)", "MODEL_PLACEHOLDER_M35"),
|
|
225
|
+
"claude-opus-4-6-thinking": anthropicModel("Claude Opus 4.6 (Thinking)", "MODEL_PLACEHOLDER_M26"),
|
|
226
|
+
"gpt-oss-120b-medium": openAiModel("GPT-OSS 120B (Medium)", "MODEL_OPENAI_GPT_OSS_120B_MEDIUM"),
|
|
227
|
+
"tab_flash_lite_preview": googleTabModel("MODEL_PLACEHOLDER_M19"),
|
|
228
|
+
"tab_jump_flash_lite_preview": googleTabModel("MODEL_PLACEHOLDER_M28"),
|
|
229
|
+
"chat_20706": tabModel("MODEL_CHAT_20706"),
|
|
230
|
+
"chat_23310": tabModel("MODEL_CHAT_23310", 32768),
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
return {
|
|
234
|
+
models,
|
|
235
|
+
defaultAgentModelId: "gemini-3.1-pro-high",
|
|
236
|
+
agentModelSorts: [
|
|
237
|
+
{
|
|
238
|
+
displayName: "Recommended",
|
|
239
|
+
groups: [
|
|
240
|
+
{
|
|
241
|
+
modelIds: [
|
|
242
|
+
"gemini-3.1-pro-high",
|
|
243
|
+
"gemini-3.1-pro-low",
|
|
244
|
+
"gemini-3-flash-agent",
|
|
245
|
+
"claude-sonnet-4-6",
|
|
246
|
+
"claude-opus-4-6-thinking",
|
|
247
|
+
"gpt-oss-120b-medium",
|
|
248
|
+
],
|
|
249
|
+
},
|
|
250
|
+
],
|
|
251
|
+
},
|
|
252
|
+
],
|
|
253
|
+
commandModelIds: ["gemini-3-flash"],
|
|
254
|
+
tabModelIds: ["chat_20706", "chat_23310"],
|
|
255
|
+
imageGenerationModelIds: [],
|
|
256
|
+
mqueryModelIds: ["gemini-3.1-flash-lite"],
|
|
257
|
+
webSearchModelIds: ["gemini-3.1-flash-lite"],
|
|
258
|
+
commitMessageModelIds: ["gemini-3-flash"],
|
|
259
|
+
audioTranscriptionModelIds: [],
|
|
260
|
+
experimentIds: [],
|
|
261
|
+
tieredModelIds: {},
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
module.exports = { buildAntigravityAvailableModelsResponse };
|
package/app/src/mitm/config.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
const TARGET_HOSTS = [
|
|
4
4
|
"daily-cloudcode-pa.googleapis.com",
|
|
5
5
|
"cloudcode-pa.googleapis.com",
|
|
6
|
+
"daily-cloudcode-pa.sandbox.googleapis.com",
|
|
6
7
|
"api.individual.githubcopilot.com",
|
|
7
8
|
"q.us-east-1.amazonaws.com",
|
|
8
9
|
"api2.cursor.sh",
|
|
@@ -20,7 +21,22 @@ const URL_PATTERNS = {
|
|
|
20
21
|
|
|
21
22
|
// Synonym map: rawModel from request → canonical alias key in mitmAlias DB
|
|
22
23
|
const MODEL_SYNONYMS = {
|
|
23
|
-
antigravity: {
|
|
24
|
+
antigravity: {
|
|
25
|
+
"gemini-default": "gemini-3-flash",
|
|
26
|
+
"gemini-3-flash-agent": "gemini-3-flash",
|
|
27
|
+
"gemini-3.1-flash-lite": "gemini-3-flash",
|
|
28
|
+
"gemini-2.5-flash-lite": "gemini-3-flash",
|
|
29
|
+
"gemini-2.5-flash": "gemini-3-flash",
|
|
30
|
+
__defaults: {
|
|
31
|
+
"gemini-3.1-pro-high": "gemini-3.1-pro-high",
|
|
32
|
+
"gemini-3.1-pro-low": "gemini-3.1-pro-low",
|
|
33
|
+
"gemini-3-flash-agent": "cx/gpt-5.5",
|
|
34
|
+
"gemini-3-flash": "cx/gpt-5.5",
|
|
35
|
+
"claude-sonnet-4-6": "claude-sonnet-4-6",
|
|
36
|
+
"claude-opus-4-6-thinking": "claude-opus-4-6-thinking",
|
|
37
|
+
"gpt-oss-120b-medium": "gpt-oss-120b-medium",
|
|
38
|
+
},
|
|
39
|
+
},
|
|
24
40
|
};
|
|
25
41
|
|
|
26
42
|
// URL substrings whose request/response should NOT be dumped to file (telemetry, polling, empty)
|
|
@@ -35,7 +51,7 @@ const LOG_BLACKLIST_URL_PARTS = [
|
|
|
35
51
|
function getToolForHost(host) {
|
|
36
52
|
const h = (host || "").split(":")[0];
|
|
37
53
|
if (h === "api.individual.githubcopilot.com") return "copilot";
|
|
38
|
-
if (h === "daily-cloudcode-pa.googleapis.com" || h === "cloudcode-pa.googleapis.com") return "antigravity";
|
|
54
|
+
if (h === "daily-cloudcode-pa.googleapis.com" || h === "cloudcode-pa.googleapis.com" || h === "daily-cloudcode-pa.sandbox.googleapis.com") return "antigravity";
|
|
39
55
|
if (h === "q.us-east-1.amazonaws.com") return "kiro";
|
|
40
56
|
if (h === "api2.cursor.sh") return "cursor";
|
|
41
57
|
if (h === "openrouter.ai" || h === "api.openrouter.ai") return "openrouter";
|
|
@@ -36,6 +36,18 @@ const IS_MAC = process.platform === "darwin";
|
|
|
36
36
|
const HOSTS_FILE = IS_WIN
|
|
37
37
|
? path.join(process.env.SystemRoot || "C:\\Windows", "System32", "drivers", "etc", "hosts")
|
|
38
38
|
: "/etc/hosts";
|
|
39
|
+
const MAC_PF_ANTIGRAVITY_ANCHOR = "com.apple/openrouterx-mitm-antigravity";
|
|
40
|
+
const MAC_ANTIGRAVITY_FALLBACK_IPS = [
|
|
41
|
+
"216.239.32.223",
|
|
42
|
+
"216.239.34.223",
|
|
43
|
+
"216.239.36.223",
|
|
44
|
+
"216.239.38.223",
|
|
45
|
+
];
|
|
46
|
+
const MAC_ANTIGRAVITY_LEGACY_SHARED_IP_PREFIXES = [
|
|
47
|
+
"142.250.",
|
|
48
|
+
"142.251.",
|
|
49
|
+
"172.217.",
|
|
50
|
+
];
|
|
39
51
|
|
|
40
52
|
/** True when `sudo` exists (e.g. missing on minimal Docker images like Alpine). */
|
|
41
53
|
function isSudoAvailable() {
|
|
@@ -110,6 +122,97 @@ async function flushDNS(sudoPassword) {
|
|
|
110
122
|
}
|
|
111
123
|
}
|
|
112
124
|
|
|
125
|
+
function shellQuoteSingle(str) {
|
|
126
|
+
return `'${String(str).replace(/'/g, "'\\''")}'`;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function getDefaultMacInterface() {
|
|
130
|
+
if (!IS_MAC) return "";
|
|
131
|
+
try {
|
|
132
|
+
const out = execSync("route -n get default 2>/dev/null | awk '/interface:/{print $2; exit}'", {
|
|
133
|
+
encoding: "utf8",
|
|
134
|
+
windowsHide: true,
|
|
135
|
+
}).trim();
|
|
136
|
+
return out || "en0";
|
|
137
|
+
} catch {
|
|
138
|
+
return "en0";
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
async function getMacAntigravityRedirectIPs() {
|
|
143
|
+
return [...MAC_ANTIGRAVITY_FALLBACK_IPS];
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function getMacLoopbackIPv4Aliases() {
|
|
147
|
+
if (!IS_MAC) return [];
|
|
148
|
+
try {
|
|
149
|
+
const out = execSync("ifconfig lo0", { encoding: "utf8", windowsHide: true });
|
|
150
|
+
return [...out.matchAll(/^\s+inet\s+(\d+\.\d+\.\d+\.\d+)\s+/gm)].map((m) => m[1]);
|
|
151
|
+
} catch {
|
|
152
|
+
return [];
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function getMacLegacyAntigravityAliases() {
|
|
157
|
+
return getMacLoopbackIPv4Aliases().filter((ip) =>
|
|
158
|
+
MAC_ANTIGRAVITY_LEGACY_SHARED_IP_PREFIXES.some((prefix) => ip.startsWith(prefix))
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
async function enableMacAntigravityRedirect(sudoPassword) {
|
|
163
|
+
if (!IS_MAC) return;
|
|
164
|
+
const ips = await getMacAntigravityRedirectIPs();
|
|
165
|
+
if (ips.length === 0) return;
|
|
166
|
+
|
|
167
|
+
await enableMacAntigravityLoopbackAliases(sudoPassword, ips);
|
|
168
|
+
|
|
169
|
+
const iface = getDefaultMacInterface();
|
|
170
|
+
const rules = [
|
|
171
|
+
`table <openrouterx_antigravity> persist { ${ips.join(", ")} }`,
|
|
172
|
+
`rdr pass on ${iface} inet proto tcp from any to <openrouterx_antigravity> port 443 -> 127.0.0.1 port 443`,
|
|
173
|
+
"",
|
|
174
|
+
].join("\n");
|
|
175
|
+
const command = [
|
|
176
|
+
"pfctl -E >/dev/null 2>&1 || true",
|
|
177
|
+
`printf '%s' ${shellQuoteSingle(rules)} | pfctl -a ${shellQuoteSingle(MAC_PF_ANTIGRAVITY_ANCHOR)} -f -`,
|
|
178
|
+
].join(" && ");
|
|
179
|
+
|
|
180
|
+
await execWithPassword(command, sudoPassword);
|
|
181
|
+
log(`🌐 PF antigravity: ✅ redirect active on ${iface} (${ips.length} IPs)`);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
async function disableMacAntigravityRedirect(sudoPassword) {
|
|
185
|
+
if (!IS_MAC) return;
|
|
186
|
+
const ips = [...new Set([
|
|
187
|
+
...await getMacAntigravityRedirectIPs(),
|
|
188
|
+
...getMacLegacyAntigravityAliases(),
|
|
189
|
+
])];
|
|
190
|
+
await execWithPassword(`pfctl -a ${shellQuoteSingle(MAC_PF_ANTIGRAVITY_ANCHOR)} -F all >/dev/null 2>&1 || true`, sudoPassword);
|
|
191
|
+
await disableMacAntigravityLoopbackAliases(sudoPassword, ips);
|
|
192
|
+
log("🌐 PF antigravity: ✅ redirect removed");
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
async function enableMacAntigravityLoopbackAliases(sudoPassword, ips) {
|
|
196
|
+
if (!IS_MAC || !ips.length) return;
|
|
197
|
+
const commands = ips.map((ip) => `ifconfig lo0 alias ${ip}/32 2>/dev/null || true`);
|
|
198
|
+
await execWithPassword(commands.join("; "), sudoPassword);
|
|
199
|
+
log(`🌐 lo0 antigravity: ✅ aliases active (${ips.length} IPs)`);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
async function disableMacAntigravityLoopbackAliases(sudoPassword, ips) {
|
|
203
|
+
if (!IS_MAC || !ips.length) return;
|
|
204
|
+
const commands = ips.map((ip) => `ifconfig lo0 -alias ${ip} 2>/dev/null || true`);
|
|
205
|
+
await execWithPassword(commands.join("; "), sudoPassword);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
async function ensureToolNetworkRedirect(tool, sudoPassword) {
|
|
209
|
+
if (tool === "antigravity") await enableMacAntigravityRedirect(sudoPassword);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
async function removeToolNetworkRedirect(tool, sudoPassword) {
|
|
213
|
+
if (tool === "antigravity") await disableMacAntigravityRedirect(sudoPassword);
|
|
214
|
+
}
|
|
215
|
+
|
|
113
216
|
/**
|
|
114
217
|
* Check if DNS entry exists for a specific host
|
|
115
218
|
*/
|
|
@@ -150,6 +253,7 @@ async function addDNSEntry(tool, sudoPassword) {
|
|
|
150
253
|
const entriesToAdd = hosts.filter(h => !checkDNSEntry(h));
|
|
151
254
|
if (entriesToAdd.length === 0) {
|
|
152
255
|
log(`🌐 DNS ${tool}: already active`);
|
|
256
|
+
await ensureToolNetworkRedirect(tool, sudoPassword);
|
|
153
257
|
return;
|
|
154
258
|
}
|
|
155
259
|
|
|
@@ -172,6 +276,7 @@ async function addDNSEntry(tool, sudoPassword) {
|
|
|
172
276
|
await execWithPassword(`printf '%s' '${escaped}' | tee ${HOSTS_FILE} > /dev/null`, sudoPassword);
|
|
173
277
|
await flushDNS(sudoPassword);
|
|
174
278
|
}
|
|
279
|
+
await ensureToolNetworkRedirect(tool, sudoPassword);
|
|
175
280
|
log(`🌐 DNS ${tool}: ✅ added ${entriesToAdd.join(", ")}`);
|
|
176
281
|
} catch (error) {
|
|
177
282
|
const msg = error.message?.includes("incorrect password") ? "Wrong sudo password" : `Failed to add DNS entry: ${error.message}`;
|
|
@@ -189,6 +294,7 @@ async function removeDNSEntry(tool, sudoPassword) {
|
|
|
189
294
|
const entriesToRemove = hosts.filter(h => checkDNSEntry(h));
|
|
190
295
|
if (entriesToRemove.length === 0) {
|
|
191
296
|
log(`🌐 DNS ${tool}: already inactive`);
|
|
297
|
+
await removeToolNetworkRedirect(tool, sudoPassword);
|
|
192
298
|
return;
|
|
193
299
|
}
|
|
194
300
|
|
|
@@ -207,6 +313,7 @@ async function removeDNSEntry(tool, sudoPassword) {
|
|
|
207
313
|
await execWithPassword(`printf '%s' '${escaped}' | tee ${HOSTS_FILE} > /dev/null`, sudoPassword);
|
|
208
314
|
await flushDNS(sudoPassword);
|
|
209
315
|
}
|
|
316
|
+
await removeToolNetworkRedirect(tool, sudoPassword);
|
|
210
317
|
log(`🌐 DNS ${tool}: ✅ removed ${entriesToRemove.join(", ")}`);
|
|
211
318
|
} catch (error) {
|
|
212
319
|
const msg = error.message?.includes("incorrect password") ? "Wrong sudo password" : `Failed to remove DNS entry: ${error.message}`;
|
|
@@ -233,6 +340,12 @@ async function removeAllDNSEntries(sudoPassword) {
|
|
|
233
340
|
*/
|
|
234
341
|
function removeAllDNSEntriesSync() {
|
|
235
342
|
try {
|
|
343
|
+
if (IS_MAC) {
|
|
344
|
+
try { execSync(`pfctl -a ${MAC_PF_ANTIGRAVITY_ANCHOR} -F all >/dev/null 2>&1 || true`, { stdio: "ignore" }); } catch { /* ignore */ }
|
|
345
|
+
for (const ip of MAC_ANTIGRAVITY_FALLBACK_IPS) {
|
|
346
|
+
try { execSync(`ifconfig lo0 -alias ${ip} 2>/dev/null || true`, { stdio: "ignore" }); } catch { /* ignore */ }
|
|
347
|
+
}
|
|
348
|
+
}
|
|
236
349
|
if (!fs.existsSync(HOSTS_FILE)) return;
|
|
237
350
|
const allHosts = Object.values(TOOL_HOSTS).flat();
|
|
238
351
|
const content = fs.readFileSync(HOSTS_FILE, "utf8");
|
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
const { err, createResponseDumper } = require("../logger");
|
|
1
|
+
const { log, err, createResponseDumper } = require("../logger");
|
|
2
2
|
const { fetchRouter, pipeSSE } = require("./base");
|
|
3
3
|
|
|
4
|
+
const NO_CREDENTIALS_MARKER = "No active credentials for provider";
|
|
5
|
+
|
|
4
6
|
/**
|
|
5
7
|
* Intercept Antigravity request — forward Gemini body as-is to /v1/chat/completions.
|
|
6
8
|
* Router auto-detects format via body.userAgent==="antigravity" + body.request.contents,
|
|
7
9
|
* runs antigravity→openai→provider→openai→antigravity translators internally.
|
|
10
|
+
*
|
|
11
|
+
* Graceful fallback: if Router returns 404 because no provider credentials are
|
|
12
|
+
* configured, passthrough to the real upstream so Antigravity works out-of-the-box
|
|
13
|
+
* without requiring a login in the Router dashboard.
|
|
8
14
|
*/
|
|
9
|
-
async function intercept(req, res, bodyBuffer, mappedModel) {
|
|
15
|
+
async function intercept(req, res, bodyBuffer, mappedModel, passthrough) {
|
|
10
16
|
const dumper = createResponseDumper(req, "intercept-antigravity");
|
|
11
17
|
const isStream = req.url.includes(":streamGenerateContent");
|
|
12
18
|
try {
|
|
@@ -14,6 +20,27 @@ async function intercept(req, res, bodyBuffer, mappedModel) {
|
|
|
14
20
|
if (body.model) body.model = mappedModel;
|
|
15
21
|
|
|
16
22
|
const routerRes = await fetchRouter(body, "/v1/chat/completions", req.headers);
|
|
23
|
+
|
|
24
|
+
// Graceful fallback: no credentials in Router → passthrough to real upstream
|
|
25
|
+
if (routerRes.status === 404) {
|
|
26
|
+
const text = await routerRes.text();
|
|
27
|
+
if (text.includes(NO_CREDENTIALS_MARKER)) {
|
|
28
|
+
log(`⏩ passthrough | antigravity | no credentials for mapped model "${mappedModel || "unknown"}" — forwarding to real upstream`);
|
|
29
|
+
if (dumper) {
|
|
30
|
+
dumper.writeHeader(routerRes.status, Object.fromEntries(routerRes.headers));
|
|
31
|
+
dumper.writeChunk(text);
|
|
32
|
+
dumper.end();
|
|
33
|
+
}
|
|
34
|
+
return passthrough(req, res, bodyBuffer);
|
|
35
|
+
}
|
|
36
|
+
// Other 404 errors: propagate as-is
|
|
37
|
+
if (!res.headersSent) {
|
|
38
|
+
res.writeHead(404, { "Content-Type": "application/json" });
|
|
39
|
+
res.end(text);
|
|
40
|
+
}
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
17
44
|
await pipeSSE(routerRes, res, dumper);
|
|
18
45
|
} catch (error) {
|
|
19
46
|
err(`[antigravity] ${error.message}`);
|
package/app/src/mitm/logger.js
CHANGED
|
@@ -14,7 +14,7 @@ const err = (msg) => console.error(`[${time()}] ❌ [MITM] ${msg}`);
|
|
|
14
14
|
function ensureDumpDir() {
|
|
15
15
|
const candidates = [
|
|
16
16
|
path.join(DATA_DIR, "logs", "mitm"),
|
|
17
|
-
path.join(require("os").tmpdir(), "
|
|
17
|
+
path.join(require("os").tmpdir(), "openrouterx", "logs", "mitm"),
|
|
18
18
|
];
|
|
19
19
|
for (const dir of candidates) {
|
|
20
20
|
try {
|
package/app/src/mitm/manager.js
CHANGED
|
@@ -528,6 +528,9 @@ async function startServer(apiKey, sudoPassword, forceKillPort443 = false) {
|
|
|
528
528
|
}
|
|
529
529
|
}
|
|
530
530
|
const mitmRouterBase = await resolveMitmRouterBaseUrl();
|
|
531
|
+
const mitmServerCwd = MITM_DIR || os.homedir();
|
|
532
|
+
fs.mkdirSync(mitmServerCwd, { recursive: true });
|
|
533
|
+
const agMockBootstrap = process.env.OPENROUTERX_AG_MOCK_BOOTSTRAP === "1" ? "1" : "0";
|
|
531
534
|
log(`🚀 Starting server... (router: ${mitmRouterBase})`);
|
|
532
535
|
if (IS_WIN) {
|
|
533
536
|
// Check port 443 — ask user before killing
|
|
@@ -549,6 +552,7 @@ async function startServer(apiKey, sudoPassword, forceKillPort443 = false) {
|
|
|
549
552
|
process.execPath,
|
|
550
553
|
[effectiveServerPath],
|
|
551
554
|
{
|
|
555
|
+
cwd: mitmServerCwd,
|
|
552
556
|
detached: false,
|
|
553
557
|
windowsHide: true,
|
|
554
558
|
stdio: ["ignore", "pipe", "pipe"],
|
|
@@ -557,6 +561,7 @@ async function startServer(apiKey, sudoPassword, forceKillPort443 = false) {
|
|
|
557
561
|
ROUTER_API_KEY: apiKey,
|
|
558
562
|
NODE_ENV: "production",
|
|
559
563
|
MITM_ROUTER_BASE: mitmRouterBase,
|
|
564
|
+
OPENROUTERX_AG_MOCK_BOOTSTRAP: agMockBootstrap,
|
|
560
565
|
},
|
|
561
566
|
}
|
|
562
567
|
);
|
|
@@ -569,19 +574,21 @@ async function startServer(apiKey, sudoPassword, forceKillPort443 = false) {
|
|
|
569
574
|
`HOME=${shellQuoteSingle(os.homedir())}`,
|
|
570
575
|
`ROUTER_API_KEY=${shellQuoteSingle(apiKey)}`,
|
|
571
576
|
`MITM_ROUTER_BASE=${shellQuoteSingle(mitmRouterBase)}`,
|
|
577
|
+
`OPENROUTERX_AG_MOCK_BOOTSTRAP=${shellQuoteSingle(agMockBootstrap)}`,
|
|
572
578
|
"NODE_ENV=production",
|
|
573
579
|
shellQuoteSingle(process.execPath),
|
|
574
580
|
shellQuoteSingle(effectiveServerPath),
|
|
575
581
|
].join(" ");
|
|
576
582
|
serverProcess = spawn(
|
|
577
583
|
"sudo", ["-S", "-E", "sh", "-c", inlineCmd],
|
|
578
|
-
{ detached: false, windowsHide: true, stdio: ["pipe", "pipe", "pipe"] }
|
|
584
|
+
{ cwd: mitmServerCwd, detached: false, windowsHide: true, stdio: ["pipe", "pipe", "pipe"] }
|
|
579
585
|
);
|
|
580
586
|
serverProcess.stdin.write(`${sudoPassword}\n`);
|
|
581
587
|
serverProcess.stdin.end();
|
|
582
588
|
} else {
|
|
583
589
|
// Docker/minimal images: no sudo — same as Windows-style direct spawn
|
|
584
590
|
serverProcess = spawn(process.execPath, [effectiveServerPath], {
|
|
591
|
+
cwd: mitmServerCwd,
|
|
585
592
|
detached: false,
|
|
586
593
|
windowsHide: true,
|
|
587
594
|
stdio: ["ignore", "pipe", "pipe"],
|
|
@@ -590,6 +597,7 @@ async function startServer(apiKey, sudoPassword, forceKillPort443 = false) {
|
|
|
590
597
|
ROUTER_API_KEY: apiKey,
|
|
591
598
|
NODE_ENV: "production",
|
|
592
599
|
MITM_ROUTER_BASE: mitmRouterBase,
|
|
600
|
+
OPENROUTERX_AG_MOCK_BOOTSTRAP: agMockBootstrap,
|
|
593
601
|
},
|
|
594
602
|
});
|
|
595
603
|
}
|