@amir83nasr/10router 0.1.0
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/.next/BUILD_ID +1 -0
- package/.next/app-path-routes-manifest.json +169 -0
- package/.next/build-manifest.json +20 -0
- package/.next/export-marker.json +6 -0
- package/.next/images-manifest.json +68 -0
- package/.next/next-minimal-server.js.nft.json +1 -0
- package/.next/next-server.js.nft.json +1 -0
- package/.next/package.json +1 -0
- package/.next/prerender-manifest.json +633 -0
- package/.next/react-loadable-manifest.json +11 -0
- package/.next/required-server-files.json +410 -0
- package/.next/routes-manifest.json +1132 -0
- package/.next/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -0
- package/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +40 -0
- package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -0
- package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -0
- package/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/combos/page.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -0
- package/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/console-log/page.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -0
- package/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/endpoint/page.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -0
- package/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page.js +10 -0
- package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page.js.nft.json +1 -0
- package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page.js.nft.json +1 -0
- package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/page.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -0
- package/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/profile/page.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -0
- package/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +21 -0
- package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -0
- package/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/providers/new/page.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -0
- package/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/providers/page.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -0
- package/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +4 -0
- package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -0
- package/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -0
- package/.next/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/quota/page.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -0
- package/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/token-saver/page.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -0
- package/.next/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/usage/page.js +1 -0
- package/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -0
- package/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -0
- package/.next/server/app/_global-error/page.js +31 -0
- package/.next/server/app/_global-error/page.js.nft.json +1 -0
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -0
- package/.next/server/app/_global-error.html +1 -0
- package/.next/server/app/_global-error.meta +27 -0
- package/.next/server/app/_global-error.rsc +14 -0
- package/.next/server/app/_global-error.segments/_full.segment.rsc +14 -0
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +20 -0
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
- package/.next/server/app/_not-found/page.js +1 -0
- package/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
- package/.next/server/app/_not-found.html +1 -0
- package/.next/server/app/_not-found.meta +27 -0
- package/.next/server/app/_not-found.rsc +24 -0
- package/.next/server/app/_not-found.segments/_full.segment.rsc +24 -0
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +27 -0
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/api/auth/login/route.js +3 -0
- package/.next/server/app/api/auth/login/route.js.nft.json +1 -0
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/auth/logout/route.js +1 -0
- package/.next/server/app/api/auth/logout/route.js.nft.json +1 -0
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/auth/oidc/callback/route.js +1 -0
- package/.next/server/app/api/auth/oidc/callback/route.js.nft.json +1 -0
- package/.next/server/app/api/auth/oidc/callback/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/auth/oidc/start/route.js +1 -0
- package/.next/server/app/api/auth/oidc/start/route.js.nft.json +1 -0
- package/.next/server/app/api/auth/oidc/start/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/auth/oidc/test/route.js +1 -0
- package/.next/server/app/api/auth/oidc/test/route.js.nft.json +1 -0
- package/.next/server/app/api/auth/oidc/test/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/auth/reset-password/route.js +1 -0
- package/.next/server/app/api/auth/reset-password/route.js.nft.json +1 -0
- package/.next/server/app/api/auth/reset-password/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/auth/saml/acs/route.js +3 -0
- package/.next/server/app/api/auth/saml/acs/route.js.nft.json +1 -0
- package/.next/server/app/api/auth/saml/acs/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/auth/saml/metadata/route.js +3 -0
- package/.next/server/app/api/auth/saml/metadata/route.js.nft.json +1 -0
- package/.next/server/app/api/auth/saml/metadata/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/auth/saml/start/route.js +3 -0
- package/.next/server/app/api/auth/saml/start/route.js.nft.json +1 -0
- package/.next/server/app/api/auth/saml/start/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/auth/saml/test/route.js +3 -0
- package/.next/server/app/api/auth/saml/test/route.js.nft.json +1 -0
- package/.next/server/app/api/auth/saml/test/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/auth/status/route.js +3 -0
- package/.next/server/app/api/auth/status/route.js.nft.json +1 -0
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/changelog/route.js +1 -0
- package/.next/server/app/api/changelog/route.js.nft.json +1 -0
- package/.next/server/app/api/changelog/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/cli-tools/all-statuses/route.js +1 -0
- package/.next/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -0
- package/.next/server/app/api/cli-tools/all-statuses/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/cli-tools/claude-settings/route.js +2 -0
- package/.next/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -0
- package/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/cli-tools/codex-settings/route.js +2 -0
- package/.next/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -0
- package/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -0
- package/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -0
- package/.next/server/app/api/cli-tools/cowork-mcp-registry/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -0
- package/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -0
- package/.next/server/app/api/cli-tools/cowork-mcp-tools/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/cli-tools/cowork-settings/route.js +2 -0
- package/.next/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -0
- package/.next/server/app/api/cli-tools/cowork-settings/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/cli-tools/dsh-settings/route.js +1 -0
- package/.next/server/app/api/cli-tools/dsh-settings/route.js.nft.json +1 -0
- package/.next/server/app/api/cli-tools/dsh-settings/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/cli-tools/opencode-settings/route.js +2 -0
- package/.next/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -0
- package/.next/server/app/api/cli-tools/opencode-settings/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/combos/[id]/route.js +1 -0
- package/.next/server/app/api/combos/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/combos/route.js +1 -0
- package/.next/server/app/api/combos/route.js.nft.json +1 -0
- package/.next/server/app/api/combos/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/headroom/extras/route.js +1 -0
- package/.next/server/app/api/headroom/extras/route.js.nft.json +1 -0
- package/.next/server/app/api/headroom/extras/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/headroom/proxy/[...path]/route.js +1 -0
- package/.next/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -0
- package/.next/server/app/api/headroom/proxy/[...path]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/headroom/restart/route.js +1 -0
- package/.next/server/app/api/headroom/restart/route.js.nft.json +1 -0
- package/.next/server/app/api/headroom/restart/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/headroom/start/route.js +1 -0
- package/.next/server/app/api/headroom/start/route.js.nft.json +1 -0
- package/.next/server/app/api/headroom/start/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/headroom/status/route.js +1 -0
- package/.next/server/app/api/headroom/status/route.js.nft.json +1 -0
- package/.next/server/app/api/headroom/status/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/headroom/stop/route.js +1 -0
- package/.next/server/app/api/headroom/stop/route.js.nft.json +1 -0
- package/.next/server/app/api/headroom/stop/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/health/route.js +1 -0
- package/.next/server/app/api/health/route.js.nft.json +1 -0
- package/.next/server/app/api/health/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/init/route.js +1 -0
- package/.next/server/app/api/init/route.js.nft.json +1 -0
- package/.next/server/app/api/init/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/keys/[id]/route.js +1 -0
- package/.next/server/app/api/keys/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/keys/route.js +1 -0
- package/.next/server/app/api/keys/route.js.nft.json +1 -0
- package/.next/server/app/api/keys/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/locale/route.js +1 -0
- package/.next/server/app/api/locale/route.js.nft.json +1 -0
- package/.next/server/app/api/locale/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/mcp/[plugin]/message/route.js +7 -0
- package/.next/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -0
- package/.next/server/app/api/mcp/[plugin]/message/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/mcp/[plugin]/sse/route.js +10 -0
- package/.next/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -0
- package/.next/server/app/api/mcp/[plugin]/sse/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -0
- package/.next/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -0
- package/.next/server/app/api/media-providers/tts/deepgram/voices/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -0
- package/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -0
- package/.next/server/app/api/media-providers/tts/elevenlabs/voices/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -0
- package/.next/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -0
- package/.next/server/app/api/media-providers/tts/inworld/voices/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/media-providers/tts/minimax/voices/route.js +1 -0
- package/.next/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -0
- package/.next/server/app/api/media-providers/tts/minimax/voices/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/media-providers/tts/voices/route.js +1 -0
- package/.next/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -0
- package/.next/server/app/api/media-providers/tts/voices/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/models/alias/route.js +1 -0
- package/.next/server/app/api/models/alias/route.js.nft.json +1 -0
- package/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/models/availability/route.js +1 -0
- package/.next/server/app/api/models/availability/route.js.nft.json +1 -0
- package/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/models/catalog-sync/route.js +1 -0
- package/.next/server/app/api/models/catalog-sync/route.js.nft.json +1 -0
- package/.next/server/app/api/models/catalog-sync/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/models/custom/route.js +1 -0
- package/.next/server/app/api/models/custom/route.js.nft.json +1 -0
- package/.next/server/app/api/models/custom/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/models/disabled/route.js +1 -0
- package/.next/server/app/api/models/disabled/route.js.nft.json +1 -0
- package/.next/server/app/api/models/disabled/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/models/route.js +1 -0
- package/.next/server/app/api/models/route.js.nft.json +1 -0
- package/.next/server/app/api/models/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/models/test/route.js +1 -0
- package/.next/server/app/api/models/test/route.js.nft.json +1 -0
- package/.next/server/app/api/models/test/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -0
- package/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -0
- package/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/oauth/codex/bulk-import/route.js +1 -0
- package/.next/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -0
- package/.next/server/app/api/oauth/codex/bulk-import/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/oauth/codex/import-token/route.js +1 -0
- package/.next/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -0
- package/.next/server/app/api/oauth/codex/import-token/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/oauth/cursor/auto-import/route.js +4 -0
- package/.next/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -0
- package/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/oauth/cursor/import/route.js +1 -0
- package/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -0
- package/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/oauth/gitlab/pat/route.js +1 -0
- package/.next/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -0
- package/.next/server/app/api/oauth/gitlab/pat/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/oauth/grok-cli/bulk-import/route.js +1 -0
- package/.next/server/app/api/oauth/grok-cli/bulk-import/route.js.nft.json +1 -0
- package/.next/server/app/api/oauth/grok-cli/bulk-import/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/oauth/iflow/cookie/route.js +1 -0
- package/.next/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -0
- package/.next/server/app/api/oauth/iflow/cookie/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/oauth/xiaomi-mimo/api-key/route.js +1 -0
- package/.next/server/app/api/oauth/xiaomi-mimo/api-key/route.js.nft.json +1 -0
- package/.next/server/app/api/oauth/xiaomi-mimo/api-key/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/oauth/xiaomi-mimo/auto-import/route.js +4 -0
- package/.next/server/app/api/oauth/xiaomi-mimo/auto-import/route.js.nft.json +1 -0
- package/.next/server/app/api/oauth/xiaomi-mimo/auto-import/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/pricing/route.js +1 -0
- package/.next/server/app/api/pricing/route.js.nft.json +1 -0
- package/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/provider-nodes/[id]/route.js +1 -0
- package/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/provider-nodes/route.js +1 -0
- package/.next/server/app/api/provider-nodes/route.js.nft.json +1 -0
- package/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/provider-nodes/validate/route.js +1 -0
- package/.next/server/app/api/provider-nodes/validate/route.js.nft.json +1 -0
- package/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/providers/[id]/models/route.js +1 -0
- package/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -0
- package/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/providers/[id]/route.js +1 -0
- package/.next/server/app/api/providers/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/providers/[id]/test/route.js +1 -0
- package/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -0
- package/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/providers/[id]/test-models/route.js +1 -0
- package/.next/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -0
- package/.next/server/app/api/providers/[id]/test-models/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/providers/client/route.js +1 -0
- package/.next/server/app/api/providers/client/route.js.nft.json +1 -0
- package/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/providers/kilo/free-models/route.js +1 -0
- package/.next/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -0
- package/.next/server/app/api/providers/kilo/free-models/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/providers/route.js +1 -0
- package/.next/server/app/api/providers/route.js.nft.json +1 -0
- package/.next/server/app/api/providers/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/providers/suggested-models/route.js +1 -0
- package/.next/server/app/api/providers/suggested-models/route.js.nft.json +1 -0
- package/.next/server/app/api/providers/suggested-models/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/providers/test-batch/route.js +1 -0
- package/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -0
- package/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/providers/validate/route.js +1 -0
- package/.next/server/app/api/providers/validate/route.js.nft.json +1 -0
- package/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/proxy-pools/[id]/route.js +1 -0
- package/.next/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/proxy-pools/[id]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -0
- package/.next/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -0
- package/.next/server/app/api/proxy-pools/[id]/test/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js +43 -0
- package/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -0
- package/.next/server/app/api/proxy-pools/cloudflare-deploy/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/proxy-pools/deno-deploy/route.js +40 -0
- package/.next/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -0
- package/.next/server/app/api/proxy-pools/deno-deploy/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/proxy-pools/route.js +1 -0
- package/.next/server/app/api/proxy-pools/route.js.nft.json +1 -0
- package/.next/server/app/api/proxy-pools/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/proxy-pools/vercel-deploy/route.js +33 -0
- package/.next/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -0
- package/.next/server/app/api/proxy-pools/vercel-deploy/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/pxpipe/health/route.js +3 -0
- package/.next/server/app/api/pxpipe/health/route.js.nft.json +1 -0
- package/.next/server/app/api/pxpipe/health/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/pxpipe/install/route.js +3 -0
- package/.next/server/app/api/pxpipe/install/route.js.nft.json +1 -0
- package/.next/server/app/api/pxpipe/install/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/pxpipe/logs/route.js +3 -0
- package/.next/server/app/api/pxpipe/logs/route.js.nft.json +1 -0
- package/.next/server/app/api/pxpipe/logs/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/pxpipe/restart/route.js +3 -0
- package/.next/server/app/api/pxpipe/restart/route.js.nft.json +1 -0
- package/.next/server/app/api/pxpipe/restart/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/pxpipe/start/route.js +3 -0
- package/.next/server/app/api/pxpipe/start/route.js.nft.json +1 -0
- package/.next/server/app/api/pxpipe/start/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/pxpipe/stats/route.js +3 -0
- package/.next/server/app/api/pxpipe/stats/route.js.nft.json +1 -0
- package/.next/server/app/api/pxpipe/stats/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/pxpipe/status/route.js +3 -0
- package/.next/server/app/api/pxpipe/status/route.js.nft.json +1 -0
- package/.next/server/app/api/pxpipe/status/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/pxpipe/stop/route.js +3 -0
- package/.next/server/app/api/pxpipe/stop/route.js.nft.json +1 -0
- package/.next/server/app/api/pxpipe/stop/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/settings/database/route.js +1 -0
- package/.next/server/app/api/settings/database/route.js.nft.json +1 -0
- package/.next/server/app/api/settings/database/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/settings/proxy-test/route.js +1 -0
- package/.next/server/app/api/settings/proxy-test/route.js.nft.json +1 -0
- package/.next/server/app/api/settings/proxy-test/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/settings/require-login/route.js +1 -0
- package/.next/server/app/api/settings/require-login/route.js.nft.json +1 -0
- package/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/settings/route.js +1 -0
- package/.next/server/app/api/settings/route.js.nft.json +1 -0
- package/.next/server/app/api/settings/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/shutdown/route.js +1 -0
- package/.next/server/app/api/shutdown/route.js.nft.json +1 -0
- package/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/tags/route.js +1 -0
- package/.next/server/app/api/tags/route.js.nft.json +1 -0
- package/.next/server/app/api/tags/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/translator/console-logs/route.js +1 -0
- package/.next/server/app/api/translator/console-logs/route.js.nft.json +1 -0
- package/.next/server/app/api/translator/console-logs/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/translator/console-logs/stream/route.js +9 -0
- package/.next/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -0
- package/.next/server/app/api/translator/console-logs/stream/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/translator/load/route.js +1 -0
- package/.next/server/app/api/translator/load/route.js.nft.json +1 -0
- package/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/translator/save/route.js +1 -0
- package/.next/server/app/api/translator/save/route.js.nft.json +1 -0
- package/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/translator/send/route.js +1 -0
- package/.next/server/app/api/translator/send/route.js.nft.json +1 -0
- package/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/translator/translate/route.js +1 -0
- package/.next/server/app/api/translator/translate/route.js.nft.json +1 -0
- package/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/tunnel/disable/route.js +1 -0
- package/.next/server/app/api/tunnel/disable/route.js.nft.json +1 -0
- package/.next/server/app/api/tunnel/disable/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/tunnel/enable/route.js +1 -0
- package/.next/server/app/api/tunnel/enable/route.js.nft.json +1 -0
- package/.next/server/app/api/tunnel/enable/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/tunnel/status/route.js +1 -0
- package/.next/server/app/api/tunnel/status/route.js.nft.json +1 -0
- package/.next/server/app/api/tunnel/status/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/tunnel/tailscale-check/route.js +1 -0
- package/.next/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -0
- package/.next/server/app/api/tunnel/tailscale-check/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -0
- package/.next/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -0
- package/.next/server/app/api/tunnel/tailscale-disable/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -0
- package/.next/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -0
- package/.next/server/app/api/tunnel/tailscale-enable/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/tunnel/tailscale-install/route.js +5 -0
- package/.next/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -0
- package/.next/server/app/api/tunnel/tailscale-install/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -0
- package/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -0
- package/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/usage/[connectionId]/route.js +1 -0
- package/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -0
- package/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/usage/chart/route.js +1 -0
- package/.next/server/app/api/usage/chart/route.js.nft.json +1 -0
- package/.next/server/app/api/usage/chart/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/usage/history/route.js +1 -0
- package/.next/server/app/api/usage/history/route.js.nft.json +1 -0
- package/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/usage/logs/route.js +1 -0
- package/.next/server/app/api/usage/logs/route.js.nft.json +1 -0
- package/.next/server/app/api/usage/logs/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/usage/providers/route.js +1 -0
- package/.next/server/app/api/usage/providers/route.js.nft.json +1 -0
- package/.next/server/app/api/usage/providers/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/usage/request-details/route.js +1 -0
- package/.next/server/app/api/usage/request-details/route.js.nft.json +1 -0
- package/.next/server/app/api/usage/request-details/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/usage/request-logs/route.js +1 -0
- package/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -0
- package/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/usage/stats/route.js +1 -0
- package/.next/server/app/api/usage/stats/route.js.nft.json +1 -0
- package/.next/server/app/api/usage/stats/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/usage/stream/route.js +7 -0
- package/.next/server/app/api/usage/stream/route.js.nft.json +1 -0
- package/.next/server/app/api/usage/stream/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/api/chat/route.js +1 -0
- package/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/audio/speech/route.js +1 -0
- package/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/audio/transcriptions/route.js +1 -0
- package/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/audio/transcriptions/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/audio/voices/route.js +1 -0
- package/.next/server/app/api/v1/audio/voices/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/audio/voices/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/chat/completions/route.js +1 -0
- package/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/embeddings/route.js +1 -0
- package/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/images/generations/route.js +4 -0
- package/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/images/generations/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/messages/count_tokens/route.js +1 -0
- package/.next/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/messages/route.js +1 -0
- package/.next/server/app/api/v1/messages/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/models/[...model]/route.js +1 -0
- package/.next/server/app/api/v1/models/[...model]/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/models/[...model]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/models/info/route.js +1 -0
- package/.next/server/app/api/v1/models/info/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/models/info/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/models/route.js +1 -0
- package/.next/server/app/api/v1/models/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/responses/compact/route.js +1 -0
- package/.next/server/app/api/v1/responses/compact/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/responses/compact/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/responses/route.js +1 -0
- package/.next/server/app/api/v1/responses/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/route.js +1 -0
- package/.next/server/app/api/v1/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/search/route.js +1 -0
- package/.next/server/app/api/v1/search/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/search/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/systemone/route.js +1 -0
- package/.next/server/app/api/v1/systemone/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/systemone/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/videos/[id]/route.js +1 -0
- package/.next/server/app/api/v1/videos/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/videos/[id]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/videos/edits/route.js +1 -0
- package/.next/server/app/api/v1/videos/edits/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/videos/edits/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/videos/extensions/route.js +1 -0
- package/.next/server/app/api/v1/videos/extensions/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/videos/extensions/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/videos/generations/route.js +1 -0
- package/.next/server/app/api/v1/videos/generations/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/videos/generations/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/web/fetch/route.js +1 -0
- package/.next/server/app/api/v1/web/fetch/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/web/fetch/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1beta/models/[...path]/route.js +1 -0
- package/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -0
- package/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1beta/models/route.js +1 -0
- package/.next/server/app/api/v1beta/models/route.js.nft.json +1 -0
- package/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/version/route.js +1 -0
- package/.next/server/app/api/version/route.js.nft.json +1 -0
- package/.next/server/app/api/version/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/version/shutdown/route.js +1 -0
- package/.next/server/app/api/version/shutdown/route.js.nft.json +1 -0
- package/.next/server/app/api/version/shutdown/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/version/update/route.js +1 -0
- package/.next/server/app/api/version/update/route.js.nft.json +1 -0
- package/.next/server/app/api/version/update/route_client-reference-manifest.js +1 -0
- package/.next/server/app/callback/page.js +1 -0
- package/.next/server/app/callback/page.js.nft.json +1 -0
- package/.next/server/app/callback/page_client-reference-manifest.js +1 -0
- package/.next/server/app/callback.html +1 -0
- package/.next/server/app/callback.meta +26 -0
- package/.next/server/app/callback.rsc +28 -0
- package/.next/server/app/callback.segments/_full.segment.rsc +28 -0
- package/.next/server/app/callback.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +31 -0
- package/.next/server/app/dashboard/basic-chat.html +1 -0
- package/.next/server/app/dashboard/basic-chat.meta +36 -0
- package/.next/server/app/dashboard/basic-chat.rsc +26 -0
- package/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +31 -0
- package/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +26 -0
- package/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/dashboard/cli-tools.html +1 -0
- package/.next/server/app/dashboard/cli-tools.meta +36 -0
- package/.next/server/app/dashboard/cli-tools.rsc +27 -0
- package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +31 -0
- package/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +27 -0
- package/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/dashboard/combos.html +1 -0
- package/.next/server/app/dashboard/combos.meta +36 -0
- package/.next/server/app/dashboard/combos.rsc +29 -0
- package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +34 -0
- package/.next/server/app/dashboard/combos.segments/_full.segment.rsc +29 -0
- package/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/dashboard/endpoint.html +1 -0
- package/.next/server/app/dashboard/endpoint.meta +36 -0
- package/.next/server/app/dashboard/endpoint.rsc +27 -0
- package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +31 -0
- package/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +27 -0
- package/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/dashboard/media-providers/systemone.html +1 -0
- package/.next/server/app/dashboard/media-providers/systemone.meta +41 -0
- package/.next/server/app/dashboard/media-providers/systemone.rsc +29 -0
- package/.next/server/app/dashboard/media-providers/systemone.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/systemone/__PAGE__.segment.rsc +35 -0
- package/.next/server/app/dashboard/media-providers/systemone.segments/_full.segment.rsc +29 -0
- package/.next/server/app/dashboard/media-providers/systemone.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/dashboard/profile.html +1 -0
- package/.next/server/app/dashboard/profile.meta +36 -0
- package/.next/server/app/dashboard/profile.rsc +29 -0
- package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +34 -0
- package/.next/server/app/dashboard/profile.segments/_full.segment.rsc +29 -0
- package/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/dashboard/providers/new.html +1 -0
- package/.next/server/app/dashboard/providers/new.meta +41 -0
- package/.next/server/app/dashboard/providers/new.rsc +29 -0
- package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +35 -0
- package/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +29 -0
- package/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/dashboard/providers.html +1 -0
- package/.next/server/app/dashboard/providers.meta +36 -0
- package/.next/server/app/dashboard/providers.rsc +29 -0
- package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +34 -0
- package/.next/server/app/dashboard/providers.segments/_full.segment.rsc +29 -0
- package/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/dashboard/proxy-pools.html +1 -0
- package/.next/server/app/dashboard/proxy-pools.meta +36 -0
- package/.next/server/app/dashboard/proxy-pools.rsc +29 -0
- package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +34 -0
- package/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +29 -0
- package/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/dashboard/pxpipe.html +1 -0
- package/.next/server/app/dashboard/pxpipe.meta +36 -0
- package/.next/server/app/dashboard/pxpipe.rsc +26 -0
- package/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +31 -0
- package/.next/server/app/dashboard/pxpipe.segments/_full.segment.rsc +26 -0
- package/.next/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/dashboard/quota.html +2 -0
- package/.next/server/app/dashboard/quota.meta +36 -0
- package/.next/server/app/dashboard/quota.rsc +27 -0
- package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +32 -0
- package/.next/server/app/dashboard/quota.segments/_full.segment.rsc +27 -0
- package/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/dashboard/settings/pricing/page.js +1 -0
- package/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -0
- package/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -0
- package/.next/server/app/dashboard/settings/pricing.html +1 -0
- package/.next/server/app/dashboard/settings/pricing.meta +36 -0
- package/.next/server/app/dashboard/settings/pricing.rsc +28 -0
- package/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +28 -0
- package/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +33 -0
- package/.next/server/app/dashboard/token-saver.html +1 -0
- package/.next/server/app/dashboard/token-saver.meta +36 -0
- package/.next/server/app/dashboard/token-saver.rsc +26 -0
- package/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +31 -0
- package/.next/server/app/dashboard/token-saver.segments/_full.segment.rsc +26 -0
- package/.next/server/app/dashboard/token-saver.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/dashboard/usage.html +2 -0
- package/.next/server/app/dashboard/usage.meta +36 -0
- package/.next/server/app/dashboard/usage.rsc +29 -0
- package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +34 -0
- package/.next/server/app/dashboard/usage.segments/_full.segment.rsc +29 -0
- package/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/dashboard.html +1 -0
- package/.next/server/app/dashboard.meta +31 -0
- package/.next/server/app/dashboard.rsc +27 -0
- package/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +30 -0
- package/.next/server/app/dashboard.segments/_full.segment.rsc +27 -0
- package/.next/server/app/dashboard.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/index.html +1 -0
- package/.next/server/app/index.meta +23 -0
- package/.next/server/app/index.rsc +23 -0
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +25 -0
- package/.next/server/app/index.segments/_full.segment.rsc +23 -0
- package/.next/server/app/index.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/landing/page.js +1 -0
- package/.next/server/app/landing/page.js.nft.json +1 -0
- package/.next/server/app/landing/page_client-reference-manifest.js +1 -0
- package/.next/server/app/landing.html +1 -0
- package/.next/server/app/landing.meta +26 -0
- package/.next/server/app/landing.rsc +28 -0
- package/.next/server/app/landing.segments/_full.segment.rsc +28 -0
- package/.next/server/app/landing.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +31 -0
- package/.next/server/app/login/page.js +1 -0
- package/.next/server/app/login/page.js.nft.json +1 -0
- package/.next/server/app/login/page_client-reference-manifest.js +1 -0
- package/.next/server/app/login.html +1 -0
- package/.next/server/app/login.meta +26 -0
- package/.next/server/app/login.rsc +28 -0
- package/.next/server/app/login.segments/_full.segment.rsc +28 -0
- package/.next/server/app/login.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +31 -0
- package/.next/server/app/manifest.webmanifest/route.js +17 -0
- package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -0
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -0
- package/.next/server/app/manifest.webmanifest.body +1 -0
- package/.next/server/app/manifest.webmanifest.meta +1 -0
- package/.next/server/app/page.js +1 -0
- package/.next/server/app/page.js.nft.json +1 -0
- package/.next/server/app/page_client-reference-manifest.js +1 -0
- package/.next/server/app-paths-manifest.json +169 -0
- package/.next/server/chunks/1003.js +1 -0
- package/.next/server/chunks/1011.js +1 -0
- package/.next/server/chunks/1126.js +1 -0
- package/.next/server/chunks/1157.js +1 -0
- package/.next/server/chunks/1194.js +1 -0
- package/.next/server/chunks/1238.js +1 -0
- package/.next/server/chunks/1273.js +1 -0
- package/.next/server/chunks/1316.js +165 -0
- package/.next/server/chunks/1336.js +1 -0
- package/.next/server/chunks/1412.js +1 -0
- package/.next/server/chunks/1470.js +1 -0
- package/.next/server/chunks/1564.js +1 -0
- package/.next/server/chunks/1612.js +33 -0
- package/.next/server/chunks/1633.js +1 -0
- package/.next/server/chunks/1985.js +1 -0
- package/.next/server/chunks/2076.js +1 -0
- package/.next/server/chunks/2143.js +1 -0
- package/.next/server/chunks/2151.js +1 -0
- package/.next/server/chunks/2225.js +9 -0
- package/.next/server/chunks/224.js +1 -0
- package/.next/server/chunks/2282.js +150 -0
- package/.next/server/chunks/2310.js +2 -0
- package/.next/server/chunks/2339.js +1 -0
- package/.next/server/chunks/2426.js +1 -0
- package/.next/server/chunks/257.js +67 -0
- package/.next/server/chunks/2638.js +1 -0
- package/.next/server/chunks/2706.js +1 -0
- package/.next/server/chunks/3023.js +9 -0
- package/.next/server/chunks/3034.js +9 -0
- package/.next/server/chunks/3179.js +1 -0
- package/.next/server/chunks/3250.js +9 -0
- package/.next/server/chunks/3336.js +1 -0
- package/.next/server/chunks/3425.js +1 -0
- package/.next/server/chunks/3481.js +9 -0
- package/.next/server/chunks/3512.js +29 -0
- package/.next/server/chunks/3533.js +1 -0
- package/.next/server/chunks/3544.js +1 -0
- package/.next/server/chunks/4129.js +1 -0
- package/.next/server/chunks/4139.js +9 -0
- package/.next/server/chunks/4301.js +7 -0
- package/.next/server/chunks/4364.js +1 -0
- package/.next/server/chunks/4464.js +1 -0
- package/.next/server/chunks/460.js +1 -0
- package/.next/server/chunks/4793.js +1 -0
- package/.next/server/chunks/4915.js +62 -0
- package/.next/server/chunks/4961.js +7 -0
- package/.next/server/chunks/537.js +9 -0
- package/.next/server/chunks/5412.js +9 -0
- package/.next/server/chunks/5496.js +1 -0
- package/.next/server/chunks/5761.js +1 -0
- package/.next/server/chunks/5939.js +9 -0
- package/.next/server/chunks/6009.js +1 -0
- package/.next/server/chunks/6056.js +1 -0
- package/.next/server/chunks/613.js +1 -0
- package/.next/server/chunks/6343.js +72 -0
- package/.next/server/chunks/6461.js +5 -0
- package/.next/server/chunks/6823.js +1 -0
- package/.next/server/chunks/7002.js +9 -0
- package/.next/server/chunks/7019.js +3 -0
- package/.next/server/chunks/7156.js +1 -0
- package/.next/server/chunks/7257.js +1 -0
- package/.next/server/chunks/7268.js +1 -0
- package/.next/server/chunks/7459.js +120 -0
- package/.next/server/chunks/7504.js +1 -0
- package/.next/server/chunks/7535.js +21 -0
- package/.next/server/chunks/7816.js +1 -0
- package/.next/server/chunks/7963.js +193 -0
- package/.next/server/chunks/8066.js +31 -0
- package/.next/server/chunks/8567.js +1 -0
- package/.next/server/chunks/8569.js +11 -0
- package/.next/server/chunks/8784.js +1 -0
- package/.next/server/chunks/881.js +10 -0
- package/.next/server/chunks/8857.js +1 -0
- package/.next/server/chunks/8923.js +1 -0
- package/.next/server/chunks/8940.js +1 -0
- package/.next/server/chunks/9018.js +1 -0
- package/.next/server/chunks/9250.js +7 -0
- package/.next/server/chunks/9287.js +1 -0
- package/.next/server/chunks/9429.js +2 -0
- package/.next/server/chunks/9603.js +1 -0
- package/.next/server/chunks/9614.js +1 -0
- package/.next/server/chunks/9646.js +1 -0
- package/.next/server/chunks/9792.js +9 -0
- package/.next/server/functions-config-manifest.json +25 -0
- package/.next/server/instrumentation.js +1 -0
- package/.next/server/instrumentation.js.nft.json +1 -0
- package/.next/server/interception-route-rewrite-manifest.js +1 -0
- package/.next/server/middleware-build-manifest.js +1 -0
- package/.next/server/middleware-manifest.json +6 -0
- package/.next/server/middleware-react-loadable-manifest.js +1 -0
- package/.next/server/middleware.js +171 -0
- package/.next/server/middleware.js.nft.json +1 -0
- package/.next/server/next-font-manifest.js +1 -0
- package/.next/server/next-font-manifest.json +1 -0
- package/.next/server/pages/404.html +1 -0
- package/.next/server/pages/500.html +1 -0
- package/.next/server/pages-manifest.json +4 -0
- package/.next/server/prefetch-hints.json +446 -0
- package/.next/server/server-reference-manifest.js +1 -0
- package/.next/server/server-reference-manifest.json +1 -0
- package/.next/server/webpack-runtime.js +1 -0
- package/.next/static/AiSMDHTT8m1mHG-uAmkFq/_buildManifest.js +1 -0
- package/.next/static/AiSMDHTT8m1mHG-uAmkFq/_ssgManifest.js +1 -0
- package/.next/static/chunks/1078-965aa38f6ae4f5b7.js +1 -0
- package/.next/static/chunks/1278-d7d5375869132de1.js +1 -0
- package/.next/static/chunks/1471-10f225f62f7469cc.js +1 -0
- package/.next/static/chunks/159-17737a7c99ff1a65.js +1 -0
- package/.next/static/chunks/1722-bb40b4311197204b.js +1 -0
- package/.next/static/chunks/1830-901fe48c3c62604f.js +1 -0
- package/.next/static/chunks/208-fcb6c54f9db5664f.js +1 -0
- package/.next/static/chunks/3153-fde052e626cc6d40.js +67 -0
- package/.next/static/chunks/3577-cd98d40e3099e1b0.js +1 -0
- package/.next/static/chunks/4484-893f9cfcbe1499df.js +1 -0
- package/.next/static/chunks/4489-0f3ff0134169e717.js +1 -0
- package/.next/static/chunks/4899.0d4260af2a463837.js +1 -0
- package/.next/static/chunks/5113-5c4f5181388aab72.js +1 -0
- package/.next/static/chunks/5166-cadbdbf7d6854cf9.js +1 -0
- package/.next/static/chunks/5778-9d97ce04f2ac118c.js +1 -0
- package/.next/static/chunks/5862-f98c2f3d480b80d2.js +1 -0
- package/.next/static/chunks/6817-449f7a2452845c74.js +1 -0
- package/.next/static/chunks/6920-e2b533c1eafa9521.js +1 -0
- package/.next/static/chunks/7276-16ef14f7b2cd478d.js +1 -0
- package/.next/static/chunks/7287-b8e377303d1c5ae8.js +11 -0
- package/.next/static/chunks/7552-11960bc118e4e0f7.js +1 -0
- package/.next/static/chunks/7822.01a4d5bdd39fa0b7.js +1 -0
- package/.next/static/chunks/7835-c1ef8f5cdaaad483.js +1 -0
- package/.next/static/chunks/80d4b624.42a8767f1c8767a3.js +1 -0
- package/.next/static/chunks/9369-b8c9520bc2536ff2.js +1 -0
- package/.next/static/chunks/9590-0d0b3dd0530b2b7b.js +1 -0
- package/.next/static/chunks/9966-7232c138a59bdc2f.js +52 -0
- package/.next/static/chunks/9980-971a38c4ad288d6c.js +1 -0
- package/.next/static/chunks/9ce8c186-3c7d7dbc5d428052.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/basic-chat/page-c074ab1b76a6c8ba.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-2ff675120416e925.js +40 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-654e770c4dca90e8.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/combos/page-55bc39e30923938a.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-aac9a9397d3f7f17.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-d60651b77028b014.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/[id]/page-3d78f5834ef97b82.js +10 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/page-e41bf53886195393.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/page-670583d9f9c104af.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/profile/page-53158d30b5643b05.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-fd2615fea8932fd5.js +21 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-7c9e30c4985582a6.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/providers/page-7cc2c66e63fce4ab.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/page-5e1fb41bd7b555a6.js +4 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/pxpipe/page-1ec35dafa18e5d24.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/quota/page-11d5ca23d18d596e.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/token-saver/page-388b616d8c2aa3fc.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/usage/page-466f7a8f7319ad85.js +1 -0
- package/.next/static/chunks/app/(dashboard)/layout-e1e5bead272b5c82.js +1 -0
- package/.next/static/chunks/app/_global-error/page-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/_not-found/page-d66f1e17185e98d1.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/auth/oidc/callback/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/auth/oidc/start/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/auth/oidc/test/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/auth/reset-password/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/auth/saml/acs/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/auth/saml/metadata/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/auth/saml/start/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/auth/saml/test/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/changelog/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/all-statuses/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/claude-settings/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/codex-settings/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/cowork-settings/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/dsh-settings/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/opencode-settings/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/combos/[id]/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/combos/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/headroom/extras/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/headroom/proxy/[...path]/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/headroom/restart/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/headroom/start/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/headroom/status/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/headroom/stop/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/health/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/init/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/keys/[id]/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/keys/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/locale/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/mcp/[plugin]/message/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/mcp/[plugin]/sse/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/media-providers/tts/voices/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/models/alias/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/models/availability/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/models/catalog-sync/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/models/custom/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/models/disabled/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/models/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/models/test/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/oauth/[provider]/[action]/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/oauth/codex/bulk-import/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/oauth/codex/import-token/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/oauth/cursor/auto-import/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/oauth/cursor/import/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/oauth/gitlab/pat/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/oauth/grok-cli/bulk-import/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/oauth/iflow/cookie/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/oauth/xiaomi-mimo/api-key/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/oauth/xiaomi-mimo/auto-import/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/pricing/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/provider-nodes/[id]/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/provider-nodes/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/provider-nodes/validate/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/providers/[id]/models/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/providers/[id]/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/providers/[id]/test/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/providers/[id]/test-models/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/providers/client/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/providers/kilo/free-models/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/providers/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/providers/suggested-models/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/providers/test-batch/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/providers/validate/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/proxy-pools/[id]/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/proxy-pools/[id]/test/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/proxy-pools/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/health/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/install/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/logs/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/restart/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/start/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/stats/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/status/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/stop/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/settings/database/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/settings/proxy-test/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/settings/require-login/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/settings/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/shutdown/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/tags/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/translator/console-logs/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/translator/console-logs/stream/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/translator/load/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/translator/save/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/translator/send/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/translator/translate/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/tunnel/disable/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/tunnel/enable/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/tunnel/status/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/tunnel/tailscale-check/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/tunnel/tailscale-disable/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/tunnel/tailscale-enable/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/tunnel/tailscale-install/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/usage/[connectionId]/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/usage/chart/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/usage/history/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/usage/logs/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/usage/providers/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/usage/request-details/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/usage/request-logs/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/usage/stats/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/usage/stream/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/api/chat/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/audio/speech/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/audio/transcriptions/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/audio/voices/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/chat/completions/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/embeddings/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/images/generations/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/messages/count_tokens/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/messages/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/models/[...model]/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/models/info/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/models/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/responses/compact/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/responses/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/search/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/systemone/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/videos/[id]/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/videos/edits/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/videos/extensions/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/videos/generations/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1/web/fetch/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1beta/models/[...path]/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/v1beta/models/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/version/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/version/shutdown/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/api/version/update/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/callback/page-f4019bfc06b9a21c.js +1 -0
- package/.next/static/chunks/app/dashboard/settings/pricing/page-b9ee16bd322c018e.js +1 -0
- package/.next/static/chunks/app/landing/page-a088604744d51552.js +1 -0
- package/.next/static/chunks/app/layout-56cb8d3773a70c00.js +1 -0
- package/.next/static/chunks/app/login/page-dd11fb741ed7fda4.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/app/page-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/e138dfde-a5c7fa92857215f2.js +1 -0
- package/.next/static/chunks/framework-c33600f6d7c90335.js +1 -0
- package/.next/static/chunks/main-536afed42e49674c.js +5 -0
- package/.next/static/chunks/main-app-17abdf14ff64ab69.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/global-error-21486667022bd4cf.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-fe947d4ab19df968.js +1 -0
- package/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- package/.next/static/chunks/webpack-452a2f4aec1a53ee.js +1 -0
- package/.next/static/css/8fbebca0759ae504.css +1 -0
- package/.next/static/css/e07f2bf4fa519943.css +31 -0
- package/.next/static/css/e9178fa7e53ec623.css +1 -0
- package/.next/static/media/17cf9497af825577-s.woff2 +0 -0
- package/.next/static/media/19cfc7226ec3afaa-s.woff2 +0 -0
- package/.next/static/media/1abbc144918f74fd-s.p.woff2 +0 -0
- package/.next/static/media/21350d82a1f187e9-s.woff2 +0 -0
- package/.next/static/media/8c96cc4bd2a39381-s.p.woff2 +0 -0
- package/.next/static/media/8e9860b6e62d6359-s.woff2 +0 -0
- package/.next/static/media/ba9851c3c22cd980-s.woff2 +0 -0
- package/.next/static/media/c5fe6dc8356a8c31-s.woff2 +0 -0
- package/.next/static/media/df0a9ae256c0569c-s.woff2 +0 -0
- package/.next/static/media/e4af272ccee01ff0-s.p.woff2 +0 -0
- package/LICENSE.md +21 -0
- package/README.md +67 -0
- package/bin/10router.mjs +301 -0
- package/custom-server.js +147 -0
- package/next.config.mjs +110 -0
- package/open-sse/AGENTS.md +39 -0
- package/open-sse/config/appConstants.js +221 -0
- package/open-sse/config/codexInstructions.js +119 -0
- package/open-sse/config/defaultThinkingSignature.js +14 -0
- package/open-sse/config/errorConfig.js +94 -0
- package/open-sse/config/googleTtsLanguages.js +62 -0
- package/open-sse/config/grokCli.js +10 -0
- package/open-sse/config/mediaConfig.js +27 -0
- package/open-sse/config/models.js +13 -0
- package/open-sse/config/ollamaModels.js +28 -0
- package/open-sse/config/providerModels.js +138 -0
- package/open-sse/config/providers.js +21 -0
- package/open-sse/config/runtimeConfig.js +101 -0
- package/open-sse/config/ttsModels.js +199 -0
- package/open-sse/executors/antigravity.js +706 -0
- package/open-sse/executors/base.js +231 -0
- package/open-sse/executors/codex.js +606 -0
- package/open-sse/executors/cursor.js +1251 -0
- package/open-sse/executors/default.js +352 -0
- package/open-sse/executors/index.js +50 -0
- package/open-sse/executors/opencode-go.js +216 -0
- package/open-sse/executors/opencode-zen.js +343 -0
- package/open-sse/executors/opencode.js +618 -0
- package/open-sse/executors/qoder.js +860 -0
- package/open-sse/executors/xiaomi-mimo.js +107 -0
- package/open-sse/executors/xiaomi-tokenplan.js +20 -0
- package/open-sse/executors/zed.js +330 -0
- package/open-sse/handlers/chatCore/nonStreamingHandler.js +490 -0
- package/open-sse/handlers/chatCore/requestDetail.js +169 -0
- package/open-sse/handlers/chatCore/sseToJsonHandler.js +503 -0
- package/open-sse/handlers/chatCore/streamingHandler.js +310 -0
- package/open-sse/handlers/chatCore.js +740 -0
- package/open-sse/handlers/embeddingProviders/_base.js +4 -0
- package/open-sse/handlers/embeddingProviders/gemini.js +55 -0
- package/open-sse/handlers/embeddingProviders/index.js +41 -0
- package/open-sse/handlers/embeddingProviders/openai.js +31 -0
- package/open-sse/handlers/embeddingProviders/openaiCompatNode.js +13 -0
- package/open-sse/handlers/embeddingProviders/selfhostedEmbedding.js +49 -0
- package/open-sse/handlers/embeddingsCore.js +144 -0
- package/open-sse/handlers/fetch/index.js +415 -0
- package/open-sse/handlers/imageGenerationCore.js +261 -0
- package/open-sse/handlers/imageProviders/_base.js +31 -0
- package/open-sse/handlers/imageProviders/antigravity.js +88 -0
- package/open-sse/handlers/imageProviders/blackForestLabs.js +47 -0
- package/open-sse/handlers/imageProviders/codex.js +235 -0
- package/open-sse/handlers/imageProviders/comfyui.js +12 -0
- package/open-sse/handlers/imageProviders/falAi.js +44 -0
- package/open-sse/handlers/imageProviders/gemini.js +28 -0
- package/open-sse/handlers/imageProviders/huggingface.js +23 -0
- package/open-sse/handlers/imageProviders/index.js +41 -0
- package/open-sse/handlers/imageProviders/nanobanana.js +61 -0
- package/open-sse/handlers/imageProviders/openai.js +33 -0
- package/open-sse/handlers/imageProviders/runwayml.js +60 -0
- package/open-sse/handlers/imageProviders/sdwebui.js +22 -0
- package/open-sse/handlers/imageProviders/stabilityAi.js +35 -0
- package/open-sse/handlers/responsesHandler.js +107 -0
- package/open-sse/handlers/search/callers.js +469 -0
- package/open-sse/handlers/search/chatSearch.js +502 -0
- package/open-sse/handlers/search/index.js +246 -0
- package/open-sse/handlers/search/normalizers.js +414 -0
- package/open-sse/handlers/sttCore.js +262 -0
- package/open-sse/handlers/systemoneCore.js +89 -0
- package/open-sse/handlers/ttsCore.js +88 -0
- package/open-sse/handlers/ttsProviders/_base.js +51 -0
- package/open-sse/handlers/ttsProviders/edgeTts.js +89 -0
- package/open-sse/handlers/ttsProviders/elevenlabs.js +48 -0
- package/open-sse/handlers/ttsProviders/gemini.js +136 -0
- package/open-sse/handlers/ttsProviders/genericFormats.js +191 -0
- package/open-sse/handlers/ttsProviders/googleTts.js +64 -0
- package/open-sse/handlers/ttsProviders/index.js +56 -0
- package/open-sse/handlers/ttsProviders/localDevice.js +98 -0
- package/open-sse/handlers/ttsProviders/minimax.js +63 -0
- package/open-sse/handlers/ttsProviders/openai.js +36 -0
- package/open-sse/handlers/ttsProviders/openrouter.js +73 -0
- package/open-sse/handlers/ttsProviders/selfhostedTts.js +70 -0
- package/open-sse/handlers/ttsProviders/xiaomi-mimo.js +71 -0
- package/open-sse/handlers/videoCore.js +242 -0
- package/open-sse/handlers/videoProviders/index.js +12 -0
- package/open-sse/handlers/videoProviders/openrouter.js +43 -0
- package/open-sse/index.js +84 -0
- package/open-sse/providers/REGISTRY_TEMPLATE.js +98 -0
- package/open-sse/providers/capabilities.js +1543 -0
- package/open-sse/providers/catalogOverride.js +82 -0
- package/open-sse/providers/index.js +63 -0
- package/open-sse/providers/models/helpers.js +27 -0
- package/open-sse/providers/models/namePatterns.js +33 -0
- package/open-sse/providers/models/schema.js +48 -0
- package/open-sse/providers/pricing.js +1204 -0
- package/open-sse/providers/registry/antigravity.js +147 -0
- package/open-sse/providers/registry/claude.js +81 -0
- package/open-sse/providers/registry/codex.js +210 -0
- package/open-sse/providers/registry/cursor.js +58 -0
- package/open-sse/providers/registry/deepseek.js +74 -0
- package/open-sse/providers/registry/fish-audio.js +31 -0
- package/open-sse/providers/registry/gemini.js +126 -0
- package/open-sse/providers/registry/glm-cn.js +39 -0
- package/open-sse/providers/registry/glm.js +75 -0
- package/open-sse/providers/registry/groq.js +62 -0
- package/open-sse/providers/registry/huggingface.js +40 -0
- package/open-sse/providers/registry/iflow.js +52 -0
- package/open-sse/providers/registry/index.js +59 -0
- package/open-sse/providers/registry/mimo-free.js +25 -0
- package/open-sse/providers/registry/minimax-cn.js +82 -0
- package/open-sse/providers/registry/minimax.js +94 -0
- package/open-sse/providers/registry/openai.js +122 -0
- package/open-sse/providers/registry/opencode-go.js +115 -0
- package/open-sse/providers/registry/opencode-zen.js +297 -0
- package/open-sse/providers/registry/opencode.js +54 -0
- package/open-sse/providers/registry/openrouter.js +128 -0
- package/open-sse/providers/registry/qoder.js +61 -0
- package/open-sse/providers/registry/siliconflow.js +39 -0
- package/open-sse/providers/registry/vercel-ai-gateway.js +42 -0
- package/open-sse/providers/registry/xai.js +59 -0
- package/open-sse/providers/registry/xiaomi-mimo.js +90 -0
- package/open-sse/providers/registry/xiaomi-tokenplan.js +66 -0
- package/open-sse/providers/registry/xquik.js +31 -0
- package/open-sse/providers/registry/zed.js +70 -0
- package/open-sse/providers/schema.js +76 -0
- package/open-sse/providers/shared.js +114 -0
- package/open-sse/providers/thinkingLevels.js +74 -0
- package/open-sse/providers/visionPatterns.js +58 -0
- package/open-sse/rtk/applyFilter.js +17 -0
- package/open-sse/rtk/autodetect.js +124 -0
- package/open-sse/rtk/caveman.js +9 -0
- package/open-sse/rtk/cavemanPrompts.js +118 -0
- package/open-sse/rtk/constants.js +78 -0
- package/open-sse/rtk/filters/buildOutput.js +133 -0
- package/open-sse/rtk/filters/dedupLog.js +44 -0
- package/open-sse/rtk/filters/find.js +50 -0
- package/open-sse/rtk/filters/gitDiff.js +92 -0
- package/open-sse/rtk/filters/gitLog.js +102 -0
- package/open-sse/rtk/filters/gitStatus.js +129 -0
- package/open-sse/rtk/filters/grep.js +48 -0
- package/open-sse/rtk/filters/ls.js +83 -0
- package/open-sse/rtk/filters/readNumbered.js +27 -0
- package/open-sse/rtk/filters/searchList.js +52 -0
- package/open-sse/rtk/filters/smartTruncate.js +19 -0
- package/open-sse/rtk/filters/tree.js +32 -0
- package/open-sse/rtk/headroom.js +296 -0
- package/open-sse/rtk/index.js +122 -0
- package/open-sse/rtk/ponytail.js +9 -0
- package/open-sse/rtk/ponytailPrompt.js +58 -0
- package/open-sse/rtk/pxpipe.js +113 -0
- package/open-sse/rtk/registry.js +40 -0
- package/open-sse/rtk/systemInject.js +301 -0
- package/open-sse/services/accountFallback.js +244 -0
- package/open-sse/services/capacityAdapter.js +182 -0
- package/open-sse/services/combo.js +715 -0
- package/open-sse/services/compact.js +70 -0
- package/open-sse/services/copilotModels.js +163 -0
- package/open-sse/services/cursorModels.js +209 -0
- package/open-sse/services/grokCliModels.js +128 -0
- package/open-sse/services/kimchiModels.js +191 -0
- package/open-sse/services/model.js +141 -0
- package/open-sse/services/oauthCredentialManager.js +165 -0
- package/open-sse/services/projectId.js +343 -0
- package/open-sse/services/provider.js +181 -0
- package/open-sse/services/qoderModels.js +410 -0
- package/open-sse/services/thoughtSignatureStore.js +210 -0
- package/open-sse/services/tokenRefresh/dedup.js +31 -0
- package/open-sse/services/tokenRefresh/providers.js +564 -0
- package/open-sse/services/tokenRefresh.js +201 -0
- package/open-sse/services/usage/antigravity-weekly.js +155 -0
- package/open-sse/services/usage/claude.js +211 -0
- package/open-sse/services/usage/codebuddy-cn.js +172 -0
- package/open-sse/services/usage/codex.js +283 -0
- package/open-sse/services/usage/commandcode.js +153 -0
- package/open-sse/services/usage/deepseek.js +103 -0
- package/open-sse/services/usage/github.js +107 -0
- package/open-sse/services/usage/glm.js +88 -0
- package/open-sse/services/usage/google.js +223 -0
- package/open-sse/services/usage/grok-cli.js +414 -0
- package/open-sse/services/usage/grokCliQuotaFrame.js +194 -0
- package/open-sse/services/usage/groq.js +133 -0
- package/open-sse/services/usage/minimax.js +297 -0
- package/open-sse/services/usage/misc.js +275 -0
- package/open-sse/services/usage/opencode-go.js +106 -0
- package/open-sse/services/usage/shared.js +70 -0
- package/open-sse/services/usage/xiaomi-mimo.js +129 -0
- package/open-sse/services/usage/zed.js +220 -0
- package/open-sse/services/usage.js +88 -0
- package/open-sse/shared/machineId.js +23 -0
- package/open-sse/shared/mimoAccount.js +306 -0
- package/open-sse/shared/qoder/attachments.js +436 -0
- package/open-sse/shared/qoder/constants.js +182 -0
- package/open-sse/shared/qoder/contextTier.js +180 -0
- package/open-sse/shared/qoder/cosy.js +175 -0
- package/open-sse/shared/qoder/encoding.js +55 -0
- package/open-sse/shared/qoder/sse.js +209 -0
- package/open-sse/shared/zedAuth.js +431 -0
- package/open-sse/transformer/responsesTransformer.js +438 -0
- package/open-sse/transformer/streamToJsonConverter.js +113 -0
- package/open-sse/translator/concerns/chunk.js +11 -0
- package/open-sse/translator/concerns/finishReason.js +87 -0
- package/open-sse/translator/concerns/image.js +158 -0
- package/open-sse/translator/concerns/json.js +9 -0
- package/open-sse/translator/concerns/message.js +8 -0
- package/open-sse/translator/concerns/modality.js +182 -0
- package/open-sse/translator/concerns/paramSupport.js +80 -0
- package/open-sse/translator/concerns/prefetch.js +111 -0
- package/open-sse/translator/concerns/reasoning.js +23 -0
- package/open-sse/translator/concerns/thinking.js +53 -0
- package/open-sse/translator/concerns/thinkingUnified.js +438 -0
- package/open-sse/translator/concerns/toolCall.js +185 -0
- package/open-sse/translator/concerns/usage.js +98 -0
- package/open-sse/translator/formats/claude.js +705 -0
- package/open-sse/translator/formats/gemini.js +498 -0
- package/open-sse/translator/formats/maxTokens.js +33 -0
- package/open-sse/translator/formats/openai.js +150 -0
- package/open-sse/translator/formats/responsesApi.js +210 -0
- package/open-sse/translator/formats.js +32 -0
- package/open-sse/translator/index.js +297 -0
- package/open-sse/translator/request/antigravity-to-openai.js +250 -0
- package/open-sse/translator/request/claude-to-openai.js +297 -0
- package/open-sse/translator/request/gemini-to-openai.js +152 -0
- package/open-sse/translator/request/openai-responses.js +502 -0
- package/open-sse/translator/request/openai-to-claude.js +413 -0
- package/open-sse/translator/request/openai-to-cursor.js +185 -0
- package/open-sse/translator/request/openai-to-gemini.js +477 -0
- package/open-sse/translator/response/claude-to-openai.js +227 -0
- package/open-sse/translator/response/cursor-to-openai.js +30 -0
- package/open-sse/translator/response/gemini-to-openai.js +172 -0
- package/open-sse/translator/response/openai-responses.js +652 -0
- package/open-sse/translator/response/openai-to-antigravity.js +127 -0
- package/open-sse/translator/response/openai-to-claude.js +276 -0
- package/open-sse/translator/schema/blocks.js +57 -0
- package/open-sse/translator/schema/defaults.js +7 -0
- package/open-sse/translator/schema/finishReasons.js +28 -0
- package/open-sse/translator/schema/index.js +11 -0
- package/open-sse/translator/schema/roles.js +16 -0
- package/open-sse/utils/bypassHandler.js +327 -0
- package/open-sse/utils/claudeCloaking.js +274 -0
- package/open-sse/utils/claudeSignature.js +41 -0
- package/open-sse/utils/claudeToolTypeSelfCheck.mjs +121 -0
- package/open-sse/utils/clientDetector.js +70 -0
- package/open-sse/utils/codexToolSchema.js +80 -0
- package/open-sse/utils/cursorChecksum.js +151 -0
- package/open-sse/utils/cursorProtobuf.js +999 -0
- package/open-sse/utils/debugLog.js +19 -0
- package/open-sse/utils/error.js +159 -0
- package/open-sse/utils/modelMarkers.js +23 -0
- package/open-sse/utils/ollamaTransform.js +102 -0
- package/open-sse/utils/opencodeFreeUsage.js +115 -0
- package/open-sse/utils/proxyFetch.js +258 -0
- package/open-sse/utils/reasoningContentInjector.js +77 -0
- package/open-sse/utils/requestLogger.js +271 -0
- package/open-sse/utils/responsesStreamHelpers.js +53 -0
- package/open-sse/utils/sessionManager.js +286 -0
- package/open-sse/utils/sse.js +14 -0
- package/open-sse/utils/sseConstants.js +23 -0
- package/open-sse/utils/stream.js +612 -0
- package/open-sse/utils/streamHandler.js +329 -0
- package/open-sse/utils/streamHelpers.js +155 -0
- package/open-sse/utils/toolDeduper.js +49 -0
- package/open-sse/utils/usageTracking.js +473 -0
- package/package.json +118 -0
- package/public/favicon.svg +72 -0
- package/public/i18n/literals/fa.json +1380 -0
- package/public/icons/icon-192.svg +22 -0
- package/public/icons/icon-512.svg +22 -0
- package/public/icons/icon.svg +72 -0
- package/public/providers/agentrouter.png +0 -0
- package/public/providers/alicode-intl.png +0 -0
- package/public/providers/alicode.png +0 -0
- package/public/providers/alims-intl.png +0 -0
- package/public/providers/alitp-intl.png +0 -0
- package/public/providers/amp.png +0 -0
- package/public/providers/anthropic.png +0 -0
- package/public/providers/api-airforce.png +0 -0
- package/public/providers/assemblyai.png +0 -0
- package/public/providers/aws-polly.png +0 -0
- package/public/providers/azure.png +0 -0
- package/public/providers/baidu.png +0 -0
- package/public/providers/bazaarlink.png +0 -0
- package/public/providers/black-forest-labs.png +0 -0
- package/public/providers/blackbox.png +0 -0
- package/public/providers/bluesminds.png +0 -0
- package/public/providers/brave-search.png +0 -0
- package/public/providers/byteplus.png +0 -0
- package/public/providers/cartesia.png +0 -0
- package/public/providers/cerebras.png +0 -0
- package/public/providers/chutes.png +0 -0
- package/public/providers/claude.png +0 -0
- package/public/providers/clinepass.png +0 -0
- package/public/providers/codebuddy-cn.png +0 -0
- package/public/providers/codebuddy-intl.png +0 -0
- package/public/providers/codex.png +0 -0
- package/public/providers/cohere.png +0 -0
- package/public/providers/comfyui.png +0 -0
- package/public/providers/commandcode.png +0 -0
- package/public/providers/continue.png +0 -0
- package/public/providers/coqui.png +0 -0
- package/public/providers/cursor.png +0 -0
- package/public/providers/deepgram.png +0 -0
- package/public/providers/deepseek-tui.png +0 -0
- package/public/providers/deepseek.png +0 -0
- package/public/providers/devin-cli.png +0 -0
- package/public/providers/droid.png +0 -0
- package/public/providers/edge-tts.png +0 -0
- package/public/providers/elevenlabs.png +0 -0
- package/public/providers/exa.png +0 -0
- package/public/providers/fal-ai.png +0 -0
- package/public/providers/featherless.png +0 -0
- package/public/providers/firecrawl.png +0 -0
- package/public/providers/fireworks.png +0 -0
- package/public/providers/fish-audio.png +0 -0
- package/public/providers/gemini.png +0 -0
- package/public/providers/github.png +0 -0
- package/public/providers/gitlab.png +0 -0
- package/public/providers/glm-cn.png +0 -0
- package/public/providers/glm.png +0 -0
- package/public/providers/google-pse.png +0 -0
- package/public/providers/google-tts.png +0 -0
- package/public/providers/grok-cli.png +0 -0
- package/public/providers/grok-web.png +0 -0
- package/public/providers/groq.png +0 -0
- package/public/providers/hermes.png +0 -0
- package/public/providers/huggingface.png +0 -0
- package/public/providers/hyperbolic.png +0 -0
- package/public/providers/iflow.png +0 -0
- package/public/providers/inworld.png +0 -0
- package/public/providers/jcode.png +0 -0
- package/public/providers/jina-ai.png +0 -0
- package/public/providers/jina-reader.png +0 -0
- package/public/providers/kilo-gateway.png +0 -0
- package/public/providers/kilocode.png +0 -0
- package/public/providers/kimchi.png +0 -0
- package/public/providers/kimchi.svg +4 -0
- package/public/providers/linkup.png +0 -0
- package/public/providers/llm7.png +0 -0
- package/public/providers/local-device.png +0 -0
- package/public/providers/longcat.png +0 -0
- package/public/providers/mimo-free.png +0 -0
- package/public/providers/minimax-cn.png +0 -0
- package/public/providers/minimax.png +0 -0
- package/public/providers/mistral.png +0 -0
- package/public/providers/mmf.png +0 -0
- package/public/providers/morph.png +0 -0
- package/public/providers/nanobanana.png +0 -0
- package/public/providers/nebius.png +0 -0
- package/public/providers/novita.png +0 -0
- package/public/providers/nvidia.png +0 -0
- package/public/providers/ollama-local.png +0 -0
- package/public/providers/ollama.png +0 -0
- package/public/providers/openai.png +0 -0
- package/public/providers/openclaw.png +0 -0
- package/public/providers/opencode-go.png +0 -0
- package/public/providers/opencode.png +0 -0
- package/public/providers/opendesign.png +0 -0
- package/public/providers/openrouter.png +0 -0
- package/public/providers/perplexity-agent.png +0 -0
- package/public/providers/perplexity-web.png +0 -0
- package/public/providers/perplexity.png +0 -0
- package/public/providers/playht.png +0 -0
- package/public/providers/poolside.png +0 -0
- package/public/providers/qoder.png +0 -0
- package/public/providers/qwen.png +0 -0
- package/public/providers/recraft.png +0 -0
- package/public/providers/reka.png +0 -0
- package/public/providers/roo.png +0 -0
- package/public/providers/runwayml.png +0 -0
- package/public/providers/sambanova.png +0 -0
- package/public/providers/sdwebui.png +0 -0
- package/public/providers/searchapi.png +0 -0
- package/public/providers/searxng.png +0 -0
- package/public/providers/selfhosted-embedding.png +0 -0
- package/public/providers/selfhosted-stt.png +0 -0
- package/public/providers/selfhosted-tts.png +0 -0
- package/public/providers/serper.png +0 -0
- package/public/providers/siliconflow.png +0 -0
- package/public/providers/stability-ai.png +0 -0
- package/public/providers/tavily.png +0 -0
- package/public/providers/tencent.png +0 -0
- package/public/providers/together.png +0 -0
- package/public/providers/tokenrouter.png +0 -0
- package/public/providers/topaz.png +0 -0
- package/public/providers/tortoise.png +0 -0
- package/public/providers/trae.png +0 -0
- package/public/providers/venice.png +0 -0
- package/public/providers/vercel-ai-gateway.png +0 -0
- package/public/providers/vercel.png +0 -0
- package/public/providers/volcengine-ark.png +0 -0
- package/public/providers/voyage-ai.png +0 -0
- package/public/providers/windsurf.png +0 -0
- package/public/providers/workbuddy.png +0 -0
- package/public/providers/xai.png +0 -0
- package/public/providers/xiaomi-mimo.png +0 -0
- package/public/providers/xiaomi-tokenplan.png +0 -0
- package/public/providers/xquik.png +0 -0
- package/public/providers/youcom.png +0 -0
- package/public/providers/zed.png +0 -0
- package/public/sw.js +22 -0
- package/scripts/dev-local.mjs +67 -0
- package/src/app/(dashboard)/dashboard/basic-chat/BasicChatPageClient.tsx +1140 -0
- package/src/app/(dashboard)/dashboard/basic-chat/page.tsx +5 -0
- package/src/app/(dashboard)/dashboard/cli-tools/CLIToolsPageClient.tsx +69 -0
- package/src/app/(dashboard)/dashboard/cli-tools/[toolId]/ToolDetailClient.tsx +279 -0
- package/src/app/(dashboard)/dashboard/cli-tools/[toolId]/page.tsx +11 -0
- package/src/app/(dashboard)/dashboard/cli-tools/components/cards/ClaudeToolCard.tsx +705 -0
- package/src/app/(dashboard)/dashboard/cli-tools/components/cards/CodexToolCard.tsx +596 -0
- package/src/app/(dashboard)/dashboard/cli-tools/components/cards/CoworkToolCard.tsx +835 -0
- package/src/app/(dashboard)/dashboard/cli-tools/components/cards/DefaultToolCard.tsx +318 -0
- package/src/app/(dashboard)/dashboard/cli-tools/components/cards/DshToolCard.tsx +537 -0
- package/src/app/(dashboard)/dashboard/cli-tools/components/cards/OpenCodeToolCard.tsx +661 -0
- package/src/app/(dashboard)/dashboard/cli-tools/components/cards/ToolSummaryCard.tsx +49 -0
- package/src/app/(dashboard)/dashboard/cli-tools/components/cards/index.ts +7 -0
- package/src/app/(dashboard)/dashboard/cli-tools/components/index.ts +11 -0
- package/src/app/(dashboard)/dashboard/cli-tools/components/shared/ApiKeySelect.tsx +155 -0
- package/src/app/(dashboard)/dashboard/cli-tools/components/shared/BaseUrlSelect.tsx +241 -0
- package/src/app/(dashboard)/dashboard/cli-tools/components/shared/cliEndpointMatch.ts +13 -0
- package/src/app/(dashboard)/dashboard/cli-tools/components/shared/cliEndpointPresets.ts +106 -0
- package/src/app/(dashboard)/dashboard/cli-tools/components/shared/index.ts +4 -0
- package/src/app/(dashboard)/dashboard/cli-tools/page.tsx +7 -0
- package/src/app/(dashboard)/dashboard/combos/page.tsx +901 -0
- package/src/app/(dashboard)/dashboard/console-log/ConsoleLogClient.tsx +414 -0
- package/src/app/(dashboard)/dashboard/console-log/page.tsx +8 -0
- package/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx +434 -0
- package/src/app/(dashboard)/dashboard/endpoint/components/EndpointRow.tsx +35 -0
- package/src/app/(dashboard)/dashboard/endpoint/components/SecurityWarning.tsx +30 -0
- package/src/app/(dashboard)/dashboard/endpoint/components/StatusAlert.tsx +33 -0
- package/src/app/(dashboard)/dashboard/endpoint/endpointConstants.ts +37 -0
- package/src/app/(dashboard)/dashboard/endpoint/endpointPing.ts +33 -0
- package/src/app/(dashboard)/dashboard/endpoint/page.tsx +7 -0
- package/src/app/(dashboard)/dashboard/media-providers/systemone/[id]/page.tsx +350 -0
- package/src/app/(dashboard)/dashboard/media-providers/systemone/page.tsx +124 -0
- package/src/app/(dashboard)/dashboard/page.tsx +7 -0
- package/src/app/(dashboard)/dashboard/profile/page.tsx +905 -0
- package/src/app/(dashboard)/dashboard/providers/[id]/AddApiKeyModal.tsx +380 -0
- package/src/app/(dashboard)/dashboard/providers/[id]/AddCustomModelModal.tsx +171 -0
- package/src/app/(dashboard)/dashboard/providers/[id]/BulkImportCodexModal.tsx +147 -0
- package/src/app/(dashboard)/dashboard/providers/[id]/BulkImportGrokCliModal.tsx +289 -0
- package/src/app/(dashboard)/dashboard/providers/[id]/CompatibleModelsSection.tsx +259 -0
- package/src/app/(dashboard)/dashboard/providers/[id]/ConnectionRow.tsx +362 -0
- package/src/app/(dashboard)/dashboard/providers/[id]/CooldownTimer.tsx +32 -0
- package/src/app/(dashboard)/dashboard/providers/[id]/EditCompatibleNodeModal.tsx +163 -0
- package/src/app/(dashboard)/dashboard/providers/[id]/ModelRow.tsx +116 -0
- package/src/app/(dashboard)/dashboard/providers/[id]/PassthroughModelsSection.tsx +183 -0
- package/src/app/(dashboard)/dashboard/providers/[id]/page.tsx +1918 -0
- package/src/app/(dashboard)/dashboard/providers/[id]/useOneByOneTest.ts +102 -0
- package/src/app/(dashboard)/dashboard/providers/components/AddCompatibleModal.tsx +185 -0
- package/src/app/(dashboard)/dashboard/providers/components/ConnectionsCard.tsx +476 -0
- package/src/app/(dashboard)/dashboard/providers/components/ModelAvailabilityBadge.tsx +192 -0
- package/src/app/(dashboard)/dashboard/providers/components/ModelsCard.tsx +344 -0
- package/src/app/(dashboard)/dashboard/providers/new/page.tsx +275 -0
- package/src/app/(dashboard)/dashboard/providers/page.tsx +614 -0
- package/src/app/(dashboard)/dashboard/providers/utils.ts +19 -0
- package/src/app/(dashboard)/dashboard/proxy-pools/page.tsx +1305 -0
- package/src/app/(dashboard)/dashboard/pxpipe/PxpipeClient.tsx +404 -0
- package/src/app/(dashboard)/dashboard/pxpipe/page.tsx +5 -0
- package/src/app/(dashboard)/dashboard/quota/page.tsx +11 -0
- package/src/app/(dashboard)/dashboard/token-saver/TokenSaverClient.tsx +1096 -0
- package/src/app/(dashboard)/dashboard/token-saver/page.tsx +5 -0
- package/src/app/(dashboard)/dashboard/usage/components/OverviewCards.tsx +53 -0
- package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/ProviderLimitCard.tsx +175 -0
- package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaProgressBar.tsx +131 -0
- package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaTable.tsx +314 -0
- package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/index.tsx +1507 -0
- package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.ts +698 -0
- package/src/app/(dashboard)/dashboard/usage/components/ProviderTopology.tsx +550 -0
- package/src/app/(dashboard)/dashboard/usage/components/UsageChart.tsx +152 -0
- package/src/app/(dashboard)/dashboard/usage/components/UsageTable.tsx +249 -0
- package/src/app/(dashboard)/dashboard/usage/page.tsx +70 -0
- package/src/app/(dashboard)/layout.tsx +5 -0
- package/src/app/api/auth/login/route.js +146 -0
- package/src/app/api/auth/logout/route.js +12 -0
- package/src/app/api/auth/oidc/callback/route.js +100 -0
- package/src/app/api/auth/oidc/start/route.js +59 -0
- package/src/app/api/auth/oidc/test/route.js +86 -0
- package/src/app/api/auth/reset-password/route.js +13 -0
- package/src/app/api/auth/saml/acs/route.js +74 -0
- package/src/app/api/auth/saml/metadata/route.js +28 -0
- package/src/app/api/auth/saml/start/route.js +32 -0
- package/src/app/api/auth/saml/test/route.js +84 -0
- package/src/app/api/auth/status/route.js +72 -0
- package/src/app/api/changelog/route.js +28 -0
- package/src/app/api/cli-tools/all-statuses/route.js +32 -0
- package/src/app/api/cli-tools/claude-settings/route.js +266 -0
- package/src/app/api/cli-tools/codex-settings/profiles.js +109 -0
- package/src/app/api/cli-tools/codex-settings/route.js +411 -0
- package/src/app/api/cli-tools/cowork-mcp-registry/route.js +77 -0
- package/src/app/api/cli-tools/cowork-mcp-tools/route.js +116 -0
- package/src/app/api/cli-tools/cowork-settings/route.js +487 -0
- package/src/app/api/cli-tools/dsh-settings/route.ts +254 -0
- package/src/app/api/cli-tools/opencode-settings/route.js +334 -0
- package/src/app/api/combos/[id]/route.js +84 -0
- package/src/app/api/combos/route.js +51 -0
- package/src/app/api/headroom/extras/route.js +54 -0
- package/src/app/api/headroom/proxy/[...path]/route.js +104 -0
- package/src/app/api/headroom/restart/route.js +43 -0
- package/src/app/api/headroom/start/route.js +43 -0
- package/src/app/api/headroom/status/route.js +18 -0
- package/src/app/api/headroom/stop/route.js +14 -0
- package/src/app/api/health/route.js +15 -0
- package/src/app/api/init/route.js +4 -0
- package/src/app/api/keys/[id]/route.js +58 -0
- package/src/app/api/keys/route.js +45 -0
- package/src/app/api/locale/route.js +24 -0
- package/src/app/api/mcp/[plugin]/message/route.js +19 -0
- package/src/app/api/mcp/[plugin]/sse/route.js +35 -0
- package/src/app/api/media-providers/tts/deepgram/voices/route.js +76 -0
- package/src/app/api/media-providers/tts/elevenlabs/voices/route.js +77 -0
- package/src/app/api/media-providers/tts/inworld/voices/route.js +71 -0
- package/src/app/api/media-providers/tts/minimax/voices/route.js +126 -0
- package/src/app/api/media-providers/tts/voices/route.js +110 -0
- package/src/app/api/models/alias/route.js +53 -0
- package/src/app/api/models/availability/route.js +94 -0
- package/src/app/api/models/catalog-sync/route.js +34 -0
- package/src/app/api/models/custom/route.js +66 -0
- package/src/app/api/models/disabled/route.js +50 -0
- package/src/app/api/models/route.js +101 -0
- package/src/app/api/models/test/ping.js +318 -0
- package/src/app/api/models/test/route.js +14 -0
- package/src/app/api/oauth/[provider]/[action]/route.js +604 -0
- package/src/app/api/oauth/codex/bulk-import/route.js +115 -0
- package/src/app/api/oauth/codex/import-token/route.js +93 -0
- package/src/app/api/oauth/cursor/auto-import/route.js +238 -0
- package/src/app/api/oauth/cursor/import/route.js +91 -0
- package/src/app/api/oauth/gitlab/pat/route.js +65 -0
- package/src/app/api/oauth/grok-cli/bulk-import/route.js +107 -0
- package/src/app/api/oauth/iflow/cookie/route.js +139 -0
- package/src/app/api/oauth/xiaomi-mimo/api-key/route.js +129 -0
- package/src/app/api/oauth/xiaomi-mimo/auto-import/route.js +135 -0
- package/src/app/api/pricing/route.js +121 -0
- package/src/app/api/provider-nodes/[id]/route.js +113 -0
- package/src/app/api/provider-nodes/route.js +112 -0
- package/src/app/api/provider-nodes/validate/route.js +222 -0
- package/src/app/api/providers/[id]/models/route.js +579 -0
- package/src/app/api/providers/[id]/route.js +189 -0
- package/src/app/api/providers/[id]/test/route.js +23 -0
- package/src/app/api/providers/[id]/test/testUtils.js +1107 -0
- package/src/app/api/providers/[id]/test-models/route.js +79 -0
- package/src/app/api/providers/client/route.js +163 -0
- package/src/app/api/providers/kilo/free-models/route.js +55 -0
- package/src/app/api/providers/route.js +218 -0
- package/src/app/api/providers/suggested-models/filters.js +42 -0
- package/src/app/api/providers/suggested-models/route.js +32 -0
- package/src/app/api/providers/test-batch/route.js +133 -0
- package/src/app/api/providers/validate/route.js +700 -0
- package/src/app/api/proxy-pools/[id]/route.js +152 -0
- package/src/app/api/proxy-pools/[id]/test/route.js +72 -0
- package/src/app/api/proxy-pools/cloudflare-deploy/route.js +167 -0
- package/src/app/api/proxy-pools/deno-deploy/route.js +172 -0
- package/src/app/api/proxy-pools/route.js +93 -0
- package/src/app/api/proxy-pools/vercel-deploy/route.js +142 -0
- package/src/app/api/pxpipe/health/route.js +16 -0
- package/src/app/api/pxpipe/install/route.js +20 -0
- package/src/app/api/pxpipe/logs/route.js +18 -0
- package/src/app/api/pxpipe/restart/route.js +16 -0
- package/src/app/api/pxpipe/start/route.js +29 -0
- package/src/app/api/pxpipe/stats/route.js +14 -0
- package/src/app/api/pxpipe/status/route.js +21 -0
- package/src/app/api/pxpipe/stop/route.js +16 -0
- package/src/app/api/settings/database/route.js +54 -0
- package/src/app/api/settings/proxy-test/route.js +27 -0
- package/src/app/api/settings/require-login/route.js +15 -0
- package/src/app/api/settings/route.js +149 -0
- package/src/app/api/shutdown/route.js +26 -0
- package/src/app/api/tags/route.js +17 -0
- package/src/app/api/translator/console-logs/route.js +24 -0
- package/src/app/api/translator/console-logs/stream/route.js +98 -0
- package/src/app/api/translator/load/route.js +48 -0
- package/src/app/api/translator/save/route.js +47 -0
- package/src/app/api/translator/send/route.js +105 -0
- package/src/app/api/translator/translate/route.js +118 -0
- package/src/app/api/tunnel/disable/route.js +17 -0
- package/src/app/api/tunnel/enable/route.js +21 -0
- package/src/app/api/tunnel/status/route.js +25 -0
- package/src/app/api/tunnel/tailscale-check/route.js +77 -0
- package/src/app/api/tunnel/tailscale-disable/route.js +17 -0
- package/src/app/api/tunnel/tailscale-enable/route.js +17 -0
- package/src/app/api/tunnel/tailscale-install/route.js +98 -0
- package/src/app/api/usage/[connectionId]/codex-reset-credits/route.js +196 -0
- package/src/app/api/usage/[connectionId]/route.js +192 -0
- package/src/app/api/usage/chart/route.js +21 -0
- package/src/app/api/usage/history/route.js +12 -0
- package/src/app/api/usage/logs/route.js +12 -0
- package/src/app/api/usage/providers/route.js +38 -0
- package/src/app/api/usage/request-details/route.js +65 -0
- package/src/app/api/usage/request-logs/route.js +13 -0
- package/src/app/api/usage/stats/route.js +23 -0
- package/src/app/api/usage/stream/route.js +93 -0
- package/src/app/api/v1/api/chat/route.js +36 -0
- package/src/app/api/v1/audio/speech/route.js +16 -0
- package/src/app/api/v1/audio/transcriptions/route.js +19 -0
- package/src/app/api/v1/audio/voices/route.js +78 -0
- package/src/app/api/v1/chat/completions/route.js +34 -0
- package/src/app/api/v1/embeddings/route.js +21 -0
- package/src/app/api/v1/images/generations/route.js +16 -0
- package/src/app/api/v1/messages/count_tokens/route.js +96 -0
- package/src/app/api/v1/messages/route.js +35 -0
- package/src/app/api/v1/models/[...model]/route.js +75 -0
- package/src/app/api/v1/models/info/route.js +131 -0
- package/src/app/api/v1/models/route.js +586 -0
- package/src/app/api/v1/responses/compact/route.js +37 -0
- package/src/app/api/v1/responses/route.js +30 -0
- package/src/app/api/v1/route.js +1 -0
- package/src/app/api/v1/search/route.js +21 -0
- package/src/app/api/v1/systemone/route.js +21 -0
- package/src/app/api/v1/videos/[id]/route.js +17 -0
- package/src/app/api/v1/videos/edits/route.js +16 -0
- package/src/app/api/v1/videos/extensions/route.js +16 -0
- package/src/app/api/v1/videos/generations/route.js +16 -0
- package/src/app/api/v1/web/fetch/route.js +21 -0
- package/src/app/api/v1beta/models/[...path]/route.js +599 -0
- package/src/app/api/v1beta/models/route.js +62 -0
- package/src/app/api/version/route.js +15 -0
- package/src/app/api/version/shutdown/route.js +38 -0
- package/src/app/api/version/update/route.js +11 -0
- package/src/app/callback/page.tsx +162 -0
- package/src/app/dashboard/settings/pricing/page.tsx +192 -0
- package/src/app/globals.css +356 -0
- package/src/app/landing/components/AnimatedBackground.tsx +58 -0
- package/src/app/landing/components/Features.tsx +137 -0
- package/src/app/landing/components/FlowAnimation.tsx +168 -0
- package/src/app/landing/components/Footer.tsx +110 -0
- package/src/app/landing/components/GetStarted.tsx +105 -0
- package/src/app/landing/components/HeroSection.tsx +48 -0
- package/src/app/landing/components/HowItWorks.tsx +69 -0
- package/src/app/landing/components/Navigation.tsx +120 -0
- package/src/app/landing/page.tsx +131 -0
- package/src/app/layout.tsx +60 -0
- package/src/app/login/page.tsx +277 -0
- package/src/app/manifest.ts +33 -0
- package/src/app/page.tsx +5 -0
- package/src/components/app-sidebar.tsx +140 -0
- package/src/components/ui/alert.tsx +72 -0
- package/src/components/ui/avatar.tsx +93 -0
- package/src/components/ui/badge.tsx +44 -0
- package/src/components/ui/breadcrumb.tsx +103 -0
- package/src/components/ui/button.tsx +66 -0
- package/src/components/ui/card.tsx +91 -0
- package/src/components/ui/chart.tsx +338 -0
- package/src/components/ui/checkbox.tsx +26 -0
- package/src/components/ui/dialog.tsx +152 -0
- package/src/components/ui/dropdown-menu.tsx +249 -0
- package/src/components/ui/input.tsx +18 -0
- package/src/components/ui/label.tsx +18 -0
- package/src/components/ui/pagination.tsx +112 -0
- package/src/components/ui/select.tsx +184 -0
- package/src/components/ui/separator.tsx +25 -0
- package/src/components/ui/sheet.tsx +128 -0
- package/src/components/ui/sidebar.tsx +671 -0
- package/src/components/ui/skeleton.tsx +13 -0
- package/src/components/ui/switch.tsx +32 -0
- package/src/components/ui/table.tsx +86 -0
- package/src/components/ui/tabs.tsx +79 -0
- package/src/components/ui/tooltip.tsx +50 -0
- package/src/dashboardGuard.ts +298 -0
- package/src/hooks/use-mobile.ts +19 -0
- package/src/i18n/RuntimeI18nProvider.tsx +28 -0
- package/src/i18n/config.ts +19 -0
- package/src/i18n/runtime.ts +177 -0
- package/src/instrumentation.ts +14 -0
- package/src/lib/auth/dashboardSession.js +112 -0
- package/src/lib/auth/loginLimiter.js +70 -0
- package/src/lib/auth/oidc.js +242 -0
- package/src/lib/auth/saml.js +273 -0
- package/src/lib/auth/trustedPeer.js +7 -0
- package/src/lib/consoleLogBuffer.js +114 -0
- package/src/lib/dataDir.js +78 -0
- package/src/lib/db/adapters/betterSqliteAdapter.js +83 -0
- package/src/lib/db/adapters/bunSqliteAdapter.js +83 -0
- package/src/lib/db/adapters/nodeSqliteAdapter.js +111 -0
- package/src/lib/db/adapters/sqljsAdapter.js +128 -0
- package/src/lib/db/backup.js +88 -0
- package/src/lib/db/driver.js +94 -0
- package/src/lib/db/helpers/jsonCol.js +13 -0
- package/src/lib/db/helpers/kvStore.js +45 -0
- package/src/lib/db/helpers/metaStore.js +28 -0
- package/src/lib/db/index.js +312 -0
- package/src/lib/db/migrate.js +427 -0
- package/src/lib/db/migrations/001-initial.js +14 -0
- package/src/lib/db/migrations/index.js +10 -0
- package/src/lib/db/paths.js +18 -0
- package/src/lib/db/repos/aliasRepo.js +63 -0
- package/src/lib/db/repos/apiKeysRepo.js +78 -0
- package/src/lib/db/repos/combosRepo.js +83 -0
- package/src/lib/db/repos/connectionsRepo.js +347 -0
- package/src/lib/db/repos/disabledModelsRepo.js +56 -0
- package/src/lib/db/repos/nodesRepo.js +98 -0
- package/src/lib/db/repos/pricingRepo.js +108 -0
- package/src/lib/db/repos/proxyPoolsRepo.js +109 -0
- package/src/lib/db/repos/requestDetailsRepo.js +287 -0
- package/src/lib/db/repos/settingsRepo.js +123 -0
- package/src/lib/db/repos/usageRepo.js +1043 -0
- package/src/lib/db/schema.js +161 -0
- package/src/lib/db/version.js +21 -0
- package/src/lib/grokBuildConfig.js +228 -0
- package/src/lib/headroom/detect.js +212 -0
- package/src/lib/headroom/process.js +307 -0
- package/src/lib/isContainer.js +62 -0
- package/src/lib/localDb.js +51 -0
- package/src/lib/logLine.js +204 -0
- package/src/lib/mcp/stdioSseBridge.js +223 -0
- package/src/lib/modelCatalog/sync.js +292 -0
- package/src/lib/network/connectionProxy.js +172 -0
- package/src/lib/network/initOutboundProxy.js +25 -0
- package/src/lib/network/outboundProxy.js +87 -0
- package/src/lib/network/proxyTest.js +88 -0
- package/src/lib/network/resolveOutboundProxy.js +45 -0
- package/src/lib/oauth/constants/oauth.js +213 -0
- package/src/lib/oauth/constants/xai.js +62 -0
- package/src/lib/oauth/providerHelpers.js +74 -0
- package/src/lib/oauth/providers/_shared.js +17 -0
- package/src/lib/oauth/providers/antigravity.js +119 -0
- package/src/lib/oauth/providers/claude.js +60 -0
- package/src/lib/oauth/providers/codebuddy-cn.js +80 -0
- package/src/lib/oauth/providers/codebuddy-intl.js +75 -0
- package/src/lib/oauth/providers/codex.js +69 -0
- package/src/lib/oauth/providers/cursor.js +19 -0
- package/src/lib/oauth/providers/github.js +98 -0
- package/src/lib/oauth/providers/gitlab.js +64 -0
- package/src/lib/oauth/providers/grok-cli.js +123 -0
- package/src/lib/oauth/providers/iflow.js +89 -0
- package/src/lib/oauth/providers/index.js +243 -0
- package/src/lib/oauth/providers/kilocode.js +75 -0
- package/src/lib/oauth/providers/kimchi.js +76 -0
- package/src/lib/oauth/providers/qoder.js +111 -0
- package/src/lib/oauth/providers/trae.js +337 -0
- package/src/lib/oauth/providers/windsurf.js +172 -0
- package/src/lib/oauth/providers/xai.js +101 -0
- package/src/lib/oauth/providers/xiaomi-mimo.js +120 -0
- package/src/lib/oauth/providers/zed.js +68 -0
- package/src/lib/oauth/providers.js +1 -0
- package/src/lib/oauth/services/antigravity.js +322 -0
- package/src/lib/oauth/services/claude.js +135 -0
- package/src/lib/oauth/services/codex.js +149 -0
- package/src/lib/oauth/services/cursor.js +179 -0
- package/src/lib/oauth/services/github.js +227 -0
- package/src/lib/oauth/services/iflow.js +201 -0
- package/src/lib/oauth/services/index.js +13 -0
- package/src/lib/oauth/services/kimchi.js +139 -0
- package/src/lib/oauth/services/oauth.js +161 -0
- package/src/lib/oauth/services/openai.js +122 -0
- package/src/lib/oauth/services/qoder.js +237 -0
- package/src/lib/oauth/services/xai.js +241 -0
- package/src/lib/oauth/utils/banner.js +62 -0
- package/src/lib/oauth/utils/ideDetect.js +64 -0
- package/src/lib/oauth/utils/pkce.js +39 -0
- package/src/lib/oauth/utils/server.js +1056 -0
- package/src/lib/oauth/utils/ui.js +47 -0
- package/src/lib/providerNormalization.js +49 -0
- package/src/lib/pxpipe/events.js +146 -0
- package/src/lib/pxpipe/install.js +143 -0
- package/src/lib/pxpipe/loader.js +76 -0
- package/src/lib/pxpipe/service.js +69 -0
- package/src/lib/qoder/constants.js +2 -0
- package/src/lib/qoder/cosy.js +2 -0
- package/src/lib/qoder/encoding.js +2 -0
- package/src/lib/tunnel/cloudflare/cloudflared.js +513 -0
- package/src/lib/tunnel/cloudflare/config.js +9 -0
- package/src/lib/tunnel/cloudflare/healthCheck.js +33 -0
- package/src/lib/tunnel/cloudflare/manager.js +174 -0
- package/src/lib/tunnel/cloudflare/pid.js +31 -0
- package/src/lib/tunnel/index.js +53 -0
- package/src/lib/tunnel/shared/dnsResolver.js +20 -0
- package/src/lib/tunnel/shared/internetCheck.js +33 -0
- package/src/lib/tunnel/shared/state.js +45 -0
- package/src/lib/tunnel/shared/watchdogConfig.js +9 -0
- package/src/lib/tunnel/sudoExec.js +49 -0
- package/src/lib/tunnel/sudoPassword.js +90 -0
- package/src/lib/tunnel/tailscale/config.js +7 -0
- package/src/lib/tunnel/tailscale/healthCheck.js +33 -0
- package/src/lib/tunnel/tailscale/manager.js +151 -0
- package/src/lib/tunnel/tailscale/tailscale.js +1013 -0
- package/src/lib/usageDb.js +15 -0
- package/src/lib/versionCheck.js +67 -0
- package/src/models/index.ts +38 -0
- package/src/proxy.ts +10 -0
- package/src/shared/components/AddCustomEmbeddingModal.tsx +220 -0
- package/src/shared/components/CapacityBadges.tsx +47 -0
- package/src/shared/components/ChangelogModal.tsx +82 -0
- package/src/shared/components/ComboFormModal.tsx +321 -0
- package/src/shared/components/CursorAuthModal.tsx +213 -0
- package/src/shared/components/EditConnectionModal.tsx +369 -0
- package/src/shared/components/EntityCard.tsx +106 -0
- package/src/shared/components/EntityCardSkeleton.tsx +69 -0
- package/src/shared/components/Footer.tsx +133 -0
- package/src/shared/components/GitLabAuthModal.tsx +294 -0
- package/src/shared/components/Header.tsx +370 -0
- package/src/shared/components/HeaderLanguage.tsx +53 -0
- package/src/shared/components/HeaderMenu.tsx +75 -0
- package/src/shared/components/IFlowCookieModal.tsx +140 -0
- package/src/shared/components/Icon.tsx +237 -0
- package/src/shared/components/LanguageSwitcher.tsx +139 -0
- package/src/shared/components/Loading.tsx +102 -0
- package/src/shared/components/ManualConfigModal.tsx +55 -0
- package/src/shared/components/McpMarketplaceModal.tsx +320 -0
- package/src/shared/components/Modal.tsx +130 -0
- package/src/shared/components/ModelSelectModal.tsx +755 -0
- package/src/shared/components/NineRemoteButton.tsx +28 -0
- package/src/shared/components/NineRemotePromoModal.tsx +91 -0
- package/src/shared/components/NoAuthProxyCard.tsx +178 -0
- package/src/shared/components/OAuthModal.tsx +1055 -0
- package/src/shared/components/PricingModal.tsx +202 -0
- package/src/shared/components/ProviderIcon.tsx +80 -0
- package/src/shared/components/ProviderInfoCard.tsx +98 -0
- package/src/shared/components/RequestLogger.tsx +149 -0
- package/src/shared/components/SegmentedControl.tsx +45 -0
- package/src/shared/components/ShutdownModal.tsx +65 -0
- package/src/shared/components/ThemeProvider.tsx +15 -0
- package/src/shared/components/ThemeToggle.tsx +52 -0
- package/src/shared/components/UpdateDialog.tsx +248 -0
- package/src/shared/components/UsageStats.tsx +714 -0
- package/src/shared/components/VersionLabel.tsx +122 -0
- package/src/shared/components/XiaomiMimoAuthModal.tsx +277 -0
- package/src/shared/components/index.ts +32 -0
- package/src/shared/components/layouts/AuthLayout.tsx +22 -0
- package/src/shared/components/layouts/DashboardLayout.tsx +105 -0
- package/src/shared/components/layouts/Page.tsx +158 -0
- package/src/shared/components/layouts/index.ts +4 -0
- package/src/shared/constants/cliTools.js +123 -0
- package/src/shared/constants/colors.ts +92 -0
- package/src/shared/constants/config.ts +100 -0
- package/src/shared/constants/coworkPlugins.ts +113 -0
- package/src/shared/constants/index.ts +3 -0
- package/src/shared/constants/locales.ts +5 -0
- package/src/shared/constants/models.ts +65 -0
- package/src/shared/constants/providers.js +236 -0
- package/src/shared/constants/providersDisplay.ts +15 -0
- package/src/shared/constants/ttsProviders.ts +166 -0
- package/src/shared/hooks/index.js +3 -0
- package/src/shared/hooks/useCopyToClipboard.js +45 -0
- package/src/shared/hooks/useModelCaps.js +91 -0
- package/src/shared/hooks/useShutdown.ts +68 -0
- package/src/shared/hooks/useTheme.js +59 -0
- package/src/shared/services/bootstrap.ts +13 -0
- package/src/shared/services/initializeApp.ts +323 -0
- package/src/shared/services/quotaAutoPing.ts +400 -0
- package/src/shared/utils/api.ts +100 -0
- package/src/shared/utils/apiKey.ts +92 -0
- package/src/shared/utils/bulkAdd.ts +87 -0
- package/src/shared/utils/cn.ts +7 -0
- package/src/shared/utils/connectionStatus.ts +14 -0
- package/src/shared/utils/index.ts +40 -0
- package/src/shared/utils/machine.ts +6 -0
- package/src/shared/utils/machineId.ts +70 -0
- package/src/shared/utils/providerCustomModels.ts +80 -0
- package/src/shared/utils/providerIcon.ts +248 -0
- package/src/shared/utils/providerModelsFetcher.ts +33 -0
- package/src/shared/utils/ssrfGuard.ts +223 -0
- package/src/shared/utils/utils.js +1 -0
- package/src/sse/handlers/chat.js +430 -0
- package/src/sse/handlers/embeddings.js +192 -0
- package/src/sse/handlers/fetch.js +255 -0
- package/src/sse/handlers/imageGeneration.js +175 -0
- package/src/sse/handlers/search.js +260 -0
- package/src/sse/handlers/stt.js +120 -0
- package/src/sse/handlers/systemone.js +173 -0
- package/src/sse/handlers/tts.js +157 -0
- package/src/sse/handlers/videoGeneration.js +274 -0
- package/src/sse/services/antigravityQuota.ts +220 -0
- package/src/sse/services/auth.ts +485 -0
- package/src/sse/services/backgroundTokenRefresh.ts +190 -0
- package/src/sse/services/model.ts +102 -0
- package/src/sse/services/tokenRefresh.ts +328 -0
- package/src/sse/services/zedQuota.ts +233 -0
- package/src/sse/utils/logger.ts +140 -0
- package/src/store/headerSearchStore.ts +27 -0
- package/src/store/index.ts +5 -0
- package/src/store/notificationStore.ts +75 -0
- package/src/store/providerStore.ts +75 -0
- package/src/store/settingsStore.ts +63 -0
- package/src/store/themeStore.ts +48 -0
- package/src/store/userStore.ts +35 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
exports.id=3533,exports.ids=[3533],exports.modules={51:(a,b,c)=>{"use strict";c.d(b,{default:()=>l});var d=c(86240),e=c(4459),f=c.n(e),g=c(89988),h=c(4271),i=c(70369),j=c(31952),k=c(28907);function l({href:a,icon:b,iconBg:c,title:e,children:m,meta:n,dimmed:o,toggle:p,className:q}){let r=p?p.checked?p.disabledLabel??"Disable":p.enabledLabel??"Enable":void 0;return(0,d.jsx)(f(),{href:a,className:"group block h-full min-w-0",children:(0,d.jsx)(h.Zp,{size:"sm",className:(0,g.cn)("h-full transition-all hover:border-primary/40 hover:shadow-sm",o&&"opacity-50",q),children:(0,d.jsx)(h.Wu,{children:(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,d.jsx)("div",{className:"flex size-10 shrink-0 items-center justify-center rounded-xl ring-1 ring-inset ring-foreground/5",style:c?{backgroundColor:c}:void 0,children:b}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)("h3",{className:"truncate text-sm font-semibold",children:e}),(0,d.jsxs)("div",{className:"mt-1 flex min-w-0 flex-wrap items-center gap-1.5 text-xs",children:[m,n]})]}),(0,d.jsxs)("div",{className:"flex shrink-0 items-center gap-1",children:[p&&(0,d.jsx)("div",{className:"opacity-100 transition-opacity sm:opacity-0 sm:group-hover:opacity-100 sm:group-focus-within:opacity-100",onClick:a=>{p&&(a.preventDefault(),a.stopPropagation(),p.onToggle(!p.checked))},children:(0,d.jsxs)(j.m_,{children:[(0,d.jsx)(j.k$,{asChild:!0,children:(0,d.jsx)(i.d,{size:"sm",checked:p.checked,onCheckedChange:()=>{},"aria-label":r})}),(0,d.jsx)(j.ZI,{side:"top",children:r})]})}),(0,d.jsx)(k.default,{name:"chevron_right",className:"shrink-0 text-[18px] text-muted-foreground transition-transform group-hover:translate-x-0.5"})]})]})})})})}},5174:(a,b,c)=>{"use strict";c.d(b,{cn:()=>f});var d=c(74444),e=c(66365);function f(...a){return(0,e.QP)((0,d.$)(...a))}},5409:(a,b,c)=>{"use strict";c.d(b,{default:()=>n});var d=c(86240),e=c(28907),f=c(70433),g=c(16467),h=c.n(g),i=c(4271),j=c(83777),k=c(29184);let l="__none__",m=[{value:"none",label:"None (single pool)"},{value:"round-robin",label:"Round-robin"},{value:"random",label:"Random"}];function n({providerId:a}){let[b,c]=(0,f.useState)([]),[g,h]=(0,f.useState)(l),[o,p]=(0,f.useState)("none"),[q,r]=(0,f.useState)(!1),[s,t]=(0,f.useState)(!1),u=(0,f.useCallback)(async(b,c)=>{r(!0);try{let d=await fetch("/api/settings",{cache:"no-store"}),e=(d.ok?await d.json():{}).providerStrategies||{},f={...e[a]||{}};b===l?delete f.proxyPoolId:f.proxyPoolId=b,"none"===c?delete f.rotateStrategy:f.rotateStrategy=c;let g={...e};0===Object.keys(f).length?delete g[a]:g[a]=f,await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerStrategies:g})}),t(!0),setTimeout(()=>t(!1),1500)}catch(a){console.log("Save proxy config error:",a)}finally{r(!1)}},[a]),v=b.length>=2,w="none"!==o;return(0,d.jsx)(i.Zp,{className:"p-6",children:(0,d.jsxs)(i.Wu,{children:[(0,d.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,d.jsx)("div",{className:"inline-flex items-center justify-center w-10 h-10 rounded-full bg-green-500/10 text-green-500",children:(0,d.jsx)(e.default,{name:"lock_open",className:"text-[20px]"})}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("p",{className:"text-sm font-medium",children:"No authentication required"}),(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"This provider is ready to use. Optionally route requests through a proxy pool to bypass IP-based limits."})]}),s&&(0,d.jsx)(k.E,{variant:"default",children:"Saved"})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsx)("label",{className:"text-sm font-medium",children:"Proxy Pool"}),(0,d.jsxs)(j.l6,{value:g,onValueChange:a=>{h(a),u(a,o)},disabled:q||w,children:[(0,d.jsx)(j.bq,{disabled:q||w,children:(0,d.jsx)(j.yv,{placeholder:"Select an option"})}),(0,d.jsxs)(j.gC,{children:[(0,d.jsx)(j.eb,{value:l,children:"None (direct)"}),b.map(a=>(0,d.jsx)(j.eb,{value:a.id,children:a.name},a.id))]})]}),w&&(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Pool selector is ignored when rotation is active — all active pools are used."})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-2 mt-4",children:[(0,d.jsx)("label",{className:"text-sm font-medium text-foreground",children:"Rotation Strategy"}),(0,d.jsxs)(j.l6,{value:o,onValueChange:a=>{p(a),u(g,a)},disabled:q,children:[(0,d.jsx)(j.bq,{disabled:q,children:(0,d.jsx)(j.yv,{placeholder:"Select an option"})}),(0,d.jsx)(j.gC,{children:m.map(a=>(0,d.jsx)(j.eb,{value:a.value,disabled:"none"!==a.value&&!v,children:a.label},a.value))})]}),(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:v?w?"round-robin"===o?`Rotating through all ${b.length} active pools in order. State is in-memory (resets on restart).`:`Picking a random pool from ${b.length} active pools each request.`:"Uses the selected pool above. Set to Round-robin or Random to rotate across all active pools.":"Need at least 2 active proxy pools for rotation."})]})]})})}n.propTypes={providerId:h().string.isRequired}},6764:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/IFlowCookieModal.tsx\" 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/amir/Projects/10Router/src/shared/components/IFlowCookieModal.tsx","default")},9186:(a,b,c)=>{"use strict";c.d(b,{NI:()=>e.default,KX:()=>d.PanelSkeleton}),c(84581),c(30487),c(37336),c(90635),c(93780),c(54637),c(43611),c(54710),c(39100),c(52691),c(43213),c(75512),c(55020),c(89829),c(50560),c(73013),c(42235),c(60963),c(55663),c(68330),c(6764),c(14130),c(49651),c(77606),c(19707),c(49409),c(38635),c(48061);var d=c(72652);c(77874);var e=c(75394);c(87986),c(51899)},9656:(a,b,c)=>{"use strict";c.d(b,{default:()=>h});var d=c(86240),e=c(28907),f=c(95137),g=c(31952);function h({caps:a,className:b="",colorOverride:c,size:i=16}){if(!a)return null;let j=Object.keys(f.bs).filter(b=>a[b]);return 0===j.length?null:(0,d.jsx)("span",{className:`inline-flex items-center gap-0.5 ${b}`,children:j.map(a=>(0,d.jsxs)(g.m_,{children:[(0,d.jsx)(g.k$,{asChild:!0,children:(0,d.jsx)("span",{className:"relative inline-flex",children:(0,d.jsx)(e.default,{name:f.bs[a].icon,className:`leading-none cursor-help ${c||f.bs[a].color}`,style:{fontSize:`${i}px`}})})}),(0,d.jsxs)(g.ZI,{children:[f.bs[a].label," — ",f.bs[a].desc]})]},a))})}},11089:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>f});var d=c(25966),e=c(9186);function f({children:a}){return(0,d.jsx)(e.NI,{children:a})}},11442:(a,b,c)=>{"use strict";c.d(b,{EntityCardSkeleton:()=>h,PanelSkeleton:()=>j,StatCardSkeleton:()=>i});var d=c(86240),e=c(5174),f=c(4271),g=c(21096);function h({className:a}){return(0,d.jsx)(f.Zp,{size:"sm","aria-hidden":!0,className:(0,e.cn)("h-full overflow-hidden",a),children:(0,d.jsx)(f.Wu,{children:(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,d.jsx)(g.E,{className:"size-10 shrink-0 rounded-xl"}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)(g.E,{className:"h-4 w-2/3"}),(0,d.jsxs)("div",{className:"mt-2 flex items-center gap-1.5",children:[(0,d.jsx)(g.E,{className:"h-5 w-20 rounded-full"}),(0,d.jsx)(g.E,{className:"h-5 w-14 rounded-full"})]})]}),(0,d.jsx)(g.E,{className:"size-4 shrink-0 rounded-full"})]})})})}function i({className:a}){return(0,d.jsx)(f.Zp,{"aria-hidden":!0,className:(0,e.cn)("min-w-0 overflow-hidden px-4 py-3",a),children:(0,d.jsxs)(f.Wu,{className:"flex min-w-0 flex-col gap-1 px-0 py-0",children:[(0,d.jsx)(g.E,{className:"h-4 w-24"}),(0,d.jsx)(g.E,{className:"h-8 w-20"})]})})}function j({className:a}){return(0,d.jsx)(f.Zp,{"aria-hidden":!0,className:(0,e.cn)("overflow-hidden",a),children:(0,d.jsxs)(f.Wu,{children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)(g.E,{className:"size-10 shrink-0 rounded-[10px]"}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)(g.E,{className:"h-4 w-40"}),(0,d.jsx)(g.E,{className:"mt-2 h-3 w-56"})]}),(0,d.jsx)(g.E,{className:"h-9 w-24 shrink-0 rounded-lg"})]}),(0,d.jsxs)("div",{className:"mt-4 flex flex-col gap-2 border-t border-border pt-4",children:[(0,d.jsx)(g.E,{className:"h-4 w-full"}),(0,d.jsx)(g.E,{className:"h-4 w-5/6"}),(0,d.jsx)(g.E,{className:"h-4 w-2/3"})]})]})})}},12710:(a,b,c)=>{"use strict";c.d(b,{default:()=>n});var d=c(86240),e=c(28907);c(70433);var f=c(48884),g=c(89988),h=c(76163);function i({className:a,orientation:b="horizontal",...c}){return(0,d.jsx)(h.bL,{"data-slot":"tabs","data-orientation":b,className:(0,g.cn)("group/tabs flex gap-2 data-horizontal:flex-col",a),...c})}let j=(0,f.F)("group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-9 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none",{variants:{variant:{default:"bg-muted",line:"gap-1 bg-transparent"}},defaultVariants:{variant:"default"}});function k({className:a,...b}){return(0,d.jsx)(h.l9,{"data-slot":"tabs-trigger",className:(0,g.cn)("relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4","group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent","data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground","after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100",a),...b})}var l=c(5174);let m=function({className:a,variant:b="default",...c}){return(0,d.jsx)(h.B8,{"data-slot":"tabs-list","data-variant":b,className:(0,g.cn)(j({variant:b}),a),...c})};function n({options:a=[],value:b,onChange:c,size:f="md",className:g}){let h={sm:"h-7 text-xs",md:"h-9 text-sm",lg:"h-11 text-base"};return(0,d.jsx)(i,{value:b,onValueChange:c,className:(0,l.cn)("overflow-x-auto",g),children:(0,d.jsx)(m,{children:a.map(a=>(0,d.jsxs)(k,{value:a.value,className:h[f],children:[a.icon&&(0,d.jsx)(e.default,{name:a.icon,className:"text-[16px] mr-1.5"}),a.label]},a.value))})})}},14130:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/GitLabAuthModal.tsx\" 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/amir/Projects/10Router/src/shared/components/GitLabAuthModal.tsx","default")},16582:(a,b,c)=>{"use strict";c.d(b,{default:()=>B});var d=c(86240),e=c(70433),f=c(16467),g=c.n(f),h=c(21767),i=c(39195),j=c(72465),k=c(48985),l=c(58147),m=c(940),n=c(67209),o=c(81501),p=c(63265),q=c(29184),r=c(58503),s=c(92968),t=c(9656),u=c(38889),v=c(95137),w=c(86177);let x=[...Object.keys(w.zN),...Object.keys(w.IS),...Object.keys(w.nJ),...Object.keys(w.fg)],y=Object.keys(w.IS).filter(a=>w.IS[a].noAuth),z=["cursor","zed"];function A(a,b,c){let[d,f]=(0,e.useState)([]);return(b??[]).join("|"),d}function B({isOpen:a,onClose:b,onSelect:c,onDeselect:f,selectedModel:g,activeProviders:C=[],title:D="Select Model",modelAliases:E={},kindFilter:F=null,capFilter:G=null,addedModelValues:H=[],closeOnSelect:I=!0}){let J=(0,e.useMemo)(()=>F?C.filter(a=>{let b=w.Q2[a.provider];return(b?.serviceKinds||["llm"]).includes(F)}):C,[C,F]),{getCaps:K}=(0,u.y)(),[L,M]=(0,e.useState)(""),[N,O]=(0,e.useState)([]),[P,Q]=(0,e.useState)([]),[R,S]=(0,e.useState)([]),[T,U]=(0,e.useState)({}),V=(0,e.useMemo)(()=>{let a=Object.fromEntries(z.map(a=>[a,[]]));for(let b of C)b?.id&&Object.prototype.hasOwnProperty.call(a,b.provider)&&a[b.provider].push(b.id);return a},[C]),W=A(a,V.cursor,"Cursor"),X=A(a,V.zed,"Zed"),Y=(0,e.useMemo)(()=>({...w.zN,...w.IS,...w.nJ,...w.fg}),[]),Z=(0,e.useMemo)(()=>{let a={},b=new Set(["webSearch","webFetch"]),c=new Set(["image","tts","stt","embedding","imageToText"]),d=new Set(["tts","image","webFetch"]);return[...new Set([...J.map(a=>a.provider),...F?y.filter(a=>(w.Q2[a]?.serviceKinds||["llm"]).includes(F)):y])].sort((a,b)=>{let c=x.indexOf(a),d=x.indexOf(b);return(-1===c?999:c)-(-1===d?999:d)}).forEach(e=>{let f=(0,w.wG)(e),g=Y[e]||{name:e,color:"#666"},h=(0,w.mq)(e)||(0,w.gb)(e);if(F&&b.has(F)){a[e]={name:g.name,alias:f,color:g.color,models:[{id:e,name:g.name,value:e}]};return}if(g.passthroughModels){let b=Object.entries(E).filter(([,a])=>a.startsWith(`${f}/`)).map(([a,b])=>({id:b.replace(`${f}/`,""),name:a,value:b})),h=R.filter(a=>a.providerAlias===f).map(a=>({id:a.id,name:a.name||a.id,value:`${f}/${a.id}`,kind:(0,v.CP)(a),isCustom:!0})),i=b;if(F&&c.has(F)){let a=h.filter(a=>(0,v.CP)(a)===F);0===(i=[...a,...(0,v.KC)(e).filter(a=>(0,v.CP)(a)===F).map(a=>({id:a.id,name:a.name,value:`${f}/${a.id}`,kind:(0,v.CP)(a)})).filter(b=>!a.some(a=>a.value===b.value))]).length&&d.has(F)&&(g.serviceKinds||["llm"]).includes(F)&&(i=[{id:e,name:g.name,value:f}])}else{let a=h.filter(a=>!(0,v.CP)(a)||"llm"===(0,v.CP)(a)),c=new Set([...b,...a].map(a=>a.value)),d="zed"===e?X.map(a=>({id:a.id,name:a.name||a.id,value:`${f}/${a.id}`,kind:(0,v.CP)(a)})):[],g=(0,v.KC)(e).filter(a=>!(0,v.CP)(a)||"llm"===(0,v.CP)(a)).map(a=>({id:a.id,name:a.name,value:`${f}/${a.id}`,kind:(0,v.CP)(a)})).filter(a=>!c.has(a.value));i=[...a,...b.filter(b=>!a.some(a=>a.value===b.value)),...d.filter(a=>!c.has(a.value)),...g]}if(i.length>0){let b=P.find(a=>a.id===e),c=b?.name||g.name;a[e]={name:c,alias:f,color:g.color,models:i}}}else if(h){if(F&&c.has(F))return;let b=C.find(a=>a.provider===e),d=P.find(a=>a.id===e),f=d?.name||b?.name||g.name,h=b?.providerSpecificData?.prefix||d?.prefix||e,i=Object.entries(E).filter(([,a])=>a.startsWith(`${e}/`)).map(([a,b])=>({id:b.replace(`${e}/`,""),name:a,value:`${h}/${b.replace(`${e}/`,"")}`})),j=R.filter(a=>a.providerAlias===e).map(a=>({id:a.id,name:a.name||a.id,value:`${h}/${a.id}`,isCustom:!0})),k=new Set(i.map(a=>a.value)),l=[...i,...j.filter(a=>!k.has(a.value))],m=l.length>0?l:[{id:`__placeholder__${e}`,name:`${h}/model-id`,value:`${h}/model-id`,isPlaceholder:!0}];a[e]={name:f,alias:h,color:g.color,models:m,isCustom:!0,hasModels:l.length>0}}else{var i;let b="cursor"===e?W:"zed"===e?X:[],h=b.length>0?b:(0,v.KC)(e),j=new Set(h.map(a=>a.id)),k=h.length>0,l=Object.entries(E).filter(([a,b])=>b.startsWith(`${f}/`)&&(!k||a===b.replace(`${f}/`,""))&&!j.has(b.replace(`${f}/`,""))).map(([a,b])=>({id:b.replace(`${f}/`,""),name:a,value:b,isCustom:!0})),m=new Set(l.map(a=>a.id)),n=R.filter(a=>a.providerAlias===f&&!j.has(a.id)&&!m.has(a.id)).map(a=>({id:a.id,name:a.name||a.id,value:`${f}/${a.id}`,isCustom:!0})),o=[...h.map(a=>({id:a.id,name:a.name,value:`${f}/${a.id}`,kind:(0,v.CP)(a)})),...l,...n],p=new Set,q=(i=o.filter(a=>!p.has(a.value)&&(p.add(a.value),!0)),F?c.has(F)?i.filter(a=>a.isPlaceholder||(0,v.CP)(a)===F):i:i.filter(a=>a.isPlaceholder||a.isCustom||!(0,v.CP)(a)||"llm"===(0,v.CP)(a)));0===q.length&&F&&d.has(F)&&(g.serviceKinds||["llm"]).includes(F)&&(q=[{id:e,name:g.name,value:f}]),q.length>0&&(a[e]={name:g.name,alias:f,color:g.color,models:q})}}),Object.entries(a).forEach(([b,c])=>{let d=new Set([...T[(0,w.wG)(b)]||[],...T[b]||[]]);0!==d.size&&(c.models=c.models.filter(a=>!d.has(a.id)),0===c.models.length&&delete a[b])}),a},[J,E,Y,P,R,T,F,C,W,X]),$=(0,e.useMemo)(()=>{if(F||G)return[];if(!L.trim())return N;let a=L.toLowerCase();return N.filter(b=>b.name.toLowerCase().includes(a))},[N,L,F]),_=(0,e.useMemo)(()=>{let a=L.trim().toLowerCase(),b={};return Object.entries(Z).forEach(([c,d])=>{var e;let f=d.models;if(!G||0!==(f=f.filter(a=>K(a.value)?.[G]===!0)).length){if(a){let b=d.name.toLowerCase().includes(a);if(0===(f=f.filter(b=>b.name.toLowerCase().includes(a)||b.id.toLowerCase().includes(a))).length&&!b)return}b[c]={...d,models:[...(e=f).filter(a=>H.includes(a.value)).sort((a,b)=>a.name.localeCompare(b.name)),...e.filter(a=>!H.includes(a.value)).sort((a,b)=>a.name.localeCompare(b.name))]}}}),b},[Z,L,H]),aa=a=>{let d=a?.value||a?.name||a;H.includes(d)&&f?f(a):c(a),I&&(b(),M(""))};return(0,d.jsx)(n.lG,{open:!!a,onOpenChange:a=>{a||(b(),M(""))},children:(0,d.jsxs)(n.Cf,{className:"max-w-md gap-0 p-0",children:[(0,d.jsxs)(n.c7,{children:[(0,d.jsx)(n.L3,{children:D}),(0,d.jsx)(n.rr,{className:"sr-only",children:"Pick a model"})]}),(0,d.jsxs)("div",{className:"space-y-3 p-4",children:[(0,d.jsxs)(r.Fc,{children:[(0,d.jsx)(h.A,{className:"size-4"}),(0,d.jsx)(r.TN,{children:"Click to add, click again to remove. Changes are saved automatically."})]}),(0,d.jsxs)("div",{className:"relative",children:[(0,d.jsx)(i.A,{className:"absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground"}),(0,d.jsx)(o.p,{type:"text",placeholder:"Search...",value:L,onChange:a=>M(a.target.value),className:"pl-8"})]}),(0,d.jsxs)("div",{className:"max-h-100 space-y-3 overflow-y-auto",children:[$.length>0&&(0,d.jsxs)("div",{children:[(0,d.jsxs)("div",{className:"sticky top-0 mb-1.5 flex items-center gap-1.5 bg-popover py-0.5",children:[(0,d.jsx)(j.A,{className:"size-3.5 text-primary"}),(0,d.jsx)("span",{className:"text-xs font-medium text-primary",children:"Combos"}),(0,d.jsx)(q.E,{variant:"secondary",children:$.length})]}),(0,d.jsx)("div",{className:"flex flex-wrap gap-1.5",children:$.map(a=>{let b=g===a.name,c=H.includes(a.name);return(0,d.jsxs)(p.$,{size:"sm",variant:b||c?"default":"outline",onClick:()=>aa({id:a.name,name:a.name,value:a.name}),className:"h-auto rounded-xl px-2 py-1 text-xs font-medium",children:[c&&(0,d.jsx)(k.A,{className:"size-2.5"}),a.name]},a.id)})})]}),Object.entries(_).map(([a,b])=>(0,d.jsxs)("div",{children:[(0,d.jsxs)("div",{className:"sticky top-0 mb-1.5 flex items-center gap-1.5 bg-popover py-0.5",children:[(0,d.jsx)(s.A,{src:`/providers/${a}.png`,alt:b.name,size:14,fallbackText:(b.name||a).slice(0,2).toUpperCase(),fallbackColor:b.color}),(0,d.jsx)("span",{className:"text-xs font-medium text-primary",children:b.name}),(0,d.jsx)(q.E,{variant:"secondary",children:b.models.length})]}),(0,d.jsx)("div",{className:"flex flex-wrap gap-1.5",children:b.models.map(a=>{let b=g===a.value,c=H.includes(a.value),e=a.isPlaceholder;return(0,d.jsxs)(p.$,{size:"sm",variant:b||c?"default":"outline",onClick:()=>aa(a),title:e?"Select to pre-fill, then edit model ID in the input":void 0,className:"h-auto rounded-xl px-2 py-1 text-xs font-medium data-[placeholder=true]:border-dashed data-[placeholder=true]:font-normal data-[placeholder=true]:italic","data-placeholder":e||void 0,children:[c&&!e&&(0,d.jsx)(k.A,{className:"size-2.5"}),e&&(0,d.jsx)(l.A,{className:"size-3"}),a.name,a.isCustom&&!e&&(0,d.jsx)(q.E,{variant:"secondary",className:"text-[9px] font-normal",children:"custom"}),!e&&(0,d.jsx)(t.default,{caps:K(a.value)})]},a.value)})})]},a)),0===Object.keys(_).length&&0===$.length&&(0,d.jsxs)("div",{className:"py-4 text-center text-muted-foreground",children:[(0,d.jsx)(m.A,{className:"mx-auto mb-1 size-6"}),(0,d.jsx)("p",{className:"text-xs",children:"No models found"})]})]})]})]})})}B.propTypes={isOpen:g().bool.isRequired,onClose:g().func.isRequired,onSelect:g().func.isRequired,onDeselect:g().func,selectedModel:g().string,activeProviders:g().arrayOf(g().shape({provider:g().string.isRequired})),title:g().string,modelAliases:g().object,kindFilter:g().string,addedModelValues:g().arrayOf(g().string),closeOnSelect:g().bool}},19509:(a,b,c)=>{"use strict";c.d(b,{CardGrid:()=>n,Page:()=>k,PageHeader:()=>l,Section:()=>m});var d=c(86240),e=c(4459),f=c.n(e),g=c(5174),h=c(63265),i=c(28907);let j={default:"",narrow:"mx-auto w-full max-w-2xl",wide:"mx-auto w-full max-w-5xl"};function k({children:a,width:b="default",className:c}){return(0,d.jsx)("div",{className:(0,g.cn)("flex min-w-0 flex-col gap-6",j[b],c),children:a})}function l({title:a,description:b,actions:c,backHref:e,backLabel:j,className:k}){let m=null!=c;return(0,d.jsxs)("div",{className:(0,g.cn)(k),children:[e?(0,d.jsx)(h.$,{variant:"outline",size:"sm",asChild:!0,className:"mb-4 self-start",children:(0,d.jsxs)(f(),{href:e,children:[(0,d.jsx)(i.default,{name:"arrow_back",className:"text-lg"}),j??"Back"]})}):null,(0,d.jsxs)("div",{className:(0,g.cn)("flex flex-col gap-3",m&&"sm:flex-row sm:items-center sm:justify-between"),children:[(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsx)("h1",{className:"text-2xl font-semibold tracking-tight sm:text-3xl",children:a}),b?(0,d.jsx)("p",{className:"mt-1 text-sm text-muted-foreground",children:b}):null]}),m?(0,d.jsx)("div",{className:"grid shrink-0 grid-cols-1 gap-2 sm:flex sm:items-center",children:c}):null]})]})}function m({title:a,actions:b,children:c,className:e}){let f=void 0!==a||void 0!==b;return(0,d.jsxs)("section",{className:(0,g.cn)("flex min-w-0 flex-col gap-4",e),children:[f?(0,d.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[a?(0,d.jsx)("h2",{className:"text-lg font-semibold leading-tight sm:text-xl",children:a}):(0,d.jsx)("span",{}),b?(0,d.jsx)("div",{className:"grid grid-cols-1 gap-2 sm:flex sm:w-auto sm:items-center",children:b}):null]}):null,c]})}function n({children:a,variant:b="cards",className:c}){return(0,d.jsx)("div",{className:(0,g.cn)("grid min-w-0 grid-cols-1 gap-3 sm:gap-4","cards"===b&&"sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4","stat"===b&&"sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5",c),children:a})}},19707:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/NoAuthProxyCard.tsx\" 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/amir/Projects/10Router/src/shared/components/NoAuthProxyCard.tsx","default")},21096:(a,b,c)=>{"use strict";c.d(b,{E:()=>f});var d=c(86240),e=c(89988);function f({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"skeleton",className:(0,e.cn)("animate-pulse rounded-md bg-muted",a),...b})}},22354:(a,b,c)=>{"use strict";c.d(b,{default:()=>i});var d=c(86240),e=c(28907),f=c(70433),g=c(87121),h=c(63998);function i({isOpen:a,onClose:b,onAdd:c,addedNames:j=[]}){let[k,l]=(0,f.useState)([]),[m,n]=(0,f.useState)(!1),[o,p]=(0,f.useState)(""),[q,r]=(0,f.useState)("all"),[s,t]=(0,f.useState)(null),[u,v]=(0,f.useState)(null),[w,x]=(0,f.useState)({}),[y,z]=(0,f.useState)({}),[A,B]=(0,f.useState)({}),C=(0,f.useMemo)(()=>new Set(j),[j]),D=(0,f.useMemo)(()=>{let a=o.trim().toLowerCase();return k.filter(b=>("authless"!==q||!b.oauth)&&("oauth"!==q||!!b.oauth)&&(!a||(b.title||"").toLowerCase().includes(a)||(b.description||"").toLowerCase().includes(a)||(b.name||"").toLowerCase().includes(a)))},[k,o,q]),E=async a=>{if(!w[a.url]){z(b=>({...b,[a.url]:!0}));try{let b=await fetch("/api/cli-tools/cowork-mcp-tools",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:a.url})}),c=await b.json(),d=c.tools||[],e=Array.isArray(a.toolNames)?a.toolNames:[],f=d.length>0?d.map(a=>a.name):e;x(b=>({...b,[a.url]:{tools:d,requiresAuth:!!c.requiresAuth,error:c.error}})),B(b=>({...b,[a.url]:Object.fromEntries(f.map(a=>[a,!0]))}))}catch(b){x(c=>({...c,[a.url]:{tools:[],error:b.message}}))}finally{z(b=>({...b,[a.url]:!1}))}}},F=(a,b)=>{let c=A[a]||{};B(d=>({...d,[a]:Object.fromEntries(Object.keys(c).map(a=>[a,b]))}))};return(0,d.jsx)(g.default,{isOpen:a,onClose:b,title:"Browse MCP Marketplace",size:"lg",children:(0,d.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("input",{type:"text",value:o,onChange:a=>p(a.target.value),placeholder:"Search by name or description...",className:"flex-1 px-2 py-1.5 bg-card rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,d.jsxs)("select",{value:q,onChange:a=>r(a.target.value),className:"px-2 py-1.5 bg-card rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50",children:[(0,d.jsx)("option",{value:"all",children:"All"}),(0,d.jsx)("option",{value:"authless",children:"Authless"}),(0,d.jsx)("option",{value:"oauth",children:"OAuth"})]})]}),s&&(0,d.jsx)("div",{className:"px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600",children:s}),m&&(0,d.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground text-xs py-4 justify-center",children:[(0,d.jsx)(e.default,{name:"progress_activity",className:"animate-spin text-[18px]"}),(0,d.jsx)("span",{children:"Loading registry..."})]}),!m&&(0,d.jsxs)("div",{className:"flex flex-col gap-1 max-h-[60vh] overflow-y-auto",children:[0===D.length&&(0,d.jsx)("div",{className:"text-center text-xs text-muted-foreground py-6",children:"No servers match filter"}),D.map(a=>{let b=C.has(a.slug||a.name),f=u===a.url,g=w[a.url],i=y[a.url],j=A[a.url]||{},k=Object.keys(j),l=Object.values(j).filter(Boolean).length;return(0,d.jsxs)("div",{className:"rounded border border-transparent hover:border-border",children:[(0,d.jsxs)("div",{className:"flex items-start gap-2 px-2 py-2 hover:bg-black/5 dark:hover:bg-white/5",children:[a.iconUrl?(0,d.jsx)("img",{src:a.iconUrl,alt:"",className:"size-7 rounded shrink-0 object-contain",onError:a=>{a.target.style.display="none"},loading:"lazy",decoding:"async"}):(0,d.jsx)("div",{className:"size-7 rounded bg-card shrink-0"}),(0,d.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,d.jsxs)("div",{className:"flex items-center gap-1.5 flex-wrap",children:[(0,d.jsx)("span",{className:"font-medium text-xs",children:a.title}),a.oauth?(0,d.jsx)("span",{className:"px-1 py-0.5 text-[9px] rounded bg-amber-500/10 text-amber-600",children:"OAuth"}):(0,d.jsx)("span",{className:"px-1 py-0.5 text-[9px] rounded bg-green-500/10 text-green-600",children:"Authless"}),a.toolCount>0&&(0,d.jsxs)("span",{className:"text-[10px] text-muted-foreground",children:[a.toolCount," tools"]})]}),a.description&&(0,d.jsx)("p",{className:"text-[10px] text-muted-foreground line-clamp-2 mt-0.5",children:a.description})]}),(0,d.jsx)("button",{onClick:()=>b?null:void(u===a.url?v(null):(v(a.url),E(a))),disabled:b,className:`shrink-0 px-2 py-1 rounded text-[10px] font-medium transition-colors ${b?"bg-green-500/10 text-green-600 cursor-default":f?"bg-card border border-border text-muted-foreground hover:bg-black/5":"bg-primary/10 border border-primary/40 text-primary hover:bg-primary/20"}`,children:b?"Added":f?"Cancel":"+ Add"})]}),f&&(0,d.jsxs)("div",{className:"px-3 py-2 bg-card/40 border-t border-border flex flex-col gap-2",children:[i&&(0,d.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground text-[10px] py-1",children:[(0,d.jsx)(e.default,{name:"progress_activity",className:"animate-spin text-[14px]"}),(0,d.jsx)("span",{children:"Probing server for tools..."})]}),!i&&g?.requiresAuth&&(0,d.jsx)("p",{className:"text-[10px] text-amber-600 bg-amber-500/10 px-2 py-1 rounded",children:"\uD83D\uDD10 OAuth required. Add now and authenticate after Apply; tool list will be discovered after first connect."}),!i&&g?.error&&!g?.requiresAuth&&(0,d.jsxs)("p",{className:"text-[10px] text-red-600 bg-red-500/10 px-2 py-1 rounded",children:["Probe failed: ",g.error]}),!i&&0===k.length&&!g?.requiresAuth&&!g?.error&&(0,d.jsx)("p",{className:"text-[10px] text-muted-foreground",children:"No tools advertised by server."}),!i&&k.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsxs)("span",{className:"text-[10px] text-muted-foreground",children:[l,"/",k.length," tools enabled"]}),(0,d.jsxs)("div",{className:"flex gap-1",children:[(0,d.jsx)("button",{onClick:()=>F(a.url,!0),className:"text-[10px] text-primary hover:underline",children:"All"}),(0,d.jsx)("span",{className:"text-[10px] text-muted-foreground",children:"\xb7"}),(0,d.jsx)("button",{onClick:()=>F(a.url,!1),className:"text-[10px] text-primary hover:underline",children:"None"})]})]}),(0,d.jsx)("div",{className:"grid grid-cols-2 gap-1 max-h-40 overflow-y-auto",children:k.map(b=>(0,d.jsxs)("label",{className:"flex items-center gap-1.5 text-[10px] cursor-pointer hover:bg-black/5 dark:hover:bg-white/5 px-1 rounded",children:[(0,d.jsx)(h.S,{checked:!!j[b],onCheckedChange:()=>{var c;return c=a.url,void B(a=>({...a,[c]:{...a[c],[b]:!a[c]?.[b]}}))},className:"size-3 [&_svg]:size-2"}),(0,d.jsx)("span",{className:"truncate",children:b})]},b))})]}),(0,d.jsx)("button",{onClick:()=>{let b,d;return d=Object.keys(b=A[a.url]||{}).filter(a=>b[a]),void(c?.({name:a.slug||a.name,title:a.title,description:a.description,url:a.url,transport:a.transport,oauth:a.oauth,toolNames:d}),v(null))},className:"self-end px-2 py-1 rounded text-[10px] font-medium bg-primary text-primary-foreground hover:bg-primary/90",children:"✓ Confirm Add"})]})]},a.url)})]}),(0,d.jsxs)("div",{className:"text-[10px] text-muted-foreground text-right",children:[D.length," of ",k.length," servers"]})]})})}},28907:(a,b,c)=>{"use strict";c.d(b,{default:()=>i});var d=c(86240);c(70433);var e=c(97257);let f={add:"Plus",account_circle:"CircleUser",account_tree:"GitFork",api:"Plug",apps:"LayoutGrid",arrow_back:"ArrowLeft",arrow_downward:"ArrowDown",arrow_forward:"ArrowRight",arrow_upward:"ArrowUp",attach_file:"Paperclip",bar_chart:"BarChart3",block:"Ban",bolt:"Zap",business:"Briefcase",cancel:"X",cast:"Cast",chat:"MessageSquare",check:"Check",check_circle:"CheckCircle2",checklist:"ClipboardCheck",chevron_down:"ChevronDown",chevron_left:"ChevronLeft",chevron_right:"ChevronRight",chevron_up:"ChevronUp",close:"X",cloud:"Cloud",cloud_off:"CloudOff",cloud_sync:"CloudSync",cloud_upload:"CloudUpload",code:"Code2",computer:"Monitor",content_copy:"Copy",cookie:"Cookie",dashboard:"LayoutDashboard",data_array:"Table",data_object:"Braces",data_usage:"BarChart3",dark_mode:"Moon",delete:"Trash2",devices:"MonitorSmartphone",dns:"Network",download:"Download",edit:"Pencil",error:"CircleAlert",expand_more:"ChevronDown",extension:"Blocks",file_upload:"UploadCloud",filter_alt_off:"SlidersHorizontal",folder_open:"FolderOpen",gavel:"Scale",graphic_eq:"AudioWaveform",grid_view:"Grid2X2",group:"Users",help:"CircleHelp",history:"History",hourglass_top:"Timer",hub:"Router",image:"Image",image_search:"ScanSearch",info:"Info",input:"FileInput",key:"Key",keyboard_arrow_down:"ArrowDown",keyboard_arrow_up:"ArrowUp",lan:"Layers",language:"Languages",layers:"Layers",legend_toggle:"ListTree",light_mode:"Sun",link:"Link",link_off:"Link2Off",lock:"Lock",lock_open:"LockOpen",logout:"LogOut",menu:"Menu",menu_book:"BookOpen",mic:"Mic",monitoring:"Activity",monitor:"Monitor",movie:"Clapperboard",music_note:"Music",neurology:"Brain",open_in_new:"ExternalLink",output:"FileOutput",pause_circle:"CirclePause",person:"User",play_arrow:"Play",play_circle:"CirclePlay",playlist_add:"ListPlus",power:"Power",power_off:"PowerOff",power_settings_new:"Power",progress_activity:"Loader2",psychology:"BrainCircuit",public:"Earth",qr_code_scanner:"ScanQrCode",record_voice_over:"Mic",refresh:"RefreshCw",restart_alt:"RotateCcw",restore:"RotateCcw",rocket_launch:"Rocket",route:"Route",save:"Save",savings:"PiggyBank",scatter_plot:"ScatterChart",schedule:"Clock",science:"FlaskConical",search:"Search",search_off:"SearchX",security:"ShieldCheck",send:"Send",settings:"Settings",shield:"Shield",shield_lock:"ShieldCheck",shield_with_heart:"HeartPulse",smart_toy:"Bot",star:"Star",stop:"Square",stop_circle:"CircleStop",sync:"RefreshCw",sync_alt:"RefreshCw",terminal:"Terminal",toggle_off:"ToggleLeft",toggle_on:"ToggleRight",translate:"Languages",travel_explore:"Music4",upload:"Upload",upload_file:"UploadCloud",verified:"BadgeCheck",verified_user:"ShieldCheck",visibility:"Eye",visibility_off:"EyeOff",vpn_key:"KeyRound",vpn_lock:"Lock",warning:"TriangleAlert",wifi:"Wifi",wifi_off:"WifiOff",wifi_tethering:"Wifi"};function g(a){if("number"==typeof a&&Number.isFinite(a))return a;if("string"==typeof a){let b=a.trim().match(/^(\d+(?:\.\d+)?)px$/);if(b)return Number(b[1])}return null}function h({name:a="",className:b,style:c,...i}){let j=e[a]??e[f[a]||String(a).split(/[^a-zA-Z0-9]+/).filter(Boolean).map(a=>a[0].toUpperCase()+a.slice(1)).join("")]??e.Circle,k=function(a=""){let b=String(a).match(/\[(\d+(?:\.\d+)?)px\]/);return b?Number(b[1]):({"text-xs":12,"text-sm":14,"text-base":16,"text-lg":18,"text-xl":20,"text-2xl":24,"text-3xl":30,"text-4xl":36})[String(a).match(/\btext-(xs|sm|base|lg|xl|2xl|3xl|4xl)\b/)?.[0]]||null}(b)??(c&&"object"==typeof c?g(c.width)??g(c.height)??g(c.fontSize):null),l=k?{width:k,height:k}:void 0,m=String(b??"").replace(/\bmaterial-symbols-outlined\b/g,"").replace(/\bfill-1\b/g,"").replace(/\s+/g," ").trim();return(0,d.jsx)(j,{className:m,style:l?{...l,...c}:c,"aria-hidden":"true",...i})}function i({name:a,className:b,style:c}){return(0,d.jsx)(h,{name:a,className:b,style:c})}},29184:(a,b,c)=>{"use strict";c.d(b,{E:()=>i});var d=c(86240);c(70433);var e=c(48884),f=c(89988),g=c(3510);let h=(0,e.F)("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});function i({className:a,variant:b="default",asChild:c=!1,...e}){let j=c?g.bL:"span";return(0,d.jsx)(j,{"data-slot":"badge","data-variant":b,className:(0,f.cn)(h({variant:b}),a),...e})}},30487:(a,b,c)=>{"use strict";c.d(b,{ConfirmModal:()=>f,default:()=>e});var d=c(35062);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/Modal.tsx\" 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/amir/Projects/10Router/src/shared/components/Modal.tsx","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/amir/Projects/10Router/src/shared/components/Modal.tsx","ConfirmModal")},32328:(a,b,c)=>{"use strict";c.d(b,{default:()=>k});var d=c(86240),e=c(28907),f=c(70433),g=c(16467),h=c.n(g),i=c(25988);c(99902);var j=c(67209);function k({isOpen:a,onClose:b}){let[c,g]=(0,f.useState)(""),[h,l]=(0,f.useState)(!1),[m,n]=(0,f.useState)(!1),[o,p]=(0,f.useState)(""),q=c?c.split(/(?=^## )/m).filter(a=>a.startsWith("## ")):[],r=h?q:q.slice(0,3),s=q.length-r.length,t=r.length?i.xI.parse(r.join("\n")):"";return(0,d.jsx)(j.lG,{open:!!a,onOpenChange:a=>!a&&b?.(),children:(0,d.jsxs)(j.Cf,{className:"sm:max-w-3xl",children:[(0,d.jsx)(j.c7,{children:(0,d.jsx)(j.L3,{children:"Change Log"})}),(0,d.jsxs)("div",{className:"max-h-[75vh] overflow-y-auto p-6",children:[m&&(0,d.jsxs)("div",{className:"flex items-center justify-center py-10 text-muted-foreground",children:[(0,d.jsx)(e.default,{name:"progress_activity",className:"animate-spin mr-2"}),"Loading..."]}),o&&(0,d.jsxs)("div",{className:"text-red-500 py-4",children:["Failed to load changelog: ",o]}),!m&&!o&&t&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("div",{className:"changelog-body text-foreground",dangerouslySetInnerHTML:{__html:t}}),s>0&&(0,d.jsxs)("button",{onClick:()=>l(!0),className:"mt-4 w-full py-2 rounded-lg text-sm font-medium text-foreground bg-black/5 dark:bg-white/5 hover:bg-black/10 dark:hover:bg-white/10 transition-colors",children:["Show ",s," more"]})]})]})]})})}i.xI.setOptions({gfm:!0,breaks:!0}),k.propTypes={isOpen:h().bool.isRequired,onClose:h().func.isRequired}},37336:(a,b,c)=>{"use strict";c.d(b,{CardSkeleton:()=>h,PageLoading:()=>f,Skeleton:()=>g,Spinner:()=>e,default:()=>i});var d=c(35062);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/amir/Projects/10Router/src/shared/components/Loading.tsx","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/amir/Projects/10Router/src/shared/components/Loading.tsx","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/amir/Projects/10Router/src/shared/components/Loading.tsx","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/amir/Projects/10Router/src/shared/components/Loading.tsx","CardSkeleton"),i=(0,d.registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/Loading.tsx\" 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/amir/Projects/10Router/src/shared/components/Loading.tsx","default")},38635:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/ProviderInfoCard.tsx\" 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/amir/Projects/10Router/src/shared/components/ProviderInfoCard.tsx","default")},38889:(a,b,c)=>{"use strict";c.d(b,{y:()=>s});var d=c(70433),e=c(19094);let f="[-_/:.]",g=RegExp(`(^|${f})(image|img)(${f}|$)|stable-image|gen[0-9]_image|nanobanana|imagine|t2v|i2v|flux|dall|sdxl|diffusion|embed|rerank|guard|moderation|tts|stt|whisper|voice|speech|audio`,"i"),h=RegExp(`(^|${f})(vision|vl|vlm|multimodal|omni|visual)(${f}|$)|[0-9]\\.[0-9]+v(${f}|$)|(^|${f})glm-[0-9]+v(${f}|$)|(^|[-_/:.])(llava|pixtral|internvl|cogvlm|minicpm-v|moondream|idefics|fuyu)`,"i"),i={vision:!1,pdf:!1,audioInput:!1,videoInput:!1,imageOutput:!1,audioOutput:!1,search:!1,tools:!0,reasoning:!1,thinkingFormat:null,thinkingCanDisable:!0,thinkingRange:null,thinkingEffortSupported:!1,contextWindow:2e5,maxOutput:64e3},j={"claude-fable-5-1":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:128e3},"claude-opus-5":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-5-thinking":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-5-agentic":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-5-thinking-agentic":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4.6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4.7":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4-7":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4.8":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4-6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4-8":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4.8-thinking":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4-8-thinking":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-sonnet-4.6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-sonnet-4-6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-sonnet-5":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-sonnet-5-thinking":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-sonnet-5-agentic":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-sonnet-5-thinking-agentic":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"gpt-image-1":{imageOutput:!0,tools:!1},"glm-5.3-flash":{vision:!0,videoInput:!0,pdf:!0,reasoning:!0,thinkingFormat:"zai",thinkingEffortSupported:!0,contextWindow:1e6,maxOutput:131072},"glm-4.6v":{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"zai",contextWindow:128e3,maxOutput:32768},"glm-4.5v":{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"zai",contextWindow:64e3,maxOutput:16384},"deepseek-v4-flash-vision-exp":{vision:!0,reasoning:!0,thinkingFormat:"deepseek",contextWindow:1e6,maxOutput:384e3},"deepseek-v4.1-flash":{vision:!0,reasoning:!0,thinkingFormat:"deepseek",contextWindow:1e6,maxOutput:384e3},"deepseek-flash":{vision:!0,reasoning:!0,thinkingFormat:"deepseek",contextWindow:128e3,maxOutput:64e3},"vision-model":{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6},"coder-model":{reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6},"kimi-k3":{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:131072},k3:{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:131072},"kimi-for-coding":{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:262144,maxOutput:65536},"kimi-for-coding-highspeed":{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:262144,maxOutput:65536},"kimi-k2.7-code":{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:262144,maxOutput:65536},"kimi-k2.7-code-highspeed":{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:262144,maxOutput:65536},"muse-spark-1.2-contributor-free":{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:1048576,maxOutput:131072},"muse-spark-1.3-contributor-free":{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:1048576,maxOutput:131072},"union-alpha":{vision:!0,contextWindow:262144,maxOutput:131072}},k={vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:372e3,maxOutput:128e3},l={vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:272e3,maxOutput:128e3},m={nvidia:{"minimaxai/minimax-m2.7":{reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:131072},"minimaxai/minimax-m3":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:512e3,maxOutput:131072},"z-ai/glm-5.2":{reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:128e3},"deepseek-ai/deepseek-v4-pro":{reasoning:!0,thinkingFormat:"openai",contextWindow:1e6,maxOutput:65536},"deepseek-ai/deepseek-v4-flash":{reasoning:!0,thinkingFormat:"openai",contextWindow:1e6,maxOutput:65536}},codex:{"gpt-6-astra":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:272e3,maxOutput:128e3},"gpt-5.6-sol":k,"gpt-5.6-sol-review":k,"gpt-5.6-terra":l,"gpt-5.6-terra-review":l,"gpt-5.6-luna":l,"gpt-5.6-luna-review":l},"codebuddy-cn":{"glm-5.2":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!0,contextWindow:1e6,maxOutput:48e3},"glm-5.1":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:48e3},"glm-5.0":{reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:48e3},"glm-5v-turbo":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:64e3},"glm-4.7":{reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:48e3},"minimax-m3":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:512e3,maxOutput:128e3},"kimi-k2.7":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:256e3,maxOutput:32e3},"kimi-k2.6":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:256e3,maxOutput:32e3},hy3:{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:192e3,maxOutput:64e3},"hy4-preview":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:64e3},"glm-5.3":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!0,contextWindow:1e6,maxOutput:48e3},"glm-5.3-flash":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!0,contextWindow:1e6,maxOutput:32e3},"kimi-k3-1":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:32e3},"deepseek-v4-pro":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!0,contextWindow:1e6,maxOutput:5e4},"deepseek-v4.1-flash":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!0,contextWindow:1e6,maxOutput:128e3}},"codebuddy-intl":{"deepseek-v4.1-flash":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!0,contextWindow:1e6,maxOutput:128e3}},qoder:{ultimate:{vision:!0,reasoning:!0,thinkingFormat:"claude-adaptive",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:128e3},performance:{vision:!0,reasoning:!0,thinkingFormat:"claude-adaptive",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:128e3},dmodel:{reasoning:!0,thinkingFormat:"deepseek",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:65536},dfmodel:{reasoning:!0,thinkingFormat:"deepseek",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:65536},gmodel:{reasoning:!0,thinkingFormat:"zai",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:128e3},gfmodel:{vision:!0,reasoning:!0,thinkingFormat:"zai",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:128e3},kmodel_latest:{vision:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:65536},kmodel:{vision:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:256e3,maxOutput:65536},mmodel:{reasoning:!0,thinkingFormat:"minimax",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:512e3},qmodel_latest:{vision:!0,reasoning:!0,thinkingFormat:"qwen",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:65536},qmodel:{vision:!0,reasoning:!0,thinkingFormat:"qwen",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:65536},qfmodel:{vision:!0,reasoning:!0,thinkingFormat:"qwen",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:65536},qmodel_38max:{vision:!0,reasoning:!0,thinkingFormat:"qwen",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:65536}},poolside:{"laguna-s-2.1":{reasoning:!0,thinkingFormat:"openai",contextWindow:1e6,maxOutput:32e3},"laguna-xs-2.1":{reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:32e3}},ollama:{"deepseek-v4.1-flash:cloud":{vision:!0,reasoning:!0,thinkingFormat:"deepseek",contextWindow:1e6,maxOutput:384e3}}},n=[{pattern:"*claude*opus-5*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3}},{pattern:"*claude*opus-4.6*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*opus-4.7*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*opus-4.8*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*sonnet-4.6*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*sonnet-4.7*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*haiku*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*claude*opus*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*claude*sonnet*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*claude*fable*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget",contextWindow:1e6,maxOutput:128e3}},{pattern:"*claude*mythos*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget",contextWindow:1e6,maxOutput:128e3}},{pattern:"*claude-3*",caps:{vision:!0}},{pattern:"*claude*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*gemini*image*",caps:{vision:!0,imageOutput:!0,contextWindow:1048576}},{pattern:"*gemini-3.8*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-level",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini-3.7*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-level",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini-3*pro*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-level",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:65535}},{pattern:"*gemini-3*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-level",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini-2.5*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-budget",thinkingRange:{min:0,max:24576},contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini-2*",caps:{vision:!0,audioInput:!0,videoInput:!0,search:!0,contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini*",caps:{vision:!0,search:!0,contextWindow:1048576}},{pattern:"*gemma*",caps:{vision:!0,contextWindow:128e3}},{pattern:"*nanobanana*",caps:{vision:!0,imageOutput:!0}},{pattern:"*gpt-6*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:272e3,maxOutput:128e3}},{pattern:"*gpt-5*image*",caps:{imageOutput:!0}},{pattern:"*gpt-5*codex*",caps:{reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:4e5,maxOutput:128e3}},{pattern:"*gpt-5*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:4e5,maxOutput:128e3}},{pattern:"*gpt-4o*",caps:{vision:!0,search:!0,contextWindow:128e3,maxOutput:16384}},{pattern:"*gpt-4.1*",caps:{vision:!0,contextWindow:1e6,maxOutput:32768}},{pattern:"*gpt-4-turbo*",caps:{vision:!0,contextWindow:128e3}},{pattern:"*gpt-4*",caps:{contextWindow:128e3}},{pattern:"*gpt-3.5*",caps:{contextWindow:16385,maxOutput:4096}},{pattern:"*gpt-oss*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:128e3}},{pattern:"*o1-mini*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:128e3}},{pattern:"*o1*",caps:{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:1e5}},{pattern:"*o3*",caps:{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:1e5}},{pattern:"*o4*",caps:{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:1e5}},{pattern:"*grok*image*",caps:{imageOutput:!0}},{pattern:"*grok-code*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:256e3}},{pattern:"*grok-4.6*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:5e5,maxOutput:5e5}},{pattern:"*grok-4.5*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:5e5,maxOutput:64e3}},{pattern:"*grok-4*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:256e3}},{pattern:"*grok-3*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:131072}},{pattern:"*grok*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:256e3}},{pattern:"*qwen*vl*",caps:{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:262144}},{pattern:"*qwen*omni*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:262144,maxOutput:65536}},{pattern:"*qwen*coder*",caps:{reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6}},{pattern:"*qwen*max*",caps:{reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6,maxOutput:65536}},{pattern:"*qwen3.5*",caps:{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6,maxOutput:65536}},{pattern:"*qwen3.6*",caps:{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6,maxOutput:65536}},{pattern:"*qwen3.7*",caps:{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6,maxOutput:65536}},{pattern:"*qwen*plus*",caps:{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6,maxOutput:65536}},{pattern:"*qwen*235b*",caps:{reasoning:!0,thinkingFormat:"qwen",contextWindow:262144}},{pattern:"*qwq*",caps:{reasoning:!0,thinkingFormat:"qwen",thinkingCanDisable:!1,contextWindow:131072}},{pattern:"*qwen*",caps:{reasoning:!0,thinkingFormat:"qwen",contextWindow:262144}},{pattern:"*kimi*k3*",caps:{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:131072}},{pattern:"*kimi*for-coding*",caps:{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:262144,maxOutput:65536}},{pattern:"*kimi*k2.7*code*",caps:{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:262144,maxOutput:65536}},{pattern:"*kimi*k2*",caps:{vision:!0,reasoning:!0,thinkingFormat:"kimi",contextWindow:262144,maxOutput:262144}},{pattern:"*kimi*",caps:{reasoning:!0,thinkingFormat:"kimi",contextWindow:262144}},{pattern:"*glm-5.3*",caps:{reasoning:!0,thinkingFormat:"zai",thinkingEffortSupported:!0,contextWindow:2e5,maxOutput:128e3}},{pattern:"*glm-5.2*",caps:{reasoning:!0,thinkingFormat:"zai",thinkingEffortSupported:!0,contextWindow:2e5,maxOutput:128e3}},{pattern:"*glm-5*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5,maxOutput:128e3}},{pattern:"*glm-4.7*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5,maxOutput:128e3}},{pattern:"*glm-4*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5}},{pattern:"*glm*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5}},{pattern:"*deepseek-v4.*",caps:{vision:!0,reasoning:!0,thinkingFormat:"deepseek",thinkingEffortSupported:!0,contextWindow:1e6,maxOutput:128e3}},{pattern:"*deepseek-v4*",caps:{reasoning:!0,thinkingFormat:"deepseek",thinkingEffortSupported:!0,contextWindow:1e6,maxOutput:384e3}},{pattern:"*reasoner*",caps:{reasoning:!0,thinkingFormat:"deepseek",thinkingCanDisable:!1,contextWindow:128e3}},{pattern:"*deepseek-r*",caps:{reasoning:!0,thinkingFormat:"deepseek",thinkingCanDisable:!1,contextWindow:128e3}},{pattern:"*deepseek-chat*",caps:{contextWindow:128e3}},{pattern:"*deepseek*",caps:{reasoning:!0,thinkingFormat:"deepseek",contextWindow:128e3}},{pattern:"*minimax*image*",caps:{imageOutput:!0}},{pattern:"*minimax-m3*",caps:{vision:!0,reasoning:!0,thinkingFormat:"minimax",contextWindow:1048576,maxOutput:512e3}},{pattern:"*minimax-m2.7*",caps:{reasoning:!0,thinkingFormat:"minimax",thinkingCanDisable:!1,contextWindow:204800,maxOutput:131072}},{pattern:"*minimax*",caps:{reasoning:!0,thinkingFormat:"minimax",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:131072}},{pattern:"*mimo*v2.5*",caps:{vision:!0,audioInput:!0,videoInput:!0,contextWindow:1048576,maxOutput:131072}},{pattern:"*mimo*omni*",caps:{vision:!0,audioInput:!0,contextWindow:262144,maxOutput:131072}},{pattern:"*mimo*",caps:{vision:!0,contextWindow:262144,maxOutput:131072}},{pattern:"*llama-4*",caps:{vision:!0,contextWindow:1e6}},{pattern:"*llama*",caps:{contextWindow:128e3}},{pattern:"*codestral*",caps:{contextWindow:256e3}},{pattern:"*mistral-large*",caps:{vision:!0,contextWindow:256e3}},{pattern:"*mistral*",caps:{contextWindow:128e3}},{pattern:"*command-a-vision*",caps:{vision:!0,contextWindow:128e3}},{pattern:"*command*",caps:{contextWindow:128e3}},{pattern:"*sonar*",caps:{search:!0,contextWindow:128e3}},{pattern:"*pplx*",caps:{search:!0,contextWindow:128e3}},{pattern:"*perplexity*",caps:{search:!0,contextWindow:128e3}},{pattern:"*laguna-s-2.1*free*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:32e3}},{pattern:"*laguna-s-2.1*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:1e6,maxOutput:32e3}},{pattern:"*laguna*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:32e3}},{pattern:"*muse*spark*",caps:{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:1048576,maxOutput:131072}},{pattern:"*hunyuan*",caps:{reasoning:!0,thinkingFormat:"hunyuan",contextWindow:262144,maxOutput:262144}},{pattern:"hy3*",caps:{reasoning:!0,thinkingFormat:"hunyuan",contextWindow:262144,maxOutput:262144}},{pattern:"*step-*",caps:{reasoning:!0,thinkingFormat:"step",contextWindow:128e3}},{pattern:"*nemotron*",caps:{reasoning:!0,contextWindow:128e3}},{pattern:"*ling-*",caps:{reasoning:!0,contextWindow:128e3}}],o=["vision","pdf","audioInput","videoInput"],p=null;function q(a,b,c){let d={...i,...a},e=p||("u"<typeof globalThis?null:p=globalThis.__9rCatalogSource||null);if(e){let a=e.getModalities(b,c);if(a)for(let b of o)!0===a[b]&&(d[b]=!0);let f=e.getLimits(b,c);f&&(f.contextWindow>0&&(d.contextWindow=f.contextWindow),f.maxOutput>0&&(d.maxOutput=f.maxOutput))}return!d.vision&&function(a){if(!a)return!1;let b=String(a).toLowerCase();return!g.test(b)&&h.test(b)}(c)&&(d.vision=!0),d}let r=new Set(["deepseek/deepseek-v4-pro","deepseek/deepseek-v4-flash","deepseek/deepseek-v4-flash-fast","zai-org/glm-5.3","zai-org/glm-5.2","zai-org/glm-5.2-fast","zai-org/glm-5.1","zai-org/glm-5","minimaxai/minimax-m2.7","minimax/minimax-m2.7-free","minimaxai/minimax-m2.5","xiaomi/mimo-v2.5-pro","qwen/qwen3.6-max-preview","qwen/qwen3.7-max","meituan/longcat-2.0:free","stepfun/step-3.5-flash","tencent/hy4-preview","tencent/hy3","tencent/hy3-paid","nvidia/nemotron-3-ultra-550b-a55b","poolside/laguna-s-2.1-free","inclusionai/ling-3.0-flash-free","inclusionai/ling-3.0-flash-sante:free"]);function s(){let[a,b]=(0,d.useState)(()=>({})),[c,f]=(0,d.useState)(()=>({}));return{getCaps:(0,d.useCallback)(b=>(function(a,b,c){if(!c)return null;if(a[c])return a[c];let d=c.includes("/")?c.slice(c.indexOf("/")+1):c;if(b[d])return b[d];let f=function(a,b){if(!b)return{...i};let c=b.includes("/")?b.split("/").pop():b;if("commandcode"===a||"cmc"===a){let a=m.commandcode;return a?.[b]?{...i,...a[b]}:a?.[c]?{...i,...a[c]}:{...i,reasoning:!0,thinkingFormat:"commandcode",thinkingEffortSupported:!0,vision:!function(a){let b=String(a||"").toLowerCase();if(r.has(b))return!0;for(let a of r){let c=a.includes("/")?a.slice(a.lastIndexOf("/")+1):a;if(b===c||b.endsWith("/"+c))return!0}return!1}(b),contextWindow:1e6,maxOutput:384e3}}if(a){let d=m[a];if(d?.[b])return{...i,...d[b]};if(d?.[c])return{...i,...d[c]}}if(j[c])return{...i,...j[c]};if(j[b])return{...i,...j[b]};for(let{pattern:d,caps:f}of n)if((0,e.gH)(d,c)||(0,e.gH)(d,b))return q(f,a,b);return q(null,a,b)}(c.includes("/")?c.slice(0,c.indexOf("/")):null,d);return{vision:f.vision,search:f.search,reasoning:f.reasoning,contextWindow:f.contextWindow,maxOutput:f.maxOutput}})(a,c,b),[a,c])}}},39100:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/ModelSelectModal.tsx\" 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/amir/Projects/10Router/src/shared/components/ModelSelectModal.tsx","default")},42235:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/ChangelogModal.tsx\" 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/amir/Projects/10Router/src/shared/components/ChangelogModal.tsx","default")},43203:(a,b,c)=>{Promise.resolve().then(c.bind(c,77606)),Promise.resolve().then(c.bind(c,77874)),Promise.resolve().then(c.bind(c,42235)),Promise.resolve().then(c.bind(c,43213)),Promise.resolve().then(c.bind(c,55663)),Promise.resolve().then(c.bind(c,49651)),Promise.resolve().then(c.bind(c,48061)),Promise.resolve().then(c.bind(c,72652)),Promise.resolve().then(c.bind(c,43611)),Promise.resolve().then(c.bind(c,14130)),Promise.resolve().then(c.bind(c,54637)),Promise.resolve().then(c.bind(c,50560)),Promise.resolve().then(c.bind(c,84581)),Promise.resolve().then(c.bind(c,6764)),Promise.resolve().then(c.bind(c,89829)),Promise.resolve().then(c.bind(c,87986)),Promise.resolve().then(c.bind(c,75394)),Promise.resolve().then(c.bind(c,51899)),Promise.resolve().then(c.bind(c,37336)),Promise.resolve().then(c.bind(c,52691)),Promise.resolve().then(c.bind(c,75512)),Promise.resolve().then(c.bind(c,30487)),Promise.resolve().then(c.bind(c,39100)),Promise.resolve().then(c.bind(c,19707)),Promise.resolve().then(c.bind(c,54710)),Promise.resolve().then(c.bind(c,38635)),Promise.resolve().then(c.bind(c,60963)),Promise.resolve().then(c.bind(c,49409)),Promise.resolve().then(c.bind(c,73013)),Promise.resolve().then(c.bind(c,93780)),Promise.resolve().then(c.bind(c,90635)),Promise.resolve().then(c.bind(c,55020)),Promise.resolve().then(c.bind(c,68330))},43213:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/ComboFormModal.tsx\" 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/amir/Projects/10Router/src/shared/components/ComboFormModal.tsx","default")},43611:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/Footer.tsx\" 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/amir/Projects/10Router/src/shared/components/Footer.tsx","default")},46009:(a,b,c)=>{"use strict";c.d(b,{default:()=>n});var d=c(86240),e=c(70433),f=c(16467),g=c.n(f),h=c(87121),i=c(81501),j=c(63265),k=c(29184),l=c(83777),m=c(86177);function n({isOpen:a,connection:b,proxyPools:c,onSave:f,onClose:g}){let[o,p]=(0,e.useState)({name:"",priority:1,apiKey:""}),[q,r]=(0,e.useState)({azureEndpoint:"",apiVersion:"2024-10-01-preview",deployment:"",organization:""}),[s,t]=(0,e.useState)(""),[u,v]=(0,e.useState)(!1),[w,x]=(0,e.useState)(null),[y,z]=(0,e.useState)(!1),[A,B]=(0,e.useState)(null),[C,D]=(0,e.useState)(!1),E=b?.authType==="oauth",F=b?.provider==="azure",G=!!b&&((0,m.mq)(b.provider)||(0,m.gb)(b.provider)),H=b&&m.Q2?.[b.provider]?.regions||null,I=()=>{if(H&&s)return{...b?.providerSpecificData||{},region:s}},J=async()=>{if(b?.provider){v(!0),x(null);try{let a=await fetch(`/api/providers/${b.id}/test`,{method:"POST"}),c=await a.json();x(c.valid?"success":"failed")}catch{x("failed")}finally{v(!1)}}},K=async()=>{if(b?.provider&&o.apiKey){z(!0),B(null);try{let a=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:b.provider,apiKey:o.apiKey,...F?{providerSpecificData:q}:{},...H?{providerSpecificData:I()}:{}})}),c=await a.json();B(c.valid?"success":"failed")}catch{B("failed")}finally{z(!1)}}},L=async()=>{if(b){D(!0);try{let a={name:o.name,priority:o.priority};if(!E&&o.apiKey){a.apiKey=o.apiKey;let c="success"===A;if(!c)try{z(!0),B(null);let a=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:b.provider,apiKey:o.apiKey,...F?{providerSpecificData:q}:{},...H?{providerSpecificData:I()}:{}})});c=!!(await a.json()).valid,B(c?"success":"failed")}catch{B("failed")}finally{z(!1)}c&&(a.testStatus="active",a.lastError=null,a.lastErrorAt=null)}F&&(a.providerSpecificData={azureEndpoint:q.azureEndpoint,apiVersion:q.apiVersion,deployment:q.deployment,organization:q.organization}),H&&s&&(a.providerSpecificData=I()),await f(a)}finally{D(!1)}}};return b?(0,d.jsx)(h.default,{isOpen:a,title:"Edit Connection",onClose:g,children:(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsx)("label",{className:"text-sm font-medium",children:"Name"}),(0,d.jsx)(i.p,{value:o.name,onChange:a=>p({...o,name:a.target.value}),placeholder:E?"Account name":"Production Key"})]}),E&&b.email&&(0,d.jsxs)("div",{className:"bg-sidebar/50 p-3 rounded-lg",children:[(0,d.jsx)("p",{className:"text-sm text-muted-foreground mb-1",children:"Email"}),(0,d.jsx)("p",{className:"font-medium",children:b.email})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsx)("label",{className:"text-sm font-medium",children:"Priority"}),(0,d.jsx)(i.p,{type:"number",value:o.priority,onChange:a=>p({...o,priority:Number.parseInt(a.target.value,10)||1})})]}),!E&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-1.5 flex-1",children:[(0,d.jsx)("label",{className:"text-sm font-medium",children:"API Key"}),(0,d.jsx)(i.p,{type:"password",value:o.apiKey,onChange:a=>p({...o,apiKey:a.target.value}),placeholder:"Enter new API key"}),(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Leave blank to keep the current API key."})]}),(0,d.jsx)("div",{className:"pt-6",children:(0,d.jsx)(j.$,{onClick:K,disabled:!o.apiKey||y||C,variant:"secondary",children:y?"Checking...":"Check"})})]}),A&&(0,d.jsx)(k.E,{variant:"success"===A?"default":"destructive",children:"success"===A?"Valid":"Invalid"})]}),F&&(0,d.jsxs)("div",{className:"bg-sidebar/50 p-4 rounded-lg border border-accent/20",children:[(0,d.jsx)("h3",{className:"font-semibold mb-3 text-sm",children:"Azure OpenAI Configuration"}),(0,d.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsx)("label",{className:"text-sm font-medium",children:"Azure Endpoint"}),(0,d.jsx)(i.p,{value:q.azureEndpoint,onChange:a=>r({...q,azureEndpoint:a.target.value}),placeholder:"https://your-resource.openai.azure.com"}),(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Your Azure OpenAI resource endpoint URL"})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsx)("label",{className:"text-sm font-medium",children:"Deployment Name"}),(0,d.jsx)(i.p,{value:q.deployment,onChange:a=>r({...q,deployment:a.target.value}),placeholder:"gpt-4"}),(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"The deployment name in your Azure resource"})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsx)("label",{className:"text-sm font-medium",children:"API Version"}),(0,d.jsx)(i.p,{value:q.apiVersion,onChange:a=>r({...q,apiVersion:a.target.value}),placeholder:"2024-10-01-preview"}),(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Azure OpenAI API version to use"})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsx)("label",{className:"text-sm font-medium",children:"Organization"}),(0,d.jsx)(i.p,{value:q.organization,onChange:a=>r({...q,organization:a.target.value}),placeholder:"Organization ID"}),(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Required for billing"})]})]})]}),H&&(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsx)("label",{className:"text-sm font-medium",children:"Region"}),(0,d.jsxs)(l.l6,{value:s,onValueChange:a=>t(a),children:[(0,d.jsx)(l.bq,{children:(0,d.jsx)(l.yv,{placeholder:"Select an option"})}),(0,d.jsx)(l.gC,{children:H.map(a=>(0,d.jsx)(l.eb,{value:a.id,children:a.label},a.id))})]})]}),!G&&!F&&(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)(j.$,{onClick:J,variant:"secondary",disabled:u,children:u?"Testing...":"Test Connection"}),w&&(0,d.jsx)(k.E,{variant:"success"===w?"default":"destructive",children:"success"===w?"Valid":"Failed"})]}),(0,d.jsx)(j.$,{onClick:L,className:"w-full",disabled:C,children:C?"Saving...":"Save"})]})}):null}n.propTypes={isOpen:g().bool.isRequired,connection:g().shape({id:g().string,name:g().string,email:g().string,priority:g().number,authType:g().string,provider:g().string,providerSpecificData:g().object}),proxyPools:g().arrayOf(g().shape({id:g().string,name:g().string})),onSave:g().func.isRequired,onClose:g().func.isRequired}},47181:(a,b,c)=>{"use strict";c.d(b,{i:()=>f});var d=c(37372);let e=0,f=(0,d.v)((a,b)=>({notifications:[],addNotification:c=>{let d=++e,f={id:d,type:c.type||"info",message:c.message,title:c.title||null,duration:c.duration??5e3,dismissible:c.dismissible??!0,createdAt:Date.now()};return a(a=>({notifications:[...a.notifications,f]})),f.duration>0&&setTimeout(()=>b().removeNotification(d),f.duration),d},removeNotification:b=>{a(a=>({notifications:a.notifications.filter(a=>a.id!==b)}))},clearAll:()=>a({notifications:[]}),success:(a,c)=>b().addNotification({type:"success",message:a,title:c}),error:(a,c)=>b().addNotification({type:"error",message:a,title:c,duration:8e3}),warning:(a,c)=>b().addNotification({type:"warning",message:a,title:c}),info:(a,c)=>b().addNotification({type:"info",message:a,title:c})}))},48061:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/EntityCard.tsx\" 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/amir/Projects/10Router/src/shared/components/EntityCard.tsx","default")},49409:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/SegmentedControl.tsx\" 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/amir/Projects/10Router/src/shared/components/SegmentedControl.tsx","default")},49451:(a,b,c)=>{"use strict";c.d(b,{default:()=>l});var d=c(86240),e=c(28907),f=c(70433),g=c(89900),h=c(27720),i=c(67209),j=c(31952);let k=a=>({en:{name:"English",flag:"\uD83C\uDDFA\uD83C\uDDF8"},fa:{name:"فارسی",flag:"\uD83C\uDDEE\uD83C\uDDF7"}})[a]||{name:a,flag:"\uD83C\uDF10"};function l({className:a="",isOpen:b,onClose:c,hideTrigger:m=!1}){let[n,o]=(0,f.useState)("en"),[p,q]=(0,f.useState)(!1),[r,s]=(0,f.useState)(!1),t="boolean"==typeof b,u=t?b:r,v=(a,b=n)=>{t?!a&&c&&c(b):s(a)},w=async a=>{if(a!==n&&!p){q(!0);try{await fetch("/api/locale",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({locale:a})}),await (0,h.wn)(),o(a),v(!1,a)}catch(a){console.error("Failed to set locale:",a)}finally{q(!1)}}};return(0,d.jsxs)("div",{className:a,children:[!m&&(0,d.jsxs)(j.m_,{children:[(0,d.jsx)(j.k$,{asChild:!0,children:(0,d.jsxs)("button",{onClick:()=>v(!u),disabled:p,className:"flex items-center gap-2 px-3 py-2 rounded-lg text-muted-foreground hover:text-foreground hover:bg-card/60 transition-colors","data-i18n-skip":"true",children:[(0,d.jsx)(e.default,{name:"language",className:"text-[20px]"}),(0,d.jsx)("span",{className:"text-sm font-medium",children:k(n).name}),(0,d.jsx)("span",{className:"text-lg",children:k(n).flag})]})}),(0,d.jsx)(j.ZI,{children:"Language"})]}),(0,d.jsx)(i.lG,{open:u,onOpenChange:a=>!a&&v(!1),children:(0,d.jsxs)(i.Cf,{className:"sm:max-w-2xl","data-i18n-skip":"true",children:[(0,d.jsx)(i.c7,{children:(0,d.jsx)(i.L3,{children:"Select Language"})}),(0,d.jsx)("div",{className:"p-6 overflow-y-auto",children:(0,d.jsx)("div",{className:"grid grid-cols-[repeat(auto-fill,minmax(100px,1fr))] gap-2",children:g.YZ.map(a=>{let b=n===a,c=k(a);return(0,d.jsxs)("button",{onClick:()=>w(a),disabled:p,className:`flex flex-col items-center justify-start gap-1 px-2 py-3 rounded-lg text-xs font-medium transition-colors w-full ${b?"bg-primary/15 text-primary ring-2 ring-primary":"text-foreground hover:bg-black/5 dark:hover:bg-white/5"} ${p?"opacity-70 cursor-wait":""}`,title:c.name,children:[(0,d.jsx)("span",{className:"text-2xl",children:c.flag}),(0,d.jsx)("span",{className:"text-center leading-tight line-clamp-2 h-8 flex items-center",children:c.name}),b&&(0,d.jsx)(e.default,{name:"check",className:"text-sm"})]},a)})})})]})})]})}},49651:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/EditConnectionModal.tsx\" 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/amir/Projects/10Router/src/shared/components/EditConnectionModal.tsx","default")},50560:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/HeaderMenu.tsx\" 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/amir/Projects/10Router/src/shared/components/HeaderMenu.tsx","default")},51899:(a,b,c)=>{"use strict";c.d(b,{CardGrid:()=>h,Page:()=>e,PageHeader:()=>f,Section:()=>g});var d=c(35062);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call Page() from the server but Page 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/amir/Projects/10Router/src/shared/components/layouts/Page.tsx","Page"),f=(0,d.registerClientReference)(function(){throw Error("Attempted to call PageHeader() from the server but PageHeader 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/amir/Projects/10Router/src/shared/components/layouts/Page.tsx","PageHeader"),g=(0,d.registerClientReference)(function(){throw Error("Attempted to call Section() from the server but Section 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/amir/Projects/10Router/src/shared/components/layouts/Page.tsx","Section"),h=(0,d.registerClientReference)(function(){throw Error("Attempted to call CardGrid() from the server but CardGrid 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/amir/Projects/10Router/src/shared/components/layouts/Page.tsx","CardGrid")},52691:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/ManualConfigModal.tsx\" 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/amir/Projects/10Router/src/shared/components/ManualConfigModal.tsx","default")},53546:(a,b,c)=>{"use strict";c.d(b,{CardSkeleton:()=>l,PageLoading:()=>j,Skeleton:()=>k,Spinner:()=>i,default:()=>m});var d=c(86240),e=c(5174),f=c(28907),g=c(21096),h=c(4271);function i({size:a="md",className:b}){return(0,d.jsx)(f.default,{name:"progress_activity",className:(0,e.cn)("animate-spin text-primary",{sm:"size-4",md:"size-6",lg:"size-8",xl:"size-12"}[a],b)})}function j({message:a="Loading..."}){return(0,d.jsxs)("div",{className:"fixed inset-0 z-50 flex flex-col items-center justify-center bg-background",children:[(0,d.jsx)(i,{size:"xl"}),(0,d.jsx)("p",{className:"mt-4 text-muted-foreground",children:a})]})}function k({className:a,...b}){return(0,d.jsx)(g.E,{className:a,...b})}function l({className:a}){return(0,d.jsx)(h.Zp,{"aria-hidden":!0,className:(0,e.cn)("h-full overflow-hidden",a),children:(0,d.jsx)(h.Wu,{children:(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,d.jsx)(k,{className:"size-10 shrink-0 rounded-xl"}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)(k,{className:"h-4 w-2/3"}),(0,d.jsxs)("div",{className:"mt-2 flex items-center gap-1.5",children:[(0,d.jsx)(k,{className:"h-5 w-20 rounded-full"}),(0,d.jsx)(k,{className:"h-5 w-14 rounded-full"})]})]}),(0,d.jsx)(k,{className:"size-4 shrink-0 rounded-full"})]})})})}function m({type:a="spinner",...b}){switch(a){case"page":return(0,d.jsx)(j,{...b});case"skeleton":return(0,d.jsx)(k,{...b});case"card":return(0,d.jsx)(l,{});default:return(0,d.jsx)(i,{...b})}}},54204:(a,b,c)=>{"use strict";c.d(b,{d:()=>d});let d={claude:{id:"claude",name:"Claude Code",image:"/providers/claude.png",color:"#D97757",description:"Anthropic Claude Code CLI",configType:"env",envVars:{baseUrl:"ANTHROPIC_BASE_URL",model:"ANTHROPIC_MODEL",opusModel:"ANTHROPIC_DEFAULT_OPUS_MODEL",sonnetModel:"ANTHROPIC_DEFAULT_SONNET_MODEL",fableModel:"ANTHROPIC_DEFAULT_FABLE_MODEL",haikuModel:"ANTHROPIC_DEFAULT_HAIKU_MODEL"},modelAliases:["default","sonnet","opus","fable","haiku","opusplan"],settingsFile:"~/.claude/settings.json",defaultModels:[{id:"fable",name:"Claude Fable",alias:"fable",envKey:"ANTHROPIC_DEFAULT_FABLE_MODEL",defaultValue:"cc/claude-fable-5"},{id:"opus",name:"Claude Opus",alias:"opus",envKey:"ANTHROPIC_DEFAULT_OPUS_MODEL",defaultValue:"cc/claude-opus-5"},{id:"sonnet",name:"Claude Sonnet",alias:"sonnet",envKey:"ANTHROPIC_DEFAULT_SONNET_MODEL",defaultValue:"cc/claude-sonnet-5"},{id:"haiku",name:"Claude Haiku",alias:"haiku",envKey:"ANTHROPIC_DEFAULT_HAIKU_MODEL",defaultValue:"cc/claude-haiku-4-5-20251001"}]},codex:{id:"codex",name:"OpenAI Codex CLI / App",image:"/providers/codex.png",color:"#10A37F",description:"OpenAI Codex CLI",configType:"custom"},opencode:{id:"opencode",name:"OpenCode",image:"/providers/opencode.png",color:"#E87040",description:"OpenCode AI Terminal Assistant",configType:"custom"},cowork:{id:"cowork",name:"Claude Cowork",image:"/providers/claude.png",color:"#D97757",description:"Claude Desktop Cowork (third-party inference)",configType:"custom"},dsh:{id:"dsh",name:"DSH - DeepSeek Harness",image:"/providers/deepseek.png",color:"#4D6BFE",description:"DeepSeek Harness (dsh web) provider",configType:"custom"},cursor:{id:"cursor",name:"Cursor",image:"/providers/cursor.png",color:"#000000",description:"Cursor AI Code Editor",configType:"guide",requiresExternalUrl:!0,notes:[{type:"warning",text:"Requires Cursor Pro account to use this feature."},{type:"cloudCheck",text:"Cursor routes requests through its own server, so local endpoint is not supported. Please enable Tunnel or Cloud Endpoint in Settings."}],guideSteps:[{step:1,title:"Open Settings",desc:"Go to Settings → Models"},{step:2,title:"Enable OpenAI API",desc:'Enable "OpenAI API key" option'},{step:3,title:"Base URL",value:"{{baseUrl}}",copyable:!0},{step:4,title:"API Key",type:"apiKeySelector"},{step:5,title:"Add Custom Model",desc:'Click "View All Model" → "Add Custom Model"'},{step:6,title:"Select Model",type:"modelSelector"}]}}},54637:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/Header.tsx\" 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/amir/Projects/10Router/src/shared/components/Header.tsx","default")},54710:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/OAuthModal.tsx\" 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/amir/Projects/10Router/src/shared/components/OAuthModal.tsx","default")},54928:(a,b,c)=>{"use strict";c.d(b,{default:()=>l});var d=c(86240),e=c(70433),f=c(16467),g=c.n(f),h=c(87121),i=c(81501),j=c(63265),k=c(29184);function l({isOpen:a,onClose:b,onCreated:c,onSaved:f,node:g}){let m=!!g,[n,o]=(0,e.useState)({name:"",prefix:"",baseUrl:"https://api.openai.com/v1"}),[p,q]=(0,e.useState)(!1),[r,s]=(0,e.useState)(""),[t,u]=(0,e.useState)(""),[v,w]=(0,e.useState)(!1),[x,y]=(0,e.useState)(null),z=async()=>{if(n.name.trim()&&n.prefix.trim()&&n.baseUrl.trim()){q(!0);try{let a=m?`/api/provider-nodes/${g.id}`:"/api/provider-nodes",b={name:n.name,prefix:n.prefix,baseUrl:n.baseUrl};m||(b.type="custom-embedding");let d=await fetch(a,{method:m?"PUT":"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)}),e=await d.json();d.ok&&(m?f?.(e.node):c?.(e.node))}catch(a){console.log("Error saving custom embedding node:",a)}finally{q(!1)}}},A=async()=>{w(!0);try{let a=await fetch("/api/provider-nodes/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:n.baseUrl,apiKey:r,type:"custom-embedding",modelId:t.trim()||void 0})}),b=await a.json();y(b)}catch{y({valid:!1,error:"Network error"})}finally{w(!1)}};return(0,d.jsx)(h.default,{isOpen:a,title:m?"Edit Custom Embedding":"Add Custom Embedding",onClose:b,children:(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsx)("label",{className:"text-sm font-medium",children:"Name"}),(0,d.jsx)(i.p,{value:n.name,onChange:a=>o({...n,name:a.target.value}),placeholder:"Voyage AI"}),(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Required. A friendly label for this embedding provider."})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsx)("label",{className:"text-sm font-medium",children:"Prefix"}),(0,d.jsx)(i.p,{value:n.prefix,onChange:a=>o({...n,prefix:a.target.value}),placeholder:"voyage"}),(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Required. Used as the provider prefix for model IDs (e.g. voyage/voyage-3)."})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsx)("label",{className:"text-sm font-medium",children:"Base URL"}),(0,d.jsx)(i.p,{value:n.baseUrl,onChange:a=>o({...n,baseUrl:a.target.value}),placeholder:"https://api.voyageai.com/v1"}),(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Most embedding APIs are OpenAI-compatible: Voyage, Cohere, Jina, Mistral, Together..."})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsx)("label",{className:"text-sm font-medium",children:"API Key (for Check)"}),(0,d.jsx)(i.p,{type:"password",value:r,onChange:a=>s(a.target.value)})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsx)("label",{className:"text-sm font-medium",children:"Model ID (for Check)"}),(0,d.jsx)(i.p,{value:t,onChange:a=>u(a.target.value),placeholder:"e.g. voyage-3, embed-english-v3.0, text-embedding-3-small"}),(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Required for validation. Will send a test embeddings request."})]}),(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)(j.$,{onClick:A,disabled:!r||!t.trim()||v||!n.baseUrl.trim(),variant:"secondary",children:v?"Checking...":"Check"}),(()=>{if(!x)return null;let{valid:a,error:b,dimensions:c}=x;return a?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(k.E,{variant:"default",children:"Valid"}),c&&(0,d.jsxs)("span",{className:"text-sm text-muted-foreground",children:[c," dims"]})]}):(0,d.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,d.jsx)(k.E,{variant:"destructive",children:"Invalid"}),b&&(0,d.jsx)("span",{className:"text-sm text-red-500",children:b})]})})()]}),(0,d.jsx)(j.$,{onClick:z,className:"w-full",disabled:!n.name.trim()||!n.prefix.trim()||!n.baseUrl.trim()||p,children:p?m?"Saving...":"Creating...":m?"Save":"Create"})]})})}l.propTypes={isOpen:g().bool.isRequired,onClose:g().func.isRequired,onCreated:g().func,onSaved:g().func,node:g().shape({id:g().string,name:g().string,prefix:g().string,baseUrl:g().string})}},55020:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/UsageStats.tsx\" 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/amir/Projects/10Router/src/shared/components/UsageStats.tsx","default")},55204:(a,b,c)=>{"use strict";c.d(b,{default:()=>e});var d=c(86240);function e({children:a}){return(0,d.jsxs)("div",{className:"min-h-screen flex flex-col relative bg-background transition-colors duration-500 overflow-x-hidden selection:bg-primary/20 selection:text-foreground",children:[(0,d.jsx)("div",{className:"fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[800px] h-[800px] bg-primary/5 dark:bg-primary/5 rounded-full blur-[100px] pointer-events-none z-0"}),(0,d.jsx)("div",{className:"fixed bottom-0 right-0 w-[600px] h-[600px] bg-orange-200/20 dark:bg-orange-900/10 rounded-full blur-[120px] pointer-events-none z-0 translate-y-1/3 translate-x-1/3"}),(0,d.jsx)("main",{className:"flex-1 flex flex-col items-center justify-center p-4 sm:p-6 z-10 w-full h-full",children:a})]})}},55663:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/CursorAuthModal.tsx\" 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/amir/Projects/10Router/src/shared/components/CursorAuthModal.tsx","default")},57145:(a,b,c)=>{"use strict";c.d(b,{C:()=>e});var d=c(70433);function e(a=2e3){let[b,c]=(0,d.useState)(null),f=(0,d.useRef)(null);return{copied:b,copy:(0,d.useCallback)((b,d="default")=>{(async()=>{if(navigator?.clipboard?.writeText)await navigator.clipboard.writeText(b);else{let a=document.createElement("textarea");a.value=b,a.style.position="fixed",a.style.opacity="0",document.body.appendChild(a),a.select(),document.execCommand("copy"),document.body.removeChild(a)}})(),c(d),f.current&&clearTimeout(f.current),f.current=setTimeout(()=>{c(null)},a)},[a])}}},57275:(a,b,c)=>{Promise.resolve().then(c.bind(c,54928)),Promise.resolve().then(c.bind(c,9656)),Promise.resolve().then(c.bind(c,32328)),Promise.resolve().then(c.bind(c,98279)),Promise.resolve().then(c.bind(c,85405)),Promise.resolve().then(c.bind(c,46009)),Promise.resolve().then(c.bind(c,51)),Promise.resolve().then(c.bind(c,11442)),Promise.resolve().then(c.bind(c,66453)),Promise.resolve().then(c.bind(c,87556)),Promise.resolve().then(c.bind(c,79517)),Promise.resolve().then(c.bind(c,82466)),Promise.resolve().then(c.bind(c,28907)),Promise.resolve().then(c.bind(c,89630)),Promise.resolve().then(c.bind(c,49451)),Promise.resolve().then(c.bind(c,55204)),Promise.resolve().then(c.bind(c,73865)),Promise.resolve().then(c.bind(c,19509)),Promise.resolve().then(c.bind(c,53546)),Promise.resolve().then(c.bind(c,94725)),Promise.resolve().then(c.bind(c,22354)),Promise.resolve().then(c.bind(c,87121)),Promise.resolve().then(c.bind(c,16582)),Promise.resolve().then(c.bind(c,5409)),Promise.resolve().then(c.bind(c,71e3)),Promise.resolve().then(c.bind(c,92393)),Promise.resolve().then(c.bind(c,92249)),Promise.resolve().then(c.bind(c,12710)),Promise.resolve().then(c.bind(c,70047)),Promise.resolve().then(c.bind(c,77562)),Promise.resolve().then(c.bind(c,62648)),Promise.resolve().then(c.bind(c,82812)),Promise.resolve().then(c.bind(c,91236))},58503:(a,b,c)=>{"use strict";c.d(b,{Fc:()=>h,TN:()=>i});var d=c(86240);c(70433);var e=c(48884),f=c(89988);let g=(0,e.F)("group/alert relative grid w-full gap-0.5 rounded-lg border px-4 py-3 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-card text-card-foreground",destructive:"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current"}},defaultVariants:{variant:"default"}});function h({className:a,variant:b,...c}){return(0,d.jsx)("div",{"data-slot":"alert",role:"alert",className:(0,f.cn)(g({variant:b}),a),...c})}function i({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"alert-description",className:(0,f.cn)("text-sm text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4",a),...b})}},59263:(a,b,c)=>{"use strict";c.d(b,{c:()=>e});var d=c(70433);function e(){let[a,b]=(0,d.useState)(!1),[c,e]=(0,d.useState)(!1),[f,g]=(0,d.useState)(!1),[h,i]=(0,d.useState)(!1),j=(0,d.useRef)([]),k=(0,d.useCallback)(async()=>{let a=Date.now()+15e3;for(;Date.now()<a;){try{if(!(await fetch("/api/health",{cache:"no-store"})).ok)break}catch{break}await new Promise(a=>{let b=setTimeout(a,1e3);j.current.push(b)})}Date.now()>=a-1e3?i(!0):g(!0)},[]),l=(0,d.useCallback)(async()=>{e(!0);try{await fetch("/api/version/shutdown",{method:"POST"})}catch{}b(!1),k()},[k]);return{confirmOpen:a,shuttingDown:c,stopped:f,timedOut:h,open:(0,d.useCallback)(()=>{i(!1),g(!1),b(!0)},[]),confirm:l,reset:(0,d.useCallback)(()=>{b(!1),e(!1),g(!1),i(!1)},[])}}},60963:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/RequestLogger.tsx\" 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/amir/Projects/10Router/src/shared/components/RequestLogger.tsx","default")},62648:(a,b,c)=>{"use strict";c.d(b,{default:()=>m});var d=c(86240),e=c(70433),f=c(59519);function g(a){return()=>{}}function h(){return!1}function i(){return!1}var j=c(5174),k=c(28907),l=c(31952);function m({className:a,variant:b="default"}){let{isDark:c,toggleTheme:n}=function(){let{theme:a,setTheme:b,toggleTheme:c,initTheme:d}=(0,f.A)(),j=(0,e.useSyncExternalStore)(g,h,i);return{theme:a,setTheme:b,toggleTheme:c,isDark:"dark"===a||"system"===a&&j}}(),o={default:(0,j.cn)("flex items-center justify-center size-10 rounded-full","text-muted-foreground hover:text-foreground","hover:bg-muted transition-colors"),card:(0,j.cn)("flex items-center justify-center size-11 rounded-full","bg-card/60 hover:bg-card","border border-border","backdrop-blur-md shadow-sm hover:shadow-md","text-muted-foreground hover:text-foreground","transition-all group")};return(0,d.jsxs)(l.m_,{children:[(0,d.jsx)(l.k$,{asChild:!0,children:(0,d.jsx)("button",{onClick:n,className:(0,j.cn)(o[b],a),"aria-label":`Switch to ${c?"light":"dark"} mode`,children:(0,d.jsx)(k.default,{name:c?"light_mode":"dark_mode",className:(0,j.cn)("text-[22px]","card"===b&&"transition-transform duration-300 group-hover:rotate-12")})})}),(0,d.jsx)(l.ZI,{children:`Switch to ${c?"light":"dark"} mode`})]})}},63998:(a,b,c)=>{"use strict";c.d(b,{S:()=>h});var d=c(86240);c(70433);var e=c(89988),f=c(26338),g=c(48985);function h({className:a,...b}){return(0,d.jsx)(f.bL,{"data-slot":"checkbox",className:(0,e.cn)("peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input shadow-xs transition-shadow outline-none group-has-disabled/field:opacity-50 group-has-[:focus-visible]/field-label:ring-0 group-has-[:focus-visible]/field-label:not-data-checked:border-input after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground group-has-[:focus-visible]/field-label:data-checked:border-primary dark:data-checked:bg-primary",a),...b,children:(0,d.jsx)(f.C1,{"data-slot":"checkbox-indicator",className:"grid place-content-center text-current transition-none [&>svg]:size-3.5",children:(0,d.jsx)(g.A,{})})})}},66453:(a,b,c)=>{"use strict";c.d(b,{default:()=>k});var d=c(86240),e=c(4459),f=c.n(e),g=c(99902);let h=[{label:"Features",href:"#features"},{label:"Pricing",href:"#pricing"},{label:"Changelog",href:"#"}],i=[{label:"Documentation",href:"#"},{label:"API Reference",href:"#"},{label:"Help Center",href:"#"}],j=[{label:"About",href:"#"},{label:"Blog",href:"#"},{label:"Contact",href:"#"}];function k(a){return(0,d.jsx)("footer",{className:"bg-background border-t border-border pt-16 pb-12",children:(0,d.jsxs)("div",{className:"container mx-auto px-4 sm:px-6 lg:px-8",children:[(0,d.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 gap-10 mb-12",children:[(0,d.jsxs)("div",{className:"col-span-2 lg:col-span-2",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 mb-6",children:[(0,d.jsx)("div",{className:"size-6 text-primary",children:(0,d.jsx)("svg",{className:"w-full h-full",fill:"currentColor",viewBox:"0 0 48 48",children:(0,d.jsx)("path",{clipRule:"evenodd",d:"M12.0799 24L4 19.2479L9.95537 8.75216L18.04 13.4961L18.0446 4H29.9554L29.96 13.4961L38.0446 8.75216L44 19.2479L35.92 24L44 28.7521L38.0446 39.2479L29.96 34.5039L29.9554 44H18.0446L18.04 34.5039L9.95537 39.2479L4 28.7521L12.0799 24Z",fillRule:"evenodd"})})}),(0,d.jsx)("span",{className:"text-xl font-bold text-foreground",children:g.vQ.name})]}),(0,d.jsx)("p",{className:"text-muted-foreground mb-6 max-w-sm font-light",children:"The unified interface for modern AI infrastructure. Secure, observable, and scalable."}),(0,d.jsxs)("div",{className:"flex gap-4",children:[(0,d.jsx)("a",{href:"#",className:"text-gray-400 hover:text-primary transition-colors","aria-label":"Twitter",children:(0,d.jsx)("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 24 24",children:(0,d.jsx)("path",{d:"M22.46 6c-.77.35-1.6.58-2.46.69.88-.53 1.56-1.37 1.88-2.38-.83.5-1.75.85-2.72 1.05C18.37 4.5 17.26 4 16 4c-2.35 0-4.27 1.92-4.27 4.29 0 .34.04.67.11.98C8.28 9.09 5.11 7.38 3 4.79c-.37.63-.58 1.37-.58 2.15 0 1.49.75 2.81 1.91 3.56-.71 0-1.37-.2-1.95-.5v.03c0 2.08 1.48 3.82 3.44 4.21a4.22 4.22 0 0 1-1.93.07 4.28 4.28 0 0 0 4 2.98 8.521 8.521 0 0 1-5.33 1.84c-.34 0-.68-.02-1.02-.06C3.44 20.29 5.7 21 8.12 21 16 21 20.33 14.46 20.33 8.79c0-.19 0-.37-.01-.56.84-.6 1.56-1.36 2.14-2.23z"})})}),(0,d.jsx)("a",{href:"#",className:"text-gray-400 hover:text-primary transition-colors","aria-label":"GitHub",children:(0,d.jsx)("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 24 24",children:(0,d.jsx)("path",{d:"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0 1 12 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0 0 22 12.017C22 6.484 17.522 2 12 2z"})})})]})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("h4",{className:"font-semibold text-foreground mb-4",children:"Product"}),(0,d.jsx)("ul",{className:"flex flex-col gap-3 text-sm text-muted-foreground font-light",children:h.map(a=>(0,d.jsx)("li",{children:(0,d.jsx)(f(),{href:a.href,className:"hover:text-primary transition-colors",children:a.label})},a.label))})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("h4",{className:"font-semibold text-foreground mb-4",children:"Resources"}),(0,d.jsx)("ul",{className:"flex flex-col gap-3 text-sm text-muted-foreground font-light",children:i.map(a=>(0,d.jsx)("li",{children:(0,d.jsx)(f(),{href:a.href,className:"hover:text-primary transition-colors",children:a.label})},a.label))})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("h4",{className:"font-semibold text-foreground mb-4",children:"Company"}),(0,d.jsx)("ul",{className:"flex flex-col gap-3 text-sm text-muted-foreground font-light",children:j.map(a=>(0,d.jsx)("li",{children:(0,d.jsx)(f(),{href:a.href,className:"hover:text-primary transition-colors",children:a.label})},a.label))})]})]}),(0,d.jsxs)("div",{className:"border-t border-border pt-8 flex flex-col md:flex-row justify-between items-center gap-4",children:[(0,d.jsxs)("p",{className:"text-sm text-muted-foreground",children:["\xa9 ",new Date().getFullYear()," ",g.vQ.name," Inc. All rights reserved."]}),(0,d.jsxs)("div",{className:"flex gap-6 text-sm text-muted-foreground",children:[(0,d.jsx)(f(),{href:"#",className:"hover:text-primary transition-colors",children:"Privacy Policy"}),(0,d.jsx)(f(),{href:"#",className:"hover:text-primary transition-colors",children:"Terms of Service"})]})]})]})})}},68330:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/XiaomiMimoAuthModal.tsx\" 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/amir/Projects/10Router/src/shared/components/XiaomiMimoAuthModal.tsx","default")},70047:(a,b,c)=>{"use strict";c.d(b,{default:()=>h});var d=c(86240),e=c(36447),f=c(63265),g=c(87121);function h({isOpen:a,shuttingDown:b,stopped:c,timedOut:i,onClose:j,onConfirm:k}){let l=b&&!c&&!i;return(0,d.jsx)(g.default,{isOpen:a,onClose:j,title:c?"Server Stopped":i?"Still Running":"Close Proxy",size:"sm",closeOnOverlay:!l,footer:c||i?(0,d.jsx)(f.$,{variant:"default",onClick:j,children:"Close"}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.$,{variant:"ghost",onClick:j,disabled:l,children:"Cancel"}),(0,d.jsxs)(f.$,{variant:"destructive",onClick:k,disabled:l,children:[l&&(0,d.jsx)(e.A,{className:"animate-spin"}),l?"Stopping…":"Close"]})]}),children:(0,d.jsx)("p",{className:"text-muted-foreground",children:c?"The proxy server has stopped. You can close this tab now.":i?"The server did not stop in time. It may need a manual stop (10router stop).":"Are you sure you want to close the proxy server?"})})}},70369:(a,b,c)=>{"use strict";c.d(b,{d:()=>g});var d=c(86240);c(70433);var e=c(89988),f=c(14582);function g({className:a,size:b="default",...c}){return(0,d.jsx)(f.bL,{"data-slot":"switch","data-size":b,className:(0,e.cn)("peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none group-has-[:focus-visible]/field-label:border-transparent group-has-[:focus-visible]/field-label:ring-0 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50",a),...c,children:(0,d.jsx)(f.zi,{"data-slot":"switch-thumb",className:"pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground"})})}},71e3:(a,b,c)=>{"use strict";c.d(b,{default:()=>o});var d=c(86240),e=c(28907),f=c(70433),g=c(16467),h=c.n(g),i=c(87121),j=c(81501),k=c(63265),l=c(57145);let m=new Set(["trae","windsurf","zed"]),n={trae:{label:"Cloud-IDE-JWT",instructions:"Sign in at trae.ai (or solo.trae.ai), open DevTools → Network, copy the Cloud-IDE-JWT token from any request's Authorization header (~14-day lifetime).",placeholder:"Paste Cloud-IDE-JWT here...",ideName:"Trae",ideOptional:!0},windsurf:{label:"Windsurf API key",instructions:'In the Windsurf/VS Code IDE, run the "Windsurf: Provide Auth Token" command, then copy the displayed sk-ws-... key.',placeholder:"Paste sk-ws-... key here...",ideName:"Windsurf",ideOptional:!1}};function o({isOpen:a,provider:b,providerInfo:c,onSuccess:g,onClose:h,oauthMeta:p}){let[q,r]=(0,f.useState)("waiting"),[s,t]=(0,f.useState)(null),[u,v]=(0,f.useState)(""),[w,x]=(0,f.useState)(null),[y,z]=(0,f.useState)(!1),[A,B]=(0,f.useState)(null),[C,D]=(0,f.useState)(!1),[E,F]=(0,f.useState)("browser"),[G,H]=(0,f.useState)(""),[I,J]=(0,f.useState)(null),K=(0,f.useRef)(null),L=(0,f.useRef)(!1);(0,f.useRef)(!1);let M=(0,f.useRef)({proxyStarted:!1,proxyProvider:null,stopSent:!1}),N=(0,f.useRef)(g),O=(0,f.useRef)(h),P=(0,f.useRef)(a);(0,f.useRef)(null);let{copied:Q,copy:R}=(0,l.C)(),[S,T]=(0,f.useState)(!1),[U,V]=(0,f.useState)("/callback?code=...");(0,f.useRef)(!1);let W=(0,f.useCallback)(async(a,c)=>{if(s)try{let d=await fetch(`/api/oauth/${b}/exchange`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:a,redirectUri:s.redirectUri,codeVerifier:s.codeVerifier,state:c,...s.systemId?{systemId:s.systemId}:{},...p?{meta:p}:{}})}),e=await d.json();if(!d.ok)throw Error(e.error);r("success"),N.current?.()}catch(a){x(a.message),r("error")}},[s,b,p]),X=(0,f.useCallback)(async a=>{if(s?.state)try{let b=await fetch("/api/oauth/xai/manual-code",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:a,state:s.state})}),c=await b.json();if(!b.ok)throw Error(c.error);r("success"),N.current?.()}catch(a){x(a.message),r("error")}},[s]),Y=(0,f.useCallback)(async(a,c,d,e,f)=>{L.current=!1,D(!0);let g=Date.now()+(Number.isFinite(f)&&f>0?f:12e4);for(;Date.now()<g;){if(L.current){console.log("[OAuthModal] Polling aborted"),D(!1);return}if(await new Promise(a=>setTimeout(a,1e3*d)),L.current){console.log("[OAuthModal] Polling aborted after sleep"),D(!1);return}try{let f=await fetch(`/api/oauth/${b}/poll`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({deviceCode:a,codeVerifier:c,extraData:e})}),g=await f.json();if(g.success){L.current=!0,r("success"),D(!1),N.current?.();return}if("expired_token"===g.error||"access_denied"===g.error)throw Error(g.errorDescription||g.error);"slow_down"===g.error&&(d=Math.min(d+5,30))}catch(a){x(a.message),r("error"),D(!1);return}}x("Authorization timeout"),r("error"),D(!1)},[b]),Z=(0,f.useCallback)(()=>{let a=M.current;a.proxyStarted&&!a.stopSent&&a.proxyProvider&&(a.stopSent=!0,fetch(`/api/oauth/${a.proxyProvider}/stop-proxy`).catch(()=>{}))},[]),$=(0,f.useCallback)(async a=>{let b=await fetch(`/api/oauth/${a}/start-proxy`),c=await b.json();if(!b.ok||!c.success||!c.callbackUrl)throw Error(c.reason||c.error||`Failed to start ${a} callback server`);if(M.current.proxyStarted=!0,M.current.proxyProvider=a,M.current.stopSent=!1,!P.current)return void Z();let d=new URL(`/api/oauth/${a}/authorize`,window.location.origin);d.searchParams.set("redirect_uri",c.callbackUrl);let e=await fetch(d),f=await e.json();if(!e.ok)throw Z(),Error(f.error);if(!P.current)return void Z();let g={state:f.state};f.codeVerifier&&(g.codeVerifier=f.codeVerifier),f.systemId&&(g.systemId=f.systemId);let h=await fetch(`/api/oauth/${a}/register-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(g)}),i=null;try{i=await h.json()}catch{i=null}if(!h.ok||i?.success===!1)throw Z(),Error(i?.error||"Failed to register login session; please retry");P.current&&(t({...f,proxyProvider:a}),r("waiting"),K.current=window.open(f.authUrl,"oauth_popup","width=600,height=700"),K.current||r("input"))},[Z]),_=async()=>{if(b)try{let a;if(x(null),m.has(b)&&"browser"===E)return void await $(b);if(["github","kilocode","codebuddy-cn","codebuddy-intl","qoder","grok-cli"].includes(b)){z(!0),r("waiting");let a=new URL(`/api/oauth/${b}/device-code`,window.location.origin),c=await fetch(a.toString()),d=await c.json();if(!c.ok)throw Error(d.error);B(d);let e=d.verification_uri_complete||d.verification_uri;e&&window.open(e,"_blank","noopener,noreferrer");let f="qoder"===b?{_qoderNonce:d._qoderNonce,_qoderMachineId:d._qoderMachineId,_qoderVerifier:d.codeVerifier}:null;Y(d.device_code,d.codeVerifier,d.interval||5,f,Number.isFinite(d.expires_in)&&d.expires_in>0?1e3*d.expires_in:void 0);return}let c=window.location.port||("https:"===window.location.protocol?"443":"80");a="codex"===b?"http://localhost:1455/auth/callback":"xai"===b?"http://127.0.0.1:56121/callback":`http://localhost:${c}/callback`;let d=new URL(`/api/oauth/${b}/authorize`,window.location.origin);d.searchParams.set("redirect_uri",a),p&&Object.entries(p).forEach(([a,b])=>{b&&d.searchParams.set(a,b)});let e=await fetch(d.toString()),f=await e.json();if(!e.ok)throw Error(f.error);let g=!1,h=!1;if("codex"===b)try{let b=new URL("/api/oauth/codex/start-proxy",window.location.origin);b.searchParams.set("app_port",c),b.searchParams.set("state",f.state),b.searchParams.set("code_verifier",f.codeVerifier),b.searchParams.set("redirect_uri",a);let d=await fetch(b.toString()),e=await d.json();g=e.success,h=!!e.serverSide}catch{g=!1}let i=!1,j=!1;if("xai"===b)try{let b=new URL("/api/oauth/xai/start-proxy",window.location.origin);b.searchParams.set("app_port",c),b.searchParams.set("state",f.state),b.searchParams.set("code_verifier",f.codeVerifier),b.searchParams.set("redirect_uri",a);let d=await fetch(b.toString()),e=await d.json();if(i=e.success,j=!!e.serverSide,!i&&"port_busy"===e.reason)throw Error("Port 56121 in use; close the conflicting process and retry")}catch(a){if(a?.message)throw a;i=!1}if(t({...f,redirectUri:a,codexServerSide:h,xaiServerSide:j}),("codex"===b&&g||"xai"===b&&i)&&(M.current.proxyStarted=!0,M.current.proxyProvider=b,M.current.stopSent=!1),!f.authUrl){if("device_code"===f.flowType)throw Error(`Provider ${b} uses device-code login but is not wired in the OAuth modal device-code list`);throw Error("No authorization URL returned from OAuth provider")}"codex"===b&&g||"xai"===b&&i||S&&"codex"!==b&&"xai"!==b?(r("waiting"),K.current=window.open(f.authUrl,"oauth_popup","width=600,height=700"),K.current||r("input")):(r("input"),window.open(f.authUrl,"_blank"))}catch(a){x(a.message),r("error")}},aa=async()=>{try{if(x(null),"paste-token"===E&&n[b]){let a=G.trim();if(!a)throw Error("Missing token");let c=await fetch(`/api/oauth/${b}/exchange`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:a})}),d=await c.json();if(!c.ok)throw Error(d.error);r("success"),N.current?.();return}let a=u.trim();if(m.has(b)&&a){let c=await fetch(`/api/oauth/${b}/exchange`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:a,state:s?.state,...s?.redirectUri?{redirectUri:s.redirectUri}:{},...s?.codeVerifier?{codeVerifier:s.codeVerifier}:{},...s?.systemId?{systemId:s.systemId}:{}})}),d=await c.json();if(!c.ok)throw Error(d.error);r("success"),N.current?.();return}if(a.startsWith("eyJ")&&a.includes("."))return void await W(a,null);if("xai"===b&&a&&!a.includes("://")&&!a.includes("?")&&!a.includes("code="))return void await X(a);if("kimchi"===b&&a&&!a.includes("://")&&!a.includes("?"))return void await W(a,null);let c=new URL(a),d=c.searchParams.get("code"),e=c.searchParams.get("token"),f=c.searchParams.get("state"),g=c.searchParams.get("error");if(g)throw Error(c.searchParams.get("error_description")||g);if(!d&&!e)throw Error("xai"===b?"Paste the callback URL or copied xAI code":"kimchi"===b?"No Kimchi token found in URL":"No authorization code found in URL");await W(e||d,f)}catch(a){x(a.message),r("error")}},ab=(0,f.useCallback)(()=>{Z(),O.current()},[Z]);if(!b||!c)return null;let ac="xai"===b,ad="kimchi"===b,ae=A?.verification_uri_complete||A?.verification_uri||"",af=ac?"Connect Grok Build OAuth":`Connect ${c.name}`,ag=ac?"http://127.0.0.1:56121/callback?code=... or copied code":ad?`${U.replace("code=...","token=...")} or copied token`:U;return(0,d.jsx)(i.default,{isOpen:a,title:af,onClose:ab,size:"lg",children:(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[m.has(b)&&("waiting"===q||"input"===q||"error"===q)&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)("button",{type:"button",onClick:()=>{F("browser"),x(null),r("waiting"),_()},className:`flex-1 rounded-lg border px-3 py-2 text-sm transition-colors ${"browser"===E?"border-primary bg-primary/10 text-primary":"border-border text-muted-foreground hover:text-primary"}`,children:"\uD83C\uDF10 Sign in with browser"}),(0,d.jsx)("button",{type:"button",onClick:()=>{F("paste-token"),x(null),r("input")},className:`flex-1 rounded-lg border px-3 py-2 text-sm transition-colors ${"paste-token"===E?"border-primary bg-primary/10 text-primary":"border-border text-muted-foreground hover:text-primary"}`,children:"\uD83D\uDD11 Paste token"})]}),"browser"===E&&(0,d.jsxs)(d.Fragment,{children:["waiting"===q&&(0,d.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 border border-border rounded-lg bg-sidebar/50",children:[(0,d.jsx)(e.default,{name:"progress_activity",className:"text-base text-primary animate-spin"}),(0,d.jsx)("span",{className:"text-sm",children:"Waiting for browser authorization…"})]}),"input"===q&&(0,d.jsxs)("div",{className:"space-y-3",children:[(0,d.jsx)("p",{className:"text-sm text-muted-foreground",children:"Popup was blocked. After authorizing in the browser, paste the full callback URL here:"}),(0,d.jsx)(j.p,{value:u,onChange:a=>v(a.target.value),placeholder:"http://127.0.0.1:.../callback?...",className:"font-mono text-xs"}),(0,d.jsx)(k.$,{onClick:aa,className:"w-full",disabled:!u,children:"Connect"})]})]}),"paste-token"===E&&(0,d.jsxs)("div",{className:"space-y-3",children:[I&&!I.installed&&(0,d.jsxs)("div",{className:`px-3 py-2 rounded-lg text-sm ${n[b].ideOptional?"bg-blue-500/10 text-blue-700 dark:text-blue-300":"bg-yellow-500/10 text-yellow-700 dark:text-yellow-300"}`,children:[n[b].ideName," IDE not detected.",n[b].ideOptional?" You can still grab the token from DevTools.":` Install ${n[b].ideName} IDE to get the token, or use "Sign in with browser".`]}),(0,d.jsx)("p",{className:"text-sm text-muted-foreground",children:n[b].instructions}),(0,d.jsx)(j.p,{value:G,onChange:a=>H(a.target.value),placeholder:n[b].placeholder,className:"font-mono text-xs"}),(0,d.jsx)(k.$,{onClick:aa,className:"w-full",disabled:!G,children:"Connect"})]})]}),("waiting"===q||"input"===q)&&!y&&!m.has(b)&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 border border-border rounded-lg bg-sidebar/50",children:[(0,d.jsx)(e.default,{name:"progress_activity",className:"text-base text-primary animate-spin"}),(0,d.jsx)("span",{className:"text-sm",children:ac?"Waiting for Grok Build OAuth…":"Waiting for popup authorization…"})]}),(0,d.jsxs)("div",{className:"flex items-center gap-3 my-1",children:[(0,d.jsx)("div",{className:"flex-1 h-px bg-border"}),(0,d.jsx)("span",{className:"text-xs text-muted-foreground uppercase tracking-wider",children:"Or paste callback URL manually"}),(0,d.jsx)("div",{className:"flex-1 h-px bg-border"})]}),(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsxs)("div",{children:[(0,d.jsxs)("p",{className:"text-sm font-medium mb-2",children:["Step 1: Open this ",ac?"Grok Build OAuth URL":"URL"," in your browser"]}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(j.p,{value:s?.authUrl||"",readOnly:!0,className:"flex-1 font-mono text-xs"}),(0,d.jsxs)(k.$,{variant:"secondary",onClick:()=>R(s?.authUrl,"auth_url"),disabled:!s?.authUrl,children:[(0,d.jsx)(e.default,{name:"auth_url"===Q?"check":"content_copy"}),"Copy"]})]})]}),(0,d.jsxs)("div",{children:[(0,d.jsxs)("p",{className:"text-sm font-medium mb-2",children:["Step 2: Paste the"," ","xai"===b?"callback URL or copied code":ad?"callback URL or copied token":"callback URL"," ","here"]}),(0,d.jsx)("p",{className:"text-xs text-muted-foreground mb-2",children:"xai"===b?"If xAI shows a code instead of redirecting, paste that code here.":ad?"After authorization, copy the full callback URL or token from your browser.":"After authorization, copy the full URL from your browser."}),(0,d.jsx)(j.p,{value:u,onChange:a=>v(a.target.value),placeholder:ag,className:"font-mono text-xs"})]})]}),(0,d.jsx)(k.$,{onClick:aa,className:"w-full",disabled:!u,children:"Connect"})]}),"waiting"===q&&y&&A&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"text-center py-4",children:[(0,d.jsx)("p",{className:"text-sm text-muted-foreground mb-4",children:"Visit the login URL below and authorize:"}),(0,d.jsxs)("div",{className:"bg-sidebar p-4 rounded-lg mb-4",children:[(0,d.jsx)("p",{className:"text-xs text-muted-foreground mb-1",children:"Login URL"}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("code",{className:"flex-1 text-sm break-all",children:ae}),(0,d.jsx)(k.$,{size:"sm",variant:"ghost",onClick:()=>R(ae,"login_url"),disabled:!ae,children:(0,d.jsx)(e.default,{name:"login_url"===Q?"check":"content_copy"})}),(0,d.jsxs)(k.$,{size:"sm",variant:"ghost",onClick:()=>window.open(ae,"_blank","noopener,noreferrer"),disabled:!ae,children:[(0,d.jsx)(e.default,{name:"open_in_new"}),"Open"]})]})]}),(0,d.jsxs)("div",{className:"bg-primary/10 p-4 rounded-lg",children:[(0,d.jsx)("p",{className:"text-xs text-muted-foreground mb-1",children:"Your Code"}),(0,d.jsxs)("div",{className:"flex items-center justify-center gap-2",children:[(0,d.jsx)("p",{className:"text-2xl font-mono font-bold text-primary",children:A.user_code}),(0,d.jsx)(k.$,{size:"sm",variant:"ghost",onClick:()=>R(A.user_code,"user_code"),children:(0,d.jsx)(e.default,{name:"user_code"===Q?"check":"content_copy"})})]})]})]}),C&&(0,d.jsxs)("div",{className:"flex items-center justify-center gap-2 text-sm text-muted-foreground",children:[(0,d.jsx)(e.default,{name:"progress_activity",className:"animate-spin"}),"Waiting for authorization..."]})]}),"success"===q&&(0,d.jsxs)("div",{className:"text-center py-6",children:[(0,d.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-green-100 dark:bg-green-900/30 flex items-center justify-center",children:(0,d.jsx)(e.default,{name:"check_circle",className:"text-3xl text-green-600"})}),(0,d.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connected Successfully!"}),(0,d.jsxs)("p",{className:"text-sm text-muted-foreground mb-4",children:["Your ",c.name," account has been connected."]}),(0,d.jsx)(k.$,{onClick:ab,className:"w-full",children:"Done"})]}),"error"===q&&(0,d.jsxs)("div",{className:"text-center py-6",children:[(0,d.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-red-100 dark:bg-red-900/30 flex items-center justify-center",children:(0,d.jsx)(e.default,{name:"error",className:"text-3xl text-red-600"})}),(0,d.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connection Failed"}),(0,d.jsx)("p",{className:"text-sm text-red-600 mb-4",children:w}),(0,d.jsx)(k.$,{onClick:_,variant:"secondary",className:"w-full",children:"Try Again"})]})]})})}o.propTypes={isOpen:h().bool.isRequired,provider:h().string,providerInfo:h().shape({name:h().string}),onSuccess:h().func,onClose:h().func.isRequired,oauthMeta:h().object}},72652:(a,b,c)=>{"use strict";c.d(b,{EntityCardSkeleton:()=>e,PanelSkeleton:()=>g,StatCardSkeleton:()=>f});var d=c(35062);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call EntityCardSkeleton() from the server but EntityCardSkeleton 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/amir/Projects/10Router/src/shared/components/EntityCardSkeleton.tsx","EntityCardSkeleton"),f=(0,d.registerClientReference)(function(){throw Error("Attempted to call StatCardSkeleton() from the server but StatCardSkeleton 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/amir/Projects/10Router/src/shared/components/EntityCardSkeleton.tsx","StatCardSkeleton"),g=(0,d.registerClientReference)(function(){throw Error("Attempted to call PanelSkeleton() from the server but PanelSkeleton 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/amir/Projects/10Router/src/shared/components/EntityCardSkeleton.tsx","PanelSkeleton")},73013:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/ShutdownModal.tsx\" 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/amir/Projects/10Router/src/shared/components/ShutdownModal.tsx","default")},73865:(a,b,c)=>{"use strict";c.d(b,{default:()=>am});var d=c(86240),e=c(28907),f=c(70126),g=c(47181),h=c(79517),i=c(70433),j=c(62871),k=c(4459),l=c.n(k),m=c(99902),n=c(31952),o=c(36447),p=c(29184),q=c(63265),r=c(4271),s=c(67209),t=c(57145),u=c(59263);let v=["docker compose pull","docker compose up -d"],w=["docker pull ghcr.io/amir83nasr/10router:latest","docker stop 10router && docker rm 10router",'docker run -d --name 10router -p 20128:20128 -v "$HOME/.10router:/app/data" -e DATA_DIR=/app/data ghcr.io/amir83nasr/10router:latest'],x=["git pull","pnpm install","pnpm run build && PORT=20128 pnpm run start"];function y({id:a,steps:b}){let{copied:c,copy:f}=(0,t.C)();return(0,d.jsx)("ol",{className:"flex flex-col gap-1.5",children:b.map((b,g)=>{let h=`${a}-${g}`,i=c===h;return(0,d.jsxs)("li",{className:"flex items-center gap-2 text-sm",children:[(0,d.jsx)("span",{className:"flex size-5 shrink-0 items-center justify-center rounded-full bg-muted text-[11px] font-medium text-muted-foreground",children:g+1}),(0,d.jsx)("code",{className:"min-w-0 flex-1 rounded bg-muted px-2 py-1 font-mono text-xs break-all",children:b}),(0,d.jsx)(q.$,{variant:"ghost",size:"icon-xs",onClick:()=>f(b,h),"aria-label":`Copy step ${g+1}: ${b}`,children:(0,d.jsx)(e.default,{name:i?"check":"content_copy",className:"size-3.5"})})]},h)})})}function z({title:a,icon:b,id:c,steps:f}){return(0,d.jsxs)("details",{className:"group rounded-lg border border-border",children:[(0,d.jsxs)("summary",{className:"flex cursor-pointer list-none items-center gap-2 px-3 py-2 text-sm font-medium text-foreground [&::-webkit-details-marker]:hidden",children:[(0,d.jsx)(e.default,{name:b,className:"size-4 shrink-0 text-muted-foreground"}),(0,d.jsx)("span",{className:"flex-1",children:a}),(0,d.jsx)(e.default,{name:"expand_more",className:"size-4 shrink-0 text-muted-foreground transition-transform group-open:rotate-180"})]}),(0,d.jsx)("div",{className:"px-3 py-2",children:(0,d.jsx)(y,{id:c,steps:f})})]})}function A(){return(0,d.jsxs)("details",{className:"group flex flex-col gap-2 rounded-lg border border-border p-3",children:[(0,d.jsxs)("summary",{className:"flex cursor-pointer list-none items-center gap-2 text-sm font-medium text-foreground [&::-webkit-details-marker]:hidden",children:[(0,d.jsx)(e.default,{name:"terminal",className:"size-4 shrink-0 text-muted-foreground"}),(0,d.jsx)("span",{className:"flex-1",children:"Other install methods"}),(0,d.jsx)(e.default,{name:"expand_more",className:"size-4 shrink-0 text-muted-foreground transition-transform group-open:rotate-180"})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-2 py-2",children:[(0,d.jsx)(z,{title:"Docker Compose",icon:"lan",id:"compose",steps:v}),(0,d.jsx)(z,{title:"Plain Docker run",icon:"dns",id:"docker",steps:w}),(0,d.jsx)(z,{title:"From source",icon:"code",id:"source",steps:x})]})]})}function B(){let{copied:a,copy:b}=(0,t.C)(),c=(0,u.c)(),f="npm i -g @amir83nasr/10router@latest",g="npm-0",h=a===g;return(0,d.jsxs)(r.Zp,{size:"sm",className:"border-primary/30 bg-primary/5",children:[(0,d.jsx)(r.aR,{children:(0,d.jsxs)(r.ZB,{className:"flex items-center gap-2",children:[(0,d.jsx)(e.default,{name:"upload",className:"size-4 shrink-0 text-primary"}),"npm ",(0,d.jsx)(p.E,{variant:"default",children:"recommended"})]})}),(0,d.jsxs)(r.Wu,{children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 text-sm",children:[(0,d.jsx)("code",{className:"min-w-0 flex-1 rounded bg-muted px-2 py-1 font-mono text-xs break-all",children:f}),(0,d.jsx)(q.$,{variant:"ghost",size:"icon-xs",onClick:()=>b(f,g),"aria-label":`Copy: ${f}`,children:(0,d.jsx)(e.default,{name:h?"check":"content_copy",className:"size-3.5"})})]}),h&&!c.stopped&&!c.timedOut&&(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,d.jsxs)("p",{className:"text-xs text-muted-foreground",children:["Copied. Stop the server, paste the command in your terminal, then run"," ",(0,d.jsx)("code",{className:"rounded bg-muted px-1 font-mono",children:"10router start"}),"."]}),(0,d.jsxs)(q.$,{variant:"destructive",size:"sm",className:"self-start",onClick:c.confirm,disabled:c.shuttingDown,children:[c.shuttingDown?(0,d.jsx)(o.A,{className:"animate-spin"}):(0,d.jsx)(e.default,{name:"power_settings_new",className:"size-4"}),c.shuttingDown?"Stopping…":"Stop server"]})]}),c.stopped&&(0,d.jsxs)("p",{className:"rounded-lg border border-green-500/30 bg-green-500/10 px-3 py-2 text-xs text-green-600 dark:text-green-400",children:["Server stopped — run the copied command in your terminal, then"," ",(0,d.jsx)("code",{className:"font-mono",children:"10router start"}),"."]}),c.timedOut&&(0,d.jsxs)("p",{className:"rounded-lg border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-xs text-amber-600 dark:text-amber-400",children:["The server did not stop in time — stop it manually (",(0,d.jsx)("code",{className:"font-mono",children:"10router stop"}),"), then run the copied command."]})]})]})}function C({open:a,onOpenChange:b,info:c,checkFailed:f,onRetry:g}){let h=c?c.hasUpdate?(0,d.jsxs)("p",{className:"rounded-lg border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-sm text-amber-600 dark:text-amber-400",children:["New version v",c.latestVersion," available (you run v",c.currentVersion,"). npm is the fastest way — or run the steps for your install method, in order:"]}):(0,d.jsxs)("p",{className:"rounded-lg border border-green-500/30 bg-green-500/10 px-3 py-2 text-sm text-green-600 dark:text-green-400",children:["Up to date — v",c.currentVersion," is the latest."]}):(0,d.jsx)("p",{className:"rounded-lg border border-border bg-muted/50 px-3 py-2 text-sm text-muted-foreground",children:f?"Could not reach GitHub to check for updates — the manual steps below still work.":"Checking for updates…"});return(0,d.jsx)(s.lG,{open:a,onOpenChange:b,children:(0,d.jsxs)(s.Cf,{className:"sm:max-w-lg",children:[(0,d.jsxs)(s.c7,{children:[(0,d.jsx)(s.L3,{children:"Updates"}),(0,d.jsx)(s.rr,{children:c?`Current v${c.currentVersion} \xb7 latest v${c.latestVersion}`:"Compare your version against the latest release"})]}),(0,d.jsxs)("div",{className:"flex max-h-[70vh] flex-col gap-4 overflow-y-auto p-4",children:[h,(0,d.jsx)(B,{}),(0,d.jsx)(A,{})]}),(0,d.jsxs)(s.Es,{children:[(0,d.jsxs)(q.$,{variant:"ghost",onClick:g,children:[(0,d.jsx)(e.default,{name:"refresh",className:"size-4"}),"Check again"]}),(0,d.jsx)(q.$,{variant:"outline",onClick:()=>b(!1),children:"Close"})]})]})})}var D=c(5174);function E({collapsed:a}){let[b,c]=(0,i.useState)(null),[f,g]=(0,i.useState)(!1),[h,j]=(0,i.useState)(!1),k=(0,i.useCallback)(async()=>{try{let a=await fetch("/api/version",{cache:"no-store"});if(!a.ok)throw Error(`HTTP ${a.status}`);let b=await a.json();c({currentVersion:b?.currentVersion??m.vQ.version,latestVersion:b?.latestVersion??m.vQ.version,hasUpdate:!!b?.hasUpdate}),g(!1)}catch{g(!0)}},[]),l=b?.hasUpdate??!1,o=l?`v${b?.latestVersion} available`:b?`v${b.currentVersion} \xb7 up to date`:`v${m.vQ.version}`,p=a?(0,d.jsxs)(n.m_,{children:[(0,d.jsx)(n.k$,{asChild:!0,children:l?(0,d.jsxs)("button",{type:"button",onClick:()=>j(!0),"aria-label":`Update available. ${o}`,className:"relative mx-auto flex size-8 items-center justify-center rounded-md bg-amber-500/15 text-amber-600 transition-colors hover:bg-amber-500/25 dark:text-amber-400",children:[(0,d.jsx)(e.default,{name:"download",className:"size-4"}),(0,d.jsx)("span",{className:"absolute right-1.5 top-1.5 size-1.5 rounded-full bg-amber-500"})]}):(0,d.jsx)("span",{className:"mx-auto flex size-8 items-center justify-center rounded-md text-muted-foreground",children:(0,d.jsx)(e.default,{name:"refresh",className:"size-4"})})}),(0,d.jsx)(n.ZI,{children:l?`${o} — click to update`:o})]}):l?(0,d.jsxs)("button",{type:"button",onClick:()=>j(!0),className:"flex w-full items-center gap-2 rounded-md bg-amber-500/15 px-1 py-1 text-left transition-colors hover:bg-amber-500/25","aria-label":`Update available. ${o}`,children:[(0,d.jsxs)("span",{className:"relative flex shrink-0 items-center text-muted-foreground",children:[(0,d.jsx)(e.default,{name:"download",className:"size-4"}),(0,d.jsx)("span",{className:"absolute -right-0.5 -top-0.5 size-1.5 rounded-full bg-amber-500"})]}),(0,d.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,d.jsxs)("span",{className:"block truncate text-[11px] text-muted-foreground",children:[m.vQ.name," v",b?.currentVersion??m.vQ.version]}),(0,d.jsx)("span",{className:"block truncate text-[11px] font-medium text-amber-600 dark:text-amber-400",children:o})]}),(0,d.jsx)(e.default,{name:"chevron_right",className:"size-3.5 shrink-0 text-muted-foreground"})]}):(0,d.jsxs)("div",{className:"flex w-full items-center gap-2 rounded-md px-1 py-1 text-left",children:[(0,d.jsx)("span",{className:"flex shrink-0 items-center text-muted-foreground",children:(0,d.jsx)(e.default,{name:"refresh",className:"size-4"})}),(0,d.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,d.jsxs)("span",{className:"block truncate text-[11px] text-muted-foreground",children:[m.vQ.name," v",b?.currentVersion??m.vQ.version]}),(0,d.jsx)("span",{className:(0,D.cn)("block truncate text-[11px] font-medium",f||!b?"text-muted-foreground":"text-green-600 dark:text-green-400"),children:o})]})]});return(0,d.jsxs)(d.Fragment,{children:[p,(0,d.jsx)(C,{open:h&&l,onOpenChange:j,info:b,checkFailed:f,onRetry:k})]})}var F=c(48884),G=c(89988),H=c(3510);c(81501);var I=c(96487);function J({className:a,orientation:b="horizontal",decorative:c=!0,...e}){return(0,d.jsx)(I.b,{"data-slot":"separator",decorative:c,orientation:b,className:(0,G.cn)("shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",a),...e})}var K=c(68322),L=c(78629);function M({...a}){return(0,d.jsx)(K.bL,{"data-slot":"sheet",...a})}function N({...a}){return(0,d.jsx)(K.ZL,{"data-slot":"sheet-portal",...a})}function O({className:a,...b}){return(0,d.jsx)(K.hJ,{"data-slot":"sheet-overlay",className:(0,G.cn)("fixed inset-0 z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",a),...b})}function P({className:a,children:b,side:c="right",showCloseButton:e=!0,...f}){return(0,d.jsxs)(N,{children:[(0,d.jsx)(O,{}),(0,d.jsxs)(K.UC,{"data-slot":"sheet-content","data-side":c,className:(0,G.cn)("fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-[side=bottom]:data-open:slide-in-from-bottom-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:animate-out data-closed:fade-out-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=right]:data-closed:slide-out-to-right-10 data-[side=top]:data-closed:slide-out-to-top-10",a),...f,children:[b,e&&(0,d.jsx)(K.bm,{"data-slot":"sheet-close",asChild:!0,children:(0,d.jsxs)(q.$,{variant:"ghost",className:"absolute top-4 right-4",size:"icon-sm",children:[(0,d.jsx)(L.A,{}),(0,d.jsx)("span",{className:"sr-only",children:"Close"})]})})]})]})}function Q({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"sheet-header",className:(0,G.cn)("flex flex-col gap-1.5 p-4",a),...b})}function R({className:a,...b}){return(0,d.jsx)(K.hE,{"data-slot":"sheet-title",className:(0,G.cn)("font-heading font-medium text-foreground",a),...b})}function S({className:a,...b}){return(0,d.jsx)(K.VY,{"data-slot":"sheet-description",className:(0,G.cn)("text-sm text-muted-foreground",a),...b})}c(21096);let T=i.createContext(null);function U(){let a=i.useContext(T);if(!a)throw Error("useSidebar must be used within a SidebarProvider.");return a}function V({defaultOpen:a=!0,open:b,onOpenChange:c,className:e,style:f,children:g,...h}){let j=function(){let[a,b]=i.useState(void 0);return i.useEffect(()=>{let a=window.matchMedia("(max-width: 767px)"),c=()=>{b(window.innerWidth<768)};return a.addEventListener("change",c),b(window.innerWidth<768),()=>a.removeEventListener("change",c)},[]),!!a}(),[k,l]=i.useState(!1),[m,n]=i.useState(a),o=b??m,p=i.useCallback(a=>{let b="function"==typeof a?a(o):a;c?c(b):n(b),document.cookie=`sidebar_state=${b}; path=/; max-age=604800`},[c,o]),q=i.useCallback(()=>j?l(a=>!a):p(a=>!a),[j,p,l]);i.useEffect(()=>{let a=a=>{"b"===a.key&&(a.metaKey||a.ctrlKey)&&(a.preventDefault(),q())};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[q]);let r=o?"expanded":"collapsed",s=i.useMemo(()=>({state:r,open:o,setOpen:p,isMobile:j,openMobile:k,setOpenMobile:l,toggleSidebar:q}),[r,o,p,j,k,l,q]);return(0,d.jsx)(T.Provider,{value:s,children:(0,d.jsx)("div",{"data-slot":"sidebar-wrapper",style:{"--sidebar-width":"16rem","--sidebar-width-icon":"3rem",...f},className:(0,G.cn)("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar",e),...h,children:g})})}function W({side:a="left",variant:b="sidebar",collapsible:c="offcanvas",className:e,children:f,dir:g,...h}){let{isMobile:i,state:j,openMobile:k,setOpenMobile:l}=U();return"none"===c?(0,d.jsx)("div",{"data-slot":"sidebar",className:(0,G.cn)("flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground",e),...h,children:f}):i?(0,d.jsx)(M,{open:k,onOpenChange:l,...h,children:(0,d.jsxs)(P,{dir:g,"data-sidebar":"sidebar","data-slot":"sidebar","data-mobile":"true",className:"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden",style:{"--sidebar-width":"18rem"},side:a,children:[(0,d.jsxs)(Q,{className:"sr-only",children:[(0,d.jsx)(R,{children:"Sidebar"}),(0,d.jsx)(S,{children:"Displays the mobile sidebar."})]}),(0,d.jsx)("div",{className:"flex h-full w-full flex-col",children:f})]})}):(0,d.jsxs)("div",{className:"group peer hidden text-sidebar-foreground md:block","data-state":j,"data-collapsible":"collapsed"===j?c:"","data-variant":b,"data-side":a,"data-slot":"sidebar",children:[(0,d.jsx)("div",{"data-slot":"sidebar-gap",className:(0,G.cn)("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180","floating"===b||"inset"===b?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)")}),(0,d.jsx)("div",{"data-slot":"sidebar-container","data-side":a,className:(0,G.cn)("fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex","floating"===b||"inset"===b?"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l",e),...h,children:(0,d.jsx)("div",{"data-sidebar":"sidebar","data-slot":"sidebar-inner",className:"flex size-full min-w-0 flex-col overflow-x-hidden bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 group-data-[variant=floating]:ring-sidebar-border",children:f})})]})}function X({className:a,...b}){return(0,d.jsx)("main",{"data-slot":"sidebar-inset",className:(0,G.cn)("relative flex w-full flex-1 flex-col bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2",a),...b})}function Y({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"sidebar-header","data-sidebar":"header",className:(0,G.cn)("flex flex-col gap-2 p-2",a),...b})}function Z({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"sidebar-footer","data-sidebar":"footer",className:(0,G.cn)("flex flex-col gap-2 p-2",a),...b})}function $({className:a,...b}){return(0,d.jsx)(J,{"data-slot":"sidebar-separator","data-sidebar":"separator",className:(0,G.cn)("mx-2 w-auto bg-sidebar-border",a),...b})}function _({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"sidebar-content","data-sidebar":"content",className:(0,G.cn)("flex min-h-0 w-full min-w-0 flex-1 flex-col gap-2 overflow-x-hidden overflow-y-auto group-data-[collapsible=icon]:overflow-hidden",a),...b})}function aa({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"sidebar-group","data-sidebar":"group",className:(0,G.cn)("relative flex w-full min-w-0 flex-col p-2",a),...b})}function ab({className:a,asChild:b=!1,...c}){let e=b?H.bL:"div";return(0,d.jsx)(e,{"data-slot":"sidebar-group-label","data-sidebar":"group-label",className:(0,G.cn)("flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",a),...c})}function ac({className:a,...b}){return(0,d.jsx)("ul",{"data-slot":"sidebar-menu","data-sidebar":"menu",className:(0,G.cn)("flex w-full min-w-0 flex-col gap-1",a),...b})}function ad({className:a,...b}){return(0,d.jsx)("li",{"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",className:(0,G.cn)("group/menu-item relative",a),...b})}let ae=(0,F.F)("peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate",{variants:{variant:{default:"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",outline:"bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]"},size:{default:"h-8 text-sm",sm:"h-7 text-xs",lg:"h-12 text-sm group-data-[collapsible=icon]:p-0!"}},defaultVariants:{variant:"default",size:"default"}});function af({asChild:a=!1,isActive:b=!1,variant:c="default",size:e="default",tooltip:f,className:g,...h}){let i=a?H.bL:"button",{isMobile:j,state:k}=U(),l=(0,d.jsx)(i,{"data-slot":"sidebar-menu-button","data-sidebar":"menu-button","data-size":e,"data-active":b,className:(0,G.cn)(ae({variant:c,size:e}),g),...h});return f?("string"==typeof f&&(f={children:f}),(0,d.jsxs)(n.m_,{children:[(0,d.jsx)(n.k$,{asChild:!0,children:l}),(0,d.jsx)(n.ZI,{side:"right",align:"center",hidden:"collapsed"!==k||j,...f})]})):l}let ag=[{id:"endpoint",href:"/dashboard",label:"Endpoint & Key",icon:"api",match:a=>"/dashboard"===a||a.startsWith("/dashboard/endpoint")},{id:"providers",href:"/dashboard/providers",label:"Providers",icon:"dns"},{id:"combos",href:"/dashboard/combos",label:"Combo",icon:"layers"},{id:"usage",href:"/dashboard/usage",label:"Usage",icon:"bar_chart"},{id:"token-saver",href:"/dashboard/token-saver",label:"Token Saver",icon:"scissors"},{id:"cli-tools",href:"/dashboard/cli-tools",label:"CLI Tools",icon:"terminal"},{id:"systemone",href:"/dashboard/media-providers/systemone",label:"System One",icon:"bolt"}],ah=[{id:"proxy-pools",href:"/dashboard/proxy-pools",label:"Proxy Pools",icon:"waypoints"}],ai=[{id:"profile",href:"/dashboard/profile",label:"Settings",icon:"settings"}];function aj({item:a}){var b;let c=(b=(0,f.usePathname)(),a.match?a.match(b):"/dashboard/profile"===a.href?"/dashboard/profile"===b:b.startsWith(a.href));return(0,d.jsx)(ad,{children:(0,d.jsx)(af,{asChild:!0,isActive:c,children:(0,d.jsxs)(l(),{href:a.href,className:"gap-3",children:[(0,d.jsx)(e.default,{name:a.icon,className:"text-[18px]"}),(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate",children:a.label})]})})})}function ak({...a}){(0,f.usePathname)();let{state:b}=U(),c="collapsed"===b;return(0,d.jsxs)(W,{...a,children:[(0,d.jsx)(Y,{className:"h-20 justify-center border-b border-sidebar-border px-4",children:(0,d.jsxs)(l(),{href:"/dashboard",className:"flex min-w-0 items-center gap-3",children:[(0,d.jsx)(j.default,{src:"/icons/icon.svg",alt:"10Router logo",width:36,height:36,className:"size-9 rounded-[10px] shrink-0"}),!c&&(0,d.jsxs)("div",{className:"flex min-w-0 flex-col leading-tight",children:[(0,d.jsx)("span",{className:"truncate text-lg font-semibold tracking-tight text-foreground",children:m.vQ.name}),(0,d.jsxs)("span",{className:"truncate text-xs text-muted-foreground",children:["v",m.vQ.version]})]})]})}),(0,d.jsxs)(_,{className:"pt-2",children:[(0,d.jsxs)(aa,{children:[(0,d.jsx)(ab,{children:"Overview"}),(0,d.jsx)(ac,{children:ag.map(a=>(0,d.jsx)(aj,{item:a},a.id))})]}),(0,d.jsx)($,{}),(0,d.jsxs)(aa,{children:[(0,d.jsx)(ab,{children:"System"}),(0,d.jsxs)(ac,{children:[ah.map(a=>(0,d.jsx)(aj,{item:a},a.id)),ai.map(a=>(0,d.jsx)(aj,{item:a},a.id))]})]})]}),(0,d.jsx)(Z,{className:"border-t border-sidebar-border p-4",children:(0,d.jsx)(E,{collapsed:c})})]})}function al({children:a}){let b=(0,f.usePathname)(),c=(0,g.i)(a=>a.notifications),i=(0,g.i)(a=>a.removeNotification),{toggleSidebar:j}=U();return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("div",{className:"fixed top-4 right-4 z-[80] flex w-[min(92vw,380px)] flex-col gap-2",children:c.map(a=>{var b;let c="success"===(b=a.type)?{wrapper:"border-green-500/30 bg-green-500/10 text-green-600 dark:text-green-400",icon:"check_circle"}:"error"===b?{wrapper:"border-red-500/30 bg-red-500/10 text-red-600 dark:text-red-400",icon:"error"}:"warning"===b?{wrapper:"border-amber-500/30 bg-amber-500/10 text-amber-600 dark:text-amber-400",icon:"warning"}:{wrapper:"border-blue-500/30 bg-blue-500/10 text-blue-600 dark:text-blue-400",icon:"info"};return(0,d.jsx)("div",{className:`rounded-lg border px-3 py-2 shadow-lg backdrop-blur-sm ${c.wrapper}`,children:(0,d.jsxs)("div",{className:"flex items-start gap-2",children:[(0,d.jsx)(e.default,{name:c.icon,className:"text-[18px] leading-5"}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[a.title?(0,d.jsx)("p",{className:"text-xs font-semibold mb-0.5",children:a.title}):null,(0,d.jsx)("p",{className:"text-xs whitespace-pre-wrap break-words",children:a.message})]}),a.dismissible?(0,d.jsx)("button",{type:"button",onClick:()=>i(a.id),className:"text-current/70 hover:text-current","aria-label":"Dismiss notification",children:(0,d.jsx)(e.default,{name:"close",className:"text-[16px]"})}):null]})},a.id)})}),(0,d.jsx)(ak,{}),(0,d.jsxs)(X,{className:"flex flex-col h-full min-w-0 relative transition-colors duration-300 isolate",children:[(0,d.jsx)(h.default,{onMenuClick:j},b),(0,d.jsx)("div",{className:`dashboard-grid-bg flex-1 overflow-y-auto ${"/dashboard/basic-chat"===b?"":"p-6 lg:p-10"} ${"/dashboard/basic-chat"===b?"flex flex-col overflow-hidden":""}`,children:(0,d.jsx)("div",{className:`${"/dashboard/basic-chat"===b?"flex-1 w-full h-full flex flex-col":"max-w-7xl mx-auto"}`,children:a})})]})]})}function am({children:a}){return(0,d.jsx)(V,{children:(0,d.jsx)("div",{className:"flex h-screen w-full overflow-hidden bg-background",children:(0,d.jsx)(al,{children:a})})})}},75394:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/layouts/DashboardLayout.tsx\" 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/amir/Projects/10Router/src/shared/components/layouts/DashboardLayout.tsx","default")},75512:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/McpMarketplaceModal.tsx\" 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/amir/Projects/10Router/src/shared/components/McpMarketplaceModal.tsx","default")},77606:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/AddCustomEmbeddingModal.tsx\" 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/amir/Projects/10Router/src/shared/components/AddCustomEmbeddingModal.tsx","default")},77874:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/CapacityBadges.tsx\" 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/amir/Projects/10Router/src/shared/components/CapacityBadges.tsx","default")},78740:(a,b,c)=>{"use strict";c.d(b,{SQ:()=>i,_2:()=>j,lp:()=>k,mB:()=>l,rI:()=>g,ty:()=>h});var d=c(86240);c(70433);var e=c(89988),f=c(37162);function g({...a}){return(0,d.jsx)(f.bL,{"data-slot":"dropdown-menu",...a})}function h({...a}){return(0,d.jsx)(f.l9,{"data-slot":"dropdown-menu-trigger",...a})}function i({className:a,align:b="start",sideOffset:c=4,...g}){return(0,d.jsx)(f.ZL,{children:(0,d.jsx)(f.UC,{"data-slot":"dropdown-menu-content",sideOffset:c,align:b,className:(0,e.cn)("z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:overflow-hidden data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",a),...g})})}function j({className:a,inset:b,variant:c="default",...g}){return(0,d.jsx)(f.q7,{"data-slot":"dropdown-menu-item","data-inset":b,"data-variant":c,className:(0,e.cn)("group/dropdown-menu-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive",a),...g})}function k({className:a,inset:b,...c}){return(0,d.jsx)(f.JU,{"data-slot":"dropdown-menu-label","data-inset":b,className:(0,e.cn)("px-2 py-1.5 text-xs font-medium text-muted-foreground data-inset:pl-8",a),...c})}function l({className:a,...b}){return(0,d.jsx)(f.wv,{"data-slot":"dropdown-menu-separator",className:(0,e.cn)("-mx-1 my-1 h-px bg-border",a),...b})}},79517:(a,b,c)=>{"use strict";c.d(b,{default:()=>x});var d=c(86240),e=c(28907),f=c(70433),g=c(70126),h=c(4459),i=c.n(h),j=c(16467),k=c.n(j),l=c(92968),m=c(82466);let n=(0,c(37372).v)(a=>({query:"",placeholder:"",visible:!1,setQuery:b=>a({query:b}),register:(b="Search...")=>a({visible:!0,placeholder:b,query:""}),unregister:()=>a({visible:!1,placeholder:"",query:""})}));var o=c(99902),p=c(86177),q=c(54204),r=c(82975),s=c(27720),t=c(29184),u=c(63265),v=c(81501),w=c(31952);function x({onMenuClick:a,showMenuButton:b=!0}){let c=(0,g.usePathname)(),[h,j]=(0,f.useState)(""),[k,n]=(0,f.useState)(""),{title:u,description:v,icon:z,breadcrumbs:A}=(0,f.useMemo)(()=>(a=>{if(!a)return{title:"",description:"",breadcrumbs:[]};let b=a.match(/\/providers\/([^/]+)$/);if(b){let a=b[1],c=o.zN[a]||o.fg[a];if(c)return{title:c.name,description:"",breadcrumbs:[{label:"Providers",href:"/dashboard/providers"},{label:c.name,image:(0,r.HY)(c.id)}]}}let c=a.match(/\/media-providers\/systemone\/([^/]+)$/);if(c){let a=decodeURIComponent(c[1]),b=p.Q2[a]||Object.values(p.Q2).find(b=>b.alias===a);if(b)return{title:b.name,description:"",breadcrumbs:[{label:"System One",href:"/dashboard/media-providers/systemone"},{label:b.name,image:(0,r.HY)(b.id)}]}}let d=a.match(/\/cli-tools\/([^/]+)$/);if(d){let a=decodeURIComponent(d[1]),b=q.d[a];if(b)return{title:b.name,description:"",breadcrumbs:[{label:"CLI Tools",href:"/dashboard/cli-tools"},{label:b.name,image:b.image}]}}return a.includes("/media-providers/systemone")?{title:"System One",description:"Decision models — native POST /v1/systemone endpoint",icon:"bolt",breadcrumbs:[]}:a.includes("/providers")?{title:"Providers",description:"Manage your AI provider connections",icon:"dns",breadcrumbs:[]}:a.includes("/combos")?{title:"Combos",description:"Model combos with fallback",icon:"layers",breadcrumbs:[]}:a.includes("/usage")?{title:"Usage & Analytics",description:"Monitor your API usage, token consumption, and request logs",icon:"bar_chart",breadcrumbs:[]}:a.includes("/auth-files")?{title:"Auth Files",description:"Map provider credentials stored in the local database",icon:"vpn_key",breadcrumbs:[]}:a.includes("/quota")?{title:"Quota Tracker",description:"Track and manage your API quota limits",icon:"data_usage",breadcrumbs:[]}:a.includes("/token-saver")?{title:"Token Saver",description:"Compress prompts and outputs to save tokens",icon:"scissors",breadcrumbs:[]}:a.includes("/cli-tools")?{title:"CLI Tools",description:"Configure CLI tools",icon:"terminal",breadcrumbs:[]}:a.includes("/proxy-pools")?{title:"Proxy Pools",description:"Manage your proxy pool configurations",icon:"waypoints",breadcrumbs:[]}:a.includes("/endpoint")?{title:"Endpoint",description:"API endpoint configuration",icon:"api",breadcrumbs:[]}:a.includes("/profile")?{title:"Settings",description:"Manage your preferences",icon:"settings",breadcrumbs:[]}:a.includes("/console-log")?{title:"Console Log",description:"Live server console output",icon:"monitor",breadcrumbs:[]}:"/dashboard"===a?{title:"Endpoint",description:"API endpoint configuration",icon:"api",breadcrumbs:[]}:{title:"",description:"",breadcrumbs:[]}})(c),[c]),B=async()=>{try{(await fetch("/api/auth/logout",{method:"POST"})).ok&&window.location.assign("/login")}catch(a){console.error("Failed to logout:",a)}};return(0,d.jsxs)("header",{className:"sticky top-0 flex h-20 shrink-0 items-center justify-between gap-3 px-4 lg:px-8 border-b border-border bg-card/60 backdrop-blur-xl lg:bg-transparent lg:backdrop-blur-none z-20",children:[(0,d.jsx)("div",{className:"flex items-center gap-3 lg:hidden shrink-0",children:b&&(0,d.jsx)("button",{onClick:a,className:"text-foreground hover:text-primary transition-colors",children:(0,d.jsx)(e.default,{name:"menu",className:""})})}),(0,d.jsx)("div",{className:"flex flex-col min-w-0 flex-1",children:A.length>0?(0,d.jsx)("div",{className:"flex items-center gap-2",children:A.map((a,b)=>(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[b>0&&(0,d.jsx)(e.default,{name:"chevron_right",className:"text-muted-foreground text-base"}),a.href?(0,d.jsx)(i(),{href:a.href,className:"text-muted-foreground hover:text-primary transition-colors",children:a.label}):(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[a.image&&(0,d.jsx)(l.A,{src:a.image,alt:a.label,size:28,className:"object-contain rounded max-w-[28px] max-h-[28px]",fallbackText:a.label.slice(0,2).toUpperCase()}),(0,d.jsx)("h1",{className:"text-base lg:text-2xl font-semibold text-foreground tracking-tight truncate",children:(0,s.Tl)(a.label)})]})]},`${a.label}-${a.href||"current"}`))}):u?(0,d.jsxs)("div",{children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[z&&(0,d.jsx)(e.default,{name:z,className:"text-primary text-xl lg:text-2xl"}),(0,d.jsx)("h1",{className:"text-base lg:text-2xl font-semibold tracking-tight truncate",children:(0,s.Tl)(u)})]}),v&&(0,d.jsx)("p",{className:"hidden lg:block text-sm text-muted-foreground truncate",children:(0,s.Tl)(v)})]}):null}),(0,d.jsxs)("div",{className:"flex items-center gap-2 shrink-0",children:[h&&("OIDC"===k||"SAML"===k)&&(0,d.jsxs)(w.m_,{children:[(0,d.jsx)(w.k$,{asChild:!0,children:(0,d.jsxs)(t.E,{variant:"secondary",className:"hidden max-w-55 sm:inline-flex",children:[(0,d.jsx)(e.default,{name:"person",className:"size-3.5 text-primary"}),(0,d.jsx)("span",{className:"truncate",children:h}),(0,d.jsx)("span",{className:"shrink-0 rounded-full bg-primary/10 px-1.5 py-px text-[10px] font-semibold uppercase tracking-wide text-primary",children:k})]})}),(0,d.jsx)(w.ZI,{children:h})]}),(0,d.jsx)(y,{}),(0,d.jsx)(m.default,{onLogout:B})]})]})}function y(){let a=n(a=>a.visible),b=n(a=>a.query),c=n(a=>a.placeholder),f=n(a=>a.setQuery);return a?(0,d.jsxs)("div",{className:"relative w-40 sm:w-55",children:[(0,d.jsx)(e.default,{name:"search",className:"absolute left-2 top-1/2 -translate-y-1/2 text-muted-foreground size-4 pointer-events-none"}),(0,d.jsx)(v.p,{type:"text",value:b,onChange:a=>f(a.target.value),placeholder:c,className:"h-8 pl-7 pr-7"}),b&&(0,d.jsx)(u.$,{type:"button",variant:"ghost",size:"icon-xs",onClick:()=>f(""),className:"absolute right-1 top-1/2 -translate-y-1/2","aria-label":"Clear search",children:(0,d.jsx)(e.default,{name:"close",className:"size-4"})})]}):null}x.propTypes={onMenuClick:k().func,showMenuButton:k().bool}},82466:(a,b,c)=>{"use strict";c.d(b,{default:()=>o});var d=c(86240),e=c(28907),f=c(70433),g=c(16467),h=c.n(g),i=c(32328),j=c(59263),k=c(70047),l=c(63265),m=c(31952),n=c(78740);function o({onLogout:a}){let[b,c]=(0,f.useState)(!1),g=(0,j.c)();return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(n.rI,{children:[(0,d.jsxs)(m.m_,{children:[(0,d.jsx)(m.k$,{asChild:!0,children:(0,d.jsx)(n.ty,{asChild:!0,children:(0,d.jsx)(l.$,{variant:"ghost",size:"icon","aria-label":"Settings menu",children:(0,d.jsx)(e.default,{name:"settings",className:"size-5"})})})}),(0,d.jsx)(m.ZI,{children:"Settings"})]}),(0,d.jsxs)(n.SQ,{align:"end",className:"w-60",children:[(0,d.jsx)(n.lp,{children:"System"}),(0,d.jsx)(n.mB,{}),(0,d.jsxs)(n._2,{onSelect:()=>c(!0),children:[(0,d.jsx)(e.default,{name:"history",className:"size-4 text-muted-foreground"}),"Change Log"]}),(0,d.jsx)(n.mB,{}),(0,d.jsxs)(n._2,{variant:"destructive",onSelect:()=>g.open(),children:[(0,d.jsx)(e.default,{name:"power_settings_new",className:"size-4"}),"Shutdown"]}),(0,d.jsxs)(n._2,{variant:"destructive",onSelect:()=>a(),children:[(0,d.jsx)(e.default,{name:"logout",className:"size-4"}),"Logout"]})]})]}),(0,d.jsx)(i.default,{isOpen:b,onClose:()=>c(!1)}),(0,d.jsx)(k.default,{isOpen:g.confirmOpen||g.stopped||g.timedOut,onClose:g.reset,onConfirm:g.confirm,shuttingDown:g.shuttingDown,stopped:g.stopped,timedOut:g.timedOut})]})}o.propTypes={onLogout:h().func.isRequired}},82812:(a,b,c)=>{"use strict";c.d(b,{default:()=>S});var d=c(86240),e=c(28907),f=c(70433),g=c(70126);c(86177);var h=c(29184),i=c(4271),j=c(83777),k=c(12710),l=c(19509),m=c(11442);let n=a=>new Intl.NumberFormat().format(a||0);function o({stats:a}){let b;return(0,d.jsxs)("div",{className:"grid min-w-0 grid-cols-1 gap-3 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5 sm:gap-4",children:[(0,d.jsx)(i.Zp,{className:"flex min-w-0 flex-col gap-1 px-4 py-3",children:(0,d.jsxs)(i.Wu,{className:"flex min-w-0 flex-col gap-1 px-0 py-0",children:[(0,d.jsx)("span",{className:"text-muted-foreground text-sm uppercase font-semibold",children:"Total Requests"}),(0,d.jsx)("span",{className:"truncate text-2xl font-bold",children:n(a.totalRequests)})]})}),(0,d.jsx)(i.Zp,{className:"flex min-w-0 flex-col gap-1 px-4 py-3",children:(0,d.jsxs)(i.Wu,{className:"flex min-w-0 flex-col gap-1 px-0 py-0",children:[(0,d.jsx)("span",{className:"text-muted-foreground text-sm uppercase font-semibold",children:"Total Input Tokens"}),(0,d.jsx)("span",{className:"truncate text-2xl font-bold",children:n(a.totalPromptTokens)})]})}),(0,d.jsx)(i.Zp,{className:"flex min-w-0 flex-col gap-1 px-4 py-3",children:(0,d.jsxs)(i.Wu,{className:"flex min-w-0 flex-col gap-1 px-0 py-0",children:[(0,d.jsx)("span",{className:"text-muted-foreground text-sm uppercase font-semibold",children:"Cached Tokens"}),(0,d.jsx)("span",{className:"truncate text-2xl font-bold",children:n(a.totalCachedTokens)})]})}),(0,d.jsx)(i.Zp,{className:"flex min-w-0 flex-col gap-1 px-4 py-3",children:(0,d.jsxs)(i.Wu,{className:"flex min-w-0 flex-col gap-1 px-0 py-0",children:[(0,d.jsx)("span",{className:"text-muted-foreground text-sm uppercase font-semibold",children:"Output Tokens"}),(0,d.jsx)("span",{className:"truncate text-2xl font-bold",children:n(a.totalCompletionTokens)})]})}),(0,d.jsx)(i.Zp,{className:"flex min-w-0 flex-col gap-1 px-4 py-3",children:(0,d.jsxs)(i.Wu,{className:"flex min-w-0 flex-col gap-1 px-0 py-0",children:[(0,d.jsx)("span",{className:"text-muted-foreground text-sm uppercase font-semibold",children:"Estimated Cost"}),(0,d.jsx)("span",{className:"truncate text-2xl font-bold",children:(b=a.totalCost,`$${(b||0).toFixed(2)}`)})]})})]})}let p=a=>new Intl.NumberFormat().format(a||0),q=a=>`$${(a||0).toFixed(2)}`;function r(a){if(!a)return"Never";let b=Math.floor((Date.now()-new Date(a))/6e4);return b<1?"Just now":b<60?`${b}m ago`:b<1440?`${Math.floor(b/60)}h ago`:new Date(a).toLocaleDateString()}function s({field:a,currentSort:b,currentOrder:c}){return b!==a?(0,d.jsx)("span",{className:"ml-1 opacity-20",children:"↕"}):(0,d.jsx)("span",{className:"ml-1",children:"asc"===c?"↑":"↓"})}function t({item:a,viewMode:b,isSummary:c=!1}){return"tokens"===b?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-4 py-2.5 text-right tabular-nums",children:(0,d.jsx)("span",{className:"inline-flex min-w-16 items-center justify-center rounded-md bg-primary/10 px-1.5 py-1 text-center text-[11px] font-medium text-primary",children:c&&void 0===a.promptTokens?"—":p(a.promptTokens)})}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right tabular-nums",children:(0,d.jsx)("span",{className:"inline-flex min-w-16 items-center justify-center rounded-md bg-muted px-1.5 py-1 text-center text-[11px] font-medium text-muted-foreground",children:a.cachedTokens?p(a.cachedTokens):"—"})}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right tabular-nums",children:(0,d.jsx)("span",{className:"inline-flex min-w-16 items-center justify-center rounded-md bg-emerald-500/10 px-1.5 py-1 text-center text-[11px] font-medium text-emerald-600",children:c&&void 0===a.completionTokens?"—":p(a.completionTokens)})}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right font-medium tabular-nums text-xs",children:p(a.totalTokens)})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-4 py-2.5 text-right tabular-nums",children:(0,d.jsx)("span",{className:"inline-flex min-w-16 items-center justify-center rounded-md bg-primary/10 px-1.5 py-1 text-center text-[11px] font-medium text-primary",children:c&&void 0===a.inputCost?"—":q(a.inputCost)})}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right tabular-nums",children:(0,d.jsx)("span",{className:"inline-flex min-w-16 items-center justify-center rounded-md bg-muted px-1.5 py-1 text-center text-[11px] font-medium text-muted-foreground",children:a.cachedCost?q(a.cachedCost):"—"})}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right tabular-nums",children:(0,d.jsx)("span",{className:"inline-flex min-w-16 items-center justify-center rounded-md bg-emerald-500/10 px-1.5 py-1 text-center text-[11px] font-medium text-emerald-600",children:c&&void 0===a.outputCost?"—":q(a.outputCost)})}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right",children:(0,d.jsx)("span",{className:"inline-flex min-w-16 items-center justify-center rounded-md bg-amber-500/10 px-1.5 py-1 text-center text-[11px] font-medium text-amber-600",children:q(a.totalCost||a.cost)})})]})}function u({title:a,columns:b,groupedData:c,tableType:g,sortBy:h,sortOrder:j,onToggleSort:k,viewMode:l,storageKey:m,renderDetailCells:n,renderSummaryCells:o,emptyMessage:p}){let[q,r]=(0,f.useState)(new Set),v=(0,f.useCallback)(a=>{r(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})},[]),w=(0,f.useMemo)(()=>"tokens"===l?[{field:"promptTokens",label:"Input Tokens"},{field:"cachedTokens",label:"Cached"},{field:"completionTokens",label:"Output Tokens"},{field:"totalTokens",label:"Total Tokens"}]:[{field:"promptTokens",label:"Input Cost"},{field:"cachedCost",label:"Cached Cost"},{field:"completionTokens",label:"Output Cost"},{field:"cost",label:"Total Cost"}],[l]),x=b.length+w.length;return(0,d.jsxs)(i.Zp,{className:"flex min-w-0 flex-col overflow-hidden",style:{paddingBlock:0,gap:0},children:[(0,d.jsxs)("div",{className:"flex shrink-0 items-center gap-2 border-b border-border bg-card/80 px-4 py-3 backdrop-blur",children:[(0,d.jsx)("span",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:a}),(0,d.jsxs)("span",{className:"ml-auto text-xs text-muted-foreground",children:[c.length," groups"]})]}),(0,d.jsx)(i.Wu,{className:"flex min-h-0 flex-1 flex-col p-0",children:(0,d.jsx)("div",{className:"overflow-x-auto",children:(0,d.jsxs)("table",{className:"w-full text-sm text-left",children:[(0,d.jsx)("thead",{className:"border-b border-border/60 text-muted-foreground",children:(0,d.jsxs)("tr",{children:[b.map(a=>(0,d.jsxs)("th",{className:`px-4 py-2 text-[11px] font-semibold uppercase tracking-wide cursor-pointer hover:bg-accent/60 ${"right"===a.align?"text-right":""}`,onClick:()=>k(g,a.field),children:[a.label," ",(0,d.jsx)(s,{field:a.field,currentSort:h,currentOrder:j})]},a.field)),w.map(a=>(0,d.jsxs)("th",{className:"px-4 py-2 text-right text-[11px] font-semibold uppercase tracking-wide cursor-pointer hover:bg-accent/60",onClick:()=>k(g,a.field),children:[a.label," ",(0,d.jsx)(s,{field:a.field,currentSort:h,currentOrder:j})]},a.field))]})}),(0,d.jsxs)("tbody",{className:"divide-y divide-border/40",children:[c.map(a=>(0,d.jsxs)(f.Fragment,{children:[(0,d.jsxs)("tr",{className:"group-summary cursor-pointer transition-colors last:border-b-0 hover:bg-accent/60",onClick:()=>v(a.groupKey),children:[(0,d.jsx)("td",{className:"px-4 py-2.5",children:(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)(e.default,{name:"chevron_right",className:`text-[18px] text-muted-foreground transition-transform ${q.has(a.groupKey)?"rotate-90":""}`}),(0,d.jsx)("span",{className:`truncate font-mono text-xs font-medium transition-colors ${a.summary.pending>0?"text-primary":""}`,children:a.groupKey})]})}),o(a),(0,d.jsx)(t,{item:a.summary,viewMode:l,isSummary:!0})]}),q.has(a.groupKey)&&a.items.map(a=>(0,d.jsxs)("tr",{className:"group-detail bg-muted/20 transition-colors last:border-b-0 hover:bg-accent/60",children:[n(a),(0,d.jsx)(t,{item:a,viewMode:l})]},`detail-${a.key}`))]},a.groupKey)),0===c.length&&(0,d.jsx)("tr",{children:(0,d.jsx)("td",{colSpan:x,className:"px-4 py-2.5",children:(0,d.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 py-8 text-muted-foreground",children:[(0,d.jsx)(e.default,{name:"history",className:"text-2xl opacity-50"}),(0,d.jsx)("p",{className:"text-xs",children:p})]})})})]})]})})})]})}var v=c(51265),w=c(99540),x=c(45607),y=c(82462),z=c(75987),A=c(51568),B=c(17091),C=c(49259),D=c(21096);let E=a=>a>=1e6?`${(a/1e6).toFixed(1)}M`:a>=1e3?`${(a/1e3).toFixed(1)}K`:String(a||0),F=a=>`$${(a||0).toFixed(4)}`;function G({period:a="7d"}){let[b,c]=(0,f.useState)([]),[e,g]=(0,f.useState)(!0),[h,j]=(0,f.useState)("tokens");(0,f.useCallback)(async()=>{g(!0);try{let b=await fetch(`/api/usage/chart?period=${a}`);if(b.ok){let a=await b.json();c(a)}}catch(a){console.error("Failed to fetch chart data:",a)}finally{g(!1)}},[a]);let k=b.some(a=>a.tokens>0||a.cost>0);return(0,d.jsx)(i.Zp,{className:"flex min-w-0 flex-col gap-3 p-3 sm:p-4",children:(0,d.jsxs)(i.Wu,{className:"flex min-w-0 flex-col gap-3 px-0 py-0",children:[(0,d.jsxs)("div",{className:"grid w-full grid-cols-2 items-center gap-1 rounded-lg border border-border bg-muted p-1 sm:w-auto sm:self-start",children:[(0,d.jsx)("button",{onClick:()=>j("tokens"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"tokens"===h?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground hover:text-foreground hover:bg-muted"}`,children:"Tokens"}),(0,d.jsx)("button",{onClick:()=>j("cost"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"cost"===h?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground hover:text-foreground hover:bg-muted"}`,children:"Cost"})]}),e?(0,d.jsxs)("div",{className:"flex flex-col gap-2","aria-hidden":!0,children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)(D.E,{className:"h-3 w-24"}),(0,d.jsx)(D.E,{className:"h-3 w-16"})]}),(0,d.jsx)(D.E,{className:"h-[220px] w-full rounded-lg"}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)(D.E,{className:"h-3 w-12"}),(0,d.jsx)(D.E,{className:"h-3 w-12"}),(0,d.jsx)(D.E,{className:"h-3 w-12"})]})]}):k?(0,d.jsx)(w.u,{width:"100%",height:220,children:(0,d.jsxs)(x.Q,{data:b,margin:{top:4,right:8,left:0,bottom:0},children:[(0,d.jsxs)("defs",{children:[(0,d.jsxs)("linearGradient",{id:"gradTokens",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,d.jsx)("stop",{offset:"5%",stopColor:"#6366f1",stopOpacity:.25}),(0,d.jsx)("stop",{offset:"95%",stopColor:"#6366f1",stopOpacity:0})]}),(0,d.jsxs)("linearGradient",{id:"gradCost",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,d.jsx)("stop",{offset:"5%",stopColor:"#f59e0b",stopOpacity:.25}),(0,d.jsx)("stop",{offset:"95%",stopColor:"#f59e0b",stopOpacity:0})]})]}),(0,d.jsx)(y.d,{strokeDasharray:"3 3",strokeOpacity:.1}),(0,d.jsx)(z.W,{dataKey:"label",tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,interval:"preserveStartEnd"}),(0,d.jsx)(A.h,{tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,tickFormatter:"tokens"===h?E:F,width:50}),(0,d.jsx)(B.m,{contentStyle:{backgroundColor:"var(--background)",border:"1px solid var(--border)",borderRadius:"8px",fontSize:"12px"},formatter:(a,b)=>"tokens"===b?[E(a),"Tokens"]:[F(a),"Cost"]}),"tokens"===h?(0,d.jsx)(C.Gk,{type:"monotone",dataKey:"tokens",stroke:"#6366f1",strokeWidth:2,fill:"url(#gradTokens)",dot:!1,activeDot:{r:4}}):(0,d.jsx)(C.Gk,{type:"monotone",dataKey:"cost",stroke:"#f59e0b",strokeWidth:2,fill:"url(#gradCost)",dot:!1,activeDot:{r:4}})]})}):(0,d.jsx)("div",{className:"h-48 flex items-center justify-center text-muted-foreground text-sm",children:"No data for this period"})]})})}let H=(0,v.default)(async()=>{},{loadableGenerated:{modules:["shared/components/UsageStats.tsx -> @/app/(dashboard)/dashboard/usage/components/ProviderTopology"]},ssr:!1});function I({timestamp:a}){let b,[,c]=(0,f.useState)(0);return(0,d.jsx)(d.Fragment,{children:(b=Math.floor((Date.now()-new Date(a).getTime())/1e3))<60?`${b}s ago`:b<3600?`${Math.floor(b/60)}m ago`:b<86400?`${Math.floor(b/3600)}h ago`:`${Math.floor(b/86400)}d ago`})}function J({requests:a=[],providerNames:b={}}){return(0,d.jsxs)(i.Zp,{className:"flex min-w-0 flex-col overflow-hidden",style:{height:480,paddingBlock:0,gap:0},children:[(0,d.jsxs)("div",{className:"sticky top-0 z-10 flex shrink-0 items-center gap-2 border-b border-border bg-card/80 px-4 py-3 backdrop-blur",children:[(0,d.jsxs)("span",{className:"relative flex h-2 w-2",children:[(0,d.jsx)("span",{className:"absolute inline-flex h-full w-full animate-ping rounded-full bg-emerald-500 opacity-60"}),(0,d.jsx)("span",{className:"relative inline-flex h-2 w-2 rounded-full bg-emerald-500"})]}),(0,d.jsx)("span",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:"Recent Requests"}),(0,d.jsxs)(h.E,{variant:"secondary",className:"ml-auto text-xs",children:["last ",a.length," requests"]})]}),(0,d.jsxs)("div",{className:"grid shrink-0 grid-cols-[8px_minmax(0,1fr)_minmax(0,88px)_64px_64px_52px] items-center gap-2 border-b border-border/60 px-4 py-2",children:[(0,d.jsx)("span",{}),(0,d.jsx)("span",{className:"text-[11px] font-semibold uppercase tracking-wide text-muted-foreground",children:"Model"}),(0,d.jsx)("span",{className:"text-[11px] font-semibold uppercase tracking-wide text-muted-foreground",children:"Provider"}),(0,d.jsx)("span",{className:"text-center text-[11px] font-semibold uppercase tracking-wide text-muted-foreground",children:"Input ↑"}),(0,d.jsx)("span",{className:"text-center text-[11px] font-semibold uppercase tracking-wide text-muted-foreground",children:"Output ↓"}),(0,d.jsx)("span",{className:"text-right text-[11px] font-semibold uppercase tracking-wide text-muted-foreground",children:"When"})]}),(0,d.jsx)(i.Wu,{className:"flex min-h-0 flex-1 flex-col p-0",children:a.length?(0,d.jsx)("div",{className:"flex min-h-0 flex-1 flex-col overflow-y-auto",children:a.map((a,c)=>{let e=!a.status||"ok"===a.status||"success"===a.status;return(0,d.jsxs)("div",{className:"grid grid-cols-[8px_minmax(0,1fr)_minmax(0,88px)_64px_64px_52px] items-center gap-2 border-b border-border/40 px-4 py-2.5 transition-colors last:border-b-0 hover:bg-accent/60",children:[(0,d.jsx)("span",{className:`h-2 w-2 shrink-0 rounded-full ${e?"bg-emerald-500 shadow-[0_0_6px_rgba(16,185,129,0.8)]":"bg-destructive shadow-[0_0_6px_rgba(239,68,68,0.8)]"}`}),(0,d.jsx)("span",{className:"truncate font-mono text-xs font-medium",children:a.model}),(0,d.jsx)(h.E,{variant:"ghost",className:"justify-start truncate px-1.5",children:b[a.provider]||a.provider||"—"}),(0,d.jsx)("span",{className:"flex w-full items-center justify-center rounded-md bg-primary/10 px-1.5 py-1 text-center text-[11px] font-medium text-primary tabular-nums",children:p(a.promptTokens)}),(0,d.jsx)("span",{className:"flex w-full items-center justify-center rounded-md bg-emerald-500/10 px-1.5 py-1 text-center text-[11px] font-medium text-emerald-600 tabular-nums",children:p(a.completionTokens)}),(0,d.jsx)("span",{className:"text-right text-[11px] whitespace-nowrap text-muted-foreground",children:(0,d.jsx)(I,{timestamp:a.timestamp})})]},c)})}):(0,d.jsxs)("div",{className:"flex flex-1 flex-col items-center justify-center gap-2 text-muted-foreground",children:[(0,d.jsx)(e.default,{name:"history",className:"text-2xl opacity-50"}),(0,d.jsx)("p",{className:"text-xs",children:"No requests yet."})]})})]})}function K(a,b={},c,d){return Object.entries(a||{}).map(([a,c])=>{let d=(c.promptTokens||0)+(c.completionTokens||0),e=c.cost||0,f=c.cachedTokens||0,g=Math.max(0,(c.promptTokens||0)-f),h=d>0?(c.completionTokens||0)*(e/d):0;return{...c,key:a,totalTokens:d,totalCost:e,inputCost:d>0?e/d*g:0,cachedCost:d>0?e/d*f:0,outputCost:h,pending:b[a]||0}}).sort((a,b)=>{let e=a[c],f=b[c];return("string"==typeof e&&(e=e.toLowerCase()),"string"==typeof f&&(f=f.toLowerCase()),e<f)?"asc"===d?-1:1:e>f?"asc"===d?1:-1:0})}function L(a,b){if(!Array.isArray(a))return[];let c={};return a.forEach(a=>{let d=function(a,b){switch(b){case"rawModel":return a.rawModel||"Unknown Model";case"accountName":return a.accountName||`Account ${a.connectionId?.slice(0,8)}...`||"Unknown Account";case"keyName":return a.keyName||"Unknown Key";case"endpoint":return a.endpoint||"Unknown Endpoint";default:return a[b]||"Unknown"}}(a,b);c[d]||(c[d]={groupKey:d,summary:{requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,totalTokens:0,cost:0,inputCost:0,cachedCost:0,outputCost:0,lastUsed:null,pending:0},items:[]});let e=c[d].summary;e.requests+=a.requests||0,e.promptTokens+=a.promptTokens||0,e.completionTokens+=a.completionTokens||0,e.cachedTokens+=a.cachedTokens||0,e.totalTokens+=a.totalTokens||0,e.cost+=a.cost||0,e.inputCost+=a.inputCost||0,e.cachedCost+=a.cachedCost||0,e.outputCost+=a.outputCost||0,e.pending+=a.pending||0,a.lastUsed&&(!e.lastUsed||new Date(a.lastUsed)>new Date(e.lastUsed))&&(e.lastUsed=a.lastUsed),c[d].items.push(a)}),Object.values(c)}let M=[{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],N=[{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"accountName",label:"Account"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],O=[{field:"keyName",label:"API Key Name"},{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],P=[{field:"endpoint",label:"Endpoint"},{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],Q=[{value:"model",label:"Usage by Model"},{value:"account",label:"Usage by Account"},{value:"apiKey",label:"Usage by API Key"},{value:"endpoint",label:"Usage by Endpoint"}],R=[{value:"today",label:"Today"},{value:"24h",label:"24h"},{value:"7d",label:"7D"},{value:"30d",label:"30D"},{value:"60d",label:"60D"}];function S({period:a,setPeriod:b,hidePeriodSelector:c=!1}={}){let i=(0,g.useRouter)(),n=(0,g.useSearchParams)(),q=n.get("sortBy")||"rawModel",s=n.get("sortOrder")||"asc",[t,v]=(0,f.useState)(null),[w,x]=(0,f.useState)(!0),[y,z]=(0,f.useState)(!1),[A,B]=(0,f.useState)("model"),[C,D]=(0,f.useState)("costs"),[E,F]=(0,f.useState)([]),[I,T]=(0,f.useState)({}),[U,V]=(0,f.useState)("today");(0,f.useRef)(!0),(0,f.useRef)(!1);let W=a??U,X=b??V,Y=(0,f.useCallback)((a,b)=>{let c=new URLSearchParams(n.toString());c.get("sortBy")===b?c.set("sortOrder","asc"===c.get("sortOrder")?"desc":"asc"):(c.set("sortBy",b),c.set("sortOrder","asc")),i.replace(`?${c.toString()}`,{scroll:!1})},[n,i]),Z=(0,f.useMemo)(()=>{if(!t)return null;switch(A){case"model":{let a=t.pending?.byModel||{};return{columns:M,groupedData:L(K(t.byModel,a,q,s),"rawModel"),storageKey:"usage-stats:expanded-models",emptyMessage:"No usage recorded yet.",renderSummaryCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-4 py-2.5 text-muted-foreground text-xs",children:"—"}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right text-xs tabular-nums",children:p(a.summary.requests)}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right text-muted-foreground whitespace-nowrap text-[11px]",children:r(a.summary.lastUsed)})]}),renderDetailCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:`px-4 py-2.5 truncate font-mono text-xs font-medium transition-colors ${a.pending>0?"text-primary":""}`,children:a.rawModel}),(0,d.jsx)("td",{className:"px-4 py-2.5",children:(0,d.jsx)(h.E,{variant:a.pending>0?"default":"ghost",className:"justify-start truncate px-1.5",children:a.provider})}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right text-xs tabular-nums",children:p(a.requests)}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right text-muted-foreground whitespace-nowrap text-[11px]",children:r(a.lastUsed)})]})}}case"account":{let a={};return t?.pending?.byAccount&&Object.entries(t.byAccount||{}).forEach(([b,c])=>{let d=t.pending.byAccount[c.connectionId];if(d){let e=c.provider?`${c.rawModel} (${c.provider})`:c.rawModel;a[b]=d[e]||0}}),{columns:N,groupedData:L(K(t.byAccount,a,q,s),"accountName"),storageKey:"usage-stats:expanded-accounts",emptyMessage:"No account-specific usage recorded yet.",renderSummaryCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-4 py-2.5 text-muted-foreground text-xs",children:"—"}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-muted-foreground text-xs",children:"—"}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right text-xs tabular-nums",children:p(a.summary.requests)}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right text-muted-foreground whitespace-nowrap text-[11px]",children:r(a.summary.lastUsed)})]}),renderDetailCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:`px-4 py-2.5 truncate text-xs font-medium transition-colors ${a.pending>0?"text-primary":""}`,children:a.accountName||`Account ${a.connectionId?.slice(0,8)}...`}),(0,d.jsx)("td",{className:`px-4 py-2.5 truncate font-mono text-xs font-medium transition-colors ${a.pending>0?"text-primary":""}`,children:a.rawModel}),(0,d.jsx)("td",{className:"px-4 py-2.5",children:(0,d.jsx)(h.E,{variant:a.pending>0?"default":"ghost",className:"justify-start truncate px-1.5",children:a.provider})}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right text-xs tabular-nums",children:p(a.requests)}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right text-muted-foreground whitespace-nowrap text-[11px]",children:r(a.lastUsed)})]})}}case"apiKey":return{columns:O,groupedData:L(K(t.byApiKey,{},q,s),"keyName"),storageKey:"usage-stats:expanded-apikeys",emptyMessage:"No API key usage recorded yet.",renderSummaryCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-4 py-2.5 text-muted-foreground text-xs",children:"—"}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-muted-foreground text-xs",children:"—"}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right text-xs tabular-nums",children:p(a.summary.requests)}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right text-muted-foreground whitespace-nowrap text-[11px]",children:r(a.summary.lastUsed)})]}),renderDetailCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-4 py-2.5 truncate text-xs font-medium",children:a.keyName}),(0,d.jsx)("td",{className:"px-4 py-2.5 truncate font-mono text-xs",children:a.rawModel}),(0,d.jsx)("td",{className:"px-4 py-2.5",children:(0,d.jsx)(h.E,{variant:"ghost",className:"justify-start truncate px-1.5",children:a.provider})}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right text-xs tabular-nums",children:p(a.requests)}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right text-muted-foreground whitespace-nowrap text-[11px]",children:r(a.lastUsed)})]})};default:return{columns:P,groupedData:L(K(t.byEndpoint,{},q,s),"endpoint"),storageKey:"usage-stats:expanded-endpoints",emptyMessage:"No endpoint usage recorded yet.",renderSummaryCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-4 py-2.5 text-muted-foreground text-xs",children:"—"}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-muted-foreground text-xs",children:"—"}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right text-xs tabular-nums",children:p(a.summary.requests)}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right text-muted-foreground whitespace-nowrap text-[11px]",children:r(a.summary.lastUsed)})]}),renderDetailCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-4 py-2.5 truncate font-mono text-xs font-medium",children:a.endpoint}),(0,d.jsx)("td",{className:"px-4 py-2.5 truncate font-mono text-xs",children:a.rawModel}),(0,d.jsx)("td",{className:"px-4 py-2.5",children:(0,d.jsx)(h.E,{variant:"ghost",className:"justify-start truncate px-1.5",children:a.provider})}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right text-xs tabular-nums",children:p(a.requests)}),(0,d.jsx)("td",{className:"px-4 py-2.5 text-right text-muted-foreground whitespace-nowrap text-[11px]",children:r(a.lastUsed)})]})}}},[t,A,q,s]);if(!t&&!w)return(0,d.jsx)("div",{className:"text-muted-foreground",children:"Failed to load usage statistics."});let $=(0,d.jsxs)(l.CardGrid,{variant:"stat",children:[(0,d.jsx)(m.StatCardSkeleton,{}),(0,d.jsx)(m.StatCardSkeleton,{}),(0,d.jsx)(m.StatCardSkeleton,{}),(0,d.jsx)(m.StatCardSkeleton,{}),(0,d.jsx)(m.StatCardSkeleton,{})]}),_=(0,d.jsx)("div",{className:"flex items-center justify-center py-12 text-muted-foreground",children:(0,d.jsx)(e.default,{name:"progress_activity",className:"text-[32px] animate-spin"})});return(0,d.jsxs)("div",{className:"flex min-w-0 flex-col gap-6",children:[!c&&(0,d.jsxs)("div",{className:"flex w-full items-center gap-2 sm:w-auto sm:self-end",children:[(0,d.jsx)("div",{className:"grid flex-1 grid-cols-5 items-center gap-1 rounded-lg border border-border bg-muted p-1 sm:flex sm:flex-none",children:R.map(a=>(0,d.jsx)("button",{onClick:()=>X(a.value),disabled:y,className:`rounded-md px-3 py-1 text-sm font-medium transition-colors ${W===a.value?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground hover:bg-muted hover:text-foreground"}`,children:a.label},a.value))}),y&&(0,d.jsx)(e.default,{name:"progress_activity",className:"text-[16px] text-muted-foreground animate-spin"})]}),w?$:(0,d.jsx)(o,{stats:t}),w?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(m.PanelSkeleton,{}),(0,d.jsx)(m.PanelSkeleton,{})]}):(0,d.jsxs)("div",{className:"grid min-w-0 grid-cols-1 items-stretch gap-3 lg:grid-cols-[minmax(0,1fr)_minmax(0,1fr)]",children:[(0,d.jsx)(H,{providers:E,activeRequests:t.activeRequests||[],lastProvider:t.recentRequests?.[0]?.provider||"",errorProvider:t.errorProvider||""}),(0,d.jsx)(J,{requests:t.recentRequests||[],providerNames:I})]}),w?(0,d.jsx)(m.PanelSkeleton,{}):(0,d.jsx)(G,{period:W}),(0,d.jsxs)("div",{className:"flex min-w-0 flex-col gap-3",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,d.jsx)(k.default,{options:[{value:"costs",label:"Costs"},{value:"tokens",label:"Tokens"}],value:C,onChange:D,size:"sm",className:"w-full sm:w-auto"}),(0,d.jsxs)(j.l6,{value:A,onValueChange:B,children:[(0,d.jsx)(j.bq,{className:"w-full sm:w-50",children:(0,d.jsx)(j.yv,{})}),(0,d.jsx)(j.gC,{children:Q.map(a=>(0,d.jsx)(j.eb,{value:a.value,children:a.label},a.value))})]})]}),w?_:Z&&(0,d.jsx)(u,{title:Q.find(a=>a.value===A)?.label||"Usage",columns:Z.columns,groupedData:Z.groupedData,tableType:A,sortBy:q,sortOrder:s,onToggleSort:Y,viewMode:C,storageKey:Z.storageKey,renderSummaryCells:Z.renderSummaryCells,renderDetailCells:Z.renderDetailCells,emptyMessage:Z.emptyMessage})]})]})}},82975:(a,b,c)=>{"use strict";c.d(b,{HY:()=>g,IM:()=>m,Kw:()=>h,uM:()=>l});let d={antigravity:"gemini","perplexity-agent":"perplexity","gitlab-duo":"gitlab","vercel-ai-gateway":"vercel","ollama-search":"ollama","opencode-zen":"opencode"},e=new Set;function f(a){return a&&"string"==typeof a?a.trim().toLowerCase():""}function g(a){let b=function(a){let b=f(a);if(!b||e.has(b))return"";let c=d[b]||b;return e.has(c)?"":c}(a);return b?`/providers/${b}.png`:null}function h(a){let b=f(a);b&&e.add(b);let c=d[b];c&&e.add(c)}let i=new Set(["www","api","apis","rest","rpc","gateway","proxy","llm","chat","v1","v2","ai","app","dev","cloud","com","net","org","io","co","us","eu","cn"]),j={generativelanguage:"gemini",googleapis:"gemini",x:"xai"},k=new Set(["agentrouter","alicode","alicode-intl","alims-intl","alitp-intl","amp","anthropic","api-airforce","assemblyai","aws-polly","azure","baidu","bazaarlink","black-forest-labs","blackbox","bluesminds","brave-search","byteplus","cartesia","cerebras","chutes","claude","clinepass","codebuddy-cn","codebuddy-intl","codex","cohere","comfyui","commandcode","continue","coqui","cursor","deepgram","deepseek","deepseek-tui","devin-cli","droid","edge-tts","elevenlabs","exa","fal-ai","featherless","firecrawl","fireworks","fish-audio","gemini","github","gitlab","glm","glm-cn","google-pse","google-tts","grok-cli","grok-web","groq","hermes","huggingface","hyperbolic","iflow","inworld","jcode","jina-ai","jina-reader","kilo-gateway","kilocode","kimchi","linkup","llm7","local-device","longcat","mimo-free","minimax","minimax-cn","mistral","mmf","morph","nanobanana","nebius","novita","nvidia","ollama","ollama-local","openai","openclaw","opencode","opencode-go","opendesign","openrouter","perplexity","perplexity-agent","perplexity-web","playht","poolside","qoder","qwen","recraft","reka","roo","runwayml","sambanova","sdwebui","searchapi","searxng","selfhosted-embedding","selfhosted-stt","selfhosted-tts","serper","siliconflow","stability-ai","tavily","tencent","together","tokenrouter","topaz","tortoise","trae","venice","vercel","vercel-ai-gateway","volcengine-ark","voyage-ai","windsurf","workbuddy","xai","xiaomi-mimo","xiaomi-tokenplan","xquik","youcom","zed"]);function l(a){let b="";try{b=new URL(String(a||"")).hostname.toLowerCase()}catch{return""}if(!b||"localhost"===b||b.startsWith("127.")||b.includes(":")||b.startsWith("[")||/^\d+\.\d+\.\d+\.\d+$/.test(b))return"";let c=b.split(".").filter(Boolean).find(a=>!i.has(a)&&!/^\d+$/.test(a));if(!c)return"";let e=j[c]||d[c]||c;return k.has(e)?e:""}function m(a){let b=String(a||"").trim().split(/\s+/).filter(Boolean);return b.length?1===b.length?b[0].slice(0,2).toUpperCase():`${b[0][0]}${b[b.length-1][0]}`.toUpperCase():""}},83777:(a,b,c)=>{"use strict";c.d(b,{bq:()=>l,eb:()=>n,gC:()=>m,l6:()=>j,yv:()=>k});var d=c(86240);c(70433);var e=c(89988),f=c(89055),g=c(16397),h=c(48985),i=c(78494);function j({...a}){return(0,d.jsx)(f.bL,{"data-slot":"select",...a})}function k({...a}){return(0,d.jsx)(f.WT,{"data-slot":"select-value",...a})}function l({className:a,size:b="default",children:c,...h}){return(0,d.jsxs)(f.l9,{"data-slot":"select-trigger","data-size":b,className:(0,e.cn)("flex w-fit items-center justify-between gap-1.5 rounded-md border border-input bg-background py-2 pr-2 pl-2.5 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",a),...h,children:[c,(0,d.jsx)(f.In,{asChild:!0,children:(0,d.jsx)(g.A,{className:"pointer-events-none size-4 text-muted-foreground"})})]})}function m({className:a,children:b,position:c="popper",align:g="center",...h}){return(0,d.jsx)(f.ZL,{children:(0,d.jsxs)(f.UC,{"data-slot":"select-content","data-align-trigger":"item-aligned"===c,className:(0,e.cn)("relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95","popper"===c&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",a),position:c,align:g,...h,children:[(0,d.jsx)(o,{}),(0,d.jsx)(f.LM,{"data-position":c,className:(0,e.cn)("data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)","popper"===c&&""),children:b}),(0,d.jsx)(p,{})]})})}function n({className:a,children:b,...c}){return(0,d.jsxs)(f.q7,{"data-slot":"select-item",className:(0,e.cn)("relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",a),...c,children:[(0,d.jsx)("span",{className:"pointer-events-none absolute right-2 flex size-4 items-center justify-center",children:(0,d.jsx)(f.VF,{children:(0,d.jsx)(h.A,{className:"pointer-events-none"})})}),(0,d.jsx)(f.p4,{children:b})]})}function o({className:a,...b}){return(0,d.jsx)(f.PP,{"data-slot":"select-scroll-up-button",className:(0,e.cn)("z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",a),...b,children:(0,d.jsx)(i.A,{})})}function p({className:a,...b}){return(0,d.jsx)(f.wn,{"data-slot":"select-scroll-down-button",className:(0,e.cn)("z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",a),...b,children:(0,d.jsx)(g.A,{})})}},84581:(a,b,c)=>{"use strict";c.d(b,{default:()=>e});var d=c(35062);(0,d.registerClientReference)(function(){throw Error("Attempted to call toLucideName() from the server but toLucideName 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/amir/Projects/10Router/src/shared/components/Icon.tsx","toLucideName"),(0,d.registerClientReference)(function(){throw Error("Attempted to call LucideIcon() from the server but LucideIcon 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/amir/Projects/10Router/src/shared/components/Icon.tsx","LucideIcon");let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/Icon.tsx\" 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/amir/Projects/10Router/src/shared/components/Icon.tsx","default")},85405:(a,b,c)=>{"use strict";c.d(b,{default:()=>l});var d=c(86240),e=c(28907),f=c(70433),g=c(16467),h=c.n(g),i=c(87121),j=c(81501),k=c(63265);function l({isOpen:a,onSuccess:b,onClose:c}){let[g,h]=(0,f.useState)(""),[m,n]=(0,f.useState)(""),[o,p]=(0,f.useState)(null),[q,r]=(0,f.useState)(!1),[s,t]=(0,f.useState)(!1),[u,v]=(0,f.useState)(!1),[w,x]=(0,f.useState)(!1),y=async()=>{t(!0),p(null),v(!1),x(!1);try{let a=await fetch("/api/oauth/cursor/auto-import"),b=await a.json();b.found?(h(b.accessToken),n(b.machineId),v(!0)):b.windowsManual?x(!0):p(b.error||"Could not auto-detect tokens")}catch(a){p("Failed to auto-detect tokens")}finally{t(!1)}},z=async()=>{if(!g.trim())return void p("Please enter an access token");if(!m.trim())return void p("Please enter a machine ID");r(!0),p(null);try{let a=await fetch("/api/oauth/cursor/import",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accessToken:g.trim(),machineId:m.trim()})}),d=await a.json();if(!a.ok)throw Error(d.error||"Import failed");b?.(),c()}catch(a){p(a.message)}finally{r(!1)}};return(0,d.jsx)(i.default,{isOpen:a,title:"Connect Cursor IDE",onClose:c,children:(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[s&&(0,d.jsxs)("div",{className:"text-center py-6",children:[(0,d.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-primary/10 flex items-center justify-center",children:(0,d.jsx)(e.default,{name:"progress_activity",className:"text-3xl text-primary animate-spin"})}),(0,d.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Auto-detecting tokens..."}),(0,d.jsx)("p",{className:"text-sm text-muted-foreground",children:"Reading from Cursor IDE database"})]}),!s&&(0,d.jsxs)(d.Fragment,{children:[u&&(0,d.jsx)("div",{className:"bg-green-50 dark:bg-green-900/20 p-3 rounded-lg border border-green-200 dark:border-green-800",children:(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(e.default,{name:"check_circle",className:"text-green-600 dark:text-green-400"}),(0,d.jsx)("p",{className:"text-sm text-green-800 dark:text-green-200",children:"Tokens auto-detected from Cursor IDE successfully!"})]})}),w&&(0,d.jsxs)("div",{className:"bg-amber-50 dark:bg-amber-900/20 p-3 rounded-lg border border-amber-200 dark:border-amber-800 flex flex-col gap-2",children:[(0,d.jsxs)("div",{className:"flex gap-2 items-center",children:[(0,d.jsx)(e.default,{name:"info",className:"text-amber-600 dark:text-amber-400"}),(0,d.jsx)("p",{className:"text-sm font-medium text-amber-800 dark:text-amber-200",children:"Could not read Cursor database automatically."})]}),(0,d.jsxs)("p",{className:"text-xs text-amber-700 dark:text-amber-300",children:["Make sure Cursor IDE has been opened at least once, then click"," ",(0,d.jsx)("strong",{children:"Retry"}),". If the problem persists, paste your tokens manually below."]}),(0,d.jsx)(k.$,{onClick:y,variant:"outline",className:"w-full",children:"Retry"})]}),!u&&!w&&!o&&(0,d.jsx)("div",{className:"bg-blue-50 dark:bg-blue-900/20 p-3 rounded-lg border border-blue-200 dark:border-blue-800",children:(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(e.default,{name:"info",className:"text-blue-600 dark:text-blue-400"}),(0,d.jsx)("p",{className:"text-sm text-blue-800 dark:text-blue-200",children:"Cursor IDE not detected. Please paste your tokens manually."})]})}),(0,d.jsxs)("div",{children:[(0,d.jsxs)("label",{className:"block text-sm font-medium mb-2",children:["Access Token ",(0,d.jsx)("span",{className:"text-red-500",children:"*"})]}),(0,d.jsx)("textarea",{value:g,onChange:a=>h(a.target.value),placeholder:"Access token will be auto-filled...",rows:3,className:"w-full px-3 py-2 text-sm font-mono border border-border rounded-lg bg-background focus:outline-none focus:border-primary resize-none"})]}),(0,d.jsxs)("div",{children:[(0,d.jsxs)("label",{className:"block text-sm font-medium mb-2",children:["Machine ID ",(0,d.jsx)("span",{className:"text-red-500",children:"*"})]}),(0,d.jsx)(j.p,{value:m,onChange:a=>n(a.target.value),placeholder:"Machine ID will be auto-filled...",className:"font-mono text-sm"})]}),o&&(0,d.jsx)("div",{className:"bg-red-50 dark:bg-red-900/20 p-3 rounded-lg border border-red-200 dark:border-red-800",children:(0,d.jsx)("p",{className:"text-sm text-red-600 dark:text-red-400",children:o})}),(0,d.jsx)(k.$,{onClick:z,className:"w-full",disabled:q||!g.trim()||!m.trim(),children:q?"Importing...":"Import Token"})]})]})})}l.propTypes={isOpen:h().bool.isRequired,onSuccess:h().func,onClose:h().func.isRequired}},87121:(a,b,c)=>{"use strict";c.d(b,{ConfirmModal:()=>k,default:()=>j});var d=c(86240);c(70433);var e=c(36447),f=c(5174),g=c(63265),h=c(67209);let i={sm:"max-w-sm",md:"max-w-md",lg:"max-w-lg",xl:"max-w-xl",full:"max-w-4xl"};function j({isOpen:a,onClose:b,title:c,children:e,footer:g,size:k="md",closeOnOverlay:l=!0,className:m}){return(0,d.jsx)(h.lG,{open:!!a,onOpenChange:a=>{a||b()},children:(0,d.jsxs)(h.Cf,{className:(0,f.cn)(i[k],m),onPointerDownOutside:l?void 0:a=>a.preventDefault(),onInteractOutside:l?void 0:a=>a.preventDefault(),children:[c&&(0,d.jsx)(h.c7,{children:(0,d.jsx)(h.L3,{children:c})}),(0,d.jsx)("div",{className:"max-h-[calc(85vh-100px)] overflow-y-auto p-4",children:e}),g&&(0,d.jsx)(h.Es,{children:g})]})})}function k({isOpen:a,onClose:b,onConfirm:c,title:f="Confirm",message:h,confirmText:i="Confirm",cancelText:l="Cancel",variant:m="danger",loading:n=!1}){return(0,d.jsx)(j,{isOpen:a,onClose:b,title:f,size:"sm",footer:(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(g.$,{variant:"ghost",onClick:b,disabled:n,children:l}),(0,d.jsxs)(g.$,{variant:"danger"===m?"destructive":"primary"===m?"default":m,onClick:c,disabled:n,children:[n&&(0,d.jsx)(e.A,{className:"animate-spin"}),i]})]}),children:(0,d.jsx)("p",{className:"text-muted-foreground",children:h})})}},87556:(a,b,c)=>{"use strict";c.d(b,{default:()=>o});var d=c(86240),e=c(28907),f=c(70433),g=c(16467),h=c.n(g),i=c(36447),j=c(87121),k=c(71e3),l=c(81501),m=c(63265);let n="https://gitlab.com";function o({isOpen:a,providerInfo:b,onSuccess:c,onClose:g}){let[h,p]=(0,f.useState)(null),[q,r]=(0,f.useState)(n),[s,t]=(0,f.useState)(""),[u,v]=(0,f.useState)(""),[w,x]=(0,f.useState)(""),[y,z]=(0,f.useState)(!1),[A,B]=(0,f.useState)(null),[C,D]=(0,f.useState)(!1),[E,F]=(0,f.useState)(null),G=()=>{p(null),r(n),t(""),v(""),x(""),B(null),z(!1),D(!1),F(null),g()},H=async()=>{if(!w.trim())return void B("Personal Access Token is required");z(!0),B(null);try{let a=await fetch("/api/oauth/gitlab/pat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:w.trim(),baseUrl:q.trim()||n})}),b=await a.json();if(!a.ok)throw Error(b.error||"Authentication failed");c?.(),G()}catch(a){B(a.message)}finally{z(!1)}};return a?C&&E?(0,d.jsx)(k.default,{isOpen:!0,provider:"gitlab",providerInfo:b,oauthMeta:E,idcConfig:void 0,onSuccess:()=>{c?.(),G()},onClose:()=>{D(!1),F(null)}}):(0,d.jsx)(j.default,{isOpen:a,title:"Connect GitLab Duo",onClose:G,size:"lg",footer:void 0,className:void 0,children:(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[!h&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("p",{className:"text-sm text-muted-foreground",children:"Choose how to authenticate with GitLab Duo:"}),(0,d.jsxs)("div",{className:"grid grid-cols-2 gap-3",children:[(0,d.jsxs)("button",{onClick:()=>p("oauth"),className:"flex flex-col items-center gap-2 p-4 rounded-lg border border-border hover:border-primary hover:bg-primary/5 transition-colors text-left",children:[(0,d.jsx)(e.default,{name:"lock_open",className:"text-2xl text-primary"}),(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-sm font-medium",children:"OAuth App"}),(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Use a GitLab OAuth application"})]})]}),(0,d.jsxs)("button",{onClick:()=>p("pat"),className:"flex flex-col items-center gap-2 p-4 rounded-lg border border-border hover:border-primary hover:bg-primary/5 transition-colors text-left",children:[(0,d.jsx)(e.default,{name:"key",className:"text-2xl text-primary"}),(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-sm font-medium",children:"Personal Access Token"}),(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Use a GitLab PAT with api scope"})]})]})]})]}),"oauth"===h&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("p",{className:"text-xs text-muted-foreground",children:["Create an OAuth app at"," ",(0,d.jsx)("a",{href:`${q.trim()||n}/-/profile/applications`,target:"_blank",rel:"noreferrer",className:"text-primary underline",children:"GitLab Applications"})," ","with redirect URI"," ",(0,d.jsx)("code",{className:"bg-sidebar px-1 rounded text-xs",children:"http://localhost/callback"})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsx)("label",{className:"text-sm font-medium",children:"GitLab Base URL"}),(0,d.jsx)(l.p,{value:q,onChange:a=>r(a.target.value),placeholder:n})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsx)("label",{className:"text-sm font-medium",children:"Client ID"}),(0,d.jsx)(l.p,{value:s,onChange:a=>t(a.target.value),placeholder:"Your OAuth application client ID"})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsx)("label",{className:"text-sm font-medium",children:"Client Secret (optional for PKCE)"}),(0,d.jsx)(l.p,{value:u,onChange:a=>v(a.target.value),placeholder:"Leave empty for public PKCE app"})]}),A&&(0,d.jsx)("p",{className:"text-sm text-red-500",children:A}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(m.$,{onClick:()=>{s.trim()?(B(null),F({baseUrl:q.trim()||n,clientId:s.trim(),clientSecret:u.trim()}),D(!0)):B("Client ID is required")},className:"w-full",disabled:!s.trim(),children:"Authorize"}),(0,d.jsx)(m.$,{onClick:()=>{p(null),B(null)},variant:"ghost",className:"w-full",children:"Back"})]})]}),"pat"===h&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("p",{className:"text-xs text-muted-foreground",children:["Create a PAT at"," ",(0,d.jsx)("a",{href:`${q.trim()||n}/-/user_settings/personal_access_tokens`,target:"_blank",rel:"noreferrer",className:"text-primary underline",children:"GitLab Access Tokens"})," ","with scopes: ",(0,d.jsx)("code",{className:"bg-sidebar px-1 rounded text-xs",children:"api"}),","," ",(0,d.jsx)("code",{className:"bg-sidebar px-1 rounded text-xs",children:"read_user"}),", and"," ",(0,d.jsx)("code",{className:"bg-sidebar px-1 rounded text-xs",children:"ai_features"}),"."]}),(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsx)("label",{className:"text-sm font-medium",children:"GitLab Base URL"}),(0,d.jsx)(l.p,{value:q,onChange:a=>r(a.target.value),placeholder:n})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsx)("label",{className:"text-sm font-medium",children:"Personal Access Token"}),(0,d.jsx)(l.p,{value:w,onChange:a=>x(a.target.value),placeholder:"glpat-xxxxxxxxxxxxxxxxxxxx",type:"password"})]}),A&&(0,d.jsx)("p",{className:"text-sm text-red-500",children:A}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsxs)(m.$,{onClick:H,className:"w-full",disabled:!w.trim()||y,children:[y&&(0,d.jsx)(i.A,{className:"animate-spin"}),"Connect"]}),(0,d.jsx)(m.$,{onClick:()=>{p(null),B(null)},variant:"ghost",className:"w-full",children:"Back"})]})]})]})}):null}o.propTypes={isOpen:h().bool.isRequired,providerInfo:h().shape({name:h().string}),onSuccess:h().func,onClose:h().func.isRequired}},87986:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/layouts/AuthLayout.tsx\" 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/amir/Projects/10Router/src/shared/components/layouts/AuthLayout.tsx","default")},89630:(a,b,c)=>{"use strict";c.d(b,{default:()=>k});var d=c(86240),e=c(70433),f=c(16467),g=c.n(f),h=c(36447),i=c(87121),j=c(63265);function k({isOpen:a,onSuccess:b,onClose:c}){let[f,g]=(0,e.useState)(""),[l,m]=(0,e.useState)(!1),[n,o]=(0,e.useState)(null),[p,q]=(0,e.useState)(!1),r=async()=>{if(!f.trim())return void o("Please paste your cookie");m(!0),o(null);try{let a=await fetch("/api/oauth/iflow/cookie",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cookie:f.trim()})}),c=await a.json();if(!a.ok)throw Error(c.error||"Authentication failed");q(!0),setTimeout(()=>{b?.(),s()},1500)}catch(a){o(a.message)}finally{m(!1)}},s=()=>{g(""),o(null),q(!1),c?.()};return(0,d.jsx)(i.default,{isOpen:a,onClose:s,title:"iFlow Cookie Authentication",footer:void 0,className:void 0,children:(0,d.jsx)("div",{className:"space-y-4",children:p?(0,d.jsxs)("div",{className:"text-center py-8",children:[(0,d.jsx)("div",{className:"text-6xl mb-4",children:"✅"}),(0,d.jsx)("p",{className:"text-lg font-medium text-foreground",children:"Authentication Successful!"}),(0,d.jsx)("p",{className:"text-sm text-muted-foreground mt-2",children:"Fresh API key obtained"})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsxs)("p",{className:"text-sm text-muted-foreground",children:["To get a fresh API key, paste your browser cookie from"," ",(0,d.jsx)("a",{href:"https://platform.iflow.cn",target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:"platform.iflow.cn"})]}),(0,d.jsxs)("div",{className:"bg-secondary p-3 rounded-lg text-xs space-y-2",children:[(0,d.jsx)("p",{className:"font-medium text-foreground",children:"How to get cookie:"}),(0,d.jsxs)("ol",{className:"list-decimal list-inside space-y-1 text-muted-foreground",children:[(0,d.jsx)("li",{children:"Open platform.iflow.cn in your browser"}),(0,d.jsx)("li",{children:"Login to your account"}),(0,d.jsx)("li",{children:"Open DevTools (F12) → Application/Storage → Cookies"}),(0,d.jsx)("li",{children:"Copy the entire cookie string (must include BXAuth)"}),(0,d.jsx)("li",{children:"Paste it below"})]})]})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)("label",{className:"block text-sm font-medium text-foreground",children:"Cookie String"}),(0,d.jsx)("textarea",{value:f,onChange:a=>g(a.target.value),placeholder:"BXAuth=xxx; ...",className:"w-full px-3 py-2 bg-secondary border border-border rounded-lg text-sm text-foreground placeholder-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary resize-none",rows:4,disabled:l})]}),n&&(0,d.jsx)("div",{className:"p-3 bg-destructive/10 border border-destructive/20 rounded-lg",children:(0,d.jsx)("p",{className:"text-sm text-destructive",children:n})}),(0,d.jsxs)(j.$,{onClick:r,disabled:l,className:"w-full",children:[l&&(0,d.jsx)(h.A,{className:"animate-spin"}),"Authenticate"]})]})})})}k.propTypes={isOpen:g().bool.isRequired,onSuccess:g().func,onClose:g().func}},89829:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/LanguageSwitcher.tsx\" 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/amir/Projects/10Router/src/shared/components/LanguageSwitcher.tsx","default")},90635:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/amir/Projects/10Router/src/shared/components/ThemeToggle.tsx\" 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/amir/Projects/10Router/src/shared/components/ThemeToggle.tsx","default")},91236:(a,b,c)=>{"use strict";c.d(b,{default:()=>k});var d=c(86240),e=c(28907),f=c(70433),g=c(16467),h=c.n(g),i=c(87121),j=c(63265);function k({isOpen:a,onSuccess:b,onClose:c}){let[g,h]=(0,f.useState)("detecting"),[l,m]=(0,f.useState)(null),[n,o]=(0,f.useState)(null),[p,q]=(0,f.useState)(null),[r,s]=(0,f.useState)(null),t=async()=>{if(l?.apiKey){h("importing"),o(null);try{let a=await fetch("/api/oauth/xiaomi-mimo/api-key",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:l.apiKey,uid:l.uid,baseUrl:l.baseUrl,mimoPassToken:l.mimoPassToken||null,mimoUserId:l.mimoUserId||null,mimoCUserId:l.mimoCUserId||null})}),d=await a.json();if(!a.ok||!d.success)throw Error(d.error||"Import failed");b?.(d.connection),c()}catch(a){h("found"),o(a.message)}}},u=async()=>{o(null);try{let a=crypto.randomUUID(),b=await fetch(`/api/oauth/xiaomi-mimo/authorize?state=${a}`),c=await b.json();if(c.authorizeUrl)q(c.authorizeUrl),s(c.state),window.open(c.authorizeUrl,"_blank","width=600,height=700");else throw Error(c.error||"Failed to start OAuth")}catch(a){o(a.message)}},v=async()=>{if(r){o(null);try{let a=await fetch(`/api/oauth/xiaomi-mimo/poll-status?state=${r}`),d=await a.json();if("done"===d.status&&d.result){let a=await fetch("/api/oauth/xiaomi-mimo/exchange",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({state:r})}),d=await a.json();if(d.success)b?.(d.connection),c();else throw Error(d.error||"Exchange failed")}else if("error"===d.status)throw Error(d.error||"OAuth failed");else o("Authorization not completed yet. Finish in the browser, then click Check Again.")}catch(a){o(a.message)}}};return(0,d.jsx)(i.default,{isOpen:a,title:"Connect Xiaomi MiMo",onClose:c,children:(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:["detecting"===g&&(0,d.jsxs)("div",{className:"text-center py-6",children:[(0,d.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-primary/10 flex items-center justify-center",children:(0,d.jsx)(e.default,{name:"progress_activity",className:"text-3xl text-primary animate-spin"})}),(0,d.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Reading local credentials..."}),(0,d.jsx)("p",{className:"text-sm text-muted-foreground",children:"Checking ~/.local/share/mimocode/auth.json"})]}),"found"===g&&l&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("div",{className:"bg-green-50 dark:bg-green-900/20 p-3 rounded-lg border border-green-200 dark:border-green-800",children:(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(e.default,{name:"check_circle",className:"text-green-600 dark:text-green-400"}),(0,d.jsxs)("div",{className:"text-sm text-green-800 dark:text-green-200",children:[(0,d.jsx)("p",{className:"font-medium",children:"Xiaomi MiMo Desktop credentials found!"}),(0,d.jsxs)("p",{className:"mt-1 opacity-80",children:["UID: ",l.uid||"—"," \xb7 Source:"," ",l.source?.split(/[\\/]/).pop()]})]})]})}),n&&(0,d.jsx)("div",{className:"bg-red-50 dark:bg-red-900/20 p-3 rounded-lg border border-red-200 dark:border-red-800",children:(0,d.jsx)("p",{className:"text-sm text-red-600 dark:text-red-400",children:n})}),(0,d.jsx)(j.$,{onClick:t,className:"w-full",children:"Connect with Local Credentials"})]}),"importing"===g&&(0,d.jsxs)("div",{className:"text-center py-6",children:[(0,d.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-primary/10 flex items-center justify-center",children:(0,d.jsx)(e.default,{name:"progress_activity",className:"text-3xl text-primary animate-spin"})}),(0,d.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connecting..."})]}),"not-found"===g&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("div",{className:"bg-amber-50 dark:bg-amber-900/20 p-3 rounded-lg border border-amber-200 dark:border-amber-800",children:(0,d.jsxs)("div",{className:"flex gap-2 items-start",children:[(0,d.jsx)(e.default,{name:"info",className:"text-amber-600 dark:text-amber-400"}),(0,d.jsxs)("div",{className:"text-sm text-amber-800 dark:text-amber-200",children:[(0,d.jsx)("p",{className:"font-medium",children:"Local credentials not found"}),(0,d.jsx)("p",{className:"mt-1 opacity-80",children:n}),(0,d.jsx)("p",{className:"mt-2 opacity-80",children:"Make sure Xiaomi MiMo Desktop is installed and you are signed in, then retry. Or sign in via browser below."})]})]})}),p?(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,d.jsx)("div",{className:"bg-blue-50 dark:bg-blue-900/20 p-3 rounded-lg border border-blue-200 dark:border-blue-800",children:(0,d.jsxs)("p",{className:"text-sm text-blue-800 dark:text-blue-200",children:["Browser opened. Complete the Xiaomi sign-in, then click"," ",(0,d.jsx)("strong",{children:"Check Again"}),"."]})}),(0,d.jsx)(j.$,{onClick:v,className:"w-full",children:"Check Again"})]}):(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(j.$,{onClick:()=>{h("detecting"),fetch("/api/oauth/xiaomi-mimo/auto-import").then(a=>a.json()).then(a=>{a.found&&a.apiKey?(m(a),h("found")):(h("not-found"),o(a.error||"Still not found."))}).catch(()=>h("not-found"))},variant:"outline",className:"w-full",children:"Retry Local Detect"}),(0,d.jsx)(j.$,{onClick:u,className:"w-full",children:"Sign in via Browser"})]})]})]})})}k.propTypes={isOpen:h().bool.isRequired,onSuccess:h().func,onClose:h().func.isRequired}},92249:(a,b,c)=>{"use strict";c.d(b,{default:()=>h});var d=c(86240),e=c(70433),f=c(4271),g=c(31952);function h(){let[a,b]=(0,e.useState)([]),[c,h]=(0,e.useState)(!0),[i,j]=(0,e.useState)(!0);return(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:"Request Logs"}),(0,d.jsx)("div",{className:"flex items-center gap-2",children:(0,d.jsxs)("label",{className:"text-sm font-medium text-muted-foreground flex items-center gap-2 cursor-pointer",children:[(0,d.jsx)("span",{children:"Auto Refresh (3s)"}),(0,d.jsx)("div",{onClick:()=>j(!i),className:`relative inline-flex h-5 w-9 items-center rounded-full transition-colors focus:outline-none ${i?"bg-primary":"bg-muted border border-border"}`,children:(0,d.jsx)("span",{className:`inline-block h-3 w-3 transform rounded-full bg-white transition-transform ${i?"translate-x-5":"translate-x-1"}`})})]})})]}),(0,d.jsx)(f.Zp,{className:"overflow-hidden bg-black/5 dark:bg-black/20 p-6",children:(0,d.jsx)(f.Wu,{children:(0,d.jsx)("div",{className:"p-0 overflow-x-auto max-h-[600px] overflow-y-auto font-mono text-xs",children:c&&0===a.length?(0,d.jsx)("div",{className:"p-8 text-center text-muted-foreground",children:"Loading logs..."}):0===a.length?(0,d.jsx)("div",{className:"p-8 text-center text-muted-foreground",children:"No logs recorded yet."}):(0,d.jsxs)("table",{className:"w-full text-left border-collapse whitespace-nowrap",children:[(0,d.jsx)("thead",{className:"sticky top-0 bg-muted border-b border-border z-10",children:(0,d.jsxs)("tr",{children:[(0,d.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"DateTime"}),(0,d.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"Model"}),(0,d.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"Provider"}),(0,d.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"Account"}),(0,d.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"In"}),(0,d.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"Out"}),(0,d.jsx)("th",{className:"px-3 py-2",children:"Status"})]})}),(0,d.jsx)("tbody",{className:"divide-y divide-border/50",children:a.map((a,b)=>{let c=a.split(" | ");if(c.length<7)return null;let e=c[6],f=e.includes("PENDING"),h=e.includes("FAILED"),i=e.includes("OK");return(0,d.jsxs)("tr",{className:`hover:bg-primary/5 transition-colors ${f?"bg-primary/5":""}`,children:[(0,d.jsx)("td",{className:"px-3 py-1.5 border-r border-border text-muted-foreground",children:c[0]}),(0,d.jsx)("td",{className:"px-3 py-1.5 border-r border-border font-medium",children:c[1]}),(0,d.jsx)("td",{className:"px-3 py-1.5 border-r border-border",children:(0,d.jsx)("span",{className:"px-1.5 py-0.5 rounded bg-muted border border-border text-[10px] uppercase font-bold",children:c[2]})}),(0,d.jsxs)(g.m_,{children:[(0,d.jsx)(g.k$,{asChild:!0,children:(0,d.jsx)("td",{className:"px-3 py-1.5 border-r border-border truncate max-w-[150px]",children:c[3]})}),(0,d.jsx)(g.ZI,{children:c[3]})]}),(0,d.jsx)("td",{className:"px-3 py-1.5 border-r border-border text-right text-primary",children:c[4]}),(0,d.jsx)("td",{className:"px-3 py-1.5 border-r border-border text-right text-emerald-600",children:c[5]}),(0,d.jsx)("td",{className:`px-3 py-1.5 font-bold ${i?"text-emerald-600":h?"text-destructive":"text-primary animate-pulse"}`,children:e})]},b)})})]})})})}),(0,d.jsx)("div",{className:"text-[10px] text-muted-foreground italic",children:"Logs are loaded from the request history database."})]})}},92393:(a,b,c)=>{"use strict";c.d(b,{default:()=>h});var d=c(86240),e=c(28907),f=c(4271);let g={mode:{label:"Mode",format:a=>a},defaultModel:{label:"Model",format:a=>a,mono:!0},baseUrl:{label:"Endpoint",format:a=>a,isLink:!0,mono:!0},costPerQuery:{label:"Cost / call",format:a=>0===a?"Free":`$${a.toFixed(4)}`},pricingUrl:{label:"Pricing",format:()=>"View pricing",isLink:!0},freeTier:{label:"Free tier",format:a=>a},freeMonthlyQuota:{label:"Free quota",format:a=>0===a?"—":a>=999999?"Unlimited":`${a.toLocaleString()} / mo`},searchTypes:{label:"Types",format:a=>a.join(", ")},formats:{label:"Formats",format:a=>a.join(", ")},maxMaxResults:{label:"Max results",format:a=>a},maxCharacters:{label:"Max chars",format:a=>a.toLocaleString()}};function h({config:a,provider:b,title:c="Provider Info"}){if(!a)return null;let i=Object.entries(g).filter(([b])=>void 0!==a[b]&&null!==a[b]&&""!==a[b]).map(([b,c])=>({key:b,label:c.label,value:c.format(a[b]),isLink:c.isLink,mono:c.mono,raw:a[b]})),j=b?.notice?.apiKeyUrl||b?.website,k=b?.notice?.text;return(0,d.jsx)(f.Zp,{className:"p-6",children:(0,d.jsxs)(f.Wu,{children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,d.jsx)("h2",{className:"text-lg font-semibold",children:c}),j&&(0,d.jsxs)("a",{href:j,target:"_blank",rel:"noopener noreferrer",className:"text-xs text-primary hover:underline inline-flex items-center gap-1",children:[(0,d.jsx)(e.default,{name:"open_in_new",className:"text-sm"}),"Get API Key"]})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-x-6 gap-y-2",children:[i.map(a=>(0,d.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,d.jsx)("span",{className:"text-xs text-muted-foreground w-28 shrink-0",children:a.label}),a.isLink?(0,d.jsx)("a",{href:a.raw,target:"_blank",rel:"noopener noreferrer",className:`text-sm text-primary hover:underline truncate ${a.mono?"font-mono":""}`,children:a.value}):(0,d.jsx)("span",{className:`text-sm text-foreground truncate ${a.mono?"font-mono":""}`,children:a.value})]},a.key)),k&&(0,d.jsxs)("div",{className:"flex items-start gap-3 min-w-0 sm:col-span-2",children:[(0,d.jsx)("span",{className:"text-xs text-muted-foreground w-28 shrink-0 mt-0.5",children:"Notice"}),(0,d.jsx)("span",{className:"text-sm text-foreground leading-relaxed",children:k})]})]})]})})}},92968:(a,b,c)=>{"use strict";c.d(b,{A:()=>i});var d=c(86240),e=c(70433),f=c(16467),g=c.n(f),h=c(82975);function i({src:a,providerId:b,alt:c,size:f=32,className:g="",fallbackText:j="?",fallbackColor:k}){let l=function(a,b){if(b)return(0,h.HY)(b);if(!a)return null;let c=String(a).match(/^\/providers\/([^/]+)\.png$/i);return c?(0,h.HY)(c[1]):a}(a,b),[m,n]=(0,e.useState)(!1);return!l||m?(0,d.jsx)("span",{className:`inline-flex items-center justify-center font-bold rounded-lg ${g}`.trim(),style:{width:f,height:f,color:k,fontSize:Math.max(10,Math.floor(.38*f))},children:j}):(0,d.jsx)("img",{src:l,alt:c,width:f,height:f,className:g,loading:"lazy",decoding:"async",onError:()=>{let a=l.match(/^\/providers\/([^/]+)\.png$/i);a&&(0,h.Kw)(a[1]),b&&(0,h.Kw)(b),n(!0)}})}i.propTypes={src:g().string,providerId:g().string,alt:g().string,size:g().number,className:g().string,fallbackText:g().string,fallbackColor:g().string}},94725:(a,b,c)=>{"use strict";c.d(b,{default:()=>j});var d=c(86240),e=c(28907),f=c(70433),g=c(87121),h=c(63265),i=c(57145);function j({isOpen:a,onClose:b,title:c="Manual Configuration",configs:k=[]}){let{copy:l}=(0,i.C)(),[m,n]=(0,f.useState)(null);return(0,d.jsx)(g.default,{isOpen:a,onClose:b,title:c,size:"xl",children:(0,d.jsx)("div",{className:"flex flex-col gap-4",children:k.map((a,b)=>(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsx)("span",{className:"text-sm font-medium text-foreground",children:a.filename}),(0,d.jsxs)(h.$,{variant:"ghost",size:"sm",onClick:()=>{var c;return c=a.content,void(l(c,`manualconfig-${b}`),n(b),setTimeout(()=>n(null),2e3))},children:[(0,d.jsx)(e.default,{name:m===b?"check":"content_copy",className:"text-[14px] mr-1"}),m===b?"Copied!":"Copy"]})]}),(0,d.jsx)("pre",{className:"px-3 py-2 bg-black/5 dark:bg-white/5 rounded font-mono text-xs overflow-x-auto whitespace-pre-wrap break-all max-h-60 overflow-y-auto border border-border",children:a.content})]},b))})})}},98279:(a,b,c)=>{"use strict";c.d(b,{default:()=>r});var d=c(86240),e=c(66632),f=c(64955),g=c(78629),h=c(72465),i=c(40167),j=c(70433),k=c(87121),l=c(81501),m=c(63265),n=c(31952),o=c(16582);let p=/^[a-zA-Z0-9_.\-]+$/;function q({index:a,model:b,isFirst:c,isLast:h,onEdit:i,onMoveUp:k,onMoveDown:l,onRemove:m}){let[o,p]=(0,j.useState)(!1),[r,s]=(0,j.useState)(b),t=()=>{let a=r.trim();a&&a!==b?i(a):s(b),p(!1)};return(0,d.jsxs)("div",{className:"group flex min-w-0 items-center gap-1.5 rounded-md bg-black/[0.02] px-2 py-1 transition-colors hover:bg-black/[0.04] dark:bg-white/[0.02] dark:hover:bg-white/[0.04]",children:[(0,d.jsx)("span",{className:"text-[10px] font-medium text-muted-foreground w-3 text-center shrink-0",children:a+1}),o?(0,d.jsx)("input",{autoFocus:!0,value:r,onChange:a=>s(a.target.value),onBlur:t,onKeyDown:a=>{"Enter"===a.key&&t(),"Escape"===a.key&&(s(b),p(!1))},className:"min-w-0 flex-1 rounded border border-primary/40 bg-white px-1.5 py-0.5 font-mono text-xs text-foreground outline-none dark:bg-black/20"}):(0,d.jsxs)(n.m_,{children:[(0,d.jsx)(n.k$,{asChild:!0,children:(0,d.jsx)("div",{className:"min-w-0 flex-1 cursor-text truncate rounded px-1.5 py-0.5 font-mono text-xs text-foreground hover:bg-black/5 dark:hover:bg-white/5",onClick:()=>p(!0),children:b})}),(0,d.jsx)(n.ZI,{children:"Click to edit"})]}),(0,d.jsxs)("div",{className:"flex shrink-0 items-center gap-0.5",children:[(0,d.jsxs)(n.m_,{children:[(0,d.jsx)(n.k$,{asChild:!0,children:(0,d.jsx)("button",{onClick:k,disabled:c,className:`p-0.5 rounded ${c?"text-muted-foreground/20 cursor-not-allowed":"text-muted-foreground hover:text-primary hover:bg-black/5 dark:hover:bg-white/5"}`,children:(0,d.jsx)(e.A,{className:"size-3"})})}),(0,d.jsx)(n.ZI,{children:"Move up"})]}),(0,d.jsxs)(n.m_,{children:[(0,d.jsx)(n.k$,{asChild:!0,children:(0,d.jsx)("button",{onClick:l,disabled:h,className:`p-0.5 rounded ${h?"text-muted-foreground/20 cursor-not-allowed":"text-muted-foreground hover:text-primary hover:bg-black/5 dark:hover:bg-white/5"}`,children:(0,d.jsx)(f.A,{className:"size-3"})})}),(0,d.jsx)(n.ZI,{children:"Move down"})]})]}),(0,d.jsxs)(n.m_,{children:[(0,d.jsx)(n.k$,{asChild:!0,children:(0,d.jsx)("button",{onClick:m,className:"p-0.5 hover:bg-red-500/10 rounded text-muted-foreground hover:text-red-500 transition-all",children:(0,d.jsx)(g.A,{className:"size-3"})})}),(0,d.jsx)(n.ZI,{children:"Remove"})]})]})}function r({isOpen:a,combo:b,onClose:c,onSave:e,activeProviders:f,kindFilter:g=null,forcePrefix:n="",title:s}){let t=b?.name?n&&b.name.startsWith(n)?b.name.slice(n.length):b.name:"",[u,v]=(0,j.useState)(t),[w,x]=(0,j.useState)(b?.models||[]),[y,z]=(0,j.useState)(!1),[A,B]=(0,j.useState)(!1),[C,D]=(0,j.useState)(""),[E,F]=(0,j.useState)({}),G=a=>{if(!a.trim())return D("Name is required"),!1;let b=n+a;return p.test(b)?(D(""),!0):(D("Only letters, numbers, -, _ and . allowed"),!1)},H=a=>{let b=a.target.value;n&&b.startsWith(n)&&(b=b.slice(n.length)),v(b),b?G(b):D("")},I=async()=>{G(u)&&(B(!0),await e({name:n+u.trim(),models:w}),B(!1))},J=!!b;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(k.default,{isOpen:a,onClose:c,title:s||(J?"Edit Combo":"Create Combo"),children:(0,d.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,d.jsxs)("div",{children:[n?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("label",{className:"text-sm font-medium mb-1 block",children:"Combo Name"}),(0,d.jsxs)("div",{className:"flex items-stretch",children:[(0,d.jsx)("span",{className:"inline-flex items-center px-2 rounded-l border border-r-0 border-black/10 dark:border-white/10 bg-black/[0.04] dark:bg-white/[0.04] text-muted-foreground font-mono text-sm",children:n}),(0,d.jsx)("input",{value:u,onChange:H,placeholder:"my-combo",className:"flex-1 min-w-0 rounded-r border border-black/10 dark:border-white/10 bg-white dark:bg-black/20 px-2 py-1.5 font-mono text-sm outline-none focus:border-primary"})]}),C&&(0,d.jsx)("p",{className:"text-[11px] text-red-500 mt-0.5",children:C})]}):(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsx)("label",{className:"text-sm font-medium",children:"Combo Name"}),(0,d.jsx)(l.p,{value:u,onChange:H,placeholder:"my-combo",className:C?"ring-1 ring-red-500 border-red-500/40":void 0}),C&&(0,d.jsx)("p",{className:"text-xs text-red-500",children:C})]}),(0,d.jsxs)("p",{className:"text-[10px] text-muted-foreground mt-0.5",children:[n?`Auto-prefixed with "${n}". `:"","Only letters, numbers, -, _ and . allowed"]})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("label",{className:"text-sm font-medium mb-1.5 block",children:"Models"}),0===w.length?(0,d.jsxs)("div",{className:"text-center py-4 border border-dashed border-black/10 dark:border-white/10 rounded-lg bg-black/[0.01] dark:bg-white/[0.01]",children:[(0,d.jsx)(h.A,{className:"mx-auto mb-1 size-6 text-muted-foreground"}),(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"No models added yet"})]}):(0,d.jsx)("div",{className:"flex max-h-[55vh] min-w-0 flex-col gap-1 overflow-y-auto sm:max-h-[350px]",children:w.map((a,b)=>(0,d.jsx)(q,{index:b,model:a,isFirst:0===b,isLast:b===w.length-1,onEdit:a=>{let c=[...w];c[b]=a,x(c)},onMoveUp:()=>(a=>{if(0===a)return;let b=[...w];[b[a-1],b[a]]=[b[a],b[a-1]],x(b)})(b),onMoveDown:()=>(a=>{if(a===w.length-1)return;let b=[...w];[b[a],b[a+1]]=[b[a+1],b[a]],x(b)})(b),onRemove:()=>x(w.filter((a,c)=>c!==b))},b))}),(0,d.jsxs)("button",{onClick:()=>z(!0),className:"w-full mt-2 py-2 border border-dashed border-black/10 dark:border-white/10 rounded-lg text-xs text-primary font-medium hover:text-primary hover:border-primary/50 transition-colors flex items-center justify-center gap-1",children:[(0,d.jsx)(i.A,{className:"size-4"}),"Add Model"]})]}),(0,d.jsx)(m.$,{onClick:I,className:"w-full",size:"sm",disabled:!u.trim()||!!C||A,children:A?"Saving...":J?"Save":"Create"})]})}),y&&(0,d.jsx)(o.default,{isOpen:y,onClose:()=>z(!1),onSelect:a=>{w.includes(a.value)||x([...w,a.value])},onDeselect:a=>{x(w.filter(b=>b!==a.value))},selectedModel:void 0,activeProviders:f,modelAliases:E,title:"Add Model to Combo",kindFilter:g,addedModelValues:w,closeOnSelect:!1})]})}}};
|