@yina-npm/openrouterx 0.4.20 → 0.4.21
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 +6 -3
- 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.js.nft.json +1 -1
- 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.js.nft.json +1 -1
- 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.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/quota/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/skills/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/user/page.js +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/user/page.js.nft.json +1 -1
- 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/route.js +1 -1
- 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 +2 -2
- package/app/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -0
- package/app/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -0
- package/app/.next/server/app/api/cli-tools/cowork-mcp-registry/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/cli-tools/cowork-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/droid-settings/route.js +2 -2
- 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 +1 -1
- 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 +3 -3
- 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 -0
- package/app/.next/server/app/api/v1/audio/voices/route.js.nft.json +1 -0
- package/app/.next/server/app/api/v1/audio/voices/route_client-reference-manifest.js +1 -0
- 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 -0
- package/app/.next/server/app/api/v1/models/info/route.js.nft.json +1 -0
- package/app/.next/server/app/api/v1/models/info/route_client-reference-manifest.js +1 -0
- 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 +6 -3
- package/app/.next/server/chunks/2343.js +1 -1
- package/app/.next/server/chunks/3855.js +1 -1
- package/app/.next/server/chunks/3913.js +1 -1
- package/app/.next/server/chunks/412.js +6 -6
- package/app/.next/server/chunks/4122.js +1 -1
- package/app/.next/server/chunks/4989.js +1 -1
- package/app/.next/server/chunks/5627.js +2 -2
- package/app/.next/server/chunks/5681.js +1 -1
- package/app/.next/server/chunks/6182.js +3 -3
- package/app/.next/server/chunks/6774.js +1 -0
- package/app/.next/server/chunks/7595.js +1 -1
- package/app/.next/server/chunks/7937.js +3 -3
- package/app/.next/server/chunks/9547.js +23 -0
- package/app/.next/server/middleware-build-manifest.js +1 -1
- package/app/.next/server/middleware.js +1 -1
- package/app/.next/server/pages/404.html +1 -1
- package/app/.next/server/pages/500.html +1 -1
- package/app/.next/server/server-reference-manifest.js +1 -1
- package/app/.next/server/server-reference-manifest.json +1 -1
- package/app/.next/static/2TCKT7FIN7PE7ZJ20oAeb/_buildManifest.js +1 -0
- package/app/.next/static/chunks/{1321-764b2073673fc333.js → 1321-b84130cd27e8b78c.js} +1 -1
- package/app/.next/static/chunks/1a258343-5938f676ed376386.js +1 -0
- package/app/.next/static/chunks/2336-5b3617dc05c223ff.js +23 -0
- package/app/.next/static/chunks/5497-a2d728c63029180e.js +7 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/{page-ba226c8b3c01dd8d.js → page-bd677c182bc2aae9.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/{page-cee4e0a7455b73ca.js → page-32b908ea6b23f583.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/{page-28a10e3cb86b9581.js → page-82cfc464b5e01f4f.js} +2 -2
- package/app/.next/static/chunks/app/(dashboard)/dashboard/mitm/{page-99260106103e6a4e.js → page-4473f52ad379b661.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/layout-7ea5a7abc543b04d.js +1 -0
- package/app/.next/static/chunks/app/_global-error/page-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/auth/login/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/auth/logout/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/auth/me/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/auth/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/credentials/update/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/model/resolve/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/models/alias/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/combos/[id]/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/combos/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/health/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/init/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/keys/[id]/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/keys/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/locale/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/models/alias/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/models/availability/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/models/custom/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/models/disabled/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/models/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/models/test/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/pricing/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/providers/client/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/providers/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/providers/suggested-models/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/providers/test-batch/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/providers/validate/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/settings/database/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/settings/proxy-test/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/settings/require-login/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/settings/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/shutdown/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/tags/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/translator/console-logs/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/translator/load/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/translator/save/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/translator/send/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/translator/translate/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/disable/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/enable/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/status/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-login/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-start-daemon/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/usage/api-keys/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/usage/chart/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/usage/history/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/usage/logs/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/usage/providers/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/usage/request-details/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/usage/request-logs/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/usage/stats/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/usage/stream/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/users/[id]/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/users/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/v1/api/chat/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/voices/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/v1/embeddings/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/v1/images/generations/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/v1/messages/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/[kind]/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/info/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/v1/responses/compact/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/v1/responses/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/v1/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/v1/search/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/v1/web/fetch/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/v1beta/models/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/version/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/api/version/update/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/manifest.webmanifest/route-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/app/page-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d1c369e2c3fb727b.js +1 -0
- package/app/.next/static/css/48caf49054c81db9.css +1 -0
- package/app/package.json +1 -1
- package/app/src/lib/updater/updater.js +6 -2
- package/app/src/mitm/dns/dnsConfig.js +1 -1
- package/app/src/mitm/handlers/kiro.js +385 -6
- package/app/src/mitm/manager.js +12 -3
- package/app/src/mitm/paths.js +7 -3
- package/cli.js +4 -3
- package/package.json +1 -1
- package/app/.next/server/chunks/212.js +0 -1
- package/app/.next/server/chunks/2238.js +0 -23
- package/app/.next/static/V2uXdl1SgLstSOcrQU5I9/_buildManifest.js +0 -1
- package/app/.next/static/chunks/1a258343-4878413fb430abba.js +0 -1
- package/app/.next/static/chunks/4295-99e90be71bb8d50c.js +0 -23
- package/app/.next/static/chunks/5497-27af7f632895d68e.js +0 -7
- package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/layout-edd266e7233eb314.js +0 -1
- package/app/.next/static/chunks/app/_global-error/page-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/auth/login/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/auth/logout/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/auth/me/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/auth/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/credentials/update/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/model/resolve/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/models/alias/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/combos/[id]/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/combos/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/health/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/init/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/keys/[id]/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/keys/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/locale/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/models/alias/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/models/availability/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/models/custom/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/models/disabled/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/models/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/models/test/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/pricing/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/providers/client/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/providers/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/providers/suggested-models/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/providers/test-batch/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/providers/validate/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/settings/database/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/settings/proxy-test/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/settings/require-login/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/settings/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/shutdown/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/tags/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/translator/console-logs/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/translator/load/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/translator/save/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/translator/send/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/translator/translate/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/disable/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/enable/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/status/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-login/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-start-daemon/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/usage/api-keys/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/usage/chart/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/usage/history/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/usage/logs/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/usage/providers/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/usage/request-details/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/usage/request-logs/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/usage/stats/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/usage/stream/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/users/[id]/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/users/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/v1/api/chat/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/v1/embeddings/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/v1/images/generations/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/[kind]/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/v1/responses/compact/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/v1/responses/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/v1/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/v1/search/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/v1/web/fetch/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/version/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/api/version/update/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/manifest.webmanifest/route-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/app/page-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-badb7034e478a358.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-badb7034e478a358.js +0 -1
- package/app/.next/static/css/76d369cc5468e708.css +0 -1
- /package/app/.next/static/{V2uXdl1SgLstSOcrQU5I9 → 2TCKT7FIN7PE7ZJ20oAeb}/_ssgManifest.js +0 -0
|
@@ -1,18 +1,397 @@
|
|
|
1
1
|
const { err } = require("../logger");
|
|
2
|
-
const { fetchRouter
|
|
2
|
+
const { fetchRouter } = require("./base");
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const path = require("path");
|
|
5
|
+
|
|
6
|
+
// Debug trace log — written to data/logs/mitm/kiro-debug.log
|
|
7
|
+
const DEBUG_LOG = path.join(__dirname, "../../../data/logs/mitm/kiro-debug.log");
|
|
8
|
+
function dbg(msg) {
|
|
9
|
+
try {
|
|
10
|
+
fs.appendFileSync(DEBUG_LOG, `${new Date().toISOString()} ${msg}\n`);
|
|
11
|
+
} catch {}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// ─── CRC32 (standard, polynomial 0xEDB88320 — same as AWS EventStream) ───────
|
|
15
|
+
const CRC32_TABLE = (() => {
|
|
16
|
+
const t = new Uint32Array(256);
|
|
17
|
+
for (let n = 0; n < 256; n++) {
|
|
18
|
+
let c = n;
|
|
19
|
+
for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
|
|
20
|
+
t[n] = c;
|
|
21
|
+
}
|
|
22
|
+
return t;
|
|
23
|
+
})();
|
|
24
|
+
|
|
25
|
+
function crc32(buf) {
|
|
26
|
+
let crc = 0xffffffff;
|
|
27
|
+
for (let i = 0; i < buf.length; i++) {
|
|
28
|
+
crc = (crc >>> 8) ^ CRC32_TABLE[(crc ^ buf[i]) & 0xff];
|
|
29
|
+
}
|
|
30
|
+
return (crc ^ 0xffffffff) >>> 0;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// ─── AWS EventStream frame builder ────────────────────────────────────────────
|
|
34
|
+
/**
|
|
35
|
+
* Encode a single string header into the AWS EventStream binary format.
|
|
36
|
+
* Header wire format: [nameLen 1B][name][type=7 1B][valueLen 2B][value]
|
|
37
|
+
*/
|
|
38
|
+
function encodeHeader(name, value) {
|
|
39
|
+
const nameBuf = Buffer.from(name, "utf8");
|
|
40
|
+
const valueBuf = Buffer.from(value, "utf8");
|
|
41
|
+
const buf = Buffer.alloc(1 + nameBuf.length + 1 + 2 + valueBuf.length);
|
|
42
|
+
let o = 0;
|
|
43
|
+
buf[o++] = nameBuf.length;
|
|
44
|
+
nameBuf.copy(buf, o); o += nameBuf.length;
|
|
45
|
+
buf[o++] = 7; // string type
|
|
46
|
+
buf.writeUInt16BE(valueBuf.length, o); o += 2;
|
|
47
|
+
valueBuf.copy(buf, o);
|
|
48
|
+
return buf;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Build a single AWS EventStream binary frame with all Smithy-required headers.
|
|
53
|
+
*
|
|
54
|
+
* Frame layout (big-endian):
|
|
55
|
+
* [totalLen 4B][headersLen 4B][preludeCRC 4B]
|
|
56
|
+
* [headers ...][payload JSON ...][messageCRC 4B]
|
|
57
|
+
*
|
|
58
|
+
* The SmithyMessageDecoderStream layer requires three system headers on every frame:
|
|
59
|
+
* :message-type = "event" (or "exception" / "error")
|
|
60
|
+
* :event-type = e.g. "assistantResponseEvent"
|
|
61
|
+
* :content-type = "application/json"
|
|
62
|
+
*/
|
|
63
|
+
function buildEventStreamFrame(eventType, payload) {
|
|
64
|
+
const payloadBuf = Buffer.from(
|
|
65
|
+
typeof payload === "string" ? payload : JSON.stringify(payload),
|
|
66
|
+
"utf8"
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
// All three Smithy system headers are required
|
|
70
|
+
const headersBuf = Buffer.concat([
|
|
71
|
+
encodeHeader(":message-type", "event"),
|
|
72
|
+
encodeHeader(":event-type", eventType),
|
|
73
|
+
encodeHeader(":content-type", "application/json"),
|
|
74
|
+
]);
|
|
75
|
+
const headersLen = headersBuf.length;
|
|
76
|
+
|
|
77
|
+
const totalLen = 4 + 4 + 4 + headersLen + payloadBuf.length + 4;
|
|
78
|
+
const frame = Buffer.alloc(totalLen);
|
|
79
|
+
|
|
80
|
+
frame.writeUInt32BE(totalLen, 0);
|
|
81
|
+
frame.writeUInt32BE(headersLen, 4);
|
|
82
|
+
frame.writeUInt32BE(crc32(frame.slice(0, 8)), 8); // prelude CRC
|
|
83
|
+
headersBuf.copy(frame, 12);
|
|
84
|
+
payloadBuf.copy(frame, 12 + headersLen);
|
|
85
|
+
frame.writeUInt32BE(crc32(frame.slice(0, totalLen - 4)), totalLen - 4); // message CRC
|
|
86
|
+
|
|
87
|
+
return frame;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// ─── CodeWhisperer → OpenAI conversion ───────────────────────────────────────
|
|
3
91
|
|
|
4
92
|
/**
|
|
5
|
-
*
|
|
93
|
+
* Safely stringify a tool-call input value.
|
|
94
|
+
* OpenAI expects `function.arguments` to be a JSON string, never an object.
|
|
95
|
+
* If 9router's Anthropic→OpenAI conversion passes the input as a pre-parsed object,
|
|
96
|
+
* this prevents the "" + object → "[object Object]" corruption.
|
|
97
|
+
*/
|
|
98
|
+
function safeArgsString(value) {
|
|
99
|
+
if (typeof value === "string") return value;
|
|
100
|
+
if (value == null) return "{}";
|
|
101
|
+
try { return JSON.stringify(value); } catch { return "{}"; }
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Convert a CodeWhisperer userInputMessage to one or more OpenAI messages.
|
|
106
|
+
*
|
|
107
|
+
* A user turn can contain:
|
|
108
|
+
* - plain text content → { role:"user", content }
|
|
109
|
+
* - toolResults only → one { role:"tool", tool_call_id, content } per result
|
|
110
|
+
* - both → tool messages first, then the user text message
|
|
111
|
+
*/
|
|
112
|
+
function convertUserInputMessage(uim) {
|
|
113
|
+
const out = [];
|
|
114
|
+
const toolResults = uim.userInputMessageContext?.toolResults || [];
|
|
115
|
+
|
|
116
|
+
// Emit one "tool" message per tool result (OpenAI multi-tool format)
|
|
117
|
+
for (const tr of toolResults) {
|
|
118
|
+
const text = (tr.content || []).map(c => c.text || "").join("\n");
|
|
119
|
+
out.push({
|
|
120
|
+
role: "tool",
|
|
121
|
+
tool_call_id: tr.toolUseId || "",
|
|
122
|
+
content: text,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Emit user text only if it exists alongside OR when there are no tool results
|
|
127
|
+
const text = (uim.content || "").trim();
|
|
128
|
+
if (text || toolResults.length === 0) {
|
|
129
|
+
out.push({ role: "user", content: text });
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return out;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Convert a CodeWhisperer assistantResponseMessage to an OpenAI assistant message.
|
|
137
|
+
*
|
|
138
|
+
* The assistant turn can contain:
|
|
139
|
+
* - plain text content
|
|
140
|
+
* - toolUses (tool calls) → tool_calls[] on the assistant message
|
|
141
|
+
*/
|
|
142
|
+
function convertAssistantResponseMessage(arm) {
|
|
143
|
+
const toolUses = arm.toolUses || [];
|
|
144
|
+
|
|
145
|
+
if (toolUses.length > 0) {
|
|
146
|
+
return {
|
|
147
|
+
role: "assistant",
|
|
148
|
+
content: arm.content || null,
|
|
149
|
+
tool_calls: toolUses.map(tu => ({
|
|
150
|
+
id: tu.toolUseId || `call_${Date.now()}`,
|
|
151
|
+
type: "function",
|
|
152
|
+
function: {
|
|
153
|
+
name: tu.name || "",
|
|
154
|
+
arguments: safeArgsString(tu.input),
|
|
155
|
+
},
|
|
156
|
+
})),
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return { role: "assistant", content: arm.content || "" };
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Convert AWS CodeWhisperer conversationState to an OpenAI messages array.
|
|
165
|
+
*
|
|
166
|
+
* Full multi-turn shape:
|
|
167
|
+
* history: [
|
|
168
|
+
* { userInputMessage: { content, userInputMessageContext?: { toolResults?, tools? } } },
|
|
169
|
+
* { assistantResponseMessage: { content, toolUses?: [...] } },
|
|
170
|
+
* ...
|
|
171
|
+
* ]
|
|
172
|
+
* currentMessage: { userInputMessage: { content, userInputMessageContext?: { toolResults? } } }
|
|
173
|
+
*/
|
|
174
|
+
function codeWhispererToMessages(body) {
|
|
175
|
+
const cs = body.conversationState || {};
|
|
176
|
+
const history = cs.history || [];
|
|
177
|
+
const currentMsg = cs.currentMessage;
|
|
178
|
+
const messages = [];
|
|
179
|
+
|
|
180
|
+
for (const item of history) {
|
|
181
|
+
if (item.userInputMessage) {
|
|
182
|
+
messages.push(...convertUserInputMessage(item.userInputMessage));
|
|
183
|
+
} else if (item.assistantResponseMessage) {
|
|
184
|
+
messages.push(convertAssistantResponseMessage(item.assistantResponseMessage));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Append the current (latest) turn
|
|
189
|
+
if (currentMsg?.userInputMessage) {
|
|
190
|
+
messages.push(...convertUserInputMessage(currentMsg.userInputMessage));
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return messages;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Extract tool definitions from a CodeWhisperer request and convert to OpenAI format.
|
|
198
|
+
*
|
|
199
|
+
* CodeWhisperer tools live in:
|
|
200
|
+
* conversationState.currentMessage.userInputMessage.userInputMessageContext.tools
|
|
201
|
+
* OR (in multi-turn) the first history item's userInputMessageContext.tools
|
|
202
|
+
*
|
|
203
|
+
* CodeWhisperer tool shape:
|
|
204
|
+
* { toolSpecification: { name, description, inputSchema: { json: <schema> } } }
|
|
205
|
+
*
|
|
206
|
+
* OpenAI tool shape:
|
|
207
|
+
* { type: "function", function: { name, description, parameters: <schema> } }
|
|
208
|
+
*/
|
|
209
|
+
function extractTools(body) {
|
|
210
|
+
const cs = body.conversationState || {};
|
|
211
|
+
|
|
212
|
+
// Tools are typically on the currentMessage; may also appear on the first history item
|
|
213
|
+
const fromCurrent = cs.currentMessage?.userInputMessage?.userInputMessageContext?.tools || [];
|
|
214
|
+
const fromHistory = cs.history?.find(h => h.userInputMessage?.userInputMessageContext?.tools)
|
|
215
|
+
?.userInputMessage?.userInputMessageContext?.tools || [];
|
|
216
|
+
const cwTools = fromCurrent.length > 0 ? fromCurrent : fromHistory;
|
|
217
|
+
|
|
218
|
+
if (!cwTools.length) return [];
|
|
219
|
+
|
|
220
|
+
return cwTools.map(item => {
|
|
221
|
+
const spec = item.toolSpecification || item;
|
|
222
|
+
return {
|
|
223
|
+
type: "function",
|
|
224
|
+
function: {
|
|
225
|
+
name: spec.name || "",
|
|
226
|
+
description: spec.description || `Tool: ${spec.name || "unknown"}`,
|
|
227
|
+
parameters: spec.inputSchema?.json || { type: "object", properties: {}, required: [] },
|
|
228
|
+
},
|
|
229
|
+
};
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// ─── OpenAI SSE → EventStream binary conversion ───────────────────────────────
|
|
234
|
+
/**
|
|
235
|
+
* Read 9router's OpenAI SSE response and re-encode it as AWS EventStream binary
|
|
236
|
+
* frames that Kiro's Smithy SDK expects.
|
|
237
|
+
*
|
|
238
|
+
* OpenAI SSE format: data: { choices:[{ delta:{ content:"..." } }] }\n\n
|
|
239
|
+
* EventStream events emitted:
|
|
240
|
+
* assistantResponseEvent { content: "..." } — one per SSE chunk with text
|
|
241
|
+
* toolUseEvent { toolUseId, name, input } — for tool calls
|
|
242
|
+
* messageStopEvent {} — on finish
|
|
243
|
+
*/
|
|
244
|
+
async function pipeOpenAIasEventStream(routerRes, res) {
|
|
245
|
+
if (!routerRes.body) {
|
|
246
|
+
res.end(buildEventStreamFrame("messageStopEvent", {}));
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
const reader = routerRes.body.getReader();
|
|
251
|
+
const decoder = new TextDecoder();
|
|
252
|
+
let sseBuffer = "";
|
|
253
|
+
let stopSent = false;
|
|
254
|
+
|
|
255
|
+
// Accumulated tool-call state keyed by index
|
|
256
|
+
const toolCallAccum = {};
|
|
257
|
+
|
|
258
|
+
const sendStop = () => {
|
|
259
|
+
if (!stopSent) {
|
|
260
|
+
stopSent = true;
|
|
261
|
+
res.write(buildEventStreamFrame("messageStopEvent", {}));
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
try {
|
|
266
|
+
while (true) {
|
|
267
|
+
const { done, value } = await reader.read();
|
|
268
|
+
if (done) break;
|
|
269
|
+
|
|
270
|
+
sseBuffer += decoder.decode(value, { stream: true });
|
|
271
|
+
|
|
272
|
+
// Split on newlines; keep the last (possibly incomplete) line in the buffer
|
|
273
|
+
const lines = sseBuffer.split("\n");
|
|
274
|
+
sseBuffer = lines.pop() ?? "";
|
|
275
|
+
|
|
276
|
+
for (const line of lines) {
|
|
277
|
+
const trimmed = line.trim();
|
|
278
|
+
if (!trimmed.startsWith("data:")) continue;
|
|
279
|
+
|
|
280
|
+
const raw = trimmed.slice(5).trim();
|
|
281
|
+
if (raw === "[DONE]") {
|
|
282
|
+
sendStop();
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
let chunk;
|
|
287
|
+
try { chunk = JSON.parse(raw); } catch { continue; }
|
|
288
|
+
|
|
289
|
+
const delta = chunk?.choices?.[0]?.delta;
|
|
290
|
+
if (!delta) continue;
|
|
291
|
+
|
|
292
|
+
// ── Text content ───────────────────────────────────────────────────────
|
|
293
|
+
if (delta.content) {
|
|
294
|
+
res.write(buildEventStreamFrame("assistantResponseEvent", { content: delta.content }));
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// ── Tool calls (streamed in pieces by OpenAI SSE) ──────────────────────
|
|
298
|
+
if (delta.tool_calls) {
|
|
299
|
+
dbg(`TOOL_CALLS delta: ${JSON.stringify(delta.tool_calls).slice(0, 300)}`);
|
|
300
|
+
for (const tc of delta.tool_calls) {
|
|
301
|
+
const idx = tc.index ?? 0;
|
|
302
|
+
if (!toolCallAccum[idx]) {
|
|
303
|
+
toolCallAccum[idx] = { id: tc.id ?? "", name: "", args: "" };
|
|
304
|
+
}
|
|
305
|
+
const acc = toolCallAccum[idx];
|
|
306
|
+
if (tc.id) acc.id = tc.id;
|
|
307
|
+
if (tc.function?.name) acc.name += tc.function.name;
|
|
308
|
+
// safeArgsString prevents `"" + object` → "[object Object]" corruption
|
|
309
|
+
// when 9router's Anthropic→OpenAI conversion passes a pre-parsed object
|
|
310
|
+
const argType = typeof tc.function?.arguments;
|
|
311
|
+
if (tc.function?.arguments != null) {
|
|
312
|
+
acc.args += safeArgsString(tc.function.arguments);
|
|
313
|
+
}
|
|
314
|
+
dbg(` tc[${idx}] argType=${argType} id=${acc.id} name=${acc.name} args_so_far=${acc.args.slice(0, 100)}`);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// ── Finish ─────────────────────────────────────────────────────────────
|
|
319
|
+
const finish = chunk?.choices?.[0]?.finish_reason;
|
|
320
|
+
if (finish) {
|
|
321
|
+
dbg(`FINISH finish_reason=${finish} toolCallKeys=${JSON.stringify(Object.keys(toolCallAccum))}`);
|
|
322
|
+
// Flush accumulated tool calls before stop
|
|
323
|
+
if (finish === "tool_calls") {
|
|
324
|
+
for (const acc of Object.values(toolCallAccum)) {
|
|
325
|
+
// IMPORTANT: Kiro's internal tool dispatcher expects `input` to be a JSON string
|
|
326
|
+
// (not a parsed object). The real CodeWhisperer server sends:
|
|
327
|
+
// { toolUseId, name, input: "{\"key\":\"value\"}" } ← input is a string
|
|
328
|
+
// Kiro then JSON.parses that string to get the tool arguments.
|
|
329
|
+
// If we send input as a parsed object, Kiro does String(obj) → "[object Object]".
|
|
330
|
+
const inputStr = acc.args || "{}";
|
|
331
|
+
dbg(` toolUseEvent: id=${acc.id} name=${acc.name} inputStr=${inputStr.slice(0, 200)}`);
|
|
332
|
+
res.write(buildEventStreamFrame("toolUseEvent", {
|
|
333
|
+
toolUseId: acc.id,
|
|
334
|
+
name: acc.name,
|
|
335
|
+
input: inputStr, // Must be a JSON STRING, not a parsed object
|
|
336
|
+
}));
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
sendStop();
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
} finally {
|
|
344
|
+
sendStop();
|
|
345
|
+
res.end();
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// ─── MITM intercept entry point ───────────────────────────────────────────────
|
|
350
|
+
/**
|
|
351
|
+
* Intercept Kiro IDE CodeWhisperer request:
|
|
352
|
+
* 1. Parse CodeWhisperer binary/JSON body
|
|
353
|
+
* 2. Convert to OpenAI messages[] format
|
|
354
|
+
* 3. Forward to 9router /v1/chat/completions (OpenAI SSE)
|
|
355
|
+
* 4. Convert OpenAI SSE response → AWS EventStream binary frames
|
|
356
|
+
* 5. Stream binary frames back to Kiro
|
|
6
357
|
*/
|
|
7
358
|
async function intercept(req, res, bodyBuffer, mappedModel) {
|
|
8
359
|
try {
|
|
9
360
|
const body = JSON.parse(bodyBuffer.toString());
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
361
|
+
|
|
362
|
+
// 1 + 2: CodeWhisperer → OpenAI messages + tools
|
|
363
|
+
const messages = codeWhispererToMessages(body);
|
|
364
|
+
if (messages.length === 0) {
|
|
365
|
+
throw new Error("codeWhispererToMessages produced 0 messages — check request body");
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
const tools = extractTools(body);
|
|
369
|
+
|
|
370
|
+
const openaiBody = {
|
|
371
|
+
model: mappedModel,
|
|
372
|
+
messages,
|
|
373
|
+
stream: true,
|
|
374
|
+
// Forward tools so Claude uses structured tool_calls instead of XML text fallback
|
|
375
|
+
...(tools.length > 0 && { tools, tool_choice: "auto" }),
|
|
376
|
+
};
|
|
377
|
+
|
|
378
|
+
// 3: Forward to 9router
|
|
379
|
+
const routerRes = await fetchRouter(openaiBody, "/v1/chat/completions", req.headers);
|
|
380
|
+
|
|
381
|
+
// 4 + 5: Re-encode response as AWS EventStream binary
|
|
382
|
+
res.writeHead(routerRes.status, {
|
|
383
|
+
"Content-Type": "application/vnd.amazon.eventstream",
|
|
384
|
+
"x-amzn-requestid": `mitm-${Date.now()}`,
|
|
385
|
+
"x-amz-id-2": "mitm",
|
|
386
|
+
"Transfer-Encoding": "chunked",
|
|
387
|
+
});
|
|
388
|
+
|
|
389
|
+
await pipeOpenAIasEventStream(routerRes, res);
|
|
13
390
|
} catch (error) {
|
|
14
391
|
err(`[Kiro] ${error.message}`);
|
|
15
|
-
if (!res.headersSent)
|
|
392
|
+
if (!res.headersSent) {
|
|
393
|
+
res.writeHead(500, { "Content-Type": "application/json" });
|
|
394
|
+
}
|
|
16
395
|
res.end(JSON.stringify({ error: { message: error.message, type: "mitm_error" } }));
|
|
17
396
|
}
|
|
18
397
|
}
|
package/app/src/mitm/manager.js
CHANGED
|
@@ -518,6 +518,15 @@ async function startServer(apiKey, sudoPassword, forceKillPort443 = false) {
|
|
|
518
518
|
}
|
|
519
519
|
|
|
520
520
|
// Step 2: Spawn server (Root CA already installed in Step 1.5)
|
|
521
|
+
// Verify server.js exists — recopy if runtime file was deleted (antivirus/cleanup)
|
|
522
|
+
let effectiveServerPath = SERVER_PATH;
|
|
523
|
+
if (!effectiveServerPath || !fs.existsSync(effectiveServerPath)) {
|
|
524
|
+
log(`[MITM] server.js missing at ${effectiveServerPath} → recopying`);
|
|
525
|
+
effectiveServerPath = ensureRuntimeServer(resolveBundledServerPath());
|
|
526
|
+
if (!effectiveServerPath || !fs.existsSync(effectiveServerPath)) {
|
|
527
|
+
throw new Error(`MITM server.js not found at ${effectiveServerPath}. Reinstall 9router.`);
|
|
528
|
+
}
|
|
529
|
+
}
|
|
521
530
|
const mitmRouterBase = await resolveMitmRouterBaseUrl();
|
|
522
531
|
log(`🚀 Starting server... (router: ${mitmRouterBase})`);
|
|
523
532
|
if (IS_WIN) {
|
|
@@ -538,7 +547,7 @@ async function startServer(apiKey, sudoPassword, forceKillPort443 = false) {
|
|
|
538
547
|
// Spawn directly — process already has admin rights
|
|
539
548
|
serverProcess = spawn(
|
|
540
549
|
process.execPath,
|
|
541
|
-
[
|
|
550
|
+
[effectiveServerPath],
|
|
542
551
|
{
|
|
543
552
|
detached: false,
|
|
544
553
|
windowsHide: true,
|
|
@@ -562,7 +571,7 @@ async function startServer(apiKey, sudoPassword, forceKillPort443 = false) {
|
|
|
562
571
|
`MITM_ROUTER_BASE=${shellQuoteSingle(mitmRouterBase)}`,
|
|
563
572
|
"NODE_ENV=production",
|
|
564
573
|
shellQuoteSingle(process.execPath),
|
|
565
|
-
shellQuoteSingle(
|
|
574
|
+
shellQuoteSingle(effectiveServerPath),
|
|
566
575
|
].join(" ");
|
|
567
576
|
serverProcess = spawn(
|
|
568
577
|
"sudo", ["-S", "-E", "sh", "-c", inlineCmd],
|
|
@@ -572,7 +581,7 @@ async function startServer(apiKey, sudoPassword, forceKillPort443 = false) {
|
|
|
572
581
|
serverProcess.stdin.end();
|
|
573
582
|
} else {
|
|
574
583
|
// Docker/minimal images: no sudo — same as Windows-style direct spawn
|
|
575
|
-
serverProcess = spawn(process.execPath, [
|
|
584
|
+
serverProcess = spawn(process.execPath, [effectiveServerPath], {
|
|
576
585
|
detached: false,
|
|
577
586
|
windowsHide: true,
|
|
578
587
|
stdio: ["ignore", "pipe", "pipe"],
|
package/app/src/mitm/paths.js
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
const path = require("path");
|
|
2
2
|
const os = require("os");
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
const APP_DATA_DIR_NAME = "openrouterx";
|
|
5
|
+
|
|
5
6
|
function getDataDir() {
|
|
6
7
|
if (process.env.DATA_DIR) return process.env.DATA_DIR;
|
|
7
8
|
if (process.platform === "win32") {
|
|
8
|
-
return path.join(
|
|
9
|
+
return path.join(
|
|
10
|
+
process.env.APPDATA || path.join(os.homedir(), "AppData", "Roaming"),
|
|
11
|
+
APP_DATA_DIR_NAME
|
|
12
|
+
);
|
|
9
13
|
}
|
|
10
|
-
return path.join(os.homedir(),
|
|
14
|
+
return path.join(os.homedir(), `.${APP_DATA_DIR_NAME}`);
|
|
11
15
|
}
|
|
12
16
|
|
|
13
17
|
const DATA_DIR = getDataDir();
|
package/cli.js
CHANGED
|
@@ -8,10 +8,11 @@ const net = require("node:net");
|
|
|
8
8
|
|
|
9
9
|
const pkg = require("./package.json");
|
|
10
10
|
|
|
11
|
-
const APP_NAME =
|
|
11
|
+
const APP_NAME = "openrouterX";
|
|
12
|
+
const APP_DATA_DIR_NAME = "openrouterx";
|
|
12
13
|
const DATA_DIR = process.platform === "win32"
|
|
13
|
-
? path.join(process.env.APPDATA || os.homedir(),
|
|
14
|
-
: path.join(os.homedir(), `.${
|
|
14
|
+
? path.join(process.env.APPDATA || os.homedir(), APP_DATA_DIR_NAME)
|
|
15
|
+
: path.join(os.homedir(), `.${APP_DATA_DIR_NAME}`);
|
|
15
16
|
const PID_FILE = path.join(DATA_DIR, "server.pid");
|
|
16
17
|
const META_FILE = path.join(DATA_DIR, "server.json");
|
|
17
18
|
const LOG_FILE = path.join(DATA_DIR, "server.log");
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
exports.id=212,exports.ids=[212],exports.modules={2422:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/UsageStats.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/UsageStats.js","default")},3080:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/OAuthModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/OAuthModal.js","default")},5843:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/NoAuthProxyCard.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/NoAuthProxyCard.js","default")},7290:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Card.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Card.js","default")},10079:(a,b,c)=>{"use strict";c.d(b,{ConfirmModal:()=>f,default:()=>e});var d=c(77943);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Modal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Modal.js","default"),f=(0,d.registerClientReference)(function(){throw Error("Attempted to call ConfirmModal() from the server but ConfirmModal is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Modal.js","ConfirmModal")},10926:(a,b,c)=>{Promise.resolve().then(c.bind(c,18200)),Promise.resolve().then(c.bind(c,26288)),Promise.resolve().then(c.bind(c,70061)),Promise.resolve().then(c.bind(c,33893)),Promise.resolve().then(c.bind(c,45512)),Promise.resolve().then(c.bind(c,7290)),Promise.resolve().then(c.bind(c,33811)),Promise.resolve().then(c.bind(c,40167)),Promise.resolve().then(c.bind(c,70139)),Promise.resolve().then(c.bind(c,49123)),Promise.resolve().then(c.bind(c,64148)),Promise.resolve().then(c.bind(c,92669)),Promise.resolve().then(c.bind(c,29354)),Promise.resolve().then(c.bind(c,80342)),Promise.resolve().then(c.bind(c,71230)),Promise.resolve().then(c.bind(c,82448)),Promise.resolve().then(c.bind(c,14285)),Promise.resolve().then(c.bind(c,87228)),Promise.resolve().then(c.bind(c,45205)),Promise.resolve().then(c.bind(c,64420)),Promise.resolve().then(c.bind(c,61780)),Promise.resolve().then(c.bind(c,92082)),Promise.resolve().then(c.bind(c,70603)),Promise.resolve().then(c.bind(c,10079)),Promise.resolve().then(c.bind(c,94582)),Promise.resolve().then(c.bind(c,29674)),Promise.resolve().then(c.bind(c,5843)),Promise.resolve().then(c.bind(c,3080)),Promise.resolve().then(c.bind(c,81923)),Promise.resolve().then(c.bind(c,19083)),Promise.resolve().then(c.bind(c,54065)),Promise.resolve().then(c.bind(c,83784)),Promise.resolve().then(c.bind(c,26866)),Promise.resolve().then(c.bind(c,89886)),Promise.resolve().then(c.bind(c,40515)),Promise.resolve().then(c.bind(c,70092)),Promise.resolve().then(c.bind(c,18421)),Promise.resolve().then(c.bind(c,2422)),Promise.resolve().then(c.bind(c,76978))},14285:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/KiroOAuthWrapper.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/KiroOAuthWrapper.js","default")},18200:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/AddCustomEmbeddingModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/AddCustomEmbeddingModal.js","default")},18421:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Tooltip.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Tooltip.js","default")},19083:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/RequestLogger.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/RequestLogger.js","default")},26288:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/AddCustomImageModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/AddCustomImageModal.js","default")},26866:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Sidebar.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Sidebar.js","default")},29354:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/HeaderMenu.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/HeaderMenu.js","default")},29674:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/NineRemoteButton.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/NineRemoteButton.js","default")},30508:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>k});var d=c(5735),e=c(65573),f=c(69614);c(45512),c(71230),c(83784),c(7290),c(10079),c(92082),c(70061),c(33893),c(70092),c(40515),c(89886),c(26866),c(92669),c(49123),c(3080),c(94582),c(70603),c(2422),c(45205),c(29674),c(29354),c(33811),c(19083),c(82448),c(14285),c(87228),c(40167),c(80342),c(64148),c(70139),c(18200),c(26288),c(5843),c(54065),c(18421),c(81923);var g=c(61780);c(64420);var h=c(76978);let i=new TextEncoder().encode(process.env.JWT_SECRET||"9router-default-secret-change-me");async function j(){try{let a=await (0,e.UL)(),b=a.get("auth_token")?.value;if(!b)return null;let{payload:c}=await (0,f.V)(b,i);return{role:c.role||null,userId:c.userId||null,displayName:c.displayName||null}}catch{return null}}async function k({children:a}){let b=await j();return(0,d.jsx)(h.UserRoleProvider,{role:b?.role,userId:b?.userId,displayName:b?.displayName,children:(0,d.jsx)(g.default,{children:a})})}},33811:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/ChangelogModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/ChangelogModal.js","default")},33893:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Badge.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Badge.js","default")},40167:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/CursorAuthModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/CursorAuthModal.js","default")},40515:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/ThemeToggle.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/ThemeToggle.js","default")},45205:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/LanguageSwitcher.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/LanguageSwitcher.js","default")},45512:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Button.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Button.js","default")},49123:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Footer.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Footer.js","default")},54065:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/SegmentedControl.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/SegmentedControl.js","default")},61780:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/layouts/DashboardLayout.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/layouts/DashboardLayout.js","default")},64148:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/GitLabAuthModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/GitLabAuthModal.js","default")},64420:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/layouts/AuthLayout.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/layouts/AuthLayout.js","default")},70061:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Avatar.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Avatar.js","default")},70092:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Toggle.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Toggle.js","default")},70139:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/EditConnectionModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/EditConnectionModal.js","default")},70603:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/ManualConfigModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/ManualConfigModal.js","default")},71230:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Input.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Input.js","default")},73974:(a,b,c)=>{Promise.resolve().then(c.bind(c,67738)),Promise.resolve().then(c.bind(c,31402)),Promise.resolve().then(c.bind(c,25919)),Promise.resolve().then(c.bind(c,75171)),Promise.resolve().then(c.bind(c,99070)),Promise.resolve().then(c.bind(c,17660)),Promise.resolve().then(c.bind(c,11229)),Promise.resolve().then(c.bind(c,51109)),Promise.resolve().then(c.bind(c,51585)),Promise.resolve().then(c.bind(c,48781)),Promise.resolve().then(c.bind(c,43182)),Promise.resolve().then(c.bind(c,86739)),Promise.resolve().then(c.bind(c,3236)),Promise.resolve().then(c.bind(c,79488)),Promise.resolve().then(c.bind(c,83552)),Promise.resolve().then(c.bind(c,86209)),Promise.resolve().then(c.bind(c,5291)),Promise.resolve().then(c.bind(c,56110)),Promise.resolve().then(c.bind(c,267)),Promise.resolve().then(c.bind(c,53838)),Promise.resolve().then(c.bind(c,85306)),Promise.resolve().then(c.bind(c,74812)),Promise.resolve().then(c.bind(c,39645)),Promise.resolve().then(c.bind(c,95145)),Promise.resolve().then(c.bind(c,83352)),Promise.resolve().then(c.bind(c,23048)),Promise.resolve().then(c.bind(c,50585)),Promise.resolve().then(c.bind(c,79346)),Promise.resolve().then(c.bind(c,11633)),Promise.resolve().then(c.bind(c,91809)),Promise.resolve().then(c.bind(c,91099)),Promise.resolve().then(c.bind(c,4770)),Promise.resolve().then(c.bind(c,42196)),Promise.resolve().then(c.bind(c,19308)),Promise.resolve().then(c.bind(c,53845)),Promise.resolve().then(c.bind(c,95514)),Promise.resolve().then(c.bind(c,32971)),Promise.resolve().then(c.bind(c,28403)),Promise.resolve().then(c.bind(c,37900))},76978:(a,b,c)=>{"use strict";c.d(b,{UserRoleProvider:()=>e});var d=c(77943);(0,d.registerClientReference)(function(){throw Error("Attempted to call UserRoleContext() from the server but UserRoleContext is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/UserRoleProvider.js","UserRoleContext");let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call UserRoleProvider() from the server but UserRoleProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/UserRoleProvider.js","UserRoleProvider");(0,d.registerClientReference)(function(){throw Error("Attempted to call useUserRole() from the server but useUserRole is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/UserRoleProvider.js","useUserRole"),(0,d.registerClientReference)(function(){throw Error("Attempted to call useIsSuperAdmin() from the server but useIsSuperAdmin is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/UserRoleProvider.js","useIsSuperAdmin")},80342:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/IFlowCookieModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/IFlowCookieModal.js","default")},81923:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/ProviderInfoCard.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/ProviderInfoCard.js","default")},82448:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/KiroAuthModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/KiroAuthModal.js","default")},83784:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Select.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Select.js","default")},87228:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/KiroSocialOAuthModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/KiroSocialOAuthModal.js","default")},92082:(a,b,c)=>{"use strict";c.d(b,{CardSkeleton:()=>h,PageLoading:()=>f,Skeleton:()=>g,Spinner:()=>e,default:()=>i});var d=c(77943);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call Spinner() from the server but Spinner is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Loading.js","Spinner"),f=(0,d.registerClientReference)(function(){throw Error("Attempted to call PageLoading() from the server but PageLoading is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Loading.js","PageLoading"),g=(0,d.registerClientReference)(function(){throw Error("Attempted to call Skeleton() from the server but Skeleton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Loading.js","Skeleton"),h=(0,d.registerClientReference)(function(){throw Error("Attempted to call CardSkeleton() from the server but CardSkeleton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Loading.js","CardSkeleton"),i=(0,d.registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Loading.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Loading.js","default")},92669:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Header.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Header.js","default")},94582:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/ModelSelectModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/ModelSelectModal.js","default")}};
|