@sifxprime/krouter 0.5.166 → 0.5.168
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-cli-build/BUILD_ID +1 -1
- package/app/.next-cli-build/app-path-routes-manifest.json +15 -15
- package/app/.next-cli-build/build-manifest.json +5 -5
- package/app/.next-cli-build/prerender-manifest.json +29 -29
- package/app/.next-cli-build/react-loadable-manifest.json +2 -2
- package/app/.next-cli-build/required-server-files.json +16 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/environment/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/environment/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/presidio/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/presidio/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error/page.js +1 -1
- package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/app/.next-cli-build/server/app/_global-error.rsc +15 -11
- package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +15 -11
- package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +20 -16
- package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +3 -1
- package/app/.next-cli-build/server/app/_not-found/page.js +1 -1
- package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/app/.next-cli-build/server/app/_not-found.rsc +26 -16
- package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +26 -16
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +32 -22
- package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +3 -1
- package/app/.next-cli-build/server/app/api/auth/login/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/logout/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/reset-password/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/status/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cache/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +6 -6
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +3 -3
- package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +3 -3
- package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +4 -4
- package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +3 -3
- package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/combos/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/extras/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/restart/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/start/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/status/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/stop/route.js +1 -1
- package/app/.next-cli-build/server/app/api/health/route.js +1 -1
- package/app/.next-cli-build/server/app/api/import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/init/route.js +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/keys/route.js +1 -1
- package/app/.next-cli-build/server/app/api/locale/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mitm/cert/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/availability/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/disabled/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/live/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/live-by-connection/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/preview/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
- package/app/.next-cli-build/server/app/api/pricing/route.js +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +2 -2
- package/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/health/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/zenith/log/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/zenith/route.js +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
- package/app/.next-cli-build/server/app/api/proxy-pools/route.js +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/health/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/install/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/restart/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/start/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/stats/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/status/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/stop/route.js +2 -2
- package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/environment/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/presidio/route.js +3 -3
- package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/require-login/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/shutdown/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tags/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +2 -2
- package/app/.next-cli-build/server/app/api/translator/load/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/save/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/disable/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/enable/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/status/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/chart/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/stream/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +2 -2
- package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/[...model]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/search/route.js +2 -2
- package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
- package/app/.next-cli-build/server/app/callback/page.js +1 -1
- package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/callback.html +1 -1
- package/app/.next-cli-build/server/app/callback.rsc +29 -18
- package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +29 -18
- package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +3 -1
- package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +37 -26
- package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +31 -18
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +38 -26
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +31 -18
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +5 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +34 -19
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +40 -27
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +34 -19
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +5 -1
- package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.rsc +35 -21
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +42 -30
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +35 -21
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +5 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +33 -19
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +39 -27
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +33 -19
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +5 -1
- package/app/.next-cli-build/server/app/dashboard/environment.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/environment.rsc +34 -21
- package/app/.next-cli-build/server/app/dashboard/environment.segments/!KGRhc2hib2FyZCk/dashboard/environment/__PAGE__.segment.rsc +41 -30
- package/app/.next-cli-build/server/app/dashboard/environment.segments/_full.segment.rsc +34 -21
- package/app/.next-cli-build/server/app/dashboard/environment.segments/_tree.segment.rsc +5 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +36 -23
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +44 -32
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +36 -23
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +6 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.rsc +33 -18
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +40 -26
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +33 -18
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +5 -1
- package/app/.next-cli-build/server/app/dashboard/presidio.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/presidio.rsc +34 -21
- package/app/.next-cli-build/server/app/dashboard/presidio.segments/!KGRhc2hib2FyZCk/dashboard/presidio/__PAGE__.segment.rsc +41 -30
- package/app/.next-cli-build/server/app/dashboard/presidio.segments/_full.segment.rsc +34 -21
- package/app/.next-cli-build/server/app/dashboard/presidio.segments/_tree.segment.rsc +5 -1
- package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.rsc +34 -21
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +41 -30
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +34 -21
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +5 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +35 -23
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +44 -32
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +35 -23
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +6 -1
- package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.rsc +34 -21
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +41 -30
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +34 -21
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +5 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +34 -21
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +41 -30
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +34 -21
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +5 -1
- package/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +31 -18
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +38 -26
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +31 -18
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +5 -1
- package/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/quota.rsc +32 -19
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +39 -28
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +32 -19
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +5 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +31 -18
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +31 -18
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +5 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +40 -27
- package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.rsc +34 -21
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +41 -30
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +34 -21
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +5 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +31 -18
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +38 -26
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +31 -18
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +5 -1
- package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.rsc +34 -21
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +41 -30
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +34 -21
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +5 -1
- package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.rsc +34 -21
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +41 -30
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +34 -21
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +5 -1
- package/app/.next-cli-build/server/app/dashboard.html +1 -1
- package/app/.next-cli-build/server/app/dashboard.rsc +32 -19
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +38 -25
- package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +32 -19
- package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +4 -1
- package/app/.next-cli-build/server/app/favicon.ico/route.js +1 -1
- package/app/.next-cli-build/server/app/index.html +1 -1
- package/app/.next-cli-build/server/app/index.rsc +24 -15
- package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +29 -20
- package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +24 -15
- package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -1
- package/app/.next-cli-build/server/app/landing/page.js +1 -1
- package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/landing.html +1 -1
- package/app/.next-cli-build/server/app/landing.rsc +30 -18
- package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +30 -18
- package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +3 -1
- package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +38 -26
- package/app/.next-cli-build/server/app/login/page.js +1 -1
- package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/login.html +1 -1
- package/app/.next-cli-build/server/app/login.rsc +29 -18
- package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +29 -18
- package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +3 -1
- package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +37 -26
- package/app/.next-cli-build/server/app/manifest.webmanifest/route.js +2 -2
- package/app/.next-cli-build/server/app/page.js +1 -1
- package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app-paths-manifest.json +15 -15
- package/app/.next-cli-build/server/chunks/1220.js +3 -3
- package/app/.next-cli-build/server/chunks/1344.js +2 -2
- package/app/.next-cli-build/server/chunks/1350.js +1 -1
- package/app/.next-cli-build/server/chunks/1450.js +1 -1
- package/app/.next-cli-build/server/chunks/1738.js +1 -1
- package/app/.next-cli-build/server/chunks/1813.js +23 -1
- package/app/.next-cli-build/server/chunks/2430.js +215 -31
- package/app/.next-cli-build/server/chunks/2722.js +6 -6
- package/app/.next-cli-build/server/chunks/2750.js +1 -1
- package/app/.next-cli-build/server/chunks/2970.js +163 -23
- package/app/.next-cli-build/server/chunks/3120.js +2 -2
- package/app/.next-cli-build/server/chunks/369.js +5 -5
- package/app/.next-cli-build/server/chunks/412.js +1 -1
- package/app/.next-cli-build/server/chunks/4161.js +1 -1
- package/app/.next-cli-build/server/chunks/4177.js +1 -1
- package/app/.next-cli-build/server/chunks/4306.js +1 -1
- package/app/.next-cli-build/server/chunks/4315.js +1 -1
- package/app/.next-cli-build/server/chunks/4380.js +1 -1
- package/app/.next-cli-build/server/chunks/4730.js +2 -2
- package/app/.next-cli-build/server/chunks/4884.js +4 -4
- package/app/.next-cli-build/server/chunks/523.js +1 -1
- package/app/.next-cli-build/server/chunks/5330.js +4 -4
- package/app/.next-cli-build/server/chunks/5433.js +1 -1
- package/app/.next-cli-build/server/chunks/5470.js +3 -3
- package/app/.next-cli-build/server/chunks/5573.js +1 -1
- package/app/.next-cli-build/server/chunks/5718.js +1 -1
- package/app/.next-cli-build/server/chunks/595.js +1 -1
- package/app/.next-cli-build/server/chunks/6182.js +2 -2
- package/app/.next-cli-build/server/chunks/7153.js +1 -1
- package/app/.next-cli-build/server/chunks/7774.js +13 -13
- package/app/.next-cli-build/server/chunks/7833.js +1 -1
- package/app/.next-cli-build/server/chunks/8238.js +1 -1
- package/app/.next-cli-build/server/chunks/8895.js +1 -1
- package/app/.next-cli-build/server/chunks/8962.js +1 -1
- package/app/.next-cli-build/server/chunks/9055.js +2 -2
- package/app/.next-cli-build/server/chunks/9958.js +1 -1
- package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/app/.next-cli-build/server/middleware-react-loadable-manifest.js +1 -1
- package/app/.next-cli-build/server/middleware.js +186 -24
- package/app/.next-cli-build/server/pages/404.html +1 -1
- package/app/.next-cli-build/server/pages/500.html +1 -1
- package/app/.next-cli-build/server/preview-props.json +5 -0
- package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
- package/app/.next-cli-build/static/chunks/1321-91a272a5139df5f2.js +1 -0
- package/app/.next-cli-build/static/chunks/3794-39f2d5bb0d40336b.js +52 -0
- package/app/.next-cli-build/static/chunks/4bd1b696-8cd12253b448cc13.js +1 -0
- package/app/.next-cli-build/static/chunks/5353-0085e26d68aca1f0.js +1 -0
- package/app/.next-cli-build/static/chunks/{5497-1af4fbf829c885c4.js → 5497-ff8c2e5da835ea40.js} +1 -1
- package/app/.next-cli-build/static/chunks/5772-9e7c7f235304c527.js +3 -0
- package/app/.next-cli-build/static/chunks/6069-31c2febe26d36d92.js +73 -0
- package/app/.next-cli-build/static/chunks/{6357.aa5754cdb37976a7.js → 6357.5f2532e76bf2cc51.js} +1 -1
- package/app/.next-cli-build/static/chunks/7504-5249aa88b6205df1.js +64 -0
- package/app/.next-cli-build/static/chunks/8202.69dace5daa86686d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/basic-chat/page-8a99890727166f8a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/page-ce0c6b650a822e25.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-589743e8ea1d9673.js +11 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/translator/page-eacf2780757238ff.js +1 -0
- package/app/.next-cli-build/static/chunks/main-00cd8c01f6f6e461.js +5 -0
- package/app/.next-cli-build/static/chunks/{webpack-53609978799ebbca.js → webpack-cc312041cf710f25.js} +1 -1
- package/app/cli/package.json +1 -1
- package/app/node_modules/@next/env/package.json +1 -1
- package/app/node_modules/nanoid/package.json +3 -3
- package/app/node_modules/next/dist/build/analysis/get-page-static-info.js +58 -76
- package/app/node_modules/next/dist/build/babel/loader/get-config.js +7 -16
- package/app/node_modules/next/dist/build/babel/plugins/next-font-unsupported.js +1 -5
- package/app/node_modules/next/dist/build/babel/plugins/next-page-config.js +5 -25
- package/app/node_modules/next/dist/build/babel/plugins/next-page-disallow-re-export-all-exports.js +1 -5
- package/app/node_modules/next/dist/build/babel/plugins/next-ssg-transform.js +4 -20
- package/app/node_modules/next/dist/build/browser-variant-modules.js +1 -0
- package/app/node_modules/next/dist/build/create-compiler-aliases.js +19 -11
- package/app/node_modules/next/dist/build/define-env.js +12 -18
- package/app/node_modules/next/dist/build/entries.js +132 -8
- package/app/node_modules/next/dist/build/get-babel-loader-config.js +10 -10
- package/app/node_modules/next/dist/build/get-convention-file-base-name.js +29 -0
- package/app/node_modules/next/dist/build/get-static-info-including-layouts.js +0 -1
- package/app/node_modules/next/dist/build/handle-externals.js +1 -5
- package/app/node_modules/next/dist/build/load-jsconfig.js +1 -5
- package/app/node_modules/next/dist/build/lockfile.js +1 -5
- package/app/node_modules/next/dist/build/next-config-ts/transpile-config.js +1 -5
- package/app/node_modules/next/dist/build/nft.js +119 -0
- package/app/node_modules/next/dist/build/normalize-catchall-routes.js +18 -66
- package/app/node_modules/next/dist/build/print-build-errors.js +57 -7
- package/app/node_modules/next/dist/build/route-discovery.js +32 -4
- package/app/node_modules/next/dist/build/segment-config/app/app-segment-config.js +19 -5
- package/app/node_modules/next/dist/build/segment-config/app/app-segments.js +120 -29
- package/app/node_modules/next/dist/build/segment-config/app/collect-root-param-keys.js +1 -5
- package/app/node_modules/next/dist/build/static-paths/app/extract-pathname-route-param-segments-from-loader-tree.js +8 -2
- package/app/node_modules/next/dist/build/static-paths/app.js +230 -133
- package/app/node_modules/next/dist/build/static-paths/pages.js +8 -40
- package/app/node_modules/next/dist/build/static-paths/param-matching.js +200 -0
- package/app/node_modules/next/dist/build/swc/index.js +92 -162
- package/app/node_modules/next/dist/build/utils.js +180 -90
- package/app/node_modules/next/dist/build/webpack/cache-invalidation.js +1 -5
- package/app/node_modules/next/dist/build/webpack/config/blocks/css/plugins.js +7 -35
- package/app/node_modules/next/dist/build/webpack/loaders/css-loader/src/CssSyntaxError.js +0 -5
- package/app/node_modules/next/dist/build/webpack/loaders/css-loader/src/camelcase.js +1 -5
- package/app/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js +5 -25
- package/app/node_modules/next/dist/build/webpack/loaders/css-loader/src/plugins/postcss-import-parser.js +4 -20
- package/app/node_modules/next/dist/build/webpack/loaders/lightningcss-loader/src/index.js +3 -16
- package/app/node_modules/next/dist/build/webpack/loaders/lightningcss-loader/src/interface.js +0 -1
- package/app/node_modules/next/dist/build/webpack/loaders/lightningcss-loader/src/loader.js +2 -10
- package/app/node_modules/next/dist/build/webpack/loaders/next-flight-css-loader.js +1 -5
- package/app/node_modules/next/dist/build/webpack/loaders/next-flight-loader/index.js +3 -15
- package/app/node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js +3 -15
- package/app/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/Error.js +0 -5
- package/app/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/Warning.js +0 -5
- package/app/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js +2 -10
- package/app/node_modules/next/dist/build/webpack/loaders/resolve-url-loader/index.js +2 -6
- package/app/node_modules/next/dist/build/webpack/loaders/resolve-url-loader/lib/file-protocol.js +2 -10
- package/app/node_modules/next/dist/build/webpack/loaders/resolve-url-loader/lib/join-function.js +1 -5
- package/app/node_modules/next/dist/build/webpack/loaders/resolve-url-loader/lib/postcss.js +1 -5
- package/app/node_modules/next/dist/build/webpack/plugins/build-manifest-plugin.js +1 -5
- package/app/node_modules/next/dist/build/webpack/plugins/deferred-entries-plugin.js +9 -0
- package/app/node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.js +2 -6
- package/app/node_modules/next/dist/build/webpack/plugins/middleware-plugin.js +1 -5
- package/app/node_modules/next/dist/build/webpack/plugins/next-trace-entrypoints-plugin.js +2 -10
- package/app/node_modules/next/dist/build/webpack/plugins/next-types-plugin/index.js +3 -1
- package/app/node_modules/next/dist/build/webpack/plugins/slow-module-detection-plugin.js +3 -15
- package/app/node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.js +1 -5
- package/app/node_modules/next/dist/build/webpack-config.js +16 -33
- package/app/node_modules/next/dist/cli/next-test.js +4 -0
- package/app/node_modules/next/dist/client/app-call-server.js +16 -18
- package/app/node_modules/next/dist/client/components/app-router-instance.js +43 -187
- package/app/node_modules/next/dist/client/components/{segment-cache/navigation.js → app-router-state.js} +88 -334
- package/app/node_modules/next/dist/client/components/app-router-utils.js +1 -5
- package/app/node_modules/next/dist/client/components/app-router.js +83 -74
- package/app/node_modules/next/dist/client/components/dev-root-http-access-fallback-boundary.js +1 -5
- package/app/node_modules/next/dist/client/components/forbidden.js +2 -10
- package/app/node_modules/next/dist/client/components/handle-isr-error.js +19 -4
- package/app/node_modules/next/dist/client/components/instant-samples.js +4 -11
- package/app/node_modules/next/dist/client/components/links.js +6 -7
- package/app/node_modules/next/dist/client/components/navigation-dynamic-rendering.js +3 -3
- package/app/node_modules/next/dist/client/components/navigation-untracked.js +1 -2
- package/app/node_modules/next/dist/client/components/navigation.js +2 -6
- package/app/node_modules/next/dist/client/components/navigation.react-server.js +1 -5
- package/app/node_modules/next/dist/client/components/navigator.js +73 -0
- package/app/node_modules/next/dist/client/components/not-found.js +1 -5
- package/app/node_modules/next/dist/client/components/prefetch.js +83 -0
- package/app/node_modules/next/dist/client/components/readonly-url-search-params.js +0 -5
- package/app/node_modules/next/dist/client/components/redirect.js +3 -15
- package/app/node_modules/next/dist/client/components/{router-reducer/ppr-navigations.js → render-tree.js} +365 -400
- package/app/node_modules/next/dist/client/components/router-reducer/compute-changed-path.js +13 -5
- package/app/node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js +67 -54
- package/app/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js +1 -7
- package/app/node_modules/next/dist/client/components/router-reducer/create-segment-key.js +42 -0
- package/app/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js +71 -50
- package/app/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js +4 -4
- package/app/node_modules/next/dist/client/components/router-reducer/reducers/hmr-refresh-reducer.js +2 -2
- package/app/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js +5 -5
- package/app/node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js +11 -8
- package/app/node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js +12 -9
- package/app/node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js +30 -29
- package/app/node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js +5 -5
- package/app/node_modules/next/dist/client/components/router-reducer/router-reducer.js +2 -10
- package/app/node_modules/next/dist/client/components/segment-cache/bfcache.js +11 -21
- package/app/node_modules/next/dist/client/components/segment-cache/cache.js +1168 -1181
- package/app/node_modules/next/dist/client/components/segment-cache/decode-server-response.js +419 -0
- package/app/node_modules/next/dist/client/components/segment-cache/navigation-testing-lock.js +1 -1
- package/app/node_modules/next/dist/client/components/segment-cache/optimistic-routes.js +77 -82
- package/app/node_modules/next/dist/client/components/segment-cache/scheduler.js +464 -425
- package/app/node_modules/next/dist/client/components/segment-cache/types.js +12 -3
- package/app/node_modules/next/dist/client/components/segment-cache/vary-path.js +140 -126
- package/app/node_modules/next/dist/client/components/sequential-router-queue.js +163 -0
- package/app/node_modules/next/dist/client/components/unauthorized.js +2 -10
- package/app/node_modules/next/dist/client/components/unstable-rethrow.js +1 -2
- package/app/node_modules/next/dist/client/components/use-action-queue.js +2 -10
- package/app/node_modules/next/dist/client/dev/debug-channel.js +6 -323
- package/app/node_modules/next/dist/client/dev/hot-reloader/app/hot-reloader-app.js +49 -31
- package/app/node_modules/next/dist/client/dev/hot-reloader/app/web-socket.js +14 -21
- package/app/node_modules/next/dist/client/dev/hot-reloader/pages/hot-reloader-pages.js +15 -6
- package/app/node_modules/next/dist/client/dev/hot-reloader/runtime-error-state.js +72 -0
- package/app/node_modules/next/dist/client/flight-data-helpers.js +41 -94
- package/app/node_modules/next/dist/client/route-loader.js +6 -30
- package/app/node_modules/next/dist/client/route-params.js +34 -12
- package/app/node_modules/next/dist/client/router.js +2 -10
- package/app/node_modules/next/dist/client/sequential-call-server.js +45 -0
- package/app/node_modules/next/dist/compiled/@mswjs/interceptors/ClientRequest/index.js +1 -1
- package/app/node_modules/next/dist/compiled/next-devtools/index.js +279 -229
- package/app/node_modules/next/dist/compiled/next-server/app-page-experimental.runtime.prod.js +203 -59
- package/app/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +203 -59
- package/app/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +203 -59
- package/app/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js +203 -59
- package/app/node_modules/next/dist/compiled/next-server/app-route.runtime.prod.js +5 -3
- package/app/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +13 -13
- package/app/node_modules/next/dist/compiled/next-server/pages.runtime.prod.js +13 -13
- package/app/node_modules/next/dist/compiled/react-is/package.json +1 -1
- package/app/node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js +1 -1
- package/app/node_modules/next/dist/compiled/unistore/unistore.js +1 -1
- package/app/node_modules/next/dist/experimental/testmode/fetch.js +2 -10
- package/app/node_modules/next/dist/export/helpers/create-incremental-cache.js +21 -16
- package/app/node_modules/next/dist/export/utils.js +21 -8
- package/app/node_modules/next/dist/lib/batcher.js +2 -2
- package/app/node_modules/next/dist/lib/dist-dir.js +88 -0
- package/app/node_modules/next/dist/lib/download-swc.js +2 -10
- package/app/node_modules/next/dist/lib/fallback.js +3 -15
- package/app/node_modules/next/dist/lib/find-pages-dir.js +2 -10
- package/app/node_modules/next/dist/lib/helpers/get-cache-directory.js +1 -5
- package/app/node_modules/next/dist/lib/helpers/get-registry.js +1 -5
- package/app/node_modules/next/dist/lib/is-error.js +3 -15
- package/app/node_modules/next/dist/lib/is-serializable-props.js +6 -35
- package/app/node_modules/next/dist/lib/patch-incorrect-lockfile.js +4 -8
- package/app/node_modules/next/dist/lib/picocolors.js +10 -0
- package/app/node_modules/next/dist/lib/recursive-delete.js +50 -11
- package/app/node_modules/next/dist/lib/resolve-from.js +2 -10
- package/app/node_modules/next/dist/lib/static-env.js +1 -5
- package/app/node_modules/next/dist/lib/typescript/getTypeScriptConfiguration.js +3 -15
- package/app/node_modules/next/dist/lib/typescript/missingDependencyError.js +1 -5
- package/app/node_modules/next/dist/lib/typescript/runTypeCheck.js +1 -9
- package/app/node_modules/next/dist/lib/typescript/runTypeCheckCli.js +0 -1
- package/app/node_modules/next/dist/lib/typescript/runTypeScriptCli.js +4 -16
- package/app/node_modules/next/dist/lib/verify-partytown-setup.js +1 -5
- package/app/node_modules/next/dist/lib/warn-missing-react-dependencies.js +33 -0
- package/app/node_modules/next/dist/next-devtools/server/attach-nodejs-debugger-middleware.js +1 -5
- package/app/node_modules/next/dist/next-devtools/server/shared.js +3 -2
- package/app/node_modules/next/dist/next-devtools/shared/console-error.js +1 -5
- package/app/node_modules/next/dist/next-devtools/userspace/app/errors/replay-ssr-only-errors.js +1 -5
- package/app/node_modules/next/dist/next-devtools/userspace/app/errors/runtime-error-metadata.js +39 -0
- package/app/node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js +1 -5
- package/app/node_modules/next/dist/next-devtools/userspace/app/errors/use-error-handler.js +48 -19
- package/app/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js +1 -5
- package/app/node_modules/next/dist/server/accept-header.js +3 -15
- package/app/node_modules/next/dist/server/after/after-context.js +5 -25
- package/app/node_modules/next/dist/server/after/awaiter.js +1 -5
- package/app/node_modules/next/dist/server/after/run-with-after.js +2 -2
- package/app/node_modules/next/dist/server/api-utils/index.js +1 -10
- package/app/node_modules/next/dist/server/api-utils/node/parse-body.js +3 -15
- package/app/node_modules/next/dist/server/app-render/action-async-storage-instance.js +1 -1
- package/app/node_modules/next/dist/server/app-render/action-handler.js +104 -141
- package/app/node_modules/next/dist/server/app-render/after-task-async-storage-instance.js +1 -1
- package/app/node_modules/next/dist/server/app-render/app-render-prerender-utils.js +6 -30
- package/app/node_modules/next/dist/server/app-render/app-render-render-utils.js +1 -5
- package/app/node_modules/next/dist/server/app-render/app-render-scheduling.js +3 -15
- package/app/node_modules/next/dist/server/app-render/app-render.js +1346 -1211
- package/app/node_modules/next/dist/server/app-render/async-local-storage.js +11 -6
- package/app/node_modules/next/dist/server/app-render/blocking-route-messages.js +119 -70
- package/app/node_modules/next/dist/server/app-render/cache-signal.js +61 -35
- package/app/node_modules/next/dist/server/app-render/console-async-storage-instance.js +1 -1
- package/app/node_modules/next/dist/server/app-render/create-component-tree.js +136 -160
- package/app/node_modules/next/dist/server/app-render/create-error-handler.js +12 -6
- package/app/node_modules/next/dist/server/app-render/create-transport-tree-from-loader-tree.js +190 -0
- package/app/node_modules/next/dist/server/app-render/debug-channel-server.web.js +1 -5
- package/app/node_modules/next/dist/server/app-render/dev-validation-scheduler.js +4 -5
- package/app/node_modules/next/dist/server/app-render/dev-validation-worker-snapshot.js +3 -1
- package/app/node_modules/next/dist/server/app-render/dynamic-access-async-storage-instance.js +1 -1
- package/app/node_modules/next/dist/server/app-render/dynamic-access-async-storage.external.js +26 -3
- package/app/node_modules/next/dist/server/app-render/dynamic-rendering-client.js +124 -0
- package/app/node_modules/next/dist/server/app-render/dynamic-rendering.js +260 -329
- package/app/node_modules/next/dist/server/app-render/encryption-utils.js +1 -5
- package/app/node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js +2 -2
- package/app/node_modules/next/dist/server/app-render/instant-validation/instant-config.js +4 -12
- package/app/node_modules/next/dist/server/app-render/instant-validation/instant-samples.js +13 -62
- package/app/node_modules/next/dist/server/app-render/instant-validation/stream-utils.js +2 -10
- package/app/node_modules/next/dist/server/app-render/manifests-singleton.js +110 -38
- package/app/node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js +1 -1
- package/app/node_modules/next/dist/server/app-render/parse-and-validate-flight-router-state.js +3 -15
- package/app/node_modules/next/dist/server/app-render/postponed-state.js +87 -51
- package/app/node_modules/next/dist/server/app-render/prospective-render-utils.js +2 -6
- package/app/node_modules/next/dist/server/app-render/render-in-browser.js +27 -0
- package/app/node_modules/next/dist/server/app-render/required-scripts.js +1 -5
- package/app/node_modules/next/dist/server/app-render/segment-config/ensure-static.js +206 -0
- package/app/node_modules/next/dist/server/app-render/staged-rendering.js +46 -54
- package/app/node_modules/next/dist/server/app-render/stream-ops.node.js +18 -12
- package/app/node_modules/next/dist/server/app-render/stream-ops.web.js +4 -20
- package/app/node_modules/next/dist/server/app-render/sync-io-messages.js +2 -10
- package/app/node_modules/next/dist/server/app-render/types.js +2 -1
- package/app/node_modules/next/dist/server/app-render/use-flight-response.js +4 -17
- package/app/node_modules/next/dist/server/app-render/vary-params.js +12 -11
- package/app/node_modules/next/dist/server/app-render/walk-tree-with-flight-router-state.js +95 -97
- package/app/node_modules/next/dist/server/app-render/work-async-storage-instance.js +1 -1
- package/app/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js +1 -1
- package/app/node_modules/next/dist/server/app-render/work-unit-async-storage.external.js +36 -26
- package/app/node_modules/next/dist/server/async-storage/draft-mode-provider.js +1 -5
- package/app/node_modules/next/dist/server/async-storage/request-store.js +6 -5
- package/app/node_modules/next/dist/server/async-storage/work-store.js +24 -26
- package/app/node_modules/next/dist/server/base-http/node.js +1 -5
- package/app/node_modules/next/dist/server/base-server.js +346 -155
- package/app/node_modules/next/dist/server/client-component-renderer-logger.js +129 -28
- package/app/node_modules/next/dist/server/config-schema.js +61 -9
- package/app/node_modules/next/dist/server/config-shared.js +26 -4
- package/app/node_modules/next/dist/server/config.js +154 -332
- package/app/node_modules/next/dist/server/dev/debug-channel.js +1 -5
- package/app/node_modules/next/dist/server/dev/dev-validation-worker-pool.js +1 -0
- package/app/node_modules/next/dist/server/dev/get-source-map-from-file.js +5 -25
- package/app/node_modules/next/dist/server/dev/hot-middleware.js +27 -1
- package/app/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +338 -200
- package/app/node_modules/next/dist/server/dev/hot-reloader-types.js +3 -0
- package/app/node_modules/next/dist/server/dev/hot-reloader-webpack.js +26 -20
- package/app/node_modules/next/dist/server/dev/messages.js +2 -10
- package/app/node_modules/next/dist/server/dev/middleware-turbopack.js +4 -20
- package/app/node_modules/next/dist/server/dev/middleware-webpack.js +2 -10
- package/app/node_modules/next/dist/server/dev/next-dev-server.js +33 -95
- package/app/node_modules/next/dist/server/dev/node-stack-frames.js +2 -19
- package/app/node_modules/next/dist/server/dev/on-demand-entry-handler.js +12 -12
- package/app/node_modules/next/dist/server/dev/runtime-error-state.js +220 -0
- package/app/node_modules/next/dist/server/dev/serialized-errors.js +1 -5
- package/app/node_modules/next/dist/server/dev/static-paths-worker.js +16 -15
- package/app/node_modules/next/dist/server/dev/turbopack-utils.js +20 -36
- package/app/node_modules/next/dist/server/dev/use-cache-probe-pool.js +1 -0
- package/app/node_modules/next/dist/server/dynamic-rendering-utils.js +298 -55
- package/app/node_modules/next/dist/server/image-optimizer/detect-content-type.js +229 -0
- package/app/node_modules/next/dist/server/image-optimizer/extract-etag.js +53 -0
- package/app/node_modules/next/dist/server/image-optimizer/get-image-size.js +25 -0
- package/app/node_modules/next/dist/server/image-optimizer/get-max-age.js +41 -0
- package/app/node_modules/next/dist/server/image-optimizer/get-previously-cached-image-or-null.js +22 -0
- package/app/node_modules/next/dist/server/image-optimizer/image-error.js +23 -0
- package/app/node_modules/next/dist/server/image-optimizer/image-type.js +86 -0
- package/app/node_modules/next/dist/server/image-optimizer/transform.js +227 -0
- package/app/node_modules/next/dist/server/image-optimizer.js +78 -674
- package/app/node_modules/next/dist/server/lib/app-info-log.js +19 -9
- package/app/node_modules/next/dist/server/lib/cache-handlers/default.js +9 -13
- package/app/node_modules/next/dist/server/lib/chrome-devtools-workspace.js +1 -5
- package/app/node_modules/next/dist/server/lib/dedupe-fetch.js +1 -5
- package/app/node_modules/next/dist/server/lib/dev-bundler-service.js +6 -6
- package/app/node_modules/next/dist/server/lib/generate-agent-files.js +158 -35
- package/app/node_modules/next/dist/server/lib/i18n-provider.js +1 -5
- package/app/node_modules/next/dist/server/lib/incremental-cache/file-system-cache.js +14 -20
- package/app/node_modules/next/dist/server/lib/incremental-cache/index.js +19 -29
- package/app/node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js +1 -5
- package/app/node_modules/next/dist/server/lib/lru-cache.js +1 -5
- package/app/node_modules/next/dist/server/lib/mock-request.js +24 -120
- package/app/node_modules/next/dist/server/lib/module-loader/node-module-loader.js +1 -5
- package/app/node_modules/next/dist/server/lib/patch-fetch.js +44 -38
- package/app/node_modules/next/dist/server/lib/postponed-request-body.js +1 -5
- package/app/node_modules/next/dist/server/lib/render-server.js +2 -10
- package/app/node_modules/next/dist/server/lib/router-server.js +106 -36
- package/app/node_modules/next/dist/server/lib/router-utils/build-data-route.js +26 -3
- package/app/node_modules/next/dist/server/lib/router-utils/cache-life-type-utils.js +14 -45
- package/app/node_modules/next/dist/server/lib/router-utils/decode-path-params.js +1 -5
- package/app/node_modules/next/dist/server/lib/router-utils/filesystem.js +212 -31
- package/app/node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js +61 -1
- package/app/node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js +1 -5
- package/app/node_modules/next/dist/server/lib/router-utils/normalize-catchall-routes.js +320 -0
- package/app/node_modules/next/dist/server/lib/router-utils/proxy-request.js +2 -2
- package/app/node_modules/next/dist/server/lib/router-utils/resolve-routes.js +17 -11
- package/app/node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.js +258 -76
- package/app/node_modules/next/dist/server/lib/router-utils/strict-route-matching-config.js +28 -0
- package/app/node_modules/next/dist/server/lib/router-utils/typegen.js +56 -10
- package/app/node_modules/next/dist/server/lib/start-server.js +48 -38
- package/app/node_modules/next/dist/server/lib/trace/constants.js +40 -0
- package/app/node_modules/next/dist/server/lib/trace/request-insights-identity.js +1 -3
- package/app/node_modules/next/dist/server/lib/trace/tracer.js +10 -10
- package/app/node_modules/next/dist/server/lib/utils.js +66 -15
- package/app/node_modules/next/dist/server/load-components.js +7 -2
- package/app/node_modules/next/dist/server/load-manifest.external.js +16 -17
- package/app/node_modules/next/dist/server/mcp/tools/utils/browser-communication.js +2 -10
- package/app/node_modules/next/dist/server/mcp/tools/utils/format-errors.js +5 -5
- package/app/node_modules/next/dist/server/next-server.js +130 -124
- package/app/node_modules/next/dist/server/next.js +25 -37
- package/app/node_modules/next/dist/server/node-environment-extensions/console-dim.external.js +1 -2
- package/app/node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js +115 -62
- package/app/node_modules/next/dist/server/node-environment-extensions/global-behaviors.js +1 -5
- package/app/node_modules/next/dist/server/node-environment-extensions/io-utils.js +11 -10
- package/app/node_modules/next/dist/server/node-environment-extensions/process-error-handlers.js +0 -9
- package/app/node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js +1 -12
- package/app/node_modules/next/dist/server/normalizers/built/app/app-page-normalizer.js +1 -1
- package/app/node_modules/next/dist/server/normalizers/request/base-path.js +1 -5
- package/app/node_modules/next/dist/server/normalizers/request/next-data.js +1 -5
- package/app/node_modules/next/dist/server/normalizers/request/prefix.js +1 -5
- package/app/node_modules/next/dist/server/patch-error-inspect.js +19 -11
- package/app/node_modules/next/dist/server/pipe-readable.js +42 -30
- package/app/node_modules/next/dist/server/render-result.js +5 -17
- package/app/node_modules/next/dist/server/render.js +37 -183
- package/app/node_modules/next/dist/server/request/fallback-params.js +23 -9
- package/app/node_modules/next/dist/server/response-cache/index.js +54 -32
- package/app/node_modules/next/dist/server/response-cache/utils.js +1 -5
- package/app/node_modules/next/dist/server/resume-data-cache/cache-store.js +18 -0
- package/app/node_modules/next/dist/server/resume-data-cache/resume-data-cache.js +51 -49
- package/app/node_modules/next/dist/server/revalidation-utils.js +15 -13
- package/app/node_modules/next/dist/server/route-modules/app-page/dev-render-context.js +23 -0
- package/app/node_modules/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.js +5 -4
- package/app/node_modules/next/dist/server/route-modules/app-page/module.js +13 -1
- package/app/node_modules/next/dist/server/route-modules/app-page/module.render.js +26 -11
- package/app/node_modules/next/dist/server/route-modules/app-page/parse-request-headers.js +58 -0
- package/app/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.js +1 -5
- package/app/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.js +1 -5
- package/app/node_modules/next/dist/server/route-modules/pages/module.render.js +1 -5
- package/app/node_modules/next/dist/server/route-modules/pages/pages-handler.js +20 -16
- package/app/node_modules/next/dist/server/route-modules/route-module.js +57 -61
- package/app/node_modules/next/dist/server/serve-static.js +1 -5
- package/app/node_modules/next/dist/server/setup-http-agent-env.js +1 -5
- package/app/node_modules/next/dist/server/stream-utils/encoded-tags.js +1 -1
- package/app/node_modules/next/dist/server/stream-utils/node-web-streams-helper.js +7 -11
- package/app/node_modules/next/dist/server/typescript/constant.js +2 -0
- package/app/node_modules/next/dist/server/typescript/rules/config.js +29 -2
- package/app/node_modules/next/dist/server/use-cache/cache-life-profile.js +6 -30
- package/app/node_modules/next/dist/server/use-cache/constants.js +1 -5
- package/app/node_modules/next/dist/server/use-cache/handlers.js +27 -36
- package/app/node_modules/next/dist/server/use-cache/tiered-cache-handler.js +6 -4
- package/app/node_modules/next/dist/server/web/adapter.js +14 -35
- package/app/node_modules/next/dist/server/web/error.js +0 -15
- package/app/node_modules/next/dist/server/web/globals.js +3 -15
- package/app/node_modules/next/dist/server/web/next-url.js +1 -5
- package/app/node_modules/next/dist/server/web/sandbox/context.js +10 -34
- package/app/node_modules/next/dist/server/web/sandbox/sandbox.js +1 -5
- package/app/node_modules/next/dist/server/web/spec-extension/adapters/headers.js +0 -5
- package/app/node_modules/next/dist/server/web/spec-extension/adapters/next-request.js +1 -5
- package/app/node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.js +0 -5
- package/app/node_modules/next/dist/server/web/spec-extension/fetch-event.js +2 -10
- package/app/node_modules/next/dist/server/web/spec-extension/response.js +2 -10
- package/app/node_modules/next/dist/server/web/utils.js +1 -5
- package/app/node_modules/next/dist/server/web/web-on-close.js +2 -10
- package/app/node_modules/next/dist/shared/lib/app-router-types.js +38 -28
- package/app/node_modules/next/dist/shared/lib/constants.js +5 -0
- package/app/node_modules/next/dist/shared/lib/deployment-id.js +1 -1
- package/app/node_modules/next/dist/shared/lib/errors/code-frame.js +3 -2
- package/app/node_modules/next/dist/shared/lib/errors/empty-generate-static-params-error.js +1 -5
- package/app/node_modules/next/dist/shared/lib/errors/ensure-static-gsp-errors.js +30 -0
- package/app/node_modules/next/dist/shared/lib/errors/hard-deprecated-config-error.js +0 -5
- package/app/node_modules/next/dist/shared/lib/errors/incompatible-parallel-route-slots-error.js +36 -0
- package/app/node_modules/next/dist/shared/lib/errors/missing-canonical-interception-routes-error.js +20 -0
- package/app/node_modules/next/dist/shared/lib/errors/unmatched-app-pages-error.js +20 -0
- package/app/node_modules/next/dist/shared/lib/get-rspack.js +1 -5
- package/app/node_modules/next/dist/shared/lib/html-context.shared-runtime.js +1 -5
- package/app/node_modules/next/dist/shared/lib/image-config.js +52 -1
- package/app/node_modules/next/dist/shared/lib/instant-messages.js +2 -10
- package/app/node_modules/next/dist/shared/lib/invariant-error.js +0 -5
- package/app/node_modules/next/dist/shared/lib/lazy-dynamic/react-browser-bailout.js +45 -0
- package/app/node_modules/next/dist/shared/lib/magic-identifier.js +5 -25
- package/app/node_modules/next/dist/shared/lib/match-remote-pattern.js +1 -5
- package/app/node_modules/next/dist/shared/lib/router/router.js +95 -77
- package/app/node_modules/next/dist/shared/lib/router/routes/app.js +3 -15
- package/app/node_modules/next/dist/shared/lib/router/utils/app-paths.js +6 -1
- package/app/node_modules/next/dist/shared/lib/router/utils/get-dynamic-param.js +4 -12
- package/app/node_modules/next/dist/shared/lib/router/utils/interception-routes.js +63 -20
- package/app/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js +1 -5
- package/app/node_modules/next/dist/shared/lib/router/utils/prepare-destination.js +1 -5
- package/app/node_modules/next/dist/shared/lib/router/utils/querystring.js +31 -0
- package/app/node_modules/next/dist/shared/lib/router/utils/resolve-param-value.js +1 -5
- package/app/node_modules/next/dist/shared/lib/router/utils/route-matcher.js +1 -5
- package/app/node_modules/next/dist/shared/lib/router/utils/sorted-routes.js +11 -55
- package/app/node_modules/next/dist/shared/lib/rsc-transport.js +108 -0
- package/app/node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.js +0 -13
- package/app/node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.js +48 -27
- package/app/node_modules/next/dist/shared/lib/segment.js +1 -13
- package/app/node_modules/next/dist/shared/lib/turbopack/compilation-events.js +7 -7
- package/app/node_modules/next/dist/shared/lib/turbopack/internal-error.js +2 -7
- package/app/node_modules/next/dist/shared/lib/turbopack/manifest-loader.js +2 -6
- package/app/node_modules/next/dist/shared/lib/turbopack/utils.js +3 -11
- package/app/node_modules/next/dist/shared/lib/utils.js +2 -11
- package/app/node_modules/next/dist/shared/lib/zod.js +2 -6
- package/app/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
- package/app/node_modules/next/dist/telemetry/detached-flush.js +8 -15
- package/app/node_modules/next/dist/telemetry/events/build.js +1 -2
- package/app/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
- package/app/node_modules/next/dist/telemetry/events/version.js +2 -2
- package/app/node_modules/next/dist/telemetry/post-telemetry-payload.js +1 -5
- package/app/node_modules/next/dist/telemetry/storage.js +31 -19
- package/app/node_modules/next/dist/trace/report/index.js +5 -2
- package/app/node_modules/next/dist/trace/report/to-json-build.js +4 -2
- package/app/node_modules/next/dist/trace/report/to-json.js +141 -97
- package/app/node_modules/next/dist/trace/trace.js +14 -9
- package/app/node_modules/next/package.json +12 -11
- package/app/package.json +4 -4
- package/app/server.js +1 -1
- package/app/src/mitm/server.js +43 -39
- package/package.json +1 -1
- package/app/.next-cli-build/static/chunks/1321-c5b3011761e0228b.js +0 -1
- package/app/.next-cli-build/static/chunks/3794-83acfce05009cf38.js +0 -52
- package/app/.next-cli-build/static/chunks/4bd1b696-8a4ab4fdf0ae305a.js +0 -1
- package/app/.next-cli-build/static/chunks/5353-d31cc8d476bc534e.js +0 -1
- package/app/.next-cli-build/static/chunks/5772-6cf78180ecf9dce0.js +0 -3
- package/app/.next-cli-build/static/chunks/6069-7e7f824c6e2d4291.js +0 -73
- package/app/.next-cli-build/static/chunks/7504-6f7ca1eab428dd5e.js +0 -64
- package/app/.next-cli-build/static/chunks/8202.1ffc6ce531e066ce.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/basic-chat/page-90b9aed7279ea50e.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/page-eaf6e24edeca4e51.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-2f53d5dd5b247cf1.js +0 -11
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/translator/page-bbc10fd10f7af626.js +0 -1
- package/app/.next-cli-build/static/chunks/main-1eaba0b776683ce7.js +0 -5
- package/app/node_modules/next/dist/build/webpack/loaders/lightningcss-loader/src/minify.js +0 -94
- package/app/node_modules/next/dist/client/components/match-segments.js +0 -32
- package/app/node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js +0 -63
- package/app/node_modules/next/dist/client/components/segment-cache/prefetch.js +0 -32
- package/app/node_modules/next/dist/compiled/webpack-sources3/index.js +0 -1
- package/app/node_modules/next/dist/compiled/webpack-sources3/package.json +0 -1
- package/app/node_modules/next/dist/lib/detached-promise.js +0 -32
- package/app/node_modules/next/dist/lib/error-telemetry-utils.js +0 -42
- package/app/node_modules/next/dist/next-devtools/server/get-next-error-feedback-middleware.js +0 -42
- package/app/node_modules/next/dist/server/app-render/create-flight-router-state-from-loader-tree.js +0 -154
- package/app/node_modules/next/dist/server/lib/experimental/ppr.js +0 -47
- package/app/node_modules/next/dist/server/lib/params-utils.js +0 -70
- package/app/node_modules/next/dist/server/lib/router-utils/is-postpone.js +0 -16
- package/app/node_modules/next/dist/server/route-matcher-managers/default-route-matcher-manager.js +0 -239
- package/app/node_modules/next/dist/server/route-matcher-managers/dev-route-matcher-manager.js +0 -120
- package/app/node_modules/next/dist/server/route-matcher-providers/app-page-route-matcher-provider.js +0 -55
- package/app/node_modules/next/dist/server/route-matcher-providers/app-route-route-matcher-provider.js +0 -43
- package/app/node_modules/next/dist/server/route-matcher-providers/dev/dev-app-page-route-matcher-provider.js +0 -91
- package/app/node_modules/next/dist/server/route-matcher-providers/dev/dev-app-route-route-matcher-provider.js +0 -112
- package/app/node_modules/next/dist/server/route-matcher-providers/dev/dev-pages-api-route-matcher-provider.js +0 -77
- package/app/node_modules/next/dist/server/route-matcher-providers/dev/dev-pages-route-matcher-provider.js +0 -77
- package/app/node_modules/next/dist/server/route-matcher-providers/dev/file-cache-route-matcher-provider.js +0 -28
- package/app/node_modules/next/dist/server/route-matcher-providers/dev/helpers/file-reader/batched-file-reader.js +0 -106
- package/app/node_modules/next/dist/server/route-matcher-providers/dev/helpers/file-reader/default-file-reader.js +0 -42
- package/app/node_modules/next/dist/server/route-matcher-providers/helpers/cached-route-matcher-provider.js +0 -30
- package/app/node_modules/next/dist/server/route-matcher-providers/helpers/manifest-loaders/node-manifest-loader.js +0 -34
- package/app/node_modules/next/dist/server/route-matcher-providers/helpers/manifest-loaders/server-manifest-loader.js +0 -20
- package/app/node_modules/next/dist/server/route-matcher-providers/manifest-route-matcher-provider.js +0 -21
- package/app/node_modules/next/dist/server/route-matcher-providers/pages-api-route-matcher-provider.js +0 -55
- package/app/node_modules/next/dist/server/route-matcher-providers/pages-route-matcher-provider.js +0 -64
- package/app/node_modules/next/dist/server/route-matchers/app-page-route-matcher.js +0 -18
- package/app/node_modules/next/dist/server/route-matchers/app-route-route-matcher.js +0 -15
- package/app/node_modules/next/dist/server/route-matchers/locale-route-matcher.js +0 -68
- package/app/node_modules/next/dist/server/route-matchers/pages-api-route-matcher.js +0 -30
- package/app/node_modules/next/dist/server/route-matchers/pages-route-matcher.js +0 -30
- package/app/node_modules/next/dist/server/route-matchers/route-matcher.js +0 -54
- package/app/node_modules/next/dist/telemetry/events/error-feedback.js +0 -31
- /package/app/.next-cli-build/static/{i0cMBMqFdYWpbajovDyfY → em-yyr0O7qRIA9N8Clc4I}/_buildManifest.js +0 -0
- /package/app/.next-cli-build/static/{i0cMBMqFdYWpbajovDyfY → em-yyr0O7qRIA9N8Clc4I}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8202],{28202:(e,t,r)=>{function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){var n,o;n=t,o=r[t],(n=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t);if("object"!=typeof n)return n;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(n))in e?Object.defineProperty(e,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[n]=o}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?c(Object(r),!0).forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):c(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e){return function t(){for(var r=this,n=arguments.length,o=Array(n),i=0;i<n;i++)o[i]=arguments[i];return o.length>=e.length?e.apply(this,o):function(){for(var e=arguments.length,n=Array(e),i=0;i<e;i++)n[i]=arguments[i];return t.apply(r,[].concat(o,n))}}}function l(e){return({}).toString.call(e).includes("Object")}function s(e){return"function"==typeof e}r.r(t),r.d(t,{DiffEditor:()=>K,Editor:()=>Z,default:()=>ee,loader:()=>L,useMonaco:()=>Q});var f,d,g=a(function(e,t){throw Error(e[t]||e.default)})({initialIsRequired:"initial state is required",initialType:"initial state should be an object",initialContent:"initial state shouldn't be an empty object",handlerType:"handler should be an object or a function",handlersType:"all handlers should be a functions",selectorType:"selector should be a function",changeType:"provided value of changes should be an object",changeField:'it seams you want to change a field in the state which is not specified in the "initial" state',default:"an unknown error accured in `state-local` package"}),p=function(e,t){return l(t)||g("changeType"),Object.keys(t).some(function(t){return!Object.prototype.hasOwnProperty.call(e,t)})&&g("changeField"),t},h=function(e){s(e)||g("selectorType")},y=function(e){s(e)||l(e)||g("handlerType"),l(e)&&Object.values(e).some(function(e){return!s(e)})&&g("handlersType")},m=function(e){e||g("initialIsRequired"),l(e)||g("initialType"),Object.keys(e).length||g("initialContent")};function v(e,t){return s(t)?t(e.current):t}function b(e,t){return e.current=u(u({},e.current),t),t}function O(e,t,r){return s(t)?t(e.current):Object.keys(r).forEach(function(r){var n;return null==(n=t[r])?void 0:n.call(t,e.current[r])}),r}var w={configIsRequired:"the configuration object is required",configType:"the configuration object should be an object",default:"an unknown error accured in `@monaco-editor/loader` package",deprecation:"Deprecation warning!\n You are using deprecated way of configuration.\n\n Instead of using\n monaco.config({ urls: { monacoBase: '...' } })\n use\n monaco.config({ paths: { vs: '...' } })\n\n For more please check the link https://github.com/suren-atoyan/monaco-loader#config\n "},j=(f=function(e,t){throw Error(e[t]||e.default)},function e(){for(var t=this,r=arguments.length,n=Array(r),o=0;o<r;o++)n[o]=arguments[o];return n.length>=f.length?f.apply(this,n):function(){for(var r=arguments.length,o=Array(r),i=0;i<r;i++)o[i]=arguments[i];return e.apply(t,[].concat(n,o))}})(w),M=function(e){return(e||j("configIsRequired"),({}).toString.call(e).includes("Object")||j("configType"),e.urls)?(console.warn(w.deprecation),{paths:{vs:e.urls.monacoBase}}):e},E=function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return function(e){return t.reduceRight(function(e,t){return t(e)},e)}},P={type:"cancelation",msg:"operation is manually canceled"};function R(e){var t=!1,r=new Promise(function(r,n){e.then(function(e){return t?n(P):r(e)}),e.catch(n)});return r.cancel=function(){return t=!0},r}var S=["monaco"],k=function(e){if(Array.isArray(e))return e}(d=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};m(e),y(t);var r={current:e},n=a(O)(r,t),o=a(b)(r),i=a(p)(e),c=a(v)(r);return[function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(e){return e};return h(e),e(r.current)},function(e){(function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return function(e){return t.reduceRight(function(e,t){return t(e)},e)}})(n,o,i,c)(e)}]}({config:{paths:{vs:"https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs"}},isInitialized:!1,resolve:null,reject:null,monaco:null}))||function(e){var t=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,n,o,i,c=[],u=!0,a=!1;try{o=(t=t.call(e)).next,!1;for(;!(u=(r=o.call(t)).done)&&(c.push(r.value),2!==c.length);u=!0);}catch(e){a=!0,n=e}finally{try{if(!u&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(a)throw n}}return c}}(d)||function(e){if(e){if("string"==typeof e)return n(e,2);var t=({}).toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?n(e,2):void 0}}(d)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),T=k[0],C=k[1];function I(e){return document.body.appendChild(e)}function x(e){var t,r,n=T(function(e){return{config:e.config,reject:e.reject}}),o=(t="".concat(n.config.paths.vs,"/loader.js"),r=document.createElement("script"),t&&(r.src=t),r);return o.onload=function(){return e()},o.onerror=n.reject,o}function A(){var e=T(function(e){return{config:e.config,resolve:e.resolve,reject:e.reject}}),t=window.require;t.config(e.config),t(["vs/editor/editor.main"],function(t){var r=t.m||t;D(r),e.resolve(r)},function(t){e.reject(t)})}function D(e){T().monaco||C({monaco:e})}var V=new Promise(function(e,t){return C({resolve:e,reject:t})}),L={config:function(e){var t=M(e),r=t.monaco,n=function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if(({}).hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&({}).propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,S);C(function(e){return{config:function e(t,r){return Object.keys(r).forEach(function(n){r[n]instanceof Object&&t[n]&&Object.assign(r[n],e(t[n],r[n]))}),i(i({},t),r)}(e.config,n),monaco:r}})},init:function(){var e=T(function(e){return{monaco:e.monaco,isInitialized:e.isInitialized,resolve:e.resolve}});if(!e.isInitialized){if(C({isInitialized:!0}),e.monaco)return e.resolve(e.monaco),R(V);if(window.monaco&&window.monaco.editor)return D(window.monaco),e.resolve(window.monaco),R(V);E(I,x)(A)}return R(V)},__getMonacoInstance:function(){return T(function(e){return e.monaco})}},_=r(12115),N={display:"flex",position:"relative",textAlign:"initial"},q={width:"100%"},z={display:"none"},F={display:"flex",height:"100%",width:"100%",justifyContent:"center",alignItems:"center"},U=function({children:e}){return _.createElement("div",{style:F},e)},B=(0,_.memo)(function({width:e,height:t,isEditorReady:r,loading:n,_ref:o,className:i,wrapperProps:c}){return _.createElement("section",{style:{...N,width:e,height:t},...c},!r&&_.createElement(U,null,n),_.createElement("div",{ref:o,style:{...q,...!r&&z},className:i}))}),Y=function(e){(0,_.useEffect)(e,[])},$=function(e,t,r=!0){let n=(0,_.useRef)(!0);(0,_.useEffect)(n.current||!r?()=>{n.current=!1}:e,t)};function G(){}function H(e,t,r,n){var o,i,c,u,a,l;return o=e,i=n,o.editor.getModel(J(o,i))||(c=e,u=t,a=r,l=n,c.editor.createModel(u,a,l?J(c,l):void 0))}function J(e,t){return e.Uri.parse(t)}var K=(0,_.memo)(function({original:e,modified:t,language:r,originalLanguage:n,modifiedLanguage:o,originalModelPath:i,modifiedModelPath:c,keepCurrentOriginalModel:u=!1,keepCurrentModifiedModel:a=!1,theme:l="light",loading:s="Loading...",options:f={},height:d="100%",width:g="100%",className:p,wrapperProps:h={},beforeMount:y=G,onMount:m=G}){let[v,b]=(0,_.useState)(!1),[O,w]=(0,_.useState)(!0),j=(0,_.useRef)(null),M=(0,_.useRef)(null),E=(0,_.useRef)(null),P=(0,_.useRef)(m),R=(0,_.useRef)(y),S=(0,_.useRef)(!1);Y(()=>{let e=L.init();return e.then(e=>(M.current=e)&&w(!1)).catch(e=>e?.type!=="cancelation"&&console.error("Monaco initialization: error:",e)),()=>{let t;return j.current?(t=j.current?.getModel(),void(u||t?.original?.dispose(),a||t?.modified?.dispose(),j.current?.dispose())):e.cancel()}}),$(()=>{if(j.current&&M.current){let t=j.current.getOriginalEditor(),o=H(M.current,e||"",n||r||"text",i||"");o!==t.getModel()&&t.setModel(o)}},[i],v),$(()=>{if(j.current&&M.current){let e=j.current.getModifiedEditor(),n=H(M.current,t||"",o||r||"text",c||"");n!==e.getModel()&&e.setModel(n)}},[c],v),$(()=>{let e=j.current.getModifiedEditor();e.getOption(M.current.editor.EditorOption.readOnly)?e.setValue(t||""):t!==e.getValue()&&(e.executeEdits("",[{range:e.getModel().getFullModelRange(),text:t||"",forceMoveMarkers:!0}]),e.pushUndoStop())},[t],v),$(()=>{j.current?.getModel()?.original.setValue(e||"")},[e],v),$(()=>{let{original:e,modified:t}=j.current.getModel();M.current.editor.setModelLanguage(e,n||r||"text"),M.current.editor.setModelLanguage(t,o||r||"text")},[r,n,o],v),$(()=>{M.current?.editor.setTheme(l)},[l],v),$(()=>{j.current?.updateOptions(f)},[f],v);let k=(0,_.useCallback)(()=>{if(!M.current)return;R.current(M.current);let u=H(M.current,e||"",n||r||"text",i||""),a=H(M.current,t||"",o||r||"text",c||"");j.current?.setModel({original:u,modified:a})},[r,t,o,e,n,i,c]),T=(0,_.useCallback)(()=>{!S.current&&E.current&&(j.current=M.current.editor.createDiffEditor(E.current,{automaticLayout:!0,...f}),k(),M.current?.editor.setTheme(l),b(!0),S.current=!0)},[f,l,k]);return(0,_.useEffect)(()=>{v&&P.current(j.current,M.current)},[v]),(0,_.useEffect)(()=>{O||v||T()},[O,v,T]),_.createElement(B,{width:g,height:d,isEditorReady:v,loading:s,_ref:E,className:p,wrapperProps:h})}),Q=function(){let[e,t]=(0,_.useState)(L.__getMonacoInstance());return Y(()=>{let r;return e||(r=L.init()).then(e=>{t(e)}),()=>r?.cancel()}),e},W=function(e){let t=(0,_.useRef)();return(0,_.useEffect)(()=>{t.current=e},[e]),t.current},X=new Map,Z=(0,_.memo)(function({defaultValue:e,defaultLanguage:t,defaultPath:r,value:n,language:o,path:i,theme:c="light",line:u,loading:a="Loading...",options:l={},overrideServices:s={},saveViewState:f=!0,keepCurrentModel:d=!1,width:g="100%",height:p="100%",className:h,wrapperProps:y={},beforeMount:m=G,onMount:v=G,onChange:b,onValidate:O=G}){let[w,j]=(0,_.useState)(!1),[M,E]=(0,_.useState)(!0),P=(0,_.useRef)(null),R=(0,_.useRef)(null),S=(0,_.useRef)(null),k=(0,_.useRef)(v),T=(0,_.useRef)(m),C=(0,_.useRef)(),I=(0,_.useRef)(n),x=W(i),A=(0,_.useRef)(!1),D=(0,_.useRef)(!1);Y(()=>{let e=L.init();return e.then(e=>(P.current=e)&&E(!1)).catch(e=>e?.type!=="cancelation"&&console.error("Monaco initialization: error:",e)),()=>R.current?void(C.current?.dispose(),d?f&&X.set(i,R.current.saveViewState()):R.current.getModel()?.dispose(),R.current.dispose()):e.cancel()}),$(()=>{let c=H(P.current,e||n||"",t||o||"",i||r||"");c!==R.current?.getModel()&&(f&&X.set(x,R.current?.saveViewState()),R.current?.setModel(c),f&&R.current?.restoreViewState(X.get(i)))},[i],w),$(()=>{R.current?.updateOptions(l)},[l],w),$(()=>{R.current&&void 0!==n&&(R.current.getOption(P.current.editor.EditorOption.readOnly)?R.current.setValue(n):n!==R.current.getValue()&&(D.current=!0,R.current.executeEdits("",[{range:R.current.getModel().getFullModelRange(),text:n,forceMoveMarkers:!0}]),R.current.pushUndoStop(),D.current=!1))},[n],w),$(()=>{let e=R.current?.getModel();e&&o&&P.current?.editor.setModelLanguage(e,o)},[o],w),$(()=>{void 0!==u&&R.current?.revealLine(u)},[u],w),$(()=>{P.current?.editor.setTheme(c)},[c],w);let V=(0,_.useCallback)(()=>{if(!(!S.current||!P.current)&&!A.current){T.current(P.current);let a=i||r,d=H(P.current,n||e||"",t||o||"",a||"");R.current=P.current?.editor.create(S.current,{model:d,automaticLayout:!0,...l},s),f&&R.current.restoreViewState(X.get(a)),P.current.editor.setTheme(c),void 0!==u&&R.current.revealLine(u),j(!0),A.current=!0}},[e,t,r,n,o,i,l,s,f,c,u]);return(0,_.useEffect)(()=>{w&&k.current(R.current,P.current)},[w]),(0,_.useEffect)(()=>{M||w||V()},[M,w,V]),I.current=n,(0,_.useEffect)(()=>{w&&b&&(C.current?.dispose(),C.current=R.current?.onDidChangeModelContent(e=>{D.current||b(R.current.getValue(),e)}))},[w,b]),(0,_.useEffect)(()=>{if(w){let e=P.current.editor.onDidChangeMarkers(e=>{let t=R.current.getModel()?.uri;if(t&&e.find(e=>e.path===t.path)){let e=P.current.editor.getModelMarkers({resource:t});O?.(e)}});return()=>{e?.dispose()}}return()=>{}},[w,O]),_.createElement(B,{width:g,height:p,isEditorReady:w,loading:a,_ref:S,className:h,wrapperProps:y})}),ee=Z}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4465],{65052:(e,t,r)=>{Promise.resolve().then(r.bind(r,88512))},88512:(e,t,r)=>{"use strict";r.d(t,{default:()=>g});var s=r(95155),a=r(12115),i=r(35497),l=r(28777),n=r(52679);let o="basic-chat.sessions",d="basic-chat.activeSessionId",c="basic-chat.activeProviderId",m="basic-chat.draft";function u(){return globalThis.crypto?.randomUUID?globalThis.crypto.randomUUID():`chat_${Date.now()}_${Math.random().toString(16).slice(2)}`}function p(e){if("string"==typeof e)return e;if(null==e)return"";if(Array.isArray(e))return e.map(p).filter(Boolean).join(" ");if("object"==typeof e){if("string"==typeof e.message)return e.message;if("string"==typeof e.error)return e.error;try{return JSON.stringify(e)}catch{return String(e)}}return String(e)}function h(e=""){let t=p(e).replace(/\s+/g," ").trim();return t?t.length>52?`${t.slice(0,52).trimEnd()}…`:t:"New chat"}async function x(e){return await new Promise((t,r)=>{let s=new FileReader;s.onload=()=>t(String(s.result||"")),s.onerror=()=>r(s.error||Error("Failed to read file")),s.readAsDataURL(e)})}function f(e){return e?.name||function(e=""){return String(e).replace(/[-_]/g," ").replace(/\b\w/g,e=>e.toUpperCase()).trim()||"Unknown"}(e?.provider||e?.id||"provider")}function g(){let[e,t]=(0,a.useState)([]),[r,g]=(0,a.useState)(!0),[w,v]=(0,a.useState)(""),[b,N]=(0,a.useState)(()=>{try{let e=function(e,t){try{return JSON.parse(e)}catch{return t}}(globalThis.localStorage.getItem(o),[]);return Array.isArray(e)?e.map(e=>({...e,messages:Array.isArray(e.messages)?e.messages:[]})):[]}catch{return[]}}),[y,j]=(0,a.useState)(()=>globalThis.localStorage.getItem(d)||""),[S,I]=(0,a.useState)(()=>globalThis.localStorage.getItem(c)||""),[A,k]=(0,a.useState)(""),[D,O]=(0,a.useState)(()=>globalThis.localStorage.getItem(m)||""),[$,C]=(0,a.useState)([]),[_,M]=(0,a.useState)(!1),[E,T]=(0,a.useState)(""),[U,R]=(0,a.useState)(""),[z,q]=(0,a.useState)(!1),[P,J]=(0,a.useState)(!1),[B,F]=(0,a.useState)(!1),K=(0,a.useRef)(null),L=(0,a.useRef)(null),W=(0,a.useRef)(!1),H=(0,a.useRef)(null),Y=(0,a.useRef)(null);(0,a.useEffect)(()=>{q(!0)},[]),(0,a.useEffect)(()=>{let e=!1;return async function(){g(!0),v("");try{let r=await fetch("/api/providers",{cache:"no-store"}),s=await r.json().catch(()=>({})),a=Array.isArray(s.connections)?s.connections.filter(e=>e?.isActive!==!1):[];if(0===a.length){e||(t([]),v("No providers connected yet."));return}let i=new Map;for(let e of a){let t=e.provider||e.id,r=f(e),s=(0,n.mq)(t)?"openai-compatible":(0,n.gb)(t)?"anthropic-compatible":t;i.has(t)||i.set(t,{providerId:t,providerName:r,providerType:s,connections:[],models:[]});let a=i.get(t);a.providerName=a.providerName||r,a.providerType=a.providerType||s,a.connections.push(e);let o=(0,l.KC)(t).map(t=>t?.id?{id:`${e.provider}/${t.id}`,requestModel:`${e.provider}/${t.id}`,name:t.name||t.id,providerId:e.provider,providerName:f(e),source:"static"}:null).filter(Boolean);a.models.push(...o)}for(let e of(await Promise.all(a.map(async e=>{try{let t=await fetch(`/api/providers/${e.id}/models`,{cache:"no-store"}),r=await t.json().catch(()=>({}));if(!t.ok)return{connection:e,models:[]};let s=(Array.isArray(r?.models)?r.models:Array.isArray(r?.data)?r.data:Array.isArray(r?.results)?r.results:Array.isArray(r)?r:[]).map(t=>(function(e,t){let r="string"==typeof e?e:e?.id||e?.name||e?.model||"";if(!r)return null;let s="string"==typeof e?e:e?.name||e?.displayName||r,a=r;return((0,n.mq)(t.provider)||(0,n.gb)(t.provider))&&!r.includes("/")&&(a=`${t.provider}/${r}`),{id:a,requestModel:a,name:s,providerId:t.provider,providerName:f(t),source:"live"}})(t,e)).filter(Boolean);return{connection:e,models:s}}catch{return{connection:e,models:[]}}})))){let t=e.connection.provider||e.connection.id,r=i.get(t);r&&r.models.push(...e.models)}let o=Array.from(i.values()).map(e=>({...e,models:(function(e){let t=new Map;for(let r of e)r?.id&&(t.has(r.id)||t.set(r.id,r));return Array.from(t.values())})(e.models).sort((e,t)=>e.name.localeCompare(t.name))})).filter(e=>e.models.length>0).sort((e,t)=>e.providerName.localeCompare(t.providerName));e||(t(o),0===o.length&&v("Providers connected but no models available."))}catch(r){e||(v(p(r?.message)||"Failed to load providers/models."),t([]))}finally{e||g(!1)}}(),()=>{e=!0}},[]),(0,a.useEffect)(()=>{let e=e=>{H.current&&!H.current.contains(e.target)&&J(!1),Y.current&&!Y.current.contains(e.target)&&F(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]);let G=(0,a.useMemo)(()=>{let t=new Map;for(let r of e)for(let e of r.models)t.set(e.id,{...e,providerId:r.providerId,providerName:r.providerName});return t},[e]),Q=(0,a.useMemo)(()=>e.find(e=>e.providerId===S)||e[0]||null,[e,S]),V=(0,a.useMemo)(()=>{if(A&&G.has(A))return G.get(A);if(y){let e=b.find(e=>e.id===y);if(e?.modelId&&G.has(e.modelId))return G.get(e.modelId)}return Q?.models?.[0]||null},[A,G,Q,b,y]),X=(0,a.useMemo)(()=>b.find(e=>e.id===y)||null,[b,y]),Z=X?.messages||[],ee=(0,a.useMemo)(()=>[...b].sort((e,t)=>new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime()),[b]),et=!_&&!!V&&(D.trim().length>0||$.length>0);(0,a.useEffect)(()=>{if(z)try{globalThis.localStorage.setItem(o,JSON.stringify(b)),globalThis.localStorage.setItem(d,y),globalThis.localStorage.setItem(c,S),globalThis.localStorage.setItem(m,D)}catch{}},[z,b,y,S,D]),(0,a.useEffect)(()=>{if(!z||r||W.current||0===e.length)return;let t=e.find(e=>e.providerId===S)||e[0],s=A&&G.has(A)?G.get(A):t.models[0];if(b.length>0){let e=b.find(e=>e.id===y)||b[0],r=e?.modelId&&G.has(e.modelId)?G.get(e.modelId):s;W.current=!0,j(e.id),I(r?.providerId||t.providerId),k(r?.id||s.id);return}let a={id:u(),title:"New chat",providerId:t.providerId,providerName:t.providerName,modelId:s.id,modelName:s.name,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),messages:[]};W.current=!0,N([a]),j(a.id),I(t.providerId),k(s.id)},[z,r,e,G,b,y,S,A]);let er=(e,t)=>{N(r=>r.map(r=>r.id===e?t({...r,messages:Array.isArray(r.messages)?r.messages.map(e=>({...e})):[]}):r))},es=e=>e?{id:u(),title:"New chat",providerId:e.providerId,providerName:e.providerName,modelId:e.id,modelName:e.name,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),messages:[]}:null,ea=async e=>{let t=Array.from(e.target.files||[]);if(0===t.length)return;let r=t.filter(e=>e.type.startsWith("image/"));if(0===r.length){e.target.value="";return}let s=await Promise.all(r.map(async e=>({id:u(),name:e.name,type:e.type,size:e.size,dataUrl:await x(e)})));C(e=>[...e,...s]),e.target.value=""},ei=async()=>{let e=V||Q?.models?.[0]||null;if(!e)return;let t=D.trim();if(!t&&0===$.length)return;let r=y,s=b.find(e=>e.id===r);if(!s){if(!(s=es(e)))return;r=s.id,N(e=>[s,...e]),j(r)}let a={id:u(),role:"user",content:t,attachments:$.map(e=>({id:e.id,name:e.name,type:e.type,dataUrl:e.dataUrl})),createdAt:new Date().toISOString()},i=u(),l={id:i,role:"assistant",content:"",createdAt:new Date().toISOString(),status:"streaming"},n=[...s.messages||[],a,l];N(s=>s.map(s=>s.id===r?{...s,providerId:e.providerId,providerName:e.providerName,modelId:e.id,modelName:e.name,messages:n,updatedAt:new Date().toISOString(),title:"New chat"===s.title?h(t):s.title}:s)),O(""),C([]),M(!0),T(i),R(""),L.current?.abort(),L.current=new AbortController;let o=n.filter(e=>"assistant"!==e.role||e.id!==i).map(e=>({role:e.role,content:"user"===e.role?function(e){let t=p(e.content).trim(),r=Array.isArray(e.attachments)?e.attachments:[];if(0===r.length)return t;let s=[];for(let e of(t&&s.push({type:"text",text:t}),r))e?.dataUrl&&s.push({type:"image_url",image_url:{url:e.dataUrl}});return s.length>0?s:t}(e):e.content}));try{var d;let s,a=await fetch("/api/dashboard/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream"},body:JSON.stringify({model:e.requestModel||e.id,messages:o,stream:!0}),signal:L.current.signal});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(p(e.error||e.message||`Request failed (${a.status})`))}let l=a.body?.getReader();if(!l){let e=await a.json().catch(()=>({})),t=p(e?.choices?.[0]?.message?.content||e?.output_text||e?.error||e?.message||"");er(r,e=>({...e,messages:e.messages.map(e=>e.id===i?{...e,content:t,status:"done"}:e),updatedAt:new Date().toISOString()}));return}let n=new TextDecoder,c="",m="";for(;;){let{value:e,done:t}=await l.read();if(t)break;let s=(c+=n.decode(e,{stream:!0})).split(/\r?\n/);for(let e of(c=s.pop()||"",s)){let t=e.trim();if(!t.startsWith("data:"))continue;let s=t.slice(5).trim();if(s&&"[DONE]"!==s)try{let e=JSON.parse(s),t=function(e){if(!e||"object"!=typeof e)return"";let t=e.choices?.[0];return[(t?.delta||{}).content,t?.message?.content,e.output_text,e.text].map(p).filter(Boolean)[0]||""}(e);if(!t)continue;m+=t,R(m),er(r,e=>({...e,messages:e.messages.map(e=>e.id===i?{...e,content:m,status:"streaming"}:e),updatedAt:new Date().toISOString()}))}catch{}}}er(r,e=>({...e,messages:e.messages.map(e=>e.id===i?{...e,content:m||e.content,status:"done"}:e),updatedAt:new Date().toISOString()})),d=r,s=h(t),er(d,e=>({...e,title:"New chat"===e.title?s:e.title,updatedAt:new Date().toISOString()}))}catch(e){if("AbortError"!==e.name){let t=p(e?.message||e);er(r,e=>({...e,messages:e.messages.map(e=>e.id===i?{...e,content:e.content||`Error: ${t}`,status:"error"}:e),updatedAt:new Date().toISOString()})),v(t||"Failed to send message.")}}finally{M(!1),T(""),R(""),L.current=null}},el=V?`${V.name}`:"Select model",en=V?V.requestModel:"Choose from connected providers";return(0,s.jsx)("div",{className:"relative flex-1 flex flex-col h-full min-h-0 min-w-0 bg-[#212121] text-white overflow-hidden",children:(0,s.jsxs)("div",{className:"relative mx-auto flex flex-1 h-full min-h-0 w-full max-w-4xl flex-col",children:[(0,s.jsxs)("div",{className:"flex shrink-0 items-center justify-between gap-3 px-4 py-3 lg:px-6",children:[(0,s.jsxs)("div",{ref:H,className:"relative",children:[(0,s.jsx)("button",{type:"button",onClick:()=>J(e=>!e),className:"flex items-center gap-3 rounded-2xl border border-white/10 bg-white/5 px-4 py-3 text-left transition hover:bg-white/8",children:(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:"text-sm font-semibold text-white",children:el}),(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px] text-white/70",children:"expand_more"})]}),(0,s.jsx)("p",{className:"truncate text-xs text-white/55",children:en})]})}),P?(0,s.jsxs)("div",{className:"absolute left-0 top-[calc(100%+10px)] z-30 w-[min(520px,calc(100vw-2rem))] overflow-hidden rounded-[20px] border border-white/10 bg-[#262626] shadow-2xl shadow-black/50",children:[(0,s.jsxs)("div",{className:"border-b border-white/10 px-4 py-3",children:[(0,s.jsx)("p",{className:"text-xs uppercase tracking-[0.22em] text-white/45",children:"Models"}),(0,s.jsx)("p",{className:"text-sm text-white/75",children:"Only from connected providers"})]}),(0,s.jsx)("div",{className:"max-h-[60vh] overflow-y-auto p-2 custom-scrollbar",children:e.map(e=>(0,s.jsxs)("div",{className:"mb-2 rounded-[16px] border border-white/10 bg-black/20 p-2",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between px-2 py-2",children:[(0,s.jsx)("p",{className:"text-sm font-semibold text-white",children:e.providerName}),(0,s.jsx)(i.Ex,{size:"sm",variant:"default",children:e.models.length})]}),(0,s.jsx)("div",{className:"grid gap-2 sm:grid-cols-2",children:e.models.map(e=>{let t=e.id===A;return(0,s.jsx)("button",{type:"button",onClick:()=>(e=>{let t=G.get(e);if(!t)return;let r=b.find(e=>e.id===y);if(r&&r.messages.length>0){let e=es(t);if(!e)return;N(t=>[e,...t]),j(e.id)}else if(r)N(e=>e.map(e=>e.id===r.id?{...e,providerId:t.providerId,providerName:t.providerName,modelId:t.id,modelName:t.name}:e)),j(r.id);else{let e=es(t);if(!e)return;N(t=>[e,...t]),j(e.id)}I(t.providerId),k(t.id),J(!1)})(e.id),className:`rounded-[14px] border px-3 py-3 text-left transition ${t?"border-blue-400/40 bg-blue-500/15":"border-white/10 bg-white/5 hover:bg-white/8"}`,children:(0,s.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsx)("p",{className:"truncate text-sm font-medium text-white",children:e.name}),(0,s.jsx)("p",{className:"truncate text-[11px] text-white/45",children:e.requestModel})]}),t?(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px] text-blue-300",children:"check_circle"}):null]})},e.id)})})]},e.providerId))})]}):null]}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("button",{type:"button",onClick:()=>F(e=>!e),className:"rounded-2xl border border-white/10 bg-white/5 px-4 py-3 text-sm text-white/80 transition hover:bg-white/8",children:"History"}),(0,s.jsx)(i.$n,{variant:"ghost",size:"sm",icon:"delete",onClick:()=>{if(!y)return;let e=b.filter(e=>e.id!==y),t=e[0]||null;N(e),t?(j(t.id),I(t.providerId),k(t.modelId)):(j(""),I(""),k(""))},disabled:!y||0===b.length,children:"Clear"})]})]}),B?(0,s.jsxs)("div",{ref:Y,className:"absolute right-4 top-[72px] z-20 w-[min(360px,calc(100vw-2rem))] rounded-[20px] border border-white/10 bg-[#262626] p-2 shadow-2xl shadow-black/50 lg:right-6",children:[(0,s.jsx)("div",{className:"px-3 py-2",children:(0,s.jsx)("p",{className:"text-xs uppercase tracking-[0.22em] text-white/45",children:"Recent chats"})}),(0,s.jsx)("div",{className:"max-h-[48vh] space-y-2 overflow-y-auto p-1 custom-scrollbar",children:0===ee.length?(0,s.jsx)("div",{className:"rounded-[16px] border border-dashed border-white/10 bg-white/5 p-4 text-sm text-white/55",children:"No conversations yet."}):ee.map(e=>{let t=e.id===y,r=[...e.messages||[]].reverse().find(e=>"user"===e.role)||e.messages?.[0];return(0,s.jsx)("button",{type:"button",onClick:()=>{var t;let r;return t=e.id,void((r=b.find(e=>e.id===t))&&(j(t),I(r.providerId||S),k(r.modelId||A),F(!1)))},className:`w-full rounded-[16px] border px-3 py-3 text-left transition ${t?"border-blue-400/40 bg-blue-500/15":"border-white/10 bg-white/5 hover:bg-white/8"}`,children:(0,s.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsx)("p",{className:"truncate text-sm font-medium text-white",children:e.title}),(0,s.jsx)("p",{className:"mt-1 truncate text-xs text-white/50",children:p(r?.content)||"Empty chat"})]}),(0,s.jsx)("span",{className:"text-[10px] text-white/40 shrink-0",children:function(e){if(!e)return"Now";let t=new Date(e).getTime();if(Number.isNaN(t))return"Now";let r=Math.max(1,Math.round((Date.now()-t)/6e4));if(r<60)return`${r}m`;let s=Math.round(r/60);return s<24?`${s}h`:`${Math.round(s/24)}d`}(e.updatedAt)})]})},e.id)})})]}):null,w?(0,s.jsx)("div",{className:"mt-4 rounded-[18px] border border-rose-500/20 bg-rose-500/10 px-4 py-3 text-rose-100",children:(0,s.jsxs)("div",{className:"flex items-start gap-3",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"error"}),(0,s.jsx)("p",{className:"text-sm leading-6",children:w})]})}):null,(0,s.jsxs)("div",{className:"flex flex-1 flex-col min-h-0",children:[(0,s.jsxs)("div",{className:"flex-1 overflow-y-auto py-4 custom-scrollbar",children:[0===Z.length?(0,s.jsx)("div",{className:"flex min-h-[50vh] items-center justify-center px-4 text-center",children:(0,s.jsxs)("div",{className:"max-w-xl space-y-4",children:[(0,s.jsx)("div",{className:"mx-auto flex size-16 items-center justify-center rounded-[20px] border border-white/10 bg-white/5 text-white/80",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[30px]",children:"chat"})}),(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)("h2",{className:"text-2xl font-semibold text-white",children:"Start a conversation"}),(0,s.jsx)("p",{className:"text-sm leading-6 text-white/60",children:"Simple chat interface to interact with any AI model from connected providers. Select a model and start chatting!"})]})]})}):null,(0,s.jsx)("div",{className:"mx-auto flex w-full max-w-3xl flex-col gap-4 px-4",children:Z.map(e=>{let t="user"===e.role,r="assistant"===e.role,a=r&&e.id===E&&"streaming"===e.status,i=p(e.content)||(r?U:"");return(0,s.jsx)("div",{className:`flex w-full ${t?"justify-end":"justify-start"} mb-6`,children:(0,s.jsxs)("div",{className:`max-w-[min(88%,42rem)] ${t?"rounded-3xl bg-[#2f2f2f] px-5 py-3.5 text-white":"text-white/90"}`,children:[(0,s.jsx)("div",{className:"mb-1 flex items-center justify-between gap-3",children:(0,s.jsx)("span",{className:"text-xs font-semibold",children:t?"You":V?.name||"Assistant"})}),e.attachments?.length?(0,s.jsx)("div",{className:"mb-3 grid grid-cols-2 gap-2 sm:grid-cols-3 mt-2",children:e.attachments.map(e=>(0,s.jsx)("a",{href:e.dataUrl,target:"_blank",rel:"noreferrer",className:"overflow-hidden rounded-[18px] border border-white/10 bg-black/20",children:(0,s.jsx)("img",{src:e.dataUrl,alt:e.name,className:"h-28 w-full object-cover"})},e.id))}):null,(0,s.jsxs)("div",{className:"whitespace-pre-wrap break-words text-[15px] leading-7",children:[i,r&&a&&!U?(0,s.jsx)("span",{className:"inline-block animate-pulse",children:"▋"}):null]})]})},e.id)})})]}),(0,s.jsxs)("div",{className:"shrink-0 pt-2",children:[$.length>0?(0,s.jsx)("div",{className:"mx-auto mb-3 flex w-full max-w-3xl flex-wrap gap-2 px-4",children:$.map(e=>(0,s.jsxs)("div",{className:"flex items-center gap-2 rounded-full border border-white/10 bg-white/5 px-3 py-2",children:[(0,s.jsx)("span",{className:"text-xs text-white/80 max-w-[12rem] truncate",children:e.name}),(0,s.jsx)("button",{type:"button",onClick:()=>{var t;return t=e.id,void C(e=>e.filter(e=>e.id!==t))},className:"text-white/55 hover:text-white","aria-label":"Remove attachment",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"close"})})]},e.id))}):null,(0,s.jsx)("div",{className:"mx-auto w-full max-w-3xl px-4 pb-2",children:(0,s.jsxs)("div",{className:"rounded-[26px] bg-[#2f2f2f] px-3 pt-3 pb-2 shadow-[0_0_15px_rgba(0,0,0,0.10)] ring-1 ring-white/5",children:[(0,s.jsx)("textarea",{value:D,onChange:e=>O(e.target.value),onKeyDown:e=>{"Enter"===e.key&&!e.shiftKey&&(e.preventDefault(),et&&ei())},placeholder:"Message AI",rows:1,className:"w-full resize-none bg-transparent px-2 text-[15px] leading-6 text-white outline-none placeholder:text-white/40 custom-scrollbar max-h-[25vh] overflow-y-auto"}),(0,s.jsxs)("div",{className:"mt-2 flex items-center justify-between gap-3",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("button",{type:"button",onClick:()=>K.current?.click(),disabled:!V||r,className:"p-2 text-white/50 hover:text-white transition rounded-full hover:bg-white/5",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"attach_file"})}),(0,s.jsx)("input",{ref:K,type:"file",accept:"image/*",multiple:!0,className:"hidden",onChange:ea}),(0,s.jsx)("span",{className:"text-xs font-medium text-white/30 truncate max-w-[120px]",children:V?V.name:"No model"})]}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[_?(0,s.jsx)("button",{type:"button",onClick:()=>{L.current?.abort()},className:"p-2 text-white bg-white/10 hover:bg-white/20 transition rounded-full h-8 w-8 flex items-center justify-center",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"stop"})}):null,(0,s.jsx)("button",{onClick:ei,disabled:!et,className:`h-8 w-8 rounded-full flex items-center justify-center transition ${et?"bg-white text-black hover:opacity-90":"bg-white/10 text-white/30 cursor-not-allowed"}`,children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"arrow_upward"})})]})]})]})})]}),(0,s.jsx)("p",{className:"mx-auto mt-2 max-w-3xl px-4 pb-4 text-center text-[11px] text-white/30",children:"Model list is filtered from connected providers."})]})]})})}}},e=>{e.O(0,[7504,1321,5497,8441,3794,7358],()=>e(e.s=65052)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2326],{53501:(e,s,l)=>{"use strict";l.d(s,{default:()=>m});var t=l(95155),a=l(12115),r=l(35497),i=l(3534),c=l(43666),n=l(98500),o=l.n(n),d=l(5772);function x({toolId:e,tool:s,status:l}){let a=l?l.installed?l.hasKRouter?{label:"Connected",cls:"bg-green-500/10 text-green-600 dark:text-green-400"}:{label:"Not configured",cls:"bg-yellow-500/10 text-yellow-600 dark:text-yellow-400"}:{label:"Not installed",cls:"bg-gray-500/10 text-gray-500"}:{label:"Unknown",cls:"bg-gray-500/10 text-gray-500"};return(0,t.jsx)(o(),{href:`/dashboard/cli-tools/${e}`,className:"block",children:(0,t.jsx)(r.Zp,{padding:"sm",className:"h-full overflow-hidden hover:border-primary/50 transition-colors cursor-pointer",children:(0,t.jsx)("div",{className:"flex h-full flex-col gap-2",children:(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:s.image?(0,t.jsx)(d.A,{src:s.image,alt:s.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:e=>{e.target.style.display="none"}}):s.icon?(0,t.jsx)("span",{className:"material-symbols-outlined text-[28px]",style:{color:s.color},children:s.icon}):null}),(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsx)("h3",{className:"font-medium text-sm truncate",children:s.name}),(0,t.jsx)("span",{className:`inline-block mt-1 px-1.5 py-0.5 text-[10px] font-medium rounded-full ${a.cls}`,children:a.label})]}),(0,t.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[18px] shrink-0",children:"chevron_right"})]})})})})}function m({machineId:e}){let[s,l]=(0,a.useState)(!0),[n,o]=(0,a.useState)({});if((0,a.useEffect)(()=>{let e=!0;return(async()=>{try{let s=await fetch("/api/cli-tools/all-statuses");s.ok&&e&&o(await s.json())}catch(e){console.log("Error fetching tool statuses:",e)}finally{e&&l(!1)}})(),()=>{e=!1}},[]),s)return(0,t.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3 sm:gap-4",children:[(0,t.jsx)(r.Qv,{}),(0,t.jsx)(r.Qv,{}),(0,t.jsx)(r.Qv,{}),(0,t.jsx)(r.Qv,{}),(0,t.jsx)(r.Qv,{}),(0,t.jsx)(r.Qv,{})]});let d=Object.entries(i.dM),g=Object.entries(i.wn);return(0,t.jsxs)("div",{className:"mx-auto flex w-full max-w-5xl flex-col gap-6 px-1 sm:px-0",children:[(0,t.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3 sm:gap-4",children:d.map(([e,s])=>(0,t.jsx)(x,{toolId:e,tool:s,status:n[e]},e))}),(0,t.jsxs)("div",{className:"flex flex-col gap-3 sm:gap-4",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,t.jsx)("span",{className:"material-symbols-outlined text-[18px] text-primary",children:"security"}),(0,t.jsx)("h2",{className:"text-sm font-semibold text-text-main",children:"MITM Tools"})]}),(0,t.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3 sm:gap-4",children:g.map(([e,s])=>(0,t.jsx)(c.gY,{tool:s},e))})]})]})}},86612:(e,s,l)=>{Promise.resolve().then(l.bind(l,53501))}},e=>{e.O(0,[7504,5772,1321,5497,6069,8441,3794,7358],()=>e(e.s=86612)),_N_E=e.O()}]);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2134],{65251:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>M});var a=s(95155),i=s(12115),l=s(73321),r=s(98500),n=s.n(r),o=s(5772),c=s(35497),d=s(52679),m=s(28777),p=s(72107),x=s(11059),u=s(73006);let h=new Map;async function f(e){if(!e?.url||!e?.type)return[];let t=h.get(e.url);if(t&&Date.now()<t.expiresAt)return t.data;try{let t=new URLSearchParams({url:e.url,type:e.type}),s=await fetch(`/api/providers/suggested-models?${t}`);if(!s.ok)return[];let a=(await s.json()).data??[];return h.set(e.url,{data:a,expiresAt:Date.now()+6e5}),a}catch{return[]}}var g=s(14051),b=s.n(g);let y={chat:"Chat Completions",messages:"Messages",responses:"Responses"};function v({model:e,fullModel:t,alias:s,copied:i,onCopy:l,testStatus:r,isCustom:n,isFree:o,onDeleteAlias:c,onTest:d,isTesting:m,onDisable:p,protocol:x,defaultProtocol:u,onProtocolChange:h,isSavingProtocol:f}){let g="ok"===r?"#22c55e":"error"===r?"#ef4444":void 0;return(0,a.jsx)("div",{className:`group min-w-0 max-w-full rounded-lg border px-3 py-2 ${"ok"===r?"border-green-500/40":"error"===r?"border-red-500/40":"border-border"} hover:bg-sidebar/50`,children:(0,a.jsxs)("div",{className:"flex min-w-0 items-start gap-2 sm:items-center",children:[(0,a.jsx)("span",{className:"material-symbols-outlined shrink-0 text-base",style:g?{color:g}:void 0,children:"ok"===r?"check_circle":"error"===r?"cancel":"smart_toy"}),(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-1",children:[(0,a.jsx)("code",{className:"max-w-[72vw] truncate rounded bg-sidebar px-1.5 py-0.5 font-mono text-xs text-text-muted sm:max-w-[360px]",children:t}),e.name&&(0,a.jsx)("span",{className:"truncate pl-1 text-[9px] italic text-text-muted",children:e.name}),h&&(0,a.jsxs)("label",{className:"flex items-center gap-1.5 pl-1 text-[10px] text-text-muted",children:[(0,a.jsxs)("span",{children:["Protocol",f?" (saving…)":""]}),(0,a.jsxs)("select",{value:x||"auto",onChange:e=>h(e.target.value),"aria-busy":f||void 0,"aria-label":`Protocol for ${t}`,title:"Which OpenCode endpoint this model is sent to. Auto follows kRouter's model table.",className:"rounded border border-border bg-surface px-1.5 py-0.5 text-[10px] text-text-main focus:outline-none focus:ring-1 focus:ring-primary/50 disabled:opacity-60",children:[(0,a.jsxs)("option",{value:"auto",children:["Auto (",y[u]||y.chat,")"]}),(0,a.jsx)("option",{value:"chat",children:y.chat}),(0,a.jsx)("option",{value:"messages",children:y.messages}),(0,a.jsx)("option",{value:"responses",children:y.responses})]})]})]}),d&&(0,a.jsxs)("div",{className:"relative shrink-0 group/btn",children:[(0,a.jsx)("button",{onClick:d,disabled:m,className:`rounded p-0.5 text-text-muted transition-opacity hover:bg-sidebar hover:text-primary ${m?"opacity-100":"opacity-100 sm:opacity-0 sm:group-hover:opacity-100"}`,children:(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",style:m?{animation:"spin 1s linear infinite"}:void 0,children:m?"progress_activity":"science"})}),(0,a.jsx)("span",{className:"pointer-events-none absolute mt-1 top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:m?"Testing...":"Test"})]}),(0,a.jsxs)("div",{className:"relative shrink-0 group/btn",children:[(0,a.jsx)("button",{onClick:()=>l(t,`model-${e.id}`),className:"rounded p-0.5 text-text-muted hover:bg-sidebar hover:text-primary",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",children:i===`model-${e.id}`?"check":"content_copy"})}),(0,a.jsx)("span",{className:"pointer-events-none absolute mt-1 top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:i===`model-${e.id}`?"Copied!":"Copy"})]}),n?(0,a.jsx)("button",{onClick:c,className:"ml-auto rounded p-0.5 text-text-muted opacity-100 transition-opacity hover:bg-red-500/10 hover:text-red-500 sm:opacity-0 sm:group-hover:opacity-100",title:"Remove custom model",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",children:"close"})}):p?(0,a.jsx)("button",{onClick:p,className:"ml-auto rounded p-0.5 text-text-muted opacity-100 transition-opacity hover:bg-red-500/10 hover:text-red-500 sm:opacity-0 sm:group-hover:opacity-100",title:"Disable this model",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",children:"close"})}):null]})})}function j({modelId:e,fullModel:t,copied:s,onCopy:i,onDeleteAlias:l,onTest:r,testStatus:n,isTesting:o}){let c="ok"===n?"#22c55e":"error"===n?"#ef4444":void 0;return(0,a.jsxs)("div",{className:`flex items-center gap-3 p-3 rounded-lg border ${"ok"===n?"border-green-500/40":"error"===n?"border-red-500/40":"border-border"} hover:bg-sidebar/50`,children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-base text-text-muted",style:c?{color:c}:void 0,children:"ok"===n?"check_circle":"error"===n?"cancel":"smart_toy"}),(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"text-sm font-medium truncate",children:e}),(0,a.jsxs)("div",{className:"flex items-center gap-1 mt-1",children:[(0,a.jsx)("code",{className:"text-xs text-text-muted font-mono bg-sidebar px-1.5 py-0.5 rounded",children:t}),(0,a.jsxs)("div",{className:"relative group/btn",children:[(0,a.jsx)("button",{onClick:()=>i(t,`model-${e}`),className:"p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",children:s===`model-${e}`?"check":"content_copy"})}),(0,a.jsx)("span",{className:"pointer-events-none absolute top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:s===`model-${e}`?"Copied!":"Copy"})]}),r&&(0,a.jsxs)("div",{className:"relative group/btn",children:[(0,a.jsx)("button",{onClick:r,disabled:o,className:"p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary transition-colors",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",style:o?{animation:"spin 1s linear infinite"}:void 0,children:o?"progress_activity":"science"})}),(0,a.jsx)("span",{className:"pointer-events-none absolute top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:o?"Testing...":"Test"})]})]})]}),(0,a.jsx)("button",{onClick:l,className:"p-1 hover:bg-red-50 rounded text-red-500",title:"Remove model",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",children:"delete"})})]})}function N({providerStorageAlias:e,providerDisplayAlias:t,modelAliases:s,copied:l,onCopy:r,onSetAlias:n,onDeleteAlias:o,connections:d,isAnthropic:m}){let[p,x]=(0,i.useState)(""),[u,h]=(0,i.useState)(!1),[f,g]=(0,i.useState)(!1),[b,y]=(0,i.useState)(null),[v,w]=(0,i.useState)({}),k=async t=>{if(!b){y(t);try{let s=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${e}/${t}`})}),a=await s.json();w(e=>({...e,[t]:a.ok?"ok":"error"}))}catch{w(e=>({...e,[t]:"error"}))}finally{y(null)}}},C=Object.entries(s).filter(([,t])=>t.startsWith(`${e}/`)).map(([t,s])=>({modelId:s.replace(`${e}/`,""),fullModel:s,alias:t})),S=a=>{let i,l=`${e}/${a}`;if(Object.values(s).includes(l))return null;let r=(i=a.split("/"))[i.length-1];if(!s[r])return r;let n=`${t}-${r}`;return s[n]?null:n},A=async()=>{if(!p.trim()||u)return;let t=p.trim(),s=S(t);if(!s)return void alert("All suggested aliases already exist. Please choose a different model or remove conflicting aliases.");h(!0);try{await n(t,s,e),x("")}catch(e){console.log("Error adding model:",e)}finally{h(!1)}},$=async()=>{if(f)return;let t=d.find(e=>!1!==e.isActive);if(t){g(!0);try{let s=await fetch(`/api/providers/${t.id}/models`),a=await s.json();if(!s.ok)return void alert(a.error||"Failed to import models");let i=a.models||[];if(0===i.length)return void alert("No models returned from /models.");let l=0;for(let t of i){let s=t.id||t.name||t.model;if(!s)continue;let a=S(s);a&&(await n(s,a,e),l+=1)}0===l&&alert("No new models were added.")}catch(e){console.log("Error importing models:",e)}finally{g(!1)}}},T=d.some(e=>!1!==e.isActive);return(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("p",{className:"text-sm text-text-muted",children:["Add ",m?"Anthropic":"OpenAI","-compatible models manually or import them from the /models endpoint."]}),(0,a.jsxs)("div",{className:"flex items-end gap-2 flex-wrap",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-[240px]",children:[(0,a.jsx)("label",{htmlFor:"new-compatible-model-input",className:"text-xs text-text-muted mb-1 block",children:"Model ID"}),(0,a.jsx)("input",{id:"new-compatible-model-input",type:"text",value:p,onChange:e=>x(e.target.value),onKeyDown:e=>"Enter"===e.key&&A(),placeholder:m?"claude-3-opus-20240229":"gpt-4o",className:"w-full px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary"})]}),(0,a.jsx)(c.$n,{size:"sm",icon:"add",onClick:A,disabled:!p.trim()||u,children:u?"Adding...":"Add"}),(0,a.jsx)(c.$n,{size:"sm",variant:"secondary",icon:"download",onClick:$,disabled:!T||f,children:f?"Importing...":"Import from /models"})]}),!T&&(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Add a connection to enable importing models."}),C.length>0&&(0,a.jsx)("div",{className:"flex flex-col gap-3",children:C.map(({modelId:e,fullModel:s,alias:i})=>(0,a.jsx)(j,{modelId:e,fullModel:`${t}/${e}`,copied:l,onCopy:r,onDeleteAlias:()=>o(i),onTest:d.length>0?()=>k(e):void 0,testStatus:v[e],isTesting:b===e},s))})]})}function w({until:e}){let[t,s]=(0,i.useState)("");return((0,i.useEffect)(()=>{let t=()=>{let t=new Date(e).getTime()-Date.now();if(t<=0)return void s("");let a=Math.floor(t/1e3);if(a<60)s(`${a}s`);else if(a<3600)s(`${Math.floor(a/60)}m ${a%60}s`);else{let e=Math.floor(a/3600),t=Math.floor(a%3600/60);s(`${e}h ${t}m`)}};t();let a=setInterval(t,1e3);return()=>clearInterval(a)},[e]),t)?(0,a.jsxs)("span",{className:"text-xs text-orange-500 font-mono",children:["⏱ ",t]}):null}v.propTypes={model:b().shape({id:b().string.isRequired}).isRequired,fullModel:b().string.isRequired,alias:b().string,copied:b().string,onCopy:b().func.isRequired,testStatus:b().oneOf(["ok","error"]),isCustom:b().bool,isFree:b().bool,onDeleteAlias:b().func,onTest:b().func,isTesting:b().bool,onDisable:b().func,protocol:b().oneOf(["chat","messages","responses"]),defaultProtocol:b().oneOf(["chat","messages","responses"]),onProtocolChange:b().func,isSavingProtocol:b().bool},b().string.isRequired,b().string.isRequired,b().string,b().func.isRequired,b().func.isRequired,b().func,b().oneOf(["ok","error"]),b().bool,b().string.isRequired,b().object.isRequired,b().string,b().func.isRequired,b().func.isRequired,b().func.isRequired,N.propTypes={providerStorageAlias:b().string.isRequired,providerDisplayAlias:b().string.isRequired,modelAliases:b().object.isRequired,copied:b().string,onCopy:b().func.isRequired,onSetAlias:b().func.isRequired,onDeleteAlias:b().func.isRequired,connections:b().arrayOf(b().shape({id:b().string,isActive:b().bool})).isRequired,isAnthropic:b().bool},w.propTypes={until:b().string.isRequired};function k({connection:e,proxyPools:t,health:s=null,isOAuth:l,isFirst:r,isLast:n,onMoveUp:o,onMoveDown:d,onToggleActive:m,onUpdateProxy:p,onEdit:x,onDelete:u,oneByOneStatus:h=null,autoPing:f=null}){let g,b,y,v,j,[N,C]=(0,i.useState)(!1),[S,A]=(0,i.useState)(!1),$=(0,i.useRef)(null),T=new Map((t||[]).map(e=>[e.id,e])),I=e.providerSpecificData?.proxyPoolId||null,P=I?T.get(I):null,O=e.providerSpecificData?.connectionProxyEnabled===!0&&!!e.providerSpecificData?.connectionProxyUrl,E=!!I||O,R=P?`Pool: ${P.name}`:I?`Pool: ${I} (inactive/missing)`:O?`Legacy: ${e.providerSpecificData?.connectionProxyUrl}`:"",D="";if(P?.proxyUrl||e.providerSpecificData?.connectionProxyUrl){let t=P?.proxyUrl||e.providerSpecificData?.connectionProxyUrl;try{let e=new URL(t);D=`${e.protocol}//${e.hostname}${e.port?`:${e.port}`:""}`}catch{D=t}}let _=P?.noProxy||e.providerSpecificData?.connectionNoProxy||"",z="default";P?.isActive===!0?z="success":(I||O)&&(z="error"),(0,i.useEffect)(()=>{if(!N)return;let e=e=>{$.current&&!$.current.contains(e.target)&&C(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[N]);let U=async e=>{A(!0);try{await p("__none__"===e?null:e)}finally{A(!1),C(!1)}},M=e.authType||(l?"oauth":"apikey"),q="oauth"===M,K="cookie"===M,L=e=>"string"==typeof e&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e),F=q?L(e.email)?e.email:L(e.name)?e.name:e.name||e.email||e.displayName||"OAuth Account":e.name||e.email||e.displayName||"API Key",[J,B]=(0,i.useState)(null),W=!!J,H=Object.entries(e).filter(([e,t])=>e.startsWith("modelLock_")&&t).map(([e,t])=>`${e}=${t}`).sort().join("|");(0,i.useEffect)(()=>{let t=()=>B(function(e,t=Date.now()){if(!e)return null;let s=0;for(let[a,i]of Object.entries(e)){if(!a.startsWith("modelLock_")||!i)continue;let e=new Date(i).getTime();Number.isFinite(e)&&e>t&&e>s&&(s=e)}return s?new Date(s).toISOString():null}(e));t();let s=H?setInterval(t,1e3):null;return()=>{s&&clearInterval(s)}},[H]);let V="unavailable"!==e.testStatus||W?e.testStatus:"active",G=()=>h?"queued"===h.state?"queued":"testing"===h.state?"testing":"success"===h.state?"success":"failed"===h.state?h.error?`failed: ${h.error}`:"failed":null:null;return(0,a.jsxs)("div",{className:`group flex min-w-0 flex-col gap-3 rounded-lg p-2 transition-colors hover:bg-black/[0.02] dark:hover:bg-white/[0.02] sm:flex-row sm:items-center sm:justify-between ${!1===e.isActive?"opacity-60":""}`,children:[(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 items-start gap-2 sm:items-center sm:gap-3",children:[(0,a.jsxs)("div",{className:"flex shrink-0 flex-col",children:[(0,a.jsx)("button",{onClick:o,disabled:r,className:`p-0.5 rounded ${r?"text-text-muted/30 cursor-not-allowed":"hover:bg-sidebar text-text-muted hover:text-primary"}`,children:(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",children:"keyboard_arrow_up"})}),(0,a.jsx)("button",{onClick:d,disabled:n,className:`p-0.5 rounded ${n?"text-text-muted/30 cursor-not-allowed":"hover:bg-sidebar text-text-muted hover:text-primary"}`,children:(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",children:"keyboard_arrow_down"})})]}),(0,a.jsx)("span",{className:"material-symbols-outlined shrink-0 text-base text-text-muted",children:K?"cookie":q?"lock":"key"}),s&&(b=(g=Math.round(s.score??500))>=750?"bg-green-500/10 text-green-700 dark:text-green-400 border-green-500/30":g>=400?"bg-amber-500/10 text-amber-700 dark:text-amber-400 border-amber-500/30":"bg-red-500/10 text-red-700 dark:text-red-400 border-red-500/30",y=null!=s.successRate?`${s.successRate}%`:"n/a",v=`${s.ewmaLatencyMs}ms`,j=`Zenith health ${g}
|
|
2
|
+
success ${y} \xb7 latency ${v} \xb7 n=${s.observed}`,(0,a.jsxs)("span",{className:`shrink-0 inline-flex items-center gap-1 rounded-md border px-1.5 py-0.5 font-mono text-[10px] leading-none ${b}`,title:j,"aria-label":j,children:["Z:",g]})),(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"text-sm font-medium truncate",children:F}),(0,a.jsxs)("div",{className:"mt-1 flex min-w-0 flex-wrap items-center gap-1.5 sm:gap-2",children:[(0,a.jsx)(c.Ex,{variant:!1===e.isActive?"default":"active"===V||"success"===V?"success":"error"===V||"expired"===V||"unavailable"===V?"error":"default",size:"sm",dot:!0,children:!1===e.isActive?"disabled":V||"Unknown"}),e.chronicallyBanned&&!1!==e.isActive&&(0,a.jsxs)(c.Ex,{variant:"error",size:"sm",title:`Banned ${e.banCount||3}\xd7 in a row. Verify manually.`,children:["chronic ban \xd7",e.banCount||3]}),(0,a.jsx)(c.Ex,{variant:"default",size:"sm",children:q?"OAuth":K?"Cookie":"API Key"}),E&&(0,a.jsx)(c.Ex,{variant:z,size:"sm",children:"Proxy"}),W&&!1!==e.isActive&&(0,a.jsx)(w,{until:J}),e.lastError&&!1!==e.isActive&&"active"!==V&&"success"!==V&&(0,a.jsx)("span",{className:"max-w-full truncate text-xs text-red-500 sm:max-w-[300px]",title:e.lastError,children:e.lastError}),(0,a.jsxs)("span",{className:"text-xs text-text-muted",children:["#",e.priority]}),e.globalPriority&&(0,a.jsxs)("span",{className:"text-xs text-text-muted",children:["Auto: ",e.globalPriority]}),G()&&(0,a.jsx)(c.Ex,{variant:h?"success"===h.state?"success":"failed"===h.state?"error":"testing"===h.state?"primary":"default":"default",size:"sm",children:G()})]}),E&&(0,a.jsxs)("div",{className:"mt-1 flex items-center gap-2 flex-wrap",children:[(0,a.jsx)("span",{className:"max-w-full truncate text-[11px] text-text-muted sm:max-w-[420px]",title:R,children:R}),D&&(0,a.jsx)("code",{className:"max-w-full truncate rounded bg-black/5 px-1 py-0.5 font-mono text-[10px] text-text-muted dark:bg-white/5 sm:max-w-[260px]",children:D}),_&&(0,a.jsxs)("span",{className:"max-w-full truncate text-[11px] text-text-muted sm:max-w-[320px]",title:_,children:["no_proxy: ",_]})]})]})]}),(0,a.jsxs)("div",{className:"flex w-full items-center justify-between gap-2 sm:w-auto sm:justify-end",children:[(0,a.jsxs)("div",{className:"grid flex-1 grid-cols-3 gap-1 sm:flex sm:flex-none",children:[(t||[]).length>0&&(0,a.jsxs)("div",{className:"relative",ref:$,children:[(0,a.jsxs)("button",{onClick:()=>C(e=>!e),className:`flex w-full flex-col items-center rounded px-2 py-1 transition-colors hover:bg-black/5 dark:hover:bg-white/5 ${E?"text-primary":"text-text-muted hover:text-primary"}`,disabled:S,children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:S?"progress_activity":"lan"}),(0,a.jsx)("span",{className:"text-[10px] leading-tight",children:"Proxy"})]}),N&&(0,a.jsxs)("div",{className:"absolute right-0 top-full z-50 mt-1 max-w-[78vw] min-w-[160px] rounded-lg border border-border bg-bg py-1 shadow-lg",children:[(0,a.jsx)("button",{onClick:()=>U("__none__"),className:`w-full text-left px-3 py-1.5 text-sm hover:bg-black/5 dark:hover:bg-white/5 ${!I?"text-primary font-medium":"text-text-main"}`,children:"None"}),(t||[]).map(e=>(0,a.jsx)("button",{onClick:()=>U(e.id),className:`w-full text-left px-3 py-1.5 text-sm hover:bg-black/5 dark:hover:bg-white/5 ${I===e.id?"text-primary font-medium":"text-text-main"}`,children:e.name},e.id))]})]}),f&&(0,a.jsx)(c.m_,{text:"When your 5h quota runs out, auto-sends a request the moment it resets so a new window starts right away.",children:(0,a.jsxs)("button",{onClick:()=>f.onToggle(!f.on),className:`flex w-full flex-col items-center rounded px-2 py-1 transition-colors hover:bg-black/5 dark:hover:bg-white/5 ${f.on?"text-primary":"text-text-muted hover:text-primary"}`,children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"bolt"}),(0,a.jsx)("span",{className:"text-[10px] leading-tight",children:"Auto-ping"})]})}),(0,a.jsxs)("button",{onClick:x,className:"flex flex-col items-center rounded px-2 py-1 text-text-muted hover:bg-black/5 hover:text-primary dark:hover:bg-white/5",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"edit"}),(0,a.jsx)("span",{className:"text-[10px] leading-tight",children:"Edit"})]}),(0,a.jsxs)("button",{onClick:u,className:"flex flex-col items-center rounded px-2 py-1 text-red-500 hover:bg-red-500/10",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"delete"}),(0,a.jsx)("span",{className:"text-[10px] leading-tight",children:"Delete"})]})]}),(0,a.jsx)(c.lM,{size:"sm",checked:e.isActive??!0,onChange:m,title:e.isActive??!0?"Disable connection":"Enable connection"})]})]})}k.propTypes={connection:b().shape({id:b().string,name:b().string,email:b().string,displayName:b().string,modelLockUntil:b().string,testStatus:b().string,isActive:b().bool,lastError:b().string,banCount:b().number,chronicallyBanned:b().bool,priority:b().number,globalPriority:b().number}).isRequired,health:b().shape({score:b().number,ewmaLatencyMs:b().number,successRate:b().number,observed:b().number,lastUpdate:b().number}),proxyPools:b().arrayOf(b().shape({id:b().string,name:b().string,proxyUrl:b().string,noProxy:b().string,isActive:b().bool})),isOAuth:b().bool.isRequired,isFirst:b().bool.isRequired,isLast:b().bool.isRequired,onMoveUp:b().func.isRequired,onMoveDown:b().func.isRequired,onToggleActive:b().func.isRequired,onUpdateProxy:b().func,onEdit:b().func.isRequired,onDelete:b().func.isRequired,oneByOneStatus:b().shape({state:b().string,error:b().string}),autoPing:b().shape({on:b().bool,onToggle:b().func})};let C=`name1|sk-key1
|
|
3
|
+
name2|sk-key2
|
|
4
|
+
sk-key-only-auto-named`;function S({isOpen:e,provider:t,providerName:s,isCompatible:l,isAnthropic:r,authType:n,authHint:o,website:m,proxyPools:p,error:x,existingNames:u,onSave:h,onBulkDone:f,onClose:g}){let b="__none__",y="ollama-local"===t,v="cookie"===n,j="xai"===t&&!v,N=v?"Cookie Value":"API Key",w=v?"grok-web"===t?"sso=xxxxx... or just the raw value":"eyJhbGciOi...":j?"xai-...":"",k="azure"===t,A="cloudflare-ai"===t,$=d.Q2?.[t]?.regions||null,T=d.Q2?.[t]?.defaultRegion||$?.[0]?.id||"",[I,P]=(0,i.useState)({name:"",apiKey:"",defaultModel:"",priority:1,proxyPoolId:b,ollamaHostUrl:""}),[O,E]=(0,i.useState)({azureEndpoint:"",apiVersion:"2024-10-01-preview",deployment:"",organization:""}),[R,D]=(0,i.useState)({accountId:""}),[_,z]=(0,i.useState)(T),[U,M]=(0,i.useState)(!1),[q,K]=(0,i.useState)(null),[L,F]=(0,i.useState)(!1),[J,B]=(0,i.useState)({status:"idle"}),W=(0,i.useRef)(null),[H,V]=(0,i.useState)("single"),[G,Q]=(0,i.useState)(""),[Z,Y]=(0,i.useState)(null),X=()=>y&&I.ollamaHostUrl.trim()?{baseUrl:I.ollamaHostUrl.trim()}:k?{azureEndpoint:O.azureEndpoint,apiVersion:O.apiVersion,deployment:O.deployment,organization:O.organization}:A?{accountId:R.accountId}:$&&_?{region:_}:void 0;(0,i.useEffect)(()=>{W.current&&clearTimeout(W.current);let e=I.apiKey?.trim();return!e||e.length<6||v||y?void B({status:"idle"}):(B({status:"loading"}),W.current=setTimeout(async()=>{try{let s=await fetch("/api/models/preview",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerId:t,apiKey:e})}),a=await s.json();"no_fetcher"===a.code?B({status:"unsupported"}):a.success?B({status:"ok",count:a.count,cached:!!a.cached}):B({status:"error",error:a.error||"Fetch failed"})}catch{B({status:"error",error:"Network error"})}},600),()=>{W.current&&clearTimeout(W.current)})},[I.apiKey,t,v,y]);let ee=async()=>{M(!0);try{let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t,apiKey:I.apiKey,providerSpecificData:X()})}),s=await e.json();K(s.valid?"success":"failed")}catch{K("failed")}finally{M(!1)}},et=async()=>{if(t&&(y||I.apiKey)&&(y||I.name)&&(!l||I.defaultModel.trim())){F(!0);try{let e=!1;try{M(!0),K(null);let s=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t,apiKey:I.apiKey,providerSpecificData:X()})});e=!!(await s.json()).valid,K(e?"success":"failed")}catch{K("failed")}finally{M(!1)}await h({name:I.name||(y?"Ollama Local":""),apiKey:I.apiKey,defaultModel:l?I.defaultModel.trim():void 0,priority:I.priority,proxyPoolId:I.proxyPoolId===b?null:I.proxyPoolId,testStatus:e?"active":"unknown",providerSpecificData:X()})}finally{F(!1)}}},es=async()=>{let e=function(e,t,s={}){let{isCloudflareAi:a=!1}=s,i=new Set((Array.isArray(t)?t:[]).map(e=>"string"==typeof e?e.toLowerCase():"")),l=[];for(let t of e){let e,s="string"==typeof t?t.trim():"";if(!s)continue;let r=function(e,t={}){let{isCloudflareAi:s=!1}=t,a=e.split("|");if(s&&a.length>=3){let e=a[0].trim();return{baseName:e||"Key",apiKey:a.slice(1,-1).join("|").trim(),providerSpecificData:{accountId:a[a.length-1].trim()}}}return a.length>=2?{baseName:a[0].trim()||"Key",apiKey:a.slice(1).join("|").trim()}:{baseName:"Key",apiKey:a[0].trim()}}(s,{isCloudflareAi:a});if(!r||!r.apiKey)continue;let n=r.baseName,o=1;for(;e=`${n} ${o}`,i.has(e.toLowerCase());)o+=1;i.add(e.toLowerCase());let c={name:e,apiKey:r.apiKey,skipped:!1};r.providerSpecificData&&(c.providerSpecificData=r.providerSpecificData),l.push(c)}return l}(G.split("\n"),u,{isCloudflareAi:A});if(!e.length)return;F(!0),Y(null);let s=0,a=0;for(let i of e)try{(await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t,apiKey:i.apiKey,name:i.name,priority:1,testStatus:"unknown",...i.providerSpecificData?{providerSpecificData:i.providerSpecificData}:{}})})).ok?s++:a++}catch{a++}F(!1),Y({success:s,failed:a}),s>0&&f&&f()};return t?(0,a.jsx)(c.aF,{isOpen:e,title:`Add ${s||t} ${N}`,onClose:g,children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(c.$n,{size:"sm",variant:"single"===H?"primary":"ghost",onClick:()=>{V("single"),Y(null)},children:"Single"}),(0,a.jsx)(c.$n,{size:"sm",variant:"bulk"===H?"primary":"ghost",onClick:()=>{V("bulk"),Y(null)},children:"Bulk Add"})]}),"bulk"===H&&(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,a.jsxs)("p",{className:"text-xs text-text-muted",children:["One key per line. Format: ",(0,a.jsx)("code",{children:"name|apiKey"})," or just ",(0,a.jsx)("code",{children:"apiKey"})," (auto-named by index)."]}),(0,a.jsx)("textarea",{className:"w-full rounded border border-accent/30 bg-sidebar p-2 text-sm font-mono resize-y min-h-[140px] focus:outline-none focus:ring-1 focus:ring-primary",placeholder:C,value:G,onChange:e=>Q(e.target.value)}),Z&&(0,a.jsxs)("div",{className:`text-sm font-medium ${Z.failed>0?"text-yellow-400":"text-green-400"}`,children:["✓ ",Z.success," added",Z.failed>0?`, ✗ ${Z.failed} failed`:""]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(c.$n,{onClick:es,fullWidth:!0,disabled:L||!G.trim(),children:L?"Adding...":"Add All Keys"}),(0,a.jsx)(c.$n,{onClick:g,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]}),"single"===H&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(c.pd,{label:"Name",value:I.name,onChange:e=>P({...I,name:e.target.value}),placeholder:y?"Ollama Local":"Production Key"}),y&&(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(c.pd,{label:"Ollama Host URL",value:I.ollamaHostUrl,onChange:e=>P({...I,ollamaHostUrl:e.target.value}),placeholder:"http://localhost:11434",className:"flex-1"}),(0,a.jsx)("div",{className:"pt-6",children:(0,a.jsx)(c.$n,{onClick:ee,disabled:U||L,variant:"secondary",children:U?"Checking...":"Check"})})]}),!y&&(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(c.pd,{label:N,type:v?"text":"password",value:I.apiKey,onChange:e=>P({...I,apiKey:e.target.value}),placeholder:w,className:"flex-1"}),(0,a.jsx)("div",{className:"pt-6",children:(0,a.jsx)(c.$n,{onClick:ee,disabled:!I.apiKey||U||L,variant:"secondary",children:U?"Checking...":"Check"})})]}),"idle"!==J.status&&!v&&!y&&(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-xs",children:["loading"===J.status&&(0,a.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-text-muted",children:[(0,a.jsx)("span",{className:"material-symbols-outlined animate-spin text-sm",children:"progress_activity"}),"Checking key + fetching catalog…"]}),"ok"===J.status&&(0,a.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-green-500",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",children:"check_circle"}),"Fetched ",J.count," model",1===J.count?"":"s"," from ",s||t,J.cached&&(0,a.jsx)("span",{className:"text-text-muted",children:"\xb7 cached"})]}),"error"===J.status&&(0,a.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-red-500",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",children:"error"}),J.error]}),"unsupported"===J.status&&(0,a.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-text-muted",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",children:"info"}),"No live catalog for this provider — you can still save the key."]})]}),j&&(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Use a direct xAI API key from console.x.ai. This is separate from Grok Build OAuth."}),v&&o&&(0,a.jsxs)("p",{className:"text-xs text-text-muted",children:[o,m&&(0,a.jsxs)(a.Fragment,{children:[" ",(0,a.jsxs)("a",{href:m,target:"_blank",rel:"noopener noreferrer",className:"text-primary underline",children:["Open ",m.replace(/^https?:\/\//,"")]})]})]}),$&&(0,a.jsx)(c.l6,{label:"Region",value:_,onChange:e=>z(e.target.value),options:$.map(e=>({value:e.id,label:e.label}))}),l&&(0,a.jsx)(c.pd,{label:"Default Model",value:I.defaultModel,onChange:e=>P({...I,defaultModel:e.target.value}),placeholder:r?"claude-3-5-sonnet-latest":"gpt-4o-mini"}),y&&(0,a.jsxs)("p",{className:"text-xs text-text-muted",children:["Leave blank to use ",(0,a.jsx)("code",{children:"http://localhost:11434"}),". For remote Ollama, enter the full host URL (e.g. ",(0,a.jsx)("code",{children:"http://192.168.1.10:11434"}),")."]}),q&&(0,a.jsx)(c.Ex,{variant:"success"===q?"success":"error",children:"success"===q?"Valid":"Invalid"}),x&&(0,a.jsx)("p",{className:"text-xs text-red-500 break-words",children:x}),l&&(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Enter the model ID exactly as your compatible endpoint expects it. This model will be saved as the connection default."}),A&&(0,a.jsxs)("div",{className:"bg-sidebar/50 p-4 rounded-lg border border-accent/20",children:[(0,a.jsx)("h3",{className:"font-semibold mb-3 text-sm",children:"Cloudflare Workers AI"}),(0,a.jsx)(c.pd,{label:"Account ID",value:R.accountId,onChange:e=>D({...R,accountId:e.target.value}),placeholder:"abc123def456..."}),(0,a.jsxs)("p",{className:"text-xs text-text-muted mt-2",children:["Find your Account ID in the right sidebar of ",(0,a.jsx)("a",{href:"https://dash.cloudflare.com",target:"_blank",rel:"noopener noreferrer",className:"text-primary underline",children:"dash.cloudflare.com"})]})]}),k&&(0,a.jsxs)("div",{className:"bg-sidebar/50 p-4 rounded-lg border border-accent/20",children:[(0,a.jsx)("h3",{className:"font-semibold mb-3 text-sm",children:"Azure OpenAI Configuration"}),(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,a.jsx)(c.pd,{label:"Azure Endpoint",value:O.azureEndpoint,onChange:e=>E({...O,azureEndpoint:e.target.value}),placeholder:"https://your-resource.openai.azure.com"}),(0,a.jsx)(c.pd,{label:"Deployment Name",value:O.deployment,onChange:e=>E({...O,deployment:e.target.value}),placeholder:"gpt-4"}),(0,a.jsx)(c.pd,{label:"API Version",value:O.apiVersion,onChange:e=>E({...O,apiVersion:e.target.value}),placeholder:"2024-10-01-preview"}),(0,a.jsx)(c.pd,{label:"Organization",value:O.organization,onChange:e=>E({...O,organization:e.target.value}),placeholder:"Organization ID"})]})]}),(0,a.jsx)(c.pd,{label:"Priority",type:"number",value:I.priority,onChange:e=>P({...I,priority:Number.parseInt(e.target.value)||1})}),(0,a.jsx)(c.l6,{label:"Proxy Pool",value:I.proxyPoolId,onChange:e=>P({...I,proxyPoolId:e.target.value}),options:[{value:b,label:"None"},...(p||[]).map(e=>({value:e.id,label:e.name}))],placeholder:"None"}),0===(p||[]).length&&(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"No active proxy pools available. Create one in Proxy Pools page first."}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Legacy manual proxy fields are still accepted by API for backward compatibility."}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(c.$n,{onClick:et,fullWidth:!0,disabled:L||!y&&(!I.name||!I.apiKey)||l&&!I.defaultModel.trim()||k&&(!O.azureEndpoint||!O.deployment||!O.organization)||A&&!R.accountId,children:L?"Saving...":"Save"}),(0,a.jsx)(c.$n,{onClick:g,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})]})}):null}function A({isOpen:e,node:t,onSave:s,onClose:l,isAnthropic:r}){let[n,o]=(0,i.useState)({name:"",prefix:"",apiType:"chat",baseUrl:"https://api.openai.com/v1"}),[d,m]=(0,i.useState)(!1),[p,x]=(0,i.useState)(""),[u,h]=(0,i.useState)(""),[f,g]=(0,i.useState)(!1),[b,y]=(0,i.useState)(null);(0,i.useEffect)(()=>{t&&o({name:t.name||"",prefix:t.prefix||"",apiType:t.apiType||"chat",baseUrl:t.baseUrl||(r?"https://api.anthropic.com/v1":"https://api.openai.com/v1")})},[t,r]);let v=async()=>{if(n.name.trim()&&n.prefix.trim()&&n.baseUrl.trim()){m(!0);try{let e={name:n.name,prefix:n.prefix,baseUrl:n.baseUrl};r||(e.apiType=n.apiType),await s(e)}finally{m(!1)}}},j=async()=>{g(!0);try{let e=await fetch("/api/provider-nodes/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:n.baseUrl,apiKey:p,type:r?"anthropic-compatible":"openai-compatible",modelId:u.trim()||void 0})}),t=await e.json();y(t.valid?"success":"failed")}catch{y("failed")}finally{g(!1)}};return t?(0,a.jsx)(c.aF,{isOpen:e,title:`Edit ${r?"Anthropic":"OpenAI"} Compatible`,onClose:l,children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsx)(c.pd,{label:"Name",value:n.name,onChange:e=>o({...n,name:e.target.value}),placeholder:`${r?"Anthropic":"OpenAI"} Compatible (Prod)`,hint:"Required. A friendly label for this node."}),(0,a.jsx)(c.pd,{label:"Prefix",value:n.prefix,onChange:e=>o({...n,prefix:e.target.value}),placeholder:r?"ac-prod":"oc-prod",hint:"Required. Used as the provider prefix for model IDs."}),!r&&(0,a.jsx)(c.l6,{label:"API Type",options:[{value:"chat",label:"Chat Completions"},{value:"responses",label:"Responses API"}],value:n.apiType,onChange:e=>o({...n,apiType:e.target.value})}),(0,a.jsx)(c.pd,{label:"Base URL",value:n.baseUrl,onChange:e=>o({...n,baseUrl:e.target.value}),placeholder:r?"https://api.anthropic.com/v1":"https://api.openai.com/v1",hint:`Use the base URL (ending in /v1) for your ${r?"Anthropic":"OpenAI"}-compatible API.`}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(c.pd,{label:"API Key (for Check)",type:"password",value:p,onChange:e=>x(e.target.value),className:"flex-1"}),(0,a.jsx)("div",{className:"pt-6",children:(0,a.jsx)(c.$n,{onClick:j,disabled:!p||f||!n.baseUrl.trim(),variant:"secondary",children:f?"Checking...":"Check"})})]}),(0,a.jsx)(c.pd,{label:"Model ID (optional)",value:u,onChange:e=>h(e.target.value),placeholder:"e.g. my-model-id",hint:"If provider lacks /models endpoint, enter a model ID to validate via chat/completions instead."}),b&&(0,a.jsx)(c.Ex,{variant:"success"===b?"success":"error",children:"success"===b?"Valid":"Invalid"}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(c.$n,{onClick:v,fullWidth:!0,disabled:!n.name.trim()||!n.prefix.trim()||!n.baseUrl.trim()||d,children:d?"Saving...":"Save"}),(0,a.jsx)(c.$n,{onClick:l,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})}):null}function $({isOpen:e,providerAlias:t,providerDisplayAlias:s,onSave:l,onClose:r}){let[n,o]=(0,i.useState)(""),[d,m]=(0,i.useState)(null),[p,x]=(0,i.useState)(""),[u,h]=(0,i.useState)(!1);(0,i.useEffect)(()=>{e&&(o(""),m(null),x(""))},[e]);let f=e=>{let s=`${t}/`;return e.startsWith(s)?e.slice(s.length):e},g=async()=>{let e=f(n.trim());if(e){m("testing"),x("");try{let s=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${t}/${e}`})}),a=await s.json();m(a.ok?"ok":"error"),x(a.error||"")}catch(e){m("error"),x(e.message)}}},b=async()=>{let e=f(n.trim());if(e&&!u){h(!0);try{await l(e)}finally{h(!1)}}};return(0,a.jsx)(c.aF,{isOpen:e,onClose:r,title:"Add Custom Model",children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"text-sm font-medium mb-1.5 block",children:"Model ID"}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)("input",{type:"text",value:n,onChange:e=>{o(e.target.value),m(null),x("")},onKeyDown:e=>{"Enter"===e.key&&g()},placeholder:"e.g. claude-opus-4-5",className:"flex-1 px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary",autoFocus:!0}),(0,a.jsx)(c.$n,{variant:"secondary",icon:"science",loading:"testing"===d,onClick:g,disabled:!n.trim()||"testing"===d,children:"testing"===d?"Testing...":"Test"})]}),(0,a.jsxs)("p",{className:"text-xs text-text-muted mt-1",children:["Sent to provider as: ",(0,a.jsx)("code",{className:"font-mono bg-sidebar px-1 rounded",children:f(n.trim())||"model-id"})]})]}),"ok"===d&&(0,a.jsxs)("div",{className:"flex items-center gap-2 text-sm text-green-600",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-base",children:"check_circle"}),"Model is reachable"]}),"error"===d&&(0,a.jsxs)("div",{className:"flex items-start gap-2 text-sm text-red-500",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-base shrink-0",children:"cancel"}),(0,a.jsx)("span",{children:p||"Model not reachable"})]}),(0,a.jsxs)("div",{className:"flex gap-2 pt-1",children:[(0,a.jsx)(c.$n,{onClick:r,variant:"ghost",fullWidth:!0,size:"sm",children:"Cancel"}),(0,a.jsx)(c.$n,{onClick:b,fullWidth:!0,size:"sm",disabled:!n.trim()||u,children:u?"Adding...":"Add Model"})]})]})})}S.propTypes={isOpen:b().bool.isRequired,provider:b().string,providerName:b().string,isCompatible:b().bool,isAnthropic:b().bool,authType:b().string,authHint:b().string,website:b().string,proxyPools:b().arrayOf(b().shape({id:b().string,name:b().string})),error:b().string,existingNames:b().arrayOf(b().string),onSave:b().func.isRequired,onBulkDone:b().func,onClose:b().func.isRequired},A.propTypes={isOpen:b().bool.isRequired,node:b().shape({id:b().string,name:b().string,prefix:b().string,apiType:b().string,baseUrl:b().string}),onSave:b().func.isRequired,onClose:b().func.isRequired,isAnthropic:b().bool},$.propTypes={isOpen:b().bool.isRequired,providerAlias:b().string.isRequired,providerDisplayAlias:b().string.isRequired,onSave:b().func.isRequired,onClose:b().func.isRequired};let T=`[
|
|
5
|
+
{
|
|
6
|
+
"accessToken": "eyJhbGc...",
|
|
7
|
+
"refreshToken": "rt_...",
|
|
8
|
+
"idToken": "eyJhbGc...",
|
|
9
|
+
"email": "user@example.com"
|
|
10
|
+
}
|
|
11
|
+
]`;function I({isOpen:e,onClose:t,onSuccess:s}){let[l,r]=(0,i.useState)(""),[n,o]=(0,i.useState)(!1),[d,m]=(0,i.useState)(""),[p,x]=(0,i.useState)(null),h=()=>{n||(r(""),m(""),x(null),t())},f=async()=>{var e;let t;m(""),x(null);let a=l.trim();if(!a)return;try{t=JSON.parse(a)}catch(e){m(`${(0,u.Tl)("Invalid JSON")}: ${e.message}`);return}let i=Array.isArray(e=t)?e:e&&"object"==typeof e?Array.isArray(e.accounts)?e.accounts:[e]:null;if(!i||0===i.length)return void m((0,u.Tl)("No accounts found in input"));o(!0);try{let e=await fetch("/api/oauth/codex/bulk-import",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accounts:i})}),t=await e.json();if(!e.ok)return void m(t?.error||`Request failed: ${e.status}`);x(t),t.success>0&&"function"==typeof s&&s()}catch(e){m(e.message||(0,u.Tl)("Request failed"))}finally{o(!1)}},g=p?.results?.filter(e=>!e.ok)||[];return(0,a.jsx)(c.aF,{isOpen:e,title:(0,u.Tl)("Bulk Add Codex Accounts"),onClose:h,children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsx)("p",{className:"text-xs text-text-muted",children:(0,u.Tl)("Paste an array of codex account JSON objects. Each must include accessToken (and ideally refreshToken, idToken).")}),(0,a.jsx)("textarea",{className:"w-full rounded border border-accent/30 bg-sidebar p-2 text-sm font-mono resize-y min-h-[240px] focus:outline-none focus:ring-1 focus:ring-primary",placeholder:T,value:l,onChange:e=>r(e.target.value),disabled:n}),d&&(0,a.jsx)("p",{className:"text-xs text-red-500 break-words",children:d}),p&&(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsxs)("div",{className:`text-sm font-medium ${p.failed>0?"text-yellow-400":"text-green-400"}`,children:["✓ ",p.success," ",(0,u.Tl)("added"),p.failed>0?`, ✗ ${p.failed} ${(0,u.Tl)("failed")}`:""]}),g.length>0&&(0,a.jsx)("ul",{className:"rounded border border-accent/20 bg-sidebar/50 p-2 text-xs font-mono max-h-40 overflow-y-auto",children:g.map(e=>(0,a.jsxs)("li",{className:"text-red-400",children:["[",e.index,"] ",e.error]},e.index))})]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(c.$n,{onClick:f,fullWidth:!0,disabled:n||!l.trim(),children:n?(0,u.Tl)("Importing..."):(0,u.Tl)("Import All")}),(0,a.jsx)(c.$n,{onClick:h,variant:"ghost",fullWidth:!0,disabled:n,children:(0,u.Tl)("Close")})]})]})})}I.propTypes={isOpen:b().bool.isRequired,onClose:b().func.isRequired,onSuccess:b().func};let P={free:{label:"Free",variant:"success",accent:"green"},freetier:{label:"Free tier",variant:"success",accent:"emerald"},oauth:{label:"OAuth",variant:"primary",accent:"primary"},paid:{label:"API key",variant:"default",accent:"neutral"},webcookie:{label:"Cookie",variant:"warning",accent:"amber"}};function O({capabilities:e,connectionCount:t=0,headerIconPath:s}){let[l,r]=(0,i.useState)(!1);if(!e)return null;let d=P[e.tier]||P.paid,m=e.color?`${e.color}10`:"rgba(148,163,184,0.08)",p=e.color?`${e.color}30`:"rgba(148,163,184,0.20)",x=[];return e.links.apiKey&&x.push({href:e.links.apiKey,icon:"key",label:"Get API key"}),e.links.signup&&!e.links.apiKey&&x.push({href:e.links.signup,icon:"person_add",label:"Sign up"}),e.links.homepage&&x.push({href:e.links.homepage,icon:"language",label:"Homepage"}),e.links.docs&&x.push({href:e.links.docs,icon:"menu_book",label:"Docs"}),e.links.pricing&&x.push({href:e.links.pricing,icon:"sell",label:"Pricing"}),(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-4",children:[(0,a.jsxs)(n(),{href:"/dashboard/providers",className:"inline-flex items-center gap-1 text-sm text-text-muted hover:text-primary transition-colors",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-lg",children:"arrow_back"}),"Back to Providers"]}),(0,a.jsxs)("div",{className:"relative overflow-hidden rounded-2xl border p-5 sm:p-7",style:{borderColor:p,background:`linear-gradient(140deg, ${m} 0%, transparent 55%)`},children:[(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-5 sm:flex-row sm:items-start sm:justify-between",children:[(0,a.jsxs)("div",{className:"flex min-w-0 items-start gap-4",children:[(0,a.jsx)("div",{className:"flex size-14 shrink-0 items-center justify-center rounded-xl shadow-sm",style:{backgroundColor:e.color?`${e.color}20`:"rgba(148,163,184,0.15)"},children:l||!s?(0,a.jsx)("span",{className:"text-base font-bold",style:{color:e.color||"inherit"},children:e.textIcon||e.id.slice(0,2).toUpperCase()}):(0,a.jsx)(o.A,{src:s,alt:e.name,width:56,height:56,className:"max-h-14 max-w-14 rounded-xl object-contain",sizes:"56px",onError:()=>r(!0)})}),(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsx)("h1",{className:"truncate text-2xl font-semibold tracking-tight sm:text-3xl",children:e.name}),(0,a.jsx)(c.Ex,{variant:d.variant,size:"sm",children:d.label}),e.deprecated&&(0,a.jsx)(c.Ex,{variant:"warning",size:"sm",children:"deprecated"})]}),(0,a.jsxs)("p",{className:"mt-1 text-sm text-text-muted",children:[t," connection",1===t?"":"s",e.serviceKinds.length>1&&(0,a.jsxs)(a.Fragment,{children:[" \xb7 ",e.serviceKinds.join(" \xb7 ")]})]})]})]}),x.length>0&&(0,a.jsx)("div",{className:"flex flex-wrap gap-1.5 sm:justify-end",children:x.map(e=>(0,a.jsxs)("a",{href:e.href,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 rounded-full border border-border bg-bg/60 px-2.5 py-1 text-xs text-text-main hover:border-primary hover:text-primary transition-colors backdrop-blur",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",children:e.icon}),e.label]},e.label))})]}),e.notices.body&&!e.deprecated&&(0,a.jsx)("p",{className:"mt-4 max-w-3xl text-sm leading-relaxed text-text-muted",children:e.notices.body})]}),e.deprecated&&e.notices.warning&&(0,a.jsxs)("div",{className:"flex items-start gap-2 rounded-lg border border-yellow-500/30 bg-yellow-500/10 px-3 py-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined mt-0.5 shrink-0 text-[16px] text-yellow-500",children:"warning"}),(0,a.jsx)("p",{className:"text-xs leading-relaxed text-red-600 dark:text-yellow-400",children:e.notices.warning})]})]})}O.propTypes={capabilities:b().object,connectionCount:b().number,headerIconPath:b().string};let E={oauth:{icon:"lock",label:"Sign in with OAuth",tabLabel:"OAuth"},apikey:{icon:"key",label:"Add API key",tabLabel:"API key"},free:{icon:"bolt",label:"Connect for free",tabLabel:"Free"},cookie:{icon:"cookie",label:"Paste session cookie",tabLabel:"Cookie"},compatible:{icon:"developer_board",label:"Configure endpoint",tabLabel:"Compatible"}};function R({children:e,accentColor:t}){return(0,a.jsx)("div",{className:"rounded-xl border p-5 sm:p-6",style:{borderColor:t?`${t}25`:void 0,background:t?`linear-gradient(160deg, ${t}08, transparent 70%)`:void 0},children:e})}let D={oauth:function({capabilities:e,onOAuth:t,onBulkImport:s}){return(0,a.jsx)(R,{accentColor:e.color,children:(0,a.jsxs)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)("h3",{className:"text-base font-semibold",children:["Sign in with ",e.name]}),(0,a.jsx)("p",{className:"mt-0.5 text-sm text-text-muted",children:"One click. We handle the OAuth callback and store your session locally. You can add multiple accounts."})]}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2 sm:flex-nowrap",children:[e.features.bulkImport&&s&&(0,a.jsx)(c.$n,{size:"md",icon:"playlist_add",variant:"secondary",onClick:s,children:"Bulk import"}),(0,a.jsxs)(c.$n,{size:"md",icon:"lock",onClick:t,children:["Sign in with ",e.name]})]})]})})},apikey:function({capabilities:e,onApiKey:t}){return(0,a.jsx)(R,{accentColor:e.color,children:(0,a.jsxs)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsxs)("h3",{className:"text-base font-semibold",children:["Paste your ",e.name," API key"]}),(0,a.jsxs)("p",{className:"mt-0.5 text-sm text-text-muted",children:[e.links.apiKey?(0,a.jsxs)(a.Fragment,{children:["Grab a key from"," ",(0,a.jsx)("a",{href:e.links.apiKey,target:"_blank",rel:"noopener noreferrer",className:"text-primary underline decoration-primary/40 underline-offset-4 hover:decoration-primary",children:new URL(e.links.apiKey).hostname})," ","and paste it in."]}):(0,a.jsx)(a.Fragment,{children:"Paste your API key to connect."})," ","Stored locally, never sent anywhere except ",e.name,"."]})]}),(0,a.jsx)(c.$n,{size:"md",icon:"key",onClick:t,children:"Add API key"})]})})},free:function({capabilities:e,onFree:t}){return(0,a.jsx)(R,{accentColor:e.color||"#10B981",children:(0,a.jsxs)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)("div",{className:"mb-1 flex items-center gap-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px] text-green-500",children:"bolt"}),(0,a.jsxs)("h3",{className:"text-base font-semibold",children:[e.name," is free — one click to connect"]})]}),(0,a.jsx)("p",{className:"text-sm text-text-muted",children:"No key, no signup, no card. Just click connect and start using it."})]}),(0,a.jsx)(c.$n,{size:"md",icon:"add",onClick:t,children:"Connect"})]})})},cookie:function({capabilities:e,onCookie:t}){let[s,l]=(0,i.useState)(!1);return(0,a.jsx)(R,{accentColor:e.color||"#F59E0B",children:(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,a.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("h3",{className:"text-base font-semibold",children:"Advanced: connect with session cookie"}),(0,a.jsxs)("p",{className:"mt-0.5 text-sm text-text-muted",children:["For power users. Extract the ",e.name," cookie from your browser and paste it here."]})]}),(0,a.jsx)("button",{type:"button",onClick:()=>l(e=>!e),className:"text-xs text-text-muted hover:text-primary",children:s?"hide":"show"})]}),s&&(0,a.jsxs)("div",{className:"rounded-lg border border-border bg-bg/70 p-3",children:[(0,a.jsxs)("ol",{className:"mb-3 list-decimal space-y-1 pl-4 text-xs text-text-muted",children:[(0,a.jsxs)("li",{children:["Open ",e.name," in your browser and sign in."]}),(0,a.jsx)("li",{children:"Open DevTools → Application → Cookies."}),(0,a.jsx)("li",{children:"Copy the session cookie value."}),(0,a.jsx)("li",{children:"Paste it in the modal."})]}),(0,a.jsx)(c.$n,{size:"sm",icon:"cookie",onClick:t,children:"Paste cookie"})]})]})})},compatible:function({capabilities:e,onCompatible:t}){return(0,a.jsx)(R,{accentColor:e.color,children:(0,a.jsxs)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("h3",{className:"text-base font-semibold",children:"Use as OpenAI-compatible endpoint"}),(0,a.jsx)("p",{className:"mt-0.5 text-sm text-text-muted",children:"Point at any OpenAI-shaped base URL (self-hosted, LiteLLM, custom proxy). Fetches the live model list after you connect."})]}),(0,a.jsx)(c.$n,{size:"md",icon:"developer_board",onClick:t,children:"Configure endpoint"})]})})}};function _({capabilities:e,onOAuth:t,onApiKey:s,onFree:l,onCookie:r,onCompatible:n,onBulkImport:o}){let c=e?.authModes||[],[d,m]=(0,i.useState)(c[0]||"apikey");if(!e||0===c.length)return null;let p=D[d]||D.apikey,x=c.length>1;return(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-3",children:[x&&(0,a.jsx)("div",{className:"flex flex-wrap gap-1 rounded-lg border border-border bg-sidebar/40 p-1",children:c.map(e=>{let t=E[e]||{icon:"add",tabLabel:e},s=e===d;return(0,a.jsxs)("button",{type:"button",onClick:()=>m(e),className:`inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-colors ${s?"bg-bg text-text-main shadow-sm":"text-text-muted hover:text-text-main"}`,children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",children:t.icon}),t.tabLabel]},e)})}),(0,a.jsx)(p,{capabilities:e,onOAuth:t,onApiKey:s,onFree:l,onCookie:r,onCompatible:n,onBulkImport:o})]})}function z({providerId:e,models:t=[]}){let[s,l]=(0,i.useState)(""),[r,n]=(0,i.useState)({status:"idle"}),o=(0,i.useCallback)(async()=>{if(e){n(e=>({...e,status:"ok"===e.status?"refreshing":"loading"}));try{let t=new URLSearchParams({providerId:e});s&&t.set("model",s);let a=await fetch(`/api/providers/zenith?${t.toString()}`,{cache:"no-store"}),i=await a.json();i.success?n({status:"ok",winner:i.winner,count:i.count,leaderboard:i.leaderboard}):n({status:"error",error:i.error||"Zenith read failed"})}catch(e){n({status:"error",error:e?.message||"Network error"})}}},[e,s]);if((0,i.useEffect)(()=>{o();let e=setInterval(o,1e4);return()=>clearInterval(e)},[o]),"idle"===r.status||"loading"===r.status||"error"===r.status||!r.winner||(r.count??0)<2)return null;let c=r.winner;return(0,a.jsxs)("div",{className:"mb-3 flex flex-wrap items-center gap-2 rounded-lg border border-primary/20 bg-primary/[0.04] px-3 py-2 text-xs",children:[(0,a.jsxs)("span",{className:"inline-flex items-center gap-1 text-primary font-medium",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",children:"route"}),"Next request →"]}),(0,a.jsx)("span",{className:"font-medium text-text-main",children:c.name}),(0,a.jsxs)("span",{className:"rounded-md border border-primary/30 bg-primary/10 px-1.5 py-0.5 font-mono text-[10px] text-primary",children:["Z:",c.finalScore]}),(0,a.jsxs)("span",{className:"text-text-muted",children:["health ",c.healthScore," \xb7 quota \xd7",c.quotaFactor," \xb7 priority +",c.priorityBonus]}),t.length>0&&(0,a.jsxs)("div",{className:"ml-auto flex items-center gap-1.5",children:[(0,a.jsx)("span",{className:"text-text-muted",children:"Model:"}),(0,a.jsxs)("select",{value:s,onChange:e=>l(e.target.value),className:"rounded-md border border-border bg-bg px-1.5 py-0.5 text-[11px] focus:outline-none focus:border-primary",children:[(0,a.jsx)("option",{value:"",children:"(any)"}),t.map(e=>(0,a.jsx)("option",{value:e.id,children:e.id},e.id))]})]})]})}function U({providerId:e}){let[t,s]=(0,i.useState)(!1),[l,r]=(0,i.useState)([]),[n,o]=(0,i.useState)(!1),c=(0,i.useCallback)(async()=>{if(e){o(!0);try{let t=await fetch(`/api/providers/zenith/log?providerId=${e}&limit=50`,{cache:"no-store"}),s=await t.json();s.success&&r(s.entries||[])}catch{}finally{o(!1)}}},[e]);return(0,i.useEffect)(()=>{if(!t)return;c();let e=setInterval(c,5e3);return()=>clearInterval(e)},[t,c]),(0,a.jsxs)("div",{className:"mt-4 rounded-lg border border-border",children:[(0,a.jsxs)("button",{type:"button",onClick:()=>s(e=>!e),className:"flex w-full items-center justify-between px-3 py-2 text-xs text-text-muted hover:text-text-main",children:[(0,a.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",children:"history"}),"Routing decisions",l.length>0&&(0,a.jsxs)("span",{className:"text-text-muted",children:["(",l.length,")"]})]}),(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",children:t?"expand_less":"expand_more"})]}),t&&(0,a.jsxs)("div",{className:"max-h-64 overflow-y-auto border-t border-border/50 px-3 py-2",children:[n&&0===l.length&&(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Loading…"}),!n&&0===l.length&&(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"No decisions recorded yet. Fire a request through kRouter to populate."}),(0,a.jsx)("ul",{className:"space-y-1",children:l.map((e,t)=>(0,a.jsxs)("li",{className:"flex flex-wrap items-center gap-2 border-b border-border/30 py-1 text-[11px] font-mono last:border-0",children:[(0,a.jsx)("span",{className:"text-text-muted",children:function(e){let t=Math.floor((Date.now()-e)/1e3);if(t<5)return"just now";if(t<60)return`${t}s ago`;let s=Math.floor(t/60);return s<60?`${s}m ago`:`${Math.floor(s/60)}h ago`}(e.at)}),e.model&&(0,a.jsx)("span",{className:"text-text-main",children:e.model}),(0,a.jsx)("span",{className:"text-text-muted",children:"→"}),(0,a.jsx)("span",{className:"text-text-main",children:e.connectionId.slice(0,8)}),null!=e.score&&(0,a.jsxs)("span",{className:"text-primary",children:["Z:",e.score]}),null!=e.latencyMs&&(0,a.jsxs)("span",{className:"text-text-muted",children:[e.latencyMs,"ms"]}),(0,a.jsx)("span",{className:e.success?"text-green-500":"text-red-500",children:e.success?"✓":"✗"})]},`${e.at}-${t}`))})]})]})}function M(){let e,t=(0,l.useParams)(),s=(0,l.useRouter)(),r=t.id,[h,g]=(0,i.useState)([]),[b,y]=(0,i.useState)(!0),[j,w]=(0,i.useState)(null),[C,T]=(0,i.useState)([]),[P,E]=(0,i.useState)(!1),[R,D]=(0,i.useState)(!1),[M,q]=(0,i.useState)(!1),[K,L]=(0,i.useState)(""),[F,J]=(0,i.useState)(!1),[B,W]=(0,i.useState)(!1),[H,V]=(0,i.useState)(!1),[G,Q]=(0,i.useState)(!1),[Z,Y]=(0,i.useState)(null),[X,ee]=(0,i.useState)({}),[et,es]=(0,i.useState)(!1),[ea,ei]=(0,i.useState)({}),[el,er]=(0,i.useState)(""),[en,eo]=(0,i.useState)(new Set),[ec,ed]=(0,i.useState)(!1),[em,ep]=(0,i.useState)(!1),[ex,eu]=(0,i.useState)([]),[eh,ef]=(0,i.useState)("__none__"),[eg,eb]=(0,i.useState)(!1),[ey,ev]=(0,i.useState)(null),[ej,eN]=(0,i.useState)(""),[ew,ek]=(0,i.useState)("auto"),[eC,eS]=(0,i.useState)({enabled:!1,connections:{}}),[eA,e$]=(0,i.useState)([]),[eT,eI]=(0,i.useState)([]),[eP,eO]=(0,i.useState)(!1),[eE,eR]=(0,i.useState)(""),[eD,e_]=(0,i.useState)(new Set),[ez,eU]=(0,i.useState)([]),[eM,eq]=(0,i.useState)([]),[eK,eL]=(0,i.useState)(null),[eF,eJ]=(0,i.useState)(!1),[eB,eW]=(0,i.useState)(!1),[eH,eV]=(0,i.useState)(!1),[eG,eQ]=(0,i.useState)(null),[eZ,eY]=(0,i.useState)({}),[eX,e0]=(0,i.useState)(null),e1=(0,i.useRef)(!1),[e5,e2]=(0,i.useState)(!1),{copied:e4,copy:e3}=(0,x.C)(),e6="ag_risk_confirmed",e7=()=>{E(!0)},e8=()=>{"antigravity"===r&&"true"!==window.localStorage.getItem(e6)?eJ(!0):tr?e7():(L(""),q(!0))},e9=()=>{L(""),q(!0)},te=()=>{tr?e8():e9()},tt=j?{id:j.id,name:j.name||("anthropic-compatible"===j.type?"Anthropic Compatible":"OpenAI Compatible"),color:"anthropic-compatible"===j.type?"#D97757":"#10A37F",textIcon:"anthropic-compatible"===j.type?"AC":"OC",apiType:j.apiType,baseUrl:j.baseUrl,type:j.type}:d.zN[r]||d.fg[r]||d.IS[r]||d.nJ[r]||d.br[r],ts=j?null:function(e){let t=d.zN[e]?d.zN:d.fg[e]?d.fg:d.IS[e]?d.IS:d.nJ[e]?d.nJ:d.br[e]?d.br:null;if(!t)return null;let s=t[e],a=t===d.IS&&s?.noAuth?"free":t===d.IS||t===d.zN?"oauth":t===d.br?"cookie":t===d.fg&&s?.noAuth?"free":(t===d.fg||d.nJ,"apikey"),i=Array.isArray(s.authModes)?s.authModes.filter(e=>e!==a):[],l=[a,...i],r=(0,d.mq)(e)||(0,d.gb)(e);r&&!l.includes("compatible")&&l.push("compatible");let n=s.notice||{};return{id:e,name:s.name||e,icon:s.icon,image:s.image,textIcon:s.textIcon,color:s.color,tier:t===d.IS?"free":t===d.nJ?"freetier":t===d.zN?"oauth":t===d.br?"webcookie":s?.noAuth?"free":"paid",authModes:l,links:{homepage:s.website,apiKey:n.apiKeyUrl,signup:n.signupUrl,pricing:s.searchViaChat?.pricingUrl,docs:s.docsUrl},features:{autoPing:"claude"===e&&"oauth"===a,bulkImport:"codex"===e,compatibleModels:r,customModels:!s.passthroughModels,passthroughModels:!!s.passthroughModels,hasRegions:Array.isArray(s.regions)&&s.regions.length>0,hasProviderSpecificData:!!s.hasProviderSpecificData},serviceKinds:s.serviceKinds||["llm"],thinking:s.thinkingConfig||null,notices:{body:n.text,warning:s.deprecationNotice},deprecated:!!s.deprecated,regions:s.regions,defaultRegion:s.defaultRegion,noAuth:!!s.noAuth,_raw:s}}(r),ta="codex"===r?"codexAutoPing":"claudeAutoPing",ti="claude"===r||"codex"===r,tl=tt?.authModes||[],tr=!!d.zN[r]||!!d.IS[r]||tl.includes("oauth"),tn=!!d.fg[r]||tl.includes("apikey"),to=!!d.IS[r]?.noAuth,tc=(0,m.KC)(r),td=(0,d.wG)(r),tm=(0,d.mq)(r),tp=(0,d.gb)(r),tx=tm||tp,tu=!tx&&tr&&tn,th="xai"===r?"Grok Build OAuth":"OAuth",tf="xai"===r?"xAI API Key":"API Key";d.Q2[r]?.thinkingConfig||d.s9.extended;let tg=tx?r:td,tb=tx?j?.prefix||r:td,ty=(0,i.useCallback)(async()=>{try{let e=await fetch(`/api/models/disabled?providerAlias=${encodeURIComponent(tg)}`,{cache:"no-store"}),t=await e.json();e.ok&&eq(t.ids||[])}catch(e){console.log("Error fetching disabled models:",e)}},[tg]),tv=async e=>{try{(await fetch("/api/models/disabled",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerAlias:tg,ids:[e]})})).ok&&await ty()}catch(e){console.log("Error disabling model:",e)}},tj=async e=>{try{(await fetch(`/api/models/disabled?providerAlias=${encodeURIComponent(tg)}&id=${encodeURIComponent(e)}`,{method:"DELETE"})).ok&&await ty()}catch(e){console.log("Error enabling model:",e)}},tN="opencode-go"===r,[tw,tk]=(0,i.useState)({}),[tC,tS]=(0,i.useState)(new Set),tA=async(e,t)=>{let s=s=>Object.fromEntries(Object.entries({...s,[e]:t}).filter(([,e])=>e&&"auto"!==e));tk(e=>s(e)),tS(t=>new Set([...t,e]));try{let e=await fetch("/api/settings",{cache:"no-store"});if(!e.ok)throw Error(`HTTP ${e.status}`);let t=(await e.json()).providerModelTransports||{},a={...t,[r]:s(t[r]||{})},i=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerModelTransports:a})});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.error||`HTTP ${i.status}`)}let l=await i.json().catch(()=>null);tk(l?.providerModelTransports?.[r]||a[r])}catch(e){tk(tw),alert((0,u.Tl)("Failed to save protocol")+": "+e.message)}finally{tS(t=>new Set([...t].filter(t=>t!==e)))}},t$=e=>tN&&h.length>0?{protocol:tw[e],defaultProtocol:(0,p.vV)(r,e),onProtocolChange:t=>tA(e,t),isSavingProtocol:tC.has(e)}:{},tT=async e=>{e.length&&eL({title:"Disable All Models",message:`Disable all ${e.length} model(s)?`,onConfirm:async()=>{eL(null);try{(await fetch("/api/models/disabled",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerAlias:tg,ids:e})})).ok&&await ty()}catch(e){console.log("Error disabling all models:",e)}}})},tI=async()=>{try{(await fetch(`/api/models/disabled?providerAlias=${encodeURIComponent(tg)}`,{method:"DELETE"})).ok&&await ty()}catch(e){console.log("Error enabling all models:",e)}},tP=(0,i.useCallback)(async()=>{try{let e=await fetch("/api/models/alias"),t=await e.json();e.ok&&ee(t.aliases||{})}catch(e){console.log("Error fetching aliases:",e)}},[]);(0,i.useEffect)(()=>{"kilocode"===r&&fetch("/api/providers/kilo/free-models").then(e=>e.json()).then(e=>{e.models?.length&&eU(e.models)}).catch(()=>{})},[r]);let tO=(0,i.useCallback)(async()=>{try{let[e,t,s,a]=await Promise.all([fetch("/api/providers",{cache:"no-store"}),fetch("/api/provider-nodes",{cache:"no-store"}),fetch("/api/proxy-pools?isActive=true",{cache:"no-store"}),fetch("/api/settings",{cache:"no-store"})]),i=await e.json(),l=await t.json(),n=await s.json(),o=a.ok?await a.json():{};if(e.ok){let e=(i.connections||[]).filter(e=>e.provider===r);g(e)}s.ok&&T(n.proxyPools||[]);let c=(o.providerStrategies||{})[r]||{};ev(c.fallbackStrategy||null),eN(null!=c.stickyRoundRobinLimit?String(c.stickyRoundRobinLimit):"1"),tk((o.providerModelTransports||{})[r]||{});let d=(o.providerThinking||{})[r]||{};ek(d.mode||"auto");let m=o[ta]||{};if(eS({enabled:!0===m.enabled,connections:m.connections||{}}),t.ok){let e=(l.nodes||[]).find(e=>e.id===r)||null;if(!e&&tx)for(let t=0;t<3;t+=1){await new Promise(e=>setTimeout(e,150));let t=await fetch("/api/provider-nodes",{cache:"no-store"});if(t.ok&&(e=((await t.json()).nodes||[]).find(e=>e.id===r)||null))break}w(e)}}catch(e){console.log("Error fetching connections:",e)}finally{y(!1)}},[r,tx]),tE=async e=>{try{let t=await fetch(`/api/provider-nodes/${r}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),s=await t.json();t.ok&&(w(s.node),await tO(),V(!1))}catch(e){console.log("Error updating provider node:",e)}},tR=async(e,t)=>{try{let s=await fetch("/api/settings",{cache:"no-store"}),a=(s.ok?await s.json():{}).providerStrategies||{},i={};e&&(i.fallbackStrategy=e),"round-robin"===e&&""!==t&&(i.stickyRoundRobinLimit=Number(t)||3);let l={...a};0===Object.keys(i).length?delete l[r]:l[r]=i,await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerStrategies:l})})}catch(e){console.log("Error saving provider strategy:",e)}},tD=async(e,t)=>{eS({...eC,connections:{...eC.connections,[e]:t}});try{let s=await fetch("/api/settings",{cache:"no-store"}),a=(s.ok?await s.json():{})[ta]||{},i={...a,connections:{...a.connections||{},[e]:t}};await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({[ta]:i})}),eS({enabled:!0===i.enabled,connections:i.connections})}catch(e){console.log("Error saving auto-ping config:",e),eS(eC)}};(0,i.useEffect)(()=>{tO(),tP(),ty()},[tO,tP,ty]);let[t_,tz]=(0,i.useState)({});(0,i.useEffect)(()=>{let e=!1,t=async()=>{try{let t=await fetch("/api/providers/health",{cache:"no-store"});if(!t.ok)return;let s=await t.json();!e&&s?.success&&s.snapshot&&tz(s.snapshot)}catch{}};t();let s=setInterval(t,1e4);return()=>{e=!0,clearInterval(s)}},[]),(0,i.useEffect)(()=>{let e=(d.zN[r]||d.fg[r]||d.IS[r]||d.nJ[r])?.modelsFetcher;e&&f(e).then(e$)},[r]);let tU=(0,i.useCallback)(async()=>{if(0===h.length)return;let e=h.find(e=>!1!==e.isActive)||h[0];if(e){eO(!0);try{let t=null;try{let s=await fetch(`/api/models/live-by-connection?connectionId=${e.id}`),a=s.ok?await s.json():null;a?.success&&a?.models?.length?t={models:a.models}:a?.code==="no_fetcher"&&(t=null)}catch{}if(!t){let s=await fetch(`/api/providers/${e.id}/models`);t=s.ok?await s.json():null}t?.models?.length&&(eI(t.models),e_(e=>{if(e.size>0)return e;let s=t.models[0]?.id||"";return new Set([s.includes("/")?s.split("/")[0]:"other"])}))}catch{}finally{eO(!1)}}},[r,h]);(0,i.useEffect)(()=>{tU()},[tU]);let tM=async(e,t,s=td)=>{let a=`${s}/${e}`;try{let e=await fetch("/api/models/alias",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:a,alias:t})});if(e.ok)await tP();else{let t=await e.json();alert(t.error||"Failed to set alias")}}catch(e){console.log("Error setting alias:",e)}},tq=async e=>{try{(await fetch(`/api/models/alias?alias=${encodeURIComponent(e)}`,{method:"DELETE"})).ok&&await tP()}catch(e){console.log("Error deleting alias:",e)}},tK=async()=>{if(e5)return;let e=h.find(e=>!1!==e.isActive);if(!e)return void alert((0,u.Tl)("Please add an active Qoder connection first"));e2(!0);try{let t=await fetch(`/api/providers/${e.id}/models`),s=await t.json();if(!t.ok)return void alert(s.error||(0,u.Tl)("Failed to fetch models"));let a=s.models||[];if(0===a.length)return void alert((0,u.Tl)("No models returned"));let i=0;for(let e of a){let t=e.id||e.name;if(!t)continue;let s=t.replace(/^qoder\//,""),a=`${tg}/${s}`;!Object.values(X).includes(a)&&(X[s]||(await tM(s,s,tg),i+=1))}0===i?alert((0,u.Tl)("All models already exist, no new models added")):alert((0,u.Tl)("Successfully added")+` ${i} `+(0,u.Tl)("models"))}catch(e){console.log("Error importing Qoder models:",e),alert((0,u.Tl)("Error fetching models")+": "+e.message)}finally{e2(!1)}},tL=async()=>{if(eB||0===h.length)return;let e=Object.fromEntries(h.map(e=>[e.id,{state:"queued",error:null}]));e1.current=!1,eW(!0),eV(!1),eQ(null),eY(e),e0({total:h.length,completed:0,passed:0,failed:0,stopped:!1});let t=0,s=0;try{for(let e=0;e<h.length;e+=1){if(e1.current){e0({total:h.length,completed:e,passed:t,failed:s,stopped:!0});break}let a=h[e];eQ(a.id),eY(e=>({...e,[a.id]:{state:"testing",error:null}}));try{let e=await fetch(`/api/providers/${a.id}/test`,{method:"POST"}),i=await e.json(),l=!!i.valid;l?t+=1:s+=1,eY(e=>({...e,[a.id]:{state:l?"success":"failed",error:l?null:i.error||null}}))}catch(e){s+=1,eY(t=>({...t,[a.id]:{state:"failed",error:e.message||"Test failed"}}))}e0({total:h.length,completed:e+1,passed:t,failed:s,stopped:!1}),e<h.length-1&&await new Promise(e=>setTimeout(e,1e3))}}finally{eQ(null),eW(!1),eV(!1),e1.current=!1}},tF=async e=>{eL({title:"Delete Connection",message:"Delete this connection?",onConfirm:async()=>{eL(null);try{(await fetch(`/api/providers/${e}`,{method:"DELETE"})).ok&&g(t=>t.filter(t=>t.id!==e))}catch(e){console.log("Error deleting connection:",e)}}})},tJ=()=>{tO(),E(!1)},tB=async e=>{L("");try{let t=await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:r,...e})}),s=null;try{s=await t.json()}catch{s=null}if(t.ok){await tO(),q(!1);return}L(s?.error||"Failed to save connection")}catch(e){console.log("Error saving connection:",e),L("Failed to save connection")}},tW=async e=>{try{(await fetch(`/api/providers/${Z.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).ok&&(await tO(),W(!1))}catch(e){console.log("Error updating connection:",e)}},tH=async(e,t)=>{try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})})).ok&&g(s=>s.map(s=>s.id===e?{...s,isActive:t}:s))}catch(e){console.log("Error updating connection status:",e)}},tV=async(e,t)=>{let s=[...h];[s[e],s[t]]=[s[t],s[e]],g(s);try{await Promise.all([fetch(`/api/providers/${s[e].id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({priority:e})}),fetch(`/api/providers/${s[t].id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({priority:t})})])}catch(e){console.log("Error swapping priority:",e),await tO()}},tG=h.filter(e=>ex.includes(e.id));h.length>0&&(ex.length,h.length),(0,i.useEffect)(()=>{eu(e=>e.filter(e=>h.some(t=>t.id===e)))},[h]),(()=>{if(0===tG.length)return;let e=new Set(tG.map(e=>e.providerSpecificData?.proxyPoolId||"__none__"));if(1===e.size){let t=[...e][0];if("__none__"===t)return;let s=C.find(e=>e.id===t);return s?.name}})();let tQ=()=>{eg||Q(!1)},tZ=async e=>{eb(!0);try{let t=0;for(let{connectionId:s,proxyPoolId:a}of e)try{(await fetch(`/api/providers/${s}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({proxyPoolId:a})})).ok||(t+=1)}catch(e){console.log("Error applying proxy for",s,e),t+=1}t>0&&alert(`Updated with ${t} failed request(s).`),await tO(),Q(!1)}finally{eb(!1)}},tY=e=>tZ(h.map(t=>({connectionId:t.id,proxyPoolId:e}))),tX=(0,a.jsx)("div",{className:"flex min-w-0 flex-col divide-y divide-black/[0.03] dark:divide-white/[0.03]",children:h.map((e,t)=>(0,a.jsx)("div",{className:"flex min-w-0 items-stretch",children:(0,a.jsx)("div",{className:"flex-1 min-w-0",children:(0,a.jsx)(k,{connection:e,proxyPools:C,health:t_[e.id],isOAuth:tr,isFirst:0===t,isLast:t===h.length-1,onMoveUp:()=>tV(t,t-1),onMoveDown:()=>tV(t,t+1),onToggleActive:t=>tH(e.id,t),autoPing:ti&&"oauth"===e.authType?{on:!0===eC.connections[e.id],onToggle:t=>tD(e.id,t)}:null,onUpdateProxy:async t=>{try{(await fetch(`/api/providers/${e.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({proxyPoolId:t||null})})).ok&&g(s=>s.map(s=>s.id===e.id?{...s,providerSpecificData:{...s.providerSpecificData,proxyPoolId:t||null}}:s))}catch(e){console.log("Error updating proxy:",e)}},onEdit:()=>{Y(e),W(!0)},onDelete:()=>tF(e.id),oneByOneStatus:eZ[e.id]||null})})},e.id))}),t0=C.filter(e=>!0===e.isActive),t1=(0,a.jsx)(c.aF,{isOpen:G,onClose:tQ,title:`Apply Proxy (${h.length} connections)`,children:(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,a.jsxs)("div",{className:"flex flex-col",children:[(0,a.jsxs)("button",{onClick:()=>{let e=C.filter(e=>!0===e.isActive);return 0===e.length?void alert("No active proxy pools available."):tZ(h.map((t,s)=>({connectionId:t.id,proxyPoolId:e[s%e.length].id})))},disabled:eg||0===t0.length,className:"flex items-center gap-2 rounded-lg px-3 py-2 text-left transition-colors hover:bg-black/[0.04] dark:hover:bg-white/[0.04] disabled:cursor-not-allowed disabled:opacity-50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[18px]",children:"sync_alt"}),(0,a.jsx)("span",{className:"text-sm text-text-main",children:"One-to-one (rotate)"})]}),(0,a.jsxs)("button",{onClick:()=>tY(null),disabled:eg,className:"flex items-center gap-2 rounded-lg px-3 py-2 text-left transition-colors hover:bg-black/[0.04] dark:hover:bg-white/[0.04] disabled:cursor-not-allowed disabled:opacity-50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[18px]",children:"link_off"}),(0,a.jsx)("span",{className:"text-sm text-text-main",children:"None (unbind all)"})]}),C.map(e=>(0,a.jsxs)("button",{onClick:()=>tY(e.id),disabled:eg||!0!==e.isActive,className:"flex items-center gap-2 rounded-lg px-3 py-2 text-left transition-colors hover:bg-black/[0.04] dark:hover:bg-white/[0.04] disabled:cursor-not-allowed disabled:opacity-50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[18px]",children:"lan"}),(0,a.jsx)("span",{className:"truncate text-sm text-text-main",children:e.name}),!0!==e.isActive&&(0,a.jsx)("span",{className:"text-[10px] text-text-muted",children:"(inactive)"})]},e.id))]}),eg&&(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Applying..."}),(0,a.jsx)(c.$n,{onClick:tQ,variant:"ghost",fullWidth:!0,disabled:eg,children:"Cancel"})]})}),t5=async e=>{if(!en.has(e)){eo(t=>new Set([...t,e]));try{let t=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${tg}/${e}`})}),s=await t.json();ei(t=>({...t,[e]:s.ok?"ok":"error"})),s.ok||er(s.error||"Model not reachable")}catch{ei(t=>({...t,[e]:"error"}))}finally{eo(t=>{let s=new Set(t);return s.delete(e),s})}}},t2=async e=>{if(ec)return;ed(!0);let t=[];try{for(let s=0;s<e.length;s+=5){let a=e.slice(s,s+5);await Promise.all(a.map(async e=>{eo(t=>new Set([...t,e.id]));try{let s=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${tg}/${e.id}`})}),a=await s.json(),i=a.ok?"ok":"error";ei(t=>({...t,[e.id]:i})),a.ok&&t.push(e)}catch{ei(t=>({...t,[e.id]:"error"}))}finally{eo(t=>{let s=new Set(t);return s.delete(e.id),s})}}))}for(let e of t)await tM(e.id,e.id,tg);t.length>0&&document.getElementById("available-models-section")?.scrollIntoView({behavior:"smooth"})}finally{ed(!1)}};if(b)return(0,a.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,a.jsx)(c.Qv,{}),(0,a.jsx)(c.Qv,{})]});if(!tt)return(0,a.jsxs)("div",{className:"text-center py-20",children:[(0,a.jsx)("p",{className:"text-text-muted",children:"Provider not found"}),(0,a.jsx)(n(),{href:"/dashboard/providers",className:"text-primary mt-4 inline-block",children:"Back to Providers"})]});let t4=()=>tm&&tt.apiType?"responses"===tt.apiType?"/providers/oai-r.png":"/providers/oai-cc.png":tp?"/providers/anthropic-m.png":`/providers/${tt.id}.png`;return(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-6 px-1 sm:gap-8 sm:px-0",children:[ts?(0,a.jsx)(O,{capabilities:ts,connectionCount:h.length,headerIconPath:et?null:t4()}):(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)(n(),{href:"/dashboard/providers",className:"inline-flex items-center gap-1 text-sm text-text-muted hover:text-primary transition-colors mb-4",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-lg",children:"arrow_back"}),"Back to Providers"]}),(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-3 sm:gap-4",children:[(0,a.jsx)("div",{className:"flex size-12 shrink-0 items-center justify-center rounded-lg",style:{backgroundColor:`${tt.color}15`},children:et?(0,a.jsx)("span",{className:"text-sm font-bold",style:{color:tt.color},children:tt.textIcon||tt.id.slice(0,2).toUpperCase()}):(0,a.jsx)(o.A,{src:t4(),alt:tt.name,width:48,height:48,className:"max-h-12 max-w-12 rounded-lg object-contain",sizes:"48px",onError:()=>es(!0)})}),(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("h1",{className:"truncate text-2xl font-semibold tracking-tight sm:text-3xl",children:tt.name}),(0,a.jsxs)("p",{className:"text-text-muted",children:[h.length," connection",1===h.length?"":"s"]})]})]})]}),tx&&j&&(0,a.jsx)(c.Zp,{children:(0,a.jsxs)("div",{className:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("h2",{className:"text-lg font-semibold",children:tp?"Anthropic Compatible Details":"OpenAI Compatible Details"}),(0,a.jsxs)("p",{className:"break-all text-sm text-text-muted",children:[tp?"Messages API":"responses"===j.apiType?"Responses API":"Chat Completions"," \xb7 ",(j.baseUrl||"").replace(/\/$/,""),"/",tp?"messages":"responses"===j.apiType?"responses":"chat/completions"]})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-2 sm:flex sm:items-center",children:[(0,a.jsx)(c.$n,{size:"sm",icon:"add",onClick:()=>{L(""),q(!0)},className:"w-full sm:w-auto",children:"Add API Key"}),(0,a.jsx)(c.$n,{size:"sm",variant:"secondary",icon:"edit",onClick:()=>V(!0),className:"w-full sm:w-auto",children:"Edit"}),(0,a.jsx)(c.$n,{size:"sm",variant:"secondary",icon:"delete",onClick:async()=>{eL({title:"Delete Compatible Node",message:`Delete this ${tp?"Anthropic":"OpenAI"} Compatible node?`,onConfirm:async()=>{eL(null);try{(await fetch(`/api/provider-nodes/${r}`,{method:"DELETE"})).ok&&s.push("/dashboard/providers")}catch(e){console.log("Error deleting provider node:",e)}}})},className:"w-full sm:w-auto",children:"Delete"})]})]})}),to?(0,a.jsx)(c.gw,{providerId:r}):(0,a.jsxs)(c.Zp,{children:[(0,a.jsxs)("div",{className:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsx)("h2",{className:"text-lg font-semibold",children:"Connections"}),(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:gap-4",children:[h.length>0&&C.length>0&&(0,a.jsx)(c.$n,{size:"sm",variant:"secondary",icon:"lan",onClick:()=>Q(!0),children:"Apply Proxy"}),ex.length>0&&(0,a.jsxs)(c.$n,{size:"sm",variant:"danger",icon:"delete",onClick:()=>{let e=ex.length;0!==e&&eL({title:`Delete ${e} Connection${e>1?"s":""}`,message:`Delete ${e} connection${e>1?"s":""}? This cannot be undone.`,onConfirm:async()=>{eL(null);let e=0,t=[...ex],s=[];for(let a of t)try{(await fetch(`/api/providers/${a}`,{method:"DELETE"})).ok?s.push(a):e+=1}catch(t){console.log("Error deleting connection:",t),e+=1}g(e=>e.filter(e=>!s.includes(e.id))),eu(t.filter(e=>!s.includes(e))),e>0&&alert(`Deleted ${s.length} connection(s), ${e} failed and are still selected.`)}})},children:["Delete Selected (",ex.length,")"]}),h.length>0&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(c.$n,{size:"sm",variant:"secondary",icon:"sync",onClick:tL,disabled:eB,children:eB?"Testing Connection One-by-One...":"Test Connection One-by-One"}),eB&&(0,a.jsx)(c.$n,{size:"sm",variant:"ghost",icon:"stop",onClick:()=>{eB&&(e1.current=!0,eV(!0))},disabled:eH,children:eH?"Stopping...":"Stop"})]}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsx)("span",{className:"text-xs text-text-muted font-medium",children:"Round Robin"}),(0,a.jsx)(c.lM,{checked:"round-robin"===ey,onChange:e=>{let t=e?"round-robin":null,s=e?ej||"1":ej;e&&!ej&&eN("1"),ev(t),tR(t,s)}}),"round-robin"===ey&&(0,a.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,a.jsx)("span",{className:"text-xs text-text-muted",children:"Sticky:"}),(0,a.jsx)("input",{type:"number",min:1,value:ej,onChange:e=>{var t;eN(t=e.target.value),tR("round-robin",t)},placeholder:"1",className:"w-14 px-2 py-1 text-xs border border-border rounded-md bg-background focus:outline-none focus:border-primary"})]})]})]})]}),0===h.length?ts?(0,a.jsx)(_,{capabilities:ts,onOAuth:e8,onApiKey:e9,onFree:te,onCookie:()=>D(!0),onCompatible:e9,onBulkImport:()=>J(!0)}):(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)("div",{className:"inline-flex items-center justify-center w-9 h-9 rounded-full bg-primary/10 text-primary shrink-0",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"key"})}),(0,a.jsx)("p",{className:"text-sm text-text-muted",children:"No connections yet"})]}),(0,a.jsx)(c.$n,{size:"sm",icon:"add",onClick:te,children:"Add API Key"})]}):(0,a.jsxs)(a.Fragment,{children:[eX&&(0,a.jsx)("div",{className:"mb-4 rounded-lg border border-black/10 bg-black/[0.02] px-3 py-2 text-xs text-text-muted dark:border-white/10 dark:bg-white/[0.03]",children:(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,a.jsxs)("span",{children:["Total: ",eX.total]}),(0,a.jsxs)("span",{children:["Completed: ",eX.completed]}),(0,a.jsxs)("span",{children:["Passed: ",eX.passed]}),(0,a.jsxs)("span",{children:["Failed: ",eX.failed]}),eX.stopped&&(0,a.jsx)("span",{className:"text-amber-600 dark:text-amber-400",children:"Stopped"}),eB&&eG&&(0,a.jsxs)("span",{children:["Running: ",h.find(e=>e.id===eG)?.name||eG]})]})}),!tx&&ts&&(0,a.jsx)(z,{providerId:r,models:eT}),tX,!tx&&ts&&(0,a.jsx)(U,{providerId:r}),!tx&&(0,a.jsxs)("div",{className:"mt-4 grid grid-cols-1 gap-2 sm:flex",children:["iflow"===r&&(0,a.jsx)(c.$n,{size:"sm",icon:"cookie",variant:"secondary",onClick:()=>D(!0),title:"Add connection using browser cookie",className:"w-full sm:w-auto",children:"Cookie"}),"codex"===r&&(0,a.jsx)(c.$n,{size:"sm",icon:"playlist_add",variant:"secondary",onClick:()=>J(!0),title:(0,u.Tl)("Bulk import codex accounts from JSON"),className:"w-full sm:w-auto",children:(0,u.Tl)("Bulk Add")}),tu?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(c.$n,{size:"sm",icon:"lock",variant:"secondary",onClick:e8,className:"w-full sm:w-auto",children:th}),(0,a.jsx)(c.$n,{size:"sm",icon:"key",onClick:e9,className:"w-full sm:w-auto",children:tf})]}):(0,a.jsx)(c.$n,{size:"sm",icon:"add",onClick:te,className:"w-full sm:w-auto",children:"Add"})]})]})]}),(0,a.jsxs)(c.Zp,{id:"available-models-section",children:[(0,a.jsxs)("div",{className:"mb-4 flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsx)("h2",{className:"text-lg font-semibold",children:"Available Models"}),!tx&&(e=[...tc,...ez.filter(e=>!tc.some(t=>t.id===e.id))].filter(e=>!e.type||"llm"===e.type).map(e=>e.id).filter(e=>!eM.includes(e)),(0,a.jsxs)("div",{className:"flex gap-2",children:[eM.length>0&&(0,a.jsx)(c.$n,{size:"sm",variant:"secondary",icon:"restart_alt",onClick:tI,children:"Active All"}),e.length>0&&(0,a.jsx)(c.$n,{size:"sm",variant:"secondary",icon:"block",onClick:()=>tT(e),children:"Disable All"})]}))]}),!!el&&(0,a.jsx)("p",{className:"text-xs text-red-500 mb-3 break-words",children:el}),(()=>{if(tx)return(0,a.jsx)(N,{providerStorageAlias:tg,providerDisplayAlias:tb,modelAliases:X,copied:e4,onCopy:e3,onSetAlias:tM,onDeleteAlias:tq,connections:h,isAnthropic:tp});let e=[...tc,...ez.filter(e=>!tc.some(t=>t.id===e.id))].filter(e=>!e.type||"llm"===e.type),t=new Set(eM),s=e.filter(e=>!t.has(e.id)),i=e.filter(e=>t.has(e.id)),l=Object.entries(X).filter(([e,t])=>{let s=`${tg}/`;if(!t.startsWith(s))return!1;let a=t.slice(s.length);return tt.passthroughModels?!tc.some(e=>e.id===a):!tc.some(e=>e.id===a)&&e===a}).map(([e,t])=>({id:t.slice(`${tg}/`.length),alias:e,fullModel:t}));return(0,a.jsxs)("div",{className:"flex flex-wrap gap-3",children:[l.map(e=>(0,a.jsx)(v,{model:{id:e.id},fullModel:`${tb}/${e.id}`,alias:e.alias,copied:e4,onCopy:e3,onSetAlias:()=>{},onDeleteAlias:()=>tq(e.alias),testStatus:ea[e.id],onTest:h.length>0||to?()=>t5(e.id):void 0,isTesting:en.has(e.id),isCustom:!0,isFree:!1,...t$(e.id)},e.id)),s.map(e=>{let t=`${tg}/${e.id}`,s=`${r}/${e.id}`,i=Object.entries(X).find(([,e])=>e===t||e===s)?.[0];return(0,a.jsx)(v,{model:e,fullModel:`${tb}/${e.id}`,alias:i,copied:e4,onCopy:e3,onSetAlias:t=>tM(e.id,t,tg),onDeleteAlias:()=>tq(i),testStatus:ea[e.id],onTest:h.length>0||to?()=>t5(e.id):void 0,isTesting:en.has(e.id),isFree:e.isFree,onDisable:()=>tv(e.id),...t$(e.id)},e.id)}),(0,a.jsxs)("button",{onClick:()=>ep(!0),className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-dashed border-primary/40 px-3 py-2 text-xs text-primary transition-colors hover:border-primary hover:bg-primary/5 sm:w-auto",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",children:"add"}),"Add Model"]}),"qoder"===r&&h.some(e=>!1!==e.isActive)&&(0,a.jsxs)("button",{onClick:tK,disabled:e5,className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-dashed border-blue-500/40 px-3 py-2 text-xs text-blue-600 dark:text-blue-400 transition-colors hover:border-blue-500 hover:bg-blue-500/5 sm:w-auto disabled:opacity-50 disabled:cursor-not-allowed",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",style:e5?{animation:"spin 1s linear infinite"}:void 0,children:e5?"progress_activity":"download"}),e5?(0,u.Tl)("Fetching..."):(0,u.Tl)("Fetch Qoder Models")]}),(()=>{let e=new Set([...s.map(e=>e.id),...l.map(e=>e.id)]),t=eT.length>0?eT:eA,r=eT.length>0,n=t.filter(t=>t.id&&!e.has(t.id)),o=new Set(eT.map(e=>e.id).filter(Boolean)),c=i.filter(e=>e.id&&!o.has(e.id)).map(e=>({...e,dropped:!0})),d=new Set(c.map(e=>e.id)),m=[...n.filter(e=>!d.has(e.id)),...c];if(!eP&&0===m.length&&0===t.length)return null;let p=eE.trim().toLowerCase(),x=p?m.filter(e=>e.id.toLowerCase().includes(p)||e.name&&e.name.toLowerCase().includes(p)):m,u={};x.forEach(e=>{if(!e.id)return;let t=e.id.includes("/")?e.id.split("/")[0]:"models";u[t]||(u[t]=[]),u[t].push(e)});let h=Object.entries(u).sort((e,t)=>t[1].length-e[1].length),f=x.filter(e=>!e.dropped).slice(0,50);return(0,a.jsxs)("div",{className:"w-full mt-4 space-y-2",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"text-xs font-medium text-text-muted shrink-0",children:eP?"Loading...":`${r?"From API":"Suggested"} (${n.length})${c.length>0?` \xb7 ${c.length} dropped`:""}`}),(0,a.jsxs)("div",{className:"relative flex-1 min-w-0",children:[(0,a.jsx)("span",{className:"material-symbols-outlined absolute left-2.5 top-1/2 -translate-y-1/2 text-[13px] text-text-muted pointer-events-none select-none",children:"search"}),(0,a.jsx)("input",{type:"text",value:eE,onChange:e=>eR(e.target.value),placeholder:"Search models...",className:"w-full h-7 pl-7 pr-7 text-xs rounded-lg bg-bg border border-border-subtle text-text-main placeholder:text-text-muted focus:outline-none focus:ring-1 focus:ring-primary/30 focus:border-primary/40 transition-colors"}),eE&&(0,a.jsx)("button",{onClick:()=>eR(""),className:"absolute right-2 top-1/2 -translate-y-1/2 text-text-muted hover:text-text-muted transition-colors",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[13px]",children:"close"})})]}),(0,a.jsx)("button",{onClick:tU,disabled:eP,title:"Refresh",className:"shrink-0 h-7 w-7 flex items-center justify-center rounded-lg border border-border-subtle text-text-muted hover:text-primary hover:border-primary/40 hover:bg-primary/5 transition-colors disabled:opacity-40",children:(0,a.jsx)("span",{className:`material-symbols-outlined text-[14px] ${eP?"animate-spin":""}`,children:"refresh"})}),!eP&&f.length>0&&(0,a.jsxs)("button",{onClick:()=>t2(f),disabled:ec,title:`Test up to ${f.length} models and auto-add passing ones`,className:"shrink-0 h-7 flex items-center gap-1 px-2.5 rounded-lg border border-border-subtle text-xs text-text-muted hover:text-green-600 hover:border-green-500/40 hover:bg-green-500/5 transition-colors disabled:opacity-40",children:[(0,a.jsx)("span",{className:`material-symbols-outlined text-[13px] ${ec?"animate-spin":""}`,children:ec?"progress_activity":"play_circle"}),ec?"Testing...":"Test All"]})]}),p&&(0,a.jsxs)("p",{className:"text-xs text-text-muted",children:[x.length," result",1!==x.length?"s":""]}),eP?(0,a.jsxs)("div",{className:"flex items-center gap-2 py-4 text-xs text-text-muted",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[15px] animate-spin",children:"progress_activity"}),"Fetching models from provider API..."]}):0===h.length?p?(0,a.jsxs)("p",{className:"text-xs text-text-muted py-2",children:['No models match "',eE,'"']}):null:(0,a.jsx)("div",{className:"space-y-1",children:h.map(([e,t])=>{let s=eD.has(e),i=t.filter(e=>!e.dropped&&"ok"===ea[e.id]).length,l=t.filter(e=>!e.dropped&&"error"===ea[e.id]).length,r=t.filter(e=>e.dropped).length;return(0,a.jsxs)("div",{className:"rounded-xl border border-border-subtle overflow-hidden",children:[(0,a.jsxs)("button",{onClick:()=>e_(t=>{let s=new Set(t);return s.has(e)?s.delete(e):s.add(e),s}),className:"w-full flex items-center gap-2 px-3 py-2 text-xs bg-bg hover:bg-surface-2/60 transition-colors text-left",children:[(0,a.jsx)("span",{className:"font-semibold text-text-main flex-1",children:e}),i>0&&(0,a.jsxs)("span",{className:"text-green-600 dark:text-green-400 font-medium",children:[i," ✓"]}),l>0&&(0,a.jsxs)("span",{className:"text-red-500 font-medium",children:[l," ✗"]}),r>0&&(0,a.jsxs)("span",{className:"px-1.5 py-0.5 rounded-md bg-amber-500/10 text-amber-600 dark:text-amber-400 text-[10px] font-medium",children:[r," dropped"]}),(0,a.jsx)("span",{className:"px-1.5 py-0.5 rounded-md bg-black/[0.06] dark:bg-white/[0.06] text-text-muted tabular-nums font-medium",children:t.length}),(0,a.jsx)("span",{className:"material-symbols-outlined text-[15px] text-text-muted",children:s?"expand_less":"expand_more"})]}),s&&(0,a.jsx)("div",{className:"px-3 pt-2 pb-3 flex flex-wrap gap-1.5 border-t border-border-subtle bg-surface/50",children:t.map(e=>{let t=e.id.includes("/")?e.id.split("/").slice(1).join("/"):e.id,s=ea[e.id],i=en.has(e.id);return e.dropped?(0,a.jsxs)("button",{onClick:async()=>{await tj(e.id),document.getElementById("available-models-section")?.scrollIntoView({behavior:"smooth"})},title:`Recently Dropped — click to restore: ${e.id}`,className:"group flex items-center gap-1 px-2.5 py-1.5 rounded-lg border border-amber-400/40 bg-amber-500/5 text-amber-700 dark:text-amber-400 text-xs hover:bg-amber-500/10 hover:border-amber-400/60 transition-colors",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"history"}),(0,a.jsx)("span",{children:t}),e.contextLength>0&&(0,a.jsxs)("span",{className:"opacity-50 text-[10px] ml-0.5",children:[(e.contextLength/1e3).toFixed(0),"k"]})]},e.id):(0,a.jsxs)("button",{onClick:async()=>{await tM(e.id,e.id,tg),document.getElementById("available-models-section")?.scrollIntoView({behavior:"smooth"})},title:`Add: ${e.name||e.id}`,className:["group flex items-center gap-1 px-2.5 py-1.5 rounded-lg border text-xs transition-colors","ok"===s?"border-green-500/30 bg-green-500/5 text-green-700 dark:text-green-400 hover:bg-green-500/10":"error"===s?"border-red-400/30 bg-red-500/5 text-red-600 dark:text-red-400 hover:bg-red-500/10":"border-border-subtle text-text-muted hover:text-primary hover:border-primary/40 hover:bg-primary/5"].join(" "),children:[i?(0,a.jsx)("span",{className:"material-symbols-outlined text-[12px] animate-spin",children:"progress_activity"}):"ok"===s?(0,a.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"check"}):"error"===s?(0,a.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"close"}):(0,a.jsx)("span",{className:"material-symbols-outlined text-[12px] opacity-50 group-hover:opacity-100",children:"add"}),(0,a.jsx)("span",{children:t}),e.contextLength>0&&(0,a.jsxs)("span",{className:"opacity-40 text-[10px] ml-0.5",children:[(e.contextLength/1e3).toFixed(0),"k"]})]},e.id)})})]},e)})})]})})()]})})()]}),t1,"kiro"===r?(0,a.jsx)(c.Mh,{isOpen:P,providerInfo:tt,onSuccess:tJ,onClose:()=>E(!1)}):"cursor"===r?(0,a.jsx)(c.G9,{isOpen:P,onSuccess:tJ,onClose:()=>E(!1)}):"gitlab"===r?(0,a.jsx)(c.vj,{isOpen:P,providerInfo:tt,onSuccess:tJ,onClose:()=>E(!1)}):(0,a.jsx)(c.LF,{isOpen:P,provider:r,providerInfo:tt,onSuccess:tJ,onClose:()=>E(!1)}),"iflow"===r&&(0,a.jsx)(c.vE,{isOpen:R,onSuccess:()=>{tO(),D(!1)},onClose:()=>D(!1)}),(0,a.jsx)(S,{isOpen:M,provider:r,providerName:tt.name,isCompatible:tx,isAnthropic:tp,authType:tt?.authType,authHint:tt?.authHint,website:tt?.website,proxyPools:C,error:K,existingNames:h.map(e=>e.name).filter(Boolean),onSave:tB,onBulkDone:tO,onClose:()=>{L(""),q(!1)}}),(0,a.jsx)(c.wI,{isOpen:B,connection:Z,proxyPools:C,onSave:tW,onClose:()=>W(!1)}),tx&&(0,a.jsx)(A,{isOpen:H,node:j,onSave:tE,onClose:()=>V(!1),isAnthropic:tp}),!tx&&(0,a.jsx)($,{isOpen:em,providerAlias:tg,providerDisplayAlias:tb,onSave:async e=>{let t=tt?.passthroughModels?e.split("/").pop():e;await tM(e,t,tg),ep(!1)},onClose:()=>ep(!1)}),"codex"===r&&(0,a.jsx)(I,{isOpen:F,onClose:()=>J(!1),onSuccess:tO}),(0,a.jsx)(c.uo,{isOpen:eF,onClose:()=>eJ(!1),onConfirm:()=>{(window.localStorage.setItem(e6,"true"),eJ(!1),tr)?e7():e9()},title:"Risk Notice",message:tt?.deprecationNotice,confirmText:"I Understand, Continue",cancelText:"Cancel",variant:"danger"}),(0,a.jsx)(c.uo,{isOpen:!!eK,onClose:()=>eL(null),onConfirm:eK?.onConfirm,title:eK?.title||"Confirm",message:eK?.message,variant:"danger"})]})}_.propTypes={capabilities:b().object,onOAuth:b().func,onApiKey:b().func,onFree:b().func,onCookie:b().func,onCompatible:b().func,onBulkImport:b().func},z.propTypes={providerId:b().string.isRequired,models:b().array},U.propTypes={providerId:b().string.isRequired}},69449:(e,t,s)=>{Promise.resolve().then(s.bind(s,65251))}},e=>{e.O(0,[7504,5772,1321,5497,8441,3794,7358],()=>e(e.s=69449)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3528],{55343:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>c});var s=a(95155),n=a(12115),r=a(35497),l=a(11059);let o=(0,a(37206).default)(()=>a.e(8202).then(a.bind(a,28202)).then(e=>(e.loader.config({paths:{vs:"https://cdn.jsdelivr.net/npm/monaco-editor@0.57.0/min/vs"}}),e.default)),{loadableGenerated:{webpack:()=>[28202]},ssr:!1}),i=[{id:1,label:"Client Request",file:"1_req_client.json",lang:"json",desc:"Raw request from client"},{id:2,label:"Source Body",file:"2_req_source.json",lang:"json",desc:"After initial conversion"},{id:3,label:"OpenAI Intermediate",file:"3_req_openai.json",lang:"json",desc:"source → openai"},{id:4,label:"Target Request",file:"4_req_target.json",lang:"json",desc:"openai → target + URL + headers"},{id:5,label:"Provider Response",file:"5_res_provider.txt",lang:"text",desc:"Raw SSE from provider"},{id:6,label:"OpenAI Response",file:"6_res_openai.txt",lang:"text",desc:"target → openai (response)"},{id:7,label:"Client Response",file:"7_res_client.txt",lang:"text",desc:"Final response to client"}],d={minimap:{enabled:!1},fontSize:12,lineNumbers:"on",scrollBeyondLastLine:!1,wordWrap:"on",automaticLayout:!0};function c(){let[e,t]=(0,n.useState)({}),[a,c]=(0,n.useState)({1:!0}),[x,m]=(0,n.useState)({}),[u,f]=(0,n.useState)(null),h=(e,t)=>m(a=>({...a,[e]:t})),g=(e,a)=>t(t=>({...t,[e]:a})),j=e=>c(t=>{let a={};return i.forEach(e=>{a[e.id]=!1}),a[e]=!0,a}),y=async e=>{let t=i.find(t=>t.id===e);h(`load-${e}`,!0);try{let a=await fetch(`/api/translator/load?file=${t.file}`),s=await a.json();s.success?(g(e,s.content),1===e&&await b(s.content)):alert(s.error||"File not found")}catch(e){alert(e.message)}h(`load-${e}`,!1)},b=async e=>{try{let t="string"==typeof e?JSON.parse(e):e,a=await fetch("/api/translator/translate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({step:1,body:t})}),s=await a.json();s.success&&f(s.result)}catch{}},v=(e,t)=>fetch("/api/translator/save",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({file:e,content:t})}).catch(()=>{}),_=async()=>{h("toOpenAI",!0);try{let t=e[1],a=JSON.parse(t);v("1_req_client.json",t),v("2_req_source.json",JSON.stringify({timestamp:new Date().toISOString(),headers:{},body:a.body||a},null,2));let s=await fetch("/api/translator/translate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({step:2,body:a})}),n=await s.json();if(!n.success)return void alert(n.error);let r=JSON.stringify(n.result.body,null,2);g(3,r),j(3)}catch(e){alert(e.message)}h("toOpenAI",!1)},N=async()=>{h("toTarget",!0);try{let t=e[3],a=JSON.parse(t);v("3_req_openai.json",t);let s=await fetch("/api/translator/translate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({step:3,body:{...a,provider:u?.provider,model:u?.model}})}),n=await s.json();if(!n.success)return void alert(n.error);let r={...n.result,provider:u?.provider,model:u?.model};g(4,JSON.stringify(r,null,2)),j(4)}catch(e){alert(e.message)}h("toTarget",!1)},w=async()=>{h("send",!0);try{let t=e[4],a=JSON.parse(t);v("4_req_target.json",t);let s=a.provider||u?.provider,n=a.model||u?.model;if(!s||!n)return void alert("Missing provider or model. Please run step 1 first to detect them.");let r=await fetch("/api/translator/send",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:s,model:n,body:a.body||a})});if(!r.ok){let e=await r.json().catch(()=>({error:r.statusText}));alert(e.error||"Send failed");return}let l=r.body.getReader(),o=new TextDecoder,i="";for(;;){let{done:e,value:t}=await l.read();if(e)break;i+=o.decode(t,{stream:!0})}g(5,i),j(5),await fetch("/api/translator/save",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({file:"5_res_provider.txt",content:i})})}catch(e){alert(e.message)}finally{h("send",!1)}},{copy:S}=(0,l.C)(),O=async t=>{e[t]&&S(e[t],`translator-step-${t}`)};return(0,s.jsxs)("div",{className:"p-8 space-y-3",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h1",{className:"text-2xl font-bold text-text-main",children:"Translator Debug"}),(0,s.jsx)("p",{className:"text-sm text-text-muted mt-1",children:"Replay request flow — matches log files"})]}),u&&(0,s.jsxs)("div",{className:"flex items-center gap-2 flex-wrap justify-end",children:[(0,s.jsx)(p,{label:"src",value:u.sourceFormat,color:"blue"}),(0,s.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,s.jsx)(p,{label:"dst",value:u.targetFormat,color:"orange"}),(0,s.jsx)(p,{label:"provider",value:u.provider,color:"green"}),(0,s.jsx)(p,{label:"model",value:u.model,color:"purple"})]})]}),i.map(t=>{var n;let l=1===(n=t.id)?(0,s.jsx)(r.$n,{size:"sm",icon:"arrow_forward",loading:x.toOpenAI,onClick:_,children:"→ OpenAI"}):3===n?(0,s.jsx)(r.$n,{size:"sm",icon:"arrow_forward",loading:x.toTarget,onClick:N,children:"→ Target"}):4===n?(0,s.jsx)(r.$n,{size:"sm",icon:"send",loading:x.send,onClick:w,children:"Send"}):null,i=!!a[t.id],p=e[t.id]||"";return(0,s.jsx)(r.Zp,{children:(0,s.jsxs)("div",{className:"p-4 space-y-3",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsxs)("button",{onClick:()=>{let e;return e=t.id,c(t=>({...t,[e]:!t[e]}))},className:"flex items-center gap-2 flex-1 text-left group",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[20px] text-text-muted group-hover:text-primary transition-colors",children:i?"expand_more":"chevron_right"}),(0,s.jsx)("span",{className:"text-xs font-mono text-text-muted w-4",children:t.id}),(0,s.jsx)("h3",{className:"text-sm font-semibold text-text-main",children:t.label}),(0,s.jsx)("span",{className:"text-xs text-text-muted font-mono",children:t.file}),p&&(0,s.jsxs)("span",{className:"text-xs text-green-500",children:["(",p.length," chars)"]})]}),!i&&(0,s.jsxs)("div",{className:"flex gap-1 shrink-0",children:[(0,s.jsx)(r.$n,{size:"sm",variant:"ghost",icon:"folder_open",loading:x[`load-${t.id}`],onClick:()=>y(t.id)}),l]})]}),i&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("div",{className:"border border-border rounded-lg overflow-hidden",children:(0,s.jsx)(o,{height:"400px",defaultLanguage:"text"===t.lang?"plaintext":"json",value:p,onChange:e=>{g(t.id,e||""),1===t.id&&b(e||"")},theme:"vs-dark",options:d})}),(0,s.jsxs)("div",{className:"flex gap-2 flex-wrap",children:[(0,s.jsx)(r.$n,{size:"sm",variant:"outline",icon:"folder_open",loading:x[`load-${t.id}`],onClick:()=>y(t.id),children:"Load"}),(0,s.jsx)(r.$n,{size:"sm",variant:"outline",icon:"data_object",onClick:()=>(t=>{try{let a=JSON.parse(e[t]);g(t,JSON.stringify(a,null,2))}catch{}})(t.id),children:"Format"}),(0,s.jsx)(r.$n,{size:"sm",variant:"outline",icon:"content_copy",onClick:()=>O(t.id),children:"Copy"}),l]})]})]})},t.id)})]})}function p({label:e,value:t,color:a}){return(0,s.jsxs)("span",{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs font-mono ${{blue:"bg-blue-500/10 text-blue-500",orange:"bg-orange-500/10 text-orange-500",green:"bg-green-500/10 text-green-500",purple:"bg-purple-500/10 text-purple-500"}[a]}`,children:[(0,s.jsxs)("span",{className:"text-text-muted font-sans text-[10px]",children:[e,":"]}),t]})}},89847:(e,t,a)=>{Promise.resolve().then(a.bind(a,55343))}},e=>{e.O(0,[7504,1321,5497,8441,3794,7358],()=>e(e.s=89847)),_N_E=e.O()}]);
|