9router 0.4.39 → 0.4.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/.next/BUILD_ID +1 -1
- package/app/.next/app-path-routes-manifest.json +6 -4
- package/app/.next/build-manifest.json +2 -2
- package/app/.next/routes-manifest.json +14 -0
- package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +24 -0
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -0
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -0
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/quota/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/skills/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error/page.js +2 -2
- package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +1 -1
- package/app/.next/server/app/_global-error.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page.js +2 -2
- package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_not-found.html +1 -1
- package/app/.next/server/app/_not-found.rsc +4 -4
- package/app/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/api/auth/login/route.js +1 -1
- package/app/.next/server/app/api/auth/logout/route.js +1 -1
- package/app/.next/server/app/api/auth/oidc/callback/route.js +1 -1
- package/app/.next/server/app/api/auth/oidc/start/route.js +1 -1
- package/app/.next/server/app/api/auth/oidc/test/route.js +1 -1
- package/app/.next/server/app/api/auth/status/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/all-statuses/route.js +3 -2
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/cline-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/copilot-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/cowork-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/deepseek-tui-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/droid-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/hermes-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/jcode-settings/route.js +2 -0
- package/app/.next/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -0
- package/app/.next/server/app/api/cli-tools/jcode-settings/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/opencode-settings/route.js +1 -1
- package/app/.next/server/app/api/cloud/auth/route.js +1 -1
- package/app/.next/server/app/api/cloud/credentials/update/route.js +1 -1
- package/app/.next/server/app/api/cloud/model/resolve/route.js +1 -1
- package/app/.next/server/app/api/cloud/models/alias/route.js +1 -1
- package/app/.next/server/app/api/combos/[id]/route.js +1 -1
- package/app/.next/server/app/api/combos/route.js +1 -1
- package/app/.next/server/app/api/health/route.js +1 -1
- package/app/.next/server/app/api/init/route.js +1 -1
- package/app/.next/server/app/api/keys/[id]/route.js +1 -1
- package/app/.next/server/app/api/keys/route.js +1 -1
- package/app/.next/server/app/api/locale/route.js +1 -1
- package/app/.next/server/app/api/mcp/[plugin]/message/route.js +2 -2
- package/app/.next/server/app/api/mcp/[plugin]/sse/route.js +5 -5
- package/app/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/voices/route.js +1 -1
- package/app/.next/server/app/api/models/alias/route.js +1 -1
- package/app/.next/server/app/api/models/availability/route.js +1 -1
- package/app/.next/server/app/api/models/custom/route.js +1 -1
- package/app/.next/server/app/api/models/disabled/route.js +1 -1
- package/app/.next/server/app/api/models/route.js +1 -1
- package/app/.next/server/app/api/models/test/route.js +1 -1
- package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
- package/app/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
- package/app/.next/server/app/api/oauth/cursor/import/route.js +1 -1
- package/app/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
- package/app/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/auto-import/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/import/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
- package/app/.next/server/app/api/pricing/route.js +1 -1
- package/app/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
- package/app/.next/server/app/api/provider-nodes/route.js +1 -1
- package/app/.next/server/app/api/provider-nodes/validate/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/models/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
- package/app/.next/server/app/api/providers/client/route.js +1 -1
- package/app/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
- package/app/.next/server/app/api/providers/route.js +1 -1
- package/app/.next/server/app/api/providers/suggested-models/route.js +1 -1
- package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
- package/app/.next/server/app/api/providers/validate/route.js +1 -1
- package/app/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
- package/app/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
- package/app/.next/server/app/api/proxy-pools/route.js +1 -1
- package/app/.next/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
- package/app/.next/server/app/api/settings/database/route.js +1 -1
- package/app/.next/server/app/api/settings/proxy-test/route.js +1 -1
- package/app/.next/server/app/api/settings/require-login/route.js +1 -1
- package/app/.next/server/app/api/settings/route.js +1 -1
- package/app/.next/server/app/api/shutdown/route.js +1 -1
- package/app/.next/server/app/api/tags/route.js +1 -1
- package/app/.next/server/app/api/translator/console-logs/route.js +1 -1
- package/app/.next/server/app/api/translator/console-logs/stream/route.js +2 -2
- package/app/.next/server/app/api/translator/load/route.js +1 -1
- package/app/.next/server/app/api/translator/save/route.js +1 -1
- package/app/.next/server/app/api/translator/send/route.js +1 -1
- package/app/.next/server/app/api/translator/translate/route.js +1 -1
- package/app/.next/server/app/api/tunnel/disable/route.js +1 -1
- package/app/.next/server/app/api/tunnel/enable/route.js +1 -1
- package/app/.next/server/app/api/tunnel/status/route.js +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-check/route.js +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-install/route.js +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-login/route.js +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-start-daemon/route.js +1 -1
- package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
- package/app/.next/server/app/api/usage/chart/route.js +1 -1
- package/app/.next/server/app/api/usage/history/route.js +1 -1
- package/app/.next/server/app/api/usage/providers/route.js +1 -1
- package/app/.next/server/app/api/usage/request-details/route.js +1 -1
- package/app/.next/server/app/api/usage/request-logs/route.js +1 -1
- package/app/.next/server/app/api/usage/stats/route.js +1 -1
- package/app/.next/server/app/api/usage/stream/route.js +2 -2
- package/app/.next/server/app/api/v1/api/chat/route.js +1 -1
- package/app/.next/server/app/api/v1/audio/speech/route.js +1 -1
- package/app/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
- package/app/.next/server/app/api/v1/audio/voices/route.js +1 -1
- package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
- package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
- package/app/.next/server/app/api/v1/images/generations/route.js +2 -2
- package/app/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
- package/app/.next/server/app/api/v1/messages/route.js +1 -1
- package/app/.next/server/app/api/v1/models/[kind]/route.js +1 -1
- package/app/.next/server/app/api/v1/models/info/route.js +1 -1
- package/app/.next/server/app/api/v1/models/route.js +1 -1
- package/app/.next/server/app/api/v1/responses/compact/route.js +1 -1
- package/app/.next/server/app/api/v1/responses/route.js +1 -1
- package/app/.next/server/app/api/v1/route.js +1 -1
- package/app/.next/server/app/api/v1/search/route.js +1 -1
- package/app/.next/server/app/api/v1/web/fetch/route.js +1 -1
- package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
- package/app/.next/server/app/api/v1beta/models/route.js +1 -1
- package/app/.next/server/app/api/version/route.js +1 -1
- package/app/.next/server/app/api/version/shutdown/route.js +1 -1
- package/app/.next/server/app/api/version/update/route.js +1 -1
- package/app/.next/server/app/callback/page.js +2 -2
- package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/callback.html +1 -1
- package/app/.next/server/app/callback.rsc +4 -4
- package/app/.next/server/app/callback.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/callback.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.html +1 -1
- package/app/.next/server/app/dashboard/basic-chat.rsc +6 -6
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next/server/app/dashboard/cli-tools.rsc +6 -6
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.html +1 -1
- package/app/.next/server/app/dashboard/combos.rsc +6 -6
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.html +1 -1
- package/app/.next/server/app/dashboard/endpoint.rsc +6 -6
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/media-providers/web.html +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.rsc +6 -6
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/mitm.html +1 -1
- package/app/.next/server/app/dashboard/mitm.rsc +6 -6
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.html +1 -1
- package/app/.next/server/app/dashboard/profile.rsc +6 -6
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.html +1 -1
- package/app/.next/server/app/dashboard/providers/new.rsc +6 -6
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.html +1 -1
- package/app/.next/server/app/dashboard/providers.rsc +6 -6
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.rsc +6 -6
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/quota.html +2 -2
- package/app/.next/server/app/dashboard/quota.rsc +7 -7
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/quota.segments/_full.segment.rsc +7 -7
- package/app/.next/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/quota.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/settings/pricing/page.js +2 -2
- package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.rsc +4 -4
- package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/skills.html +1 -1
- package/app/.next/server/app/dashboard/skills.rsc +6 -6
- package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/skills.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/skills.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/translator.html +1 -1
- package/app/.next/server/app/dashboard/translator.rsc +6 -6
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.html +1 -1
- package/app/.next/server/app/dashboard/usage.rsc +6 -6
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard.html +1 -1
- package/app/.next/server/app/dashboard.rsc +6 -6
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/favicon.ico/route.js +1 -1
- package/app/.next/server/app/index.html +1 -1
- package/app/.next/server/app/index.rsc +4 -4
- package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/index.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/landing/page.js +2 -2
- package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing.html +1 -1
- package/app/.next/server/app/landing.rsc +4 -4
- package/app/.next/server/app/landing.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/landing.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
- package/app/.next/server/app/login/page.js +2 -2
- package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/login.html +1 -1
- package/app/.next/server/app/login.rsc +5 -5
- package/app/.next/server/app/login.segments/_full.segment.rsc +5 -5
- package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/login.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/app/.next/server/app/manifest.webmanifest/route.js +2 -2
- package/app/.next/server/app/page.js +2 -2
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app-paths-manifest.json +6 -4
- package/app/.next/server/chunks/1574.js +2 -2
- package/app/.next/server/chunks/1795.js +1 -1
- package/app/.next/server/chunks/{9102.js → 4185.js} +19 -5
- package/app/.next/server/chunks/450.js +1 -1
- package/app/.next/server/chunks/6263.js +1 -1
- package/app/.next/server/chunks/6283.js +1 -1
- package/app/.next/server/chunks/6634.js +1 -1
- package/app/.next/server/chunks/7686.js +1 -1
- package/app/.next/server/chunks/8202.js +2 -2
- package/app/.next/server/chunks/9737.js +1 -1
- package/app/.next/server/middleware-build-manifest.js +1 -1
- package/app/.next/server/pages/404.html +1 -1
- package/app/.next/server/pages/500.html +1 -1
- package/app/.next/server/server-reference-manifest.js +1 -1
- package/app/.next/server/server-reference-manifest.json +1 -1
- package/app/.next/static/2misBKF5VNVsKDJv5-tr0/_buildManifest.js +1 -0
- package/app/.next/static/chunks/1273-62c3e49612c8936b.js +1 -0
- package/app/.next/static/chunks/{1695-6e8840bac539e8e1.js → 3771-d400e4ae3c36605b.js} +21 -7
- package/app/.next/static/chunks/{4156-fb6ac946bb0d8b36.js → 4156-333776bcc04b3a24.js} +1 -1
- package/app/.next/static/chunks/{505-4f14d6114630c020.js → 505-b308a2b0c9199c92.js} +1 -1
- package/app/.next/static/chunks/{8035-fcb662f21e288a06.js → 8035-7160908984e36a32.js} +2 -2
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-cd0fd0414de9421f.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-cf6325b0b4557845.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-0479ee1b161bf657.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/mitm/page-ba20629be96f8c76.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/{page-5c83526aa571f533.js → page-04f6908aa3c98f13.js} +1 -1
- package/app/.next/static/chunks/app/_global-error/page-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/auth/login/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/auth/logout/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/auth/oidc/callback/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/auth/oidc/start/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/auth/oidc/test/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/auth/status/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/all-statuses/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/jcode-settings/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/auth/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/credentials/update/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/model/resolve/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/models/alias/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/combos/[id]/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/combos/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/health/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/init/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/keys/[id]/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/keys/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/locale/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/mcp/[plugin]/message/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/mcp/[plugin]/sse/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/models/alias/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/models/availability/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/models/custom/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/models/disabled/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/models/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/models/test/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/pricing/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/providers/client/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/providers/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/providers/suggested-models/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/providers/test-batch/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/providers/validate/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/settings/database/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/settings/proxy-test/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/settings/require-login/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/settings/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/shutdown/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/tags/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/translator/console-logs/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/translator/load/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/translator/save/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/translator/send/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/translator/translate/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/disable/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/enable/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/status/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-login/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-start-daemon/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/usage/chart/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/usage/history/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/usage/providers/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/usage/request-details/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/usage/request-logs/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/usage/stats/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/usage/stream/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/v1/api/chat/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/voices/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/v1/embeddings/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/v1/images/generations/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/v1/messages/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/[kind]/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/info/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/v1/responses/compact/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/v1/responses/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/v1/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/v1/search/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/v1/web/fetch/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/v1beta/models/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/version/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/version/shutdown/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/api/version/update/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/manifest.webmanifest/route-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/app/page-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-36dc8d06b592b249.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-36dc8d06b592b249.js +1 -0
- package/app/.next/static/css/bcdf8509db9f9e88.css +1 -0
- package/app/package.json +5 -1
- package/app/public/providers/amp.png +0 -0
- package/app/public/providers/deepseek-tui.png +0 -0
- package/app/public/providers/jcode.png +0 -0
- package/package.json +1 -1
- package/src/cli/terminalUI.js +35 -23
- package/src/cli/tray/autostart.js +158 -173
- package/src/cli/utils/input.js +98 -89
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-ba45716d39a993b3.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-b460baa9a0a252cc.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/mitm/page-9567edd325a84464.js +0 -1
- package/app/.next/static/chunks/app/_global-error/page-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/auth/login/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/auth/logout/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/auth/oidc/callback/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/auth/oidc/start/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/auth/oidc/test/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/auth/status/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/all-statuses/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/auth/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/credentials/update/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/model/resolve/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/models/alias/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/combos/[id]/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/combos/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/health/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/init/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/keys/[id]/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/keys/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/locale/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/mcp/[plugin]/message/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/mcp/[plugin]/sse/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/models/alias/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/models/availability/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/models/custom/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/models/disabled/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/models/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/models/test/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/pricing/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/providers/client/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/providers/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/providers/suggested-models/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/providers/test-batch/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/providers/validate/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/settings/database/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/settings/proxy-test/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/settings/require-login/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/settings/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/shutdown/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/tags/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/translator/console-logs/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/translator/load/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/translator/save/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/translator/send/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/translator/translate/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/disable/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/enable/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/status/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-login/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-start-daemon/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/usage/chart/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/usage/history/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/usage/providers/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/usage/request-details/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/usage/request-logs/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/usage/stats/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/usage/stream/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/v1/api/chat/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/voices/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/v1/embeddings/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/v1/images/generations/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/[kind]/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/info/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/v1/responses/compact/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/v1/responses/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/v1/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/v1/search/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/v1/web/fetch/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/version/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/version/shutdown/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/api/version/update/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/manifest.webmanifest/route-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/app/page-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-60e29212efc745d6.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-60e29212efc745d6.js +0 -1
- package/app/.next/static/css/ae73e0a7859fa2fc.css +0 -1
- package/app/.next/static/yFUwKZ1p4eBnMZ6ORz8lk/_buildManifest.js +0 -1
- /package/app/.next/static/{yFUwKZ1p4eBnMZ6ORz8lk → 2misBKF5VNVsKDJv5-tr0}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4156],{292:(e,t,s)=>{s.d(t,{default:()=>l});var r=s(73365),a=s(87706);function l({children:e,title:t,subtitle:s,icon:n,action:i,padding:o="md",hover:d=!1,elev:c=!1,className:m,...x}){return(0,r.jsxs)("div",{className:(0,a.cn)("bg-surface border border-border-subtle",c?"rounded-[14px] shadow-[var(--shadow-elev)]":"rounded-[14px] shadow-[var(--shadow-soft)]",d&&"hover:shadow-[var(--shadow-warm)] hover:border-brand-500/30 transition-all cursor-pointer",{none:"",xs:"p-3",sm:"p-4",md:"p-6",lg:"p-8"}[o],m),...x,children:[(t||i)&&(0,r.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[n&&(0,r.jsx)("div",{className:"p-2 rounded-[10px] bg-bg text-text-muted",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:n})}),(0,r.jsxs)("div",{children:[t&&(0,r.jsx)("h3",{className:"text-text-main font-semibold",children:t}),s&&(0,r.jsx)("p",{className:"text-sm text-text-muted",children:s})]})]}),i]}),e]})}l.Section=function({children:e,className:t,...s}){return(0,r.jsx)("div",{className:(0,a.cn)("p-4 rounded-[10px]","bg-bg border border-border-subtle",t),...s,children:e})},l.Row=function({children:e,className:t,...s}){return(0,r.jsx)("div",{className:(0,a.cn)("p-3 -mx-3 px-3 transition-colors","border-b border-border-subtle last:border-b-0","hover:bg-surface-2/50",t),...s,children:e})},l.ListItem=function({children:e,actions:t,className:s,...l}){return(0,r.jsxs)("div",{className:(0,a.cn)("group flex items-center justify-between p-3 -mx-3 px-3","border-b border-border-subtle last:border-b-0","hover:bg-surface-2/50 transition-colors",s),...l,children:[(0,r.jsx)("div",{className:"flex-1 min-w-0",children:e}),t&&(0,r.jsx)("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:t})]})}},1755:(e,t,s)=>{s.d(t,{default:()=>l});var r=s(73365),a=s(87706);function l({options:e=[],value:t,onChange:s,size:n="md",className:i}){let o={sm:"h-7 text-xs",md:"h-9 text-sm",lg:"h-11 text-base"};return(0,r.jsx)("div",{className:(0,a.cn)("inline-flex items-center p-1 rounded-[10px] overflow-x-auto","bg-surface-2",i),children:e.map(e=>(0,r.jsxs)("button",{onClick:()=>s(e.value),className:(0,a.cn)("shrink-0 px-4 rounded-[8px] font-medium transition-all",o[n],t===e.value?"bg-surface text-text-main shadow-sm":"text-text-muted hover:text-text-main"),children:[e.icon&&(0,r.jsx)("span",{className:"material-symbols-outlined text-[16px] mr-1.5",children:e.icon}),e.label]},e.value))})}},3242:(e,t,s)=>{s.d(t,{default:()=>d});var r=s(73365),a=s(1521),l=s(86447),n=s.n(l),i=s(74156),o=s(96459);function d({isOpen:e,provider:t,providerInfo:s,onSuccess:l,onClose:n,oauthMeta:c,idcConfig:m}){let[x,u]=(0,a.useState)("waiting"),[p,h]=(0,a.useState)(null),[f,b]=(0,a.useState)(""),[g,j]=(0,a.useState)(null),[v,y]=(0,a.useState)(!1),[N,w]=(0,a.useState)(null),[k,C]=(0,a.useState)(!1),S=(0,a.useRef)(null),T=(0,a.useRef)(!1),{copied:O,copy:$}=(0,o.C)(),[R,P]=(0,a.useState)(!1),[E,I]=(0,a.useState)("/callback?code=..."),M=(0,a.useRef)(!1);(0,a.useEffect)(()=>{P("localhost"===window.location.hostname||"127.0.0.1"===window.location.hostname),I(`${window.location.origin}/callback?code=...`)},[]);let A=(0,a.useCallback)(async(e,s)=>{if(p)try{let r=await fetch(`/api/oauth/${t}/exchange`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:e,redirectUri:p.redirectUri,codeVerifier:p.codeVerifier,state:s,...c?{meta:c}:{}})}),a=await r.json();if(!r.ok)throw Error(a.error);u("success"),l?.()}catch(e){j(e.message),u("error")}},[p,t,l]),L=(0,a.useCallback)(async(e,s,r,a)=>{T.current=!1,C(!0);for(let n=0;n<60;n++){if(T.current){console.log("[OAuthModal] Polling aborted"),C(!1);return}if(await new Promise(e=>setTimeout(e,1e3*r)),T.current){console.log("[OAuthModal] Polling aborted after sleep"),C(!1);return}try{let n=await fetch(`/api/oauth/${t}/poll`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({deviceCode:e,codeVerifier:s,extraData:a})}),i=await n.json();if(i.success){T.current=!0,u("success"),C(!1),l?.();return}if("expired_token"===i.error||"access_denied"===i.error)throw Error(i.errorDescription||i.error);"slow_down"===i.error&&(r=Math.min(r+5,30))}catch(e){j(e.message),u("error"),C(!1);return}}j("Authorization timeout"),u("error"),C(!1)},[t,l]),_=(0,a.useCallback)(async()=>{if(t)try{let e;if(j(null),["github","qwen","kiro","kimi-coding","kilocode","codebuddy"].includes(t)){y(!0),u("waiting");let e=new URL(`/api/oauth/${t}/device-code`,window.location.origin);"kiro"===t&&m?.startUrl&&(e.searchParams.set("start_url",m.startUrl),m.region&&e.searchParams.set("region",m.region),e.searchParams.set("auth_method","idc"));let s=await fetch(e.toString()),r=await s.json();if(!s.ok)throw Error(r.error);w(r);let a=r.verification_uri_complete||r.verification_uri;a&&window.open(a,"_blank","noopener,noreferrer");let l="kiro"===t?{_clientId:r._clientId,_clientSecret:r._clientSecret,_region:r._region,_authMethod:r._authMethod,_startUrl:r._startUrl}:null;L(r.device_code,r.codeVerifier,r.interval||5,l);return}let s=window.location.port||("https:"===window.location.protocol?"443":"80");e="codex"===t?"http://localhost:1455/auth/callback":`http://localhost:${s}/callback`;let r=new URL(`/api/oauth/${t}/authorize`,window.location.origin);r.searchParams.set("redirect_uri",e),c&&Object.entries(c).forEach(([e,t])=>{t&&r.searchParams.set(e,t)});let a=await fetch(r.toString()),l=await a.json();if(!a.ok)throw Error(l.error);let n=!1,i=!1;if("codex"===t)try{let t=new URL("/api/oauth/codex/start-proxy",window.location.origin);t.searchParams.set("app_port",s),t.searchParams.set("state",l.state),t.searchParams.set("code_verifier",l.codeVerifier),t.searchParams.set("redirect_uri",e);let r=await fetch(t.toString()),a=await r.json();n=a.success,i=!!a.serverSide}catch{n=!1}h({...l,redirectUri:e,codexServerSide:i}),"codex"===t&&n||R&&"codex"!==t?(u("waiting"),S.current=window.open(l.authUrl,"oauth_popup","width=600,height=700"),S.current||u("input")):(u("input"),window.open(l.authUrl,"_blank"))}catch(e){j(e.message),u("error")}},[t,R,L,c,m]);(0,a.useEffect)(()=>{e&&t?(h(null),b(""),j(null),y(!1),w(null),C(!1),T.current=!1,_()):e||(T.current=!0,"codex"===t&&fetch("/api/oauth/codex/stop-proxy").catch(()=>{}))},[e,t,_]),(0,a.useEffect)(()=>{if(!p?.codexServerSide||!p?.state||M.current)return;let e=!1,t=0,s=async()=>{if(!e&&!M.current){t+=1;try{let t=await fetch(`/api/oauth/codex/poll-status?state=${encodeURIComponent(p.state)}`),s=await t.json();if(e||M.current)return;if("done"===s.status){M.current=!0,u("success"),l?.();return}if("error"===s.status){M.current=!0,j(s.error||"Authentication failed"),u("error");return}}catch{}if(t>=200){M.current=!0,j("Authentication timeout"),u("error");return}setTimeout(s,1500)}};return setTimeout(s,1500),()=>{e=!0}},[p,l]),(0,a.useEffect)(()=>{let e;if(!p)return;M.current=!1;let t=async e=>{if(M.current)return;let{code:t,state:s,error:r,errorDescription:a}=e;if(r){M.current=!0,j(a||r),u("error");return}t&&(M.current=!0,await A(t,s))},s=e=>{let s=e.origin.includes("localhost")||e.origin.includes("127.0.0.1"),r=e.origin===window.location.origin;(s||r)&&e.data?.type==="oauth_callback"&&t(e.data.data)};window.addEventListener("message",s);try{(e=new BroadcastChannel("oauth_callback")).onmessage=e=>t(e.data)}catch(e){console.log("BroadcastChannel not supported")}let r=e=>{if("oauth_callback"===e.key&&e.newValue)try{let s=JSON.parse(e.newValue);t(s),localStorage.removeItem("oauth_callback")}catch(e){console.log("Failed to parse localStorage data")}};window.addEventListener("storage",r);try{let e=localStorage.getItem("oauth_callback");if(e){let s=JSON.parse(e);s.timestamp&&Date.now()-s.timestamp<3e4&&t(s),localStorage.removeItem("oauth_callback")}}catch{}return()=>{window.removeEventListener("message",s),window.removeEventListener("storage",r),e&&e.close()}},[p,A]);let z=async()=>{try{j(null);let e=new URL(f),t=e.searchParams.get("code"),s=e.searchParams.get("state"),r=e.searchParams.get("error");if(r)throw Error(e.searchParams.get("error_description")||r);if(!t)throw Error("No authorization code found in URL");await A(t,s)}catch(e){j(e.message),u("error")}},q=(0,a.useCallback)(()=>{"codex"===t&&fetch("/api/oauth/codex/stop-proxy").catch(()=>{}),n()},[n,t]);if(!t||!s)return null;let U=N?.verification_uri_complete||N?.verification_uri||"";return(0,r.jsx)(i.aF,{isOpen:e,title:`Connect ${s.name}`,onClose:q,size:"lg",children:(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:[("waiting"===x||"input"===x)&&!v&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 border border-border rounded-lg bg-sidebar/50",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-base text-primary animate-spin",children:"progress_activity"}),(0,r.jsx)("span",{className:"text-sm",children:"Waiting for popup authorization…"})]}),(0,r.jsxs)("div",{className:"flex items-center gap-3 my-1",children:[(0,r.jsx)("div",{className:"flex-1 h-px bg-border"}),(0,r.jsx)("span",{className:"text-xs text-text-muted uppercase tracking-wider",children:"Or paste callback URL manually"}),(0,r.jsx)("div",{className:"flex-1 h-px bg-border"})]}),(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-medium mb-2",children:"Step 1: Open this URL in your browser"}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.pd,{value:p?.authUrl||"",readOnly:!0,className:"flex-1 font-mono text-xs"}),(0,r.jsx)(i.$n,{variant:"secondary",icon:"auth_url"===O?"check":"content_copy",onClick:()=>$(p?.authUrl,"auth_url"),disabled:!p?.authUrl,children:"Copy"})]})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-medium mb-2",children:"Step 2: Paste the callback URL here"}),(0,r.jsx)("p",{className:"text-xs text-text-muted mb-2",children:"After authorization, copy the full URL from your browser."}),(0,r.jsx)(i.pd,{value:f,onChange:e=>b(e.target.value),placeholder:E,className:"font-mono text-xs"})]})]}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.$n,{onClick:z,fullWidth:!0,disabled:!f,children:"Connect"}),(0,r.jsx)(i.$n,{onClick:q,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]}),"waiting"===x&&v&&N&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"text-center py-4",children:[(0,r.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Visit the login URL below and authorize:"}),(0,r.jsxs)("div",{className:"bg-sidebar p-4 rounded-lg mb-4",children:[(0,r.jsx)("p",{className:"text-xs text-text-muted mb-1",children:"Login URL"}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("code",{className:"flex-1 text-sm break-all",children:U}),(0,r.jsx)(i.$n,{size:"sm",variant:"ghost",icon:"login_url"===O?"check":"content_copy",onClick:()=>$(U,"login_url"),disabled:!U}),(0,r.jsx)(i.$n,{size:"sm",variant:"ghost",icon:"open_in_new",onClick:()=>window.open(U,"_blank","noopener,noreferrer"),disabled:!U,children:"Open"})]})]}),(0,r.jsxs)("div",{className:"bg-primary/10 p-4 rounded-lg",children:[(0,r.jsx)("p",{className:"text-xs text-text-muted mb-1",children:"Your Code"}),(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2",children:[(0,r.jsx)("p",{className:"text-2xl font-mono font-bold text-primary",children:N.user_code}),(0,r.jsx)(i.$n,{size:"sm",variant:"ghost",icon:"user_code"===O?"check":"content_copy",onClick:()=>$(N.user_code,"user_code")})]})]})]}),k&&(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2 text-sm text-text-muted",children:[(0,r.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),"Waiting for authorization..."]})]}),"success"===x&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.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,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-green-600",children:"check_circle"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connected Successfully!"}),(0,r.jsxs)("p",{className:"text-sm text-text-muted mb-4",children:["Your ",s.name," account has been connected."]}),(0,r.jsx)(i.$n,{onClick:q,fullWidth:!0,children:"Done"})]}),"error"===x&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.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,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-red-600",children:"error"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connection Failed"}),(0,r.jsx)("p",{className:"text-sm text-red-600 mb-4",children:g}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.$n,{onClick:_,variant:"secondary",fullWidth:!0,children:"Try Again"}),(0,r.jsx)(i.$n,{onClick:q,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})]})})}d.propTypes={isOpen:n().bool.isRequired,provider:n().string,providerInfo:n().shape({name:n().string}),onSuccess:n().func,onClose:n().func.isRequired,oauthMeta:n().object,idcConfig:n().shape({startUrl:n().string,region:n().string})}},3412:(e,t,s)=>{s.d(t,{default:()=>V});var r=s(73365),a=s(1521),l=s(29717),n=s(82495),i=s(35045),o=s(292),d=s(86447),c=s.n(d);let m=e=>new Intl.NumberFormat().format(e||0);function x({stats:e}){let t;return(0,r.jsxs)("div",{className:"grid min-w-0 grid-cols-1 gap-3 sm:grid-cols-2 md:grid-cols-4 sm:gap-4",children:[(0,r.jsxs)(o.default,{className:"flex min-w-0 flex-col gap-1 px-4 py-3",children:[(0,r.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Total Requests"}),(0,r.jsx)("span",{className:"truncate text-2xl font-bold",children:m(e.totalRequests)})]}),(0,r.jsxs)(o.default,{className:"flex min-w-0 flex-col gap-1 px-4 py-3",children:[(0,r.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Total Input Tokens"}),(0,r.jsx)("span",{className:"truncate text-2xl font-bold text-primary",children:m(e.totalPromptTokens)})]}),(0,r.jsxs)(o.default,{className:"flex min-w-0 flex-col gap-1 px-4 py-3",children:[(0,r.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Output Tokens"}),(0,r.jsx)("span",{className:"truncate text-2xl font-bold text-success",children:m(e.totalCompletionTokens)})]}),(0,r.jsxs)(o.default,{className:"flex min-w-0 flex-col gap-1 px-4 py-3",children:[(0,r.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Est. Cost"}),(0,r.jsxs)("span",{className:"truncate text-2xl font-bold text-warning",children:["~",(t=e.totalCost,`$${(t||0).toFixed(2)}`)]}),(0,r.jsx)("span",{className:"text-[10px] text-text-muted",children:"Estimated, not actual billing"})]})]})}x.propTypes={stats:c().object.isRequired};let u=e=>new Intl.NumberFormat().format(e||0),p=e=>`$${(e||0).toFixed(2)}`;function h(e){if(!e)return"Never";let t=Math.floor((Date.now()-new Date(e))/6e4);return t<1?"Just now":t<60?`${t}m ago`:t<1440?`${Math.floor(t/60)}h ago`:new Date(e).toLocaleDateString()}function f({field:e,currentSort:t,currentOrder:s}){return t!==e?(0,r.jsx)("span",{className:"ml-1 opacity-20",children:"↕"}):(0,r.jsx)("span",{className:"ml-1",children:"asc"===s?"↑":"↓"})}function b({item:e,viewMode:t,isSummary:s=!1}){return"tokens"===t?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:s&&void 0===e.promptTokens?"—":u(e.promptTokens)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:s&&void 0===e.completionTokens?"—":u(e.completionTokens)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right font-medium",children:u(e.totalTokens)})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:s&&void 0===e.inputCost?"—":p(e.inputCost)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:s&&void 0===e.outputCost?"—":p(e.outputCost)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right font-medium text-warning",children:p(e.totalCost||e.cost)})]})}function g({title:e,columns:t,groupedData:s,tableType:l,sortBy:n,sortOrder:i,onToggleSort:d,viewMode:c,storageKey:m,renderDetailCells:x,renderSummaryCells:u,emptyMessage:p}){let[h,j]=(0,a.useState)(new Set);(0,a.useEffect)(()=>{try{let e=localStorage.getItem(m);e&&j(new Set(JSON.parse(e)))}catch(e){console.error(`Failed to load ${m}:`,e)}},[m]),(0,a.useEffect)(()=>{try{localStorage.setItem(m,JSON.stringify([...h]))}catch(e){console.error(`Failed to save ${m}:`,e)}},[h,m]);let v=(0,a.useCallback)(e=>{j(t=>{let s=new Set(t);return s.has(e)?s.delete(e):s.add(e),s})},[]),y=(0,a.useMemo)(()=>"tokens"===c?[{field:"promptTokens",label:"Input Tokens"},{field:"completionTokens",label:"Output Tokens"},{field:"totalTokens",label:"Total Tokens"}]:[{field:"promptTokens",label:"Input Cost"},{field:"completionTokens",label:"Output Cost"},{field:"cost",label:"Total Cost"}],[c]),N=t.length+y.length;return(0,r.jsxs)(o.default,{className:"overflow-hidden",children:[(0,r.jsx)("div",{className:"p-4 border-b border-border bg-bg-subtle/50",children:(0,r.jsx)("h3",{className:"font-semibold",children:e})}),(0,r.jsx)("div",{className:"overflow-x-auto",children:(0,r.jsxs)("table",{className:"w-full text-sm text-left",children:[(0,r.jsx)("thead",{className:"bg-bg-subtle/30 text-text-muted uppercase text-xs",children:(0,r.jsxs)("tr",{children:[t.map(e=>(0,r.jsxs)("th",{className:`px-6 py-3 cursor-pointer hover:bg-bg-subtle/50 ${"right"===e.align?"text-right":""}`,onClick:()=>d(l,e.field),children:[e.label," ",(0,r.jsx)(f,{field:e.field,currentSort:n,currentOrder:i})]},e.field)),y.map(e=>(0,r.jsxs)("th",{className:"px-6 py-3 text-right cursor-pointer hover:bg-bg-subtle/50",onClick:()=>d(l,e.field),children:[e.label," ",(0,r.jsx)(f,{field:e.field,currentSort:n,currentOrder:i})]},e.field))]})}),(0,r.jsxs)("tbody",{className:"divide-y divide-border",children:[s.map(e=>(0,r.jsxs)(a.Fragment,{children:[(0,r.jsxs)("tr",{className:"group-summary cursor-pointer hover:bg-bg-subtle/50 transition-colors",onClick:()=>v(e.groupKey),children:[(0,r.jsx)("td",{className:"px-6 py-3",children:(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:`material-symbols-outlined text-[18px] text-text-muted transition-transform ${h.has(e.groupKey)?"rotate-90":""}`,children:"chevron_right"}),(0,r.jsx)("span",{className:`font-medium transition-colors ${e.summary.pending>0?"text-primary":""}`,children:e.groupKey})]})}),u(e),(0,r.jsx)(b,{item:e.summary,viewMode:c,isSummary:!0})]}),h.has(e.groupKey)&&e.items.map(e=>(0,r.jsxs)("tr",{className:"group-detail hover:bg-bg-subtle/20 transition-colors",children:[x(e),(0,r.jsx)(b,{item:e,viewMode:c})]},`detail-${e.key}`))]},e.groupKey)),0===s.length&&(0,r.jsx)("tr",{children:(0,r.jsx)("td",{colSpan:N,className:"px-6 py-8 text-center text-text-muted",children:p})})]})]})})]})}f.propTypes={field:c().string.isRequired,currentSort:c().string.isRequired,currentOrder:c().string.isRequired},b.propTypes={item:c().object.isRequired,viewMode:c().string.isRequired,isSummary:c().bool},g.propTypes={title:c().string.isRequired,columns:c().arrayOf(c().shape({field:c().string.isRequired,label:c().string.isRequired,align:c().string})).isRequired,groupedData:c().array.isRequired,tableType:c().string.isRequired,sortBy:c().string.isRequired,sortOrder:c().string.isRequired,onToggleSort:c().func.isRequired,viewMode:c().string.isRequired,storageKey:c().string.isRequired,renderDetailCells:c().func.isRequired,renderSummaryCells:c().func.isRequired,emptyMessage:c().string.isRequired};var j=s(70842),v=s(36629);function y({data:e}){let{label:t,color:s,imageUrl:l,textIcon:n,active:i}=e,[o,d]=(0,a.useState)(!1);return(0,r.jsxs)("div",{className:"flex items-center gap-2.5 px-4 py-2.5 rounded-lg border-2 transition-all duration-300 bg-bg",style:{borderColor:i?s:"var(--color-border)",boxShadow:i?`0 0 16px ${s}40`:"none",minWidth:"150px"},children:[(0,r.jsx)(j.h7,{type:"target",position:v.yX.Top,id:"top",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)(j.h7,{type:"target",position:v.yX.Bottom,id:"bottom",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)(j.h7,{type:"target",position:v.yX.Left,id:"left",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)(j.h7,{type:"target",position:v.yX.Right,id:"right",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)("div",{className:"w-8 h-8 rounded-md flex items-center justify-center shrink-0",style:{backgroundColor:`${s}15`},children:o?(0,r.jsx)("span",{className:"text-sm font-bold",style:{color:s},children:n}):(0,r.jsx)("img",{src:l,alt:t,className:"w-6 h-6 rounded-sm object-contain",onError:()=>d(!0)})}),(0,r.jsx)("span",{className:"text-base font-medium truncate",style:{color:i?s:"var(--color-text)"},children:t}),i&&(0,r.jsxs)("span",{className:"relative flex h-2 w-2 shrink-0",children:[(0,r.jsx)("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full opacity-75",style:{backgroundColor:s}}),(0,r.jsx)("span",{className:"relative inline-flex rounded-full h-2 w-2",style:{backgroundColor:s}})]})]})}function N({data:e}){return(0,r.jsxs)("div",{className:"flex items-center justify-center px-5 py-3 rounded-xl border-2 border-primary bg-primary/5 shadow-md min-w-[130px]",children:[(0,r.jsx)(j.h7,{type:"source",position:v.yX.Top,id:"top",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)(j.h7,{type:"source",position:v.yX.Bottom,id:"bottom",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)(j.h7,{type:"source",position:v.yX.Left,id:"left",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)(j.h7,{type:"source",position:v.yX.Right,id:"right",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)("img",{src:"/favicon.svg",alt:"9Router",className:"w-6 h-6 mr-2"}),(0,r.jsx)("span",{className:"text-sm font-bold text-primary",children:"9Router"}),e.activeCount>0&&(0,r.jsx)("span",{className:"ml-2 px-1.5 py-0.5 rounded-full bg-primary text-white text-xs font-bold",children:e.activeCount})]})}s(97621),y.propTypes={data:c().object.isRequired},N.propTypes={data:c().object.isRequired};let w={provider:y,router:N};function k({providers:e=[],activeRequests:t=[],lastProvider:s="",errorProvider:l=""}){let i=(0,a.useMemo)(()=>t.map(e=>e.provider?.toLowerCase()).filter(Boolean).sort().join(","),[t]),o=s?.toLowerCase()||"",d=l?.toLowerCase()||"",c=(0,a.useMemo)(()=>new Set(i?i.split(","):[]),[i]),m=(0,a.useMemo)(()=>new Set(o?[o]:[]),[o]),x=(0,a.useMemo)(()=>new Set(d?[d]:[]),[d]),u=(0,a.useRef)({}),[p,h]=(0,a.useState)(0);(0,a.useEffect)(()=>{let e=u.current,t=Date.now();for(let s of c)e[s]||(e[s]=t);for(let t of Object.keys(e))c.has(t)||delete e[t]},[c]),(0,a.useEffect)(()=>{if(0===c.size)return;let e=setInterval(()=>h(e=>e+1),1e3);return()=>clearInterval(e)},[c]);let f=(0,a.useMemo)(()=>{let e=Date.now(),t=new Set;for(let s of c){let r=u.current[s];(!r||e-r<6e4)&&t.add(s)}return t},[c,p]),{nodes:b,edges:g}=(0,a.useMemo)(()=>(function(e,t,s,r){let a=e.length,l=Math.max(320,204*a/(2*Math.PI)),i=Math.max(200,.55*l);if(0===a)return{nodes:[{id:"router",type:"router",position:{x:0,y:0},data:{activeCount:0},draggable:!1}],edges:[]};let o=[],d=[];return o.push({id:"router",type:"router",position:{x:-60,y:-22},data:{activeCount:t.size},draggable:!1}),e.forEach((e,c)=>{var m,x;let u,p,h=(m=e.provider,n.Q2[m]||{color:"#6b7280",name:m}),f=t.has(e.provider?.toLowerCase()),b=!f&&s.has(e.provider?.toLowerCase()),g=!f&&r.has(e.provider?.toLowerCase()),j=`provider-${e.provider}`,v={label:(h.name!==e.provider?h.name:null)||e.name||e.provider,color:h.color||"#6b7280",imageUrl:(x=e.provider,`/providers/${x}.png`),textIcon:h.textIcon||(e.provider||"?").slice(0,2).toUpperCase(),active:f},y=-Math.PI/2+2*Math.PI*c/a,N=l*Math.cos(y),w=i*Math.sin(y);Math.abs(y+Math.PI/2)<Math.PI/4||Math.abs(y-3*Math.PI/2)<Math.PI/4?(u="top",p="bottom"):Math.abs(y-Math.PI/2)<Math.PI/4?(u="bottom",p="top"):N>0?(u="right",p="left"):(u="left",p="right"),o.push({id:j,type:"provider",position:{x:N-90,y:w-15},data:v,draggable:!1}),d.push({id:`e-${j}`,source:"router",sourceHandle:u,target:j,targetHandle:p,animated:f,style:(h.color,g?{stroke:"#ef4444",strokeWidth:2.5,opacity:.9}:f?{stroke:"#22c55e",strokeWidth:2.5,opacity:.9}:b?{stroke:"#f59e0b",strokeWidth:2,opacity:.7}:{stroke:"var(--color-border)",strokeWidth:1,opacity:.3})})}),{nodes:o,edges:d}})(e,f,m,x),[e,f,o,d]),v=(0,a.useMemo)(()=>e.map(e=>e.provider).sort().join(","),[e]),y=(0,a.useRef)(null),N=(0,a.useRef)(null),C={padding:.2,duration:200},S=(0,a.useCallback)(e=>{y.current=e,setTimeout(()=>e.fitView(C),50)},[]);return(0,a.useEffect)(()=>{let e=N.current;if(!e)return;let t=new ResizeObserver(()=>{y.current&&y.current.fitView(C)});return t.observe(e),()=>t.disconnect()},[]),(0,a.useEffect)(()=>{if(y.current){let e=setTimeout(()=>y.current.fitView(C),50);return()=>clearTimeout(e)}},[b.length]),(0,r.jsx)("div",{ref:N,className:"h-[320px] w-full min-w-0 rounded-lg border border-border bg-bg-subtle/30 sm:h-[480px]",children:0===e.length?(0,r.jsx)("div",{className:"h-full flex items-center justify-center text-text-muted text-sm",children:"No providers connected"}):(0,r.jsx)(j.Gc,{nodes:b,edges:g,nodeTypes:w,fitView:!0,fitViewOptions:C,minZoom:.1,maxZoom:2,onInit:S,proOptions:{hideAttribution:!0},panOnDrag:!0,zoomOnScroll:!0,zoomOnPinch:!0,zoomOnDoubleClick:!0,preventScrolling:!1,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,children:(0,r.jsx)(j.H2,{showInteractive:!1,className:"react-flow-controls-custom"})},v)})}k.propTypes={providers:c().arrayOf(c().shape({id:c().string,provider:c().string,name:c().string})),activeRequests:c().arrayOf(c().shape({provider:c().string,model:c().string,account:c().string})),lastProvider:c().string,errorProvider:c().string};var C=s(71220),S=s(51142),T=s(35692),O=s(39719),$=s(94580),R=s(38147),P=s(80900);let E=e=>e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e||0),I=e=>`$${(e||0).toFixed(4)}`;function M({period:e="7d"}){let[t,s]=(0,a.useState)([]),[l,n]=(0,a.useState)(!0),[i,d]=(0,a.useState)("tokens"),c=(0,a.useCallback)(async()=>{n(!0);try{let t=await fetch(`/api/usage/chart?period=${e}`);if(t.ok){let e=await t.json();s(e)}}catch(e){console.error("Failed to fetch chart data:",e)}finally{n(!1)}},[e]);(0,a.useEffect)(()=>{c()},[c]);let m=t.some(e=>e.tokens>0||e.cost>0);return(0,r.jsxs)(o.default,{className:"flex min-w-0 flex-col gap-3 p-3 sm:p-4",children:[(0,r.jsxs)("div",{className:"grid w-full grid-cols-2 items-center gap-1 rounded-lg border border-border bg-bg-subtle p-1 sm:w-auto sm:self-start",children:[(0,r.jsx)("button",{onClick:()=>d("tokens"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"tokens"===i?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:"Tokens"}),(0,r.jsx)("button",{onClick:()=>d("cost"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"cost"===i?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:"Cost"})]}),l?(0,r.jsx)("div",{className:"h-48 flex items-center justify-center text-text-muted text-sm",children:"Loading..."}):m?(0,r.jsx)(C.u,{width:"100%",height:220,children:(0,r.jsxs)(S.Q,{data:t,margin:{top:4,right:8,left:0,bottom:0},children:[(0,r.jsxs)("defs",{children:[(0,r.jsxs)("linearGradient",{id:"gradTokens",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,r.jsx)("stop",{offset:"5%",stopColor:"#6366f1",stopOpacity:.25}),(0,r.jsx)("stop",{offset:"95%",stopColor:"#6366f1",stopOpacity:0})]}),(0,r.jsxs)("linearGradient",{id:"gradCost",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,r.jsx)("stop",{offset:"5%",stopColor:"#f59e0b",stopOpacity:.25}),(0,r.jsx)("stop",{offset:"95%",stopColor:"#f59e0b",stopOpacity:0})]})]}),(0,r.jsx)(T.d,{strokeDasharray:"3 3",strokeOpacity:.1}),(0,r.jsx)(O.W,{dataKey:"label",tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,interval:"preserveStartEnd"}),(0,r.jsx)($.h,{tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,tickFormatter:"tokens"===i?E:I,width:50}),(0,r.jsx)(R.m,{contentStyle:{backgroundColor:"var(--color-bg)",border:"1px solid var(--color-border)",borderRadius:"8px",fontSize:"12px"},formatter:(e,t)=>"tokens"===t?[E(e),"Tokens"]:[I(e),"Cost"]}),"tokens"===i?(0,r.jsx)(P.Gk,{type:"monotone",dataKey:"tokens",stroke:"#6366f1",strokeWidth:2,fill:"url(#gradTokens)",dot:!1,activeDot:{r:4}}):(0,r.jsx)(P.Gk,{type:"monotone",dataKey:"cost",stroke:"#f59e0b",strokeWidth:2,fill:"url(#gradCost)",dot:!1,activeDot:{r:4}})]})}):(0,r.jsx)("div",{className:"h-48 flex items-center justify-center text-text-muted text-sm",children:"No data for this period"})]})}function A(e){let t=n.Q2[e];return!t?.serviceKinds||t.serviceKinds.includes("llm")}function L({timestamp:e}){let t,[,s]=(0,a.useState)(0);return(0,a.useEffect)(()=>{let e=setInterval(()=>s(e=>e+1),1e3);return()=>clearInterval(e)},[]),(0,r.jsx)(r.Fragment,{children:(t=Math.floor((Date.now()-new Date(e))/1e3))<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`})}function _({requests:e=[]}){return(0,r.jsxs)(o.default,{className:"flex min-w-0 flex-col overflow-hidden",padding:"sm",style:{height:480},children:[(0,r.jsx)("div",{className:"px-1 py-2 border-b border-border shrink-0",children:(0,r.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"Recent Requests"})}),e.length?(0,r.jsx)("div",{className:"flex-1 overflow-y-auto",children:(0,r.jsxs)("table",{className:"w-full min-w-[300px] border-collapse text-xs",children:[(0,r.jsx)("thead",{className:"sticky top-0 bg-bg z-10",children:(0,r.jsxs)("tr",{className:"border-b border-border",children:[(0,r.jsx)("th",{className:"py-1.5 text-left font-semibold text-text-muted w-2"}),(0,r.jsx)("th",{className:"py-1.5 text-left font-semibold text-text-muted",children:"Model"}),(0,r.jsx)("th",{className:"py-1.5 text-right font-semibold text-text-muted whitespace-nowrap",children:"In / Out"}),(0,r.jsx)("th",{className:"py-1.5 text-right font-semibold text-text-muted",children:"When"})]})}),(0,r.jsx)("tbody",{className:"divide-y divide-border/50",children:e.map((e,t)=>{let s=!e.status||"ok"===e.status||"success"===e.status;return(0,r.jsxs)("tr",{className:"hover:bg-bg-subtle transition-colors",children:[(0,r.jsx)("td",{className:"py-1.5",children:(0,r.jsx)("span",{className:`block w-1.5 h-1.5 rounded-full ${s?"bg-success":"bg-error"}`})}),(0,r.jsx)("td",{className:"py-1.5 font-mono truncate max-w-[120px]",title:e.model,children:e.model}),(0,r.jsxs)("td",{className:"py-1.5 text-right whitespace-nowrap",children:[(0,r.jsxs)("span",{className:"text-primary",children:[u(e.promptTokens),"↑"]})," ",(0,r.jsxs)("span",{className:"text-success",children:[u(e.completionTokens),"↓"]})]}),(0,r.jsx)("td",{className:"py-1.5 text-right text-text-muted whitespace-nowrap",children:(0,r.jsx)(L,{timestamp:e.timestamp})})]},t)})})]})}):(0,r.jsx)("div",{className:"flex-1 flex items-center justify-center text-text-muted text-sm",children:"No requests yet."})]})}function z(e,t={},s,r){return Object.entries(e||{}).map(([e,s])=>{let r=(s.promptTokens||0)+(s.completionTokens||0),a=s.cost||0,l=r>0?(s.promptTokens||0)*(a/r):0,n=r>0?(s.completionTokens||0)*(a/r):0;return{...s,key:e,totalTokens:r,totalCost:a,inputCost:l,outputCost:n,pending:t[e]||0}}).sort((e,t)=>{let a=e[s],l=t[s];return("string"==typeof a&&(a=a.toLowerCase()),"string"==typeof l&&(l=l.toLowerCase()),a<l)?"asc"===r?-1:1:a>l?"asc"===r?1:-1:0})}function q(e,t){if(!Array.isArray(e))return[];let s={};return e.forEach(e=>{let r=function(e,t){switch(t){case"rawModel":return e.rawModel||"Unknown Model";case"accountName":return e.accountName||`Account ${e.connectionId?.slice(0,8)}...`||"Unknown Account";case"keyName":return e.keyName||"Unknown Key";case"endpoint":return e.endpoint||"Unknown Endpoint";default:return e[t]||"Unknown"}}(e,t);s[r]||(s[r]={groupKey:r,summary:{requests:0,promptTokens:0,completionTokens:0,totalTokens:0,cost:0,inputCost:0,outputCost:0,lastUsed:null,pending:0},items:[]});let a=s[r].summary;a.requests+=e.requests||0,a.promptTokens+=e.promptTokens||0,a.completionTokens+=e.completionTokens||0,a.totalTokens+=e.totalTokens||0,a.cost+=e.cost||0,a.inputCost+=e.inputCost||0,a.outputCost+=e.outputCost||0,a.pending+=e.pending||0,e.lastUsed&&(!a.lastUsed||new Date(e.lastUsed)>new Date(a.lastUsed))&&(a.lastUsed=e.lastUsed),s[r].items.push(e)}),Object.values(s)}M.propTypes={period:c().string};let U=[{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],F=[{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"}],D=[{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"}],W=[{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"}],K=[{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"}],B=[{value:"24h",label:"24h"},{value:"7d",label:"7D"},{value:"30d",label:"30D"},{value:"60d",label:"60D"}];function V({period:e,setPeriod:t,hidePeriodSelector:s=!1}={}){let o=(0,l.useRouter)(),d=(0,l.useSearchParams)(),c=d.get("sortBy")||"rawModel",m=d.get("sortOrder")||"asc",[p,f]=(0,a.useState)(null),[b,j]=(0,a.useState)(!0),[v,y]=(0,a.useState)(!1),[N,w]=(0,a.useState)("model"),[C,S]=(0,a.useState)("costs"),[T,O]=(0,a.useState)([]),[$,R]=(0,a.useState)("7d"),P=e??$,E=t??R;(0,a.useEffect)(()=>{fetch("/api/providers").then(e=>e.ok?e.json():null).then(e=>{let t=new Set;O([...(e?.connections||[]).filter(e=>!(!1===e.isActive||!A(e.provider)||t.has(e.provider))&&(t.add(e.provider),!0)),...Object.values(n.IS).filter(e=>e.noAuth&&!t.has(e.id)&&A(e.id)).map(e=>({provider:e.id,name:e.name}))])}).catch(()=>{})},[]),(0,a.useEffect)(()=>{p?y(!0):j(!0),fetch(`/api/usage/stats?period=${P}`).then(e=>e.ok?e.json():null).then(e=>{e&&f(t=>({...t,...e}))}).catch(()=>{}).finally(()=>{j(!1),y(!1)})},[P]),(0,a.useEffect)(()=>{let e=new EventSource("/api/usage/stream");return e.onmessage=e=>{try{let t=JSON.parse(e.data);f(e=>({...e||{},activeRequests:t.activeRequests,recentRequests:t.recentRequests,errorProvider:t.errorProvider,pending:t.pending})),j(!1)}catch(e){console.error("[SSE CLIENT] parse error:",e)}},e.onerror=()=>j(!1),()=>e.close()},[]);let I=(0,a.useCallback)((e,t)=>{let s=new URLSearchParams(d.toString());s.get("sortBy")===t?s.set("sortOrder","asc"===s.get("sortOrder")?"desc":"asc"):(s.set("sortBy",t),s.set("sortOrder","asc")),o.replace(`?${s.toString()}`,{scroll:!1})},[d,o]),L=(0,a.useMemo)(()=>{if(!p)return null;switch(N){case"model":{let e=p.pending?.byModel||{};return{columns:U,groupedData:q(z(p.byModel,e,c,m),"rawModel"),storageKey:"usage-stats:expanded-models",emptyMessage:"No usage recorded yet.",renderSummaryCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:u(e.summary.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:h(e.summary.lastUsed)})]}),renderDetailCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:`px-6 py-3 font-medium transition-colors ${e.pending>0?"text-primary":""}`,children:e.rawModel}),(0,r.jsx)("td",{className:"px-6 py-3",children:(0,r.jsx)(i.default,{variant:e.pending>0?"primary":"neutral",size:"sm",children:e.provider})}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:u(e.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:h(e.lastUsed)})]})}}case"account":{let e={};return p?.pending?.byAccount&&Object.entries(p.byAccount||{}).forEach(([t,s])=>{let r=p.pending.byAccount[s.connectionId];if(r){let a=s.provider?`${s.rawModel} (${s.provider})`:s.rawModel;e[t]=r[a]||0}}),{columns:F,groupedData:q(z(p.byAccount,e,c,m),"accountName"),storageKey:"usage-stats:expanded-accounts",emptyMessage:"No account-specific usage recorded yet.",renderSummaryCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:u(e.summary.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:h(e.summary.lastUsed)})]}),renderDetailCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:`px-6 py-3 font-medium transition-colors ${e.pending>0?"text-primary":""}`,children:e.accountName||`Account ${e.connectionId?.slice(0,8)}...`}),(0,r.jsx)("td",{className:`px-6 py-3 font-medium transition-colors ${e.pending>0?"text-primary":""}`,children:e.rawModel}),(0,r.jsx)("td",{className:"px-6 py-3",children:(0,r.jsx)(i.default,{variant:e.pending>0?"primary":"neutral",size:"sm",children:e.provider})}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:u(e.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:h(e.lastUsed)})]})}}case"apiKey":return{columns:D,groupedData:q(z(p.byApiKey,{},c,m),"keyName"),storageKey:"usage-stats:expanded-apikeys",emptyMessage:"No API key usage recorded yet.",renderSummaryCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:u(e.summary.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:h(e.summary.lastUsed)})]}),renderDetailCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 font-medium",children:e.keyName}),(0,r.jsx)("td",{className:"px-6 py-3",children:e.rawModel}),(0,r.jsx)("td",{className:"px-6 py-3",children:(0,r.jsx)(i.default,{variant:"neutral",size:"sm",children:e.provider})}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:u(e.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:h(e.lastUsed)})]})};default:return{columns:W,groupedData:q(z(p.byEndpoint,{},c,m),"endpoint"),storageKey:"usage-stats:expanded-endpoints",emptyMessage:"No endpoint usage recorded yet.",renderSummaryCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:u(e.summary.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:h(e.summary.lastUsed)})]}),renderDetailCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 font-medium font-mono text-sm",children:e.endpoint}),(0,r.jsx)("td",{className:"px-6 py-3",children:e.rawModel}),(0,r.jsx)("td",{className:"px-6 py-3",children:(0,r.jsx)(i.default,{variant:"neutral",size:"sm",children:e.provider})}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:u(e.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:h(e.lastUsed)})]})}}},[p,N,c,m]);if(!p&&!b)return(0,r.jsx)("div",{className:"text-text-muted",children:"Failed to load usage statistics."});let G=(0,r.jsx)("div",{className:"flex items-center justify-center py-12 text-text-muted",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[32px] animate-spin",children:"progress_activity"})});return(0,r.jsxs)("div",{className:"flex min-w-0 flex-col gap-6",children:[!s&&(0,r.jsxs)("div",{className:"flex w-full items-center gap-2 sm:w-auto sm:self-end",children:[(0,r.jsx)("div",{className:"grid flex-1 grid-cols-4 items-center gap-1 rounded-lg border border-border bg-bg-subtle p-1 sm:flex sm:flex-none",children:B.map(e=>(0,r.jsx)("button",{onClick:()=>E(e.value),disabled:v,className:`rounded-md px-3 py-1 text-sm font-medium transition-colors ${P===e.value?"bg-primary text-white shadow-sm":"text-text-muted hover:bg-bg-hover hover:text-text"}`,children:e.label},e.value))}),v&&(0,r.jsx)("span",{className:"material-symbols-outlined text-[16px] text-text-muted animate-spin",children:"progress_activity"})]}),b?G:(0,r.jsx)(x,{stats:p}),b?G:(0,r.jsxs)("div",{className:"grid min-w-0 grid-cols-1 items-stretch gap-2 lg:grid-cols-[minmax(0,2fr)_minmax(280px,1fr)]",children:[(0,r.jsx)(k,{providers:T,activeRequests:p.activeRequests||[],lastProvider:p.recentRequests?.[0]?.provider||"",errorProvider:p.errorProvider||""}),(0,r.jsx)(_,{requests:p.recentRequests||[]})]}),b?G:(0,r.jsx)(M,{period:P}),(0,r.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,r.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,r.jsx)("select",{value:N,onChange:e=>w(e.target.value),className:"w-full rounded-lg border border-border bg-surface px-3 py-1.5 text-sm font-medium text-text-main focus:outline-none focus:ring-2 focus:ring-primary/50 sm:w-auto",style:{colorScheme:"auto"},children:K.map(e=>(0,r.jsx)("option",{value:e.value,children:e.label},e.value))}),(0,r.jsxs)("div",{className:"grid grid-cols-2 items-center gap-1 rounded-lg border border-border bg-bg-subtle p-1 sm:flex",children:[(0,r.jsx)("button",{onClick:()=>S("costs"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"costs"===C?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:"Costs"}),(0,r.jsx)("button",{onClick:()=>S("tokens"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"tokens"===C?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:"Tokens"})]})]}),b?G:L&&(0,r.jsx)(g,{title:"",columns:L.columns,groupedData:L.groupedData,tableType:N,sortBy:c,sortOrder:m,onToggleSort:I,viewMode:C,storageKey:L.storageKey,renderSummaryCells:L.renderSummaryCells,renderDetailCells:L.renderDetailCells,emptyMessage:L.emptyMessage})]})]})}},5671:(e,t,s)=>{s.d(t,{default:()=>o});var r=s(73365),a=s(1521),l=s(66911),n=s(38230),i=s(96459);function o({isOpen:e,onClose:t,title:s="Manual Configuration",configs:d=[]}){let{copy:c}=(0,i.C)(),[m,x]=(0,a.useState)(null);return(0,r.jsx)(l.default,{isOpen:e,onClose:t,title:s,size:"xl",children:(0,r.jsx)("div",{className:"flex flex-col gap-4",children:d.map((e,t)=>(0,r.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("span",{className:"text-sm font-medium text-text-main",children:e.filename}),(0,r.jsxs)(n.default,{variant:"ghost",size:"sm",onClick:()=>{var s;return s=e.content,void(c(s,`manualconfig-${t}`),x(t),setTimeout(()=>x(null),2e3))},children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:m===t?"check":"content_copy"}),m===t?"Copied!":"Copy"]})]}),(0,r.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:e.content})]},t))})})}},8569:(e,t,s)=>{s.d(t,{default:()=>n});var r=s(73365),a=s(292);let l={mode:{label:"Mode",format:e=>e},defaultModel:{label:"Model",format:e=>e,mono:!0},baseUrl:{label:"Endpoint",format:e=>e,isLink:!0,mono:!0},costPerQuery:{label:"Cost / call",format:e=>0===e?"Free":`$${e.toFixed(4)}`},pricingUrl:{label:"Pricing",format:()=>"View pricing",isLink:!0},freeTier:{label:"Free tier",format:e=>e},freeMonthlyQuota:{label:"Free quota",format:e=>0===e?"—":e>=999999?"Unlimited":`${e.toLocaleString()} / mo`},searchTypes:{label:"Types",format:e=>e.join(", ")},formats:{label:"Formats",format:e=>e.join(", ")},maxMaxResults:{label:"Max results",format:e=>e},maxCharacters:{label:"Max chars",format:e=>e.toLocaleString()}};function n({config:e,provider:t,title:s="Provider Info"}){if(!e)return null;let i=Object.entries(l).filter(([t])=>void 0!==e[t]&&null!==e[t]&&""!==e[t]).map(([t,s])=>({key:t,label:s.label,value:s.format(e[t]),isLink:s.isLink,mono:s.mono,raw:e[t]})),o=t?.notice?.apiKeyUrl||t?.website,d=t?.notice?.text;return(0,r.jsxs)(a.default,{children:[(0,r.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold",children:s}),o&&(0,r.jsxs)("a",{href:o,target:"_blank",rel:"noopener noreferrer",className:"text-xs text-primary hover:underline inline-flex items-center gap-1",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-sm",children:"open_in_new"}),"Get API Key"]})]}),(0,r.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-x-6 gap-y-2",children:[i.map(e=>(0,r.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,r.jsx)("span",{className:"text-xs text-text-muted w-28 shrink-0",children:e.label}),e.isLink?(0,r.jsx)("a",{href:e.raw,target:"_blank",rel:"noopener noreferrer",className:`text-sm text-primary hover:underline truncate ${e.mono?"font-mono":""}`,children:e.value}):(0,r.jsx)("span",{className:`text-sm text-text-main truncate ${e.mono?"font-mono":""}`,children:e.value})]},e.key)),d&&(0,r.jsxs)("div",{className:"flex items-start gap-3 min-w-0 sm:col-span-2",children:[(0,r.jsx)("span",{className:"text-xs text-text-muted w-28 shrink-0 mt-0.5",children:"Notice"}),(0,r.jsx)("span",{className:"text-sm text-text-main leading-relaxed",children:d})]})]})]})}},12003:(e,t,s)=>{s.d(t,{default:()=>d});var r=s(73365),a=s(1521),l=s(98196),n=s(55348),i=s(84502);let o=e=>({en:{name:"English",flag:"\uD83C\uDDFA\uD83C\uDDF8"},vi:{name:"Tiếng Việt",flag:"\uD83C\uDDFB\uD83C\uDDF3"},"zh-CN":{name:"简体中文",flag:"\uD83C\uDDE8\uD83C\uDDF3"},"zh-TW":{name:"繁體中文",flag:"\uD83C\uDDF9\uD83C\uDDFC"},ja:{name:"日本語",flag:"\uD83C\uDDEF\uD83C\uDDF5"},"pt-BR":{name:"Portugu\xeas (Brasil)",flag:"\uD83C\uDDE7\uD83C\uDDF7"},"pt-PT":{name:"Portugu\xeas (Portugal)",flag:"\uD83C\uDDF5\uD83C\uDDF9"},ko:{name:"한국어",flag:"\uD83C\uDDF0\uD83C\uDDF7"},es:{name:"Espa\xf1ol",flag:"\uD83C\uDDEA\uD83C\uDDF8"},de:{name:"Deutsch",flag:"\uD83C\uDDE9\uD83C\uDDEA"},fr:{name:"Fran\xe7ais",flag:"\uD83C\uDDEB\uD83C\uDDF7"},he:{name:"עברית",flag:"\uD83C\uDDEE\uD83C\uDDF1"},ar:{name:"العربية",flag:"\uD83C\uDDF8\uD83C\uDDE6"},ru:{name:"Русский",flag:"\uD83C\uDDF7\uD83C\uDDFA"},pl:{name:"Polski",flag:"\uD83C\uDDF5\uD83C\uDDF1"},cs:{name:"Čeština",flag:"\uD83C\uDDE8\uD83C\uDDFF"},nl:{name:"Nederlands",flag:"\uD83C\uDDF3\uD83C\uDDF1"},tr:{name:"T\xfcrk\xe7e",flag:"\uD83C\uDDF9\uD83C\uDDF7"},uk:{name:"Українська",flag:"\uD83C\uDDFA\uD83C\uDDE6"},tl:{name:"Tagalog",flag:"\uD83C\uDDF5\uD83C\uDDED"},id:{name:"Indonesia",flag:"\uD83C\uDDEE\uD83C\uDDE9"},th:{name:"ไทย",flag:"\uD83C\uDDF9\uD83C\uDDED"},hi:{name:"हिन्दी",flag:"\uD83C\uDDEE\uD83C\uDDF3"},bn:{name:"বাংলা",flag:"\uD83C\uDDE7\uD83C\uDDE9"},ur:{name:"اردو",flag:"\uD83C\uDDF5\uD83C\uDDF0"},ro:{name:"Rom\xe2nă",flag:"\uD83C\uDDF7\uD83C\uDDF4"},sv:{name:"Svenska",flag:"\uD83C\uDDF8\uD83C\uDDEA"},it:{name:"Italiano",flag:"\uD83C\uDDEE\uD83C\uDDF9"},el:{name:"Ελληνικά",flag:"\uD83C\uDDEC\uD83C\uDDF7"},hu:{name:"Magyar",flag:"\uD83C\uDDED\uD83C\uDDFA"},fi:{name:"Suomi",flag:"\uD83C\uDDEB\uD83C\uDDEE"},da:{name:"Dansk",flag:"\uD83C\uDDE9\uD83C\uDDF0"},no:{name:"Norsk",flag:"\uD83C\uDDF3\uD83C\uDDF4"}})[e]||{name:e,flag:"\uD83C\uDF10"};function d({className:e="",isOpen:t,onClose:s,hideTrigger:c=!1}){let[m,x]=(0,a.useState)("en"),[u,p]=(0,a.useState)(!1),[h,f]=(0,a.useState)(!1),b=(0,a.useRef)(null),g="boolean"==typeof t,j=g?t:h,v=e=>{g?!e&&s&&s():f(e)};(0,a.useEffect)(()=>{x(function(){if("u"<typeof document)return"en";let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${n.CL}=`)),t=e?decodeURIComponent(e.split("=")[1]):"en";return(0,n.QC)(t)}())},[]),(0,a.useEffect)(()=>{function e(e){b.current&&!b.current.contains(e.target)&&v(!1)}if(j)return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[j]);let y=async e=>{if(e!==m&&!u){p(!0),v(!1);try{await fetch("/api/locale",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({locale:e})}),await (0,i.wn)(),x(e)}catch(e){console.error("Failed to set locale:",e)}finally{p(!1)}}};return(0,r.jsxs)("div",{className:e,children:[!c&&(0,r.jsxs)("button",{onClick:()=>v(!j),disabled:u,className:"flex items-center gap-2 px-3 py-2 rounded-lg text-text-muted hover:text-text-main hover:bg-surface/60 transition-colors",title:"Language","data-i18n-skip":"true",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"language"}),(0,r.jsx)("span",{className:"text-sm font-medium",children:o(m).name}),(0,r.jsx)("span",{className:"text-lg",children:o(m).flag})]}),j&&(0,l.createPortal)((0,r.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4","data-i18n-skip":"true",children:[(0,r.jsx)("div",{className:"absolute inset-0 bg-black/30 backdrop-blur-sm",onClick:()=>v(!1)}),(0,r.jsxs)("div",{ref:b,className:"relative w-full bg-surface border border-black/10 dark:border-white/10 rounded-xl shadow-2xl animate-in fade-in zoom-in-95 duration-200 max-w-2xl flex flex-col max-h-[80vh]",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between p-3 border-b border-black/5 dark:border-white/5",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Select Language"}),(0,r.jsx)("button",{onClick:()=>v(!1),className:"p-1.5 rounded-lg text-text-muted hover:bg-black/5 dark:hover:bg-white/5 transition-colors","aria-label":"Close",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"close"})})]}),(0,r.jsx)("div",{className:"p-6 overflow-y-auto flex-1",children:(0,r.jsx)("div",{className:"grid grid-cols-[repeat(auto-fill,minmax(100px,1fr))] gap-2",children:n.YZ.map(e=>{let t=m===e,s=o(e);return(0,r.jsxs)("button",{onClick:()=>y(e),disabled:u,className:`flex flex-col items-center justify-start gap-1 px-2 py-3 rounded-lg text-xs font-medium transition-colors w-full ${t?"bg-primary/15 text-primary ring-2 ring-primary":"text-text-main hover:bg-black/5 dark:hover:bg-white/5"} ${u?"opacity-70 cursor-wait":""}`,title:s.name,children:[(0,r.jsx)("span",{className:"text-2xl",children:s.flag}),(0,r.jsx)("span",{className:"text-center leading-tight line-clamp-2 h-8 flex items-center",children:s.name}),t&&(0,r.jsx)("span",{className:"material-symbols-outlined text-sm",children:"check"})]},e)})})})]})]}),document.body)]})}},12820:(e,t,s)=>{s.d(t,{default:()=>d});var r=s(73365),a=s(1521),l=s(86447),n=s.n(l),i=s(74156);let o="https://api.openai.com/v1";function d({isOpen:e,onClose:t,onCreated:s,onSaved:l,node:n}){let c=!!n,[m,x]=(0,a.useState)({name:"",prefix:"",baseUrl:o}),[u,p]=(0,a.useState)(!1),[h,f]=(0,a.useState)(""),[b,g]=(0,a.useState)(""),[j,v]=(0,a.useState)(!1),[y,N]=(0,a.useState)(null);(0,a.useEffect)(()=>{e&&(N(null),f(""),g(""),c?x({name:n.name||"",prefix:n.prefix||"",baseUrl:n.baseUrl||o}):x({name:"",prefix:"",baseUrl:o}))},[e,c,n]);let w=async()=>{if(m.name.trim()&&m.prefix.trim()&&m.baseUrl.trim()){p(!0);try{let e=c?`/api/provider-nodes/${n.id}`:"/api/provider-nodes",t=c?"PUT":"POST",r={name:m.name,prefix:m.prefix,baseUrl:m.baseUrl};c||(r.type="custom-embedding");let a=await fetch(e,{method:t,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)}),i=await a.json();a.ok&&(c?l?.(i.node):s?.(i.node))}catch(e){console.log("Error saving custom embedding node:",e)}finally{p(!1)}}},k=async()=>{v(!0);try{let e=await fetch("/api/provider-nodes/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:m.baseUrl,apiKey:h,type:"custom-embedding",modelId:b.trim()||void 0})}),t=await e.json();N(t)}catch{N({valid:!1,error:"Network error"})}finally{v(!1)}};return(0,r.jsx)(i.aF,{isOpen:e,title:c?"Edit Custom Embedding":"Add Custom Embedding",onClose:t,children:(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,r.jsx)(i.pd,{label:"Name",value:m.name,onChange:e=>x({...m,name:e.target.value}),placeholder:"Voyage AI",hint:"Required. A friendly label for this embedding provider."}),(0,r.jsx)(i.pd,{label:"Prefix",value:m.prefix,onChange:e=>x({...m,prefix:e.target.value}),placeholder:"voyage",hint:"Required. Used as the provider prefix for model IDs (e.g. voyage/voyage-3)."}),(0,r.jsx)(i.pd,{label:"Base URL",value:m.baseUrl,onChange:e=>x({...m,baseUrl:e.target.value}),placeholder:"https://api.voyageai.com/v1",hint:"Most embedding APIs are OpenAI-compatible: Voyage, Cohere, Jina, Mistral, Together..."}),(0,r.jsx)(i.pd,{label:"API Key (for Check)",type:"password",value:h,onChange:e=>f(e.target.value)}),(0,r.jsx)(i.pd,{label:"Model ID (for Check)",value:b,onChange:e=>g(e.target.value),placeholder:"e.g. voyage-3, embed-english-v3.0, text-embedding-3-small",hint:"Required for validation. Will send a test embeddings request."}),(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[(0,r.jsx)(i.$n,{onClick:k,disabled:!h||!b.trim()||j||!m.baseUrl.trim(),variant:"secondary",children:j?"Checking...":"Check"}),(()=>{if(!y)return null;let{valid:e,error:t,dimensions:s}=y;return e?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.Ex,{variant:"success",children:"Valid"}),s&&(0,r.jsxs)("span",{className:"text-sm text-text-muted",children:[s," dims"]})]}):(0,r.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,r.jsx)(i.Ex,{variant:"error",children:"Invalid"}),t&&(0,r.jsx)("span",{className:"text-sm text-red-500",children:t})]})})()]}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.$n,{onClick:w,fullWidth:!0,disabled:!m.name.trim()||!m.prefix.trim()||!m.baseUrl.trim()||u,children:u?c?"Saving...":"Creating...":c?"Save":"Create"}),(0,r.jsx)(i.$n,{onClick:t,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})})}d.propTypes={isOpen:n().bool.isRequired,onClose:n().func.isRequired,onCreated:n().func,onSaved:n().func,node:n().shape({id:n().string,name:n().string,prefix:n().string,baseUrl:n().string})}},13048:(e,t,s)=>{s.d(t,{default:()=>d});var r=s(73365),a=s(1521),l=s(29717),n=s(14793),i=s(56550),o=s(51123);function d({children:e}){let[t,s]=(0,a.useState)(!1),c=(0,l.usePathname)(),m=(0,n.i)(e=>e.notifications),x=(0,n.i)(e=>e.removeNotification);return(0,r.jsxs)("div",{className:"flex h-screen w-full overflow-hidden bg-bg",children:[(0,r.jsx)("div",{className:"fixed top-4 right-4 z-[80] flex w-[min(92vw,380px)] flex-col gap-2",children:m.map(e=>{var t;let s="success"===(t=e.type)?{wrapper:"border-green-500/30 bg-green-500/10 text-green-600 dark:text-green-400",icon:"check_circle"}:"error"===t?{wrapper:"border-red-500/30 bg-red-500/10 text-red-600 dark:text-red-400",icon:"error"}:"warning"===t?{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,r.jsx)("div",{className:`rounded-lg border px-3 py-2 shadow-lg backdrop-blur-sm ${s.wrapper}`,children:(0,r.jsxs)("div",{className:"flex items-start gap-2",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[18px] leading-5",children:s.icon}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[e.title?(0,r.jsx)("p",{className:"text-xs font-semibold mb-0.5",children:e.title}):null,(0,r.jsx)("p",{className:"text-xs whitespace-pre-wrap break-words",children:e.message})]}),e.dismissible?(0,r.jsx)("button",{type:"button",onClick:()=>x(e.id),className:"text-current/70 hover:text-current","aria-label":"Dismiss notification",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"close"})}):null]})},e.id)})}),t&&(0,r.jsx)("div",{className:"fixed inset-0 z-40 bg-black/20 lg:hidden",onClick:()=>s(!1)}),(0,r.jsx)("div",{className:"hidden lg:flex",children:(0,r.jsx)(i.default,{})}),(0,r.jsx)("div",{className:`fixed inset-y-0 left-0 z-50 transform lg:hidden transition-transform duration-300 ease-in-out ${t?"translate-x-0":"-translate-x-full"}`,children:(0,r.jsx)(i.default,{onClose:()=>s(!1)})}),(0,r.jsxs)("main",{className:"flex flex-col flex-1 h-full min-w-0 relative transition-colors duration-300 isolate",children:[(0,r.jsx)("div",{className:"landing-grid absolute inset-0 pointer-events-none -z-10","aria-hidden":"true"}),(0,r.jsx)(o.default,{onMenuClick:()=>s(!0)},c),(0,r.jsx)("div",{className:`flex-1 overflow-y-auto custom-scrollbar ${"/dashboard/basic-chat"===c?"":"p-6 lg:p-10"} ${"/dashboard/basic-chat"===c?"flex flex-col overflow-hidden":""}`,children:(0,r.jsx)("div",{className:`${"/dashboard/basic-chat"===c?"flex-1 w-full h-full flex flex-col":"max-w-7xl mx-auto"}`,children:e})})]})]})}},13333:(e,t,s)=>{s.d(t,{default:()=>a});var r=s(73365);function a({text:e,children:t,position:s="top"}){return(0,r.jsxs)("div",{className:"relative inline-flex group",children:[t,(0,r.jsx)("div",{className:`pointer-events-none absolute ${{top:"bottom-full left-1/2 -translate-x-1/2 mb-1.5",bottom:"top-full left-1/2 -translate-x-1/2 mt-1.5",left:"right-full top-1/2 -translate-y-1/2 mr-1.5",right:"left-full top-1/2 -translate-y-1/2 ml-1.5"}[s]} z-50 w-max max-w-56 rounded px-2 py-1 text-[11px] leading-snug bg-gray-900 text-white opacity-0 group-hover:opacity-100 transition-opacity duration-150 whitespace-normal`,children:e})]})}},14406:(e,t,s)=>{s.d(t,{default:()=>l});var r=s(73365),a=s(87706);function l({checked:e=!1,onChange:t,label:s,description:n,disabled:i=!1,size:o="md",className:d}){let c={sm:{track:"w-8 h-4",thumb:"size-3",translate:"translate-x-4"},md:{track:"w-11 h-6",thumb:"size-5",translate:"translate-x-5"},lg:{track:"w-14 h-7",thumb:"size-6",translate:"translate-x-7"}};return(0,r.jsxs)("div",{className:(0,a.cn)("flex items-center gap-3",i&&"opacity-50 cursor-not-allowed",d),children:[(0,r.jsx)("button",{type:"button",role:"switch","aria-checked":e,disabled:i,onClick:()=>{!i&&t&&t(!e)},className:(0,a.cn)("relative inline-flex shrink-0 cursor-pointer rounded-full","transition-colors duration-200 ease-in-out","focus:outline-none focus:ring-2 focus:ring-brand-500/30",e?"bg-brand-500":"bg-surface-3",c[o].track,i&&"cursor-not-allowed"),children:(0,r.jsx)("span",{className:(0,a.cn)("pointer-events-none inline-block rounded-full bg-white shadow-sm","transform transition duration-200 ease-in-out",e?c[o].translate:"translate-x-0.5",c[o].thumb,"mt-0.5")})}),(s||n)&&(0,r.jsxs)("div",{className:"flex flex-col",children:[s&&(0,r.jsx)("span",{className:"text-sm font-medium text-text-main",children:s}),n&&(0,r.jsx)("span",{className:"text-xs text-text-muted",children:n})]})]})}},14793:(e,t,s)=>{s.d(t,{i:()=>l});var r=s(2074);let a=0,l=(0,r.v)((e,t)=>({notifications:[],addNotification:s=>{let r=++a,l={id:r,type:s.type||"info",message:s.message,title:s.title||null,duration:s.duration??5e3,dismissible:s.dismissible??!0,createdAt:Date.now()};return e(e=>({notifications:[...e.notifications,l]})),l.duration>0&&setTimeout(()=>t().removeNotification(r),l.duration),r},removeNotification:t=>{e(e=>({notifications:e.notifications.filter(e=>e.id!==t)}))},clearAll:()=>e({notifications:[]}),success:(e,s)=>t().addNotification({type:"success",message:e,title:s}),error:(e,s)=>t().addNotification({type:"error",message:e,title:s,duration:8e3}),warning:(e,s)=>t().addNotification({type:"warning",message:e,title:s}),info:(e,s)=>t().addNotification({type:"info",message:e,title:s})}))},24372:(e,t,s)=>{s.d(t,{default:()=>u});var r=s(73365),a=s(1521),l=s(86447),n=s.n(l),i=s(66911),o=s(38230),d=s(69633),c=s(82495);let m=[...Object.keys(c.zN),...Object.keys(c.IS),...Object.keys(c.nJ),...Object.keys(c.fg)],x=Object.keys(c.IS).filter(e=>c.IS[e].noAuth);function u({isOpen:e,onClose:t,onSelect:s,onDeselect:l,selectedModel:n,activeProviders:p=[],title:h="Select Model",modelAliases:f={},kindFilter:b=null,addedModelValues:g=[],closeOnSelect:j=!0}){let v=(0,a.useMemo)(()=>b?p.filter(e=>{let t=c.Q2[e.provider];return(t?.serviceKinds||["llm"]).includes(b)}):p,[p,b]),[y,N]=(0,a.useState)(""),[w,k]=(0,a.useState)([]),[C,S]=(0,a.useState)([]),[T,O]=(0,a.useState)([]),[$,R]=(0,a.useState)({}),P=async()=>{try{let e=await fetch("/api/combos");if(!e.ok)throw Error(`Failed to fetch combos: ${e.status}`);let t=await e.json();k(t.combos||[])}catch(e){console.error("Error fetching combos:",e),k([])}};(0,a.useEffect)(()=>{e&&P()},[e]);let E=async()=>{try{let e=await fetch("/api/provider-nodes");if(!e.ok)throw Error(`Failed to fetch provider nodes: ${e.status}`);let t=await e.json();S(t.nodes||[])}catch(e){console.error("Error fetching provider nodes:",e),S([])}};(0,a.useEffect)(()=>{e&&E()},[e]);let I=async()=>{try{let e=await fetch("/api/models/custom");if(!e.ok)throw Error(`Failed to fetch custom models: ${e.status}`);let t=await e.json();O(t.models||[])}catch(e){console.error("Error fetching custom models:",e),O([])}};(0,a.useEffect)(()=>{e&&I()},[e]);let M=async()=>{try{let e=await fetch("/api/models/disabled");if(!e.ok)throw Error(`Failed to fetch disabled models: ${e.status}`);let t=await e.json();R(t.disabled||{})}catch(e){console.error("Error fetching disabled models:",e),R({})}};(0,a.useEffect)(()=>{e&&M()},[e]);let A=(0,a.useMemo)(()=>({...c.zN,...c.IS,...c.nJ,...c.fg}),[]),L=(0,a.useMemo)(()=>{let e={},t=new Set(["webSearch","webFetch"]),s=new Set(["image","tts","stt","embedding","imageToText"]),r=new Set(["tts","image","webFetch"]);return[...new Set([...v.map(e=>e.provider),...b?x.filter(e=>(c.Q2[e]?.serviceKinds||["llm"]).includes(b)):x])].sort((e,t)=>{let s=m.indexOf(e),r=m.indexOf(t);return(-1===s?999:s)-(-1===r?999:r)}).forEach(a=>{let l=(0,c.wG)(a),n=A[a]||{name:a,color:"#666"},i=(0,c.mq)(a)||(0,c.gb)(a);if(b&&t.has(b)){e[a]={name:n.name,alias:l,color:n.color,models:[{id:a,name:n.name,value:a}]};return}if(n.passthroughModels){let t=Object.entries(f).filter(([,e])=>e.startsWith(`${l}/`)).map(([e,t])=>({id:t.replace(`${l}/`,""),name:e,value:t}));if(b&&s.has(b)&&0===(t=(0,d.KC)(a).filter(e=>e.type===b).map(e=>({id:e.id,name:e.name,value:`${l}/${e.id}`,type:e.type}))).length&&r.has(b)&&(n.serviceKinds||["llm"]).includes(b)&&(t=[{id:a,name:n.name,value:l}]),t.length>0){let s=C.find(e=>e.id===a),r=s?.name||n.name;e[a]={name:r,alias:l,color:n.color,models:t}}}else if(i){if(b&&s.has(b))return;let t=p.find(e=>e.provider===a),r=C.find(e=>e.id===a),l=t?.name||r?.name||n.name,i=t?.providerSpecificData?.prefix||r?.prefix||a,o=Object.entries(f).filter(([,e])=>e.startsWith(`${a}/`)).map(([e,t])=>({id:t.replace(`${a}/`,""),name:e,value:`${i}/${t.replace(`${a}/`,"")}`})),d=o.length>0?o:[{id:`__placeholder__${a}`,name:`${i}/model-id`,value:`${i}/model-id`,isPlaceholder:!0}];e[a]={name:l,alias:i,color:n.color,models:d,isCustom:!0,hasModels:o.length>0}}else{var o;let t=(0,d.KC)(a),i=new Set(t.map(e=>e.id)),c=t.length>0,m=Object.entries(f).filter(([e,t])=>t.startsWith(`${l}/`)&&(!c||e===t.replace(`${l}/`,""))&&!i.has(t.replace(`${l}/`,""))).map(([e,t])=>({id:t.replace(`${l}/`,""),name:e,value:t,isCustom:!0})),x=new Set(m.map(e=>e.id)),u=T.filter(e=>e.providerAlias===l&&!i.has(e.id)&&!x.has(e.id)).map(e=>({id:e.id,name:e.name||e.id,value:`${l}/${e.id}`,isCustom:!0})),p=[...t.map(e=>({id:e.id,name:e.name,value:`${l}/${e.id}`,type:e.type})),...m,...u],h=new Set,g=(o=p.filter(e=>!h.has(e.value)&&(h.add(e.value),!0)),b?s.has(b)?o.filter(e=>e.isPlaceholder||e.type===b):o:o.filter(e=>e.isPlaceholder||!e.type||"llm"===e.type));0===g.length&&b&&r.has(b)&&(n.serviceKinds||["llm"]).includes(b)&&(g=[{id:a,name:n.name,value:l}]),g.length>0&&(e[a]={name:n.name,alias:l,color:n.color,models:g})}}),Object.entries(e).forEach(([t,s])=>{let r=new Set([...$[(0,c.wG)(t)]||[],...$[t]||[]]);0!==r.size&&(s.models=s.models.filter(e=>!r.has(e.id)),0===s.models.length&&delete e[t])}),e},[v,f,A,C,T,$,b,p]),_=(0,a.useMemo)(()=>{if(b)return[];if(!y.trim())return w;let e=y.toLowerCase();return w.filter(t=>t.name.toLowerCase().includes(e))},[w,y,b]),z=(0,a.useMemo)(()=>{if(!y.trim())return L;let e=y.toLowerCase(),t={};return Object.entries(L).forEach(([s,r])=>{let a=r.models.filter(t=>t.name.toLowerCase().includes(e)||t.id.toLowerCase().includes(e)),l=r.name.toLowerCase().includes(e);(a.length>0||l)&&(t[s]={...r,models:a})}),t},[L,y]),q=e=>{let r=e?.value||e?.name||e;g.includes(r)&&l?l(e):s(e),j&&(t(),N(""))};return(0,r.jsxs)(i.default,{isOpen:e,onClose:()=>{t(),N("")},title:h,size:"md",className:"p-4!",footer:j?null:(0,r.jsx)(o.default,{onClick:()=>{t(),N("")},fullWidth:!0,children:"Done"}),children:[(0,r.jsx)("div",{className:"mb-3",children:(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsx)("span",{className:"material-symbols-outlined absolute left-2.5 top-1/2 -translate-y-1/2 text-text-muted text-[16px]",children:"search"}),(0,r.jsx)("input",{type:"text",placeholder:"Search...",value:y,onChange:e=>N(e.target.value),className:"w-full pl-8 pr-3 py-1.5 bg-surface border border-border rounded text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"})]})}),(0,r.jsxs)("div",{className:"max-h-[400px] overflow-y-auto space-y-3",children:[_.length>0&&(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5 mb-1.5 sticky top-0 bg-surface py-0.5",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-primary text-[14px]",children:"layers"}),(0,r.jsx)("span",{className:"text-xs font-medium text-primary",children:"Combos"}),(0,r.jsxs)("span",{className:"text-[10px] text-text-muted",children:["(",_.length,")"]})]}),(0,r.jsx)("div",{className:"flex flex-wrap gap-1.5",children:_.map(e=>{let t=n===e.name;return(0,r.jsxs)("button",{onClick:()=>q({id:e.name,name:e.name,value:e.name}),className:`
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4156],{292:(e,t,s)=>{s.d(t,{default:()=>l});var r=s(73365),a=s(87706);function l({children:e,title:t,subtitle:s,icon:n,action:i,padding:o="md",hover:d=!1,elev:c=!1,className:m,...x}){return(0,r.jsxs)("div",{className:(0,a.cn)("bg-surface border border-border-subtle",c?"rounded-[14px] shadow-[var(--shadow-elev)]":"rounded-[14px] shadow-[var(--shadow-soft)]",d&&"hover:shadow-[var(--shadow-warm)] hover:border-brand-500/30 transition-all cursor-pointer",{none:"",xs:"p-3",sm:"p-4",md:"p-6",lg:"p-8"}[o],m),...x,children:[(t||i)&&(0,r.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[n&&(0,r.jsx)("div",{className:"p-2 rounded-[10px] bg-bg text-text-muted",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:n})}),(0,r.jsxs)("div",{children:[t&&(0,r.jsx)("h3",{className:"text-text-main font-semibold",children:t}),s&&(0,r.jsx)("p",{className:"text-sm text-text-muted",children:s})]})]}),i]}),e]})}l.Section=function({children:e,className:t,...s}){return(0,r.jsx)("div",{className:(0,a.cn)("p-4 rounded-[10px]","bg-bg border border-border-subtle",t),...s,children:e})},l.Row=function({children:e,className:t,...s}){return(0,r.jsx)("div",{className:(0,a.cn)("p-3 -mx-3 px-3 transition-colors","border-b border-border-subtle last:border-b-0","hover:bg-surface-2/50",t),...s,children:e})},l.ListItem=function({children:e,actions:t,className:s,...l}){return(0,r.jsxs)("div",{className:(0,a.cn)("group flex items-center justify-between p-3 -mx-3 px-3","border-b border-border-subtle last:border-b-0","hover:bg-surface-2/50 transition-colors",s),...l,children:[(0,r.jsx)("div",{className:"flex-1 min-w-0",children:e}),t&&(0,r.jsx)("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:t})]})}},1755:(e,t,s)=>{s.d(t,{default:()=>l});var r=s(73365),a=s(87706);function l({options:e=[],value:t,onChange:s,size:n="md",className:i}){let o={sm:"h-7 text-xs",md:"h-9 text-sm",lg:"h-11 text-base"};return(0,r.jsx)("div",{className:(0,a.cn)("inline-flex items-center p-1 rounded-[10px] overflow-x-auto","bg-surface-2",i),children:e.map(e=>(0,r.jsxs)("button",{onClick:()=>s(e.value),className:(0,a.cn)("shrink-0 px-4 rounded-[8px] font-medium transition-all",o[n],t===e.value?"bg-surface text-text-main shadow-sm":"text-text-muted hover:text-text-main"),children:[e.icon&&(0,r.jsx)("span",{className:"material-symbols-outlined text-[16px] mr-1.5",children:e.icon}),e.label]},e.value))})}},3242:(e,t,s)=>{s.d(t,{default:()=>d});var r=s(73365),a=s(1521),l=s(86447),n=s.n(l),i=s(74156),o=s(96459);function d({isOpen:e,provider:t,providerInfo:s,onSuccess:l,onClose:n,oauthMeta:c,idcConfig:m}){let[x,u]=(0,a.useState)("waiting"),[p,h]=(0,a.useState)(null),[f,b]=(0,a.useState)(""),[g,j]=(0,a.useState)(null),[v,y]=(0,a.useState)(!1),[N,w]=(0,a.useState)(null),[k,C]=(0,a.useState)(!1),S=(0,a.useRef)(null),T=(0,a.useRef)(!1),{copied:O,copy:$}=(0,o.C)(),[R,P]=(0,a.useState)(!1),[E,I]=(0,a.useState)("/callback?code=..."),M=(0,a.useRef)(!1);(0,a.useEffect)(()=>{P("localhost"===window.location.hostname||"127.0.0.1"===window.location.hostname),I(`${window.location.origin}/callback?code=...`)},[]);let A=(0,a.useCallback)(async(e,s)=>{if(p)try{let r=await fetch(`/api/oauth/${t}/exchange`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:e,redirectUri:p.redirectUri,codeVerifier:p.codeVerifier,state:s,...c?{meta:c}:{}})}),a=await r.json();if(!r.ok)throw Error(a.error);u("success"),l?.()}catch(e){j(e.message),u("error")}},[p,t,l]),L=(0,a.useCallback)(async(e,s,r,a)=>{T.current=!1,C(!0);for(let n=0;n<60;n++){if(T.current){console.log("[OAuthModal] Polling aborted"),C(!1);return}if(await new Promise(e=>setTimeout(e,1e3*r)),T.current){console.log("[OAuthModal] Polling aborted after sleep"),C(!1);return}try{let n=await fetch(`/api/oauth/${t}/poll`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({deviceCode:e,codeVerifier:s,extraData:a})}),i=await n.json();if(i.success){T.current=!0,u("success"),C(!1),l?.();return}if("expired_token"===i.error||"access_denied"===i.error)throw Error(i.errorDescription||i.error);"slow_down"===i.error&&(r=Math.min(r+5,30))}catch(e){j(e.message),u("error"),C(!1);return}}j("Authorization timeout"),u("error"),C(!1)},[t,l]),_=(0,a.useCallback)(async()=>{if(t)try{let e;if(j(null),["github","qwen","kiro","kimi-coding","kilocode","codebuddy"].includes(t)){y(!0),u("waiting");let e=new URL(`/api/oauth/${t}/device-code`,window.location.origin);"kiro"===t&&m?.startUrl&&(e.searchParams.set("start_url",m.startUrl),m.region&&e.searchParams.set("region",m.region),e.searchParams.set("auth_method","idc"));let s=await fetch(e.toString()),r=await s.json();if(!s.ok)throw Error(r.error);w(r);let a=r.verification_uri_complete||r.verification_uri;a&&window.open(a,"_blank","noopener,noreferrer");let l="kiro"===t?{_clientId:r._clientId,_clientSecret:r._clientSecret,_region:r._region,_authMethod:r._authMethod,_startUrl:r._startUrl}:null;L(r.device_code,r.codeVerifier,r.interval||5,l);return}let s=window.location.port||("https:"===window.location.protocol?"443":"80");e="codex"===t?"http://localhost:1455/auth/callback":`http://localhost:${s}/callback`;let r=new URL(`/api/oauth/${t}/authorize`,window.location.origin);r.searchParams.set("redirect_uri",e),c&&Object.entries(c).forEach(([e,t])=>{t&&r.searchParams.set(e,t)});let a=await fetch(r.toString()),l=await a.json();if(!a.ok)throw Error(l.error);let n=!1,i=!1;if("codex"===t)try{let t=new URL("/api/oauth/codex/start-proxy",window.location.origin);t.searchParams.set("app_port",s),t.searchParams.set("state",l.state),t.searchParams.set("code_verifier",l.codeVerifier),t.searchParams.set("redirect_uri",e);let r=await fetch(t.toString()),a=await r.json();n=a.success,i=!!a.serverSide}catch{n=!1}h({...l,redirectUri:e,codexServerSide:i}),"codex"===t&&n||R&&"codex"!==t?(u("waiting"),S.current=window.open(l.authUrl,"oauth_popup","width=600,height=700"),S.current||u("input")):(u("input"),window.open(l.authUrl,"_blank"))}catch(e){j(e.message),u("error")}},[t,R,L,c,m]);(0,a.useEffect)(()=>{e&&t?(h(null),b(""),j(null),y(!1),w(null),C(!1),T.current=!1,_()):e||(T.current=!0,"codex"===t&&fetch("/api/oauth/codex/stop-proxy").catch(()=>{}))},[e,t,_]),(0,a.useEffect)(()=>{if(!p?.codexServerSide||!p?.state||M.current)return;let e=!1,t=0,s=async()=>{if(!e&&!M.current){t+=1;try{let t=await fetch(`/api/oauth/codex/poll-status?state=${encodeURIComponent(p.state)}`),s=await t.json();if(e||M.current)return;if("done"===s.status){M.current=!0,u("success"),l?.();return}if("error"===s.status){M.current=!0,j(s.error||"Authentication failed"),u("error");return}}catch{}if(t>=200){M.current=!0,j("Authentication timeout"),u("error");return}setTimeout(s,1500)}};return setTimeout(s,1500),()=>{e=!0}},[p,l]),(0,a.useEffect)(()=>{let e;if(!p)return;M.current=!1;let t=async e=>{if(M.current)return;let{code:t,state:s,error:r,errorDescription:a}=e;if(r){M.current=!0,j(a||r),u("error");return}t&&(M.current=!0,await A(t,s))},s=e=>{let s=e.origin.includes("localhost")||e.origin.includes("127.0.0.1"),r=e.origin===window.location.origin;(s||r)&&e.data?.type==="oauth_callback"&&t(e.data.data)};window.addEventListener("message",s);try{(e=new BroadcastChannel("oauth_callback")).onmessage=e=>t(e.data)}catch(e){console.log("BroadcastChannel not supported")}let r=e=>{if("oauth_callback"===e.key&&e.newValue)try{let s=JSON.parse(e.newValue);t(s),localStorage.removeItem("oauth_callback")}catch(e){console.log("Failed to parse localStorage data")}};window.addEventListener("storage",r);try{let e=localStorage.getItem("oauth_callback");if(e){let s=JSON.parse(e);s.timestamp&&Date.now()-s.timestamp<3e4&&t(s),localStorage.removeItem("oauth_callback")}}catch{}return()=>{window.removeEventListener("message",s),window.removeEventListener("storage",r),e&&e.close()}},[p,A]);let z=async()=>{try{j(null);let e=new URL(f),t=e.searchParams.get("code"),s=e.searchParams.get("state"),r=e.searchParams.get("error");if(r)throw Error(e.searchParams.get("error_description")||r);if(!t)throw Error("No authorization code found in URL");await A(t,s)}catch(e){j(e.message),u("error")}},q=(0,a.useCallback)(()=>{"codex"===t&&fetch("/api/oauth/codex/stop-proxy").catch(()=>{}),n()},[n,t]);if(!t||!s)return null;let U=N?.verification_uri_complete||N?.verification_uri||"";return(0,r.jsx)(i.aF,{isOpen:e,title:`Connect ${s.name}`,onClose:q,size:"lg",children:(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:[("waiting"===x||"input"===x)&&!v&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 border border-border rounded-lg bg-sidebar/50",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-base text-primary animate-spin",children:"progress_activity"}),(0,r.jsx)("span",{className:"text-sm",children:"Waiting for popup authorization…"})]}),(0,r.jsxs)("div",{className:"flex items-center gap-3 my-1",children:[(0,r.jsx)("div",{className:"flex-1 h-px bg-border"}),(0,r.jsx)("span",{className:"text-xs text-text-muted uppercase tracking-wider",children:"Or paste callback URL manually"}),(0,r.jsx)("div",{className:"flex-1 h-px bg-border"})]}),(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-medium mb-2",children:"Step 1: Open this URL in your browser"}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.pd,{value:p?.authUrl||"",readOnly:!0,className:"flex-1 font-mono text-xs"}),(0,r.jsx)(i.$n,{variant:"secondary",icon:"auth_url"===O?"check":"content_copy",onClick:()=>$(p?.authUrl,"auth_url"),disabled:!p?.authUrl,children:"Copy"})]})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-medium mb-2",children:"Step 2: Paste the callback URL here"}),(0,r.jsx)("p",{className:"text-xs text-text-muted mb-2",children:"After authorization, copy the full URL from your browser."}),(0,r.jsx)(i.pd,{value:f,onChange:e=>b(e.target.value),placeholder:E,className:"font-mono text-xs"})]})]}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.$n,{onClick:z,fullWidth:!0,disabled:!f,children:"Connect"}),(0,r.jsx)(i.$n,{onClick:q,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]}),"waiting"===x&&v&&N&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"text-center py-4",children:[(0,r.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Visit the login URL below and authorize:"}),(0,r.jsxs)("div",{className:"bg-sidebar p-4 rounded-lg mb-4",children:[(0,r.jsx)("p",{className:"text-xs text-text-muted mb-1",children:"Login URL"}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("code",{className:"flex-1 text-sm break-all",children:U}),(0,r.jsx)(i.$n,{size:"sm",variant:"ghost",icon:"login_url"===O?"check":"content_copy",onClick:()=>$(U,"login_url"),disabled:!U}),(0,r.jsx)(i.$n,{size:"sm",variant:"ghost",icon:"open_in_new",onClick:()=>window.open(U,"_blank","noopener,noreferrer"),disabled:!U,children:"Open"})]})]}),(0,r.jsxs)("div",{className:"bg-primary/10 p-4 rounded-lg",children:[(0,r.jsx)("p",{className:"text-xs text-text-muted mb-1",children:"Your Code"}),(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2",children:[(0,r.jsx)("p",{className:"text-2xl font-mono font-bold text-primary",children:N.user_code}),(0,r.jsx)(i.$n,{size:"sm",variant:"ghost",icon:"user_code"===O?"check":"content_copy",onClick:()=>$(N.user_code,"user_code")})]})]})]}),k&&(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2 text-sm text-text-muted",children:[(0,r.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),"Waiting for authorization..."]})]}),"success"===x&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.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,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-green-600",children:"check_circle"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connected Successfully!"}),(0,r.jsxs)("p",{className:"text-sm text-text-muted mb-4",children:["Your ",s.name," account has been connected."]}),(0,r.jsx)(i.$n,{onClick:q,fullWidth:!0,children:"Done"})]}),"error"===x&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.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,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-red-600",children:"error"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connection Failed"}),(0,r.jsx)("p",{className:"text-sm text-red-600 mb-4",children:g}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.$n,{onClick:_,variant:"secondary",fullWidth:!0,children:"Try Again"}),(0,r.jsx)(i.$n,{onClick:q,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})]})})}d.propTypes={isOpen:n().bool.isRequired,provider:n().string,providerInfo:n().shape({name:n().string}),onSuccess:n().func,onClose:n().func.isRequired,oauthMeta:n().object,idcConfig:n().shape({startUrl:n().string,region:n().string})}},3412:(e,t,s)=>{s.d(t,{default:()=>V});var r=s(73365),a=s(1521),l=s(29717),n=s(82495),i=s(35045),o=s(292),d=s(86447),c=s.n(d);let m=e=>new Intl.NumberFormat().format(e||0);function x({stats:e}){let t;return(0,r.jsxs)("div",{className:"grid min-w-0 grid-cols-1 gap-3 sm:grid-cols-2 md:grid-cols-4 sm:gap-4",children:[(0,r.jsxs)(o.default,{className:"flex min-w-0 flex-col gap-1 px-4 py-3",children:[(0,r.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Total Requests"}),(0,r.jsx)("span",{className:"truncate text-2xl font-bold",children:m(e.totalRequests)})]}),(0,r.jsxs)(o.default,{className:"flex min-w-0 flex-col gap-1 px-4 py-3",children:[(0,r.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Total Input Tokens"}),(0,r.jsx)("span",{className:"truncate text-2xl font-bold text-primary",children:m(e.totalPromptTokens)})]}),(0,r.jsxs)(o.default,{className:"flex min-w-0 flex-col gap-1 px-4 py-3",children:[(0,r.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Output Tokens"}),(0,r.jsx)("span",{className:"truncate text-2xl font-bold text-success",children:m(e.totalCompletionTokens)})]}),(0,r.jsxs)(o.default,{className:"flex min-w-0 flex-col gap-1 px-4 py-3",children:[(0,r.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Est. Cost"}),(0,r.jsxs)("span",{className:"truncate text-2xl font-bold text-warning",children:["~",(t=e.totalCost,`$${(t||0).toFixed(2)}`)]}),(0,r.jsx)("span",{className:"text-[10px] text-text-muted",children:"Estimated, not actual billing"})]})]})}x.propTypes={stats:c().object.isRequired};let u=e=>new Intl.NumberFormat().format(e||0),p=e=>`$${(e||0).toFixed(2)}`;function h(e){if(!e)return"Never";let t=Math.floor((Date.now()-new Date(e))/6e4);return t<1?"Just now":t<60?`${t}m ago`:t<1440?`${Math.floor(t/60)}h ago`:new Date(e).toLocaleDateString()}function f({field:e,currentSort:t,currentOrder:s}){return t!==e?(0,r.jsx)("span",{className:"ml-1 opacity-20",children:"↕"}):(0,r.jsx)("span",{className:"ml-1",children:"asc"===s?"↑":"↓"})}function b({item:e,viewMode:t,isSummary:s=!1}){return"tokens"===t?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:s&&void 0===e.promptTokens?"—":u(e.promptTokens)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:s&&void 0===e.completionTokens?"—":u(e.completionTokens)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right font-medium",children:u(e.totalTokens)})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:s&&void 0===e.inputCost?"—":p(e.inputCost)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:s&&void 0===e.outputCost?"—":p(e.outputCost)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right font-medium text-warning",children:p(e.totalCost||e.cost)})]})}function g({title:e,columns:t,groupedData:s,tableType:l,sortBy:n,sortOrder:i,onToggleSort:d,viewMode:c,storageKey:m,renderDetailCells:x,renderSummaryCells:u,emptyMessage:p}){let[h,j]=(0,a.useState)(new Set);(0,a.useEffect)(()=>{try{let e=localStorage.getItem(m);e&&j(new Set(JSON.parse(e)))}catch(e){console.error(`Failed to load ${m}:`,e)}},[m]),(0,a.useEffect)(()=>{try{localStorage.setItem(m,JSON.stringify([...h]))}catch(e){console.error(`Failed to save ${m}:`,e)}},[h,m]);let v=(0,a.useCallback)(e=>{j(t=>{let s=new Set(t);return s.has(e)?s.delete(e):s.add(e),s})},[]),y=(0,a.useMemo)(()=>"tokens"===c?[{field:"promptTokens",label:"Input Tokens"},{field:"completionTokens",label:"Output Tokens"},{field:"totalTokens",label:"Total Tokens"}]:[{field:"promptTokens",label:"Input Cost"},{field:"completionTokens",label:"Output Cost"},{field:"cost",label:"Total Cost"}],[c]),N=t.length+y.length;return(0,r.jsxs)(o.default,{className:"overflow-hidden",children:[(0,r.jsx)("div",{className:"p-4 border-b border-border bg-bg-subtle/50",children:(0,r.jsx)("h3",{className:"font-semibold",children:e})}),(0,r.jsx)("div",{className:"overflow-x-auto",children:(0,r.jsxs)("table",{className:"w-full text-sm text-left",children:[(0,r.jsx)("thead",{className:"bg-bg-subtle/30 text-text-muted uppercase text-xs",children:(0,r.jsxs)("tr",{children:[t.map(e=>(0,r.jsxs)("th",{className:`px-6 py-3 cursor-pointer hover:bg-bg-subtle/50 ${"right"===e.align?"text-right":""}`,onClick:()=>d(l,e.field),children:[e.label," ",(0,r.jsx)(f,{field:e.field,currentSort:n,currentOrder:i})]},e.field)),y.map(e=>(0,r.jsxs)("th",{className:"px-6 py-3 text-right cursor-pointer hover:bg-bg-subtle/50",onClick:()=>d(l,e.field),children:[e.label," ",(0,r.jsx)(f,{field:e.field,currentSort:n,currentOrder:i})]},e.field))]})}),(0,r.jsxs)("tbody",{className:"divide-y divide-border",children:[s.map(e=>(0,r.jsxs)(a.Fragment,{children:[(0,r.jsxs)("tr",{className:"group-summary cursor-pointer hover:bg-bg-subtle/50 transition-colors",onClick:()=>v(e.groupKey),children:[(0,r.jsx)("td",{className:"px-6 py-3",children:(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:`material-symbols-outlined text-[18px] text-text-muted transition-transform ${h.has(e.groupKey)?"rotate-90":""}`,children:"chevron_right"}),(0,r.jsx)("span",{className:`font-medium transition-colors ${e.summary.pending>0?"text-primary":""}`,children:e.groupKey})]})}),u(e),(0,r.jsx)(b,{item:e.summary,viewMode:c,isSummary:!0})]}),h.has(e.groupKey)&&e.items.map(e=>(0,r.jsxs)("tr",{className:"group-detail hover:bg-bg-subtle/20 transition-colors",children:[x(e),(0,r.jsx)(b,{item:e,viewMode:c})]},`detail-${e.key}`))]},e.groupKey)),0===s.length&&(0,r.jsx)("tr",{children:(0,r.jsx)("td",{colSpan:N,className:"px-6 py-8 text-center text-text-muted",children:p})})]})]})})]})}f.propTypes={field:c().string.isRequired,currentSort:c().string.isRequired,currentOrder:c().string.isRequired},b.propTypes={item:c().object.isRequired,viewMode:c().string.isRequired,isSummary:c().bool},g.propTypes={title:c().string.isRequired,columns:c().arrayOf(c().shape({field:c().string.isRequired,label:c().string.isRequired,align:c().string})).isRequired,groupedData:c().array.isRequired,tableType:c().string.isRequired,sortBy:c().string.isRequired,sortOrder:c().string.isRequired,onToggleSort:c().func.isRequired,viewMode:c().string.isRequired,storageKey:c().string.isRequired,renderDetailCells:c().func.isRequired,renderSummaryCells:c().func.isRequired,emptyMessage:c().string.isRequired};var j=s(70842),v=s(36629);function y({data:e}){let{label:t,color:s,imageUrl:l,textIcon:n,active:i}=e,[o,d]=(0,a.useState)(!1);return(0,r.jsxs)("div",{className:"flex items-center gap-2.5 px-4 py-2.5 rounded-lg border-2 transition-all duration-300 bg-bg",style:{borderColor:i?s:"var(--color-border)",boxShadow:i?`0 0 16px ${s}40`:"none",minWidth:"150px"},children:[(0,r.jsx)(j.h7,{type:"target",position:v.yX.Top,id:"top",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)(j.h7,{type:"target",position:v.yX.Bottom,id:"bottom",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)(j.h7,{type:"target",position:v.yX.Left,id:"left",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)(j.h7,{type:"target",position:v.yX.Right,id:"right",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)("div",{className:"w-8 h-8 rounded-md flex items-center justify-center shrink-0",style:{backgroundColor:`${s}15`},children:o?(0,r.jsx)("span",{className:"text-sm font-bold",style:{color:s},children:n}):(0,r.jsx)("img",{src:l,alt:t,className:"w-6 h-6 rounded-sm object-contain",onError:()=>d(!0)})}),(0,r.jsx)("span",{className:"text-base font-medium truncate",style:{color:i?s:"var(--color-text)"},children:t}),i&&(0,r.jsxs)("span",{className:"relative flex h-2 w-2 shrink-0",children:[(0,r.jsx)("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full opacity-75",style:{backgroundColor:s}}),(0,r.jsx)("span",{className:"relative inline-flex rounded-full h-2 w-2",style:{backgroundColor:s}})]})]})}function N({data:e}){return(0,r.jsxs)("div",{className:"flex items-center justify-center px-5 py-3 rounded-xl border-2 border-primary bg-primary/5 shadow-md min-w-[130px]",children:[(0,r.jsx)(j.h7,{type:"source",position:v.yX.Top,id:"top",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)(j.h7,{type:"source",position:v.yX.Bottom,id:"bottom",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)(j.h7,{type:"source",position:v.yX.Left,id:"left",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)(j.h7,{type:"source",position:v.yX.Right,id:"right",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)("img",{src:"/favicon.svg",alt:"9Router",className:"w-6 h-6 mr-2"}),(0,r.jsx)("span",{className:"text-sm font-bold text-primary",children:"9Router"}),e.activeCount>0&&(0,r.jsx)("span",{className:"ml-2 px-1.5 py-0.5 rounded-full bg-primary text-white text-xs font-bold",children:e.activeCount})]})}s(97621),y.propTypes={data:c().object.isRequired},N.propTypes={data:c().object.isRequired};let w={provider:y,router:N};function k({providers:e=[],activeRequests:t=[],lastProvider:s="",errorProvider:l=""}){let i=(0,a.useMemo)(()=>t.map(e=>e.provider?.toLowerCase()).filter(Boolean).sort().join(","),[t]),o=s?.toLowerCase()||"",d=l?.toLowerCase()||"",c=(0,a.useMemo)(()=>new Set(i?i.split(","):[]),[i]),m=(0,a.useMemo)(()=>new Set(o?[o]:[]),[o]),x=(0,a.useMemo)(()=>new Set(d?[d]:[]),[d]),u=(0,a.useRef)({}),[p,h]=(0,a.useState)(0);(0,a.useEffect)(()=>{let e=u.current,t=Date.now();for(let s of c)e[s]||(e[s]=t);for(let t of Object.keys(e))c.has(t)||delete e[t]},[c]),(0,a.useEffect)(()=>{if(0===c.size)return;let e=setInterval(()=>h(e=>e+1),1e3);return()=>clearInterval(e)},[c]);let f=(0,a.useMemo)(()=>{let e=Date.now(),t=new Set;for(let s of c){let r=u.current[s];(!r||e-r<6e4)&&t.add(s)}return t},[c,p]),{nodes:b,edges:g}=(0,a.useMemo)(()=>(function(e,t,s,r){let a=e.length,l=Math.max(320,204*a/(2*Math.PI)),i=Math.max(200,.55*l);if(0===a)return{nodes:[{id:"router",type:"router",position:{x:0,y:0},data:{activeCount:0},draggable:!1}],edges:[]};let o=[],d=[];return o.push({id:"router",type:"router",position:{x:-60,y:-22},data:{activeCount:t.size},draggable:!1}),e.forEach((e,c)=>{var m,x;let u,p,h=(m=e.provider,n.Q2[m]||{color:"#6b7280",name:m}),f=t.has(e.provider?.toLowerCase()),b=!f&&s.has(e.provider?.toLowerCase()),g=!f&&r.has(e.provider?.toLowerCase()),j=`provider-${e.provider}`,v={label:(h.name!==e.provider?h.name:null)||e.name||e.provider,color:h.color||"#6b7280",imageUrl:(x=e.provider,`/providers/${x}.png`),textIcon:h.textIcon||(e.provider||"?").slice(0,2).toUpperCase(),active:f},y=-Math.PI/2+2*Math.PI*c/a,N=l*Math.cos(y),w=i*Math.sin(y);Math.abs(y+Math.PI/2)<Math.PI/4||Math.abs(y-3*Math.PI/2)<Math.PI/4?(u="top",p="bottom"):Math.abs(y-Math.PI/2)<Math.PI/4?(u="bottom",p="top"):N>0?(u="right",p="left"):(u="left",p="right"),o.push({id:j,type:"provider",position:{x:N-90,y:w-15},data:v,draggable:!1}),d.push({id:`e-${j}`,source:"router",sourceHandle:u,target:j,targetHandle:p,animated:f,style:(h.color,g?{stroke:"#ef4444",strokeWidth:2.5,opacity:.9}:f?{stroke:"#22c55e",strokeWidth:2.5,opacity:.9}:b?{stroke:"#f59e0b",strokeWidth:2,opacity:.7}:{stroke:"var(--color-border)",strokeWidth:1,opacity:.3})})}),{nodes:o,edges:d}})(e,f,m,x),[e,f,o,d]),v=(0,a.useMemo)(()=>e.map(e=>e.provider).sort().join(","),[e]),y=(0,a.useRef)(null),N=(0,a.useRef)(null),C={padding:.2,duration:200},S=(0,a.useCallback)(e=>{y.current=e,setTimeout(()=>e.fitView(C),50)},[]);return(0,a.useEffect)(()=>{let e=N.current;if(!e)return;let t=new ResizeObserver(()=>{y.current&&y.current.fitView(C)});return t.observe(e),()=>t.disconnect()},[]),(0,a.useEffect)(()=>{if(y.current){let e=setTimeout(()=>y.current.fitView(C),50);return()=>clearTimeout(e)}},[b.length]),(0,r.jsx)("div",{ref:N,className:"h-[320px] w-full min-w-0 rounded-lg border border-border bg-bg-subtle/30 sm:h-[480px]",children:0===e.length?(0,r.jsx)("div",{className:"h-full flex items-center justify-center text-text-muted text-sm",children:"No providers connected"}):(0,r.jsx)(j.Gc,{nodes:b,edges:g,nodeTypes:w,fitView:!0,fitViewOptions:C,minZoom:.1,maxZoom:2,onInit:S,proOptions:{hideAttribution:!0},panOnDrag:!0,zoomOnScroll:!0,zoomOnPinch:!0,zoomOnDoubleClick:!0,preventScrolling:!1,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,children:(0,r.jsx)(j.H2,{showInteractive:!1,className:"react-flow-controls-custom"})},v)})}k.propTypes={providers:c().arrayOf(c().shape({id:c().string,provider:c().string,name:c().string})),activeRequests:c().arrayOf(c().shape({provider:c().string,model:c().string,account:c().string})),lastProvider:c().string,errorProvider:c().string};var C=s(71220),S=s(51142),T=s(35692),O=s(39719),$=s(94580),R=s(38147),P=s(80900);let E=e=>e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e||0),I=e=>`$${(e||0).toFixed(4)}`;function M({period:e="7d"}){let[t,s]=(0,a.useState)([]),[l,n]=(0,a.useState)(!0),[i,d]=(0,a.useState)("tokens"),c=(0,a.useCallback)(async()=>{n(!0);try{let t=await fetch(`/api/usage/chart?period=${e}`);if(t.ok){let e=await t.json();s(e)}}catch(e){console.error("Failed to fetch chart data:",e)}finally{n(!1)}},[e]);(0,a.useEffect)(()=>{c()},[c]);let m=t.some(e=>e.tokens>0||e.cost>0);return(0,r.jsxs)(o.default,{className:"flex min-w-0 flex-col gap-3 p-3 sm:p-4",children:[(0,r.jsxs)("div",{className:"grid w-full grid-cols-2 items-center gap-1 rounded-lg border border-border bg-bg-subtle p-1 sm:w-auto sm:self-start",children:[(0,r.jsx)("button",{onClick:()=>d("tokens"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"tokens"===i?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:"Tokens"}),(0,r.jsx)("button",{onClick:()=>d("cost"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"cost"===i?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:"Cost"})]}),l?(0,r.jsx)("div",{className:"h-48 flex items-center justify-center text-text-muted text-sm",children:"Loading..."}):m?(0,r.jsx)(C.u,{width:"100%",height:220,children:(0,r.jsxs)(S.Q,{data:t,margin:{top:4,right:8,left:0,bottom:0},children:[(0,r.jsxs)("defs",{children:[(0,r.jsxs)("linearGradient",{id:"gradTokens",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,r.jsx)("stop",{offset:"5%",stopColor:"#6366f1",stopOpacity:.25}),(0,r.jsx)("stop",{offset:"95%",stopColor:"#6366f1",stopOpacity:0})]}),(0,r.jsxs)("linearGradient",{id:"gradCost",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,r.jsx)("stop",{offset:"5%",stopColor:"#f59e0b",stopOpacity:.25}),(0,r.jsx)("stop",{offset:"95%",stopColor:"#f59e0b",stopOpacity:0})]})]}),(0,r.jsx)(T.d,{strokeDasharray:"3 3",strokeOpacity:.1}),(0,r.jsx)(O.W,{dataKey:"label",tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,interval:"preserveStartEnd"}),(0,r.jsx)($.h,{tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,tickFormatter:"tokens"===i?E:I,width:50}),(0,r.jsx)(R.m,{contentStyle:{backgroundColor:"var(--color-bg)",border:"1px solid var(--color-border)",borderRadius:"8px",fontSize:"12px"},formatter:(e,t)=>"tokens"===t?[E(e),"Tokens"]:[I(e),"Cost"]}),"tokens"===i?(0,r.jsx)(P.Gk,{type:"monotone",dataKey:"tokens",stroke:"#6366f1",strokeWidth:2,fill:"url(#gradTokens)",dot:!1,activeDot:{r:4}}):(0,r.jsx)(P.Gk,{type:"monotone",dataKey:"cost",stroke:"#f59e0b",strokeWidth:2,fill:"url(#gradCost)",dot:!1,activeDot:{r:4}})]})}):(0,r.jsx)("div",{className:"h-48 flex items-center justify-center text-text-muted text-sm",children:"No data for this period"})]})}function A(e){let t=n.Q2[e];return!t?.serviceKinds||t.serviceKinds.includes("llm")}function L({timestamp:e}){let t,[,s]=(0,a.useState)(0);return(0,a.useEffect)(()=>{let e=setInterval(()=>s(e=>e+1),1e3);return()=>clearInterval(e)},[]),(0,r.jsx)(r.Fragment,{children:(t=Math.floor((Date.now()-new Date(e))/1e3))<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`})}function _({requests:e=[]}){return(0,r.jsxs)(o.default,{className:"flex min-w-0 flex-col overflow-hidden",padding:"sm",style:{height:480},children:[(0,r.jsx)("div",{className:"px-1 py-2 border-b border-border shrink-0",children:(0,r.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"Recent Requests"})}),e.length?(0,r.jsx)("div",{className:"flex-1 overflow-y-auto",children:(0,r.jsxs)("table",{className:"w-full min-w-[300px] border-collapse text-xs",children:[(0,r.jsx)("thead",{className:"sticky top-0 bg-bg z-10",children:(0,r.jsxs)("tr",{className:"border-b border-border",children:[(0,r.jsx)("th",{className:"py-1.5 text-left font-semibold text-text-muted w-2"}),(0,r.jsx)("th",{className:"py-1.5 text-left font-semibold text-text-muted",children:"Model"}),(0,r.jsx)("th",{className:"py-1.5 text-right font-semibold text-text-muted whitespace-nowrap",children:"In / Out"}),(0,r.jsx)("th",{className:"py-1.5 text-right font-semibold text-text-muted",children:"When"})]})}),(0,r.jsx)("tbody",{className:"divide-y divide-border/50",children:e.map((e,t)=>{let s=!e.status||"ok"===e.status||"success"===e.status;return(0,r.jsxs)("tr",{className:"hover:bg-bg-subtle transition-colors",children:[(0,r.jsx)("td",{className:"py-1.5",children:(0,r.jsx)("span",{className:`block w-1.5 h-1.5 rounded-full ${s?"bg-success":"bg-error"}`})}),(0,r.jsx)("td",{className:"py-1.5 font-mono truncate max-w-[120px]",title:e.model,children:e.model}),(0,r.jsxs)("td",{className:"py-1.5 text-right whitespace-nowrap",children:[(0,r.jsxs)("span",{className:"text-primary",children:[u(e.promptTokens),"↑"]})," ",(0,r.jsxs)("span",{className:"text-success",children:[u(e.completionTokens),"↓"]})]}),(0,r.jsx)("td",{className:"py-1.5 text-right text-text-muted whitespace-nowrap",children:(0,r.jsx)(L,{timestamp:e.timestamp})})]},t)})})]})}):(0,r.jsx)("div",{className:"flex-1 flex items-center justify-center text-text-muted text-sm",children:"No requests yet."})]})}function z(e,t={},s,r){return Object.entries(e||{}).map(([e,s])=>{let r=(s.promptTokens||0)+(s.completionTokens||0),a=s.cost||0,l=r>0?(s.promptTokens||0)*(a/r):0,n=r>0?(s.completionTokens||0)*(a/r):0;return{...s,key:e,totalTokens:r,totalCost:a,inputCost:l,outputCost:n,pending:t[e]||0}}).sort((e,t)=>{let a=e[s],l=t[s];return("string"==typeof a&&(a=a.toLowerCase()),"string"==typeof l&&(l=l.toLowerCase()),a<l)?"asc"===r?-1:1:a>l?"asc"===r?1:-1:0})}function q(e,t){if(!Array.isArray(e))return[];let s={};return e.forEach(e=>{let r=function(e,t){switch(t){case"rawModel":return e.rawModel||"Unknown Model";case"accountName":return e.accountName||`Account ${e.connectionId?.slice(0,8)}...`||"Unknown Account";case"keyName":return e.keyName||"Unknown Key";case"endpoint":return e.endpoint||"Unknown Endpoint";default:return e[t]||"Unknown"}}(e,t);s[r]||(s[r]={groupKey:r,summary:{requests:0,promptTokens:0,completionTokens:0,totalTokens:0,cost:0,inputCost:0,outputCost:0,lastUsed:null,pending:0},items:[]});let a=s[r].summary;a.requests+=e.requests||0,a.promptTokens+=e.promptTokens||0,a.completionTokens+=e.completionTokens||0,a.totalTokens+=e.totalTokens||0,a.cost+=e.cost||0,a.inputCost+=e.inputCost||0,a.outputCost+=e.outputCost||0,a.pending+=e.pending||0,e.lastUsed&&(!a.lastUsed||new Date(e.lastUsed)>new Date(a.lastUsed))&&(a.lastUsed=e.lastUsed),s[r].items.push(e)}),Object.values(s)}M.propTypes={period:c().string};let U=[{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],F=[{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"}],D=[{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"}],W=[{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"}],K=[{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"}],B=[{value:"today",label:"Today"},{value:"24h",label:"24h"},{value:"7d",label:"7D"},{value:"30d",label:"30D"},{value:"60d",label:"60D"}];function V({period:e,setPeriod:t,hidePeriodSelector:s=!1}={}){let o=(0,l.useRouter)(),d=(0,l.useSearchParams)(),c=d.get("sortBy")||"rawModel",m=d.get("sortOrder")||"asc",[p,f]=(0,a.useState)(null),[b,j]=(0,a.useState)(!0),[v,y]=(0,a.useState)(!1),[N,w]=(0,a.useState)("model"),[C,S]=(0,a.useState)("costs"),[T,O]=(0,a.useState)([]),[$,R]=(0,a.useState)("7d"),P=e??$,E=t??R;(0,a.useEffect)(()=>{fetch("/api/providers").then(e=>e.ok?e.json():null).then(e=>{let t=new Set;O([...(e?.connections||[]).filter(e=>!(!1===e.isActive||!A(e.provider)||t.has(e.provider))&&(t.add(e.provider),!0)),...Object.values(n.IS).filter(e=>e.noAuth&&!t.has(e.id)&&A(e.id)).map(e=>({provider:e.id,name:e.name}))])}).catch(()=>{})},[]),(0,a.useEffect)(()=>{p?y(!0):j(!0),fetch(`/api/usage/stats?period=${P}`).then(e=>e.ok?e.json():null).then(e=>{e&&f(t=>({...t,...e}))}).catch(()=>{}).finally(()=>{j(!1),y(!1)})},[P]),(0,a.useEffect)(()=>{let e=new EventSource("/api/usage/stream");return e.onmessage=e=>{try{let t=JSON.parse(e.data);f(e=>({...e||{},activeRequests:t.activeRequests,recentRequests:t.recentRequests,errorProvider:t.errorProvider,pending:t.pending})),j(!1)}catch(e){console.error("[SSE CLIENT] parse error:",e)}},e.onerror=()=>j(!1),()=>e.close()},[]);let I=(0,a.useCallback)((e,t)=>{let s=new URLSearchParams(d.toString());s.get("sortBy")===t?s.set("sortOrder","asc"===s.get("sortOrder")?"desc":"asc"):(s.set("sortBy",t),s.set("sortOrder","asc")),o.replace(`?${s.toString()}`,{scroll:!1})},[d,o]),L=(0,a.useMemo)(()=>{if(!p)return null;switch(N){case"model":{let e=p.pending?.byModel||{};return{columns:U,groupedData:q(z(p.byModel,e,c,m),"rawModel"),storageKey:"usage-stats:expanded-models",emptyMessage:"No usage recorded yet.",renderSummaryCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:u(e.summary.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:h(e.summary.lastUsed)})]}),renderDetailCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:`px-6 py-3 font-medium transition-colors ${e.pending>0?"text-primary":""}`,children:e.rawModel}),(0,r.jsx)("td",{className:"px-6 py-3",children:(0,r.jsx)(i.default,{variant:e.pending>0?"primary":"neutral",size:"sm",children:e.provider})}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:u(e.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:h(e.lastUsed)})]})}}case"account":{let e={};return p?.pending?.byAccount&&Object.entries(p.byAccount||{}).forEach(([t,s])=>{let r=p.pending.byAccount[s.connectionId];if(r){let a=s.provider?`${s.rawModel} (${s.provider})`:s.rawModel;e[t]=r[a]||0}}),{columns:F,groupedData:q(z(p.byAccount,e,c,m),"accountName"),storageKey:"usage-stats:expanded-accounts",emptyMessage:"No account-specific usage recorded yet.",renderSummaryCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:u(e.summary.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:h(e.summary.lastUsed)})]}),renderDetailCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:`px-6 py-3 font-medium transition-colors ${e.pending>0?"text-primary":""}`,children:e.accountName||`Account ${e.connectionId?.slice(0,8)}...`}),(0,r.jsx)("td",{className:`px-6 py-3 font-medium transition-colors ${e.pending>0?"text-primary":""}`,children:e.rawModel}),(0,r.jsx)("td",{className:"px-6 py-3",children:(0,r.jsx)(i.default,{variant:e.pending>0?"primary":"neutral",size:"sm",children:e.provider})}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:u(e.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:h(e.lastUsed)})]})}}case"apiKey":return{columns:D,groupedData:q(z(p.byApiKey,{},c,m),"keyName"),storageKey:"usage-stats:expanded-apikeys",emptyMessage:"No API key usage recorded yet.",renderSummaryCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:u(e.summary.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:h(e.summary.lastUsed)})]}),renderDetailCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 font-medium",children:e.keyName}),(0,r.jsx)("td",{className:"px-6 py-3",children:e.rawModel}),(0,r.jsx)("td",{className:"px-6 py-3",children:(0,r.jsx)(i.default,{variant:"neutral",size:"sm",children:e.provider})}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:u(e.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:h(e.lastUsed)})]})};default:return{columns:W,groupedData:q(z(p.byEndpoint,{},c,m),"endpoint"),storageKey:"usage-stats:expanded-endpoints",emptyMessage:"No endpoint usage recorded yet.",renderSummaryCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:u(e.summary.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:h(e.summary.lastUsed)})]}),renderDetailCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 font-medium font-mono text-sm",children:e.endpoint}),(0,r.jsx)("td",{className:"px-6 py-3",children:e.rawModel}),(0,r.jsx)("td",{className:"px-6 py-3",children:(0,r.jsx)(i.default,{variant:"neutral",size:"sm",children:e.provider})}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:u(e.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:h(e.lastUsed)})]})}}},[p,N,c,m]);if(!p&&!b)return(0,r.jsx)("div",{className:"text-text-muted",children:"Failed to load usage statistics."});let G=(0,r.jsx)("div",{className:"flex items-center justify-center py-12 text-text-muted",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[32px] animate-spin",children:"progress_activity"})});return(0,r.jsxs)("div",{className:"flex min-w-0 flex-col gap-6",children:[!s&&(0,r.jsxs)("div",{className:"flex w-full items-center gap-2 sm:w-auto sm:self-end",children:[(0,r.jsx)("div",{className:"grid flex-1 grid-cols-5 items-center gap-1 rounded-lg border border-border bg-bg-subtle p-1 sm:flex sm:flex-none",children:B.map(e=>(0,r.jsx)("button",{onClick:()=>E(e.value),disabled:v,className:`rounded-md px-3 py-1 text-sm font-medium transition-colors ${P===e.value?"bg-primary text-white shadow-sm":"text-text-muted hover:bg-bg-hover hover:text-text"}`,children:e.label},e.value))}),v&&(0,r.jsx)("span",{className:"material-symbols-outlined text-[16px] text-text-muted animate-spin",children:"progress_activity"})]}),b?G:(0,r.jsx)(x,{stats:p}),b?G:(0,r.jsxs)("div",{className:"grid min-w-0 grid-cols-1 items-stretch gap-2 lg:grid-cols-[minmax(0,2fr)_minmax(280px,1fr)]",children:[(0,r.jsx)(k,{providers:T,activeRequests:p.activeRequests||[],lastProvider:p.recentRequests?.[0]?.provider||"",errorProvider:p.errorProvider||""}),(0,r.jsx)(_,{requests:p.recentRequests||[]})]}),b?G:(0,r.jsx)(M,{period:P}),(0,r.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,r.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,r.jsx)("select",{value:N,onChange:e=>w(e.target.value),className:"w-full rounded-lg border border-border bg-surface px-3 py-1.5 text-sm font-medium text-text-main focus:outline-none focus:ring-2 focus:ring-primary/50 sm:w-auto",style:{colorScheme:"auto"},children:K.map(e=>(0,r.jsx)("option",{value:e.value,children:e.label},e.value))}),(0,r.jsxs)("div",{className:"grid grid-cols-2 items-center gap-1 rounded-lg border border-border bg-bg-subtle p-1 sm:flex",children:[(0,r.jsx)("button",{onClick:()=>S("costs"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"costs"===C?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:"Costs"}),(0,r.jsx)("button",{onClick:()=>S("tokens"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"tokens"===C?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:"Tokens"})]})]}),b?G:L&&(0,r.jsx)(g,{title:"",columns:L.columns,groupedData:L.groupedData,tableType:N,sortBy:c,sortOrder:m,onToggleSort:I,viewMode:C,storageKey:L.storageKey,renderSummaryCells:L.renderSummaryCells,renderDetailCells:L.renderDetailCells,emptyMessage:L.emptyMessage})]})]})}},5671:(e,t,s)=>{s.d(t,{default:()=>o});var r=s(73365),a=s(1521),l=s(66911),n=s(38230),i=s(96459);function o({isOpen:e,onClose:t,title:s="Manual Configuration",configs:d=[]}){let{copy:c}=(0,i.C)(),[m,x]=(0,a.useState)(null);return(0,r.jsx)(l.default,{isOpen:e,onClose:t,title:s,size:"xl",children:(0,r.jsx)("div",{className:"flex flex-col gap-4",children:d.map((e,t)=>(0,r.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("span",{className:"text-sm font-medium text-text-main",children:e.filename}),(0,r.jsxs)(n.default,{variant:"ghost",size:"sm",onClick:()=>{var s;return s=e.content,void(c(s,`manualconfig-${t}`),x(t),setTimeout(()=>x(null),2e3))},children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:m===t?"check":"content_copy"}),m===t?"Copied!":"Copy"]})]}),(0,r.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:e.content})]},t))})})}},8569:(e,t,s)=>{s.d(t,{default:()=>n});var r=s(73365),a=s(292);let l={mode:{label:"Mode",format:e=>e},defaultModel:{label:"Model",format:e=>e,mono:!0},baseUrl:{label:"Endpoint",format:e=>e,isLink:!0,mono:!0},costPerQuery:{label:"Cost / call",format:e=>0===e?"Free":`$${e.toFixed(4)}`},pricingUrl:{label:"Pricing",format:()=>"View pricing",isLink:!0},freeTier:{label:"Free tier",format:e=>e},freeMonthlyQuota:{label:"Free quota",format:e=>0===e?"—":e>=999999?"Unlimited":`${e.toLocaleString()} / mo`},searchTypes:{label:"Types",format:e=>e.join(", ")},formats:{label:"Formats",format:e=>e.join(", ")},maxMaxResults:{label:"Max results",format:e=>e},maxCharacters:{label:"Max chars",format:e=>e.toLocaleString()}};function n({config:e,provider:t,title:s="Provider Info"}){if(!e)return null;let i=Object.entries(l).filter(([t])=>void 0!==e[t]&&null!==e[t]&&""!==e[t]).map(([t,s])=>({key:t,label:s.label,value:s.format(e[t]),isLink:s.isLink,mono:s.mono,raw:e[t]})),o=t?.notice?.apiKeyUrl||t?.website,d=t?.notice?.text;return(0,r.jsxs)(a.default,{children:[(0,r.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold",children:s}),o&&(0,r.jsxs)("a",{href:o,target:"_blank",rel:"noopener noreferrer",className:"text-xs text-primary hover:underline inline-flex items-center gap-1",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-sm",children:"open_in_new"}),"Get API Key"]})]}),(0,r.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-x-6 gap-y-2",children:[i.map(e=>(0,r.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,r.jsx)("span",{className:"text-xs text-text-muted w-28 shrink-0",children:e.label}),e.isLink?(0,r.jsx)("a",{href:e.raw,target:"_blank",rel:"noopener noreferrer",className:`text-sm text-primary hover:underline truncate ${e.mono?"font-mono":""}`,children:e.value}):(0,r.jsx)("span",{className:`text-sm text-text-main truncate ${e.mono?"font-mono":""}`,children:e.value})]},e.key)),d&&(0,r.jsxs)("div",{className:"flex items-start gap-3 min-w-0 sm:col-span-2",children:[(0,r.jsx)("span",{className:"text-xs text-text-muted w-28 shrink-0 mt-0.5",children:"Notice"}),(0,r.jsx)("span",{className:"text-sm text-text-main leading-relaxed",children:d})]})]})]})}},12003:(e,t,s)=>{s.d(t,{default:()=>d});var r=s(73365),a=s(1521),l=s(98196),n=s(55348),i=s(84502);let o=e=>({en:{name:"English",flag:"\uD83C\uDDFA\uD83C\uDDF8"},vi:{name:"Tiếng Việt",flag:"\uD83C\uDDFB\uD83C\uDDF3"},"zh-CN":{name:"简体中文",flag:"\uD83C\uDDE8\uD83C\uDDF3"},"zh-TW":{name:"繁體中文",flag:"\uD83C\uDDF9\uD83C\uDDFC"},ja:{name:"日本語",flag:"\uD83C\uDDEF\uD83C\uDDF5"},"pt-BR":{name:"Portugu\xeas (Brasil)",flag:"\uD83C\uDDE7\uD83C\uDDF7"},"pt-PT":{name:"Portugu\xeas (Portugal)",flag:"\uD83C\uDDF5\uD83C\uDDF9"},ko:{name:"한국어",flag:"\uD83C\uDDF0\uD83C\uDDF7"},es:{name:"Espa\xf1ol",flag:"\uD83C\uDDEA\uD83C\uDDF8"},de:{name:"Deutsch",flag:"\uD83C\uDDE9\uD83C\uDDEA"},fr:{name:"Fran\xe7ais",flag:"\uD83C\uDDEB\uD83C\uDDF7"},he:{name:"עברית",flag:"\uD83C\uDDEE\uD83C\uDDF1"},ar:{name:"العربية",flag:"\uD83C\uDDF8\uD83C\uDDE6"},ru:{name:"Русский",flag:"\uD83C\uDDF7\uD83C\uDDFA"},pl:{name:"Polski",flag:"\uD83C\uDDF5\uD83C\uDDF1"},cs:{name:"Čeština",flag:"\uD83C\uDDE8\uD83C\uDDFF"},nl:{name:"Nederlands",flag:"\uD83C\uDDF3\uD83C\uDDF1"},tr:{name:"T\xfcrk\xe7e",flag:"\uD83C\uDDF9\uD83C\uDDF7"},uk:{name:"Українська",flag:"\uD83C\uDDFA\uD83C\uDDE6"},tl:{name:"Tagalog",flag:"\uD83C\uDDF5\uD83C\uDDED"},id:{name:"Indonesia",flag:"\uD83C\uDDEE\uD83C\uDDE9"},th:{name:"ไทย",flag:"\uD83C\uDDF9\uD83C\uDDED"},hi:{name:"हिन्दी",flag:"\uD83C\uDDEE\uD83C\uDDF3"},bn:{name:"বাংলা",flag:"\uD83C\uDDE7\uD83C\uDDE9"},ur:{name:"اردو",flag:"\uD83C\uDDF5\uD83C\uDDF0"},ro:{name:"Rom\xe2nă",flag:"\uD83C\uDDF7\uD83C\uDDF4"},sv:{name:"Svenska",flag:"\uD83C\uDDF8\uD83C\uDDEA"},it:{name:"Italiano",flag:"\uD83C\uDDEE\uD83C\uDDF9"},el:{name:"Ελληνικά",flag:"\uD83C\uDDEC\uD83C\uDDF7"},hu:{name:"Magyar",flag:"\uD83C\uDDED\uD83C\uDDFA"},fi:{name:"Suomi",flag:"\uD83C\uDDEB\uD83C\uDDEE"},da:{name:"Dansk",flag:"\uD83C\uDDE9\uD83C\uDDF0"},no:{name:"Norsk",flag:"\uD83C\uDDF3\uD83C\uDDF4"}})[e]||{name:e,flag:"\uD83C\uDF10"};function d({className:e="",isOpen:t,onClose:s,hideTrigger:c=!1}){let[m,x]=(0,a.useState)("en"),[u,p]=(0,a.useState)(!1),[h,f]=(0,a.useState)(!1),b=(0,a.useRef)(null),g="boolean"==typeof t,j=g?t:h,v=e=>{g?!e&&s&&s():f(e)};(0,a.useEffect)(()=>{x(function(){if("u"<typeof document)return"en";let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${n.CL}=`)),t=e?decodeURIComponent(e.split("=")[1]):"en";return(0,n.QC)(t)}())},[]),(0,a.useEffect)(()=>{function e(e){b.current&&!b.current.contains(e.target)&&v(!1)}if(j)return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[j]);let y=async e=>{if(e!==m&&!u){p(!0),v(!1);try{await fetch("/api/locale",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({locale:e})}),await (0,i.wn)(),x(e)}catch(e){console.error("Failed to set locale:",e)}finally{p(!1)}}};return(0,r.jsxs)("div",{className:e,children:[!c&&(0,r.jsxs)("button",{onClick:()=>v(!j),disabled:u,className:"flex items-center gap-2 px-3 py-2 rounded-lg text-text-muted hover:text-text-main hover:bg-surface/60 transition-colors",title:"Language","data-i18n-skip":"true",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"language"}),(0,r.jsx)("span",{className:"text-sm font-medium",children:o(m).name}),(0,r.jsx)("span",{className:"text-lg",children:o(m).flag})]}),j&&(0,l.createPortal)((0,r.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4","data-i18n-skip":"true",children:[(0,r.jsx)("div",{className:"absolute inset-0 bg-black/30 backdrop-blur-sm",onClick:()=>v(!1)}),(0,r.jsxs)("div",{ref:b,className:"relative w-full bg-surface border border-black/10 dark:border-white/10 rounded-xl shadow-2xl animate-in fade-in zoom-in-95 duration-200 max-w-2xl flex flex-col max-h-[80vh]",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between p-3 border-b border-black/5 dark:border-white/5",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Select Language"}),(0,r.jsx)("button",{onClick:()=>v(!1),className:"p-1.5 rounded-lg text-text-muted hover:bg-black/5 dark:hover:bg-white/5 transition-colors","aria-label":"Close",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"close"})})]}),(0,r.jsx)("div",{className:"p-6 overflow-y-auto flex-1",children:(0,r.jsx)("div",{className:"grid grid-cols-[repeat(auto-fill,minmax(100px,1fr))] gap-2",children:n.YZ.map(e=>{let t=m===e,s=o(e);return(0,r.jsxs)("button",{onClick:()=>y(e),disabled:u,className:`flex flex-col items-center justify-start gap-1 px-2 py-3 rounded-lg text-xs font-medium transition-colors w-full ${t?"bg-primary/15 text-primary ring-2 ring-primary":"text-text-main hover:bg-black/5 dark:hover:bg-white/5"} ${u?"opacity-70 cursor-wait":""}`,title:s.name,children:[(0,r.jsx)("span",{className:"text-2xl",children:s.flag}),(0,r.jsx)("span",{className:"text-center leading-tight line-clamp-2 h-8 flex items-center",children:s.name}),t&&(0,r.jsx)("span",{className:"material-symbols-outlined text-sm",children:"check"})]},e)})})})]})]}),document.body)]})}},12820:(e,t,s)=>{s.d(t,{default:()=>d});var r=s(73365),a=s(1521),l=s(86447),n=s.n(l),i=s(74156);let o="https://api.openai.com/v1";function d({isOpen:e,onClose:t,onCreated:s,onSaved:l,node:n}){let c=!!n,[m,x]=(0,a.useState)({name:"",prefix:"",baseUrl:o}),[u,p]=(0,a.useState)(!1),[h,f]=(0,a.useState)(""),[b,g]=(0,a.useState)(""),[j,v]=(0,a.useState)(!1),[y,N]=(0,a.useState)(null);(0,a.useEffect)(()=>{e&&(N(null),f(""),g(""),c?x({name:n.name||"",prefix:n.prefix||"",baseUrl:n.baseUrl||o}):x({name:"",prefix:"",baseUrl:o}))},[e,c,n]);let w=async()=>{if(m.name.trim()&&m.prefix.trim()&&m.baseUrl.trim()){p(!0);try{let e=c?`/api/provider-nodes/${n.id}`:"/api/provider-nodes",t=c?"PUT":"POST",r={name:m.name,prefix:m.prefix,baseUrl:m.baseUrl};c||(r.type="custom-embedding");let a=await fetch(e,{method:t,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)}),i=await a.json();a.ok&&(c?l?.(i.node):s?.(i.node))}catch(e){console.log("Error saving custom embedding node:",e)}finally{p(!1)}}},k=async()=>{v(!0);try{let e=await fetch("/api/provider-nodes/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:m.baseUrl,apiKey:h,type:"custom-embedding",modelId:b.trim()||void 0})}),t=await e.json();N(t)}catch{N({valid:!1,error:"Network error"})}finally{v(!1)}};return(0,r.jsx)(i.aF,{isOpen:e,title:c?"Edit Custom Embedding":"Add Custom Embedding",onClose:t,children:(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,r.jsx)(i.pd,{label:"Name",value:m.name,onChange:e=>x({...m,name:e.target.value}),placeholder:"Voyage AI",hint:"Required. A friendly label for this embedding provider."}),(0,r.jsx)(i.pd,{label:"Prefix",value:m.prefix,onChange:e=>x({...m,prefix:e.target.value}),placeholder:"voyage",hint:"Required. Used as the provider prefix for model IDs (e.g. voyage/voyage-3)."}),(0,r.jsx)(i.pd,{label:"Base URL",value:m.baseUrl,onChange:e=>x({...m,baseUrl:e.target.value}),placeholder:"https://api.voyageai.com/v1",hint:"Most embedding APIs are OpenAI-compatible: Voyage, Cohere, Jina, Mistral, Together..."}),(0,r.jsx)(i.pd,{label:"API Key (for Check)",type:"password",value:h,onChange:e=>f(e.target.value)}),(0,r.jsx)(i.pd,{label:"Model ID (for Check)",value:b,onChange:e=>g(e.target.value),placeholder:"e.g. voyage-3, embed-english-v3.0, text-embedding-3-small",hint:"Required for validation. Will send a test embeddings request."}),(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[(0,r.jsx)(i.$n,{onClick:k,disabled:!h||!b.trim()||j||!m.baseUrl.trim(),variant:"secondary",children:j?"Checking...":"Check"}),(()=>{if(!y)return null;let{valid:e,error:t,dimensions:s}=y;return e?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.Ex,{variant:"success",children:"Valid"}),s&&(0,r.jsxs)("span",{className:"text-sm text-text-muted",children:[s," dims"]})]}):(0,r.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,r.jsx)(i.Ex,{variant:"error",children:"Invalid"}),t&&(0,r.jsx)("span",{className:"text-sm text-red-500",children:t})]})})()]}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.$n,{onClick:w,fullWidth:!0,disabled:!m.name.trim()||!m.prefix.trim()||!m.baseUrl.trim()||u,children:u?c?"Saving...":"Creating...":c?"Save":"Create"}),(0,r.jsx)(i.$n,{onClick:t,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})})}d.propTypes={isOpen:n().bool.isRequired,onClose:n().func.isRequired,onCreated:n().func,onSaved:n().func,node:n().shape({id:n().string,name:n().string,prefix:n().string,baseUrl:n().string})}},13048:(e,t,s)=>{s.d(t,{default:()=>d});var r=s(73365),a=s(1521),l=s(29717),n=s(14793),i=s(56550),o=s(51123);function d({children:e}){let[t,s]=(0,a.useState)(!1),c=(0,l.usePathname)(),m=(0,n.i)(e=>e.notifications),x=(0,n.i)(e=>e.removeNotification);return(0,r.jsxs)("div",{className:"flex h-screen w-full overflow-hidden bg-bg",children:[(0,r.jsx)("div",{className:"fixed top-4 right-4 z-[80] flex w-[min(92vw,380px)] flex-col gap-2",children:m.map(e=>{var t;let s="success"===(t=e.type)?{wrapper:"border-green-500/30 bg-green-500/10 text-green-600 dark:text-green-400",icon:"check_circle"}:"error"===t?{wrapper:"border-red-500/30 bg-red-500/10 text-red-600 dark:text-red-400",icon:"error"}:"warning"===t?{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,r.jsx)("div",{className:`rounded-lg border px-3 py-2 shadow-lg backdrop-blur-sm ${s.wrapper}`,children:(0,r.jsxs)("div",{className:"flex items-start gap-2",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[18px] leading-5",children:s.icon}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[e.title?(0,r.jsx)("p",{className:"text-xs font-semibold mb-0.5",children:e.title}):null,(0,r.jsx)("p",{className:"text-xs whitespace-pre-wrap break-words",children:e.message})]}),e.dismissible?(0,r.jsx)("button",{type:"button",onClick:()=>x(e.id),className:"text-current/70 hover:text-current","aria-label":"Dismiss notification",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"close"})}):null]})},e.id)})}),t&&(0,r.jsx)("div",{className:"fixed inset-0 z-40 bg-black/20 lg:hidden",onClick:()=>s(!1)}),(0,r.jsx)("div",{className:"hidden lg:flex",children:(0,r.jsx)(i.default,{})}),(0,r.jsx)("div",{className:`fixed inset-y-0 left-0 z-50 transform lg:hidden transition-transform duration-300 ease-in-out ${t?"translate-x-0":"-translate-x-full"}`,children:(0,r.jsx)(i.default,{onClose:()=>s(!1)})}),(0,r.jsxs)("main",{className:"flex flex-col flex-1 h-full min-w-0 relative transition-colors duration-300 isolate",children:[(0,r.jsx)("div",{className:"landing-grid absolute inset-0 pointer-events-none -z-10","aria-hidden":"true"}),(0,r.jsx)(o.default,{onMenuClick:()=>s(!0)},c),(0,r.jsx)("div",{className:`flex-1 overflow-y-auto custom-scrollbar ${"/dashboard/basic-chat"===c?"":"p-6 lg:p-10"} ${"/dashboard/basic-chat"===c?"flex flex-col overflow-hidden":""}`,children:(0,r.jsx)("div",{className:`${"/dashboard/basic-chat"===c?"flex-1 w-full h-full flex flex-col":"max-w-7xl mx-auto"}`,children:e})})]})]})}},13333:(e,t,s)=>{s.d(t,{default:()=>a});var r=s(73365);function a({text:e,children:t,position:s="top"}){return(0,r.jsxs)("div",{className:"relative inline-flex group",children:[t,(0,r.jsx)("div",{className:`pointer-events-none absolute ${{top:"bottom-full left-1/2 -translate-x-1/2 mb-1.5",bottom:"top-full left-1/2 -translate-x-1/2 mt-1.5",left:"right-full top-1/2 -translate-y-1/2 mr-1.5",right:"left-full top-1/2 -translate-y-1/2 ml-1.5"}[s]} z-50 w-max max-w-56 rounded px-2 py-1 text-[11px] leading-snug bg-gray-900 text-white opacity-0 group-hover:opacity-100 transition-opacity duration-150 whitespace-normal`,children:e})]})}},14406:(e,t,s)=>{s.d(t,{default:()=>l});var r=s(73365),a=s(87706);function l({checked:e=!1,onChange:t,label:s,description:n,disabled:i=!1,size:o="md",className:d}){let c={sm:{track:"w-8 h-4",thumb:"size-3",translate:"translate-x-4"},md:{track:"w-11 h-6",thumb:"size-5",translate:"translate-x-5"},lg:{track:"w-14 h-7",thumb:"size-6",translate:"translate-x-7"}};return(0,r.jsxs)("div",{className:(0,a.cn)("flex items-center gap-3",i&&"opacity-50 cursor-not-allowed",d),children:[(0,r.jsx)("button",{type:"button",role:"switch","aria-checked":e,disabled:i,onClick:()=>{!i&&t&&t(!e)},className:(0,a.cn)("relative inline-flex shrink-0 cursor-pointer rounded-full","transition-colors duration-200 ease-in-out","focus:outline-none focus:ring-2 focus:ring-brand-500/30",e?"bg-brand-500":"bg-surface-3",c[o].track,i&&"cursor-not-allowed"),children:(0,r.jsx)("span",{className:(0,a.cn)("pointer-events-none inline-block rounded-full bg-white shadow-sm","transform transition duration-200 ease-in-out",e?c[o].translate:"translate-x-0.5",c[o].thumb,"mt-0.5")})}),(s||n)&&(0,r.jsxs)("div",{className:"flex flex-col",children:[s&&(0,r.jsx)("span",{className:"text-sm font-medium text-text-main",children:s}),n&&(0,r.jsx)("span",{className:"text-xs text-text-muted",children:n})]})]})}},14793:(e,t,s)=>{s.d(t,{i:()=>l});var r=s(2074);let a=0,l=(0,r.v)((e,t)=>({notifications:[],addNotification:s=>{let r=++a,l={id:r,type:s.type||"info",message:s.message,title:s.title||null,duration:s.duration??5e3,dismissible:s.dismissible??!0,createdAt:Date.now()};return e(e=>({notifications:[...e.notifications,l]})),l.duration>0&&setTimeout(()=>t().removeNotification(r),l.duration),r},removeNotification:t=>{e(e=>({notifications:e.notifications.filter(e=>e.id!==t)}))},clearAll:()=>e({notifications:[]}),success:(e,s)=>t().addNotification({type:"success",message:e,title:s}),error:(e,s)=>t().addNotification({type:"error",message:e,title:s,duration:8e3}),warning:(e,s)=>t().addNotification({type:"warning",message:e,title:s}),info:(e,s)=>t().addNotification({type:"info",message:e,title:s})}))},24372:(e,t,s)=>{s.d(t,{default:()=>u});var r=s(73365),a=s(1521),l=s(86447),n=s.n(l),i=s(66911),o=s(38230),d=s(69633),c=s(82495);let m=[...Object.keys(c.zN),...Object.keys(c.IS),...Object.keys(c.nJ),...Object.keys(c.fg)],x=Object.keys(c.IS).filter(e=>c.IS[e].noAuth);function u({isOpen:e,onClose:t,onSelect:s,onDeselect:l,selectedModel:n,activeProviders:p=[],title:h="Select Model",modelAliases:f={},kindFilter:b=null,addedModelValues:g=[],closeOnSelect:j=!0}){let v=(0,a.useMemo)(()=>b?p.filter(e=>{let t=c.Q2[e.provider];return(t?.serviceKinds||["llm"]).includes(b)}):p,[p,b]),[y,N]=(0,a.useState)(""),[w,k]=(0,a.useState)([]),[C,S]=(0,a.useState)([]),[T,O]=(0,a.useState)([]),[$,R]=(0,a.useState)({}),P=async()=>{try{let e=await fetch("/api/combos");if(!e.ok)throw Error(`Failed to fetch combos: ${e.status}`);let t=await e.json();k(t.combos||[])}catch(e){console.error("Error fetching combos:",e),k([])}};(0,a.useEffect)(()=>{e&&P()},[e]);let E=async()=>{try{let e=await fetch("/api/provider-nodes");if(!e.ok)throw Error(`Failed to fetch provider nodes: ${e.status}`);let t=await e.json();S(t.nodes||[])}catch(e){console.error("Error fetching provider nodes:",e),S([])}};(0,a.useEffect)(()=>{e&&E()},[e]);let I=async()=>{try{let e=await fetch("/api/models/custom");if(!e.ok)throw Error(`Failed to fetch custom models: ${e.status}`);let t=await e.json();O(t.models||[])}catch(e){console.error("Error fetching custom models:",e),O([])}};(0,a.useEffect)(()=>{e&&I()},[e]);let M=async()=>{try{let e=await fetch("/api/models/disabled");if(!e.ok)throw Error(`Failed to fetch disabled models: ${e.status}`);let t=await e.json();R(t.disabled||{})}catch(e){console.error("Error fetching disabled models:",e),R({})}};(0,a.useEffect)(()=>{e&&M()},[e]);let A=(0,a.useMemo)(()=>({...c.zN,...c.IS,...c.nJ,...c.fg}),[]),L=(0,a.useMemo)(()=>{let e={},t=new Set(["webSearch","webFetch"]),s=new Set(["image","tts","stt","embedding","imageToText"]),r=new Set(["tts","image","webFetch"]);return[...new Set([...v.map(e=>e.provider),...b?x.filter(e=>(c.Q2[e]?.serviceKinds||["llm"]).includes(b)):x])].sort((e,t)=>{let s=m.indexOf(e),r=m.indexOf(t);return(-1===s?999:s)-(-1===r?999:r)}).forEach(a=>{let l=(0,c.wG)(a),n=A[a]||{name:a,color:"#666"},i=(0,c.mq)(a)||(0,c.gb)(a);if(b&&t.has(b)){e[a]={name:n.name,alias:l,color:n.color,models:[{id:a,name:n.name,value:a}]};return}if(n.passthroughModels){let t=Object.entries(f).filter(([,e])=>e.startsWith(`${l}/`)).map(([e,t])=>({id:t.replace(`${l}/`,""),name:e,value:t}));if(b&&s.has(b)&&0===(t=(0,d.KC)(a).filter(e=>e.type===b).map(e=>({id:e.id,name:e.name,value:`${l}/${e.id}`,type:e.type}))).length&&r.has(b)&&(n.serviceKinds||["llm"]).includes(b)&&(t=[{id:a,name:n.name,value:l}]),t.length>0){let s=C.find(e=>e.id===a),r=s?.name||n.name;e[a]={name:r,alias:l,color:n.color,models:t}}}else if(i){if(b&&s.has(b))return;let t=p.find(e=>e.provider===a),r=C.find(e=>e.id===a),l=t?.name||r?.name||n.name,i=t?.providerSpecificData?.prefix||r?.prefix||a,o=Object.entries(f).filter(([,e])=>e.startsWith(`${a}/`)).map(([e,t])=>({id:t.replace(`${a}/`,""),name:e,value:`${i}/${t.replace(`${a}/`,"")}`})),d=o.length>0?o:[{id:`__placeholder__${a}`,name:`${i}/model-id`,value:`${i}/model-id`,isPlaceholder:!0}];e[a]={name:l,alias:i,color:n.color,models:d,isCustom:!0,hasModels:o.length>0}}else{var o;let t=(0,d.KC)(a),i=new Set(t.map(e=>e.id)),c=t.length>0,m=Object.entries(f).filter(([e,t])=>t.startsWith(`${l}/`)&&(!c||e===t.replace(`${l}/`,""))&&!i.has(t.replace(`${l}/`,""))).map(([e,t])=>({id:t.replace(`${l}/`,""),name:e,value:t,isCustom:!0})),x=new Set(m.map(e=>e.id)),u=T.filter(e=>e.providerAlias===l&&!i.has(e.id)&&!x.has(e.id)).map(e=>({id:e.id,name:e.name||e.id,value:`${l}/${e.id}`,isCustom:!0})),p=[...t.map(e=>({id:e.id,name:e.name,value:`${l}/${e.id}`,type:e.type})),...m,...u],h=new Set,g=(o=p.filter(e=>!h.has(e.value)&&(h.add(e.value),!0)),b?s.has(b)?o.filter(e=>e.isPlaceholder||e.type===b):o:o.filter(e=>e.isPlaceholder||!e.type||"llm"===e.type));0===g.length&&b&&r.has(b)&&(n.serviceKinds||["llm"]).includes(b)&&(g=[{id:a,name:n.name,value:l}]),g.length>0&&(e[a]={name:n.name,alias:l,color:n.color,models:g})}}),Object.entries(e).forEach(([t,s])=>{let r=new Set([...$[(0,c.wG)(t)]||[],...$[t]||[]]);0!==r.size&&(s.models=s.models.filter(e=>!r.has(e.id)),0===s.models.length&&delete e[t])}),e},[v,f,A,C,T,$,b,p]),_=(0,a.useMemo)(()=>{if(b)return[];if(!y.trim())return w;let e=y.toLowerCase();return w.filter(t=>t.name.toLowerCase().includes(e))},[w,y,b]),z=(0,a.useMemo)(()=>{if(!y.trim())return L;let e=y.toLowerCase(),t={};return Object.entries(L).forEach(([s,r])=>{let a=r.models.filter(t=>t.name.toLowerCase().includes(e)||t.id.toLowerCase().includes(e)),l=r.name.toLowerCase().includes(e);(a.length>0||l)&&(t[s]={...r,models:a})}),t},[L,y]),q=e=>{let r=e?.value||e?.name||e;g.includes(r)&&l?l(e):s(e),j&&(t(),N(""))};return(0,r.jsxs)(i.default,{isOpen:e,onClose:()=>{t(),N("")},title:h,size:"md",className:"p-4!",footer:j?null:(0,r.jsx)(o.default,{onClick:()=>{t(),N("")},fullWidth:!0,children:"Done"}),children:[(0,r.jsx)("div",{className:"mb-3",children:(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsx)("span",{className:"material-symbols-outlined absolute left-2.5 top-1/2 -translate-y-1/2 text-text-muted text-[16px]",children:"search"}),(0,r.jsx)("input",{type:"text",placeholder:"Search...",value:y,onChange:e=>N(e.target.value),className:"w-full pl-8 pr-3 py-1.5 bg-surface border border-border rounded text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"})]})}),(0,r.jsxs)("div",{className:"max-h-[400px] overflow-y-auto space-y-3",children:[_.length>0&&(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5 mb-1.5 sticky top-0 bg-surface py-0.5",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-primary text-[14px]",children:"layers"}),(0,r.jsx)("span",{className:"text-xs font-medium text-primary",children:"Combos"}),(0,r.jsxs)("span",{className:"text-[10px] text-text-muted",children:["(",_.length,")"]})]}),(0,r.jsx)("div",{className:"flex flex-wrap gap-1.5",children:_.map(e=>{let t=n===e.name;return(0,r.jsxs)("button",{onClick:()=>q({id:e.name,name:e.name,value:e.name}),className:`
|
|
2
2
|
px-2 py-1 rounded-xl text-xs font-medium transition-all border hover:cursor-pointer flex items-center gap-1
|
|
3
3
|
${t?"bg-primary text-white border-primary":g.includes(e.name)?"bg-green-500/10 border-green-500/30 text-green-700 dark:text-green-400 hover:border-green-500/50":"bg-surface border-border text-text-main hover:border-primary/50 hover:bg-primary/5"}
|
|
4
4
|
`,children:[g.includes(e.name)&&(0,r.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"check_circle"}),e.name]},e.id)})})]}),Object.entries(z).map(([e,t])=>(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5 mb-1.5 sticky top-0 bg-surface py-0.5",children:[(0,r.jsx)("div",{className:"w-2 h-2 rounded-full",style:{backgroundColor:t.color}}),(0,r.jsx)("span",{className:"text-xs font-medium text-primary",children:t.name}),(0,r.jsxs)("span",{className:"text-[10px] text-text-muted",children:["(",t.models.length,")"]})]}),(0,r.jsx)("div",{className:"flex flex-wrap gap-1.5",children:t.models.map(e=>{let t=n===e.value,s=e.isPlaceholder;return(0,r.jsx)("button",{onClick:()=>q(e),title:s?"Select to pre-fill, then edit model ID in the input":void 0,className:`
|