@amir83nasr/10router 0.1.14 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +4 -5
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +16 -16
- package/.next/routes-manifest.json +0 -6
- package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +2 -2
- package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/combos/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page.js +2 -2
- package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/profile/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +3 -3
- package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/providers/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +2 -2
- package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/quota/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/usage/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error/page.js +2 -2
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +6 -6
- package/.next/server/app/_not-found.segments/_full.segment.rsc +6 -6
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/auth/login/route.js +1 -1
- package/.next/server/app/api/auth/logout/route.js +1 -1
- package/.next/server/app/api/auth/oidc/callback/route.js +1 -1
- package/.next/server/app/api/auth/oidc/start/route.js +1 -1
- package/.next/server/app/api/auth/oidc/test/route.js +1 -1
- package/.next/server/app/api/auth/reset-password/route.js +1 -1
- package/.next/server/app/api/auth/saml/acs/route.js +1 -1
- package/.next/server/app/api/auth/saml/metadata/route.js +2 -2
- package/.next/server/app/api/auth/saml/start/route.js +1 -1
- package/.next/server/app/api/auth/saml/test/route.js +1 -1
- package/.next/server/app/api/auth/status/route.js +2 -2
- package/.next/server/app/api/changelog/route.js +1 -1
- package/.next/server/app/api/cli-tools/all-statuses/route.js +1 -1
- package/.next/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
- package/.next/server/app/api/cli-tools/claude-settings/route.js +1 -1
- package/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
- package/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
- package/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
- package/.next/server/app/api/cli-tools/cowork-settings/route.js +1 -1
- package/.next/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
- package/.next/server/app/api/cli-tools/dsh-settings/route.js +1 -1
- package/.next/server/app/api/cli-tools/opencode-settings/route.js +1 -1
- package/.next/server/app/api/combos/[id]/route.js +1 -1
- package/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/combos/route.js +1 -1
- package/.next/server/app/api/headroom/extras/route.js +1 -1
- package/.next/server/app/api/headroom/proxy/[...path]/route.js +1 -1
- package/.next/server/app/api/headroom/restart/route.js +1 -1
- package/.next/server/app/api/headroom/start/route.js +1 -1
- package/.next/server/app/api/headroom/status/route.js +1 -1
- package/.next/server/app/api/headroom/stop/route.js +1 -1
- package/.next/server/app/api/health/route.js +1 -1
- package/.next/server/app/api/init/route.js +1 -1
- package/.next/server/app/api/keys/[id]/route.js +1 -1
- package/.next/server/app/api/keys/route.js +1 -1
- package/.next/server/app/api/locale/route.js +1 -1
- package/.next/server/app/api/mcp/[plugin]/message/route.js +1 -1
- package/.next/server/app/api/mcp/[plugin]/sse/route.js +2 -2
- package/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
- package/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
- package/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
- package/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
- package/.next/server/app/api/media-providers/tts/voices/route.js +1 -1
- package/.next/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
- package/.next/server/app/api/models/alias/route.js +1 -1
- package/.next/server/app/api/models/availability/route.js +1 -1
- package/.next/server/app/api/models/catalog-sync/route.js +1 -1
- package/.next/server/app/api/models/catalog-sync/route.js.nft.json +1 -1
- package/.next/server/app/api/models/custom/route.js +1 -1
- package/.next/server/app/api/models/custom/route.js.nft.json +1 -1
- package/.next/server/app/api/models/disabled/route.js +1 -1
- package/.next/server/app/api/models/route.js +1 -1
- package/.next/server/app/api/models/route.js.nft.json +1 -1
- package/.next/server/app/api/models/test/route.js +1 -1
- package/.next/server/app/api/models/test/route.js.nft.json +1 -1
- package/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
- package/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/.next/server/app/api/oauth/codex/bulk-import/route.js +1 -1
- package/.next/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
- package/.next/server/app/api/oauth/codex/import-token/route.js +1 -1
- package/.next/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
- package/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
- package/.next/server/app/api/oauth/cursor/import/route.js +1 -1
- package/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
- package/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
- package/.next/server/app/api/oauth/grok-cli/bulk-import/route.js +1 -1
- package/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
- package/.next/server/app/api/oauth/xiaomi-mimo/api-key/route.js +1 -1
- package/.next/server/app/api/oauth/xiaomi-mimo/auto-import/route.js +2 -2
- package/.next/server/app/api/pricing/route.js +1 -1
- package/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
- package/.next/server/app/api/provider-nodes/route.js +1 -1
- package/.next/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/.next/server/app/api/provider-nodes/validate/route.js +1 -1
- package/.next/server/app/api/providers/[id]/models/route.js +1 -1
- package/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/.next/server/app/api/providers/[id]/route.js +1 -1
- package/.next/server/app/api/providers/[id]/test/route.js +1 -1
- package/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
- package/.next/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
- package/.next/server/app/api/providers/client/route.js +1 -1
- package/.next/server/app/api/providers/client/route.js.nft.json +1 -1
- package/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
- package/.next/server/app/api/providers/route.js +1 -1
- package/.next/server/app/api/providers/route.js.nft.json +1 -1
- package/.next/server/app/api/providers/suggested-models/route.js +1 -1
- package/.next/server/app/api/providers/test-batch/route.js +1 -1
- package/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/.next/server/app/api/providers/validate/route.js +1 -1
- package/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
- package/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
- package/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js +2 -2
- package/.next/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
- package/.next/server/app/api/proxy-pools/route.js +1 -1
- package/.next/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
- package/.next/server/app/api/pxpipe/health/route.js +2 -2
- package/.next/server/app/api/pxpipe/install/route.js +1 -1
- package/.next/server/app/api/pxpipe/logs/route.js +1 -1
- package/.next/server/app/api/pxpipe/restart/route.js +1 -1
- package/.next/server/app/api/pxpipe/start/route.js +2 -2
- package/.next/server/app/api/pxpipe/stats/route.js +1 -1
- package/.next/server/app/api/pxpipe/status/route.js +1 -1
- package/.next/server/app/api/pxpipe/stop/route.js +1 -1
- package/.next/server/app/api/settings/database/route.js +1 -1
- package/.next/server/app/api/settings/proxy-test/route.js +1 -1
- package/.next/server/app/api/settings/require-login/route.js +1 -1
- package/.next/server/app/api/settings/route.js +1 -1
- package/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/.next/server/app/api/shutdown/route.js +1 -1
- package/.next/server/app/api/tags/route.js +1 -1
- package/.next/server/app/api/translator/console-logs/route.js +1 -1
- package/.next/server/app/api/translator/console-logs/route.js.nft.json +1 -1
- package/.next/server/app/api/translator/console-logs/stream/route.js +2 -2
- package/.next/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
- package/.next/server/app/api/translator/load/route.js +1 -1
- package/.next/server/app/api/translator/save/route.js +1 -1
- package/.next/server/app/api/translator/send/route.js +1 -1
- package/.next/server/app/api/translator/send/route.js.nft.json +1 -1
- package/.next/server/app/api/translator/translate/route.js +1 -1
- package/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/.next/server/app/api/tunnel/disable/route.js +1 -1
- package/.next/server/app/api/tunnel/disable/route.js.nft.json +1 -1
- package/.next/server/app/api/tunnel/enable/route.js +1 -1
- package/.next/server/app/api/tunnel/enable/route.js.nft.json +1 -1
- package/.next/server/app/api/tunnel/status/route.js +1 -1
- package/.next/server/app/api/tunnel/tailscale-check/route.js +1 -1
- package/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -1
- package/.next/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
- package/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -1
- package/.next/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
- package/.next/server/app/api/tunnel/tailscale-install/route.js +2 -2
- package/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
- package/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
- package/.next/server/app/api/usage/[connectionId]/route.js +1 -1
- package/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/.next/server/app/api/usage/chart/route.js +1 -1
- package/.next/server/app/api/usage/health/route.js +1 -1
- package/.next/server/app/api/usage/history/route.js +1 -1
- package/.next/server/app/api/usage/logs/route.js +1 -1
- package/.next/server/app/api/usage/providers/route.js +1 -1
- package/.next/server/app/api/usage/providers/route.js.nft.json +1 -1
- package/.next/server/app/api/usage/request-details/route.js +1 -1
- package/.next/server/app/api/usage/request-logs/route.js +1 -1
- package/.next/server/app/api/usage/stats/route.js +1 -1
- package/.next/server/app/api/usage/stream/route.js +2 -2
- package/.next/server/app/api/v1/api/chat/route.js +1 -1
- package/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/audio/speech/route.js +1 -1
- package/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
- package/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/audio/voices/route.js +1 -1
- package/.next/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/chat/completions/route.js +1 -1
- package/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/embeddings/route.js +1 -1
- package/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/images/generations/route.js +2 -2
- package/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
- package/.next/server/app/api/v1/messages/route.js +1 -1
- package/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/models/[...model]/route.js +1 -1
- package/.next/server/app/api/v1/models/[...model]/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/models/info/route.js +1 -1
- package/.next/server/app/api/v1/models/info/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/models/route.js +1 -1
- package/.next/server/app/api/v1/models/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/responses/compact/route.js +1 -1
- package/.next/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/responses/route.js +1 -1
- package/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/route.js +1 -1
- package/.next/server/app/api/v1/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/search/route.js +1 -1
- package/.next/server/app/api/v1/search/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/systemone/route.js +1 -1
- package/.next/server/app/api/v1/systemone/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/videos/[id]/route.js +1 -1
- package/.next/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/videos/edits/route.js +1 -1
- package/.next/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/videos/extensions/route.js +1 -1
- package/.next/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/videos/generations/route.js +1 -1
- package/.next/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/web/fetch/route.js +1 -1
- package/.next/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
- package/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
- package/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/v1beta/models/route.js +1 -1
- package/.next/server/app/api/v1beta/models/route.js.nft.json +1 -1
- package/.next/server/app/api/version/route.js +1 -1
- package/.next/server/app/api/version/shutdown/route.js +1 -1
- package/.next/server/app/api/version/update/route.js +1 -1
- package/.next/server/app/callback/page.js +1 -1
- package/.next/server/app/callback/page.js.nft.json +1 -1
- package/.next/server/app/callback/page_client-reference-manifest.js +1 -1
- package/.next/server/app/callback.html +1 -1
- package/.next/server/app/callback.rsc +6 -6
- package/.next/server/app/callback.segments/_full.segment.rsc +6 -6
- package/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/dashboard/cli-tools.html +1 -1
- package/.next/server/app/dashboard/cli-tools.rsc +9 -9
- package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +9 -9
- package/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/combos.html +1 -1
- package/.next/server/app/dashboard/combos.rsc +8 -8
- package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/combos.segments/_full.segment.rsc +8 -8
- package/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/endpoint.html +1 -1
- package/.next/server/app/dashboard/endpoint.rsc +9 -9
- package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +9 -9
- package/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/media-providers/systemone.html +1 -1
- package/.next/server/app/dashboard/media-providers/systemone.rsc +8 -8
- package/.next/server/app/dashboard/media-providers/systemone.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/systemone/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/media-providers/systemone.segments/_full.segment.rsc +8 -8
- package/.next/server/app/dashboard/media-providers/systemone.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/profile.html +1 -1
- package/.next/server/app/dashboard/profile.rsc +8 -8
- package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/profile.segments/_full.segment.rsc +8 -8
- package/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/providers/new.html +1 -1
- package/.next/server/app/dashboard/providers/new.rsc +8 -8
- package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +8 -8
- package/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/providers.html +1 -1
- package/.next/server/app/dashboard/providers.rsc +8 -8
- package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/providers.segments/_full.segment.rsc +8 -8
- package/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/proxy-pools.html +1 -1
- package/.next/server/app/dashboard/proxy-pools.rsc +8 -8
- package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +8 -8
- package/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/pxpipe.html +1 -1
- package/.next/server/app/dashboard/pxpipe.rsc +7 -7
- package/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +7 -7
- package/.next/server/app/dashboard/pxpipe.segments/_full.segment.rsc +7 -7
- package/.next/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/quota.html +2 -2
- package/.next/server/app/dashboard/quota.rsc +9 -9
- package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +9 -9
- package/.next/server/app/dashboard/quota.segments/_full.segment.rsc +9 -9
- package/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/settings/pricing/page.js +1 -1
- package/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
- package/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/.next/server/app/dashboard/settings/pricing.html +1 -1
- package/.next/server/app/dashboard/settings/pricing.rsc +6 -6
- package/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +6 -6
- package/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/dashboard/token-saver.html +1 -1
- package/.next/server/app/dashboard/token-saver.rsc +7 -7
- package/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +7 -7
- package/.next/server/app/dashboard/token-saver.segments/_full.segment.rsc +7 -7
- package/.next/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/usage.html +2 -2
- package/.next/server/app/dashboard/usage.rsc +8 -8
- package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/usage.segments/_full.segment.rsc +8 -8
- package/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard.html +1 -1
- package/.next/server/app/dashboard.rsc +9 -9
- package/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard.segments/_full.segment.rsc +9 -9
- package/.next/server/app/dashboard.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +6 -6
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/index.segments/_full.segment.rsc +6 -6
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/landing/page.js +1 -1
- package/.next/server/app/landing/page.js.nft.json +1 -1
- package/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/.next/server/app/landing.html +1 -1
- package/.next/server/app/landing.rsc +7 -7
- package/.next/server/app/landing.segments/_full.segment.rsc +7 -7
- package/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +7 -7
- package/.next/server/app/login/page.js +1 -1
- package/.next/server/app/login/page.js.nft.json +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +1 -1
- package/.next/server/app/login.rsc +6 -6
- package/.next/server/app/login.segments/_full.segment.rsc +6 -6
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/manifest.webmanifest/route.js +1 -1
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +4 -5
- package/.next/server/chunks/1018.js +1 -0
- package/.next/server/chunks/1412.js +1 -1
- package/.next/server/chunks/1564.js +1 -1
- package/.next/server/chunks/1649.js +1 -0
- package/.next/server/chunks/1751.js +1 -0
- package/.next/server/chunks/1842.js +1 -0
- package/.next/server/chunks/2143.js +1 -1
- package/.next/server/chunks/2282.js +11 -13
- package/.next/server/chunks/{2706.js → 2338.js} +1 -1
- package/.next/server/chunks/2339.js +1 -1
- package/.next/server/chunks/2355.js +1 -0
- package/.next/server/chunks/2531.js +1 -0
- package/.next/server/chunks/2801.js +1 -1
- package/.next/server/chunks/31.js +1 -0
- package/.next/server/chunks/3671.js +1 -0
- package/.next/server/chunks/4301.js +1 -1
- package/.next/server/chunks/4364.js +1 -1
- package/.next/server/chunks/4915.js +1 -1
- package/.next/server/chunks/537.js +5 -9
- package/.next/server/chunks/6343.js +6 -6
- package/.next/server/chunks/6617.js +9 -0
- package/.next/server/chunks/6823.js +1 -1
- package/.next/server/chunks/6971.js +1 -0
- package/.next/server/chunks/7019.js +2 -2
- package/.next/server/chunks/7156.js +1 -1
- package/.next/server/chunks/7314.js +1 -0
- package/.next/server/chunks/7337.js +1 -0
- package/.next/server/chunks/7459.js +3 -3
- package/.next/server/chunks/7591.js +1 -0
- package/.next/server/chunks/7904.js +1 -0
- package/.next/server/chunks/8567.js +1 -1
- package/.next/server/chunks/8923.js +1 -1
- package/.next/server/chunks/9287.js +1 -1
- package/.next/server/chunks/9429.js +1 -1
- package/.next/server/chunks/9603.js +1 -1
- package/.next/server/instrumentation.js +1 -1
- package/.next/server/instrumentation.js.nft.json +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/EsP8l_VAPRRfBiiJPJqQe/_buildManifest.js +1 -0
- package/.next/static/chunks/1278-77eb0511471e063a.js +1 -0
- package/.next/static/chunks/1660-c4c1cfa3cb7c9b2e.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/{page-c913b130003c1672.js → page-dd70f2cee9c910a9.js} +3 -3
- package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-361bb54d1d354b4c.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/[id]/{page-7340dad2b87640cf.js → page-a5e128afd334522f.js} +2 -2
- package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-a41e2c8e26eb5956.js +21 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/providers/page-feb4f47de991b067.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/quota/page-f718869c90907a6a.js +1 -0
- package/.next/static/chunks/app/_global-error/page-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/oidc/callback/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/oidc/start/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/oidc/test/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/reset-password/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/saml/acs/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/saml/metadata/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/saml/start/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/saml/test/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/changelog/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/all-statuses/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/claude-settings/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/codex-settings/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/cowork-settings/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/dsh-settings/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/opencode-settings/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/combos/[id]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/combos/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/headroom/extras/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/headroom/proxy/[...path]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/headroom/restart/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/headroom/start/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/headroom/status/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/headroom/stop/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/health/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/init/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/keys/[id]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/keys/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/locale/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/mcp/[plugin]/message/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/mcp/[plugin]/sse/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/media-providers/tts/voices/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/models/alias/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/models/availability/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/models/catalog-sync/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/models/custom/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/models/disabled/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/models/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/models/test/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/oauth/[provider]/[action]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/oauth/codex/bulk-import/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/oauth/codex/import-token/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/oauth/cursor/auto-import/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/oauth/cursor/import/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/oauth/gitlab/pat/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/oauth/grok-cli/bulk-import/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/oauth/iflow/cookie/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/oauth/xiaomi-mimo/api-key/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/oauth/xiaomi-mimo/auto-import/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/pricing/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/provider-nodes/[id]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/provider-nodes/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/provider-nodes/validate/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/providers/[id]/models/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/providers/[id]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/providers/[id]/test/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/providers/[id]/test-models/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/providers/client/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/providers/kilo/free-models/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/providers/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/providers/suggested-models/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/providers/test-batch/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/providers/validate/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/proxy-pools/[id]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/proxy-pools/[id]/test/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/proxy-pools/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/health/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/install/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/logs/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/restart/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/start/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/stats/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/status/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/stop/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/settings/database/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/settings/proxy-test/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/settings/require-login/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/settings/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/shutdown/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/tags/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/translator/console-logs/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/translator/console-logs/stream/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/translator/load/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/translator/save/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/translator/send/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/translator/translate/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/tunnel/disable/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/tunnel/enable/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/tunnel/status/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/tunnel/tailscale-check/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/tunnel/tailscale-disable/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/tunnel/tailscale-enable/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/tunnel/tailscale-install/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/[connectionId]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/chart/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/health/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/history/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/logs/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/providers/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/request-details/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/request-logs/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/stats/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/stream/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/api/chat/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/audio/speech/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/audio/transcriptions/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/audio/voices/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/chat/completions/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/embeddings/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/images/generations/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/messages/count_tokens/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/messages/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/models/[...model]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/models/info/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/models/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/responses/compact/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/responses/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/search/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/systemone/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/videos/[id]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/videos/edits/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/videos/extensions/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/videos/generations/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/web/fetch/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1beta/models/[...path]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1beta/models/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/version/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/version/shutdown/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/version/update/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/landing/{page-a76ba2642bd02bf5.js → page-1c5aa0e05b21c61a.js} +1 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/page-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-f46617319221a4f8.js +1 -0
- package/.next/static/css/e5f3812777d2d9e9.css +1 -0
- package/CHANGELOG.md +20 -0
- package/open-sse/AGENTS.md +1 -1
- package/open-sse/config/errorConfig.js +4 -0
- package/open-sse/config/opencodeErrors.js +59 -0
- package/open-sse/config/opencodeGo.js +34 -0
- package/open-sse/config/providerModels.js +13 -0
- package/open-sse/config/providers.js +0 -11
- package/open-sse/executors/base.js +4 -1
- package/open-sse/executors/index.js +0 -3
- package/open-sse/executors/opencode-go.js +28 -103
- package/open-sse/executors/opencode-zen.js +31 -105
- package/open-sse/executors/opencode.js +40 -106
- package/open-sse/executors/opencodeShared.js +146 -0
- package/open-sse/executors/zed.js +307 -70
- package/open-sse/handlers/chatCore/claudeMessageBody.js +357 -0
- package/open-sse/handlers/chatCore/nonStreamingHandler.js +36 -110
- package/open-sse/handlers/chatCore/sseToJsonHandler.js +147 -4
- package/open-sse/handlers/chatCore.js +48 -12
- package/open-sse/handlers/embeddingProviders/index.js +0 -1
- package/open-sse/handlers/imageProviders/index.js +0 -4
- package/open-sse/handlers/imageProviders/openai.js +1 -1
- package/open-sse/handlers/search/callers.js +0 -28
- package/open-sse/handlers/search/chatSearch.js +1 -57
- package/open-sse/handlers/search/normalizers.js +0 -49
- package/open-sse/handlers/sttCore.js +0 -17
- package/open-sse/handlers/ttsCore.js +1 -1
- package/open-sse/handlers/ttsProviders/genericFormats.js +0 -35
- package/open-sse/providers/registry/index.js +14 -53
- package/open-sse/providers/registry/opencode-go.js +15 -6
- package/open-sse/providers/registry/opencode-zen.js +25 -9
- package/open-sse/providers/registry/opencode.js +5 -3
- package/open-sse/services/accountFallback.js +1 -0
- package/open-sse/services/opencodeGoProbe.js +39 -0
- package/open-sse/services/usage/glm.js +6 -12
- package/open-sse/services/usage/misc.js +1 -92
- package/open-sse/services/usage/zed.js +18 -3
- package/open-sse/services/usage.js +2 -14
- package/open-sse/shared/zedAuth.js +53 -5
- package/open-sse/translator/concerns/classifier.js +70 -0
- package/open-sse/translator/concerns/thinkingUnified.js +18 -6
- package/open-sse/translator/formats/claude.js +47 -19
- package/open-sse/translator/request/claude-to-openai.js +20 -0
- package/open-sse/translator/request/openai-to-claude.js +11 -0
- package/open-sse/utils/error.js +37 -3
- package/open-sse/utils/opencodeErrors.js +63 -0
- package/open-sse/utils/opencodeFingerprint.js +122 -23
- package/open-sse/utils/opencodeFreeUsage.js +57 -12
- package/open-sse/utils/usageTracking.js +5 -3
- package/package.json +2 -2
- package/src/app/(dashboard)/dashboard/cli-tools/components/cards/ClaudeToolCard.tsx +12 -0
- package/src/app/(dashboard)/dashboard/console-log/ConsoleLogClient.tsx +10 -0
- package/src/app/(dashboard)/dashboard/providers/[id]/ModelRow.tsx +14 -0
- package/src/app/(dashboard)/dashboard/providers/[id]/OpenCodeGoConnectionCard.tsx +113 -0
- package/src/app/(dashboard)/dashboard/providers/[id]/page.tsx +11 -2
- package/src/app/(dashboard)/dashboard/providers/components/ModelsCard.tsx +14 -5
- package/src/app/(dashboard)/dashboard/providers/page.tsx +33 -45
- package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.ts +0 -33
- package/src/app/api/cli-tools/claude-settings/route.js +10 -0
- package/src/app/api/oauth/[provider]/[action]/route.js +2 -0
- package/src/app/api/providers/[id]/models/route.js +0 -3
- package/src/app/api/providers/[id]/test/testUtils.js +18 -103
- package/src/app/api/providers/validate/route.js +9 -37
- package/src/app/api/usage/[connectionId]/route.js +1 -1
- package/src/components/app-sidebar.tsx +1 -0
- package/src/lib/modelCatalog/sync.js +2 -4
- package/src/shared/components/EditConnectionModal.tsx +1 -1
- package/src/shared/constants/cliTools.js +9 -9
- package/src/shared/constants/models.ts +2 -0
- package/src/shared/constants/ttsProviders.ts +0 -21
- package/src/shared/utils/providerIcon.ts +0 -12
- package/src/sse/services/model.ts +2 -12
- package/.next/server/app/api/media-providers/tts/minimax/voices/route.js +0 -1
- package/.next/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +0 -1
- package/.next/server/app/api/media-providers/tts/minimax/voices/route_client-reference-manifest.js +0 -1
- package/.next/server/chunks/1011.js +0 -1
- package/.next/server/chunks/1194.js +0 -1
- package/.next/server/chunks/1289.js +0 -1
- package/.next/server/chunks/1633.js +0 -1
- package/.next/server/chunks/3425.js +0 -1
- package/.next/server/chunks/4129.js +0 -1
- package/.next/server/chunks/5496.js +0 -1
- package/.next/server/chunks/5761.js +0 -1
- package/.next/server/chunks/6056.js +0 -1
- package/.next/server/chunks/7816.js +0 -1
- package/.next/server/chunks/8940.js +0 -1
- package/.next/static/chunks/1278-1bef1ffb32ea7f41.js +0 -1
- package/.next/static/chunks/1660-25564899e7912146.js +0 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-58a29f3cb409597a.js +0 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-fab6f4b4cccc1a6f.js +0 -21
- package/.next/static/chunks/app/(dashboard)/dashboard/providers/page-9054f870a5e0f5c6.js +0 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/quota/page-61780f0a2b494680.js +0 -1
- package/.next/static/chunks/app/_global-error/page-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/oidc/callback/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/oidc/start/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/oidc/test/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/reset-password/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/saml/acs/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/saml/metadata/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/saml/start/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/saml/test/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/changelog/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/cli-tools/all-statuses/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/cli-tools/claude-settings/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/cli-tools/codex-settings/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/cli-tools/cowork-settings/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/cli-tools/dsh-settings/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/cli-tools/opencode-settings/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/combos/[id]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/combos/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/headroom/extras/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/headroom/proxy/[...path]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/headroom/restart/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/headroom/start/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/headroom/status/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/headroom/stop/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/health/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/init/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/keys/[id]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/keys/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/locale/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/mcp/[plugin]/message/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/mcp/[plugin]/sse/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/media-providers/tts/voices/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/models/alias/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/models/availability/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/models/catalog-sync/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/models/custom/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/models/disabled/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/models/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/models/test/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/oauth/[provider]/[action]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/oauth/codex/bulk-import/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/oauth/codex/import-token/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/oauth/cursor/auto-import/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/oauth/cursor/import/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/oauth/gitlab/pat/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/oauth/grok-cli/bulk-import/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/oauth/iflow/cookie/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/oauth/xiaomi-mimo/api-key/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/oauth/xiaomi-mimo/auto-import/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/pricing/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/provider-nodes/[id]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/provider-nodes/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/provider-nodes/validate/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/providers/[id]/models/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/providers/[id]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/providers/[id]/test/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/providers/[id]/test-models/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/providers/client/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/providers/kilo/free-models/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/providers/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/providers/suggested-models/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/providers/test-batch/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/providers/validate/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/proxy-pools/[id]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/proxy-pools/[id]/test/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/proxy-pools/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/pxpipe/health/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/pxpipe/install/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/pxpipe/logs/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/pxpipe/restart/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/pxpipe/start/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/pxpipe/stats/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/pxpipe/status/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/pxpipe/stop/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/settings/database/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/settings/proxy-test/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/settings/require-login/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/settings/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/shutdown/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/tags/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/translator/console-logs/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/translator/console-logs/stream/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/translator/load/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/translator/save/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/translator/send/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/translator/translate/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/tunnel/disable/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/tunnel/enable/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/tunnel/status/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/tunnel/tailscale-check/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/tunnel/tailscale-disable/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/tunnel/tailscale-enable/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/tunnel/tailscale-install/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/[connectionId]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/chart/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/health/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/history/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/logs/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/providers/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/request-details/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/request-logs/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/stats/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/stream/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/api/chat/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/audio/speech/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/audio/transcriptions/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/audio/voices/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/chat/completions/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/embeddings/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/images/generations/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/messages/count_tokens/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/messages/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/models/[...model]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/models/info/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/models/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/responses/compact/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/responses/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/search/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/systemone/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/videos/[id]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/videos/edits/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/videos/extensions/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/videos/generations/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/web/fetch/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1beta/models/[...path]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1beta/models/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/version/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/version/shutdown/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/version/update/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/page-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/css/efaf98e3b295f727.css +0 -1
- package/.next/static/wBARQPScPhD6SLn7WQvI9/_buildManifest.js +0 -1
- package/open-sse/executors/xiaomi-tokenplan.js +0 -20
- package/open-sse/handlers/imageProviders/huggingface.js +0 -23
- package/open-sse/handlers/ttsProviders/minimax.js +0 -63
- package/open-sse/providers/registry/fish-audio.js +0 -31
- package/open-sse/providers/registry/glm-cn.js +0 -39
- package/open-sse/providers/registry/groq.js +0 -62
- package/open-sse/providers/registry/huggingface.js +0 -40
- package/open-sse/providers/registry/minimax-cn.js +0 -82
- package/open-sse/providers/registry/minimax.js +0 -94
- package/open-sse/providers/registry/siliconflow.js +0 -39
- package/open-sse/providers/registry/vercel-ai-gateway.js +0 -42
- package/open-sse/providers/registry/xiaomi-tokenplan.js +0 -66
- package/open-sse/providers/registry/xquik.js +0 -31
- package/open-sse/services/usage/groq.js +0 -133
- package/open-sse/services/usage/minimax.js +0 -297
- package/public/providers/fish-audio.png +0 -0
- package/public/providers/glm-cn.png +0 -0
- package/public/providers/groq.png +0 -0
- package/public/providers/huggingface.png +0 -0
- package/public/providers/minimax-cn.png +0 -0
- package/public/providers/minimax.png +0 -0
- package/public/providers/siliconflow.png +0 -0
- package/public/providers/vercel-ai-gateway.png +0 -0
- package/public/providers/vercel.png +0 -0
- package/public/providers/xiaomi-tokenplan.png +0 -0
- package/public/providers/xquik.png +0 -0
- package/src/app/api/media-providers/tts/minimax/voices/route.js +0 -126
- /package/.next/static/{wBARQPScPhD6SLn7WQvI9 → EsP8l_VAPRRfBiiJPJqQe}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[712],{1352:(e,t,r)=>{"use strict";r.d(t,{Bc:()=>i,ZI:()=>l,k$:()=>o,m_:()=>d});var a=r(29798);r(15814);var s=r(5471),n=r(44484);function i({delayDuration:e=0,...t}){return(0,a.jsx)(n.Kq,{"data-slot":"tooltip-provider",delayDuration:e,...t})}function d({...e}){return(0,a.jsx)(n.bL,{"data-slot":"tooltip",...e})}function o({...e}){return(0,a.jsx)(n.l9,{"data-slot":"tooltip-trigger",...e})}function l({className:e,sideOffset:t=0,children:r,...i}){return(0,a.jsx)(n.ZL,{children:(0,a.jsxs)(n.UC,{"data-slot":"tooltip-content",sideOffset:t,className:(0,s.cn)("z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",e),...i,children:[r,(0,a.jsx)(n.i3,{className:"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground"})]})})}},13189:(e,t,r)=>{"use strict";r.d(t,{default:()=>D});var a=r(29798),s=r(15814),n=r(75669),i=r(18055),d=r(53784),o=r(77345),l=r(1352),c=r(45111),u=r(74719),g=r(66685),p=r(24477),x=r(26339),m=r(75877),f=r(51660);let h={USAGE:"usage",STREAM:"stream","STREAM USAGE":"usage",COMBO:"combo",FUSION:"combo",TOKEN:"token",RTK:"rtk",HEADROOM:"rtk",REQUEST:"request",PROXY:"proxy",AUTH:"auth",AG_QUOTA:"auth",DB:"db",TUNNEL:"tunnel",PROJECTID:"other"},v={debug:"debug",info:"info",log:"info",warn:"warn",error:"error"},b={debug:0,info:1,warn:2,error:3};function y(e,t){return b[t]>b[e]?t:e}function j(e,t){let r=v[e]??"info",a="other";if(/\[DBG:[^\]]+\]/.test(t)||t.includes("\uD83D\uDC1B"))return{level:"debug",category:"debug"};let s=t.match(/^\[\d{1,2}:\d{2}(:\d{2})?\]\s+(DEBUG|INFO|WARN|ERROR)\b/);if(s){let e=s[2].toLowerCase();b[e]>b[r]&&(r=e)}let n=t.match(/^\[\d{1,2}:\d{2}(:\d{2})?\]\s+\[[0-9a-f]{4}\]\s+([A-Z]+)\b/);if(n){let e=n[2];"REQ"===e?a="request":"DONE"===e?a="done":"SAVERS"===e?a="rtk":"REFRESH"===e?a="token":"BLOCKED"===e||"ABORT"===e?a="stream":"ERROR"===e&&(r=y(r,"error"),"other"===a&&(a="request"))}if("other"===a&&/^\[\d{1,2}:\d{2}(:\d{2})?\]\s+\[(http|stream|usage)\]/i.test(t)){let e=t.match(/^\[\d{1,2}:\d{2}(:\d{2})?\]\s+\[(http|stream|usage)\]/i)[2].toLowerCase();a="http"===e?"request":e}let i=t.match(/\[([A-Z][A-Z _-]*)\]/g);if(i)for(let e of i){let t=e.slice(1,-1).trim();if(h[t]){a=h[t];break}if("DBG"===t||t.startsWith("DBG:"))return{level:"debug",category:"debug"}}return t.includes("✗")||t.includes("❌")?(r=y(r,"error"),"other"===a&&(a="request")):t.includes("\uD83D\uDCCA")?t.includes("DONE")?a="done":"other"===a&&(a="usage"):t.includes("⚠️")?r=y(r,"warn"):t.includes("\uD83C\uDF0A")?"other"===a&&(a="stream"):t.includes("\uD83D\uDD11")||t.includes("TOKEN REFRESHED")?"other"===a&&(a="token"):t.includes("ℹ️")||t.includes("\uD83D\uDD0D")?t.includes("\uD83D\uDD0D")&&(r=y(r,"debug")):t.includes("\uD83D\uDCE5")&&"other"===a&&(a="request"),"other"===a&&/\b(POST|GET|PUT|DELETE|PATCH)\b/.test(t)&&(a="request"),/\bERROR \d{3}\b/.test(t)||/\bFAILED\b/.test(t)||/\bBLOCKED\b/.test(t)?r=y(r,"error"):/\b(falling back|fallback|unavailable|skipped|retry)\b/i.test(t)&&(r=y(r,"warn")),"other"===a&&(t.includes("[RTK]")||t.includes("HEADROOM")||t.includes("PXPIPE")?a="rtk":t.includes("[ProjectId]")?a="other":t.includes("[ProxyFetch]")?a="proxy":t.includes("[Tunnel]")?a="tunnel":t.includes("[DB]")?a="db":t.includes("[RequestDetail]")?a="request":t.includes("[STREAM]")?a="stream":t.includes("[TOKEN]")?a="token":t.includes("[COMBO]")||t.includes("[FUSION]")?a="combo":t.includes("[CHAT]")&&(a="request")),{level:r,category:a}}function k(e,t="log"){if("string"==typeof e){let{level:r,category:a}=j(t,e);return{ts:Date.now(),level:r,category:a,text:e}}if(e&&"object"==typeof e&&"string"==typeof e.text){if("number"==typeof e.ts&&e.level&&e.category)return e;let{level:r,category:a}=j(t,e.text);return{ts:"number"==typeof e.ts?e.ts:Date.now(),level:e.level??r,category:e.category??a,text:e.text}}let r=String(e??""),{level:a,category:s}=j(t,r);return{ts:Date.now(),level:a,category:s,text:r}}let w={debug:"secondary",info:"default",warn:"secondary",error:"destructive"},N={debug:"bg-muted text-muted-foreground",info:"bg-sky-500/15 text-sky-700 dark:text-sky-300",warn:"bg-amber-500/15 text-amber-700 dark:text-amber-300",error:""},z={debug:"DEBUG",info:"INFO",warn:"WARN",error:"ERROR"},A=["debug","info","warn","error"],E={all:"All categories",request:"Request",done:"Done",usage:"Usage",combo:"Combo",token:"Token",rtk:"RTK",stream:"Stream",debug:"Debug",auth:"Auth",proxy:"Proxy",db:"DB",tunnel:"Tunnel",other:"Other"},R=["request","done","usage","combo","token","rtk","stream","debug","auth","proxy","db","tunnel","other"],O=/^\[\d{1,2}:\d{2}(:\d{2})?(\s?[AP]M)?\]\s*/,C=/\b(IN|OUT) \d[\d,]*( \(CACHE [^)]*\))?|\b\d[\d,]*ms\b|\b[A-Za-z_][\w.-]*=[^\s·|,]+/g;function T({text:e,isError:t}){let[r,n]=(0,s.useMemo)(()=>{let t;return -1===(t=e.indexOf("\n"))?[e,null]:[e.slice(0,t),e.slice(t+1)]},[e]),i=(0,s.useMemo)(()=>(function(e){let t=[],r=0;for(let a of e.matchAll(C)){let s=a[0],n=a.index??0;if(n>r&&t.push({kind:"plain",text:e.slice(r,n)}),/^(IN|OUT) /.test(s))t.push({kind:"tokens",text:s});else if(/ms$/.test(s))t.push({kind:"duration",text:s});else{let e=s.indexOf("=");t.push({kind:"kv",key:s.slice(0,e+1),value:s.slice(e+1)})}r=n+s.length}return r<e.length&&t.push({kind:"plain",text:e.slice(r)}),0===t.length&&t.push({kind:"plain",text:e}),t})(r.replace(O,"")),[r]);return(0,a.jsxs)("span",{className:"break-words",children:[i.map((e,t)=>"duration"===e.kind?(0,a.jsx)("span",{className:"font-semibold text-amber-700",children:e.text},t):"tokens"===e.kind?(0,a.jsx)("span",{className:"font-semibold text-emerald-700",children:e.text},t):"kv"===e.kind?(0,a.jsxs)("span",{children:[(0,a.jsx)("span",{className:"text-muted-foreground",children:e.key}),(0,a.jsx)("span",{className:"font-medium text-sky-700",children:e.value})]},t):(0,a.jsx)("span",{children:e.text},t)),n&&(0,a.jsxs)("details",{className:"mt-1",children:[(0,a.jsx)("summary",{className:`cursor-pointer text-[11px] font-medium ${t?"text-red-600":"text-muted-foreground"} hover:underline`,children:"Stack trace"}),(0,a.jsx)("pre",{className:"mt-1 max-h-40 overflow-auto rounded bg-muted p-2 text-[11px] whitespace-pre-wrap text-muted-foreground",children:n})]})]})}function _({entry:e}){let t="error"===e.level,r="warn"===e.level,s="done"===e.category;return(0,a.jsxs)("div",{className:`flex items-start gap-2 px-3 py-1.5 leading-relaxed ${t?"border-l-2 border-red-500 bg-red-500/5":r?"border-l-2 border-amber-500 bg-amber-500/5":s?"border-l-2 border-green-500 bg-green-500/5":"border-l-2 border-transparent hover:bg-muted/50"}`,children:[(0,a.jsx)("span",{className:"shrink-0 pt-0.5 text-[11px] text-muted-foreground tabular-nums",children:new Date(e.ts).toLocaleTimeString("en-US",{hour12:!1})}),(0,a.jsx)(d.E,{variant:w[e.level],className:`shrink-0 ${N[e.level]}`,children:z[e.level]}),(0,a.jsx)("span",{className:"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-semibold text-muted-foreground uppercase",children:E[e.category]}),(0,a.jsx)("span",{className:"min-w-0 flex-1 text-foreground",children:(0,a.jsx)(T,{text:e.text,isError:t})})]})}function S(e){return e.map(e=>k(e))}function D(){let[e,t]=(0,s.useState)([]),[r,h]=(0,s.useState)(!1),[v,b]=(0,s.useState)(!1),[y,j]=(0,s.useState)(!0),[N,O]=(0,s.useState)(""),[C,T]=(0,s.useState)(new Set(A)),[D,L]=(0,s.useState)("all"),M=(0,s.useRef)(null),U=(0,s.useRef)(v);(0,s.useEffect)(()=>{U.current=v},[v]);let q=async()=>{try{await fetch("/api/translator/console-logs",{method:"DELETE"})}catch(e){console.error("Failed to clear console logs:",e)}};(0,s.useEffect)(()=>{let e=new EventSource("/api/translator/console-logs/stream");return e.onopen=()=>h(!0),e.onmessage=e=>{if(U.current)return;let r=JSON.parse(e.data);if("init"===r.type)t(S(r.logs).slice(-f.UY.maxLines));else if("line"===r.type){let e=k(r.line);t(t=>{let r=[...t,e];return r.length>f.UY.maxLines?r.slice(-f.UY.maxLines):r})}else if("lines"===r.type){let e=S(r.lines);t(t=>{let r=[...t,...e];return r.length>f.UY.maxLines?r.slice(-f.UY.maxLines):r})}else"clear"===r.type&&t([])},e.onerror=()=>h(!1),()=>e.close()},[]),(0,s.useEffect)(()=>{y&&M.current&&(M.current.scrollTop=M.current.scrollHeight)},[e,y]);let B=(0,s.useMemo)(()=>{let t=N.trim().toLowerCase();return e.filter(e=>!!C.has(e.level)&&("all"===D||e.category===D)&&(!t||!!e.text.toLowerCase().includes(t)))},[e,C,D,N]),P=(0,s.useMemo)(()=>e.filter(e=>"error"===e.level).length,[e]),I=(0,s.useMemo)(()=>e.filter(e=>"warn"===e.level).length,[e]);return(0,a.jsxs)(n.Zp,{children:[(0,a.jsxs)(n.aR,{children:[(0,a.jsx)(n.ZB,{className:"sr-only",children:"Console logs"}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)(l.m_,{children:[(0,a.jsx)(l.k$,{asChild:!0,children:(0,a.jsx)("span",{className:r?"size-2 rounded-full bg-green-500":"size-2 rounded-full bg-red-500"})}),(0,a.jsx)(l.ZI,{children:r?"Connected":"Disconnected"})]}),(0,a.jsxs)("span",{className:"text-xs text-muted-foreground",children:[B.length,"/",e.length," lines",P>0&&(0,a.jsxs)("span",{className:"font-semibold text-red-600",children:[" \xb7 ",P," errors"]}),I>0&&(0,a.jsxs)("span",{className:"font-semibold text-yellow-600",children:[" \xb7 ",I," warnings"]})]}),(0,a.jsxs)("div",{className:"ml-auto flex flex-wrap items-center gap-2",children:[(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsx)(u.A,{className:"pointer-events-none absolute top-1/2 left-2.5 size-3.5 -translate-y-1/2 text-muted-foreground"}),(0,a.jsx)(o.p,{value:N,onChange:e=>O(e.target.value),placeholder:"Search logs…",className:"h-7 w-44 pl-8 text-xs"})]}),(0,a.jsx)("div",{className:"flex items-center gap-1",children:A.map(e=>(0,a.jsxs)(l.m_,{children:[(0,a.jsx)(l.k$,{asChild:!0,children:(0,a.jsx)("button",{type:"button",onClick:()=>{T(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},className:`cursor-pointer transition-opacity ${C.has(e)?"opacity-100":"opacity-30 grayscale"}`,children:(0,a.jsx)(d.E,{variant:w[e],children:z[e]})})}),(0,a.jsx)(l.ZI,{children:`Toggle ${z[e]}`})]},e))}),(0,a.jsxs)(c.l6,{value:D,onValueChange:e=>L(e),children:[(0,a.jsx)(c.bq,{className:"h-7 w-32 text-xs",children:(0,a.jsx)(c.yv,{})}),(0,a.jsxs)(c.gC,{children:[(0,a.jsx)(c.eb,{value:"all",children:E.all}),R.map(e=>(0,a.jsx)(c.eb,{value:e,children:E[e]},e))]})]}),(0,a.jsxs)(i.$,{size:"sm",variant:"outline",onClick:()=>b(e=>!e),children:[v?(0,a.jsx)(g.A,{}):(0,a.jsx)(p.A,{}),v?"Resume":"Pause"]}),(0,a.jsxs)(l.m_,{children:[(0,a.jsx)(l.k$,{asChild:!0,children:(0,a.jsxs)(i.$,{size:"sm",variant:y?"secondary":"outline",onClick:()=>j(e=>!e),children:[(0,a.jsx)(x.A,{}),"Follow"]})}),(0,a.jsx)(l.ZI,{children:"Auto-scroll to newest"})]}),(0,a.jsxs)(i.$,{size:"sm",variant:"outline",onClick:q,children:[(0,a.jsx)(m.A,{}),"Clear"]})]})]})]}),(0,a.jsx)(n.Wu,{className:"pt-0",children:(0,a.jsx)("div",{ref:M,onScroll:()=>{let e=M.current;e&&j(e.scrollHeight-e.scrollTop-e.clientHeight<40)},className:"h-[calc(100vh-220px)] overflow-y-auto rounded-b-lg border border-border bg-card p-2 font-mono text-xs",children:0===e.length?(0,a.jsx)("span",{className:"text-muted-foreground",children:"No console logs yet."}):0===B.length?(0,a.jsx)("span",{className:"text-muted-foreground",children:"No logs match the current filters."}):(0,a.jsx)("div",{className:"divide-y divide-border/50",children:B.map((e,t)=>(0,a.jsx)(_,{entry:e},t))})})})]})}},15298:(e,t,r)=>{Promise.resolve().then(r.bind(r,13189))},18055:(e,t,r)=>{"use strict";r.d(t,{$:()=>o});var a=r(29798);r(15814);var s=r(54366),n=r(5471),i=r(80954);let d=(0,s.F)("group/button inline-flex shrink-0 items-center justify-center rounded-md border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/80",outline:"border-border bg-background shadow-xs hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),8px)] px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-8 gap-1 rounded-[min(var(--radius-md),10px)] px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5",lg:"h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-9","icon-xs":"size-6 rounded-[min(var(--radius-md),8px)] in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-8 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-md","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function o({className:e,variant:t="default",size:r="default",asChild:s=!1,...l}){let c=s?i.bL:"button";return(0,a.jsx)(c,{"data-slot":"button","data-variant":t,"data-size":r,className:(0,n.cn)(d({variant:t,size:r,className:e})),...l})}},24477:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"pause",size:24,node:[["rect",{x:"14",y:"3",width:"5",height:"18",rx:"1",key:"kaeet6"}],["rect",{x:"5",y:"3",width:"5",height:"18",rx:"1",key:"1wsw3u"}]]};s.node;let n=(0,a.A)(s)},26339:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"arrow-down",size:24,node:[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]};s.node;let n=(0,a.A)(s)},28830:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"chevron-up",size:24,node:[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]};s.node;let n=(0,a.A)(s)},45111:(e,t,r)=>{"use strict";r.d(t,{bq:()=>u,eb:()=>p,gC:()=>g,l6:()=>l,yv:()=>c});var a=r(29798);r(15814);var s=r(5471),n=r(95862),i=r(58765),d=r(63587),o=r(28830);function l({...e}){return(0,a.jsx)(n.bL,{"data-slot":"select",...e})}function c({...e}){return(0,a.jsx)(n.WT,{"data-slot":"select-value",...e})}function u({className:e,size:t="default",children:r,...d}){return(0,a.jsxs)(n.l9,{"data-slot":"select-trigger","data-size":t,className:(0,s.cn)("flex w-fit items-center justify-between gap-1.5 rounded-md border border-input bg-background py-2 pr-2 pl-2.5 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...d,children:[r,(0,a.jsx)(n.In,{asChild:!0,children:(0,a.jsx)(i.A,{className:"pointer-events-none size-4 text-muted-foreground"})})]})}function g({className:e,children:t,position:r="popper",align:i="center",...d}){return(0,a.jsx)(n.ZL,{children:(0,a.jsxs)(n.UC,{"data-slot":"select-content","data-align-trigger":"item-aligned"===r,className:(0,s.cn)("relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95","popper"===r&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:r,align:i,...d,children:[(0,a.jsx)(x,{}),(0,a.jsx)(n.LM,{"data-position":r,className:(0,s.cn)("data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)","popper"===r&&""),children:t}),(0,a.jsx)(m,{})]})})}function p({className:e,children:t,...r}){return(0,a.jsxs)(n.q7,{"data-slot":"select-item",className:(0,s.cn)("relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e),...r,children:[(0,a.jsx)("span",{className:"pointer-events-none absolute right-2 flex size-4 items-center justify-center",children:(0,a.jsx)(n.VF,{children:(0,a.jsx)(d.A,{className:"pointer-events-none"})})}),(0,a.jsx)(n.p4,{children:t})]})}function x({className:e,...t}){return(0,a.jsx)(n.PP,{"data-slot":"select-scroll-up-button",className:(0,s.cn)("z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",e),...t,children:(0,a.jsx)(o.A,{})})}function m({className:e,...t}){return(0,a.jsx)(n.wn,{"data-slot":"select-scroll-down-button",className:(0,s.cn)("z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",e),...t,children:(0,a.jsx)(i.A,{})})}},53784:(e,t,r)=>{"use strict";r.d(t,{E:()=>o});var a=r(29798);r(15814);var s=r(54366),n=r(5471),i=r(80954);let d=(0,s.F)("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});function o({className:e,variant:t="default",asChild:r=!1,...s}){let l=r?i.bL:"span";return(0,a.jsx)(l,{"data-slot":"badge","data-variant":t,className:(0,n.cn)(d({variant:t}),e),...s})}},58765:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"chevron-down",size:24,node:[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]};s.node;let n=(0,a.A)(s)},63587:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"check",size:24,node:[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]};s.node;let n=(0,a.A)(s)},66685:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"play",size:24,node:[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]]};s.node;let n=(0,a.A)(s)},74719:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"search",size:24,node:[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]};s.node;let n=(0,a.A)(s)},75669:(e,t,r)=>{"use strict";r.d(t,{BT:()=>o,Wu:()=>c,X9:()=>l,ZB:()=>d,Zp:()=>n,aR:()=>i});var a=r(29798);r(15814);var s=r(5471);function n({className:e,size:t="default",...r}){return(0,a.jsx)("div",{"data-slot":"card","data-size":t,className:(0,s.cn)("group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground shadow-xs ring-1 ring-foreground/10 [--card-spacing:--spacing(6)] has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(4)] *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",e),...r})}function i({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-header",className:(0,s.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)",e),...t})}function d({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-title",className:(0,s.cn)("font-heading text-base leading-normal font-medium group-data-[size=sm]/card:text-sm",e),...t})}function o({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-description",className:(0,s.cn)("text-sm text-muted-foreground",e),...t})}function l({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-action",className:(0,s.cn)("col-start-2 row-span-2 row-start-1 self-start justify-self-end",e),...t})}function c({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-content",className:(0,s.cn)("flex flex-col gap-3 px-(--card-spacing)",e),...t})}},75877:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"trash",size:24,node:[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],aliases:["trash-2"]};s.node;let n=(0,a.A)(s)},77345:(e,t,r)=>{"use strict";r.d(t,{p:()=>n});var a=r(29798);r(15814);var s=r(5471);function n({className:e,type:t,...r}){return(0,a.jsx)("input",{type:t,"data-slot":"input",className:(0,s.cn)("h-9 w-full min-w-0 rounded-md border border-input bg-background px-2.5 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",e),...r})}}},e=>{e.O(0,[5166,7552,9980,6428,4484,3577,5862,1660,427,9966,7358],()=>e(e.s=15298)),_N_E=e.O()}]);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2421],{24715:(e,t,s)=>{Promise.resolve().then(s.bind(s,53148))},53148:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>E});var a=s(29798),o=s(50141),n=s.n(o),r=s(70782),l=s(15814),i=s(75669),d=s(18055),c=s(53784),m=s(58913),p=s(738),x=s(14670),u=s(57779),h=s(45111),f=s(49787),y=s(15764),g=s(21796),b=s(14231);function j({isOpen:e,provider:t,providerName:s,proxyPools:o,onSave:n,onClose:r}){let i="__none__",[m,p]=(0,l.useState)({name:"",apiKey:"",priority:1,proxyPoolId:i}),[x,u]=(0,l.useState)(!1),[y,g]=(0,l.useState)(null),[b,v]=(0,l.useState)(!1),w=async()=>{u(!0);try{let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t,apiKey:m.apiKey})}),s=await e.json();g(s.valid?"success":"failed")}catch{g("failed")}finally{u(!1)}},N=async()=>{if(t&&m.apiKey){v(!0);try{let e=!1;try{u(!0),g(null);let s=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t,apiKey:m.apiKey})});e=!!(await s.json()).valid,g(e?"success":"failed")}catch{g("failed")}finally{u(!1)}await n({name:m.name,apiKey:m.apiKey,priority:m.priority,proxyPoolId:m.proxyPoolId===i?null:m.proxyPoolId,testStatus:e?"active":"unknown"})}finally{v(!1)}}};return t?(0,a.jsx)(f.lG,{open:e,onOpenChange:e=>!e&&r(),children:(0,a.jsxs)(f.Cf,{className:"max-w-md",children:[(0,a.jsx)(f.c7,{children:(0,a.jsx)(f.L3,{children:`Add ${s||t} API Key`})}),(0,a.jsxs)("div",{className:"flex max-h-[calc(85vh-120px)] flex-col gap-4 overflow-y-auto p-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"text-xs text-muted-foreground mb-1 block",children:"Name"}),(0,a.jsx)("input",{className:"w-full min-w-0 px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary",value:m.name,onChange:e=>p({...m,name:e.target.value}),placeholder:"Production Key"})]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("label",{className:"text-xs text-muted-foreground mb-1 block",children:"API Key"}),(0,a.jsx)("input",{type:"password",className:"w-full min-w-0 px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary",value:m.apiKey,onChange:e=>p({...m,apiKey:e.target.value})})]}),(0,a.jsx)("div",{className:"pt-6",children:(0,a.jsx)(d.$,{onClick:w,disabled:!m.apiKey||x||b,variant:"secondary",children:x?"Checking...":"Check"})})]}),y&&(0,a.jsx)(c.E,{variant:"success"===y?"default":"destructive",children:"success"===y?"Valid":"Invalid"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"text-xs text-muted-foreground mb-1 block",children:"Priority"}),(0,a.jsx)("input",{type:"number",className:"w-full min-w-0 px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary",value:m.priority,onChange:e=>p({...m,priority:Number.parseInt(e.target.value)||1})})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,a.jsx)("label",{className:"text-sm font-medium text-foreground",children:"Proxy Pool"}),(0,a.jsxs)(h.l6,{value:m.proxyPoolId,onValueChange:e=>p({...m,proxyPoolId:e}),children:[(0,a.jsx)(h.bq,{className:"w-full",children:(0,a.jsx)(h.yv,{placeholder:"None"})}),(0,a.jsxs)(h.gC,{children:[(0,a.jsx)(h.eb,{value:i,children:"None"}),(o||[]).map(e=>(0,a.jsx)(h.eb,{value:String(e.id),children:e.name},e.id))]})]})]}),(0,a.jsx)(d.$,{onClick:N,className:"w-full",disabled:!m.name||!m.apiKey||b,children:b?"Saving...":"Save"})]})]})}):null}function v({providerId:e,isOAuth:t}){let[s,o]=(0,l.useState)([]),[n,r]=(0,l.useState)([]),[c,p]=(0,l.useState)(!0),[x,u]=(0,l.useState)(!1),[h,f]=(0,l.useState)(!1),[w,N]=(0,l.useState)(null),[k,C]=(0,l.useState)(null),[S,$]=(0,l.useState)("1"),[P,T]=(0,l.useState)(null),O=(0,l.useCallback)(async()=>{try{let[t,s,a]=await Promise.all([fetch("/api/providers",{cache:"no-store"}),fetch("/api/proxy-pools?isActive=true",{cache:"no-store"}),fetch("/api/settings",{cache:"no-store"})]),n=await t.json(),l=await s.json(),i=a.ok?await a.json():{};t.ok&&o((n.connections||[]).filter(t=>t.provider===e)),s.ok&&r(l.proxyPools||[]);let d=(i.providerStrategies||{})[e]||{};C(d.fallbackStrategy||null),$(null!=d.stickyRoundRobinLimit?String(d.stickyRoundRobinLimit):"1")}catch(e){console.log("ConnectionsCard fetch error:",e)}finally{p(!1)}},[e]);(0,l.useEffect)(()=>{O()},[O]);let E=async(t,s)=>{try{let a=await fetch("/api/settings",{cache:"no-store"}),o=(a.ok?await a.json():{}).providerStrategies||{},n={};t&&(n.fallbackStrategy=t),"round-robin"===t&&""!==s&&(n.stickyRoundRobinLimit=Number(s)||3);let r={...o};0===Object.keys(n).length?delete r[e]:r[e]=n,await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerStrategies:r})})}catch(e){console.log("saveStrategy error:",e)}},_=async(e,t)=>{let a=[...s];[a[e],a[t]]=[a[t],a[e]],o(a);try{await Promise.all([fetch(`/api/providers/${a[e].id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({priority:e})}),fetch(`/api/providers/${a[t].id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({priority:t})})])}catch{await O()}},A=async e=>{T({title:"Delete Connection",message:"Delete this connection?",onConfirm:async()=>{T(null);try{(await fetch(`/api/providers/${e}`,{method:"DELETE"})).ok&&o(t=>t.filter(t=>t.id!==e))}catch(e){console.log("delete error:",e)}}})},K=async(e,t)=>{try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})})).ok&&o(s=>s.map(s=>s.id===e?{...s,isActive:t}:s))}catch(e){console.log("toggle error:",e)}},I=async(e,t)=>{try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({proxyPoolId:t||null})})).ok&&o(s=>s.map(s=>s.id===e?{...s,providerSpecificData:{...s.providerSpecificData,proxyPoolId:t||null}}:s))}catch(e){console.log("proxy error:",e)}},M=async t=>{try{(await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:e,...t})})).ok&&(await O(),u(!1))}catch(e){console.log("save apikey error:",e)}},R=async e=>{try{(await fetch(`/api/providers/${w.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).ok&&(await O(),f(!1))}catch(e){console.log("update connection error:",e)}};return c?(0,a.jsx)(y.KX,{}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.Zp,{children:(0,a.jsxs)(i.Wu,{children:[(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4",children:[(0,a.jsx)("h2",{className:"text-lg font-semibold",children:"Connections"}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsx)("span",{className:"text-xs text-muted-foreground font-medium",children:"Round Robin"}),(0,a.jsx)(b.d,{checked:"round-robin"===k,onCheckedChange:e=>{let t=e?"round-robin":null;C(t),e&&!S&&$("1"),E(t,e?S||"1":S)}}),"round-robin"===k&&(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,a.jsx)("span",{className:"text-xs text-muted-foreground",children:"Sticky:"}),(0,a.jsx)("input",{type:"number",min:1,value:S,onChange:e=>{$(e.target.value),E("round-robin",e.target.value)},className:"w-16 px-2 py-1 text-xs border border-border rounded-md bg-background focus:outline-none focus:border-primary"})]})]})]}),0===s.length?(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsx)("p",{className:"text-sm text-muted-foreground",children:"No connections yet"}),(0,a.jsxs)(d.$,{size:"sm",onClick:()=>u(!0),children:[(0,a.jsx)(m.default,{name:"add"}),"Add Connection"]})]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"flex flex-col divide-y divide-black/[0.03] dark:divide-white/[0.03] max-h-[500px] overflow-y-auto pr-1",children:s.map((e,o)=>(0,a.jsx)(g.A,{connection:e,proxyPools:n,isOAuth:t,isFirst:0===o,isLast:o===s.length-1,onMoveUp:()=>_(o,o-1),onMoveDown:()=>_(o,o+1),onToggleActive:t=>K(e.id,t),onUpdateProxy:t=>I(e.id,t),onEdit:()=>{N(e),f(!0)},onDelete:()=>A(e.id)},e.id))}),(0,a.jsx)("div",{className:"mt-4 flex justify-stretch sm:justify-start",children:(0,a.jsxs)(d.$,{size:"sm",onClick:()=>u(!0),children:[(0,a.jsx)(m.default,{name:"add"}),"Add"]})})]})]})}),(0,a.jsx)(j,{isOpen:x,provider:e,proxyPools:n,onSave:M,onClose:()=>u(!1)}),(0,a.jsx)(y.wI,{isOpen:h,connection:w,proxyPools:n,onSave:R,onClose:()=>f(!1)}),(0,a.jsx)(y.uo,{isOpen:!!P,onClose:()=>T(null),onConfirm:P?.onConfirm,title:P?.title||"Confirm",message:P?.message,variant:"danger"})]})}var w=s(1352),N=s(80159),k=s(13794),C=s(63523);function S({model:e,fullModel:t,copied:s,onCopy:o,testStatus:n,isCustom:r,isFree:l,onDeleteAlias:i,onTest:d,isTesting:c}){let p="ok"===n?"#22c55e":"error"===n?"#ef4444":void 0;return(0,a.jsx)("div",{className:`group px-3 py-2 rounded-lg border ${"ok"===n?"border-green-500/40":"error"===n?"border-red-500/40":"border-border"} hover:bg-sidebar/50`,children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(m.default,{name:"ok"===n?"check_circle":"error"===n?"cancel":"smart_toy",className:"text-base",style:p?{color:p}:void 0}),(0,a.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,a.jsx)("code",{className:"text-xs text-muted-foreground font-mono bg-sidebar px-1.5 py-0.5 rounded",children:t}),e.name&&(0,a.jsx)("span",{className:"text-[9px] text-muted-foreground/70 italic pl-1",children:e.name})]}),d&&(0,a.jsxs)("div",{className:"relative group/btn",children:[(0,a.jsx)("button",{onClick:d,disabled:c,className:`p-0.5 hover:bg-sidebar rounded text-muted-foreground hover:text-primary transition-opacity ${c?"opacity-100":"opacity-0 group-hover:opacity-100"}`,children:(0,a.jsx)(m.default,{name:c?"progress_activity":"science",className:"text-sm",style:c?{animation:"spin 1s linear infinite"}:void 0})}),(0,a.jsx)("span",{className:"pointer-events-none absolute mt-1 top-5 left-1/2 -translate-x-1/2 text-[10px] text-muted-foreground whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:c?"Testing...":"Test"})]}),(0,a.jsxs)("div",{className:"relative group/btn",children:[(0,a.jsx)("button",{onClick:()=>o(t,`model-${e.id}`),className:"p-0.5 hover:bg-sidebar rounded text-muted-foreground hover:text-primary",children:(0,a.jsx)(m.default,{name:s===`model-${e.id}`?"check":"content_copy",className:"text-sm"})}),(0,a.jsx)("span",{className:"pointer-events-none absolute mt-1 top-5 left-1/2 -translate-x-1/2 text-[10px] text-muted-foreground whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:s===`model-${e.id}`?"Copied!":"Copy"})]}),l&&(0,a.jsx)("span",{className:"text-[10px] font-bold text-green-500 bg-green-500/10 px-1.5 py-0.5 rounded",children:"FREE"}),r&&(0,a.jsxs)(w.m_,{children:[(0,a.jsx)(w.k$,{asChild:!0,children:(0,a.jsx)("button",{onClick:i,className:"p-0.5 hover:bg-red-500/10 rounded text-muted-foreground hover:text-red-500 opacity-0 group-hover:opacity-100 transition-opacity ml-auto",children:(0,a.jsx)(m.default,{name:"close",className:"text-sm"})})}),(0,a.jsx)(w.ZI,{children:"Remove custom model"})]})]})})}function $({isOpen:e,onSave:t,onClose:s}){let[o,n]=(0,l.useState)(""),r=()=>{o.trim()&&(t(o.trim()),n(""))};return(0,a.jsx)(f.lG,{open:e,onOpenChange:e=>!e&&s(),children:(0,a.jsxs)(f.Cf,{className:"max-w-md",children:[(0,a.jsx)(f.c7,{children:(0,a.jsx)(f.L3,{children:"Add Custom Model"})}),(0,a.jsxs)("div",{className:"flex max-h-[calc(85vh-120px)] flex-col gap-4 overflow-y-auto p-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"text-xs text-muted-foreground mb-1 block",children:"Model ID"}),(0,a.jsx)("input",{className:"w-full min-w-0 px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary",value:o,onChange:e=>n(e.target.value),onKeyDown:e=>"Enter"===e.key&&r(),placeholder:"e.g. tts-1-hd",autoFocus:!0})]}),(0,a.jsx)(d.$,{onClick:r,className:"w-full",disabled:!o.trim(),children:"Add"})]})]})})}function P({providerId:e,kindFilter:t,providerAliasOverride:s}){let{copied:o,copy:n}=(0,C.C)(),[r,d]=(0,l.useState)({}),[c,p]=(0,l.useState)([]),[x,u]=(0,l.useState)({}),[h,f]=(0,l.useState)(null),[y,g]=(0,l.useState)(""),[b,j]=(0,l.useState)(!1),v=s||(0,k.wG)(e),w=t||"llm",T=(0,l.useCallback)(async()=>{try{let[e,t]=await Promise.all([fetch("/api/models/alias"),fetch("/api/models/custom",{cache:"no-store"})]),s=await e.json(),a=await t.json();e.ok&&d(s.aliases||{}),t.ok&&p(a.models||[])}catch(e){console.log("ModelsCard fetch error:",e)}},[]);(0,l.useEffect)(()=>{T()},[T]);let O=async(e,t)=>{let s=`${v}/${e}`;try{(await fetch("/api/models/alias",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:s,alias:t})})).ok&&await T()}catch(e){console.log("set alias error:",e)}},E=async e=>{try{(await fetch(`/api/models/alias?alias=${encodeURIComponent(e)}`,{method:"DELETE"})).ok&&await T()}catch(e){console.log("delete alias error:",e)}},_=async e=>{try{(await fetch("/api/models/custom",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerAlias:v,id:e,type:w})})).ok&&(await T(),window.dispatchEvent(new CustomEvent("customModelChanged")))}catch(e){console.log("add custom model error:",e)}},A=async e=>{try{let t=new URLSearchParams({providerAlias:v,id:e,type:w});(await fetch(`/api/models/custom?${t}`,{method:"DELETE"})).ok&&(await T(),window.dispatchEvent(new CustomEvent("customModelChanged")))}catch(e){console.log("delete custom model error:",e)}},K=async e=>{if(!h){f(e);try{let s=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${v}/${e}`,kind:t})}),a=await s.json();u(t=>({...t,[e]:a.ok?"ok":"error"})),g(a.ok?"":a.error||"Model not reachable")}catch{u(t=>({...t,[e]:"error"})),g("Network error")}finally{f(null)}}},I=(0,N.KC)(e),M=t?I.filter(e=>e.kinds?e.kinds.includes(t):(0,N.CP)(e,"llm")===t):I,R=c.filter(e=>e.providerAlias===v&&(0,N.CP)(e,"llm")===w&&!M.some(t=>t.id===e.id));return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.Zp,{children:(0,a.jsxs)(i.Wu,{children:[(0,a.jsx)("div",{className:"flex items-center justify-between mb-4",children:(0,a.jsxs)("h2",{className:"text-lg font-semibold",children:["Models",t?` — ${t.toUpperCase()}`:""]})}),y&&(0,a.jsx)("p",{className:"text-xs text-red-500 mb-3 break-words",children:y}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-3",children:[M.map(e=>{let t=`${v}/${e.id}`,s=Object.entries(r).find(([,e])=>e===t)?.[0];return(0,a.jsx)(S,{model:e,fullModel:`${v}/${e.id}`,alias:s,copied:o,onCopy:n,onSetAlias:t=>O(e.id,t),onDeleteAlias:()=>E(s),testStatus:x[e.id],onTest:()=>K(e.id),isTesting:h===e.id,isFree:e.isFree},e.id)}),R.map(e=>(0,a.jsx)(S,{model:{id:e.id,name:e.name},fullModel:`${v}/${e.id}`,copied:o,onCopy:n,onSetAlias:()=>{},onDeleteAlias:()=>A(e.id),testStatus:x[e.id],onTest:()=>K(e.id),isTesting:h===e.id,isCustom:!0},`${e.id}-${e.type}`)),(0,a.jsxs)("button",{onClick:()=>j(!0),className:"flex items-center gap-1.5 px-3 py-2 rounded-lg border border-dashed border-black/15 dark:border-white/15 text-xs text-muted-foreground hover:text-primary hover:border-primary/40 transition-colors",children:[(0,a.jsx)(m.default,{name:"add",className:"text-sm"}),"Add Model"]})]})]})}),(0,a.jsx)($,{isOpen:b,onSave:async e=>{await _(e),j(!1)},onClose:()=>j(!1)})]})}function T({label:e,children:t}){return(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-1.5 sm:flex-row sm:items-center sm:gap-3",children:[(0,a.jsx)("span",{className:"w-full text-xs font-medium text-muted-foreground sm:w-20 sm:shrink-0",children:e}),(0,a.jsx)("div",{className:"w-full min-w-0 flex-1",children:t})]})}let O="Does this request require urgent attention?";function E(){let{id:e}=(0,r.useParams)(),t=k.rj.find(e=>"systemone"===e.id);if(!t)return(0,r.notFound)();let s=k.Q2[e]||(0,k.zt)(e);if(!s)return(0,r.notFound)();let o=s.id,h=s.serviceKinds??["llm"];if(!h.includes("systemone"))return(0,r.notFound)();let f=(0,k.wG)(o),y=(0,N.KC)(o).filter(e=>"systemone"===(0,N.CP)(e)),[g,b]=(0,l.useState)(y[0]?.id??""),[j,w]=(0,l.useState)("My payments have failed for three days and I am losing sales. Please help now."),[S,$]=(0,l.useState)(O),[E,_]=(0,l.useState)(""),[A,K]=(0,l.useState)(!1),[I,M]=(0,l.useState)(""),[R,D]=(0,l.useState)(null),[U,J]=(0,l.useState)(null),[F,L]=(0,l.useState)(""),{copied:z,copy:q}=(0,C.C)(),{copied:G,copy:H}=(0,C.C)();(0,l.useEffect)(()=>{L(window.location.origin),fetch("/api/keys").then(e=>e.json()).then(e=>{_((e.keys||[]).find(e=>!1!==e.isActive)?.key||"")}).catch(()=>{})},[]);let Z=g?`${f}/${g}`:f,W={model:Z,state:j,questions:{is_urgent:{type:"noul",instructions:S.trim()||O}}},B=F||window.location.origin,Q=t.endpoint.path,V=`curl -X ${t.endpoint.method} ${B}${Q} \\
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2421],{24715:(e,t,s)=>{Promise.resolve().then(s.bind(s,53148))},53148:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>E});var a=s(29798),o=s(50141),n=s.n(o),r=s(70782),l=s(15814),i=s(75669),d=s(18055),c=s(53784),m=s(58913),p=s(738),x=s(14670),u=s(57779),h=s(45111),f=s(49787),y=s(15764),g=s(21796),b=s(14231);function j({isOpen:e,provider:t,providerName:s,proxyPools:o,onSave:n,onClose:r}){let i="__none__",[m,p]=(0,l.useState)({name:"",apiKey:"",priority:1,proxyPoolId:i}),[x,u]=(0,l.useState)(!1),[y,g]=(0,l.useState)(null),[b,v]=(0,l.useState)(!1),w=async()=>{u(!0);try{let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t,apiKey:m.apiKey})}),s=await e.json();g(s.valid?"success":"failed")}catch{g("failed")}finally{u(!1)}},N=async()=>{if(t&&m.apiKey){v(!0);try{let e=!1;try{u(!0),g(null);let s=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t,apiKey:m.apiKey})});e=!!(await s.json()).valid,g(e?"success":"failed")}catch{g("failed")}finally{u(!1)}await n({name:m.name,apiKey:m.apiKey,priority:m.priority,proxyPoolId:m.proxyPoolId===i?null:m.proxyPoolId,testStatus:e?"active":"unknown"})}finally{v(!1)}}};return t?(0,a.jsx)(f.lG,{open:e,onOpenChange:e=>!e&&r(),children:(0,a.jsxs)(f.Cf,{className:"max-w-md",children:[(0,a.jsx)(f.c7,{children:(0,a.jsx)(f.L3,{children:`Add ${s||t} API Key`})}),(0,a.jsxs)("div",{className:"flex max-h-[calc(85vh-120px)] flex-col gap-4 overflow-y-auto p-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"text-xs text-muted-foreground mb-1 block",children:"Name"}),(0,a.jsx)("input",{className:"w-full min-w-0 px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary",value:m.name,onChange:e=>p({...m,name:e.target.value}),placeholder:"Production Key"})]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("label",{className:"text-xs text-muted-foreground mb-1 block",children:"API Key"}),(0,a.jsx)("input",{type:"password",className:"w-full min-w-0 px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary",value:m.apiKey,onChange:e=>p({...m,apiKey:e.target.value})})]}),(0,a.jsx)("div",{className:"pt-6",children:(0,a.jsx)(d.$,{onClick:w,disabled:!m.apiKey||x||b,variant:"secondary",children:x?"Checking...":"Check"})})]}),y&&(0,a.jsx)(c.E,{variant:"success"===y?"default":"destructive",children:"success"===y?"Valid":"Invalid"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"text-xs text-muted-foreground mb-1 block",children:"Priority"}),(0,a.jsx)("input",{type:"number",className:"w-full min-w-0 px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary",value:m.priority,onChange:e=>p({...m,priority:Number.parseInt(e.target.value)||1})})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,a.jsx)("label",{className:"text-sm font-medium text-foreground",children:"Proxy Pool"}),(0,a.jsxs)(h.l6,{value:m.proxyPoolId,onValueChange:e=>p({...m,proxyPoolId:e}),children:[(0,a.jsx)(h.bq,{className:"w-full",children:(0,a.jsx)(h.yv,{placeholder:"None"})}),(0,a.jsxs)(h.gC,{children:[(0,a.jsx)(h.eb,{value:i,children:"None"}),(o||[]).map(e=>(0,a.jsx)(h.eb,{value:String(e.id),children:e.name},e.id))]})]})]}),(0,a.jsx)(d.$,{onClick:N,className:"w-full",disabled:!m.name||!m.apiKey||b,children:b?"Saving...":"Save"})]})]})}):null}function v({providerId:e,isOAuth:t}){let[s,o]=(0,l.useState)([]),[n,r]=(0,l.useState)([]),[c,p]=(0,l.useState)(!0),[x,u]=(0,l.useState)(!1),[h,f]=(0,l.useState)(!1),[w,N]=(0,l.useState)(null),[k,C]=(0,l.useState)(null),[S,$]=(0,l.useState)("1"),[P,T]=(0,l.useState)(null),O=(0,l.useCallback)(async()=>{try{let[t,s,a]=await Promise.all([fetch("/api/providers",{cache:"no-store"}),fetch("/api/proxy-pools?isActive=true",{cache:"no-store"}),fetch("/api/settings",{cache:"no-store"})]),n=await t.json(),l=await s.json(),i=a.ok?await a.json():{};t.ok&&o((n.connections||[]).filter(t=>t.provider===e)),s.ok&&r(l.proxyPools||[]);let d=(i.providerStrategies||{})[e]||{};C(d.fallbackStrategy||null),$(null!=d.stickyRoundRobinLimit?String(d.stickyRoundRobinLimit):"1")}catch(e){console.log("ConnectionsCard fetch error:",e)}finally{p(!1)}},[e]);(0,l.useEffect)(()=>{O()},[O]);let E=async(t,s)=>{try{let a=await fetch("/api/settings",{cache:"no-store"}),o=(a.ok?await a.json():{}).providerStrategies||{},n={};t&&(n.fallbackStrategy=t),"round-robin"===t&&""!==s&&(n.stickyRoundRobinLimit=Number(s)||3);let r={...o};0===Object.keys(n).length?delete r[e]:r[e]=n,await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerStrategies:r})})}catch(e){console.log("saveStrategy error:",e)}},A=async(e,t)=>{let a=[...s];[a[e],a[t]]=[a[t],a[e]],o(a);try{await Promise.all([fetch(`/api/providers/${a[e].id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({priority:e})}),fetch(`/api/providers/${a[t].id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({priority:t})})])}catch{await O()}},_=async e=>{T({title:"Delete Connection",message:"Delete this connection?",onConfirm:async()=>{T(null);try{(await fetch(`/api/providers/${e}`,{method:"DELETE"})).ok&&o(t=>t.filter(t=>t.id!==e))}catch(e){console.log("delete error:",e)}}})},I=async(e,t)=>{try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})})).ok&&o(s=>s.map(s=>s.id===e?{...s,isActive:t}:s))}catch(e){console.log("toggle error:",e)}},K=async(e,t)=>{try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({proxyPoolId:t||null})})).ok&&o(s=>s.map(s=>s.id===e?{...s,providerSpecificData:{...s.providerSpecificData,proxyPoolId:t||null}}:s))}catch(e){console.log("proxy error:",e)}},M=async t=>{try{(await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:e,...t})})).ok&&(await O(),u(!1))}catch(e){console.log("save apikey error:",e)}},R=async e=>{try{(await fetch(`/api/providers/${w.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).ok&&(await O(),f(!1))}catch(e){console.log("update connection error:",e)}};return c?(0,a.jsx)(y.KX,{}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.Zp,{children:(0,a.jsxs)(i.Wu,{children:[(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4",children:[(0,a.jsx)("h2",{className:"text-lg font-semibold",children:"Connections"}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsx)("span",{className:"text-xs text-muted-foreground font-medium",children:"Round Robin"}),(0,a.jsx)(b.d,{checked:"round-robin"===k,onCheckedChange:e=>{let t=e?"round-robin":null;C(t),e&&!S&&$("1"),E(t,e?S||"1":S)}}),"round-robin"===k&&(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,a.jsx)("span",{className:"text-xs text-muted-foreground",children:"Sticky:"}),(0,a.jsx)("input",{type:"number",min:1,value:S,onChange:e=>{$(e.target.value),E("round-robin",e.target.value)},className:"w-16 px-2 py-1 text-xs border border-border rounded-md bg-background focus:outline-none focus:border-primary"})]})]})]}),0===s.length?(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsx)("p",{className:"text-sm text-muted-foreground",children:"No connections yet"}),(0,a.jsxs)(d.$,{size:"sm",onClick:()=>u(!0),children:[(0,a.jsx)(m.default,{name:"add"}),"Add Connection"]})]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"flex flex-col divide-y divide-black/[0.03] dark:divide-white/[0.03] max-h-[500px] overflow-y-auto pr-1",children:s.map((e,o)=>(0,a.jsx)(g.A,{connection:e,proxyPools:n,isOAuth:t,isFirst:0===o,isLast:o===s.length-1,onMoveUp:()=>A(o,o-1),onMoveDown:()=>A(o,o+1),onToggleActive:t=>I(e.id,t),onUpdateProxy:t=>K(e.id,t),onEdit:()=>{N(e),f(!0)},onDelete:()=>_(e.id)},e.id))}),(0,a.jsx)("div",{className:"mt-4 flex justify-stretch sm:justify-start",children:(0,a.jsxs)(d.$,{size:"sm",onClick:()=>u(!0),children:[(0,a.jsx)(m.default,{name:"add"}),"Add"]})})]})]})}),(0,a.jsx)(j,{isOpen:x,provider:e,proxyPools:n,onSave:M,onClose:()=>u(!1)}),(0,a.jsx)(y.wI,{isOpen:h,connection:w,proxyPools:n,onSave:R,onClose:()=>f(!1)}),(0,a.jsx)(y.uo,{isOpen:!!P,onClose:()=>T(null),onConfirm:P?.onConfirm,title:P?.title||"Confirm",message:P?.message,variant:"danger"})]})}var w=s(1352),N=s(80159),k=s(13794),C=s(63523);function S({model:e,fullModel:t,copied:s,onCopy:o,testStatus:n,isCustom:r,isFree:l,onDeleteAlias:i,onTest:d,isTesting:p}){let x="ok"===n?"#22c55e":"error"===n?"#ef4444":void 0;return(0,a.jsx)("div",{className:`group px-3 py-2 rounded-lg border ${"ok"===n?"border-green-500/40":"error"===n?"border-red-500/40":"border-border"} hover:bg-sidebar/50`,children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(m.default,{name:"ok"===n?"check_circle":"error"===n?"cancel":"smart_toy",className:"text-base",style:x?{color:x}:void 0}),(0,a.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,a.jsx)("code",{className:"text-xs text-muted-foreground font-mono bg-sidebar px-1.5 py-0.5 rounded",children:t}),e.name&&(0,a.jsx)("span",{className:"text-[9px] text-muted-foreground/70 italic pl-1",children:e.name})]}),d&&(0,a.jsxs)("div",{className:"relative group/btn",children:[(0,a.jsx)("button",{onClick:d,disabled:p,className:`p-0.5 hover:bg-sidebar rounded text-muted-foreground hover:text-primary transition-opacity ${p?"opacity-100":"opacity-0 group-hover:opacity-100"}`,children:(0,a.jsx)(m.default,{name:p?"progress_activity":"science",className:"text-sm",style:p?{animation:"spin 1s linear infinite"}:void 0})}),(0,a.jsx)("span",{className:"pointer-events-none absolute mt-1 top-5 left-1/2 -translate-x-1/2 text-[10px] text-muted-foreground whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:p?"Testing...":"Test"})]}),(0,a.jsxs)("div",{className:"relative group/btn",children:[(0,a.jsx)("button",{onClick:()=>o(t,`model-${e.id}`),className:"p-0.5 hover:bg-sidebar rounded text-muted-foreground hover:text-primary",children:(0,a.jsx)(m.default,{name:s===`model-${e.id}`?"check":"content_copy",className:"text-sm"})}),(0,a.jsx)("span",{className:"pointer-events-none absolute mt-1 top-5 left-1/2 -translate-x-1/2 text-[10px] text-muted-foreground whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:s===`model-${e.id}`?"Copied!":"Copy"})]}),l&&(0,a.jsxs)(w.m_,{children:[(0,a.jsx)(w.k$,{asChild:!0,children:(0,a.jsx)(c.E,{className:"bg-green-500/10 font-bold text-green-600 dark:text-green-500",children:"FREE"})}),(0,a.jsx)(w.ZI,{children:"Free model: works through the free OpenCode lane. An OpenCode Zen/Go API key cannot unlock it."})]}),r&&(0,a.jsxs)(w.m_,{children:[(0,a.jsx)(w.k$,{asChild:!0,children:(0,a.jsx)("button",{onClick:i,className:"p-0.5 hover:bg-red-500/10 rounded text-muted-foreground hover:text-red-500 opacity-0 group-hover:opacity-100 transition-opacity ml-auto",children:(0,a.jsx)(m.default,{name:"close",className:"text-sm"})})}),(0,a.jsx)(w.ZI,{children:"Remove custom model"})]})]})})}function $({isOpen:e,onSave:t,onClose:s}){let[o,n]=(0,l.useState)(""),r=()=>{o.trim()&&(t(o.trim()),n(""))};return(0,a.jsx)(f.lG,{open:e,onOpenChange:e=>!e&&s(),children:(0,a.jsxs)(f.Cf,{className:"max-w-md",children:[(0,a.jsx)(f.c7,{children:(0,a.jsx)(f.L3,{children:"Add Custom Model"})}),(0,a.jsxs)("div",{className:"flex max-h-[calc(85vh-120px)] flex-col gap-4 overflow-y-auto p-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"text-xs text-muted-foreground mb-1 block",children:"Model ID"}),(0,a.jsx)("input",{className:"w-full min-w-0 px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary",value:o,onChange:e=>n(e.target.value),onKeyDown:e=>"Enter"===e.key&&r(),placeholder:"e.g. tts-1-hd",autoFocus:!0})]}),(0,a.jsx)(d.$,{onClick:r,className:"w-full",disabled:!o.trim(),children:"Add"})]})]})})}function P({providerId:e,kindFilter:t,providerAliasOverride:s}){let{copied:o,copy:n}=(0,C.C)(),[r,d]=(0,l.useState)({}),[c,p]=(0,l.useState)([]),[x,u]=(0,l.useState)({}),[h,f]=(0,l.useState)(null),[y,g]=(0,l.useState)(""),[b,j]=(0,l.useState)(!1),v=s||(0,k.wG)(e),w=t||"llm",T=(0,l.useCallback)(async()=>{try{let[e,t]=await Promise.all([fetch("/api/models/alias"),fetch("/api/models/custom",{cache:"no-store"})]),s=await e.json(),a=await t.json();e.ok&&d(s.aliases||{}),t.ok&&p(a.models||[])}catch(e){console.log("ModelsCard fetch error:",e)}},[]);(0,l.useEffect)(()=>{T()},[T]);let O=async(e,t)=>{let s=`${v}/${e}`;try{(await fetch("/api/models/alias",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:s,alias:t})})).ok&&await T()}catch(e){console.log("set alias error:",e)}},E=async e=>{try{(await fetch(`/api/models/alias?alias=${encodeURIComponent(e)}`,{method:"DELETE"})).ok&&await T()}catch(e){console.log("delete alias error:",e)}},A=async e=>{try{(await fetch("/api/models/custom",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerAlias:v,id:e,type:w})})).ok&&(await T(),window.dispatchEvent(new CustomEvent("customModelChanged")))}catch(e){console.log("add custom model error:",e)}},_=async e=>{try{let t=new URLSearchParams({providerAlias:v,id:e,type:w});(await fetch(`/api/models/custom?${t}`,{method:"DELETE"})).ok&&(await T(),window.dispatchEvent(new CustomEvent("customModelChanged")))}catch(e){console.log("delete custom model error:",e)}},I=async e=>{if(!h){f(e);try{let s=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${v}/${e}`,kind:t})}),a=await s.json();u(t=>({...t,[e]:a.ok?"ok":"error"})),g(a.ok?"":a.error||"Model not reachable")}catch{u(t=>({...t,[e]:"error"})),g("Network error")}finally{f(null)}}},K=(0,N.KC)(e),M=t?K.filter(e=>e.kinds?e.kinds.includes(t):(0,N.CP)(e,"llm")===t):K,R=c.filter(e=>e.providerAlias===v&&(0,N.CP)(e,"llm")===w&&!M.some(t=>t.id===e.id));return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.Zp,{children:(0,a.jsxs)(i.Wu,{children:[(0,a.jsx)("div",{className:"flex items-center justify-between mb-4",children:(0,a.jsxs)("h2",{className:"text-lg font-semibold",children:["Models",t?` — ${t.toUpperCase()}`:""]})}),y&&(0,a.jsx)("p",{className:"text-xs text-red-500 mb-3 break-words",children:y}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-3",children:[M.map(e=>{let t=`${v}/${e.id}`,s=Object.entries(r).find(([,e])=>e===t)?.[0];return(0,a.jsx)(S,{model:e,fullModel:`${v}/${e.id}`,alias:s,copied:o,onCopy:n,onSetAlias:t=>O(e.id,t),onDeleteAlias:()=>E(s),testStatus:x[e.id],onTest:()=>I(e.id),isTesting:h===e.id,isFree:e.isFree||(0,N.An)(v,e.id)},e.id)}),R.map(e=>(0,a.jsx)(S,{model:{id:e.id,name:e.name},fullModel:`${v}/${e.id}`,copied:o,onCopy:n,onSetAlias:()=>{},onDeleteAlias:()=>_(e.id),testStatus:x[e.id],onTest:()=>I(e.id),isTesting:h===e.id,isCustom:!0},`${e.id}-${e.type}`)),(0,a.jsxs)("button",{onClick:()=>j(!0),className:"flex items-center gap-1.5 px-3 py-2 rounded-lg border border-dashed border-black/15 dark:border-white/15 text-xs text-muted-foreground hover:text-primary hover:border-primary/40 transition-colors",children:[(0,a.jsx)(m.default,{name:"add",className:"text-sm"}),"Add Model"]})]})]})}),(0,a.jsx)($,{isOpen:b,onSave:async e=>{await A(e),j(!1)},onClose:()=>j(!1)})]})}function T({label:e,children:t}){return(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-1.5 sm:flex-row sm:items-center sm:gap-3",children:[(0,a.jsx)("span",{className:"w-full text-xs font-medium text-muted-foreground sm:w-20 sm:shrink-0",children:e}),(0,a.jsx)("div",{className:"w-full min-w-0 flex-1",children:t})]})}let O="Does this request require urgent attention?";function E(){let{id:e}=(0,r.useParams)(),t=k.rj.find(e=>"systemone"===e.id);if(!t)return(0,r.notFound)();let s=k.Q2[e]||(0,k.zt)(e);if(!s)return(0,r.notFound)();let o=s.id,h=s.serviceKinds??["llm"];if(!h.includes("systemone"))return(0,r.notFound)();let f=(0,k.wG)(o),y=(0,N.KC)(o).filter(e=>"systemone"===(0,N.CP)(e)),[g,b]=(0,l.useState)(y[0]?.id??""),[j,w]=(0,l.useState)("My payments have failed for three days and I am losing sales. Please help now."),[S,$]=(0,l.useState)(O),[E,A]=(0,l.useState)(""),[_,I]=(0,l.useState)(!1),[K,M]=(0,l.useState)(""),[R,D]=(0,l.useState)(null),[U,J]=(0,l.useState)(null),[F,L]=(0,l.useState)(""),{copied:z,copy:q}=(0,C.C)(),{copied:G,copy:Z}=(0,C.C)();(0,l.useEffect)(()=>{L(window.location.origin),fetch("/api/keys").then(e=>e.json()).then(e=>{A((e.keys||[]).find(e=>!1!==e.isActive)?.key||"")}).catch(()=>{})},[]);let H=g?`${f}/${g}`:f,W={model:H,state:j,questions:{is_urgent:{type:"noul",instructions:S.trim()||O}}},B=F||window.location.origin,Q=t.endpoint.path,V=`curl -X ${t.endpoint.method} ${B}${Q} \\
|
|
2
2
|
-H "Content-Type: application/json" \\
|
|
3
3
|
-H "Authorization: Bearer ${E||"YOUR_KEY"}" \\
|
|
4
|
-
-d '${JSON.stringify(W)}'`,X=async()=>{if(!j.trim()||!
|
|
4
|
+
-d '${JSON.stringify(W)}'`,X=async()=>{if(!j.trim()||!H)return;I(!0),M(""),D(null),J(null);let e=Date.now();try{let s={"Content-Type":"application/json"};E&&(s.Authorization=`Bearer ${E}`);let a=await fetch(`/api${Q}`,{method:t.endpoint.method,headers:s,body:JSON.stringify(W)}),o=await a.json().catch(()=>({}));if(J(Date.now()-e),!a.ok)return void M(o?.error?.message||o?.error||`HTTP ${a.status}`);D(o)}catch(e){M(e.message||"Network error")}finally{I(!1)}},Y=R?JSON.stringify(R,null,2):"";return(0,a.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)(d.$,{variant:"outline",size:"sm",asChild:!0,className:"mb-4 self-start",children:(0,a.jsxs)(n(),{href:"/dashboard/media-providers/systemone",children:[(0,a.jsx)(m.default,{name:"arrow_back",className:"text-lg"}),"System One"]})}),(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:gap-4",children:[(0,a.jsx)("div",{className:"size-12 rounded-lg flex items-center justify-center shrink-0",style:{backgroundColor:`${s.color}15`},children:(0,a.jsx)(p.A,{src:`/providers/${o}.png`,alt:s.name,size:48,className:"object-contain rounded-lg max-w-[48px] max-h-[48px]",fallbackText:s.textIcon||o.slice(0,2).toUpperCase(),fallbackColor:s.color})}),(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2 sm:gap-3",children:[(0,a.jsx)("h1",{className:"text-3xl font-semibold tracking-tight",children:s.name}),s.notice?.apiKeyUrl&&(0,a.jsxs)("a",{href:s.notice.apiKeyUrl,target:"_blank",rel:"noopener noreferrer",className:"text-xs text-primary hover:underline inline-flex items-center gap-1",children:[(0,a.jsx)(m.default,{name:"open_in_new",className:"text-sm"}),"Get API Key"]})]}),(0,a.jsx)("div",{className:"flex items-center gap-1.5 mt-1 flex-wrap",children:h.map(e=>(0,a.jsx)(c.E,{variant:"systemone"===e?"default":"secondary",children:e.toUpperCase()},e))})]})]})]}),s.noAuth?(0,a.jsx)(x.default,{providerId:o}):(0,a.jsx)(v,{providerId:o,isOAuth:!1}),(0,a.jsx)(P,{providerId:o,kindFilter:"systemone"}),s.systemoneConfig&&(0,a.jsx)(u.default,{config:s.systemoneConfig,provider:s,title:"System One Config"}),(0,a.jsx)(i.Zp,{children:(0,a.jsxs)(i.Wu,{children:[(0,a.jsx)("h2",{className:"text-lg font-semibold mb-4",children:"Example"}),(0,a.jsxs)("div",{className:"flex flex-col gap-2.5",children:[y.length>0?(0,a.jsx)(T,{label:"Model",children:(0,a.jsx)("select",{value:g,onChange:e=>b(e.target.value),className:"w-full px-3 py-1.5 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary",children:y.map(e=>(0,a.jsx)("option",{value:e.id,children:e.name||e.id},e.id))})}):(0,a.jsx)(T,{label:"Model",children:(0,a.jsx)("input",{value:g,onChange:e=>b(e.target.value),placeholder:"Enter model id (provider-specific)",className:"w-full px-3 py-1.5 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary font-mono"})}),(0,a.jsx)(T,{label:"Endpoint",children:(0,a.jsxs)("span",{className:"w-full min-w-0 flex-1 px-3 py-1.5 text-sm font-mono bg-sidebar rounded-lg truncate block",children:[B,Q]})}),(0,a.jsx)(T,{label:"API Key",children:(0,a.jsx)("span",{className:"px-3 py-1.5 text-sm font-mono bg-sidebar rounded-lg truncate block",children:E?`${E.slice(0,8)}${"•".repeat(Math.min(20,Math.max(0,E.length-8)))}`:(0,a.jsx)("span",{className:"text-muted-foreground italic",children:"No key configured"})})}),(0,a.jsx)(T,{label:"State",children:(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsx)("input",{value:j,onChange:e=>w(e.target.value),placeholder:"Situation, support ticket, or text to evaluate",className:"w-full px-3 py-1.5 pr-7 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary"}),j&&(0,a.jsx)("button",{type:"button",onClick:()=>w(""),className:"absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-primary transition-colors",children:(0,a.jsx)(m.default,{name:"close",className:"text-[14px]"})})]})}),(0,a.jsx)(T,{label:"Question",children:(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsx)("input",{value:S,onChange:e=>$(e.target.value),placeholder:"Enter evaluation question or criteria",className:"w-full px-3 py-1.5 pr-7 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary"}),S&&(0,a.jsx)("button",{type:"button",onClick:()=>$(""),className:"absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-primary transition-colors",children:(0,a.jsx)(m.default,{name:"close",className:"text-[14px]"})})]})}),(0,a.jsxs)("div",{className:"mt-1",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between mb-1.5",children:[(0,a.jsx)("span",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wider",children:"Request"}),(0,a.jsxs)("div",{className:"flex w-full flex-col gap-2 sm:w-auto sm:flex-row sm:items-center",children:[(0,a.jsxs)("button",{onClick:()=>q(V),className:"inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-primary transition-colors",children:[(0,a.jsx)(m.default,{name:z?"check":"content_copy",className:"text-[14px]"}),z?"Copied":"Copy"]}),(0,a.jsxs)("button",{onClick:X,disabled:_||!j.trim()||!H,className:"flex w-full sm:w-auto items-center justify-center gap-1.5 px-3 py-1 rounded-lg bg-primary text-white text-xs font-medium hover:bg-primary/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:[(0,a.jsx)(m.default,{name:"play_arrow",className:"text-[14px]",style:_?{animation:"spin 1s linear infinite"}:void 0}),_?"Running...":"Run"]})]})]}),(0,a.jsx)("pre",{className:"bg-sidebar rounded-lg px-3 py-2.5 text-xs font-mono overflow-x-auto whitespace-pre-wrap break-all",children:V})]}),K&&(0,a.jsx)("p",{className:"text-xs text-red-500 break-words",children:K}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between mb-1.5",children:[(0,a.jsxs)("span",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wider",children:["Response"," ",null!==U&&(0,a.jsxs)("span",{className:"font-normal normal-case",children:["⚡ ",U,"ms"]})]}),R&&(0,a.jsxs)("button",{onClick:()=>Z(Y),className:"inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-primary transition-colors",children:[(0,a.jsx)(m.default,{name:G?"check":"content_copy",className:"text-[14px]"}),G?"Copied":"Copy"]})]}),(0,a.jsx)("pre",{className:"bg-sidebar rounded-lg px-3 py-2.5 text-xs font-mono overflow-x-auto whitespace-pre-wrap break-all opacity-70",children:R?Y:`{
|
|
5
5
|
"model": "jev-1.13",
|
|
6
6
|
"answers": {
|
|
7
7
|
"is_urgent": { "type": "noul", "noul": 0.99 }
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2134],{48547:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>ee});var a=s(29798),l=s(58913),r=s(15814),n=s(70782),o=s(50141),i=s.n(o),d=s(16653),c=s(63729),m=s(15764),p=s(75669),x=s(18055),u=s(13794),h=s(80159),f=s(63523),g=s(90619),j=s(51780);let y=new Map;async function b(e){if(!e?.url||!e?.type)return[];let t=y.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 y.set(e.url,{data:a,expiresAt:Date.now()+6e5}),a}catch{return[]}}function v({customModels:e=[],modelAliases:t={},providerAlias:s,builtInModels:a=[],type:l="llm",includeLegacyAliases:r=!0}){let n=new Set(a.map(e=>e.id)),o=new Set,i=[];for(let t of e){if(!t?.id||t.providerAlias!==s)continue;let e=t?.kind||t?.type||"llm";if(l&&e!==l||n.has(t.id))continue;let a=`${s}/${t.id}`;o.has(a)||(o.add(a),i.push({id:t.id,name:t.name||t.id,fullModel:a,source:"custom",type:e}))}if(!r)return i;let d=`${s}/`;for(let[e,s]of Object.entries(t||{})){if("string"!=typeof s||!s.startsWith(d))continue;let t=s.slice(d.length);!t||n.has(t)||o.has(s)||(o.add(s),i.push({id:t,alias:e,fullModel:s,source:"legacyAlias",type:l||"llm"}))}return i}var N=s(53784),w=s(1352);function k({model:e,fullModel:t,alias:s,copied:r,onCopy:n,testStatus:o,isCustom:i,isFree:d,onDeleteAlias:c,onTest:p,isTesting:x,onDisable:u,caps:h}){let f="ok"===o?"#22c55e":"error"===o?"#ef4444":void 0;return(0,a.jsx)("div",{className:`group min-w-0 max-w-full rounded-lg border px-3 py-2 ${"ok"===o?"border-green-500/40":"error"===o?"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)(l.default,{name:"ok"===o?"check_circle":"error"===o?"cancel":"smart_toy",className:"shrink-0 text-base",style:f?{color:f}:void 0}),(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-muted-foreground sm:max-w-[360px]",children:t}),(0,a.jsxs)("span",{className:"flex min-w-0 items-center text-[9px] gap-1 pl-1",children:[e.name&&(0,a.jsx)("span",{className:"truncate text-[9px] italic text-muted-foreground/70",children:e.name}),(0,a.jsx)(m.nh,{caps:h,colorOverride:"text-muted-foreground/70",size:12})]})]}),d&&(0,a.jsxs)(w.m_,{children:[(0,a.jsx)(w.k$,{asChild:!0,children:(0,a.jsx)(N.E,{className:"shrink-0 bg-green-500/10 font-bold text-green-600 dark:text-green-500",children:"FREE"})}),(0,a.jsx)(w.ZI,{children:"Free model: works through the free OpenCode lane. An OpenCode Zen/Go API key cannot unlock it."})]}),p&&(0,a.jsxs)("div",{className:"relative shrink-0 group/btn",children:[(0,a.jsx)("button",{onClick:p,disabled:x,className:`rounded p-0.5 text-muted-foreground transition-opacity hover:bg-sidebar hover:text-primary ${x?"opacity-100":"opacity-100 sm:opacity-0 sm:group-hover:opacity-100"}`,children:(0,a.jsx)(l.default,{name:x?"progress_activity":"science",className:"text-sm",style:x?{animation:"spin 1s linear infinite"}:void 0})}),(0,a.jsx)("span",{className:"pointer-events-none absolute mt-1 top-5 left-1/2 -translate-x-1/2 text-[10px] text-muted-foreground whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:x?"Testing...":"Test"})]}),(0,a.jsxs)("div",{className:"relative shrink-0 group/btn",children:[(0,a.jsx)("button",{onClick:()=>n(t,`model-${e.id}`),className:"rounded p-0.5 text-muted-foreground hover:bg-sidebar hover:text-primary",children:(0,a.jsx)(l.default,{name:r===`model-${e.id}`?"check":"content_copy",className:"text-sm"})}),(0,a.jsx)("span",{className:"pointer-events-none absolute mt-1 top-5 left-1/2 -translate-x-1/2 text-[10px] text-muted-foreground whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:r===`model-${e.id}`?"Copied!":"Copy"})]}),i?(0,a.jsxs)(w.m_,{children:[(0,a.jsx)(w.k$,{asChild:!0,children:(0,a.jsx)("button",{onClick:c,className:"ml-auto rounded p-0.5 text-muted-foreground opacity-100 transition-opacity hover:bg-red-500/10 hover:text-red-500 sm:opacity-0 sm:group-hover:opacity-100",children:(0,a.jsx)(l.default,{name:"close",className:"text-sm"})})}),(0,a.jsx)(w.ZI,{children:"Remove custom model"})]}):u?(0,a.jsxs)(w.m_,{children:[(0,a.jsx)(w.k$,{asChild:!0,children:(0,a.jsx)("button",{onClick:u,className:"ml-auto rounded p-0.5 text-muted-foreground opacity-100 transition-opacity hover:bg-red-500/10 hover:text-red-500 sm:opacity-0 sm:group-hover:opacity-100",children:(0,a.jsx)(l.default,{name:"close",className:"text-sm"})})}),(0,a.jsx)(w.ZI,{children:"Disable this model"})]}):null]})})}var C=s(14231),S=s(7896),A=s(49787),$=s(63357),T=s(69962),O=s(59370);function P({modelId:e,fullModel:t,copied:s,onCopy:r,onDeleteAlias:n,onTest:o,testStatus:i,isTesting:d}){let c="ok"===i?"#22c55e":"error"===i?"#ef4444":void 0;return(0,a.jsxs)("div",{className:`flex items-center gap-3 p-3 rounded-lg border ${"ok"===i?"border-green-500/40":"error"===i?"border-red-500/40":"border-border"} hover:bg-sidebar/50`,children:[(0,a.jsx)(l.default,{name:"ok"===i?"check_circle":"error"===i?"cancel":"smart_toy",className:"text-base text-muted-foreground",style:c?{color:c}:void 0}),(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-muted-foreground 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:()=>r(t,`model-${e}`),className:"p-0.5 hover:bg-sidebar rounded text-muted-foreground hover:text-primary",children:(0,a.jsx)(l.default,{name:s===`model-${e}`?"check":"content_copy",className:"text-sm"})}),(0,a.jsx)("span",{className:"pointer-events-none absolute top-5 left-1/2 -translate-x-1/2 text-[10px] text-muted-foreground whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:s===`model-${e}`?"Copied!":"Copy"})]}),o&&(0,a.jsxs)("div",{className:"relative group/btn",children:[(0,a.jsx)("button",{onClick:o,disabled:d,className:"p-0.5 hover:bg-sidebar rounded text-muted-foreground hover:text-primary transition-colors",children:(0,a.jsx)(l.default,{name:d?"progress_activity":"science",className:"text-sm",style:d?{animation:"spin 1s linear infinite"}:void 0})}),(0,a.jsx)("span",{className:"pointer-events-none absolute top-5 left-1/2 -translate-x-1/2 text-[10px] text-muted-foreground whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:d?"Testing...":"Test"})]})]})]}),(0,a.jsxs)(w.m_,{children:[(0,a.jsx)(w.k$,{asChild:!0,children:(0,a.jsx)("button",{onClick:n,className:"p-1 hover:bg-red-50 rounded text-red-500",children:(0,a.jsx)(l.default,{name:"delete",className:"text-sm"})})}),(0,a.jsx)(w.ZI,{children:"Remove model"})]})]})}function E({providerStorageAlias:e,providerDisplayAlias:t,modelAliases:s,customModels:n,copied:o,onCopy:i,onDeleteAlias:d,onAddCustomModel:c,onDeleteCustomModel:m,connections:p,isAnthropic:u}){let[h,f]=(0,r.useState)(""),[g,j]=(0,r.useState)(!1),[y,b]=(0,r.useState)(!1),[N,w]=(0,r.useState)(null),[k,C]=(0,r.useState)({}),S=async t=>{if(!N){w(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();C(e=>({...e,[t]:a.ok?"ok":"error"}))}catch{C(e=>({...e,[t]:"error"}))}finally{w(null)}}},A=v({customModels:n,modelAliases:s,providerAlias:e,type:"llm"}),$=async()=>{if(!h.trim()||g)return;let e=h.trim();if(A.some(t=>t.id===e))return void alert("Model already exists for this provider.");j(!0);try{await c(e),f("")}catch(e){console.log("Error adding model:",e)}finally{j(!1)}},T=async()=>{if(y)return;let e=p.find(e=>!1!==e.isActive);if(e){b(!0);try{let t=await fetch(`/api/providers/${e.id}/models`),s=await t.json();if(!t.ok)return void alert(s.error||"Failed to import models");let a=s.models||[];if(0===a.length)return void alert("No models returned from /models.");let l=0;for(let e of a){let t=e.id||e.name||e.model;t&&(A.some(e=>e.id===t)||(await c(t),l+=1))}0===l&&alert("No new models were added.")}catch(e){console.log("Error importing models:",e)}finally{b(!1)}}},O=p.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-muted-foreground",children:["Add ",u?"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-muted-foreground mb-1 block",children:"Model ID"}),(0,a.jsx)("input",{id:"new-compatible-model-input",type:"text",value:h,onChange:e=>f(e.target.value),onKeyDown:e=>"Enter"===e.key&&$(),placeholder:u?"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.jsxs)(x.$,{size:"sm",onClick:$,disabled:!h.trim()||g,children:[(0,a.jsx)(l.default,{name:"add"}),g?"Adding...":"Add"]}),(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:T,disabled:!O||y,children:[(0,a.jsx)(l.default,{name:"download"}),y?"Importing...":"Import from /models"]})]}),!O&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"Add a connection to enable importing models."}),A.length>0&&(0,a.jsx)("div",{className:"flex flex-col gap-3",children:A.map(({id:s,alias:l,source:r})=>(0,a.jsx)(P,{modelId:s,fullModel:`${t}/${s}`,copied:o,onCopy:i,onDeleteAlias:()=>"custom"===r?m(s):d(l),onTest:p.length>0?()=>S(s):void 0,testStatus:k[s],isTesting:N===s},`${r}-${e}/${s}`))})]})}var I=s(21796);let z=[{format:"openai",label:"OpenAI-compatible",url:"https://opencode.ai/inference/go/openai/v1/chat/completions",note:"Chat Completions. GPT and Muse Spark models use /openai/v1/responses instead."},{format:"claude",label:"Anthropic-compatible",url:"https://opencode.ai/inference/go/anthropic/v1/messages",note:"Messages API. max_tokens is required on every request."}],_=[{id:"go",name:"Go",price:"$10/mo"},{id:"go-plus",name:"Go Plus",price:"$40/mo"}],D=["Go and Go Plus need a single-member workspace (the default Personal workspace). Workspaces with a Go subscription cannot invite members.","DeepSeek V4.1 Flash and V4 Pro need Global under Settings › Privacy › Regions (owner or admin).",'Muse Spark 1.2 and 1.3 Contributor need "Allow paid endpoints that train on request data" turned on (owner or admin).',"Free models (for example Beam Free) are not available in every region."],U=["Subscribe to a Go plan in the OpenCode Console.","Copy your OpenCode API key from the same account.","Add it as a connection below. The x-opencode-session header is set automatically."];function J({connectionCount:e,activeCount:t,onAddConnection:s}){let r=0===e?"No connections yet":`${t} of ${e} active`;return(0,a.jsx)(p.Zp,{children:(0,a.jsxs)(p.Wu,{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:"OpenCode Go Connection"}),(0,a.jsx)("p",{className:"text-sm text-muted-foreground",children:r})]}),(0,a.jsxs)(x.$,{size:"sm",onClick:s,className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"add"}),"Add Connection"]})]}),(0,a.jsx)("div",{className:"mb-4 grid grid-cols-1 gap-2 sm:grid-cols-2",children:_.map(e=>(0,a.jsxs)("div",{className:"flex items-center justify-between rounded-lg border border-border px-3 py-2",children:[(0,a.jsx)("span",{className:"text-sm font-medium",children:e.name}),(0,a.jsx)("span",{className:"text-sm text-muted-foreground",children:e.price})]},e.id))}),(0,a.jsxs)("div",{className:"mb-4",children:[(0,a.jsx)("h3",{className:"mb-2 text-sm font-medium",children:"Endpoints"}),(0,a.jsx)("ul",{className:"flex flex-col gap-2",children:z.map(e=>(0,a.jsxs)("li",{className:"flex flex-col gap-0.5 rounded-lg border border-border px-3 py-2",children:[(0,a.jsx)("span",{className:"text-sm font-medium",children:e.label}),(0,a.jsx)("code",{className:"break-all text-xs text-muted-foreground",children:e.url}),(0,a.jsx)("span",{className:"text-xs text-muted-foreground",children:e.note})]},e.format))})]}),(0,a.jsx)("ol",{className:"mb-4 flex list-decimal flex-col gap-1.5 pl-5 text-sm text-muted-foreground",children:U.map(e=>(0,a.jsx)("li",{children:e},e))}),(0,a.jsx)("ul",{className:"mb-4 flex flex-col gap-2 rounded-lg border border-blue-500/30 bg-blue-500/10 px-3 py-2 text-xs leading-relaxed text-blue-600 dark:text-blue-400",children:D.map(e=>(0,a.jsxs)("li",{className:"flex gap-2",children:[(0,a.jsx)(l.default,{name:"info",className:"mt-0.5 text-[16px] shrink-0"}),(0,a.jsx)("span",{className:"min-w-0",children:e})]},e))}),(0,a.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:gap-4",children:[(0,a.jsxs)("a",{href:"https://opencode.ai/go",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-xs text-primary hover:underline",children:["Subscribe to Go",(0,a.jsx)(l.default,{name:"open_in_new",className:"text-sm"})]}),(0,a.jsxs)("a",{href:"https://opencode.ai/v2/docs/console/go",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-xs text-primary hover:underline",children:["OpenCode Go docs",(0,a.jsx)(l.default,{name:"open_in_new",className:"text-sm"})]})]})]})})}var R=s(77345),L=s(45111);function F({label:e,required:t,error:s,hint:l,className:r,children:n}){return(0,a.jsxs)("div",{className:`flex min-w-0 flex-col gap-1.5 ${r||""}`,children:[e&&(0,a.jsxs)("label",{className:"text-sm font-medium text-foreground",children:[e,t&&(0,a.jsx)("span",{className:"text-red-500 ml-1",children:"*"})]}),n,s&&(0,a.jsx)("p",{className:"text-xs text-red-500",children:s}),l&&!s&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:l})]})}function K({isOpen:e,provider:t,providerName:s,authType:l,authHint:n,website:o,proxyPools:i,error:d,onSave:c,onClose:m}){let p="__none__",h="ollama-local"===t,f="cookie"===l,g="xai"===t&&!f,j=f?"Cookie Value":"qoder"===t?"Personal Access Token (PAT)":"API Key",y="azure"===t,b=u.Q2?.[t]?.regions||null,v=u.Q2?.[t]?.defaultRegion||b?.[0]?.id||"",[N,w]=(0,r.useState)({name:"",apiKey:"",priority:1,proxyPoolId:p,ollamaHostUrl:""}),[k,C]=(0,r.useState)({azureEndpoint:"",apiVersion:"2024-10-01-preview",deployment:"",organization:""}),[S,$]=(0,r.useState)(v),[T,O]=(0,r.useState)(!1),[P,E]=(0,r.useState)(null),[I,z]=(0,r.useState)(!1),_=()=>h&&N.ollamaHostUrl.trim()?{baseUrl:N.ollamaHostUrl.trim()}:y?{azureEndpoint:k.azureEndpoint,apiVersion:k.apiVersion,deployment:k.deployment,organization:k.organization}:b&&S?{region:S}:void 0,D=async()=>{O(!0);try{let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t,apiKey:N.apiKey,providerSpecificData:_()})}),s=await e.json();E(s.valid?"success":"failed")}catch{E("failed")}finally{O(!1)}},U=async()=>{if(t&&(h||N.apiKey)&&(h||N.name)){z(!0);try{let e=!1;try{O(!0),E(null);let s=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t,apiKey:N.apiKey,providerSpecificData:_()})});e=!!(await s.json()).valid,E(e?"success":"failed")}catch{E("failed")}finally{O(!1)}await c({name:N.name||(h?"Ollama Local":""),apiKey:N.apiKey,priority:N.priority,proxyPoolId:N.proxyPoolId===p?null:N.proxyPoolId,testStatus:e?"active":"unknown",providerSpecificData:_()})}finally{z(!1)}}};return t?(0,a.jsx)(A.lG,{open:e,onOpenChange:e=>!e&&m(),children:(0,a.jsxs)(A.Cf,{className:"max-w-md",children:[(0,a.jsx)(A.c7,{children:(0,a.jsx)(A.L3,{children:`Add ${s||t} ${j}`})}),(0,a.jsxs)("div",{className:"flex max-h-[calc(85vh-120px)] flex-col gap-4 overflow-y-auto p-4",children:[(0,a.jsx)(F,{label:"Name",children:(0,a.jsx)(R.p,{value:N.name,onChange:e=>w({...N,name:e.target.value}),placeholder:h?"Ollama Local":"Production Key"})}),h&&(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(F,{label:"Ollama Host URL",className:"flex-1",children:(0,a.jsx)(R.p,{value:N.ollamaHostUrl,onChange:e=>w({...N,ollamaHostUrl:e.target.value}),placeholder:"http://localhost:11434"})}),(0,a.jsx)("div",{className:"pt-6",children:(0,a.jsx)(x.$,{onClick:D,disabled:T||I,variant:"secondary",children:T?"Checking...":"Check"})})]}),!h&&(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(F,{label:j,className:"flex-1",children:(0,a.jsx)(R.p,{type:f?"text":"password",value:N.apiKey,onChange:e=>w({...N,apiKey:e.target.value}),placeholder:f?"grok-web"===t?"sso=xxxxx... or just the raw value":"eyJhbGciOi...":g?"xai-...":"qoder"===t?"pt-...":""})}),(0,a.jsx)("div",{className:"pt-6",children:(0,a.jsx)(x.$,{onClick:D,disabled:!N.apiKey||T||I,variant:"secondary",children:T?"Checking...":"Check"})})]}),g&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"Use a direct xAI API key from console.x.ai. This is separate from Grok Build OAuth."}),f&&n&&(0,a.jsxs)("p",{className:"text-xs text-muted-foreground",children:[n,o&&(0,a.jsxs)(a.Fragment,{children:[" ",(0,a.jsxs)("a",{href:o,target:"_blank",rel:"noopener noreferrer",className:"text-primary underline",children:["Open ",o.replace(/^https?:\/\//,"")]})]})]}),b&&(0,a.jsx)(F,{label:"Region",children:(0,a.jsxs)(L.l6,{value:S,onValueChange:e=>$(e),children:[(0,a.jsx)(L.bq,{className:"w-full",children:(0,a.jsx)(L.yv,{placeholder:"Select a region"})}),(0,a.jsx)(L.gC,{children:b.map(e=>(0,a.jsx)(L.eb,{value:String(e.id),children:e.label},e.id))})]})}),d&&(0,a.jsx)("p",{className:"text-xs text-red-500 break-words",children:d}),y&&(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)(F,{label:"Azure Endpoint",children:(0,a.jsx)(R.p,{value:k.azureEndpoint,onChange:e=>C({...k,azureEndpoint:e.target.value}),placeholder:"https://your-resource.openai.azure.com"})}),(0,a.jsx)(F,{label:"Deployment Name",children:(0,a.jsx)(R.p,{value:k.deployment,onChange:e=>C({...k,deployment:e.target.value}),placeholder:"gpt-4"})}),(0,a.jsx)(F,{label:"API Version",children:(0,a.jsx)(R.p,{value:k.apiVersion,onChange:e=>C({...k,apiVersion:e.target.value}),placeholder:"2024-10-01-preview"})}),(0,a.jsx)(F,{label:"Organization",children:(0,a.jsx)(R.p,{value:k.organization,onChange:e=>C({...k,organization:e.target.value}),placeholder:"Organization ID"})})]})]}),(0,a.jsx)(F,{label:"Priority",children:(0,a.jsx)(R.p,{type:"number",value:N.priority,onChange:e=>w({...N,priority:Number.parseInt(e.target.value)||1})})}),(0,a.jsx)(F,{label:"Proxy Pool",children:(0,a.jsxs)(L.l6,{value:N.proxyPoolId,onValueChange:e=>w({...N,proxyPoolId:e}),children:[(0,a.jsx)(L.bq,{className:"w-full",children:(0,a.jsx)(L.yv,{placeholder:"None"})}),(0,a.jsxs)(L.gC,{children:[(0,a.jsx)(L.eb,{value:p,children:"None"}),(i||[]).map(e=>(0,a.jsx)(L.eb,{value:String(e.id),children:e.name},e.id))]})]})}),0===(i||[]).length&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"No active proxy pools available. Create one in Proxy Pools page first."}),(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"Legacy manual proxy fields are still accepted by API for backward compatibility."}),(0,a.jsx)(x.$,{onClick:U,className:"w-full",disabled:I||!h&&(!N.name||!N.apiKey)||y&&(!k.azureEndpoint||!k.deployment||!k.organization),children:I?"Saving...":"Save"})]})]})}):null}function M({label:e,required:t,error:s,hint:l,className:r,children:n}){return(0,a.jsxs)("div",{className:`flex min-w-0 flex-col gap-1.5 ${r||""}`,children:[e&&(0,a.jsxs)("label",{className:"text-sm font-medium text-foreground",children:[e,t&&(0,a.jsx)("span",{className:"text-red-500 ml-1",children:"*"})]}),n,s&&(0,a.jsx)("p",{className:"text-xs text-red-500",children:s}),l&&!s&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:l})]})}function G({isOpen:e,node:t,onSave:s,onClose:l,isAnthropic:n}){let[o,i]=(0,r.useState)({name:"",prefix:"",apiType:"chat",baseUrl:"https://api.openai.com/v1"}),[d,c]=(0,r.useState)(!1);(0,r.useEffect)(()=>{t&&i({name:t.name||"",prefix:t.prefix||"",apiType:t.apiType||"chat",baseUrl:t.baseUrl||(n?"https://api.anthropic.com/v1":"https://api.openai.com/v1")})},[t,n]);let m=async()=>{if(o.name.trim()&&o.prefix.trim()&&o.baseUrl.trim()){c(!0);try{let e={name:o.name,prefix:o.prefix,baseUrl:o.baseUrl};n||(e.apiType=o.apiType),await s(e)}finally{c(!1)}}};return t?(0,a.jsx)(A.lG,{open:e,onOpenChange:e=>!e&&l(),children:(0,a.jsxs)(A.Cf,{className:"max-w-md",children:[(0,a.jsx)(A.c7,{children:(0,a.jsx)(A.L3,{children:`Edit ${n?"Anthropic":"OpenAI"} Compatible`})}),(0,a.jsxs)("div",{className:"flex max-h-[calc(85vh-120px)] flex-col gap-4 overflow-y-auto p-4",children:[(0,a.jsx)(M,{label:"Name",hint:"Required. A friendly label for this node.",children:(0,a.jsx)(R.p,{value:o.name,onChange:e=>i({...o,name:e.target.value}),placeholder:`${n?"Anthropic":"OpenAI"} Compatible (Prod)`})}),(0,a.jsx)(M,{label:"Prefix",hint:"Required. Used as the provider prefix for model IDs.",children:(0,a.jsx)(R.p,{value:o.prefix,onChange:e=>i({...o,prefix:e.target.value}),placeholder:n?"ac-prod":"oc-prod"})}),!n&&(0,a.jsx)(M,{label:"API Type",children:(0,a.jsxs)(L.l6,{value:o.apiType,onValueChange:e=>i({...o,apiType:e}),children:[(0,a.jsx)(L.bq,{className:"w-full",children:(0,a.jsx)(L.yv,{})}),(0,a.jsx)(L.gC,{children:[{value:"chat",label:"Chat Completions"},{value:"responses",label:"Responses API"}].map(e=>(0,a.jsx)(L.eb,{value:String(e.value),children:e.label},e.value))})]})}),(0,a.jsx)(M,{label:"Base URL",hint:`Use the base URL (ending in /v1) for your ${n?"Anthropic":"OpenAI"}-compatible API.`,children:(0,a.jsx)(R.p,{value:o.baseUrl,onChange:e=>i({...o,baseUrl:e.target.value}),placeholder:n?"https://api.anthropic.com/v1":"https://api.openai.com/v1"})}),(0,a.jsx)(x.$,{onClick:m,className:"w-full",disabled:!o.name.trim()||!o.prefix.trim()||!o.baseUrl.trim()||d,children:d?"Saving...":"Save"})]})]})}):null}var q=s(69221);let Z=()=>Object.fromEntries(Object.keys(h.bs).map(e=>[e,!1]));function B({isOpen:e,providerAlias:t,providerDisplayAlias:s,onSave:n,onClose:o}){let[i,d]=(0,r.useState)(""),[c,m]=(0,r.useState)(Z),[p,u]=(0,r.useState)(null),[f,g]=(0,r.useState)(""),[j,y]=(0,r.useState)(!1);(0,r.useEffect)(()=>{e&&(d(""),m(Z()),u(null),g(""))},[e]);let b=e=>{let s=`${t}/`;return e.startsWith(s)?e.slice(s.length):e},v=async()=>{let e=b(i.trim());if(e){u("testing"),g("");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();u(a.ok?"ok":"error"),g(a.error||"")}catch(e){u("error"),g(e.message)}}},N=async()=>{let e=b(i.trim());if(e&&!j){y(!0);try{await n(e,c)}finally{y(!1)}}};return(0,a.jsx)(A.lG,{open:e,onOpenChange:e=>!e&&o(),children:(0,a.jsxs)(A.Cf,{className:"max-w-md",children:[(0,a.jsx)(A.c7,{children:(0,a.jsx)(A.L3,{children:"Add Custom Model"})}),(0,a.jsxs)("div",{className:"flex max-h-[calc(85vh-120px)] flex-col gap-4 overflow-y-auto p-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:i,onChange:e=>{d(e.target.value),u(null),g("")},onKeyDown:e=>{"Enter"===e.key&&v()},placeholder:"e.g. claude-opus-4-5",className:"flex-1 min-w-0 px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary",autoFocus:!0}),(0,a.jsxs)(x.$,{variant:"secondary",disabled:!i.trim()||"testing"===p,onClick:v,children:["testing"===p&&(0,a.jsx)(q.A,{className:"size-4 animate-spin"}),"testing"!==p&&(0,a.jsx)(l.default,{name:"science"}),"testing"===p?"Testing...":"Test"]})]}),(0,a.jsxs)("p",{className:"text-xs text-muted-foreground mt-1",children:["Sent to provider as:"," ",(0,a.jsx)("code",{className:"font-mono bg-sidebar px-1 rounded",children:b(i.trim())||"model-id"})]})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"text-sm font-medium mb-1.5 block",children:"Capabilities"}),(0,a.jsx)("div",{className:"flex flex-wrap gap-4",children:Object.entries(h.bs).map(([e,t])=>(0,a.jsxs)("label",{className:"flex cursor-pointer items-center gap-2.5",onClick:t=>{t.preventDefault(),m(t=>({...t,[e]:!t[e]}))},children:[(0,a.jsx)(C.d,{checked:!!c[e],onCheckedChange:t=>m(s=>({...s,[e]:t})),size:"sm","aria-label":t.label}),(0,a.jsxs)("span",{children:[(0,a.jsx)("span",{className:"block text-sm font-medium",children:t.label}),(0,a.jsx)("span",{className:"block text-xs text-muted-foreground",children:t.desc})]})]},e))})]}),"ok"===p&&(0,a.jsxs)("div",{className:"flex items-center gap-2 text-sm text-green-600",children:[(0,a.jsx)(l.default,{name:"check_circle",className:"text-base"}),"Model is reachable"]}),"error"===p&&(0,a.jsxs)("div",{className:"flex items-start gap-2 text-sm text-red-500",children:[(0,a.jsx)(l.default,{name:"cancel",className:"text-base shrink-0"}),(0,a.jsx)("span",{children:f||"Model not reachable"})]}),(0,a.jsx)(x.$,{onClick:N,className:"w-full",size:"sm",disabled:!i.trim()||j,children:j?"Adding...":"Add Model"})]})]})})}let V=`[
|
|
2
|
+
{
|
|
3
|
+
"accessToken": "eyJhbGc...",
|
|
4
|
+
"refreshToken": "rt_...",
|
|
5
|
+
"idToken": "eyJhbGc...",
|
|
6
|
+
"email": "user@example.com"
|
|
7
|
+
}
|
|
8
|
+
]`;function H({isOpen:e,onClose:t,onSuccess:s}){let[l,n]=(0,r.useState)(""),[o,i]=(0,r.useState)(!1),[d,c]=(0,r.useState)(""),[m,p]=(0,r.useState)(null),u=()=>{o||(n(""),c(""),p(null),t())},h=async()=>{var e;let t;c(""),p(null);let a=l.trim();if(!a)return;try{t=JSON.parse(a)}catch(e){c(`${(0,j.Tl)("Invalid JSON")}: ${e.message}`);return}let r=Array.isArray(e=t)?e:e&&"object"==typeof e?Array.isArray(e.accounts)?e.accounts:[e]:null;if(!r||0===r.length)return void c((0,j.Tl)("No accounts found in input"));i(!0);try{let e=await fetch("/api/oauth/codex/bulk-import",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accounts:r})}),t=await e.json();if(!e.ok)return void c(t?.error||`Request failed: ${e.status}`);p(t),t.success>0&&"function"==typeof s&&s()}catch(e){c(e.message||(0,j.Tl)("Request failed"))}finally{i(!1)}},f=m?.results?.filter(e=>!e.ok)||[];return(0,a.jsx)(A.lG,{open:e,onOpenChange:e=>!e&&u(),children:(0,a.jsxs)(A.Cf,{className:"max-w-md",children:[(0,a.jsx)(A.c7,{children:(0,a.jsx)(A.L3,{children:(0,j.Tl)("Bulk Add Codex Accounts")})}),(0,a.jsxs)("div",{className:"flex max-h-[calc(85vh-120px)] flex-col gap-4 overflow-y-auto p-4",children:[(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:(0,j.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:V,value:l,onChange:e=>n(e.target.value),disabled:o}),d&&(0,a.jsx)("p",{className:"text-xs text-red-500 break-words",children:d}),m&&(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsxs)("div",{className:`text-sm font-medium ${m.failed>0?"text-yellow-400":"text-green-400"}`,children:["✓ ",m.success," ",(0,j.Tl)("added"),m.failed>0?`, ✗ ${m.failed} ${(0,j.Tl)("failed")}`:""]}),f.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:f.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)(x.$,{onClick:h,className:"w-full",disabled:o||!l.trim(),children:o?(0,j.Tl)("Importing..."):(0,j.Tl)("Import All")}),(0,a.jsx)(x.$,{onClick:u,variant:"ghost",className:"w-full",disabled:o,children:(0,j.Tl)("Close")})]})]})]})})}let W=`[
|
|
9
|
+
{
|
|
10
|
+
"access_token": "eyJ0eXAiOiJhdCtqd3Qi...",
|
|
11
|
+
"refresh_token": "LZhriF9bf88pPykpXCuZ9...",
|
|
12
|
+
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGci...",
|
|
13
|
+
"email": "account1@example.com"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"access_token": "eyJ0eXAiOiJhdCtqd3Qi...",
|
|
17
|
+
"refresh_token": "LZhriF9bf88pPykpXCuZ9...",
|
|
18
|
+
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGci...",
|
|
19
|
+
"email": "account2@example.com"
|
|
20
|
+
}
|
|
21
|
+
]`;function Q(e){let t,s=e.trim();if(!s)return[];try{t=JSON.parse(s)}catch(e){try{let e=s;e.startsWith("[")||((e=e.replace(/\}\s*,\s*\{/g,"},{").replace(/\}\s*\{/g,"},{")).endsWith(",")&&(e=e.slice(0,-1)),e=`[${e}]`),t=JSON.parse(e)}catch{throw e}}if(Array.isArray(t))return t;if(t&&"object"==typeof t)return Array.isArray(t.accounts)?t.accounts:[t];throw Error("Input must be a JSON object or array of objects")}function X({isOpen:e,onClose:t,onSuccess:s}){let[n,o]=(0,r.useState)(""),[i,d]=(0,r.useState)(!1),[c,m]=(0,r.useState)(""),[p,u]=(0,r.useState)(null),[h,f]=(0,r.useState)(!1),[g,y]=(0,r.useState)(null),b=(0,r.useRef)(null),v=()=>{i||(o(""),m(""),u(null),y(null),f(!1),t())},N=async e=>{if(!e||0===e.length)return;m("");let t=Array.from(e).filter(e=>e.name.endsWith(".json")||"application/json"===e.type||""===e.type);if(0===t.length)return void m((0,j.Tl)("Please select valid .json files"));try{let e=[];for(let s of t){let t=await s.text(),a=Q(t);Array.isArray(a)?e.push(...a):a&&e.push(a)}if(0===e.length)return void m((0,j.Tl)("No accounts found in selected files"));o(JSON.stringify(e,null,2)),y({filesCount:t.length,accountsCount:e.length})}catch(e){m(`${(0,j.Tl)("Error reading files")}: ${e.message}`)}},w=async()=>{let e;m(""),u(null);try{e=Q(n)}catch(e){m(`${(0,j.Tl)("Invalid JSON")}: ${e.message}`);return}if(!e||0===e.length)return void m((0,j.Tl)("No accounts found in input"));d(!0);try{let t=await fetch("/api/oauth/grok-cli/bulk-import",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accounts:e})}),a=await t.json();if(!t.ok)return void m(a?.error||`Request failed: ${t.status}`);u(a),a.success>0&&"function"==typeof s&&s()}catch(e){m(e.message||(0,j.Tl)("Request failed"))}finally{d(!1)}},k=p?.results?.filter(e=>!e.ok)||[];return(0,a.jsx)(A.lG,{open:e,onOpenChange:e=>!e&&v(),children:(0,a.jsxs)(A.Cf,{className:"max-w-md",children:[(0,a.jsx)(A.c7,{children:(0,a.jsx)(A.L3,{children:(0,j.Tl)("Bulk Add Grok CLI Accounts")})}),(0,a.jsxs)("div",{className:"flex max-h-[calc(85vh-120px)] flex-col gap-4 overflow-y-auto p-4",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:(0,j.Tl)("Upload multiple .json files or paste JSON array / object.")}),(0,a.jsx)("input",{ref:b,type:"file",accept:".json,application/json",multiple:!0,className:"hidden",onChange:e=>{N(e.target.files),e.target&&(e.target.value="")}}),(0,a.jsxs)(x.$,{type:"button",size:"sm",variant:"secondary",onClick:()=>b.current?.click(),disabled:i,children:[(0,a.jsx)(l.default,{name:"upload_file"}),(0,j.Tl)("Upload JSON Files")]})]}),(0,a.jsxs)("div",{onDragOver:e=>{e.preventDefault(),f(!0)},onDragLeave:e=>{e.preventDefault(),f(!1)},onDrop:e=>{e.preventDefault(),f(!1),e.dataTransfer?.files?.length>0&&N(e.dataTransfer.files)},className:`relative rounded border transition-colors ${h?"border-primary bg-primary/10 ring-2 ring-primary/30":"border-accent/30 bg-sidebar"}`,children:[(0,a.jsx)("textarea",{className:"w-full rounded bg-transparent p-2.5 text-sm font-mono resize-y min-h-[240px] focus:outline-none focus:ring-1 focus:ring-primary",placeholder:W,value:n,onChange:e=>{o(e.target.value),y(null)},disabled:i}),h&&(0,a.jsxs)("div",{className:"absolute inset-0 flex flex-col items-center justify-center bg-sidebar/90 rounded pointer-events-none backdrop-blur-xs",children:[(0,a.jsx)(l.default,{name:"upload_file",className:"text-3xl text-primary mb-1"}),(0,a.jsx)("span",{className:"text-sm font-medium text-primary",children:(0,j.Tl)("Drop .json files here")})]})]}),g&&(0,a.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-green-400 font-medium bg-green-500/10 border border-green-500/20 px-2.5 py-1.5 rounded",children:[(0,a.jsx)(l.default,{name:"check_circle",className:"text-sm"}),(0,a.jsxs)("span",{children:[(0,j.Tl)("Loaded")," ",g.accountsCount," ",(0,j.Tl)("account(s) from")," ",g.filesCount," ",(0,j.Tl)("file(s)")]})]}),c&&(0,a.jsx)("p",{className:"text-xs text-red-500 break-words",children:c}),p&&p.failed>0&&(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsxs)("div",{className:"text-sm font-medium text-yellow-400",children:["✗ ",p.failed," ",(0,j.Tl)("failed")]}),k.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:k.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)(x.$,{onClick:w,className:"w-full",disabled:i||!n.trim(),children:i?(0,j.Tl)("Importing..."):(0,j.Tl)("Import All")}),(0,a.jsx)(x.$,{onClick:v,variant:"ghost",className:"w-full",disabled:i,children:(0,j.Tl)("Close")})]})]})]})})}let Y={claude:"claudeAutoPing",codex:"codexAutoPing"};function ee(){let e,t,s,o,y,N=(0,n.useParams)(),P=(0,n.useRouter)(),z=N.id,{getCaps:_}=(0,g.y)(),[D,U]=(0,r.useState)([]),[R,L]=(0,r.useState)(!0),[F,M]=(0,r.useState)(null),[q,Z]=(0,r.useState)([]),[V,W]=(0,r.useState)(!1),[Q,ee]=(0,r.useState)(!1),[et,es]=(0,r.useState)(!1),[ea,el]=(0,r.useState)(!1),[er,en]=(0,r.useState)(""),[eo,ei]=(0,r.useState)(!1),[ed,ec]=(0,r.useState)(!1),[em,ep]=(0,r.useState)(!1),[ex,eu]=(0,r.useState)(!1),[eh,ef]=(0,r.useState)(!1),[eg,ej]=(0,r.useState)(null),[ey,eb]=(0,r.useState)({}),[ev,eN]=(0,r.useState)([]),[ew,ek]=(0,r.useState)(!1),[eC,eS]=(0,r.useState)({}),[eA,e$]=(0,r.useState)(""),[eT,eO]=(0,r.useState)(()=>new Set),[eP,eE]=(0,r.useState)(!1),[eI,ez]=(0,r.useState)([]),[e_,eD]=(0,r.useState)(!1),[eU,eJ]=(0,r.useState)(null),[eR,eL]=(0,r.useState)(""),[eF,eK]=(0,r.useState)({enabled:!1,connections:{}}),[eM,eG]=(0,r.useState)([]),[eq,eZ]=(0,r.useState)([]),[eB,eV]=(0,r.useState)(null),[eH,eW]=(0,r.useState)([]),[eQ,eX]=(0,r.useState)([]),[eY,e0]=(0,r.useState)(null),[e1,e5]=(0,r.useState)(!1),e2=function(e){let[t,s]=(0,r.useState)(!1),[a,l]=(0,r.useState)(!1),[n,o]=(0,r.useState)(null),[i,d]=(0,r.useState)({}),[c,m]=(0,r.useState)(null),p=(0,r.useRef)(!1),x=async()=>{if(t||0===e.length)return;let a=Object.fromEntries(e.map(e=>[e.id,{state:"queued",error:null}]));p.current=!1,s(!0),l(!1),o(null),d(a),m({total:e.length,completed:0,passed:0,failed:0,stopped:!1});let r=0,n=0;try{for(let t=0;t<e.length;t+=1){if(p.current){m({total:e.length,completed:t,passed:r,failed:n,stopped:!0});break}let s=e[t];o(s.id),d(e=>({...e,[s.id]:{state:"testing",error:null}}));try{let e=await fetch(`/api/providers/${s.id}/test`,{method:"POST"}),t=await e.json(),a=!!t.valid;a?r+=1:n+=1,d(e=>({...e,[s.id]:{state:a?"success":"failed",error:a?null:t.error||null}}))}catch(e){n+=1,d(t=>({...t,[s.id]:{state:"failed",error:e.message||"Test failed"}}))}m({total:e.length,completed:t+1,passed:r,failed:n,stopped:!1}),t<e.length-1&&await new Promise(e=>setTimeout(e,1e3))}}finally{o(null),s(!1),l(!1),p.current=!1}};return{running:t,stopping:a,currentConnectionId:n,results:i,summary:c,run:x,stop:()=>{t&&(p.current=!0,l(!0))}}}(D),e4=e2.running,e3=e2.stopping,e6=e2.currentConnectionId,e7=e2.results,e9=e2.summary,e8=e2.run,te=e2.stop,[tt,ts]=(0,r.useState)(!1),{copied:ta,copy:tl}=(0,f.C)(),tr="ag_risk_confirmed",tn=()=>{W(!0)},to=()=>{"antigravity"===z&&"true"!==window.localStorage.getItem(tr)?e5(!0):"xiaomi-mimo"===z?ee(!0):tp?tn():(en(""),el(!0))},ti=()=>{en(""),el(!0)},td=()=>{tp?to():ti()},tc=F?{id:F.id,name:F.name||("anthropic-compatible"===F.type?"Anthropic Compatible":"OpenAI Compatible"),color:"anthropic-compatible"===F.type?"#D97757":"#10A37F",textIcon:"anthropic-compatible"===F.type?"AC":"OC",apiType:F.apiType,baseUrl:F.baseUrl,type:F.type}:u.zN[z]||u.fg[z]||u.IS[z]||u.nJ[z]||u.br[z],tm=tc?.authModes||[],tp=!!u.zN[z]||!!u.IS[z]||tm.includes("oauth"),tx=!!u.fg[z]||tm.includes("apikey"),tu=!!u.IS[z]?.noAuth,th=(0,h.KC)(z),tf=("cursor"===z||"zed"===z)&&eq.length>0?eq:th,tg=(0,u.wG)(z),tj=(0,u.mq)(z),ty=(0,u.gb)(z),tb=tj||ty,tv=!tb&&tp&&tx,tN="xai"===z?"Grok Build OAuth":"grok-cli"===z?"Grok CLI Device Login":"OAuth",tw="xai"===z?"xAI API Key":"qoder"===z?"PAT":"API Key",tk=tb?z:tg,tC=tb?F?.prefix||z:tg,tS=(0,r.useCallback)(async()=>{try{let e=await fetch(`/api/models/disabled?providerAlias=${encodeURIComponent(tk)}`,{cache:"no-store"}),t=await e.json();e.ok&&eX(t.ids||[])}catch(e){console.log("Error fetching disabled models:",e)}},[tk]),tA=async e=>{try{(await fetch("/api/models/disabled",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerAlias:tk,ids:[e]})})).ok&&await tS()}catch(e){console.log("Error disabling model:",e)}},t$=async e=>{try{(await fetch(`/api/models/disabled?providerAlias=${encodeURIComponent(tk)}&id=${encodeURIComponent(e)}`,{method:"DELETE"})).ok&&await tS()}catch(e){console.log("Error enabling model:",e)}},tT=async e=>{e.length&&e0({title:"Disable All Models",message:`Disable all ${e.length} model(s)?`,onConfirm:async()=>{e0(null);try{(await fetch("/api/models/disabled",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerAlias:tk,ids:e})})).ok&&await tS()}catch(e){console.log("Error disabling all models:",e)}}})},tO=async()=>{try{(await fetch(`/api/models/disabled?providerAlias=${encodeURIComponent(tk)}`,{method:"DELETE"})).ok&&await tS()}catch(e){console.log("Error enabling all models:",e)}},tP=(0,r.useCallback)(async()=>{try{let e=await fetch("/api/models/alias"),t=await e.json();e.ok&&eb(t.aliases||{})}catch(e){console.log("Error fetching aliases:",e)}},[]),tE=(0,r.useCallback)(async()=>{try{let e=await fetch("/api/models/custom",{cache:"no-store"}),t=await e.json();e.ok&&eN(t.models||[])}catch(e){console.log("Error fetching custom models:",e)}},[]);(0,r.useEffect)(()=>{"kilocode"===z&&fetch("/api/providers/kilo/free-models").then(e=>e.json()).then(e=>{e.models?.length&&eW(e.models)}).catch(()=>{})},[z]);let tI=(0,r.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"})]),l=await e.json(),r=await t.json(),n=await s.json(),o=a.ok?await a.json():{};if(e.ok){let e=(l.connections||[]).filter(e=>e.provider===z);U(e)}s.ok&&Z(n.proxyPools||[]);let i=(o.providerStrategies||{})[z]||{};eJ(i.fallbackStrategy||null),eL(null!=i.stickyRoundRobinLimit?String(i.stickyRoundRobinLimit):"1");let d=Y[z],c=d&&o[d]||{};if(eK({enabled:!0===c.enabled,connections:c.connections||{}}),t.ok){let e=(r.nodes||[]).find(e=>e.id===z)||null;if(!e&&tb)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===z)||null))break}M(e)}}catch(e){console.log("Error fetching connections:",e)}finally{L(!1)}},[z,tb]),tz=async e=>{try{let t=await fetch(`/api/provider-nodes/${z}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),s=await t.json();t.ok&&(M(s.node),await tI(),eu(!1))}catch(e){console.log("Error updating provider node:",e)}},t_=async(e,t)=>{try{let s=await fetch("/api/settings",{cache:"no-store"}),a=(s.ok?await s.json():{}).providerStrategies||{},l={};e&&(l.fallbackStrategy=e),"round-robin"===e&&""!==t&&(l.stickyRoundRobinLimit=Number(t)||3);let r={...a};0===Object.keys(l).length?delete r[z]:r[z]=l,await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerStrategies:r})})}catch(e){console.log("Error saving provider strategy:",e)}},tD=async e=>{let t=Y[z];if(t){eK(e);try{await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({[t]:e})})}catch(e){console.log("Error saving auto-ping config:",e)}}};(0,r.useEffect)(()=>{tI(),tP(),tE(),tS()},[tI,tP,tE,tS]),(0,r.useEffect)(()=>{if("cursor"!==z&&"zed"!==z)return void eZ([]);let e=D.find(e=>!1!==e.isActive);if(!e?.id){eZ([]),"zed"===z&&eV(null);return}let t=!1;return"zed"===z&&eV(null),fetch(`/api/providers/${e.id}/models`,{cache:"no-store"}).then(async e=>({ok:e.ok,data:await e.json().catch(()=>null)})).then(({ok:e,data:s})=>{if(!t){if(e&&Array.isArray(s?.models)&&s.models.length>0){eZ(s.models),"zed"===z&&s?.warning&&eV(s.warning);return}"zed"===z&&(eZ([]),eV(s?.warning||s?.error||"Zed returned no live models."))}}).catch(()=>{t||"zed"!==z||(eZ([]),eV("Failed to reach the Zed model catalog."))}),()=>{t=!0}},[z,D]),(0,r.useEffect)(()=>{let e=(u.zN[z]||u.fg[z]||u.IS[z]||u.nJ[z])?.modelsFetcher;e&&b(e).then(eG)},[z]);let tU=async(e,t,s=tg)=>{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)}},tJ=async e=>{try{(await fetch(`/api/models/alias?alias=${encodeURIComponent(e)}`,{method:"DELETE"})).ok&&await tP()}catch(e){console.log("Error deleting alias:",e)}},tR=async(e,t="llm",s=tk,a)=>{try{let l=await fetch("/api/models/custom",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerAlias:s,id:e,type:t,...a?{caps:a}:{}})});if(l.ok)await tE(),window.dispatchEvent(new CustomEvent("customModelChanged"));else{let e=await l.json();alert(e.error||"Failed to add custom model")}}catch(e){console.log("Error adding custom model:",e)}},tL=async(e,t="llm",s=tk)=>{try{let a=new URLSearchParams({providerAlias:s,id:e,type:t});(await fetch(`/api/models/custom?${a}`,{method:"DELETE"})).ok&&(await tE(),window.dispatchEvent(new CustomEvent("customModelChanged")))}catch(e){console.log("Error deleting custom model:",e)}},tF=async()=>{if(tt)return;let e=D.find(e=>!1!==e.isActive);if(!e)return void alert((0,j.Tl)("Please add an active Qoder connection first"));ts(!0);try{let t=await fetch(`/api/providers/${e.id}/models`),s=await t.json();if(!t.ok)return void alert(s.error||(0,j.Tl)("Failed to fetch models"));let a=s.models||[];if(0===a.length)return void alert((0,j.Tl)("No models returned"));let l=0;for(let e of a){let t=e.id||e.name;if(!t)continue;let s=t.replace(/^qoder\//,"");ev.some(e=>e.providerAlias===tk&&e.id===s&&"llm"===(e.kind||e.type||"llm"))||Object.values(ey).includes(`${tk}/${s}`)||(await tR(s,"llm",tk),l+=1)}0===l?alert((0,j.Tl)("All models already exist, no new models added")):alert((0,j.Tl)("Successfully added")+` ${l} `+(0,j.Tl)("models"))}catch(e){console.log("Error importing Qoder models:",e),alert((0,j.Tl)("Error fetching models")+": "+e.message)}finally{ts(!1)}},tK=async e=>{e0({title:"Delete Connection",message:"Delete this connection?",onConfirm:async()=>{e0(null);try{(await fetch(`/api/providers/${e}`,{method:"DELETE"})).ok&&U(t=>t.filter(t=>t.id!==e))}catch(e){console.log("Error deleting connection:",e)}}})},tM=()=>{tI(),W(!1)},tG=async e=>{en("");try{let t=await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:z,...e})}),s=null;try{s=await t.json()}catch{s=null}if(t.ok){await tI(),el(!1);return}en(s?.error||"Failed to save connection")}catch(e){console.log("Error saving connection:",e),en("Failed to save connection")}},tq=async e=>{try{(await fetch(`/api/providers/${eg.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).ok&&(await tI(),ep(!1))}catch(e){console.log("Error updating connection:",e)}},tZ=async(e,t)=>{try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})})).ok&&U(s=>s.map(s=>s.id===e?{...s,isActive:t}:s))}catch(e){console.log("Error updating connection status:",e)}},tB=async(e,t)=>{let s=[...D];[s[e],s[t]]=[s[t],s[e]],U(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 tI()}},tV=D.length>0&&eI.length===D.length;(0,r.useEffect)(()=>{ez(e=>e.filter(e=>D.some(t=>t.id===e)))},[D]);let tH=async e=>{eD(!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 tI(),ef(!1)}finally{eD(!1)}},tW=e=>tH(D.map(t=>({connectionId:t.id,proxyPoolId:e}))),tQ=(0,a.jsx)("div",{className:"flex min-w-0 flex-col divide-y divide-black/[0.03] dark:divide-white/[0.03] max-h-[500px] overflow-y-auto pr-1",children:D.map((e,t)=>{let s;return(0,a.jsxs)("div",{className:"flex min-w-0 items-stretch",children:[(0,a.jsx)("div",{className:"flex shrink-0 items-center pl-1 sm:pl-2",children:(0,a.jsx)(S.S,{checked:(s=e.id,eI.includes(s)),onCheckedChange:()=>{var t;return t=e.id,void ez(e=>e.includes(t)?e.filter(e=>e!==t):[...e,t])}})}),(0,a.jsx)("div",{className:"flex-1 min-w-0",children:(0,a.jsx)(I.A,{connection:e,proxyPools:q,isOAuth:tp,isFirst:0===t,isLast:t===D.length-1,onMoveUp:()=>tB(t,t-1),onMoveDown:()=>tB(t,t+1),onToggleActive:t=>tZ(e.id,t),autoPing:Y[z]&&"oauth"===e.authType?{on:!0===eF.connections[e.id],onToggle:t=>{var s;return s=e.id,void tD({...eF,connections:{...eF.connections,[s]:t}})},provider:z}: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&&U(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:()=>{ej(e),ep(!0)},onDelete:()=>tK(e.id),oneByOneStatus:e7[e.id]||null})})]},e.id)})}),tX=q.filter(e=>!0===e.isActive),tY=(0,a.jsx)(A.lG,{open:eh,onOpenChange:e=>{!e&&(e_||ef(!1))},children:(0,a.jsxs)(A.Cf,{className:"max-w-md",children:[(0,a.jsx)(A.c7,{children:(0,a.jsxs)(A.L3,{children:["Apply Proxy (",D.length," connections)"]})}),(0,a.jsxs)("div",{className:"flex flex-col gap-2 p-4",children:[(0,a.jsxs)("button",{onClick:()=>{let e=q.filter(e=>!0===e.isActive);return 0===e.length?void alert("No active proxy pools available."):tH(D.map((t,s)=>({connectionId:t.id,proxyPoolId:e[s%e.length].id})))},disabled:e_||0===tX.length,className:"flex items-center gap-3 rounded-lg border border-border px-3 py-2.5 text-left transition-colors hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50",children:[(0,a.jsx)($.A,{className:"size-4 shrink-0 text-muted-foreground"}),(0,a.jsxs)("span",{className:"flex min-w-0 flex-col",children:[(0,a.jsx)("span",{className:"text-sm font-medium text-foreground",children:"One-to-one (rotate)"}),(0,a.jsxs)("span",{className:"text-xs text-muted-foreground",children:["Distribute connections across ",tX.length," active pool(s)"]})]})]}),(0,a.jsxs)("button",{onClick:()=>tW(null),disabled:e_,className:"flex items-center gap-3 rounded-lg border border-border px-3 py-2.5 text-left transition-colors hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50",children:[(0,a.jsx)(T.A,{className:"size-4 shrink-0 text-muted-foreground"}),(0,a.jsxs)("span",{className:"flex min-w-0 flex-col",children:[(0,a.jsx)("span",{className:"text-sm font-medium text-foreground",children:"None (unbind all)"}),(0,a.jsx)("span",{className:"text-xs text-muted-foreground",children:"Remove proxy from all connections"})]})]}),q.map(e=>(0,a.jsxs)("button",{onClick:()=>tW(e.id),disabled:e_||!0!==e.isActive,className:"flex items-center gap-3 rounded-lg border border-border px-3 py-2.5 text-left transition-colors hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50",children:[(0,a.jsx)(O.A,{className:"size-4 shrink-0 text-muted-foreground"}),(0,a.jsx)("span",{className:"truncate text-sm font-medium text-foreground",children:e.name}),!0!==e.isActive&&(0,a.jsx)("span",{className:"text-[10px] text-muted-foreground",children:"(inactive)"})]},e.id)),e_&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"Applying..."})]})]})}),t0=async(e,t="llm")=>{if(!eT.has(e)){eO(t=>new Set(t).add(e));try{let s=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${tk}/${e}`,kind:t})}),a=await s.json();eS(t=>({...t,[e]:a.ok?"ok":"error"})),e$(a.ok?"":a.error||"Model not reachable")}catch{eS(t=>({...t,[e]:"error"})),e$("Network error")}finally{eO(t=>{let s=new Set(t);return s.delete(e),s})}}};if(R)return(0,a.jsxs)(m.YW,{children:[(0,a.jsx)(m.KX,{}),(0,a.jsx)(m.KX,{})]});if(!tc)return(0,a.jsxs)("div",{className:"text-center py-20",children:[(0,a.jsx)("p",{className:"text-muted-foreground",children:"Provider not found"}),(0,a.jsx)(i(),{href:"/dashboard/providers",className:"text-primary mt-4 inline-block",children:"Back to Providers"})]});let t1=()=>{if(tb){let e=(0,c.HY)((0,c.uM)(F?.baseUrl));return e||(ty?"/providers/anthropic.png":"/providers/openai.png")}return(0,c.HY)(tc.id)};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(m.YW,{children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)(x.$,{variant:"outline",size:"sm",asChild:!0,className:"mb-4",children:(0,a.jsxs)(i(),{href:"/dashboard/providers",children:[(0,a.jsx)(l.default,{name:"arrow_back",className:"text-lg"}),"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:`${tc.color}15`},children:ew||!t1()?(0,a.jsx)("span",{className:"text-sm font-bold",style:{color:tc.color},children:(0,c.IM)(tc.name)||tc.textIcon||tc.id.slice(0,2).toUpperCase()}):(0,a.jsx)(d.default,{src:t1(),alt:tc.name,width:48,height:48,className:"max-h-12 max-w-12 rounded-lg object-contain",sizes:"48px",onError:()=>{(0,c.Kw)(tc.id),ek(!0)},loading:"lazy",decoding:"async"})}),(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 flex-wrap",children:[(0,a.jsx)("h1",{className:"truncate text-2xl font-semibold tracking-tight sm:text-3xl",children:tc.name}),(tc.notice?.apiKeyUrl||tc.notice?.signupUrl||tc.website)&&(0,a.jsxs)("a",{href:tc.notice?.apiKeyUrl||tc.notice?.signupUrl||tc.website,target:"_blank",rel:"noopener noreferrer",className:"text-xs text-primary hover:underline inline-flex items-center gap-1",children:[(0,a.jsx)(l.default,{name:"open_in_new",className:"text-sm"}),tc.notice?.apiKeyUrl?"Get API Key":"Sign up / Learn more"]})]}),(0,a.jsxs)("p",{className:"text-muted-foreground",children:[D.length," connection",1===D.length?"":"s"]})]})]})]}),tc.deprecated&&(0,a.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 rounded-lg bg-yellow-500/10 border border-yellow-500/30",children:[(0,a.jsx)(l.default,{name:"warning",className:"text-[16px] text-yellow-500 mt-0.5 shrink-0"}),(0,a.jsx)("p",{className:"text-xs text-red-600 dark:text-yellow-400 leading-relaxed",children:tc.deprecationNotice})]}),tc.notice?.text&&!tc.deprecated&&(0,a.jsxs)("div",{className:"flex flex-col gap-2 rounded-lg border border-blue-500/30 bg-blue-500/10 px-3 py-2 sm:flex-row sm:items-center",children:[(0,a.jsx)(l.default,{name:"info",className:"text-[16px] text-blue-500 shrink-0"}),(0,a.jsx)("p",{className:"min-w-0 flex-1 text-xs leading-relaxed text-blue-600 dark:text-blue-400",children:tc.notice.text}),tc.notice.apiKeyUrl&&(0,a.jsx)("a",{href:tc.notice.apiKeyUrl,target:"_blank",rel:"noopener noreferrer",className:"inline-flex justify-center rounded bg-blue-500 px-2 py-1 text-xs font-medium text-white transition-colors hover:bg-blue-600 sm:py-0.5",children:"Get API Key →"})]}),tb&&F&&(0,a.jsx)(p.Zp,{children:(0,a.jsx)(p.Wu,{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:ty?"Anthropic Compatible Details":"OpenAI Compatible Details"}),(0,a.jsxs)("p",{className:"break-all text-sm text-muted-foreground",children:[ty?"Messages API":"responses"===F.apiType?"Responses API":"Chat Completions"," ","\xb7 ",(F.baseUrl||"").replace(/\/$/,""),"/",ty?"messages":"responses"===F.apiType?"responses":"chat/completions"]})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-2 sm:flex sm:items-center",children:[(0,a.jsxs)(x.$,{size:"sm",onClick:()=>{en(""),el(!0)},className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"add"}),"Add API Key"]}),(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:()=>eu(!0),className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"edit"}),"Edit"]}),(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:async()=>{e0({title:"Delete Compatible Node",message:`Delete this ${ty?"Anthropic":"OpenAI"} Compatible node?`,onConfirm:async()=>{e0(null);try{(await fetch(`/api/provider-nodes/${z}`,{method:"DELETE"})).ok&&P.push("/dashboard/providers")}catch(e){console.log("Error deleting provider node:",e)}}})},className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"delete"}),"Delete"]})]})]})})}),"opencode-go"===z&&(0,a.jsx)(J,{connectionCount:D.length,activeCount:D.filter(e=>!1!==e.isActive).length,onAddConnection:td}),tu?(0,a.jsx)(m.gw,{providerId:z}):(0,a.jsx)(p.Zp,{children:(0,a.jsxs)(p.Wu,{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:[D.length>0&&q.length>0&&(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:()=>ef(!0),children:[(0,a.jsx)(l.default,{name:"lan"}),"Apply Proxy"]}),D.length>0&&(0,a.jsxs)(a.Fragment,{children:[eI.length>0&&(0,a.jsxs)(x.$,{size:"sm",variant:"destructive",onClick:()=>{let e=eI.length;0!==e&&e0({title:`Delete ${e} Connection${e>1?"s":""}`,message:`Delete ${e} connection${e>1?"s":""}? This cannot be undone.`,onConfirm:async()=>{e0(null);let e=0,t=[...eI];for(let s of t)try{(await fetch(`/api/providers/${s}`,{method:"DELETE"})).ok||(e+=1)}catch(t){console.log("Error deleting connection:",t),e+=1}U(e=>e.filter(e=>!t.includes(e.id))),ez([]),e>0&&alert(`Deleted ${t.length-e} connection(s), ${e} failed.`)}})},children:[(0,a.jsx)(l.default,{name:"delete"}),"Delete Selected (",eI.length,")"]}),(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:e8,disabled:e4,children:[(0,a.jsx)(l.default,{name:"sync"}),e4?"Testing Connection One-by-One...":"Test Connection One-by-One"]}),e4&&(0,a.jsxs)(x.$,{size:"sm",variant:"ghost",onClick:te,disabled:e3,children:[(0,a.jsx)(l.default,{name:"stop"}),e3?"Stopping...":"Stop"]})]}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsx)("span",{className:"text-xs text-muted-foreground font-medium",children:"Round Robin"}),(0,a.jsx)(C.d,{checked:"round-robin"===eU,onCheckedChange:e=>{let t=e?"round-robin":null,s=e?eR||"1":eR;e&&!eR&&eL("1"),eJ(t),t_(t,s)}}),"round-robin"===eU&&(0,a.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,a.jsx)("span",{className:"text-xs text-muted-foreground",children:"Sticky:"}),(0,a.jsx)("input",{type:"number",min:1,value:eR,onChange:e=>{var t;eL(t=e.target.value),t_("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===D.length?(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)(l.default,{name:tp?"lock":"key",className:"text-[18px]"})}),(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("p",{className:"text-sm text-muted-foreground",children:"No connections yet"}),tv&&(0,a.jsxs)("p",{className:"text-xs text-muted-foreground",children:["Choose ",tN," or ",tw,"."]})]})]}),(0,a.jsx)("div",{className:"flex gap-2",children:tv?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:to,children:[(0,a.jsx)(l.default,{name:"lock"}),tN]}),(0,a.jsxs)(x.$,{size:"sm",onClick:ti,children:[(0,a.jsx)(l.default,{name:"key"}),tw]})]}):(0,a.jsxs)(a.Fragment,{children:[!tb&&"iflow"===z&&(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:()=>es(!0),children:[(0,a.jsx)(l.default,{name:"cookie"}),"Cookie"]}),"codex"===z&&(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:()=>ei(!0),children:[(0,a.jsx)(l.default,{name:"playlist_add"}),(0,j.Tl)("Bulk Add")]}),"grok-cli"===z&&(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:()=>ec(!0),children:[(0,a.jsx)(l.default,{name:"playlist_add"}),(0,j.Tl)("Bulk Add")]}),(0,a.jsxs)(x.$,{size:"sm",onClick:td,children:[(0,a.jsx)(l.default,{name:"add"}),tb?"Add API Key":"iflow"===z?"OAuth":"Add Connection"]})]})})]}):(0,a.jsxs)(a.Fragment,{children:[e9&&(0,a.jsx)("div",{className:"mb-4 rounded-lg border border-black/10 bg-black/[0.02] px-3 py-2 text-xs text-muted-foreground 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: ",e9.total]}),(0,a.jsxs)("span",{children:["Completed: ",e9.completed]}),(0,a.jsxs)("span",{children:["Passed: ",e9.passed]}),(0,a.jsxs)("span",{children:["Failed: ",e9.failed]}),e9.stopped&&(0,a.jsx)("span",{className:"text-amber-600 dark:text-amber-400",children:"Stopped"}),e4&&e6&&(0,a.jsxs)("span",{children:["Running:"," ",D.find(e=>e.id===e6)?.name||e6]})]})}),D.length>0&&(0,a.jsx)("div",{className:"mb-3 flex items-center gap-2 border-b border-black/[0.03] pb-2 dark:border-white/[0.03]",children:(0,a.jsxs)("label",{className:"flex cursor-pointer items-center gap-1.5 text-xs text-muted-foreground hover:text-primary",children:[(0,a.jsx)(S.S,{checked:tV,onCheckedChange:()=>{tV?ez([]):ez(D.map(e=>e.id))},className:"size-3.5 [&_svg]:size-2.5"}),"Select All"]})}),tQ,!tb&&(0,a.jsxs)("div",{className:"mt-4 grid grid-cols-1 gap-2 sm:flex",children:["iflow"===z&&(0,a.jsxs)(w.m_,{children:[(0,a.jsx)(w.k$,{asChild:!0,children:(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:()=>es(!0),className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"cookie"}),"Cookie"]})}),(0,a.jsx)(w.ZI,{children:"Add connection using browser cookie"})]}),"codex"===z&&(0,a.jsxs)(w.m_,{children:[(0,a.jsx)(w.k$,{asChild:!0,children:(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:()=>ei(!0),className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"playlist_add"}),(0,j.Tl)("Bulk Add")]})}),(0,a.jsx)(w.ZI,{children:(0,j.Tl)("Bulk import codex accounts from JSON")})]}),"grok-cli"===z&&(0,a.jsxs)(w.m_,{children:[(0,a.jsx)(w.k$,{asChild:!0,children:(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:()=>ec(!0),className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"playlist_add"}),(0,j.Tl)("Bulk Add")]})}),(0,a.jsx)(w.ZI,{children:(0,j.Tl)("Bulk import Grok CLI accounts from JSON")})]}),tv?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:to,className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"lock"}),tN]}),(0,a.jsxs)(x.$,{size:"sm",onClick:ti,className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"key"}),tw]})]}):(0,a.jsxs)(x.$,{size:"sm",onClick:td,className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"add"}),"Add"]})]})]})]})}),(0,a.jsx)(p.Zp,{children:(0,a.jsxs)(p.Wu,{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)("div",{className:"flex items-center gap-3",children:(0,a.jsx)("h2",{className:"text-lg font-semibold",children:"Available Models"})}),!tb&&(e=[...tf,...eH.filter(e=>!tf.some(t=>t.id===e.id))].filter(e=>{let t=(0,h.CP)(e);return!t||"llm"===t}).map(e=>e.id).filter(e=>!eQ.includes(e)),(0,a.jsxs)("div",{className:"flex gap-2",children:[eQ.length>0&&(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:tO,children:[(0,a.jsx)(l.default,{name:"restart_alt"}),"Active All"]}),e.length>0&&(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:()=>tT(e),children:[(0,a.jsx)(l.default,{name:"block"}),"Disable All"]})]}))]}),!!eA&&(0,a.jsxs)("div",{className:"mb-3",children:[(0,a.jsx)("p",{className:"text-xs text-red-500 break-words",children:eA}),/RegionError|hosted in China|regionNotAllowed/i.test(eA)&&(s=(t="string"==typeof eA?eA:JSON.stringify(eA)).match(/https:\/\/opencode\.ai\/workspace\/[^\s"')]+/),o=t.match(/wrk_[0-9A-Za-z]+/),y=s?s[0].endsWith("/go")?s[0]:`${s[0]}/go`:o?`https://opencode.ai/workspace/${o[0]}/go`:"https://opencode.ai",(0,a.jsx)("div",{className:"mt-1.5",children:(0,a.jsxs)("a",{href:y,target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-1 rounded-md bg-amber-500/10 px-2 py-0.5 text-xs font-medium text-amber-600 hover:bg-amber-500/20 dark:text-amber-400 transition-colors",children:[(0,a.jsx)("span",{children:"Allow China-hosted models"}),(0,a.jsx)(l.default,{name:"open_in_new",className:"text-[13px]"})]})}))]}),"zed"===z&&!!eB&&(0,a.jsx)("p",{className:"text-xs text-red-500 mb-3 break-words",children:eB}),(()=>{let e,t,s;if(tb)return(0,a.jsx)(E,{providerStorageAlias:tk,providerDisplayAlias:tC,modelAliases:ey,customModels:ev,copied:ta,onCopy:tl,onSetAlias:tU,onDeleteAlias:tJ,onAddCustomModel:e=>tR(e,"llm",tk),onDeleteCustomModel:e=>tL(e,"llm",tk),connections:D,isAnthropic:ty});let r=[...tf,...eH.filter(e=>!tf.some(t=>t.id===e.id))].filter(e=>{let t=(0,h.CP)(e);return!t||"llm"===t}),n=new Set(eQ),o=r.filter(e=>!n.has(e.id)),i=r.filter(e=>n.has(e.id)),d=v({customModels:ev,modelAliases:ey,providerAlias:tk,builtInModels:tf,type:"llm"});return(0,a.jsxs)("div",{className:"flex flex-wrap gap-3",children:[d.map(e=>(0,a.jsx)(k,{model:{id:e.id,name:e.name},fullModel:`${tC}/${e.id}`,alias:e.alias,copied:ta,onCopy:tl,onSetAlias:()=>{},onDeleteAlias:()=>{"custom"===e.source?tL(e.id,"llm",tk):tJ(e.alias)},testStatus:eC[e.id],onTest:D.length>0||tu?()=>t0(e.id,(0,h.CP)(e,"llm")):void 0,isTesting:eT.has(e.id),isCustom:!0,isFree:!1,caps:_(`${z}/${e.id}`)},`${e.source}-${e.fullModel}`)),o.map(e=>{let t=`${tk}/${e.id}`,s=`${z}/${e.id}`,l=Object.entries(ey).find(([,e])=>e===t||e===s)?.[0];return(0,a.jsx)(k,{model:e,fullModel:`${tC}/${e.id}`,alias:l,copied:ta,onCopy:tl,onSetAlias:t=>tU(e.id,t,tk),onDeleteAlias:()=>tJ(l),testStatus:eC[e.id],onTest:D.length>0||tu?()=>t0(e.id,(0,h.CP)(e,"llm")):void 0,isTesting:eT.has(e.id),isFree:e.isFree||(0,h.An)(tk,e.id),onDisable:()=>tA(e.id),caps:_(`${z}/${e.id}`)},e.id)}),(0,a.jsxs)("button",{onClick:()=>eE(!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)(l.default,{name:"add",className:"text-sm"}),"Add Model"]}),"qoder"===z&&D.some(e=>!1!==e.isActive)&&(0,a.jsxs)("button",{onClick:tF,disabled:tt,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)(l.default,{name:tt?"progress_activity":"download",className:"text-sm",style:tt?{animation:"spin 1s linear infinite"}:void 0}),tt?(0,j.Tl)("Fetching..."):(0,j.Tl)("Fetch Qoder Models")]}),eM.length>0&&(e=new Set([...Object.values(ey),...d.map(e=>e.fullModel)]),t=new Set(tf.map(e=>e.id)),0===(s=eM.filter(s=>!e.has(`${tk}/${s.id}`)&&!t.has(s.id))).length?null:(0,a.jsxs)("div",{className:"w-full mt-2",children:[(0,a.jsx)("p",{className:"text-xs text-muted-foreground mb-2",children:"Suggested free models (≥200k context):"}),(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:s.map(e=>(0,a.jsxs)(w.m_,{children:[(0,a.jsx)(w.k$,{asChild:!0,children:(0,a.jsxs)("button",{onClick:async()=>{await tR(e.id,"llm",tk)},className:"flex items-center gap-1 px-2.5 py-1.5 rounded-lg border border-black/10 dark:border-white/10 text-xs text-muted-foreground hover:text-primary hover:border-primary/40 hover:bg-primary/5 transition-colors",children:[(0,a.jsx)(l.default,{name:"add",className:"text-[13px]"}),e.id.split("/").pop()]})}),(0,a.jsx)(w.ZI,{children:`${e.name} \xb7 ${(e.contextLength/1e3).toFixed(0)}k ctx`})]},e.id))})]})),i.length>0&&(0,a.jsxs)("div",{className:"w-full mt-2",children:[(0,a.jsxs)("p",{className:"text-xs text-muted-foreground mb-2",children:["Disabled models (",i.length,"):"]}),(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:i.map(e=>(0,a.jsxs)(w.m_,{children:[(0,a.jsx)(w.k$,{asChild:!0,children:(0,a.jsxs)("button",{onClick:()=>t$(e.id),className:"flex items-center gap-1 px-2.5 py-1.5 rounded-lg border border-dashed border-black/10 dark:border-white/10 text-xs text-muted-foreground hover:text-primary hover:border-primary/40 hover:bg-primary/5 transition-colors",children:[(0,a.jsx)(l.default,{name:"add",className:"text-[13px]"}),e.id]})}),(0,a.jsx)(w.ZI,{children:"Restore model"})]},e.id))})]})]})})()]})}),tY,"cursor"===z?(0,a.jsx)(m.G9,{isOpen:V,onSuccess:tM,onClose:()=>W(!1)}):"gitlab"===z?(0,a.jsx)(m.vj,{isOpen:V,providerInfo:tc,onSuccess:tM,onClose:()=>W(!1)}):(0,a.jsx)(m.LF,{isOpen:V,provider:z,providerInfo:tc,onSuccess:tM,onClose:()=>W(!1)}),(0,a.jsx)(m.LH,{isOpen:Q,onSuccess:tM,onClose:()=>ee(!1)}),"iflow"===z&&(0,a.jsx)(m.vE,{isOpen:et,onSuccess:()=>{tI(),es(!1)},onClose:()=>es(!1)})]}),(0,a.jsx)(K,{isOpen:ea,provider:z,providerName:tc.name,authType:tc?.authType,authHint:tc?.authHint,website:tc?.website,proxyPools:q,error:er,onSave:tG,onClose:()=>{en(""),el(!1)}}),(0,a.jsx)(m.wI,{isOpen:em,connection:eg,proxyPools:q,onSave:tq,onClose:()=>ep(!1)}),tb&&(0,a.jsx)(G,{isOpen:ex,node:F,onSave:tz,onClose:()=>eu(!1),isAnthropic:ty}),!tb&&(0,a.jsx)(B,{isOpen:eP,providerAlias:tk,providerDisplayAlias:tC,onSave:async(e,t)=>{await tR(e,"llm",tk,t),eE(!1)},onClose:()=>eE(!1)}),"codex"===z&&(0,a.jsx)(H,{isOpen:eo,onClose:()=>ei(!1),onSuccess:tI}),"grok-cli"===z&&(0,a.jsx)(X,{isOpen:ed,onClose:()=>ec(!1),onSuccess:tI}),(0,a.jsx)(m.uo,{isOpen:e1,onClose:()=>e5(!1),onConfirm:()=>{(window.localStorage.setItem(tr,"true"),e5(!1),tp)?tn():ti()},title:"Risk Notice",message:tc?.deprecationNotice,confirmText:"I Understand, Continue",cancelText:"Cancel",variant:"danger"}),(0,a.jsx)(m.uo,{isOpen:!!eY,onClose:()=>e0(null),onConfirm:eY?.onConfirm,title:eY?.title||"Confirm",message:eY?.message,variant:"danger"})]})}},52908:(e,t,s)=>{Promise.resolve().then(s.bind(s,48547))}},e=>{e.O(0,[6766,5166,7552,9980,6428,4484,9150,3577,5862,5148,1699,1722,1660,4489,1278,1830,6770,9369,427,9966,7358],()=>e(e.s=52908)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8460],{15764:(e,t,r)=>{"use strict";r.d(t,{CK:()=>o.default,G9:()=>u.default,Iz:()=>v.default,KX:()=>b.PanelSkeleton,LF:()=>n.default,LH:()=>p.default,Mu:()=>b.StatCardSkeleton,Nf:()=>d.default,Qv:()=>l.CardSkeleton,YW:()=>y.YW,gw:()=>f.default,jK:()=>c.default,nh:()=>j.default,pV:()=>y.pV,rq:()=>s.default,uR:()=>i.default,uo:()=>a.ConfirmModal,vE:()=>h.default,vj:()=>m.default,wI:()=>x.default,wn:()=>y.wn,zY:()=>y.zY}),r(58913);var a=r(3537),l=r(58350);r(30872),r(33526),r(42535),r(1279);var n=r(92802),s=r(25908),i=r(58729),o=r(24873),d=r(5258),c=r(80599);r(949),r(56776),r(53599),r(88336),r(69561);var u=r(37753),p=r(23444),h=r(93624),m=r(86920),x=r(65461);r(14580);var f=r(14670),v=r(70296);r(57779),r(22205);var b=r(43276),j=r(75862),y=r(92412)},57938:(e,t,r)=>{Promise.resolve().then(r.bind(r,93728))},92412:(e,t,r)=>{"use strict";r.d(t,{YW:()=>a.Page,pV:()=>a.CardGrid,wn:()=>a.Section,zY:()=>a.PageHeader}),r(16675),r(72778);var a=r(29575)},93728:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>T});var a=r(29798),l=r(58913),n=r(15814),s=r(15764),i=r(738),o=r(63729),d=r(51660),c=r(13794),u=r(22205),p=r(53784),h=r(18055),m=r(45111),x=r(1352),f=r(41671);let v={available:{icon:"check_circle",color:"#22c55e",label:"Available"},cooldown:{icon:"schedule",color:"#f59e0b",label:"Cooldown"},unavailable:{icon:"error",color:"#ef4444",label:"Unavailable"},unknown:{icon:"help",color:"#6b7280",label:"Unknown"}};function b(){let[e,t]=(0,n.useState)(null),[r,s]=(0,n.useState)(!0),[i,o]=(0,n.useState)(!1),[d,c]=(0,n.useState)(null),u=(0,n.useRef)(null),p=(0,f.i)(),m=(0,n.useCallback)(async()=>{try{let e=await fetch("/api/models/availability");if(e.ok){let r=await e.json();t(r)}}catch{}finally{s(!1)}},[]);(0,n.useEffect)(()=>{m();let e=setInterval(m,3e4);return()=>clearInterval(e)},[m]),(0,n.useEffect)(()=>{let e=e=>{u.current&&!u.current.contains(e.target)&&o(!1)};return i&&document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[i]);let b=async(e,t)=>{c(`${e}:${t}`);try{(await fetch("/api/models/availability",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"clearCooldown",provider:e,model:t})})).ok?(p.success(`Cooldown cleared for ${t}`),await m()):p.error("Failed to clear cooldown")}catch{p.error("Failed to clear cooldown")}finally{c(null)}};if(r)return null;let j=e?.models||[],y=0===(e?.unavailableCount||j.filter(e=>"available"!==e.status).length),g={};return j.forEach(e=>{if("available"===e.status)return;let t=e.provider||"unknown";g[t]||(g[t]=[]),g[t].push(e)}),(0,a.jsx)("div",{className:"relative",ref:u,children:i&&(0,a.jsxs)("div",{className:"absolute top-full right-0 mt-2 w-80 bg-card border border-border rounded-xl shadow-2xl z-50 overflow-hidden",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 border-b border-border bg-background",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(l.default,{name:y?"verified":"warning",className:"text-[16px]",style:{color:y?"#22c55e":"#f59e0b"}}),(0,a.jsx)("span",{className:"text-sm font-semibold text-foreground",children:"Model Status"})]}),(0,a.jsxs)(x.m_,{children:[(0,a.jsx)(x.k$,{asChild:!0,children:(0,a.jsx)("button",{onClick:m,className:"p-1 rounded-lg hover:bg-card text-muted-foreground hover:text-foreground transition-colors",children:(0,a.jsx)(l.default,{name:"refresh",className:"text-[14px]"})})}),(0,a.jsx)(x.ZI,{children:"Refresh"})]})]}),(0,a.jsx)("div",{className:"px-4 py-3 max-h-60 overflow-y-auto",children:y?(0,a.jsx)("p",{className:"text-sm text-muted-foreground text-center py-2",children:"All models are responding normally."}):(0,a.jsx)("div",{className:"flex flex-col gap-2.5",children:Object.entries(g).map(([e,t])=>(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-xs font-semibold text-foreground mb-1.5 capitalize",children:e}),(0,a.jsx)("div",{className:"flex flex-col gap-1",children:t.map(e=>{let t=v[e.status]||v.unknown,r=d===`${e.provider}:${e.model}`;return(0,a.jsxs)("div",{className:"flex items-center justify-between px-2.5 py-1.5 rounded-lg bg-card/30",children:[(0,a.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[(0,a.jsx)(l.default,{name:t.icon,className:"text-[14px] shrink-0",style:{color:t.color}}),(0,a.jsx)("span",{className:"font-mono text-xs text-foreground truncate",children:e.model})]}),"cooldown"===e.status&&(0,a.jsx)(h.$,{size:"sm",variant:"ghost",onClick:()=>b(e.provider,e.model),disabled:r,className:"text-[10px] px-1.5! py-0.5! ml-2",children:r?"...":"Clear"})]},`${e.provider}-${e.model}`)})})]},e))})})]})})}var j=r(77345),y=r(49787);let g={openai:{title:"Add OpenAI Compatible",type:"openai-compatible",defaultBaseUrl:"https://api.openai.com/v1",namePlaceholder:"OpenAI Compatible (Prod)",prefixPlaceholder:"oc-prod",baseUrlHint:"Use the base URL (ending in /v1) for your OpenAI-compatible API.",errorLabel:"OpenAI Compatible",hasApiType:!0},anthropic:{title:"Add Anthropic Compatible",type:"anthropic-compatible",defaultBaseUrl:"https://api.anthropic.com/v1",namePlaceholder:"Anthropic Compatible (Prod)",prefixPlaceholder:"ac-prod",baseUrlHint:"Use the base URL (ending in /v1) for your Anthropic-compatible API. The system will append /messages.",errorLabel:"Anthropic Compatible",hasApiType:!1}},A=[{value:"chat",label:"Chat Completions"},{value:"responses",label:"Responses API"}];function w({label:e,required:t,error:r,hint:l,className:n,children:s}){return(0,a.jsxs)("div",{className:`flex min-w-0 flex-col gap-1.5 ${n||""}`,children:[e&&(0,a.jsxs)("label",{className:"text-sm font-medium text-foreground",children:[e,t&&(0,a.jsx)("span",{className:"text-red-500 ml-1",children:"*"})]}),s,r&&(0,a.jsx)("p",{className:"text-xs text-red-500",children:r}),l&&!r&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:l})]})}let C=function({variant:e,isOpen:t,onClose:r,onCreated:l}){let s=g[e],i=()=>({name:"",prefix:"",...s.hasApiType?{apiType:"chat"}:{},baseUrl:s.defaultBaseUrl}),[o,d]=(0,n.useState)(i),[c,u]=(0,n.useState)(!1);(0,n.useEffect)(()=>{s.hasApiType&&d(e=>({...e,baseUrl:s.defaultBaseUrl}))},[s.hasApiType?o.apiType:t]);let p=async()=>{if(o.name.trim()&&o.prefix.trim()&&o.baseUrl.trim()){u(!0);try{let e=await fetch("/api/provider-nodes",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:o.name,prefix:o.prefix,...s.hasApiType?{apiType:o.apiType}:{},baseUrl:o.baseUrl,type:s.type})}),t=await e.json();e.ok&&(l(t.node),d(i()))}catch(e){console.log(`Error creating ${s.errorLabel} node:`,e)}finally{u(!1)}}};return(0,a.jsx)(y.lG,{open:t,onOpenChange:e=>!e&&r(),children:(0,a.jsxs)(y.Cf,{className:"max-w-md",children:[(0,a.jsx)(y.c7,{children:(0,a.jsx)(y.L3,{children:s.title})}),(0,a.jsxs)("div",{className:"flex max-h-[calc(85vh-120px)] flex-col gap-4 overflow-y-auto p-4",children:[(0,a.jsx)(w,{label:"Name",hint:"Required. A friendly label for this node.",children:(0,a.jsx)(j.p,{value:o.name,onChange:e=>d({...o,name:e.target.value}),placeholder:s.namePlaceholder})}),(0,a.jsx)(w,{label:"Prefix",hint:"Required. Used as the provider prefix for model IDs.",children:(0,a.jsx)(j.p,{value:o.prefix,onChange:e=>d({...o,prefix:e.target.value}),placeholder:s.prefixPlaceholder})}),s.hasApiType&&(0,a.jsx)(w,{label:"API Type",children:(0,a.jsxs)(m.l6,{value:o.apiType,onValueChange:e=>d({...o,apiType:e}),children:[(0,a.jsx)(m.bq,{className:"w-full",children:(0,a.jsx)(m.yv,{})}),(0,a.jsx)(m.gC,{children:A.map(e=>(0,a.jsx)(m.eb,{value:String(e.value),children:e.label},e.value))})]})}),(0,a.jsx)(w,{label:"Base URL",hint:s.baseUrlHint,children:(0,a.jsx)(j.p,{value:o.baseUrl,onChange:e=>d({...o,baseUrl:e.target.value}),placeholder:s.defaultBaseUrl})}),(0,a.jsx)(h.$,{onClick:p,className:"w-full",disabled:!o.name.trim()||!o.prefix.trim()||!o.baseUrl.trim()||c,children:c?"Creating...":"Create"})]})]})})},N=[{value:"all",label:"All"},{value:"active",label:"Active"},{value:"inactive",label:"Inactive"},{value:"none",label:"No connection"}];function k(e,t,r){let l=[];if(e>0&&l.push((0,a.jsxs)(p.E,{variant:"default",children:[(0,a.jsx)("span",{className:"size-1.5 rounded-full bg-green-500"}),e," Connected"]},"connected")),t>0){let e=r?`${t} Error (${r})`:`${t} Error`;l.push((0,a.jsxs)(p.E,{variant:"destructive",children:[(0,a.jsx)("span",{className:"size-1.5 rounded-full bg-red-500"}),e]},"error"))}return 0===l.length?(0,a.jsx)("span",{className:"text-muted-foreground",children:"No connections"}):l}function T(){let e,t,[r,i]=(0,n.useState)([]),[u,p]=(0,n.useState)([]),[x,f]=(0,n.useState)(!0),[v,j]=(0,n.useState)(!1),[y,g]=(0,n.useState)(!1),[A,w]=(0,n.useState)("all");(0,n.useEffect)(()=>{(async()=>{try{let[e,t]=await Promise.all([fetch("/api/providers"),fetch("/api/provider-nodes")]),r=await e.json(),a=await t.json();e.ok&&i(r.connections||[]),t.ok&&p(a.nodes||[])}catch(e){console.log("Error fetching data:",e)}finally{f(!1)}})()},[]);let k=(e,t)=>{let a=Array.isArray(t)?t:[t],l=r.filter(t=>t.provider===e&&a.includes(t.authType)),n=e=>{let t=Object.entries(e).some(([e,t])=>e.startsWith("modelLock_")&&t&&new Date(t).getTime()>Date.now());return"unavailable"!==e.testStatus||t?e.testStatus:"active"},s=l.filter(e=>{let t=n(e);return"active"===t||"success"===t}).length,i=l.filter(e=>{let t=n(e);return"error"===t||"expired"===t||"unavailable"===t}),o=i.length,d=l.length,c=d>0&&l.every(e=>!1===e.isActive),u=i.sort((e,t)=>new Date(t.lastErrorAt||0)-new Date(e.lastErrorAt||0))[0];return{connected:s,error:o,total:d,errorCode:u?function(e){if(!e)return null;let t=e.lastErrorType;if("runtime_error"===t)return"RUNTIME";if("upstream_auth_error"===t||"auth_missing"===t||"token_refresh_failed"===t||"token_expired"===t)return"AUTH";if("upstream_rate_limited"===t)return"429";if("upstream_unavailable"===t)return"5XX";if("network_error"===t)return"NET";let r=Number(e.errorCode);if(Number.isFinite(r)&&r>=400)return String(r);let a=function(e){if(!e)return null;let t=e.match(/\b([45]\d{2})\b/);return t?t[1]:"ERR"}(e.lastError);if("401"===a||"403"===a)return"AUTH";if(a&&"ERR"!==a)return a;let l=(e.lastError||"").toLowerCase();return l.includes("runtime")||l.includes("not runnable")||l.includes("not installed")?"RUNTIME":l.includes("invalid api key")||l.includes("token invalid")||l.includes("revoked")||l.includes("unauthorized")?"AUTH":"ERR"}(u):null,errorTime:u?.lastErrorAt?function(e){if(!e)return"";let t=Math.floor((Date.now()-new Date(e).getTime())/6e4);if(t<1)return"just now";if(t<60)return`${t}m ago`;let r=Math.floor(t/60);if(r<24)return`${r}h ago`;let a=Math.floor(r/24);return`${a}d ago`}(u.lastErrorAt):null,allDisabled:c}},T=(e,t=!1)=>(function(e,t,r=!1){return"all"===e||function(e,t=!1){return t?"active":e&&0!==e.total?e.allDisabled?"inactive":"active":"none"}(t,r)===e})(A,e,t),I=u.filter(e=>"openai-compatible"===e.type).map(e=>({id:e.id,name:e.name||"OpenAI Compatible",color:"#10A37F",textIcon:"OC",apiType:e.apiType,iconId:(0,o.uM)(e.baseUrl)})).filter(e=>T(k(e.id,"apikey"))),E=u.filter(e=>"anthropic-compatible"===e.type).map(e=>({id:e.id,name:e.name||"Anthropic Compatible",color:"#D97757",textIcon:"AC",iconId:(0,o.uM)(e.baseUrl)})).filter(e=>T(k(e.id,"apikey"))),O=(e,t)=>{let r=e?.authModes;return Array.isArray(r)?r.includes("apikey")?["oauth","apikey","api_key"]:"oauth":t in c.nJ||t in d.fg?["oauth","apikey","api_key"]:"oauth"},P=(e=Object.entries(d.zN).filter(([e,t])=>!t.hidden&&T(k(e,O(t,e)),t.noAuth)),t="oauth",[...e].sort(([e,r],[a,l])=>{let n=r.priority??999,s=l.priority??999;if(n!==s)return n-s;let i=k(e,t),o=k(a,t),d=+(i.connected>0),c=+(o.connected>0);return d!==c?c-d:(r.name||"").localeCompare(l.name||"")})),$=Object.entries(c.IS).filter(([e,t])=>!t.hidden&&T(k(e,O(t,e)),t.noAuth)).sort(([,e],[,t])=>!!t.noAuth-!!e.noAuth),_=Object.entries(d.fg).filter(([e,t])=>!t.hidden&&T(k(e,O(t,e)),t.noAuth)).sort(([,e],[,t])=>(e.priority??999)-(t.priority??999)),R=Object.entries(c.nJ).filter(([e,t])=>!t.hidden&&(t.serviceKinds??["llm"]).includes("llm")&&T(k(e,O(t,e)),t.noAuth)).sort(([e,t],[r,a])=>{let l=t.priority??999,n=a.priority??999;if(l!==n)return l-n;let s=!!a.noAuth-!!t.noAuth;if(0!==s)return s;let i=k(e,O(t,e)).connected>0?0:1,o=k(r,O(a,r)).connected>0?0:1;return i!==o?i-o:(t.name||"").localeCompare(a.name||"")});if(x)return(0,a.jsx)(s.YW,{children:(0,a.jsxs)(s.pV,{children:[(0,a.jsx)(s.Qv,{}),(0,a.jsx)(s.Qv,{}),(0,a.jsx)(s.Qv,{}),(0,a.jsx)(s.Qv,{}),(0,a.jsx)(s.Qv,{}),(0,a.jsx)(s.Qv,{}),(0,a.jsx)(s.Qv,{}),(0,a.jsx)(s.Qv,{})]})});let z=P.length>0||$.length>0||R.length>0||_.length>0||I.length>0||E.length>0;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(s.YW,{children:[(0,a.jsx)("div",{className:"flex items-center justify-end",children:(0,a.jsxs)(m.l6,{value:A,onValueChange:e=>w(e),children:[(0,a.jsx)(m.bq,{size:"sm",className:"w-45","aria-label":"Filter providers by connection status",children:(0,a.jsx)(m.yv,{})}),(0,a.jsx)(m.gC,{children:N.map(e=>(0,a.jsx)(m.eb,{value:e.value,children:e.label},e.value))})]})}),!z&&(0,a.jsxs)("div",{className:"text-center py-8 border border-dashed border-border rounded-xl",children:[(0,a.jsx)(l.default,{name:"search_off",className:"text-[32px] text-muted-foreground mb-2"}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:"No providers match your filters"})]}),(0,a.jsx)(s.wn,{title:"Custom Providers (OpenAI/Anthropic Compatible)",actions:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(h.$,{size:"sm",onClick:()=>g(!0),className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"add"}),"Add Anthropic Compatible"]}),(0,a.jsxs)(h.$,{size:"sm",onClick:()=>j(!0),className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"add"}),"Add OpenAI Compatible"]})]}),children:0===I.length&&0===E.length?(0,a.jsxs)("div",{className:"flex items-center justify-center gap-2 py-2 border border-dashed border-border rounded-xl text-muted-foreground text-sm",children:[(0,a.jsx)(l.default,{name:"extension",className:"text-[18px]"}),(0,a.jsx)("span",{children:"No custom providers — use buttons above to add OpenAI/Anthropic compatible endpoints"})]}):(0,a.jsx)(s.pV,{children:[...I,...E].map(e=>(0,a.jsx)(S,{providerId:e.id,provider:e,stats:k(e.id,"apikey"),authType:"compatible"},e.id))})}),P.length>0&&(0,a.jsx)(s.wn,{title:"OAuth Providers",actions:(0,a.jsx)(b,{}),children:(0,a.jsx)(s.pV,{children:P.map(([e,t])=>{let r=O(t,e);return(0,a.jsx)(U,{providerId:e,provider:t,stats:k(e,r),authType:"oauth"},e)})})}),($.length>0||R.length>0)&&(0,a.jsx)(s.wn,{title:"Free Tier Providers",children:(0,a.jsxs)(s.pV,{children:[$.map(([e,t])=>{let r=O(t,e);return(0,a.jsx)(U,{providerId:e,provider:t,stats:k(e,r),authType:"free"},e)}),R.map(([e,t])=>{let r=O(t,e);return(0,a.jsx)(S,{providerId:e,provider:t,stats:k(e,r),authType:Array.isArray(r)?r[0]??"apikey":r},e)})]})}),_.length>0&&(0,a.jsx)(s.wn,{title:"API Key Providers",children:(0,a.jsx)(s.pV,{children:_.map(([e,t])=>{let r=O(t,e);return(0,a.jsx)(S,{providerId:e,provider:t,stats:k(e,r),authType:Array.isArray(r)?r[0]??"apikey":r},e)})})})]}),(0,a.jsx)(C,{variant:"openai",isOpen:v,onClose:()=>j(!1),onCreated:e=>{p(t=>[...t,e]),j(!1)}}),(0,a.jsx)(C,{variant:"anthropic",isOpen:y,onClose:()=>g(!1),onCreated:e=>{p(t=>[...t,e]),g(!1)}})]})}function I(e){if(e)return e.length>7?e:`${e}15`}function E(){return(0,a.jsx)(p.E,{variant:"default",children:(0,a.jsxs)("span",{className:"flex items-center gap-1",children:[(0,a.jsx)(l.default,{name:"pause_circle",className:"text-[12px]"}),"Disabled"]})})}function U({providerId:e,provider:t,stats:r,authType:l}){let{connected:n,error:s,errorCode:o,errorTime:d,allDisabled:c}=r,h=!!t.noAuth;return(0,a.jsx)(u.default,{href:`/dashboard/providers/${e}`,title:t.name,iconBg:I(t.color),dimmed:c,icon:(0,a.jsx)(i.A,{src:`/providers/${t.id}.png`,alt:t.name,size:30,className:"max-h-[30px] max-w-[30px] rounded-lg object-contain",fallbackText:t.textIcon||t.id.slice(0,2).toUpperCase(),fallbackColor:t.color}),meta:!d||c||h?void 0:d,children:c?(0,a.jsx)(E,{}):h?(0,a.jsxs)(p.E,{variant:"default",children:[(0,a.jsx)("span",{className:"size-1.5 rounded-full bg-green-500"}),"Ready"]}):k(n,s,o)})}function S({providerId:e,provider:t,stats:r,authType:l}){let{connected:n,error:s,errorCode:d,errorTime:h,allDisabled:m}=r,x=e.startsWith(c.JH),f=e.startsWith(c.DI),v=x?(0,a.jsx)(p.E,{variant:"default",children:"responses"===t.apiType?"Responses":"Chat"}):f?(0,a.jsx)(p.E,{variant:"default",children:"Messages"}):null;return(0,a.jsx)(u.default,{href:`/dashboard/providers/${e}`,title:t.name,iconBg:I(t.color),dimmed:m,icon:(0,a.jsx)(i.A,{src:(()=>{if(t.iconId){let e=(0,o.HY)(t.iconId);if(e)return e}return x?"/providers/openai.png":f?"/providers/anthropic.png":(0,o.HY)(t.id)})(),alt:t.name,size:30,className:"max-h-[30px] max-w-[30px] rounded-lg object-contain",fallbackText:(0,o.IM)(t.name)||t.textIcon||t.id.slice(0,2).toUpperCase(),fallbackColor:t.color}),meta:h&&!m?h:void 0,children:m?(0,a.jsx)(E,{}):(0,a.jsxs)(a.Fragment,{children:[k(n,s,d),v]})})}}},e=>{e.O(0,[6766,5166,7552,9980,6428,4484,9150,3577,5862,5148,1699,1722,1660,4489,1278,1830,6770,427,9966,7358],()=>e(e.s=57938)),_N_E=e.O()}]);
|