tokenhop 1.0.0 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/.next-cli-build/BUILD_ID +1 -1
- package/app/.next-cli-build/app-path-routes-manifest.json +4 -4
- package/app/.next-cli-build/build-manifest.json +3 -3
- package/app/.next-cli-build/prerender-manifest.json +3 -3
- package/app/.next-cli-build/react-loadable-manifest.json +43 -43
- package/app/.next-cli-build/required-server-files.json +1 -0
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/[...missing]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/[...missing]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/[...missing]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/ui-kit/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/ui-kit/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/ui-kit/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found/page.js +1 -1
- package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/app/.next-cli-build/server/app/_not-found.rsc +5 -5
- package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/reset-password/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/saml/acs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/saml/metadata/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/saml/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/saml/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tool-settings/[toolId]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tool-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +4 -4
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +3 -3
- package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +3 -3
- package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/devin-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/devin-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +3 -3
- package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +3 -3
- package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/[id]/headroom/route.js +1 -1
- package/app/.next-cli-build/server/app/api/combos/[id]/headroom/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/[id]/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/combos/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/route.js +1 -1
- package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/gateway/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/home/live-routes/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/home/quota/route.js +1 -1
- package/app/.next-cli-build/server/app/api/home/quota/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/home/summary/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/catalog-sync/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/catalog-sync/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/api-key/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/auto-import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/auto-import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/config/export/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/config/import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/config/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/environment/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/shell/savings-milestone/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/shell/summary/route.js +1 -1
- package/app/.next-cli-build/server/app/api/shell/summary/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/send/route.js +9 -1
- package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/translate/route.js +9 -1
- package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +9 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +9 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/last-activity/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/savings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +9 -1
- package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +2 -2
- package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/[...model]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/[...model]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/search/route.js +2 -2
- package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/callback/page.js +1 -1
- package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/callback.html +1 -1
- package/app/.next-cli-build/server/app/callback.rsc +5 -5
- package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/basic-chat.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/combos.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/combos.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +9 -9
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +9 -9
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/media-providers.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/media-providers.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/__PAGE__.segment.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/media-providers.segments/_full.segment.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/media-providers.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mitm.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/mitm.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/new.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/pxpipe.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/settings.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/settings.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk/dashboard/settings/__PAGE__.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/settings.segments/_full.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/settings.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/skills.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/skills.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/translator.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/translator.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/ui-kit.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/ui-kit.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/ui-kit.segments/!KGRhc2hib2FyZCk/dashboard/ui-kit/__PAGE__.segment.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/ui-kit.segments/_full.segment.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/ui-kit.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard.html +1 -1
- package/app/.next-cli-build/server/app/dashboard.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +11 -11
- package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/index.html +1 -1
- package/app/.next-cli-build/server/app/index.rsc +5 -5
- package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/landing/page.js +1 -1
- package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/landing.html +1 -1
- package/app/.next-cli-build/server/app/landing.rsc +6 -6
- package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/login/page.js +1 -1
- package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/login.html +1 -1
- package/app/.next-cli-build/server/app/login.rsc +5 -5
- package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/page.js +1 -1
- package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/skills/[...slug]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app-paths-manifest.json +4 -4
- package/app/.next-cli-build/server/chunks/1004.js +1 -0
- package/app/.next-cli-build/server/chunks/1152.js +1 -1
- package/app/.next-cli-build/server/chunks/1215.js +1 -0
- package/app/.next-cli-build/server/chunks/1336.js +1 -1
- package/app/.next-cli-build/server/chunks/1432.js +1 -1
- package/app/.next-cli-build/server/chunks/1533.js +1 -1
- package/app/.next-cli-build/server/chunks/2217.js +1 -1
- package/app/.next-cli-build/server/chunks/2380.js +7 -7
- package/app/.next-cli-build/server/chunks/24.js +1 -1
- package/app/.next-cli-build/server/chunks/2460.js +1 -1
- package/app/.next-cli-build/server/chunks/257.js +10 -0
- package/app/.next-cli-build/server/chunks/2592.js +1 -1
- package/app/.next-cli-build/server/chunks/2705.js +9 -0
- package/app/.next-cli-build/server/chunks/318.js +9 -16
- package/app/.next-cli-build/server/chunks/3593.js +1 -1
- package/app/.next-cli-build/server/chunks/3919.js +1 -1
- package/app/.next-cli-build/server/chunks/3943.js +1 -1
- package/app/.next-cli-build/server/chunks/4123.js +1 -1
- package/app/.next-cli-build/server/chunks/4125.js +1 -1
- package/app/.next-cli-build/server/chunks/4334.js +1 -1
- package/app/.next-cli-build/server/chunks/4406.js +2 -2
- package/app/.next-cli-build/server/chunks/4521.js +1 -1
- package/app/.next-cli-build/server/chunks/4730.js +1 -1
- package/app/.next-cli-build/server/chunks/4780.js +1 -1
- package/app/.next-cli-build/server/chunks/5055.js +1 -0
- package/app/.next-cli-build/server/chunks/5230.js +1 -0
- package/app/.next-cli-build/server/chunks/{1026.js → 5260.js} +1 -1
- package/app/.next-cli-build/server/chunks/5335.js +1 -0
- package/app/.next-cli-build/server/chunks/5559.js +9 -0
- package/app/.next-cli-build/server/chunks/5615.js +1 -1
- package/app/.next-cli-build/server/chunks/5649.js +1 -0
- package/app/.next-cli-build/server/chunks/5765.js +1 -0
- package/app/.next-cli-build/server/chunks/5827.js +1 -0
- package/app/.next-cli-build/server/chunks/5869.js +9 -0
- package/app/.next-cli-build/server/chunks/5908.js +1 -0
- package/app/.next-cli-build/server/chunks/620.js +1 -0
- package/app/.next-cli-build/server/chunks/6252.js +1 -1
- package/app/.next-cli-build/server/chunks/6328.js +1 -0
- package/app/.next-cli-build/server/chunks/6355.js +1 -0
- package/app/.next-cli-build/server/chunks/6493.js +1 -0
- package/app/.next-cli-build/server/chunks/6496.js +1 -1
- package/app/.next-cli-build/server/chunks/7211.js +1 -1
- package/app/.next-cli-build/server/chunks/7485.js +9 -0
- package/app/.next-cli-build/server/chunks/7616.js +1 -1
- package/app/.next-cli-build/server/chunks/7695.js +1 -0
- package/app/.next-cli-build/server/chunks/7716.js +1 -1
- package/app/.next-cli-build/server/chunks/7819.js +1 -1
- package/app/.next-cli-build/server/chunks/7828.js +1 -1
- package/app/.next-cli-build/server/chunks/8171.js +1 -1
- package/app/.next-cli-build/server/chunks/8255.js +1 -1
- package/app/.next-cli-build/server/chunks/8261.js +1 -0
- package/app/.next-cli-build/server/chunks/8416.js +1 -1
- package/app/.next-cli-build/server/chunks/878.js +1 -0
- package/app/.next-cli-build/server/chunks/8895.js +13 -13
- package/app/.next-cli-build/server/chunks/8954.js +1 -0
- package/app/.next-cli-build/server/chunks/8988.js +1 -0
- package/app/.next-cli-build/server/chunks/9016.js +9 -0
- package/app/.next-cli-build/server/chunks/9243.js +1 -0
- package/app/.next-cli-build/server/chunks/9326.js +1 -0
- package/app/.next-cli-build/server/chunks/9343.js +1 -1
- package/app/.next-cli-build/server/chunks/9421.js +1 -1
- package/app/.next-cli-build/server/chunks/9489.js +3 -0
- package/app/.next-cli-build/server/chunks/9578.js +1 -1
- package/app/.next-cli-build/server/chunks/9594.js +1 -0
- package/app/.next-cli-build/server/chunks/965.js +1 -1
- package/app/.next-cli-build/server/chunks/9899.js +1 -1
- package/app/.next-cli-build/server/instrumentation.js +1 -1
- package/app/.next-cli-build/server/instrumentation.js.nft.json +1 -1
- package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/app/.next-cli-build/server/middleware-react-loadable-manifest.js +1 -1
- package/app/.next-cli-build/server/middleware.js.nft.json +1 -1
- package/app/.next-cli-build/server/pages/404.html +1 -1
- package/app/.next-cli-build/server/pages/500.html +1 -1
- package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
- package/app/.next-cli-build/static/chunks/{198-145d0ed2ec3c54f5.js → 198-7c5bbea89ef8bc14.js} +1 -1
- package/app/.next-cli-build/static/chunks/{3670-e7a22341025498f8.js → 3670-d6dc44bc181c9b8a.js} +1 -1
- package/app/.next-cli-build/static/chunks/5014-a5d960f4c6bc6297.js +1 -0
- package/app/.next-cli-build/static/chunks/{6174.18e2c57e892d721a.js → 6174.a18fedfa3d765b1e.js} +1 -1
- package/app/.next-cli-build/static/chunks/6448-71a8c2ac8d9ecc09.js +1 -0
- package/app/.next-cli-build/static/chunks/7899-a12f962af02edf7f.js +1 -0
- package/app/.next-cli-build/static/chunks/8105-71d1aea9708976db.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/{page-8147ae8fa9c04381.js → page-42bfc760fbea3b96.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/console-log/{page-9cbf62f78701882a.js → page-1df6ad7d9adfc2a7.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-5f91e148400a241b.js → page-59ee0b412f972940.js} +3 -3
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/new/{page-dac4ab98fc595054.js → page-25d06b77bd1a5edb.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-463f9fa33be9426a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/translator/{page-06f4e52ee3b63f82.js → page-5bb99ecaf48bde39.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/ui-kit/{page-6c982cc50b6af101.js → page-1bc393f267badc04.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/page-923f864ec0be0fc8.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/{layout-dd9d1e49b2f69197.js → layout-a94f45e334f1841b.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/landing/{page-02b7bfebd65c41f1.js → page-98f05847e3372b16.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/{layout-c266f1acedfb4651.js → layout-29d74e164758a126.js} +1 -1
- package/app/.next-cli-build/static/chunks/webpack-1e19a4b05298b49d.js +1 -0
- package/app/.next-cli-build/static/css/{9f0b95a0d0bc5e51.css → ffa1d9c3cbb4e959.css} +1 -1
- package/app/custom-server.js +0 -37
- package/app/package.json +4 -5
- package/app/server.js +1 -1
- package/app/src/lib/db/adapters/sqljsAdapter.js +39 -4
- package/app/src/lib/oauth/services/xai.js +19 -12
- package/app/src/shared/services/quotaAutoPing.js +43 -8
- package/app/src/shared/services/quotaSnapshotPoller.js +2 -1
- package/app/src/sse/services/backgroundTokenRefresh.js +13 -1
- package/package.json +1 -1
- package/src/cli/menus/combos.js +3 -1
- package/app/.next-cli-build/server/chunks/1764.js +0 -1
- package/app/.next-cli-build/server/chunks/2384.js +0 -1
- package/app/.next-cli-build/server/chunks/3093.js +0 -1
- package/app/.next-cli-build/server/chunks/3306.js +0 -1
- package/app/.next-cli-build/server/chunks/331.js +0 -1
- package/app/.next-cli-build/server/chunks/3414.js +0 -1
- package/app/.next-cli-build/server/chunks/3558.js +0 -1
- package/app/.next-cli-build/server/chunks/3586.js +0 -1
- package/app/.next-cli-build/server/chunks/3676.js +0 -1
- package/app/.next-cli-build/server/chunks/4037.js +0 -1
- package/app/.next-cli-build/server/chunks/4199.js +0 -2
- package/app/.next-cli-build/server/chunks/4278.js +0 -1
- package/app/.next-cli-build/server/chunks/6158.js +0 -1
- package/app/.next-cli-build/server/chunks/6354.js +0 -1
- package/app/.next-cli-build/server/chunks/6734.js +0 -1
- package/app/.next-cli-build/server/chunks/6769.js +0 -1
- package/app/.next-cli-build/server/chunks/7261.js +0 -1
- package/app/.next-cli-build/server/chunks/7901.js +0 -1
- package/app/.next-cli-build/server/chunks/8372.js +0 -1
- package/app/.next-cli-build/server/chunks/8635.js +0 -3
- package/app/.next-cli-build/server/chunks/994.js +0 -1
- package/app/.next-cli-build/static/chunks/5014-a441cde708542153.js +0 -1
- package/app/.next-cli-build/static/chunks/6448-4eabf683083596e6.js +0 -1
- package/app/.next-cli-build/static/chunks/7899-e6a70cb9d3684f7f.js +0 -1
- package/app/.next-cli-build/static/chunks/8105-5c7e7c73b4bd532d.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-9fadf2c38665c20c.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/page-7571538830147099.js +0 -1
- package/app/.next-cli-build/static/chunks/webpack-187fa25c98ba99f3.js +0 -1
- /package/app/.next-cli-build/static/{3Qm_WgU2xvFJ9U_G7SKhT → gdVYVwJMM6JES9Y1KPQyw}/_buildManifest.js +0 -0
- /package/app/.next-cli-build/static/{3Qm_WgU2xvFJ9U_G7SKhT → gdVYVwJMM6JES9Y1KPQyw}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1931,3649],{4086:(e,t,r)=>{Promise.resolve().then(r.bind(r,47701)),Promise.resolve().then(r.bind(r,96748)),Promise.resolve().then(r.bind(r,56061)),Promise.resolve().then(r.bind(r,92542)),Promise.resolve().then(r.bind(r,56006)),Promise.resolve().then(r.bind(r,29366)),Promise.resolve().then(r.bind(r,84588)),Promise.resolve().then(r.bind(r,28164)),Promise.resolve().then(r.bind(r,97556)),Promise.resolve().then(r.bind(r,9911)),Promise.resolve().then(r.bind(r,45455)),Promise.resolve().then(r.bind(r,82534)),Promise.resolve().then(r.bind(r,42755)),Promise.resolve().then(r.bind(r,26506)),Promise.resolve().then(r.bind(r,10185)),Promise.resolve().then(r.bind(r,58897)),Promise.resolve().then(r.bind(r,29155)),Promise.resolve().then(r.bind(r,30815)),Promise.resolve().then(r.bind(r,29499)),Promise.resolve().then(r.bind(r,71252)),Promise.resolve().then(r.bind(r,99312)),Promise.resolve().then(r.bind(r,98582)),Promise.resolve().then(r.bind(r,53655)),Promise.resolve().then(r.bind(r,95088)),Promise.resolve().then(r.bind(r,29480)),Promise.resolve().then(r.bind(r,80752)),Promise.resolve().then(r.bind(r,6587)),Promise.resolve().then(r.bind(r,23936)),Promise.resolve().then(r.bind(r,11910)),Promise.resolve().then(r.bind(r,15729)),Promise.resolve().then(r.bind(r,46318)),Promise.resolve().then(r.bind(r,62899)),Promise.resolve().then(r.bind(r,94230)),Promise.resolve().then(r.bind(r,21931)),Promise.resolve().then(r.bind(r,22577)),Promise.resolve().then(r.bind(r,25086)),Promise.resolve().then(r.bind(r,28815)),Promise.resolve().then(r.bind(r,28058)),Promise.resolve().then(r.bind(r,93921)),Promise.resolve().then(r.bind(r,44863)),Promise.resolve().then(r.bind(r,81127)),Promise.resolve().then(r.bind(r,86465)),Promise.resolve().then(r.bind(r,96238)),Promise.resolve().then(r.bind(r,4823)),Promise.resolve().then(r.bind(r,61640)),Promise.resolve().then(r.bind(r,91348)),Promise.resolve().then(r.bind(r,34912)),Promise.resolve().then(r.bind(r,50611)),Promise.resolve().then(r.bind(r,51825)),Promise.resolve().then(r.bind(r,96975)),Promise.resolve().then(r.bind(r,46791)),Promise.resolve().then(r.bind(r,56071)),Promise.resolve().then(r.bind(r,28067)),Promise.resolve().then(r.bind(r,99380)),Promise.resolve().then(r.bind(r,61002)),Promise.resolve().then(r.bind(r,92622)),Promise.resolve().then(r.bind(r,44807)),Promise.resolve().then(r.bind(r,45027)),Promise.resolve().then(r.bind(r,77671)),Promise.resolve().then(r.bind(r,25908)),Promise.resolve().then(r.bind(r,19123)),Promise.resolve().then(r.bind(r,20446)),Promise.resolve().then(r.bind(r,38794)),Promise.resolve().then(r.bind(r,52024)),Promise.resolve().then(r.bind(r,21110)),Promise.resolve().then(r.bind(r,38587)),Promise.resolve().then(r.bind(r,98542)),Promise.resolve().then(r.bind(r,64371)),Promise.resolve().then(r.bind(r,97677)),Promise.resolve().then(r.bind(r,50744)),Promise.resolve().then(r.bind(r,40684))},14242:(e,t,r)=>{"use strict";r.d(t,{gl:()=>a.gl});var a=r(87256)},14383:(e,t,r)=>{"use strict";r.d(t,{AN:()=>a.AN,FR:()=>a.FR,MS:()=>a.MS,Mp:()=>a.Mp,fp:()=>a.fp,uN:()=>a.uN});var a=r(44923)},21110:(e,t,r)=>{"use strict";r.d(t,{ThemeProvider:()=>l});var a=r(95155),n=r(12115),s=r(90085);function l({children:e}){let{initTheme:t}=(0,s.A)();return(0,n.useEffect)(()=>{t()},[t]),(0,a.jsx)(a.Fragment,{children:e})}},21931:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>m});var a=r(95155),n=r(12115),s=r(14051),l=r.n(s),i=r(93308),o=r(73006),d=r(81127);let c={en:"English",vi:"Tiếng Việt","zh-CN":"简体中文","zh-TW":"繁體中文",ja:"日本語","pt-BR":"Portugu\xeas (Brasil)","pt-PT":"Portugu\xeas (Portugal)",ko:"한국어",es:"Espa\xf1ol",de:"Deutsch",fr:"Fran\xe7ais",he:"עברית",ar:"العربية",ru:"Русский",pl:"Polski",cs:"Čeština",nl:"Nederlands",tr:"T\xfcrk\xe7e",uk:"Українська",tl:"Tagalog",id:"Indonesia",th:"ไทย",km:"ខ្មែរ",hi:"हिन्दी",bn:"বাংলা",ur:"اردو",ro:"Rom\xe2nă",sv:"Svenska",it:"Italiano",el:"Ελληνικά",hu:"Magyar",fi:"Suomi",da:"Dansk",no:"Norsk",fa:"فارسی"},u=e=>c[e]||e;function m({className:e="",isOpen:t,onClose:r,hideTrigger:s=!1}){let[l,c]=(0,n.useState)("en"),[f,h]=(0,n.useState)(!1),[p,x]=(0,n.useState)(!1),b="boolean"==typeof t,g=(e=l)=>{b?r?.(e):x(!1)};(0,n.useEffect)(()=>{c(function(){if("u"<typeof document)return"en";let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${i.CL}=`)),t=e?decodeURIComponent(e.split("=")[1]):"en";return(0,i.QC)(t)}())},[]);let v=async e=>{if(e!==l&&!f){h(!0);try{await fetch("/api/locale",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({locale:e})}),await (0,o.wn)();let t=document.documentElement,r=(0,o.kk)();t.lang=r,t.dir=i.rB.includes(r)?"rtl":"ltr",c(e),g(e)}catch(e){console.error("Failed to set locale:",e)}finally{h(!1)}}};return(0,a.jsxs)("div",{className:e,children:[!s&&(0,a.jsxs)("button",{type:"button",onClick:()=>x(!p),disabled:f,className:"flex h-11 items-center gap-2 rounded-lg px-3 text-muted transition-colors hover:bg-raised hover:text-text",title:"Language",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]","aria-hidden":"true",children:"language"}),(0,a.jsx)("span",{className:"text-sm font-medium",children:u(l)})]}),(0,a.jsx)(d.default,{isOpen:b?t:p,onClose:()=>g(),title:"Select language",size:"full",className:"max-w-2xl",children:(0,a.jsx)("div",{"data-i18n-skip":"true",className:"grid grid-cols-[repeat(auto-fill,minmax(100px,1fr))] gap-2",children:i.YZ.map(e=>{let t=l===e;return(0,a.jsxs)("button",{type:"button",onClick:()=>v(e),disabled:f,"aria-current":t||void 0,title:u(e),className:`flex w-full flex-col items-center justify-start gap-1 rounded-lg px-2 py-3 text-xs font-medium transition-colors ${t?"bg-coral-bg text-coral shadow-focus":"text-text hover:bg-raised"} ${f?"cursor-wait opacity-70":""}`,children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[26px]","aria-hidden":"true",children:t?"language":"translate"}),(0,a.jsx)("span",{className:"flex h-8 items-center overflow-hidden text-center leading-tight [display:-webkit-box] [-webkit-box-orient:vertical] [-webkit-line-clamp:2]",children:u(e)}),t&&(0,a.jsx)("span",{className:"material-symbols-outlined text-sm","aria-hidden":"true",children:"check"})]},e)})})})]})}m.propTypes={className:l().string,isOpen:l().bool,onClose:l().func,hideTrigger:l().bool}},28164:(e,t,r)=>{"use strict";r.d(t,{default:()=>d});var a=r(95155),n=r(98500),s=r.n(n),l=r(14051),i=r.n(l),o=r(31474);function d({href:e,children:t,showArrow:r=!0,className:n}){return(0,a.jsxs)(s(),{href:e,className:(0,o.cn)(n||"text-[13px] font-semibold text-coral-ink hover:text-coral"),children:[t,r?(0,a.jsxs)(a.Fragment,{children:[" ",(0,a.jsx)("span",{"aria-hidden":"true",className:"inline-block rtl:-scale-x-100",children:"→"})]}):null]})}d.propTypes={href:i().string.isRequired,children:i().node.isRequired,showArrow:i().bool,className:i().string}},38794:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var a=r(95155),n=r(14051),s=r.n(n),l=r(12115),i=r(50770);function o({lines:e,label:t="Console output",className:r,live:n="off",onScroll:s,scrollRef:d,cursor:c=!1,row:u}){return(0,a.jsx)("div",{ref:d,role:"log","aria-label":t,"aria-live":n,dir:"ltr",onScroll:s,tabIndex:0,className:`signal-terminal custom-scrollbar m-0 overflow-auto rounded-2xl p-[18px_22px] text-start font-mono text-[13px] leading-[1.75] focus-visible:shadow-focus${r?` ${r}`:""}`,children:(0,a.jsxs)("ol",{className:"m-0 list-none p-0",children:[u?e.map((e,t)=>(0,a.jsx)(l.Fragment,{children:u(e,t)},e.key??e.id??`${e.time}-${t}`)):e.map((e,t)=>(0,a.jsxs)("li",{className:"flex gap-4 whitespace-nowrap",children:[(0,a.jsx)("span",{className:"signal-terminal-time shrink-0",children:e.time||"--:--:--"}),(0,a.jsx)("span",{className:`w-[52px] shrink-0 font-semibold ${(0,i.pN)(e.level)}`,children:e.level}),(0,a.jsx)("span",{className:"min-w-0 flex-1 whitespace-pre",children:e.message})]},e.id??`${e.time}-${t}`)),c&&(0,a.jsxs)("li",{className:"mt-0.5 flex gap-4 whitespace-nowrap","aria-hidden":"true",children:[(0,a.jsx)("span",{className:"signal-terminal-time shrink-0",children:"--:--:--"}),(0,a.jsx)("span",{className:"signal-terminal-cursor w-[52px] shrink-0 animate-pulse font-semibold",children:"▍"})]})]})})}o.propTypes={lines:s().arrayOf(s().shape({id:s().oneOfType([s().string,s().number]),time:s().string,level:s().oneOf(["LOG","INFO","WARN","ERROR","DEBUG"]).isRequired,message:s().string.isRequired})).isRequired,label:s().string,className:s().string,live:s().oneOf(["off","polite"]),onScroll:s().func,scrollRef:s().shape({current:s().object}),cursor:s().bool,row:s().func}},47701:(e,t,r)=>{"use strict";r.d(t,{default:()=>es});var a=r(95155),n=r(12115),s=r(17081),l=r(73321),i=r(25086),o=r(99312),d=r(92542),c=r(45455),u=r(81127),m=r(929),f=r(14051),h=r.n(f),p=r(96975),x=r(19123);function b({combo:e,strategy:t="fallback",strategyLabel:r,strategyVariant:n="brand",usageToday:s=0,selected:l=!1,onSelect:i}){let o=e?.models||[],d=o.slice(0,3).map((e,t)=>({key:`${e}-${t}`,short:e}));return(0,a.jsxs)("button",{type:"button",onClick:()=>i?.(e.id),"aria-pressed":l,"aria-label":`${e.name} combo, ${r||t}, ${o.length} models`,className:`flex w-full flex-col gap-2 rounded-2xl border bg-panel p-4 text-start transition-colors focus-visible:shadow-focus focus-visible:outline-none ${l?"border-coral shadow-[0_0_0_3px_var(--signal-coral-bg)]":"border-line hover:border-subtle"}`,children:[(0,a.jsxs)("span",{className:"flex items-center gap-2",children:[(0,a.jsx)("code",{className:"min-w-0 flex-1 truncate font-mono text-base font-semibold text-text",children:e.name}),(0,a.jsx)(x.default,{variant:n,size:"sm",children:r||t})]}),(0,a.jsxs)("span",{className:"flex items-center",children:[d.map((e,t)=>(0,a.jsx)("span",{title:e.short,style:{zIndex:3-t,marginInlineStart:0===t?0:-6},className:"relative inline-flex rounded-md shadow-[0_0_0_2px_var(--signal-panel)]",children:(0,a.jsx)(p.default,{providerId:e.short,size:"sm"})},e.key)),(0,a.jsxs)("span",{className:"ms-3 text-xs text-muted",children:[o.length," models \xb7 ",function(e){if(!Number.isFinite(e)||e<=0)return"0 today";if(e>=1e3){let t=e/1e3;return`${t>=10||Number.isInteger(10*t)?t.toFixed(t>=10?0:1).replace(/\.0$/,""):t.toFixed(1)}k today`}return`${e} today`}(s)]})]})]})}b.propTypes={combo:h().shape({id:h().string.isRequired,name:h().string.isRequired,models:h().arrayOf(h().string)}).isRequired,strategy:h().string,strategyLabel:h().string,strategyVariant:h().oneOf(["brand","info","live","warn"]),usageToday:h().number,selected:h().bool,onSelect:h().func};var g=r(4553),v=r(14383),y=r(87256),w=r(5020),j=r(10185),N=r(6587),k=r(11910),S=r(96238);function C(e,t){return t&&Object.hasOwn(t,e)&&Number.isFinite(t[e])&&t[e]>=0?t[e]:1}function P(e){return"number"==typeof e&&Number.isFinite(e)&&e>=0?e:1}let $={static:"no quota data yet",header:"provider-reported",probe:"from the last quota probe"},R=[{id:"fallback",label:"Fallback",desc:"Try in order until one answers",icon:"low_priority"},{id:"round-robin",label:"Round robin",desc:"Rotate on every request",icon:"autorenew"},{id:"weighted",label:"Weighted",desc:"Split by weight and remaining quota",icon:"bar_chart"},{id:"fusion",label:"Fusion",desc:"Ask a panel, let a judge pick",icon:"gavel"}],A={fallback:"brand","round-robin":"info",weighted:"live",fusion:"warn"},T={fallback:`Every request starts at #1. On a rate limit, auth error or outage, ${g.Hc.slug} moves down the list without your client noticing.`,"round-robin":"Each request goes to the next model in the list, spreading load and quota evenly.",weighted:"Traffic splits by weight, then shifts away from accounts that are running low on quota.",fusion:"Every model in the panel answers in parallel. The judge reads them all and returns the best reply."};function E(e){if(null==e)return{ok:!1,error:"Enter a number"};if("string"==typeof e&&""===e.trim())return{ok:!1,error:"Enter a finite number"};let t=Number(e);return Number.isFinite(t)?t<0||t>1e3?{ok:!1,error:"Weight must be between 0 and 1000"}:{ok:!0,value:t}:{ok:!1,error:"Enter a finite number"}}let O=/^[a-zA-Z0-9_.-]+$/;function M(e){let t="string"==typeof e?e.trim():"";return t?O.test(t)?{ok:!0,value:t}:{ok:!1,error:"Only letters, numbers, -, _ and . allowed"}:{ok:!1,error:"Name is required"}}let q=["vision","audioInput"];function F(e){let t=[];for(let r of q){let a=e?.[r],n=a?.enabled!==!1,s=Array.isArray(a?.models)?a.models.filter(Boolean):[];n&&0===s.length&&t.push(r)}return t}function L({models:e=[],strategy:t="fallback",weights:r={},judge:a=""}){let n={};for(let e of Object.keys(r||{}).sort())n[e]=r[e];return{models:[...e],strategy:t,weights:n,judge:a||""}}function _(e,t){let r=t instanceof Set?t:new Set(t||[]),a={};for(let[t,n]of Object.entries(e||{}))r.has(t)&&(a[t]=n);return a}var D=r(56006);function I({value:e,onChange:t}){let r=(0,n.useRef)([]),s=Math.max(0,R.findIndex(t=>t.id===e));return(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,a.jsx)("p",{id:"combo-strategy-label",className:"text-xs font-semibold tracking-wider text-muted uppercase",children:"How should these models take turns?"}),(0,a.jsx)("div",{role:"radiogroup","aria-labelledby":"combo-strategy-label",className:"grid grid-cols-2 gap-3 xl:grid-cols-4",children:R.map((n,l)=>{let i=e===n.id;return(0,a.jsxs)("button",{ref:e=>{r.current[l]=e},type:"button",role:"radio","aria-checked":i,tabIndex:l===s?0:-1,onKeyDown:e=>((e,a)=>{if(!["ArrowRight","ArrowDown","ArrowLeft","ArrowUp","Home","End"].includes(e.key))return;e.preventDefault();let n=e.currentTarget.closest("[dir]")?.getAttribute("dir")==="rtl",s=a;s="Home"===e.key?0:"End"===e.key?R.length-1:(a+("ArrowRight"===e.key||"ArrowDown"===e.key?1:-1)*(n?-1:1)+R.length)%R.length,r.current[s]?.focus(),t?.(R[s].id)})(e,l),onClick:()=>t?.(n.id),className:`flex min-h-[108px] flex-col items-start gap-1.5 rounded-xl border bg-raised p-3.5 text-start transition-colors focus-visible:shadow-focus focus-visible:outline-none ${i?"border-coral bg-coral-bg":"border-line hover:border-subtle"}`,children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[22px] text-coral-ink","aria-hidden":"true",children:n.icon}),(0,a.jsx)("span",{className:"text-[15px] font-bold text-text",children:n.label}),(0,a.jsx)("span",{className:"text-xs leading-snug text-muted",children:n.desc})]},n.id)})}),(0,a.jsx)(D.default,{variant:"info",icon:"info",children:T[e]??T.fallback})]})}I.propTypes={value:h().string.isRequired,onChange:h().func};var U=r(14242),z=r(39768),W=r(44863);function V({uid:e,index:t,model:r,providerLabel:n,role:s,health:l,healthVariant:i,showWeight:o,weight:d,weightDetail:c,share:u,weightError:m,onWeightChange:f,onWeightBlur:h,onRemove:b,replayState:g,replayReason:v}){let{attributes:y,listeners:w,setNodeRef:j,transform:k,transition:S,isDragging:C}=(0,U.gl)({id:e}),P="function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,$={transform:z.Ks.Transform.toString(k),transition:P?void 0:S,opacity:C?.4:1,zIndex:C?10:void 0},R=r.includes("/")?r.slice(0,r.indexOf("/")):r,A="attempted"===g?{variant:"info",label:"Trying…"}:"answered"===g?{variant:"live",label:"Answered"}:"failed"===g?{variant:"warn",label:`Failed — ${v||"unknown"}`}:"skipped"===g?{variant:"warn",label:`Skipped — ${v||"unknown"}`}:null;return(0,a.jsxs)("li",{style:$,ref:j,className:"flex list-none gap-3.5",children:[(0,a.jsxs)("div",{className:"flex w-8 shrink-0 flex-col items-center","aria-hidden":"true",children:[(0,a.jsx)("span",{className:"flex size-8 items-center justify-center rounded-full bg-text font-mono text-[13px] font-semibold text-bg",children:t+1}),(0,a.jsx)("span",{className:"my-1.5 w-0.5 flex-1 bg-[repeating-linear-gradient(var(--signal-subtle)_0_5px,transparent_5px_11px)]"})]}),(0,a.jsxs)("div",{className:`mb-3 flex min-w-0 flex-1 flex-col gap-3 rounded-xl border bg-raised p-3.5 sm:p-4 ${C?"border-coral shadow-card":("answered"===g?"border-lime":"attempted"===g?"border-sky":"failed"===g||"skipped"===g?"border-warn":null)||"border-line"}`,children:[(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,a.jsx)(p.default,{providerId:R,size:"md"}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("p",{className:"truncate font-mono text-[15px] font-medium text-text",children:r}),(0,a.jsxs)("p",{className:"truncate text-xs text-muted",children:[n," \xb7 ",s]})]}),(0,a.jsx)(x.default,{variant:i,size:"sm",children:l}),A&&(0,a.jsx)(x.default,{variant:A.variant,size:"sm",className:"max-w-40 truncate",children:A.label}),(0,a.jsx)("button",{type:"button",...y,...w,"aria-label":`Reorder ${r}, position ${t+1}`,title:"Drag to reorder",className:"inline-flex size-10 shrink-0 cursor-grab touch-none items-center justify-center rounded-lg text-muted transition-colors hover:text-text focus-visible:shadow-focus focus-visible:outline-none active:cursor-grabbing",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]","aria-hidden":"true",children:"drag_indicator"})}),(0,a.jsx)(N.default,{icon:"close",label:`Remove ${r} from route`,onClick:b})]}),o&&(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1 ps-12",children:[(0,a.jsx)("label",{htmlFor:`${e}-weight`,className:"shrink-0 text-xs text-muted",children:"Weight"}),(0,a.jsx)("input",{id:`${e}-weight`,type:"number",min:"0",max:"1000",step:"1",value:d,"aria-invalid":!!m||void 0,"aria-describedby":m?`${e}-weight-error`:void 0,onChange:e=>f?.(e.target.value),onBlur:()=>h?.(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),e.currentTarget.blur())},className:"h-8 w-20 shrink-0 rounded-lg border border-line bg-panel px-2 text-center font-mono text-[13px] text-text outline-none focus:border-coral focus:shadow-focus"}),(0,a.jsx)(W.default,{value:u,variant:"brand",label:`Traffic share for ${r}`,valueText:0===Number(d)&&""!==d?"Fallback only":`about ${u} percent`,className:"min-w-0 flex-1"}),(0,a.jsx)("span",{className:"w-20 shrink-0 text-end font-mono text-xs text-muted",children:0===Number(d)&&""!==d?"Fallback only":`≈${u}%`}),c&&(0,a.jsx)("p",{className:"m-0 basis-full text-xs text-muted",children:c}),m&&(0,a.jsx)("span",{id:`${e}-weight-error`,role:"alert",className:"basis-full text-xs text-err",children:m})]})]})]})}V.propTypes={uid:h().string.isRequired,index:h().number.isRequired,model:h().string.isRequired,providerLabel:h().string.isRequired,role:h().string.isRequired,health:h().string.isRequired,healthVariant:h().string.isRequired,showWeight:h().bool,weight:h().oneOfType([h().string,h().number]),weightDetail:h().string,share:h().number,weightError:h().string,onWeightChange:h().func,onWeightBlur:h().func,onRemove:h().func,replayState:h().oneOf(["attempted","answered","failed","skipped"]),replayReason:h().string},r(1620);var B=r(47929);let J={served:{label:"Served"},answered:{label:"Answered"},skipped:{label:"Skipped"}};function K({comboId:e,models:t,disabled:r,onTrackStatesChange:s}){let[l,i]=(0,n.useState)(!1),[o,c]=(0,n.useState)(null),[u,m]=(0,n.useState)(""),[f,h]=(0,n.useState)(null),[b,g]=(0,n.useState)(0),v=(0,B.Ib)(),y=Array.isArray(t)?t:[],w=(0,n.useMemo)(()=>{var e;let t,r;return e=o?.attempts,t=Array.isArray(y)?y:[],r=new Map,(Array.isArray(e)?e:[]).map(e=>{var a;let n,s="string"==typeof e?.model?e.model:"",l="string"==typeof e?.via&&t.includes(e.via)?e.via:null,i=s?(e=>{let a=r.get(e)||0;r.set(e,a+1);let n=0;for(let r=0;r<=a;r++){let s=t.indexOf(e,n);if(-1===s)break;if(r===a)return s;n=s+1}return null})(l||s):null,o="served"===(a=e?.outcome)||"answered"===a?"answered":"failed"===a?"failed":"skipped",d="answered"===o,c=d?"answered":e?.errorType??`error ${e?.status??"unknown"}`,u=!Number.isFinite(n=Number(e?.latencyMs))||n<0?"—":n<1e3?`${Math.round(n)}ms`:`${(n/1e3).toFixed(2)}s`,m="number"==typeof e?.status?e.status:null,f=d?`${s||"unknown model"} answered in ${u}.`:`${s||"unknown model"}: ${c} in ${u} — ${o}.`;return{index:i,model:s,state:o,tone:d?"live":"warn",reason:c,latency:u,status:m,outcome:e?.outcome,account:e?.account||null,role:e?.role,via:e?.via,text:f}})},[y,o]),j=w.length,N=async()=>{if(l||r||!e)return;i(!0),m(""),c(null),g(0);let t=new AbortController,a=setTimeout(()=>t.abort(),65e3);try{let r=await fetch(`/api/combos/${e}/test`,{method:"POST",signal:t.signal}),a=await r.json().catch(()=>({}));if(429===r.status)throw Error(a.error||"Probe rate limited — wait a few seconds and retry.");if(!r.ok)throw Error(a.error||`Probe failed (${r.status})`);c(a),h(a.ranAt||new Date().toISOString()),g(v?(a.attempts||[]).length:0)}catch(e){m(e?.name==="AbortError"?"Probe timed out — try again.":e?.message||"Probe failed")}finally{clearTimeout(a),i(!1)}};(0,n.useEffect)(()=>{if(!o||v||b>=j)return;let e=setTimeout(()=>g(e=>Math.min(j,e+1)),250);return()=>clearTimeout(e)},[o,v,b,j]),(0,n.useEffect)(()=>{if(!s)return;if(!o)return void s([]);let e=y.map(()=>null);w.forEach((t,r)=>{null===t.index||r>b||(e[t.index]={state:t.state,reason:t.reason})}),!v&&b<j&&w[b]&&null!==w[b].index&&(e[w[b].index]={state:"attempted",reason:""}),s(e)},[w,b,v,o,y,j,s]);let k=function(e,t=Date.now()){if(!e)return null;let r=new Date(e).getTime();if(!Number.isFinite(r))return null;let a=Math.max(0,Math.round((t-r)/1e3));if(a<10)return"Last run just now";if(a<60)return`Last run ${a}s ago`;let n=Math.floor(a/60);if(n<60)return`Last run ${n} min ago`;let s=Math.floor(n/60);return s<24?`Last run ${s}h ago`:`Last run ${Math.floor(s/24)}d ago`}(f),S=w.slice(0,v?j:b+1);return(0,a.jsxs)("section",{"aria-label":"Test this route",className:"mt-auto flex flex-col gap-3 rounded-2xl border border-line bg-bg p-[18px]",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,a.jsx)("h3",{className:"font-display m-0 text-lg font-bold",children:"Test this route"}),k&&(0,a.jsx)("span",{className:"text-xs text-muted",children:k}),(0,a.jsx)(d.default,{size:"sm",variant:"secondary",icon:"play_arrow",onClick:N,loading:l,disabled:!e||r,"aria-describedby":r?"combo-route-test-disabled-hint":void 0,className:"ms-auto",children:"Run test"}),j>0&&!l&&!r&&!v&&(0,a.jsx)(d.default,{size:"sm",variant:"ghost",icon:"restart_alt",onClick:()=>g(0),"aria-label":"Replay the last run on the route track",children:"Replay"})]}),(0,a.jsx)("p",{className:"m-0 text-xs text-muted",children:"Uses a tiny amount of quota. Runs the real route, so it also advances rotation."}),r&&(0,a.jsx)("p",{id:"combo-route-test-disabled-hint",className:"m-0 text-xs text-warn",children:"Save the route to test it."}),u&&(0,a.jsx)("p",{role:"alert",className:"m-0 text-sm text-err",children:u}),!u&&!o&&!l&&(0,a.jsx)("p",{className:"m-0 text-[13px] text-muted",children:"Send a tiny probe through this route to watch the fallback happen."}),l&&!o&&(0,a.jsx)("p",{role:"status",className:"m-0 text-[13px] text-muted",children:"Probing route…"}),S.length>0&&(0,a.jsx)("ul",{"aria-label":"Probe steps",className:"m-0 flex list-none flex-col gap-1 p-0",children:S.map((e,t)=>{let r=!v&&t===b&&t<j,n=null!=e.status&&e.status>=200&&e.status<300;return(0,a.jsxs)("li",{className:"flex items-center gap-3 text-[13px]",children:[r?(0,a.jsxs)(x.default,{variant:"info",size:"sm",className:"min-w-10 justify-center",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]","aria-hidden":"true",children:"progress_activity"}),(0,a.jsx)("span",{className:"sr-only",children:"Trying…"})]}):(0,a.jsx)(x.default,{variant:n?"ok":"err",size:"sm",className:"min-w-10 justify-center",children:(0,a.jsx)("span",{className:"font-mono",children:e.status??"—"})}),(0,a.jsx)(p.default,{providerId:e.model,size:"sm"}),(0,a.jsx)("span",{className:"min-w-0 truncate font-mono",children:e.model}),(0,a.jsxs)("span",{className:"truncate text-muted",children:[r?"Trying…":`${e.reason} \xb7 ${e.latency}`,e.account?` \xb7 ${e.account}`:"","panel"===e.role?" \xb7 panel":"","judge"===e.role?" \xb7 judge":"","nested"===e.role&&e.via?` \xb7 via ${e.via}`:""]}),!r&&(0,a.jsx)("span",{className:`ms-auto shrink-0 font-semibold ${"answered"===e.state?"text-lime-ink":"text-muted"}`,children:J[e.outcome]?.label??J.skipped.label})]},`${e.model}-${t}`)})}),(0,a.jsx)("p",{"aria-live":"polite",className:"sr-only m-0",children:w.slice(0,v?j:b).map(e=>e.text).join(" ")}),o?.summary&&(v||b>=j)&&(0,a.jsx)("p",{className:"m-0 border-t border-line pt-2.5 text-[13px]",children:(0,a.jsx)("strong",{children:o.summary})})]})}function H({combo:e,strategy:t,weights:r,judgeModel:s,headroom:l,headroomQuotaSource:i,savedModels:o,healthByProvider:c,providerLabelById:m,saving:f,dirty:h,emptyAdapters:p=[],onAddAdapterModel:x,saveError:b,onRename:R,onDelete:A,onSave:T,onDiscard:O,onStrategyChange:q,onWeightSave:F,onJudgeChange:L,onModelsChange:D,activeProviders:U,modelAliases:z}){var W;let B,J,[Q,G]=(0,n.useState)(!1),[X,Z]=(0,n.useState)(e.name),[Y,ee]=(0,n.useState)(""),[et,er]=(0,n.useState)(!1),[ea,en]=(0,n.useState)(!1),[es,el]=(0,n.useState)(!1),[ei,eo]=(0,n.useState)({}),[ed,ec]=(0,n.useState)({}),[eu,em]=(0,n.useState)(""),[ef,eh]=(0,n.useState)([]),ep=(0,n.useRef)([]),ex=e.models||[],eb=JSON.stringify(ex)!==JSON.stringify(o||[]),eg="weighted"===t,ev=(0,v.FR)((0,v.MS)(v.AN,{activationConstraint:{distance:5}}),(0,v.MS)(v.uN,{coordinateGetter:y.JR})),ey=function(e,t=[]){let r=new Map;for(let e of t||[])e&&"string"==typeof e.id&&"string"==typeof e.model&&(r.has(e.model)||r.set(e.model,[]),r.get(e.model).push(e));let a=new Set;for(let e of t||[])e&&"string"==typeof e.id&&a.add(e.id);let n=0;return(e||[]).map(e=>{let t,s=r.get(e);if(s&&s.length>0)return s.shift();do n+=1,t=`step-${n}`;while(a.has(t));return a.add(t),{id:t,model:e}})}(ex,ep.current);ep.current=ey;let ew={};for(let{id:e,model:t}of ey){let a=E(ei[e]);ew[t]=a.ok?a.value:r[t]??1}let ej=eg?(W=ey.map(e=>e.model),J=function(e,t,r){let a=new Map,n=0;for(let l of e||[]){var s;if("string"!=typeof l||a.has(l))continue;let e=(s=r?.[l],C(l,t)*P(s));a.set(l,e),n+=e}return(e||[]).map(e=>{let t=a.get(e)??0;return n>0?Math.round(t/n*1e3)/10:0})}(B=Array.isArray(W)?W:[],ew,l),B.map((e,t)=>{let r=P(l?.[e]),a=C(e,ew);return{base:a,quota:r,quotaSource:i?.[e]||"static",share:J[t]??0,fallbackOnly:0===a,outOfQuota:a>0&&0==C(e,ew)*P(r)}})):[],eN=()=>{let t=M(X);t.ok?(ee(""),G(!1),t.value!==e.name&&R?.(t.value)):ee(t.error)};return(0,a.jsxs)("section",{"aria-label":`Edit combo ${e.name}`,className:"flex min-w-0 flex-1 flex-col gap-5 rounded-[20px] border border-line bg-panel p-5 shadow-card sm:p-7",children:[(0,a.jsx)("span",{"aria-live":"polite",className:"sr-only",children:eu}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,a.jsx)("div",{className:"flex shrink-0 flex-col gap-1",children:Q?(0,a.jsxs)("div",{className:"flex max-w-sm flex-col gap-1",children:[(0,a.jsx)(k.default,{value:X,onChange:e=>{if(Z(e.target.value),e.target.value){let t=M(e.target.value);ee(t.ok?"":t.error)}else ee("")},onKeyDown:t=>{"Enter"===t.key&&eN(),"Escape"===t.key&&(t.preventDefault(),Z(e.name),ee(""),G(!1))},"aria-label":"Combo name",error:Y,autoFocus:!0}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(d.default,{size:"sm",variant:"secondary",onClick:eN,disabled:!!Y||!X.trim(),children:"Apply"}),(0,a.jsx)(d.default,{size:"sm",variant:"ghost",onClick:()=>{Z(e.name),ee(""),G(!1)},children:"Cancel"})]})]}):(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("h2",{className:"text-xs font-semibold tracking-wider text-muted uppercase",children:"Combo"}),(0,a.jsx)(N.default,{icon:"edit",label:`Rename combo ${e.name}`,onClick:()=>{Z(e.name),ee(""),G(!0)},className:"size-8 rounded-md"})]})}),(0,a.jsx)(j.default,{value:`"model": "${e.name}"`,copyValue:e.name,label:"Copy combo model name",className:"w-full min-w-0 sm:w-auto sm:min-w-52 sm:flex-1"}),(0,a.jsxs)("div",{className:"ms-auto flex flex-wrap items-center gap-2",children:[(0,a.jsx)(d.default,{variant:"danger",icon:"delete",onClick:()=>er(!0),children:"Delete"}),(0,a.jsx)(d.default,{variant:"secondary",icon:"undo",disabled:!h||f,onClick:()=>{eo({}),ec({}),O?.()},children:"Discard"}),(0,a.jsx)(d.default,{variant:"primary",icon:"save",loading:f,disabled:!h||f,onClick:T,children:"Save"})]})]}),(0,a.jsxs)("p",{"aria-live":"polite",className:`-mt-2 flex items-center gap-2 text-xs font-medium ${h?"text-warn":"text-muted"}`,children:[(0,a.jsx)("span",{"aria-hidden":"true",className:`size-2 rounded-full ${h?"bg-warn":"bg-subtle"}`}),h?"Unsaved changes":"No changes"]}),b&&(0,a.jsx)("p",{role:"alert",className:"text-sm text-err",children:b}),p.length>0&&(0,a.jsxs)("p",{role:"status",className:"rounded-xl border border-warn bg-warn-bg p-3 text-sm text-warn",children:[p.map(e=>"vision"===e?"Vision":"Audio").join(" and ")," ",`adapter on, but no models. ${g.Hc.slug} tries oc/mimo-v2.5-free; if it can't handle the request, the original route may reject the media.`," ",(0,a.jsx)("button",{type:"button",className:"font-semibold underline underline-offset-2 focus-visible:shadow-focus focus-visible:outline-none",onClick:()=>x?.(p[0]),children:"Add model"})]}),(0,a.jsx)(I,{value:t,onChange:q}),(0,a.jsxs)("div",{className:"flex flex-col",children:[(0,a.jsx)("p",{className:"mb-3 text-xs font-semibold tracking-wider text-muted uppercase",children:"The route"}),0===ex.length?(0,a.jsx)("p",{className:"rounded-xl border border-dashed border-line p-6 text-center text-sm text-muted",children:"No models in this route yet. Add one below."}):(0,a.jsx)(v.Mp,{sensors:ev,collisionDetection:v.fp,onDragEnd:e=>{let{active:t,over:r}=e;if(!r||t.id===r.id)return;let a=ey.findIndex(e=>e.id===t.id),n=ey.findIndex(e=>e.id===r.id);if(-1===a||-1===n)return;let s=ey[a],l=(0,y.be)(ey,a,n).map(e=>e.model);ep.current=(0,y.be)(ey,a,n),D?.(l),em(`Moved ${s.model} to position ${n+1} of ${ey.length}`)},modifiers:[w.FN,w.gj],children:(0,a.jsx)(y.gB,{items:ey.map(e=>e.id),strategy:y._G,children:(0,a.jsx)("ol",{className:"m-0 list-none p-0",children:ey.map(({id:e,model:n},s)=>{let l=n.includes("/")?n.slice(0,n.indexOf("/")):n,i=c?.[l]||{label:"No data",variant:"neutral"},o=ej[s],d=ef[s];return(0,a.jsx)(V,{uid:e,index:s,model:n,providerLabel:m?.[l]||l,role:"round-robin"===t?"In rotation":"weighted"===t?"Weighted":"fusion"===t?"Panelist":0===s?"Primary":"Backup",health:i.label,healthVariant:i.variant,showWeight:eg,weight:ei[e]??String(r[n]??1),weightDetail:o?function(e){if(!e)return null;let t=$[e.quotaSource]||$.static;if(e.fallbackOnly)return"Weight 0 — fallback only: no traffic until the others fail.";if(e.outOfQuota)return`No quota left (${t}) — paused until quota resets.`;let r=Math.round(100*e.quota);return`Weight ${e.base} \xd7 ${r}% quota left (${t}) → about ${e.share}% of traffic.`}(o):void 0,share:o?.share??0,replayState:d?.state,replayReason:d?.reason,weightError:ed[e],onWeightChange:t=>{eo(r=>({...r,[e]:t})),ec(t=>{let{[e]:r,...a}=t;return a});let r=E(t);r.ok&&void 0!==n&&F?.(n,r.value)},onWeightBlur:()=>(e=>{if(!(e in ei))return;let t=ey.find(t=>t.id===e)?.model,a=()=>eo(t=>{let{[e]:r,...a}=t;return a}),n=E(ei[e]);if(!n.ok)return void ec(t=>({...t,[e]:n.error}));if(void 0!==t&&n.value===(r[t]??1)){a(),ec(t=>{let{[e]:r,...a}=t;return a});return}ec(t=>{let{[e]:r,...a}=t;return a}),a(),void 0!==t&&F?.(t,n.value)})(e),onRemove:()=>{let t=new Set(ey.map(e=>e.id).filter(t=>t!==e));eo(e=>_(e,t)),ec(e=>_(e,t)),D?.(ex.filter((e,t)=>t!==s))}},e)})})})}),(0,a.jsxs)("div",{className:"flex gap-3.5",children:[(0,a.jsx)("div",{className:"flex w-8 shrink-0 justify-center","aria-hidden":"true",children:(0,a.jsx)("span",{className:"size-7 rounded-full border-2 border-dashed border-subtle"})}),(0,a.jsx)(d.default,{variant:"ghost",icon:"add",onClick:()=>en(!0),className:"flex-1 justify-start border-dashed text-muted",children:"Add a model to this route"})]}),"fusion"===t&&(0,a.jsxs)("div",{className:"mt-3.5 ms-11 flex items-center gap-3 rounded-xl border border-coral bg-coral-bg p-3.5 sm:p-4",children:[(0,a.jsx)("span",{className:"material-symbols-outlined shrink-0 text-[20px] text-coral-ink","aria-hidden":"true",children:"gavel"}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsxs)("p",{className:"text-sm font-semibold text-text",children:["Judge \xb7"," ",(0,a.jsx)("code",{className:"font-mono",children:s||`Auto — ${ex[0]||"first model"}`})]}),(0,a.jsx)("p",{className:"text-xs text-muted",children:"Reads every panel answer and returns the best one"})]}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[s&&(0,a.jsx)(d.default,{size:"sm",variant:"ghost",onClick:()=>L?.(""),"aria-label":"Reset judge to Auto",children:"Reset to Auto"}),(0,a.jsx)(d.default,{size:"sm",variant:"secondary",onClick:()=>el(!0),children:"Change"})]})]})]}),ea&&(0,a.jsx)(S.default,{isOpen:ea,onClose:()=>en(!1),onSelect:e=>{e?.value&&!ex.includes(e.value)&&D?.([...ex,e.value])},onDeselect:e=>{e?.value&&D?.(ex.filter(t=>t!==e.value))},activeProviders:U,modelAliases:z,title:"Add model to route",addedModelValues:ex,closeOnSelect:!1}),es&&(0,a.jsx)(S.default,{isOpen:es,onClose:()=>el(!1),onSelect:e=>{L?.(e?.value||""),el(!1)},activeProviders:U,modelAliases:z,title:"Select judge model",addedModelValues:s?[s]:[],closeOnSelect:!0}),(0,a.jsx)(u.ConfirmDialog,{isOpen:et,onClose:()=>er(!1),onConfirm:()=>{er(!1),A?.()},title:"Delete combo",message:`Delete combo "${e.name}"? This cannot be undone.`,confirmText:"Delete",variant:"danger"}),(0,a.jsx)(K,{comboId:e.id,models:ex,disabled:eb,onTrackStatesChange:eh},ex.join("\n"))]})}K.propTypes={comboId:h().string,models:h().arrayOf(h().string),disabled:h().bool,onTrackStatesChange:h().func},H.propTypes={combo:h().shape({id:h().string.isRequired,name:h().string.isRequired,models:h().arrayOf(h().string)}).isRequired,strategy:h().string.isRequired,weights:h().object,judgeModel:h().string,headroom:h().objectOf(h().number),headroomQuotaSource:h().objectOf(h().string),savedModels:h().arrayOf(h().string),healthByProvider:h().object,providerLabelById:h().object,saving:h().bool,dirty:h().bool,emptyAdapters:h().arrayOf(h().string),onAddAdapterModel:h().func,saveError:h().string,onRename:h().func,onDelete:h().func,onSave:h().func,onDiscard:h().func,onStrategyChange:h().func,onWeightSave:h().func,onJudgeChange:h().func,onModelsChange:h().func,activeProviders:h().array,modelAliases:h().object};var Q=r(98542),G=r(29366);let X=[{key:"vision",label:"Vision adapter",short:"Vision",icon:"visibility",desc:"Text-only models get eyes: images are described by a vision model before the request goes out."},{key:"audioInput",label:"Audio adapter",short:"Audio",icon:"graphic_eq",desc:"Text-only models get ears: audio clips are transcribed by an audio model before the request goes out."}];function Z({capacityAdapter:e={},activeCapForModal:t,onActiveCapChange:r,onChange:n,activeProviders:s=[],getCaps:l}){let i=F(e),o=(t,r)=>{let a={...e[t]||{enabled:!0,roundRobin:!1,models:[]},...r};n?.({...e,[t]:a})},c=(t,r,a)=>{let n=e[t]||{enabled:!0,roundRobin:!1,models:[]},s=Array.isArray(n.models)?[...n.models]:[],l=r+a;l<0||l>=s.length||([s[r],s[l]]=[s[l],s[r]],o(t,{models:s}))},u=X.find(e=>e.key===t);return(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[X.map(t=>{let n=e[t.key]||{enabled:!0,roundRobin:!1,models:[]},s=!1!==n.enabled,u=!!n.roundRobin,m=Array.isArray(n.models)?n.models:[];return(0,a.jsxs)("section",{"aria-label":t.label,className:`flex flex-col gap-3 rounded-2xl border border-dashed border-line bg-panel p-4 transition-opacity ${s?"opacity-100":"opacity-60"}`,children:[(0,a.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,a.jsx)("span",{className:"flex size-7 shrink-0 items-center justify-center rounded-lg bg-sky-bg text-sky","aria-hidden":"true",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:t.icon})}),(0,a.jsx)("span",{className:"min-w-0 flex-1 font-display text-sm font-semibold text-text",children:t.label}),(0,a.jsx)(Q.default,{size:"sm",checked:s,onChange:e=>o(t.key,{enabled:e}),"aria-label":`${t.label} enabled`})]}),(0,a.jsx)("p",{className:"text-xs text-muted leading-relaxed",children:t.desc}),(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2 pt-1 border-t border-line/60",children:[(0,a.jsx)("span",{className:"flex items-center gap-2 text-xs text-muted",children:(0,a.jsx)(Q.default,{size:"sm",checked:u,disabled:!s,onChange:e=>o(t.key,{roundRobin:e}),label:"Round robin"})}),(0,a.jsx)(d.default,{variant:"secondary",size:"sm",icon:"add",disabled:!s,onClick:()=>r?.(t.key),className:"h-8 border-dashed px-2.5 text-xs",children:"Add model"})]}),i.includes(t.key)&&(0,a.jsxs)("p",{role:"status",className:"rounded-xl border border-warn bg-warn-bg p-3 text-xs text-warn",children:[`On, but no models. ${g.Hc.slug} tries oc/mimo-v2.5-free; if it can't handle the request, the original route may reject the media.`," ",(0,a.jsx)("button",{type:"button",onClick:()=>r?.(t.key),className:"font-semibold underline underline-offset-2 focus-visible:shadow-focus focus-visible:outline-none",children:"Add model"})]}),m.length>0?(0,a.jsx)("ul",{"aria-label":`${t.label} model pool`,className:"flex flex-col gap-1.5 pt-1",children:m.map((r,n)=>(0,a.jsxs)("li",{className:"group/chip flex min-w-0 items-center gap-1 rounded-md border border-line bg-raised ps-2 pe-1 py-0.5 font-mono text-xs text-text [&>*:not(:first-child)]:shrink-0",children:[(0,a.jsx)("span",{className:"min-w-0 flex-1 truncate",title:r,children:r}),(0,a.jsx)(G.default,{caps:l?.(r)}),(0,a.jsx)("button",{type:"button",disabled:!s||0===n,onClick:()=>c(t.key,n,-1),"aria-label":`Move ${r} up`,title:"Move up",className:"p-0.5 text-muted hover:text-coral disabled:opacity-20",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[13px]","aria-hidden":"true",children:"arrow_upward"})}),(0,a.jsx)("button",{type:"button",disabled:!s||n===m.length-1,onClick:()=>c(t.key,n,1),"aria-label":`Move ${r} down`,title:"Move down",className:"p-0.5 text-muted hover:text-coral disabled:opacity-20",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[13px]","aria-hidden":"true",children:"arrow_downward"})}),(0,a.jsx)("button",{type:"button",disabled:!s,onClick:()=>{var r;let a;return r=t.key,a=e[r]||{enabled:!0,roundRobin:!1,models:[]},void o(r,{models:(Array.isArray(a.models)?a.models:[]).filter((e,t)=>t!==n)})},"aria-label":`Remove ${r} from ${t.label}`,title:"Remove",className:"p-0.5 text-muted hover:text-err disabled:opacity-20",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[13px]","aria-hidden":"true",children:"close"})})]},`${r}-${n}`))}):(0,a.jsx)("span",{className:"text-xs italic text-muted",children:"No models in pool"})]},t.key)}),t&&u&&(0,a.jsx)(S.default,{isOpen:!0,onClose:()=>r?.(null),onSelect:r=>((t,r)=>{if(!r?.value)return;let a=e[t]||{enabled:!0,roundRobin:!1,models:[]},n=Array.isArray(a.models)?a.models:[];n.includes(r.value)||o(t,{models:[...n,r.value]})})(t,r),activeProviders:s,title:`Add ${u.short} Model`,capFilter:u.key,addedModelValues:e[t]?.models||[],closeOnSelect:!1})]})}async function Y({putModels:e,patchStrategy:t,onModelsCommitted:r,onSaved:a}){let n=await e();return r?.(n),await t(),a?.(n),n}Z.propTypes={capacityAdapter:h().object,activeCapForModal:h().string,onActiveCapChange:h().func,onChange:h().func.isRequired,activeProviders:h().array,getCaps:h().func};var ee=r(42755);let et={enabled:!0,roundRobin:!1,models:[]};function er(e,t,r="replace"){let a,n,s,l,i,o=`${window.location.search}${window.location.hash}`,d=(s=new URLSearchParams(-1===(n=(a=o||"").indexOf("#"))?a:a.slice(0,n)),l=-1===n?"":a.slice(n),void 0!==t.combo&&(t.combo?s.set("combo",t.combo):s.delete("combo")),void 0!==t.create&&(t.create?s.set("create","1"):s.delete("create")),i=s.toString(),`${i?`/dashboard/combos?${i}`:"/dashboard/combos"}${l}`);d!==`${window.location.pathname}${o}`&&("push"===r?e.push(d,{scroll:!1}):e.replace(d,{scroll:!1}))}function ea(e,t,r){let a=Array.isArray(t)?t:[];return e&&a.some(t=>t.id===e)?e:r&&a.some(e=>e.id===r)?r:a[0]?.id||null}function en(e,t){return e?.[t]?.fallbackStrategy||"fallback"}function es(){var e;let[t,r]=(0,n.useState)([]),[f,h]=(0,n.useState)(!0),[p,x]=(0,n.useState)(""),[g,v]=(0,n.useState)(!1),[y,w]=(0,n.useState)(null),[j,N]=(0,n.useState)([]),[k,S]=(0,n.useState)({}),[C,P]=(0,n.useState)({vision:{...et},audioInput:{...et}}),[$,T]=(0,n.useState)({}),[E,O]=(0,n.useState)({}),[M,_]=(0,n.useState)(null),[D,I]=(0,n.useState)("fallback"),[U,z]=(0,n.useState)({}),[W,V]=(0,n.useState)(""),[B,J]=(0,n.useState)({}),[K,Q]=(0,n.useState)({}),[G,X]=(0,n.useState)(!1),[es,el]=(0,n.useState)(""),[ei,eo]=(0,n.useState)(""),[ed,ec]=(0,n.useState)(null),[eu,em]=(0,n.useState)(""),[ef,eh]=(0,n.useState)(null),{getCaps:ep}=(0,m.y)(),ex=(0,n.useRef)(k),eb=(0,n.useRef)(Promise.resolve()),eg=(0,n.useRef)(0),ev=(0,n.useRef)(null);(0,n.useEffect)(()=>{ex.current=k},[k]);let ey=(0,l.useSearchParams)(),ew=(0,l.useRouter)(),ej=ey?.toString()??"",eN=(e,t)=>er(ew,{combo:e},t),ek=new URLSearchParams(ej||"").get("combo")||null,eS="1"===new URLSearchParams(ej||"").get("create"),eC=t.some(e=>e.id===ek)?ek:null,eP=(0,n.useRef)(eN);eP.current=eN;let e$=(0,n.useRef)(eC||y);eC&&(e$.current=eC);let eR=ea(null,t,e$.current??y),[eA,eT]=(0,n.useState)(null),eE=eA&&t.some(e=>e.id===eA)?eA:eC||eR,eO=(0,n.useRef)(null),eM=(0,n.useRef)(!1),eq=(0,n.useRef)(null);(0,n.useEffect)(()=>{f||p||!t.length||eA||eT(eC||eR)},[f,p,t.length,eA,eC,eR]),(0,n.useEffect)(()=>{if(!f&&!p&&!eS){if(ek===eE){eq.current=null;return}if(eq.current!==eE){if(!eC)return void eP.current(eE,"replace");if(!eM.current)return void eT(eC);eP.current(eE,"replace"),eO.current?.request(()=>{eq.current=eC,ev.current=eC,eg.current+=1,eT(eC),eP.current(eC,"push")})}}},[ek,eC,eE,eS,f,p]),(0,n.useEffect)(()=>{eS?eM.current&&!g?(er(ew,{create:!1}),eO.current?.request(()=>{v(!0),er(ew,{create:!0})})):v(!0):v(!1)},[eS,ew,g]);let eF=e=>{e!==eE&&eV.requestNavigation(()=>{eq.current=e,ev.current=e,eg.current+=1,eT(e),w(e),eN(e,"push")})},eL=()=>eV.requestNavigation(()=>{v(!0),er(ew,{create:!0})}),e_=(0,n.useCallback)(async()=>{x("");try{let[t,a,n,s,l]=await Promise.all([fetch("/api/combos"),fetch("/api/providers"),fetch("/api/settings"),fetch("/api/usage/stats?period=today"),fetch("/api/models/alias")]);if(!t.ok)throw Error(`combos ${t.status}`);let i=await t.json(),o=a.ok?await a.json():{},d=n.ok?await n.json():{},c=s.ok?await s.json():{},u=l.ok?await l.json():{},m=(i.combos||[]).filter(e=>!e.kind||"llm"===e.kind);r(m),w(e=>ea(null,m,e)),N(o.connections||[]),S(d.comboStrategies||{});let f=d.capacityAdapter||{},h={};for(let t of q){var e;h[t]=(e=f[t],Array.isArray(e)?{enabled:!0,roundRobin:!1,models:e.map(e=>e?.model||e).filter(Boolean)}:e&&"object"==typeof e?{enabled:!1!==e.enabled,roundRobin:!!e.roundRobin,models:Array.isArray(e.models)?e.models.filter(Boolean):[]}:{...et})}P(h);let p=c.byModel||{},x={};for(let e of m)x[e.id]=function(e,t){if(!t||"object"!=typeof t)return 0;let r="string"==typeof e?e:e?.name,a=Array.isArray(e?.models)?e.models:[],n=0;for(let[e,s]of Object.entries(t)){let t=s?.rawModel||String(e).split(" (")[0];if(t===r)n+=s?.requests||0;else if(a.length>0)for(let e of a){let r=e.includes("/")?e.slice(e.indexOf("/")+1):e;if(t===e||t===r){n+=s?.requests||0;break}}}return n}(e,p);T(x),O(u.aliases||{})}catch(e){x(e?.message||"Failed to load combos")}finally{h(!1)}},[]);(0,n.useEffect)(()=>{e_()},[e_]);let eD=t.find(e=>e.id===eE)||null,eI=eD?en(k,eD.name):"fallback",eU=null!=eD&&null!=M?L({models:M,strategy:D,weights:U,judge:W}):null,ez=null!=eD?L({models:eD.models||[],strategy:eI,weights:k[eD.name]?.weights||{},judge:k[eD.name]?.judgeModel||""}):null,eW=!!eU&&JSON.stringify((e={saved:ez,draft:eU}).saved)!==JSON.stringify(e.draft),eV=function(e,t){let r=(0,l.useRouter)(),[a,s]=(0,n.useState)(null),i=(0,n.useRef)(e);i.current=e;let o=(0,n.useRef)(t);o.current=t;let d=(0,n.useRef)(!1),c=(0,n.useRef)({armed:!1,pendingForward:null}),u=(0,n.useRef)(!1),m=(0,n.useRef)(()=>window.setTimeout(()=>window.history.back(),0)),f=e=>{i.current?s(()=>e):e()},h=(0,n.useCallback)(e=>(function(e,t,r){if(e.pendingForward){e.pendingForward=r;return}e.armed?(e.armed=!1,e.pendingForward=r,t()):r()})(c.current,()=>window.history.back(),e),[]);return(0,n.useEffect)(()=>{d.current=!!a},[a]),(0,n.useEffect)(()=>{!e||a||c.current.armed||(History.prototype.pushState.call(window.history,window.history.state,"",window.location.href),c.current.armed=!0)},[e,a]),(0,n.useEffect)(()=>{let e=e=>{i.current&&(e.preventDefault(),e.returnValue="")},t=e=>{if(!i.current)return;let t=e.target instanceof Element?e.target.closest("a[href]"):null;(function(e,t,r,a){let n;if(!e||!t?.href||e.defaultPrevented||0!==e.button||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||"_blank"===t.target||t.hasDownload)return!1;try{n=new URL(t.href,r)}catch{return!1}return n.href!==r&&n.origin===a&&(n.pathname!==new URL(r).pathname||n.search!==new URL(r).search||n.hash===new URL(r).hash)})(e,{href:t?.href,target:t?.target,hasDownload:t?.hasAttribute("download")},window.location.href,window.location.origin)&&(e.preventDefault(),e.stopPropagation(),s(()=>()=>{o.current?.();let e=new URL(t.href,window.location.href);h(()=>r.push(`${e.pathname}${e.search}${e.hash}`))}))},a=()=>{var e;let t,r=(t=(e=c.current).pendingForward,e.pendingForward=null,t);if(r)return void r();if(u.current){u.current=!1;return}if(c.current.armed||d.current){if(c.current.armed=!1,!i.current){d.current||(u.current=!0,m.current());return}s(()=>()=>{o.current?.(),u.current=!0,m.current()})}};return window.addEventListener("beforeunload",e),document.addEventListener("click",t,!0),window.addEventListener("popstate",a),()=>{window.removeEventListener("beforeunload",e),document.removeEventListener("click",t,!0),window.removeEventListener("popstate",a)}},[r,h]),{request:f,requestNavigation:(e,t)=>{if(!t||c.current.pendingForward||new URL(t,window.location.href).href!==window.location.href){var r;r=i.current,r?f(()=>{(()=>o.current?.())(),(()=>h(e))()}):(()=>h(e))()}},pending:!!a,confirm:()=>{s(null),a?.()},cancel:()=>s(null)}}(eW,()=>{eD&&(eM.current=!1,eK.current=eD.id,eH(eD,ex.current))});eO.current=eV;let{registerRouteGuard:eB}=(0,ee.useCommandPalette)()||{};(0,n.useEffect)(()=>{if(eB)return eB(eV)},[eB,eV]),eM.current=eW;let eJ=F(C),eK=(0,n.useRef)(null),eH=(e,t)=>{(eg.current+=1,e)?(_(e.models||[]),I(en(t,e.name)),z(t[e.name]?.weights||{}),V(t[e.name]?.judgeModel||""),el("")):_(null)};(0,n.useEffect)(()=>{eD?.id!==eK.current&&(eK.current=eD?.id||null,eH(eD,ex.current))},[eD?.id]),ev.current=eE;let eQ=eD?.id;(0,n.useEffect)(()=>{if(!eQ||"weighted"!==D||!M?.length){J({}),Q({});return}let e=!1;return fetch(`/api/combos/${eQ}/headroom`).then(e=>e.ok?e.json():{}).then(t=>{e||(J(t.headroom||{}),Q(Object.fromEntries(Object.entries(t.quotaByModel||{}).map(([e,t])=>[e,t?.source||"static"]))))}).catch(()=>{}),()=>{e=!0}},[eQ,D,M]);let eG=async e=>{P(e),eo("");try{let t=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({capacityAdapter:e})});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error||`adapter save failed (${t.status})`)}}catch(e){P(C),eo(e?.message||"Failed to save adapter")}},eX=async e=>{let t=await fetch("/api/combos",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw Error((await t.json().catch(()=>({}))).error||"Failed to create combo");let r=await t.json().catch(()=>null);await e_(),(0,s.q0)(),v(!1),r?.id?(w(r.id),er(ew,{combo:r.id,create:!1},"push")):er(ew,{create:!1})},eZ=eD&&k[eD.name]||{},eY=function(e){let t={};for(let r of e||[])t[r.provider]||(t[r.provider]=[]),t[r.provider].push(r);let r={};for(let[e,a]of Object.entries(t)){let t=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"},n=a.map(t);if(a.length>0&&a.every(e=>!1===e.isActive))r[e]={label:"Paused",variant:"neutral"};else if(n.some(e=>"active"===e||"success"===e))r[e]={label:"Healthy",variant:"ok"};else if(n.some(e=>"error"===e||"expired"===e||"unavailable"===e)){let n=function(e){if(!e)return null;if("upstream_rate_limited"===e.lastErrorType)return"429";if("upstream_unavailable"===e.lastErrorType)return"5XX";if("upstream_auth_error"===e.lastErrorType||"auth_missing"===e.lastErrorType||"token_refresh_failed"===e.lastErrorType||"token_expired"===e.lastErrorType)return"Auth error";let t=Number(e.errorCode);return Number.isFinite(t)&&t>=400?String(t):"Error"}(a.find(e=>"error"===t(e)||"expired"===t(e)||"unavailable"===t(e)));r[e]={label:n||"Error",variant:"err"}}else r[e]={label:"No data",variant:"neutral"}}return r}(j),e0=function(e){let t={};for(let r of e||[])r.provider&&!t[r.provider]&&(t[r.provider]=r.name||r.provider);return t}(j),e1=async()=>{if(!eD||G)return;let e=eD.id,t=eD.name,a=eg.current,n=[...M||[]],s={fallbackStrategy:D};"weighted"===D&&(s.weights={...U}),"fusion"===D&&W&&(s.judgeModel=W),"fusion"===D&&!W&&eZ.judgeModel&&(s.judgeModel=""),X(!0),el(""),em("");try{await Y({putModels:async()=>{let t=await fetch(`/api/combos/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({models:n})});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error||"Failed to save route")}let r=await t.json().catch(()=>null);return{id:r?.id||e,models:r?.models||n}},patchStrategy:async()=>{let e,r=await (e=eb.current.then(async()=>{let e=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({comboStrategyPatch:{name:t,patch:s}})});if(!e.ok)throw Error((await e.json().catch(()=>({}))).error||`Save failed (${e.status})`);let r=ex.current[t]||{},a={...r,...s};s.weights&&(a.weights={...r.weights,...s.weights});let n={...ex.current};return a.fallbackStrategy&&"fallback"!==a.fallbackStrategy?n[t]=a:delete n[t],ex.current=n,S(n),{ok:!0}}).catch(e=>({ok:!1,error:e?.message||"Save failed — network error"})),eb.current=e,e);if(!r?.ok)throw Error(r?.error||"Failed to save strategy")},onModelsCommitted:e=>{e?.id&&r(t=>(t||[]).map(t=>t.id===e.id?{...t,models:[...e.models||[]]}:t))},onSaved:r=>{var n,s;n=ev.current,s=eg.current,e===n&&a===s&&(eK.current=e,eH({id:e,name:t,models:r.models},ex.current)),ev.current===e&&em("Saved")}})}catch(t){ev.current===e&&(em("Couldn't save"),el(t?.message||"Failed to save"))}finally{X(!1)}},e5=async e=>{if(eD&&e!==eD.name){X(!0),el("");try{let t=await fetch(`/api/combos/${eD.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:e})});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error||"Failed to rename combo")}await e_()}catch(e){el(e?.message||"Failed to rename")}finally{X(!1)}}};return f?(0,a.jsxs)("div",{className:"flex flex-col gap-4",role:"status","aria-label":"Loading combos",children:[(0,a.jsx)(i.CardSkeleton,{}),(0,a.jsx)(i.CardSkeleton,{})]}):p&&0===t.length?(0,a.jsx)(o.default,{icon:"error",title:"Couldn't load combos",body:p,action:(0,a.jsx)(d.default,{icon:"refresh",onClick:()=>{h(!0),e_()},children:"Retry"})}):(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-6",children:[(0,a.jsx)("span",{"aria-live":"polite",className:"sr-only",children:eu}),0===t.length?(0,a.jsx)(o.default,{icon:"layers",title:"No combos yet",body:"Create model combos with fallback support.",action:(0,a.jsx)(d.default,{icon:"add",onClick:eL,children:"New combo"})}):(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-6 lg:flex-row lg:items-start",children:[(0,a.jsxs)("div",{className:"flex w-full min-w-0 shrink-0 flex-col gap-3 lg:w-80",children:[(0,a.jsx)(d.default,{variant:"secondary",icon:"add",fullWidth:!0,onClick:eL,children:"New combo"}),(0,a.jsx)("ul",{"aria-label":"Combos",className:"m-0 flex list-none flex-col gap-3 p-0",children:t.map(e=>{let t=en(k,e.name);return(0,a.jsx)("li",{children:(0,a.jsx)(b,{combo:e,strategy:t,strategyLabel:R.find(e=>e.id===t)?.label||"Fallback",strategyVariant:A[t]||"brand",usageToday:$[e.id]||0,selected:e.id===eE,onSelect:eF})},e.id)})}),eJ.length>0&&(0,a.jsxs)("p",{role:"status",className:"text-xs text-warn",children:["Capability adapter on, empty pool:"," ",eJ.map(e=>"vision"===e?"vision":"audio").join(", "),". Pick a pool below to add a model."]}),(0,a.jsxs)("section",{"aria-label":"Capability adapter",className:"flex flex-col gap-3",children:[(0,a.jsx)("h2",{className:"text-xs font-semibold tracking-wider text-muted uppercase",children:"Capability adapter"}),(0,a.jsx)(Z,{capacityAdapter:C,activeCapForModal:ed,onActiveCapChange:ec,onChange:eG,activeProviders:j,getCaps:ep}),ei&&(0,a.jsx)("p",{role:"alert",className:"text-xs text-err",children:ei})]})]}),eD&&null!==M&&(0,a.jsx)(H,{combo:{...eD,models:M},strategy:D,weights:U,judgeModel:W,headroom:B,headroomQuotaSource:K,savedModels:eD.models||[],healthByProvider:eY,providerLabelById:e0,saving:G,dirty:eW,emptyAdapters:eJ,onAddAdapterModel:ec,saveError:es,onRename:e5,onDelete:()=>{if(!eD)return;let{id:e,name:a}=eD;eh({title:"Delete combo",message:`Delete combo "${a}"? This cannot be undone.`,onConfirm:async()=>{eh(null);try{let n=await fetch(`/api/combos/${e}`,{method:"DELETE"});if(!n.ok)throw Error(`delete ${n.status}`);S(e=>{if(!Object.hasOwn(e,a))return e;let t={...e};return delete t[a],ex.current=t,t});let l=t.filter(t=>t.id!==e),i=ea(null,l,y===e?null:y);eE===e&&eN(i,"replace"),r(l),w(i),(0,s.q0)()}catch(e){el(e?.message||"Failed to delete combo")}}})},onSave:e1,onDiscard:()=>eH(eD,ex.current),onStrategyChange:e=>{eg.current+=1,I(e),el("")},onWeightSave:(e,t)=>{eg.current+=1,z(r=>({...r,[e]:t})),el("")},onJudgeChange:e=>{eg.current+=1,V(e),el("")},onModelsChange:e=>{eg.current+=1,_(e),el("")},activeProviders:j,modelAliases:E},eD.id)]}),g&&(0,a.jsx)(c.default,{isOpen:g,onClose:()=>{v(!1),er(ew,{create:!1})},onSave:eX,activeProviders:j},"create"),(0,a.jsx)(u.ConfirmDialog,{isOpen:eV.pending,onClose:eV.cancel,onConfirm:eV.confirm,title:"Discard unsaved changes?",message:"This combo has route changes that aren't saved. Leave without saving them?",confirmText:"Discard changes",cancelText:"Keep editing"}),(0,a.jsx)(u.ConfirmModal,{isOpen:!!ef,onClose:()=>eh(null),onConfirm:ef?.onConfirm,title:ef?.title||"Confirm",message:ef?.message,variant:"danger"})]})}},51825:(e,t,r)=>{"use strict";r.d(t,{default:()=>l});var a=r(95155),n=r(84588);let s={mode:{label:"Mode",format:e=>e},defaultModel:{label:"Model",format:e=>e,mono:!0},baseUrl:{label:"Endpoint",format:e=>e,isLink:!0,mono:!0},costPerQuery:{label:"Cost / call",format:e=>0===e?"Free":`$${e.toFixed(4)}`},pricingUrl:{label:"Pricing",format:()=>"View pricing",isLink:!0},freeTier:{label:"Free tier",format:e=>e},freeMonthlyQuota:{label:"Free quota",format:e=>0===e?"—":e>=999999?"Unlimited":`${e.toLocaleString()} / mo`},searchTypes:{label:"Types",format:e=>e.join(", ")},formats:{label:"Formats",format:e=>e.join(", ")},maxMaxResults:{label:"Max results",format:e=>e},maxCharacters:{label:"Max chars",format:e=>e.toLocaleString()}};function l({config:e,provider:t,title:r="Provider Info"}){if(!e)return null;let i=Object.entries(s).filter(([t])=>void 0!==e[t]&&null!==e[t]&&""!==e[t]).map(([t,r])=>({key:t,label:r.label,value:r.format(e[t]),isLink:r.isLink,mono:r.mono,raw:e[t]})),o=t?.notice?.apiKeyUrl||t?.website,d=t?.notice?.text;return(0,a.jsxs)(n.default,{children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,a.jsx)("h2",{className:"text-lg font-semibold",children:r}),o&&(0,a.jsxs)("a",{href:o,target:"_blank",rel:"noopener noreferrer",className:"text-xs text-coral-ink hover:underline inline-flex items-center gap-1",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",children:"open_in_new"}),"Get API key"]})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-x-6 gap-y-2",children:[i.map(e=>(0,a.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,a.jsx)("span",{className:"text-xs text-muted w-28 shrink-0",children:e.label}),e.isLink?(0,a.jsx)("a",{href:e.raw,target:"_blank",rel:"noopener noreferrer",className:`text-sm text-coral-ink hover:underline truncate ${e.mono?"font-mono":""}`,children:e.value}):(0,a.jsx)("span",{className:`text-sm text-text truncate ${e.mono?"font-mono":""}`,children:e.value})]},e.key)),d&&(0,a.jsxs)("div",{className:"flex items-start gap-3 min-w-0 sm:col-span-2",children:[(0,a.jsx)("span",{className:"text-xs text-muted w-28 shrink-0 mt-0.5",children:"Notice"}),(0,a.jsx)("span",{className:"text-sm text-text leading-relaxed",children:d})]})]})]})}},64371:(e,t,r)=>{"use strict";r.d(t,{default:()=>u});var a=r(95155),n=r(14051),s=r.n(n),l=r(12115),i=r(11910),o=r(15729),d=r(31474),c=r(35591);function u({value:e,onChange:t,ariaLabel:r,placeholder:n,id:s,className:m,inputClassName:f}){let h=(0,l.useRef)(null);return(0,l.useEffect)(()=>{let e=e=>{let t;if(t=(0,c.eS)(e,{inCodeEditor:!!e?.target?.closest?.(".monaco-editor")}),e?.key!=="/"||e.metaKey||e.ctrlKey||e.altKey||t.defaultPrevented||t.isComposing||t.inEditable||t.inCodeEditor)return;let r=h.current;r&&(e.preventDefault(),r.focus(),r.select())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[h]),(0,a.jsxs)("div",{className:(0,d.cn)("relative",m),children:[(0,a.jsx)(i.default,{ref:h,id:s,type:"search",icon:"search",value:e,onChange:t,placeholder:n,"aria-label":r,inputClassName:(0,d.cn)("min-h-10 sm:pe-10",f)}),!e&&(0,a.jsx)("span",{className:"pointer-events-none absolute inset-y-0 end-3 hidden items-center sm:flex","aria-hidden":"true",children:(0,a.jsx)(o.default,{children:"/"})})]})}u.propTypes={value:s().string.isRequired,onChange:s().func.isRequired,ariaLabel:s().string.isRequired,placeholder:s().string,id:s().string,className:s().string,inputClassName:s().string}},84680:(e,t,r)=>{"use strict";r.d(t,{PM:()=>a.PM,Sj:()=>a.Sj,Vy:()=>a.Vy,fF:()=>a.fF,sl:()=>a.sl,vL:()=>a.vL,y$:()=>a.y$,zM:()=>a.zM});var a=r(44923)},86465:(e,t,r)=>{"use strict";r.d(t,{default:()=>l});var a=r(95155),n=r(14051),s=r.n(n);function l({model:e,className:t}){return(0,a.jsx)("code",{className:`inline-flex max-w-full items-center truncate rounded-md border border-line bg-raised px-2 py-0.5 font-mono text-xs text-muted${t?` ${t}`:""}`,children:e})}l.propTypes={model:s().string.isRequired,className:s().string}},96748:(e,t,r)=>{"use strict";r.d(t,{default:()=>m});var a=r(95155),n=r(12115),s=r(14051),l=r.n(s),i=r(81127),o=r(11910),d=r(92542),c=r(56061);let u="https://api.openai.com/v1";function m({isOpen:e,onClose:t,onCreated:r,onSaved:s,node:l}){let f=!!l,[h,p]=(0,n.useState)({name:"",prefix:"",baseUrl:u}),[x,b]=(0,n.useState)(!1),[g,v]=(0,n.useState)(""),[y,w]=(0,n.useState)(""),[j,N]=(0,n.useState)(!1),[k,S]=(0,n.useState)(null);(0,n.useEffect)(()=>{e&&(S(null),v(""),w(""),f?p({name:l.name||"",prefix:l.prefix||"",baseUrl:l.baseUrl||u}):p({name:"",prefix:"",baseUrl:u}))},[e,f,l]);let C=async()=>{if(h.name.trim()&&h.prefix.trim()&&h.baseUrl.trim()){b(!0);try{let e=f?`/api/provider-nodes/${l.id}`:"/api/provider-nodes",t=f?"PUT":"POST",a={name:h.name,prefix:h.prefix,baseUrl:h.baseUrl};f||(a.type="custom-embedding");let n=await fetch(e,{method:t,headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),i=await n.json();n.ok&&(f?s?.(i.node):r?.(i.node))}catch(e){console.log("Error saving custom embedding node:",e)}finally{b(!1)}}},P=async()=>{N(!0);try{let e=await fetch("/api/provider-nodes/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:h.baseUrl,apiKey:g,type:"custom-embedding",modelId:y.trim()||void 0})}),t=await e.json();S(t)}catch{S({valid:!1,error:"Network error"})}finally{N(!1)}};return(0,a.jsx)(i.default,{isOpen:e,title:f?"Edit Custom Embedding":"Add Custom Embedding",onClose:t,children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsx)(o.default,{label:"Name",value:h.name,onChange:e=>p({...h,name:e.target.value}),placeholder:"Voyage AI",hint:"Required. A friendly label for this embedding provider."}),(0,a.jsx)(o.default,{label:"Prefix",value:h.prefix,onChange:e=>p({...h,prefix:e.target.value}),placeholder:"voyage",hint:"Required. Used as the provider prefix for model IDs (e.g. voyage/voyage-3)."}),(0,a.jsx)(o.default,{label:"Base URL",value:h.baseUrl,onChange:e=>p({...h,baseUrl:e.target.value}),placeholder:"https://api.voyageai.com/v1",hint:"Most embedding APIs are OpenAI-compatible: Voyage, Cohere, Jina, Mistral, Together..."}),(0,a.jsx)(o.default,{label:"API key (for check)",type:"password",value:g,onChange:e=>v(e.target.value)}),(0,a.jsx)(o.default,{label:"Model ID (for check)",value:y,onChange:e=>w(e.target.value),placeholder:"e.g. voyage-3, embed-english-v3.0, text-embedding-3-small",hint:"Required for validation. Will send a test embeddings request."}),(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)(d.default,{onClick:P,disabled:!g||!y.trim()||j||!h.baseUrl.trim(),variant:"secondary",children:j?"Checking...":"Check"}),(()=>{if(!k)return null;let{valid:e,error:t,dimensions:r}=k;return e?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(c.default,{variant:"success",children:"Valid"}),r&&(0,a.jsxs)("span",{className:"text-sm text-muted",children:[r," dims"]})]}):(0,a.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,a.jsx)(c.default,{variant:"error",children:"Invalid"}),t&&(0,a.jsx)("span",{className:"text-sm text-err",children:t})]})})()]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(d.default,{onClick:C,fullWidth:!0,disabled:!h.name.trim()||!h.prefix.trim()||!h.baseUrl.trim()||x,children:x?f?"Saving...":"Creating...":f?"Save":"Create"}),(0,a.jsx)(d.default,{onClick:t,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})})}m.propTypes={isOpen:l().bool.isRequired,onClose:l().func.isRequired,onCreated:l().func,onSaved:l().func,node:l().shape({id:l().string,name:l().string,prefix:l().string,baseUrl:l().string})}},97556:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>u});var a=r(95155),n=r(12115),s=r(14051),l=r.n(s),i=r(9233),o=r(28745),d=r(81127),c=r(77671);function u({isOpen:e,onClose:t}){let[r,s]=(0,n.useState)(""),[l,m]=(0,n.useState)(!1),[f,h]=(0,n.useState)("");return(0,n.useEffect)(()=>{e&&!r&&(m(!0),h(""),fetch(o.Nu.changelogUrl).then(e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);return e.text()}).then(e=>s(i.xI.parse(e))).catch(e=>h(e.message||"Failed to load")).finally(()=>m(!1)))},[e,r]),(0,a.jsxs)(d.default,{isOpen:e,onClose:t,title:"Change log",size:"full",children:[(0,a.jsxs)("div",{"aria-live":"polite",children:[l&&(0,a.jsx)(c.LoadingState,{lines:6,label:"Loading changelog",className:"py-4"}),f&&(0,a.jsxs)("p",{role:"alert",className:"py-4 text-err",children:["Failed to load changelog: ",f]})]}),!l&&!f&&r&&(0,a.jsx)("div",{className:"changelog-body text-text",dangerouslySetInnerHTML:{__html:r}})]})}i.xI.setOptions({gfm:!0,breaks:!0}),u.propTypes={isOpen:l().bool.isRequired,onClose:l().func.isRequired}}},e=>{e.O(0,[1610,4070,9233,6474,9671,4685,2903,7899,1863,5014,8105,198,7505,4588,9284,4321,3343,2577,1039,8441,3794,7358],()=>e(e.s=4086)),_N_E=e.O()}]);
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1931,3649],{4086:(e,t,r)=>{Promise.resolve().then(r.bind(r,47701)),Promise.resolve().then(r.bind(r,96748)),Promise.resolve().then(r.bind(r,56061)),Promise.resolve().then(r.bind(r,92542)),Promise.resolve().then(r.bind(r,56006)),Promise.resolve().then(r.bind(r,29366)),Promise.resolve().then(r.bind(r,84588)),Promise.resolve().then(r.bind(r,28164)),Promise.resolve().then(r.bind(r,97556)),Promise.resolve().then(r.bind(r,9911)),Promise.resolve().then(r.bind(r,45455)),Promise.resolve().then(r.bind(r,82534)),Promise.resolve().then(r.bind(r,42755)),Promise.resolve().then(r.bind(r,26506)),Promise.resolve().then(r.bind(r,10185)),Promise.resolve().then(r.bind(r,58897)),Promise.resolve().then(r.bind(r,29155)),Promise.resolve().then(r.bind(r,30815)),Promise.resolve().then(r.bind(r,29499)),Promise.resolve().then(r.bind(r,71252)),Promise.resolve().then(r.bind(r,99312)),Promise.resolve().then(r.bind(r,98582)),Promise.resolve().then(r.bind(r,53655)),Promise.resolve().then(r.bind(r,95088)),Promise.resolve().then(r.bind(r,29480)),Promise.resolve().then(r.bind(r,80752)),Promise.resolve().then(r.bind(r,6587)),Promise.resolve().then(r.bind(r,23936)),Promise.resolve().then(r.bind(r,11910)),Promise.resolve().then(r.bind(r,15729)),Promise.resolve().then(r.bind(r,46318)),Promise.resolve().then(r.bind(r,62899)),Promise.resolve().then(r.bind(r,94230)),Promise.resolve().then(r.bind(r,21931)),Promise.resolve().then(r.bind(r,22577)),Promise.resolve().then(r.bind(r,25086)),Promise.resolve().then(r.bind(r,28815)),Promise.resolve().then(r.bind(r,28058)),Promise.resolve().then(r.bind(r,93921)),Promise.resolve().then(r.bind(r,44863)),Promise.resolve().then(r.bind(r,81127)),Promise.resolve().then(r.bind(r,86465)),Promise.resolve().then(r.bind(r,96238)),Promise.resolve().then(r.bind(r,4823)),Promise.resolve().then(r.bind(r,61640)),Promise.resolve().then(r.bind(r,91348)),Promise.resolve().then(r.bind(r,34912)),Promise.resolve().then(r.bind(r,50611)),Promise.resolve().then(r.bind(r,51825)),Promise.resolve().then(r.bind(r,96975)),Promise.resolve().then(r.bind(r,46791)),Promise.resolve().then(r.bind(r,56071)),Promise.resolve().then(r.bind(r,28067)),Promise.resolve().then(r.bind(r,99380)),Promise.resolve().then(r.bind(r,61002)),Promise.resolve().then(r.bind(r,92622)),Promise.resolve().then(r.bind(r,44807)),Promise.resolve().then(r.bind(r,45027)),Promise.resolve().then(r.bind(r,77671)),Promise.resolve().then(r.bind(r,25908)),Promise.resolve().then(r.bind(r,19123)),Promise.resolve().then(r.bind(r,20446)),Promise.resolve().then(r.bind(r,38794)),Promise.resolve().then(r.bind(r,52024)),Promise.resolve().then(r.bind(r,21110)),Promise.resolve().then(r.bind(r,38587)),Promise.resolve().then(r.bind(r,98542)),Promise.resolve().then(r.bind(r,64371)),Promise.resolve().then(r.bind(r,97677)),Promise.resolve().then(r.bind(r,50744)),Promise.resolve().then(r.bind(r,40684))},14242:(e,t,r)=>{"use strict";r.d(t,{gl:()=>a.gl});var a=r(87256)},14383:(e,t,r)=>{"use strict";r.d(t,{AN:()=>a.AN,FR:()=>a.FR,MS:()=>a.MS,Mp:()=>a.Mp,fp:()=>a.fp,uN:()=>a.uN});var a=r(44923)},21110:(e,t,r)=>{"use strict";r.d(t,{ThemeProvider:()=>l});var a=r(95155),n=r(12115),s=r(90085);function l({children:e}){let{initTheme:t}=(0,s.A)();return(0,n.useEffect)(()=>{t()},[t]),(0,a.jsx)(a.Fragment,{children:e})}},21931:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>m});var a=r(95155),n=r(12115),s=r(14051),l=r.n(s),i=r(93308),o=r(73006),d=r(81127);let c={en:"English",vi:"Tiếng Việt","zh-CN":"简体中文","zh-TW":"繁體中文",ja:"日本語","pt-BR":"Portugu\xeas (Brasil)","pt-PT":"Portugu\xeas (Portugal)",ko:"한국어",es:"Espa\xf1ol",de:"Deutsch",fr:"Fran\xe7ais",he:"עברית",ar:"العربية",ru:"Русский",pl:"Polski",cs:"Čeština",nl:"Nederlands",tr:"T\xfcrk\xe7e",uk:"Українська",tl:"Tagalog",id:"Indonesia",th:"ไทย",km:"ខ្មែរ",hi:"हिन्दी",bn:"বাংলা",ur:"اردو",ro:"Rom\xe2nă",sv:"Svenska",it:"Italiano",el:"Ελληνικά",hu:"Magyar",fi:"Suomi",da:"Dansk",no:"Norsk",fa:"فارسی"},u=e=>c[e]||e;function m({className:e="",isOpen:t,onClose:r,hideTrigger:s=!1}){let[l,c]=(0,n.useState)("en"),[f,h]=(0,n.useState)(!1),[p,x]=(0,n.useState)(!1),b="boolean"==typeof t,g=(e=l)=>{b?r?.(e):x(!1)};(0,n.useEffect)(()=>{c(function(){if("u"<typeof document)return"en";let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${i.CL}=`)),t=e?decodeURIComponent(e.split("=")[1]):"en";return(0,i.QC)(t)}())},[]);let v=async e=>{if(e!==l&&!f){h(!0);try{await fetch("/api/locale",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({locale:e})}),await (0,o.wn)();let t=document.documentElement,r=(0,o.kk)();t.lang=r,t.dir=i.rB.includes(r)?"rtl":"ltr",c(e),g(e)}catch(e){console.error("Failed to set locale:",e)}finally{h(!1)}}};return(0,a.jsxs)("div",{className:e,children:[!s&&(0,a.jsxs)("button",{type:"button",onClick:()=>x(!p),disabled:f,className:"flex h-11 items-center gap-2 rounded-lg px-3 text-muted transition-colors hover:bg-raised hover:text-text",title:"Language",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]","aria-hidden":"true",children:"language"}),(0,a.jsx)("span",{className:"text-sm font-medium",children:u(l)})]}),(0,a.jsx)(d.default,{isOpen:b?t:p,onClose:()=>g(),title:"Select language",size:"full",className:"max-w-2xl",children:(0,a.jsx)("div",{"data-i18n-skip":"true",className:"grid grid-cols-[repeat(auto-fill,minmax(100px,1fr))] gap-2",children:i.YZ.map(e=>{let t=l===e;return(0,a.jsxs)("button",{type:"button",onClick:()=>v(e),disabled:f,"aria-current":t||void 0,title:u(e),className:`flex w-full flex-col items-center justify-start gap-1 rounded-lg px-2 py-3 text-xs font-medium transition-colors ${t?"bg-coral-bg text-coral shadow-focus":"text-text hover:bg-raised"} ${f?"cursor-wait opacity-70":""}`,children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[26px]","aria-hidden":"true",children:t?"language":"translate"}),(0,a.jsx)("span",{className:"flex h-8 items-center overflow-hidden text-center leading-tight [display:-webkit-box] [-webkit-box-orient:vertical] [-webkit-line-clamp:2]",children:u(e)}),t&&(0,a.jsx)("span",{className:"material-symbols-outlined text-sm","aria-hidden":"true",children:"check"})]},e)})})})]})}m.propTypes={className:l().string,isOpen:l().bool,onClose:l().func,hideTrigger:l().bool}},28164:(e,t,r)=>{"use strict";r.d(t,{default:()=>d});var a=r(95155),n=r(98500),s=r.n(n),l=r(14051),i=r.n(l),o=r(31474);function d({href:e,children:t,showArrow:r=!0,className:n}){return(0,a.jsxs)(s(),{href:e,className:(0,o.cn)(n||"text-[13px] font-semibold text-coral-ink hover:text-coral"),children:[t,r?(0,a.jsxs)(a.Fragment,{children:[" ",(0,a.jsx)("span",{"aria-hidden":"true",className:"inline-block rtl:-scale-x-100",children:"→"})]}):null]})}d.propTypes={href:i().string.isRequired,children:i().node.isRequired,showArrow:i().bool,className:i().string}},38794:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var a=r(95155),n=r(14051),s=r.n(n),l=r(12115),i=r(50770);function o({lines:e,label:t="Console output",className:r,live:n="off",onScroll:s,scrollRef:d,cursor:c=!1,row:u}){return(0,a.jsx)("div",{ref:d,role:"log","aria-label":t,"aria-live":n,dir:"ltr",onScroll:s,tabIndex:0,className:`signal-terminal custom-scrollbar m-0 overflow-auto rounded-2xl p-[18px_22px] text-start font-mono text-[13px] leading-[1.75] focus-visible:shadow-focus${r?` ${r}`:""}`,children:(0,a.jsxs)("ol",{className:"m-0 list-none p-0",children:[u?e.map((e,t)=>(0,a.jsx)(l.Fragment,{children:u(e,t)},e.key??e.id??`${e.time}-${t}`)):e.map((e,t)=>(0,a.jsxs)("li",{className:"flex gap-4 whitespace-nowrap",children:[(0,a.jsx)("span",{className:"signal-terminal-time shrink-0",children:e.time||"--:--:--"}),(0,a.jsx)("span",{className:`w-[52px] shrink-0 font-semibold ${(0,i.pN)(e.level)}`,children:e.level}),(0,a.jsx)("span",{className:"min-w-0 flex-1 whitespace-pre",children:e.message})]},e.id??`${e.time}-${t}`)),c&&(0,a.jsxs)("li",{className:"mt-0.5 flex gap-4 whitespace-nowrap","aria-hidden":"true",children:[(0,a.jsx)("span",{className:"signal-terminal-time shrink-0",children:"--:--:--"}),(0,a.jsx)("span",{className:"signal-terminal-cursor w-[52px] shrink-0 animate-pulse font-semibold",children:"▍"})]})]})})}o.propTypes={lines:s().arrayOf(s().shape({id:s().oneOfType([s().string,s().number]),time:s().string,level:s().oneOf(["LOG","INFO","WARN","ERROR","DEBUG"]).isRequired,message:s().string.isRequired})).isRequired,label:s().string,className:s().string,live:s().oneOf(["off","polite"]),onScroll:s().func,scrollRef:s().shape({current:s().object}),cursor:s().bool,row:s().func}},47701:(e,t,r)=>{"use strict";r.d(t,{default:()=>es});var a=r(95155),n=r(12115),s=r(17081),l=r(73321),i=r(25086),o=r(99312),d=r(92542),c=r(45455),u=r(81127),m=r(929),f=r(14051),h=r.n(f),p=r(96975),x=r(19123);function b({combo:e,strategy:t="fallback",strategyLabel:r,strategyVariant:n="brand",usageToday:s=0,selected:l=!1,onSelect:i}){let o=e?.models||[],d=o.slice(0,3).map((e,t)=>({key:`${e}-${t}`,short:e}));return(0,a.jsxs)("button",{type:"button",onClick:()=>i?.(e.id),"aria-pressed":l,"aria-label":`${e.name} combo, ${r||t}, ${o.length} models`,className:`flex w-full flex-col gap-2 rounded-2xl border bg-panel p-4 text-start transition-colors focus-visible:shadow-focus focus-visible:outline-none ${l?"border-coral shadow-[0_0_0_3px_var(--signal-coral-bg)]":"border-line hover:border-subtle"}`,children:[(0,a.jsxs)("span",{className:"flex items-center gap-2",children:[(0,a.jsx)("code",{className:"min-w-0 flex-1 truncate font-mono text-base font-semibold text-text",children:e.name}),(0,a.jsx)(x.default,{variant:n,size:"sm",children:r||t})]}),(0,a.jsxs)("span",{className:"flex items-center",children:[d.map((e,t)=>(0,a.jsx)("span",{title:e.short,style:{zIndex:3-t,marginInlineStart:0===t?0:-6},className:"relative inline-flex rounded-md shadow-[0_0_0_2px_var(--signal-panel)]",children:(0,a.jsx)(p.default,{providerId:e.short,size:"sm"})},e.key)),(0,a.jsxs)("span",{className:"ms-3 text-xs text-muted",children:[o.length," models \xb7 ",function(e){if(!Number.isFinite(e)||e<=0)return"0 today";if(e>=1e3){let t=e/1e3;return`${t>=10||Number.isInteger(10*t)?t.toFixed(t>=10?0:1).replace(/\.0$/,""):t.toFixed(1)}k today`}return`${e} today`}(s)]})]})]})}b.propTypes={combo:h().shape({id:h().string.isRequired,name:h().string.isRequired,models:h().arrayOf(h().string)}).isRequired,strategy:h().string,strategyLabel:h().string,strategyVariant:h().oneOf(["brand","info","live","warn"]),usageToday:h().number,selected:h().bool,onSelect:h().func};var g=r(4553),v=r(14383),y=r(87256),w=r(5020),j=r(10185),N=r(6587),k=r(11910),S=r(96238);function C(e,t){return t&&Object.hasOwn(t,e)&&Number.isFinite(t[e])&&t[e]>=0?t[e]:1}function P(e){return"number"==typeof e&&Number.isFinite(e)&&e>=0?e:1}let $={static:"no quota data yet",header:"provider-reported",probe:"from the last quota probe"},R=[{id:"fallback",label:"Fallback",desc:"Try in order until one answers",icon:"low_priority"},{id:"round-robin",label:"Round robin",desc:"Rotate on every request",icon:"autorenew"},{id:"weighted",label:"Weighted",desc:"Split by weight and remaining quota",icon:"bar_chart"},{id:"fusion",label:"Fusion",desc:"Ask a panel, let a judge pick",icon:"gavel"}],A={fallback:"brand","round-robin":"info",weighted:"live",fusion:"warn"},T={fallback:`Every request starts at #1. On a rate limit, auth error or outage, ${g.Hc.slug} moves down the list without your client noticing.`,"round-robin":"Each request goes to the next model in the list, spreading load and quota evenly.",weighted:"Traffic splits by weight, then shifts away from accounts that are running low on quota.",fusion:"Every model in the panel answers in parallel. The judge reads them all and returns the best reply."};function E(e){if(null==e)return{ok:!1,error:"Enter a number"};if("string"==typeof e&&""===e.trim())return{ok:!1,error:"Enter a finite number"};let t=Number(e);return Number.isFinite(t)?t<0||t>1e3?{ok:!1,error:"Weight must be between 0 and 1000"}:{ok:!0,value:t}:{ok:!1,error:"Enter a finite number"}}let O=/^[a-zA-Z0-9_.-]+$/;function M(e){let t="string"==typeof e?e.trim():"";return t?O.test(t)?{ok:!0,value:t}:{ok:!1,error:"Only letters, numbers, -, _ and . allowed"}:{ok:!1,error:"Name is required"}}let q=["vision","audioInput"];function F(e){let t=[];for(let r of q){let a=e?.[r],n=a?.enabled!==!1,s=Array.isArray(a?.models)?a.models.filter(Boolean):[];n&&0===s.length&&t.push(r)}return t}function L({models:e=[],strategy:t="fallback",weights:r={},judge:a=""}){let n={};for(let e of Object.keys(r||{}).sort())n[e]=r[e];return{models:[...e],strategy:t,weights:n,judge:a||""}}function _(e,t){let r=t instanceof Set?t:new Set(t||[]),a={};for(let[t,n]of Object.entries(e||{}))r.has(t)&&(a[t]=n);return a}var D=r(56006);function I({value:e,onChange:t}){let r=(0,n.useRef)([]),s=Math.max(0,R.findIndex(t=>t.id===e));return(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,a.jsx)("p",{id:"combo-strategy-label",className:"text-xs font-semibold tracking-wider text-muted uppercase",children:"How should these models take turns?"}),(0,a.jsx)("div",{role:"radiogroup","aria-labelledby":"combo-strategy-label",className:"grid grid-cols-2 gap-3 xl:grid-cols-4",children:R.map((n,l)=>{let i=e===n.id;return(0,a.jsxs)("button",{ref:e=>{r.current[l]=e},type:"button",role:"radio","aria-checked":i,tabIndex:l===s?0:-1,onKeyDown:e=>((e,a)=>{if(!["ArrowRight","ArrowDown","ArrowLeft","ArrowUp","Home","End"].includes(e.key))return;e.preventDefault();let n=e.currentTarget.closest("[dir]")?.getAttribute("dir")==="rtl",s=a;s="Home"===e.key?0:"End"===e.key?R.length-1:(a+("ArrowRight"===e.key||"ArrowDown"===e.key?1:-1)*(n?-1:1)+R.length)%R.length,r.current[s]?.focus(),t?.(R[s].id)})(e,l),onClick:()=>t?.(n.id),className:`flex min-h-[108px] flex-col items-start gap-1.5 rounded-xl border bg-raised p-3.5 text-start transition-colors focus-visible:shadow-focus focus-visible:outline-none ${i?"border-coral bg-coral-bg":"border-line hover:border-subtle"}`,children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[22px] text-coral-ink","aria-hidden":"true",children:n.icon}),(0,a.jsx)("span",{className:"text-[15px] font-bold text-text",children:n.label}),(0,a.jsx)("span",{className:"text-xs leading-snug text-muted",children:n.desc})]},n.id)})}),(0,a.jsx)(D.default,{variant:"info",icon:"info",children:T[e]??T.fallback})]})}I.propTypes={value:h().string.isRequired,onChange:h().func};var U=r(14242),z=r(39768),W=r(44863);function V({uid:e,index:t,model:r,providerLabel:n,role:s,health:l,healthVariant:i,showWeight:o,weight:d,weightDetail:c,share:u,weightError:m,onWeightChange:f,onWeightBlur:h,onRemove:b,replayState:g,replayReason:v}){let{attributes:y,listeners:w,setNodeRef:j,transform:k,transition:S,isDragging:C}=(0,U.gl)({id:e}),P="function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,$={transform:z.Ks.Transform.toString(k),transition:P?void 0:S,opacity:C?.4:1,zIndex:C?10:void 0},R=r.includes("/")?r.slice(0,r.indexOf("/")):r,A="attempted"===g?{variant:"info",label:"Trying…"}:"answered"===g?{variant:"live",label:"Answered"}:"failed"===g?{variant:"warn",label:`Failed — ${v||"unknown"}`}:"skipped"===g?{variant:"warn",label:`Skipped — ${v||"unknown"}`}:null;return(0,a.jsxs)("li",{style:$,ref:j,className:"flex list-none gap-3.5",children:[(0,a.jsxs)("div",{className:"flex w-8 shrink-0 flex-col items-center","aria-hidden":"true",children:[(0,a.jsx)("span",{className:"flex size-8 items-center justify-center rounded-full bg-text font-mono text-[13px] font-semibold text-bg",children:t+1}),(0,a.jsx)("span",{className:"my-1.5 w-0.5 flex-1 bg-[repeating-linear-gradient(var(--signal-subtle)_0_5px,transparent_5px_11px)]"})]}),(0,a.jsxs)("div",{className:`mb-3 flex min-w-0 flex-1 flex-col gap-3 rounded-xl border bg-raised p-3.5 sm:p-4 ${C?"border-coral shadow-card":("answered"===g?"border-lime":"attempted"===g?"border-sky":"failed"===g||"skipped"===g?"border-warn":null)||"border-line"}`,children:[(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,a.jsx)(p.default,{providerId:R,size:"md"}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("p",{className:"truncate font-mono text-[15px] font-medium text-text",children:r}),(0,a.jsxs)("p",{className:"truncate text-xs text-muted",children:[n," \xb7 ",s]})]}),(0,a.jsx)(x.default,{variant:i,size:"sm",children:l}),A&&(0,a.jsx)(x.default,{variant:A.variant,size:"sm",className:"max-w-40 truncate",children:A.label}),(0,a.jsx)("button",{type:"button",...y,...w,"aria-label":`Reorder ${r}, position ${t+1}`,title:"Drag to reorder",className:"inline-flex size-10 shrink-0 cursor-grab touch-none items-center justify-center rounded-lg text-muted transition-colors hover:text-text focus-visible:shadow-focus focus-visible:outline-none active:cursor-grabbing",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]","aria-hidden":"true",children:"drag_indicator"})}),(0,a.jsx)(N.default,{icon:"close",label:`Remove ${r} from route`,onClick:b})]}),o&&(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1 ps-12",children:[(0,a.jsx)("label",{htmlFor:`${e}-weight`,className:"shrink-0 text-xs text-muted",children:"Weight"}),(0,a.jsx)("input",{id:`${e}-weight`,type:"number",min:"0",max:"1000",step:"1",value:d,"aria-invalid":!!m||void 0,"aria-describedby":m?`${e}-weight-error`:void 0,onChange:e=>f?.(e.target.value),onBlur:()=>h?.(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),e.currentTarget.blur())},className:"h-8 w-20 shrink-0 rounded-lg border border-line bg-panel px-2 text-center font-mono text-[13px] text-text outline-none focus:border-coral focus:shadow-focus"}),(0,a.jsx)(W.default,{value:u,variant:"brand",label:`Traffic share for ${r}`,valueText:0===Number(d)&&""!==d?"Fallback only":`about ${u} percent`,className:"min-w-0 flex-1"}),(0,a.jsx)("span",{className:"w-20 shrink-0 text-end font-mono text-xs text-muted",children:0===Number(d)&&""!==d?"Fallback only":`≈${u}%`}),c&&(0,a.jsx)("p",{className:"m-0 basis-full text-xs text-muted",children:c}),m&&(0,a.jsx)("span",{id:`${e}-weight-error`,role:"alert",className:"basis-full text-xs text-err",children:m})]})]})]})}V.propTypes={uid:h().string.isRequired,index:h().number.isRequired,model:h().string.isRequired,providerLabel:h().string.isRequired,role:h().string.isRequired,health:h().string.isRequired,healthVariant:h().string.isRequired,showWeight:h().bool,weight:h().oneOfType([h().string,h().number]),weightDetail:h().string,share:h().number,weightError:h().string,onWeightChange:h().func,onWeightBlur:h().func,onRemove:h().func,replayState:h().oneOf(["attempted","answered","failed","skipped"]),replayReason:h().string},r(1620);var B=r(47929);let J={served:{label:"Served"},answered:{label:"Answered"},skipped:{label:"Skipped"}};function K({comboId:e,models:t,disabled:r,onTrackStatesChange:s}){let[l,i]=(0,n.useState)(!1),[o,c]=(0,n.useState)(null),[u,m]=(0,n.useState)(""),[f,h]=(0,n.useState)(null),[b,g]=(0,n.useState)(0),v=(0,B.Ib)(),y=Array.isArray(t)?t:[],w=(0,n.useMemo)(()=>{var e;let t,r;return e=o?.attempts,t=Array.isArray(y)?y:[],r=new Map,(Array.isArray(e)?e:[]).map(e=>{var a;let n,s="string"==typeof e?.model?e.model:"",l="string"==typeof e?.via&&t.includes(e.via)?e.via:null,i=s?(e=>{let a=r.get(e)||0;r.set(e,a+1);let n=0;for(let r=0;r<=a;r++){let s=t.indexOf(e,n);if(-1===s)break;if(r===a)return s;n=s+1}return null})(l||s):null,o="served"===(a=e?.outcome)||"answered"===a?"answered":"failed"===a?"failed":"skipped",d="answered"===o,c=d?"answered":e?.errorType??`error ${e?.status??"unknown"}`,u=!Number.isFinite(n=Number(e?.latencyMs))||n<0?"—":n<1e3?`${Math.round(n)}ms`:`${(n/1e3).toFixed(2)}s`,m="number"==typeof e?.status?e.status:null,f=d?`${s||"unknown model"} answered in ${u}.`:`${s||"unknown model"}: ${c} in ${u} — ${o}.`;return{index:i,model:s,state:o,tone:d?"live":"warn",reason:c,latency:u,status:m,outcome:e?.outcome,account:e?.account||null,role:e?.role,via:e?.via,text:f}})},[y,o]),j=w.length,N=async()=>{if(l||r||!e)return;i(!0),m(""),c(null),g(0);let t=new AbortController,a=setTimeout(()=>t.abort(),65e3);try{let r=await fetch(`/api/combos/${e}/test`,{method:"POST",signal:t.signal}),a=await r.json().catch(()=>({}));if(429===r.status)throw Error(a.error||"Probe rate limited — wait a few seconds and retry.");if(!r.ok)throw Error(a.error||`Probe failed (${r.status})`);c(a),h(a.ranAt||new Date().toISOString()),g(v?(a.attempts||[]).length:0)}catch(e){m(e?.name==="AbortError"?"Probe timed out — try again.":e?.message||"Probe failed")}finally{clearTimeout(a),i(!1)}};(0,n.useEffect)(()=>{if(!o||v||b>=j)return;let e=setTimeout(()=>g(e=>Math.min(j,e+1)),250);return()=>clearTimeout(e)},[o,v,b,j]),(0,n.useEffect)(()=>{if(!s)return;if(!o)return void s([]);let e=y.map(()=>null);w.forEach((t,r)=>{null===t.index||r>b||(e[t.index]={state:t.state,reason:t.reason})}),!v&&b<j&&w[b]&&null!==w[b].index&&(e[w[b].index]={state:"attempted",reason:""}),s(e)},[w,b,v,o,y,j,s]);let k=function(e,t=Date.now()){if(!e)return null;let r=new Date(e).getTime();if(!Number.isFinite(r))return null;let a=Math.max(0,Math.round((t-r)/1e3));if(a<10)return"Last run just now";if(a<60)return`Last run ${a}s ago`;let n=Math.floor(a/60);if(n<60)return`Last run ${n} min ago`;let s=Math.floor(n/60);return s<24?`Last run ${s}h ago`:`Last run ${Math.floor(s/24)}d ago`}(f),S=w.slice(0,v?j:b+1);return(0,a.jsxs)("section",{"aria-label":"Test this route",className:"mt-auto flex flex-col gap-3 rounded-2xl border border-line bg-bg p-[18px]",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,a.jsx)("h3",{className:"font-display m-0 text-lg font-bold",children:"Test this route"}),k&&(0,a.jsx)("span",{className:"text-xs text-muted",children:k}),(0,a.jsx)(d.default,{size:"sm",variant:"secondary",icon:"play_arrow",onClick:N,loading:l,disabled:!e||r,"aria-describedby":r?"combo-route-test-disabled-hint":void 0,className:"ms-auto",children:"Run test"}),j>0&&!l&&!r&&!v&&(0,a.jsx)(d.default,{size:"sm",variant:"ghost",icon:"restart_alt",onClick:()=>g(0),"aria-label":"Replay the last run on the route track",children:"Replay"})]}),(0,a.jsx)("p",{className:"m-0 text-xs text-muted",children:"Uses a tiny amount of quota. Runs the real route, so it also advances rotation."}),r&&(0,a.jsx)("p",{id:"combo-route-test-disabled-hint",className:"m-0 text-xs text-warn",children:"Save the route to test it."}),u&&(0,a.jsx)("p",{role:"alert",className:"m-0 text-sm text-err",children:u}),!u&&!o&&!l&&(0,a.jsx)("p",{className:"m-0 text-[13px] text-muted",children:"Send a tiny probe through this route to watch the fallback happen."}),l&&!o&&(0,a.jsx)("p",{role:"status",className:"m-0 text-[13px] text-muted",children:"Probing route…"}),S.length>0&&(0,a.jsx)("ul",{"aria-label":"Probe steps",className:"m-0 flex list-none flex-col gap-1 p-0",children:S.map((e,t)=>{let r=!v&&t===b&&t<j,n=null!=e.status&&e.status>=200&&e.status<300;return(0,a.jsxs)("li",{className:"flex items-center gap-3 text-[13px]",children:[r?(0,a.jsxs)(x.default,{variant:"info",size:"sm",className:"min-w-10 justify-center",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]","aria-hidden":"true",children:"progress_activity"}),(0,a.jsx)("span",{className:"sr-only",children:"Trying…"})]}):(0,a.jsx)(x.default,{variant:n?"ok":"err",size:"sm",className:"min-w-10 justify-center",children:(0,a.jsx)("span",{className:"font-mono",children:e.status??"—"})}),(0,a.jsx)(p.default,{providerId:e.model,size:"sm"}),(0,a.jsx)("span",{className:"min-w-0 truncate font-mono",children:e.model}),(0,a.jsxs)("span",{className:"truncate text-muted",children:[r?"Trying…":`${e.reason} \xb7 ${e.latency}`,e.account?` \xb7 ${e.account}`:"","panel"===e.role?" \xb7 panel":"","judge"===e.role?" \xb7 judge":"","nested"===e.role&&e.via?` \xb7 via ${e.via}`:""]}),!r&&(0,a.jsx)("span",{className:`ms-auto shrink-0 font-semibold ${"answered"===e.state?"text-lime-ink":"text-muted"}`,children:J[e.outcome]?.label??J.skipped.label})]},`${e.model}-${t}`)})}),(0,a.jsx)("p",{"aria-live":"polite",className:"sr-only m-0",children:w.slice(0,v?j:b).map(e=>e.text).join(" ")}),o?.summary&&(v||b>=j)&&(0,a.jsx)("p",{className:"m-0 border-t border-line pt-2.5 text-[13px]",children:(0,a.jsx)("strong",{children:o.summary})})]})}function H({combo:e,strategy:t,weights:r,judgeModel:s,headroom:l,headroomQuotaSource:i,savedModels:o,healthByProvider:c,providerLabelById:m,saving:f,dirty:h,emptyAdapters:p=[],onAddAdapterModel:x,saveError:b,onRename:R,onDelete:A,onSave:T,onDiscard:O,onStrategyChange:q,onWeightSave:F,onJudgeChange:L,onModelsChange:D,activeProviders:U,modelAliases:z}){var W;let B,J,[Q,G]=(0,n.useState)(!1),[X,Z]=(0,n.useState)(e.name),[Y,ee]=(0,n.useState)(""),[et,er]=(0,n.useState)(!1),[ea,en]=(0,n.useState)(!1),[es,el]=(0,n.useState)(!1),[ei,eo]=(0,n.useState)({}),[ed,ec]=(0,n.useState)({}),[eu,em]=(0,n.useState)(""),[ef,eh]=(0,n.useState)([]),ep=(0,n.useRef)([]),ex=e.models||[],eb=JSON.stringify(ex)!==JSON.stringify(o||[]),eg="weighted"===t,ev=(0,v.FR)((0,v.MS)(v.AN,{activationConstraint:{distance:5}}),(0,v.MS)(v.uN,{coordinateGetter:y.JR})),ey=function(e,t=[]){let r=new Map;for(let e of t||[])e&&"string"==typeof e.id&&"string"==typeof e.model&&(r.has(e.model)||r.set(e.model,[]),r.get(e.model).push(e));let a=new Set;for(let e of t||[])e&&"string"==typeof e.id&&a.add(e.id);let n=0;return(e||[]).map(e=>{let t,s=r.get(e);if(s&&s.length>0)return s.shift();do n+=1,t=`step-${n}`;while(a.has(t));return a.add(t),{id:t,model:e}})}(ex,ep.current);ep.current=ey;let ew={};for(let{id:e,model:t}of ey){let a=E(ei[e]);ew[t]=a.ok?a.value:r[t]??1}let ej=eg?(W=ey.map(e=>e.model),J=function(e,t,r){let a=new Map,n=0;for(let l of e||[]){var s;if("string"!=typeof l||a.has(l))continue;let e=(s=r?.[l],C(l,t)*P(s));a.set(l,e),n+=e}return(e||[]).map(e=>{let t=a.get(e)??0;return n>0?Math.round(t/n*1e3)/10:0})}(B=Array.isArray(W)?W:[],ew,l),B.map((e,t)=>{let r=P(l?.[e]),a=C(e,ew);return{base:a,quota:r,quotaSource:i?.[e]||"static",share:J[t]??0,fallbackOnly:0===a,outOfQuota:a>0&&0==C(e,ew)*P(r)}})):[],eN=()=>{let t=M(X);t.ok?(ee(""),G(!1),t.value!==e.name&&R?.(t.value)):ee(t.error)};return(0,a.jsxs)("section",{"aria-label":`Edit combo ${e.name}`,className:"flex min-w-0 flex-1 flex-col gap-5 rounded-[20px] border border-line bg-panel p-5 shadow-card sm:p-7",children:[(0,a.jsx)("span",{"aria-live":"polite",className:"sr-only",children:eu}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,a.jsx)("div",{className:"flex shrink-0 flex-col gap-1",children:Q?(0,a.jsxs)("div",{className:"flex max-w-sm flex-col gap-1",children:[(0,a.jsx)(k.default,{value:X,onChange:e=>{if(Z(e.target.value),e.target.value){let t=M(e.target.value);ee(t.ok?"":t.error)}else ee("")},onKeyDown:t=>{"Enter"===t.key&&eN(),"Escape"===t.key&&(t.preventDefault(),Z(e.name),ee(""),G(!1))},"aria-label":"Combo name",error:Y,autoFocus:!0}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(d.default,{size:"sm",variant:"secondary",onClick:eN,disabled:!!Y||!X.trim(),children:"Apply"}),(0,a.jsx)(d.default,{size:"sm",variant:"ghost",onClick:()=>{Z(e.name),ee(""),G(!1)},children:"Cancel"})]})]}):(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("h2",{className:"text-xs font-semibold tracking-wider text-muted uppercase",children:"Combo"}),(0,a.jsx)(N.default,{icon:"edit",label:`Rename combo ${e.name}`,onClick:()=>{Z(e.name),ee(""),G(!0)},className:"size-8 rounded-md"})]})}),(0,a.jsx)(j.default,{value:`"model": "${e.name}"`,copyValue:e.name,label:"Copy combo model name",className:"w-full min-w-0 sm:w-auto sm:min-w-52 sm:flex-1"}),(0,a.jsxs)("div",{className:"ms-auto flex flex-wrap items-center gap-2",children:[(0,a.jsx)(d.default,{variant:"danger",icon:"delete",onClick:()=>er(!0),children:"Delete"}),(0,a.jsx)(d.default,{variant:"secondary",icon:"undo",disabled:!h||f,onClick:()=>{eo({}),ec({}),O?.()},children:"Discard"}),(0,a.jsx)(d.default,{variant:"primary",icon:"save",loading:f,disabled:!h||f,onClick:T,children:"Save"})]})]}),(0,a.jsxs)("p",{"aria-live":"polite",className:`-mt-2 flex items-center gap-2 text-xs font-medium ${h?"text-warn":"text-muted"}`,children:[(0,a.jsx)("span",{"aria-hidden":"true",className:`size-2 rounded-full ${h?"bg-warn":"bg-subtle"}`}),h?"Unsaved changes":"No changes"]}),b&&(0,a.jsx)("p",{role:"alert",className:"text-sm text-err",children:b}),p.length>0&&(0,a.jsxs)("p",{role:"status",className:"rounded-xl border border-warn bg-warn-bg p-3 text-sm text-warn",children:[p.map(e=>"vision"===e?"Vision":"Audio").join(" and ")," ",`adapter on, but no models. ${g.Hc.slug} tries oc/mimo-v2.5-free; if it can't handle the request, the original route may reject the media.`," ",(0,a.jsx)("button",{type:"button",className:"font-semibold underline underline-offset-2 focus-visible:shadow-focus focus-visible:outline-none",onClick:()=>x?.(p[0]),children:"Add model"})]}),(0,a.jsx)(I,{value:t,onChange:q}),(0,a.jsxs)("div",{className:"flex flex-col",children:[(0,a.jsx)("p",{className:"mb-3 text-xs font-semibold tracking-wider text-muted uppercase",children:"The route"}),0===ex.length?(0,a.jsx)("p",{className:"rounded-xl border border-dashed border-line p-6 text-center text-sm text-muted",children:"No models in this route yet. Add one below."}):(0,a.jsx)(v.Mp,{sensors:ev,collisionDetection:v.fp,onDragEnd:e=>{let{active:t,over:r}=e;if(!r||t.id===r.id)return;let a=ey.findIndex(e=>e.id===t.id),n=ey.findIndex(e=>e.id===r.id);if(-1===a||-1===n)return;let s=ey[a],l=(0,y.be)(ey,a,n).map(e=>e.model);ep.current=(0,y.be)(ey,a,n),D?.(l),em(`Moved ${s.model} to position ${n+1} of ${ey.length}`)},modifiers:[w.FN,w.gj],children:(0,a.jsx)(y.gB,{items:ey.map(e=>e.id),strategy:y._G,children:(0,a.jsx)("ol",{className:"m-0 list-none p-0",children:ey.map(({id:e,model:n},s)=>{let l=n.includes("/")?n.slice(0,n.indexOf("/")):n,i=c?.[l]||{label:"No data",variant:"neutral"},o=ej[s],d=ef[s];return(0,a.jsx)(V,{uid:e,index:s,model:n,providerLabel:m?.[l]||l,role:"round-robin"===t?"In rotation":"weighted"===t?"Weighted":"fusion"===t?"Panelist":0===s?"Primary":"Backup",health:i.label,healthVariant:i.variant,showWeight:eg,weight:ei[e]??String(r[n]??1),weightDetail:o?function(e){if(!e)return null;let t=$[e.quotaSource]||$.static;if(e.fallbackOnly)return"Weight 0 — fallback only: no traffic until the others fail.";if(e.outOfQuota)return`No quota left (${t}) — paused until quota resets.`;let r=Math.round(100*e.quota);return`Weight ${e.base} \xd7 ${r}% quota left (${t}) → about ${e.share}% of traffic.`}(o):void 0,share:o?.share??0,replayState:d?.state,replayReason:d?.reason,weightError:ed[e],onWeightChange:t=>{eo(r=>({...r,[e]:t})),ec(t=>{let{[e]:r,...a}=t;return a});let r=E(t);r.ok&&void 0!==n&&F?.(n,r.value)},onWeightBlur:()=>(e=>{if(!(e in ei))return;let t=ey.find(t=>t.id===e)?.model,a=()=>eo(t=>{let{[e]:r,...a}=t;return a}),n=E(ei[e]);if(!n.ok)return void ec(t=>({...t,[e]:n.error}));if(void 0!==t&&n.value===(r[t]??1)){a(),ec(t=>{let{[e]:r,...a}=t;return a});return}ec(t=>{let{[e]:r,...a}=t;return a}),a(),void 0!==t&&F?.(t,n.value)})(e),onRemove:()=>{let t=new Set(ey.map(e=>e.id).filter(t=>t!==e));eo(e=>_(e,t)),ec(e=>_(e,t)),D?.(ex.filter((e,t)=>t!==s))}},e)})})})}),(0,a.jsxs)("div",{className:"flex gap-3.5",children:[(0,a.jsx)("div",{className:"flex w-8 shrink-0 justify-center","aria-hidden":"true",children:(0,a.jsx)("span",{className:"size-7 rounded-full border-2 border-dashed border-subtle"})}),(0,a.jsx)(d.default,{variant:"ghost",icon:"add",onClick:()=>en(!0),className:"flex-1 justify-start border-dashed text-muted",children:"Add a model to this route"})]}),"fusion"===t&&(0,a.jsxs)("div",{className:"mt-3.5 ms-11 flex items-center gap-3 rounded-xl border border-coral bg-coral-bg p-3.5 sm:p-4",children:[(0,a.jsx)("span",{className:"material-symbols-outlined shrink-0 text-[20px] text-coral-ink","aria-hidden":"true",children:"gavel"}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsxs)("p",{className:"text-sm font-semibold text-text",children:["Judge \xb7"," ",(0,a.jsx)("code",{className:"font-mono",children:s||`Auto — ${ex[0]||"first model"}`})]}),(0,a.jsx)("p",{className:"text-xs text-muted",children:"Reads every panel answer and returns the best one"})]}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[s&&(0,a.jsx)(d.default,{size:"sm",variant:"ghost",onClick:()=>L?.(""),"aria-label":"Reset judge to Auto",children:"Reset to Auto"}),(0,a.jsx)(d.default,{size:"sm",variant:"secondary",onClick:()=>el(!0),children:"Change"})]})]})]}),ea&&(0,a.jsx)(S.default,{isOpen:ea,onClose:()=>en(!1),onSelect:e=>{e?.value&&!ex.includes(e.value)&&D?.([...ex,e.value])},onDeselect:e=>{e?.value&&D?.(ex.filter(t=>t!==e.value))},activeProviders:U,modelAliases:z,title:"Add model to route",addedModelValues:ex,closeOnSelect:!1}),es&&(0,a.jsx)(S.default,{isOpen:es,onClose:()=>el(!1),onSelect:e=>{L?.(e?.value||""),el(!1)},activeProviders:U,modelAliases:z,title:"Select judge model",addedModelValues:s?[s]:[],closeOnSelect:!0}),(0,a.jsx)(u.ConfirmDialog,{isOpen:et,onClose:()=>er(!1),onConfirm:()=>{er(!1),A?.()},title:"Delete combo",message:`Delete combo "${e.name}"? This cannot be undone.`,confirmText:"Delete",variant:"danger"}),(0,a.jsx)(K,{comboId:e.id,models:ex,disabled:eb,onTrackStatesChange:eh},ex.join("\n"))]})}K.propTypes={comboId:h().string,models:h().arrayOf(h().string),disabled:h().bool,onTrackStatesChange:h().func},H.propTypes={combo:h().shape({id:h().string.isRequired,name:h().string.isRequired,models:h().arrayOf(h().string)}).isRequired,strategy:h().string.isRequired,weights:h().object,judgeModel:h().string,headroom:h().objectOf(h().number),headroomQuotaSource:h().objectOf(h().string),savedModels:h().arrayOf(h().string),healthByProvider:h().object,providerLabelById:h().object,saving:h().bool,dirty:h().bool,emptyAdapters:h().arrayOf(h().string),onAddAdapterModel:h().func,saveError:h().string,onRename:h().func,onDelete:h().func,onSave:h().func,onDiscard:h().func,onStrategyChange:h().func,onWeightSave:h().func,onJudgeChange:h().func,onModelsChange:h().func,activeProviders:h().array,modelAliases:h().object};var Q=r(98542),G=r(29366);let X=[{key:"vision",label:"Vision adapter",short:"Vision",icon:"visibility",desc:"Text-only models get eyes: images are described by a vision model before the request goes out."},{key:"audioInput",label:"Audio adapter",short:"Audio",icon:"graphic_eq",desc:"Text-only models get ears: audio clips are transcribed by an audio model before the request goes out."}];function Z({capacityAdapter:e={},activeCapForModal:t,onActiveCapChange:r,onChange:n,activeProviders:s=[],getCaps:l}){let i=F(e),o=(t,r)=>{let a={...e[t]||{enabled:!0,roundRobin:!1,models:[]},...r};n?.({...e,[t]:a})},c=(t,r,a)=>{let n=e[t]||{enabled:!0,roundRobin:!1,models:[]},s=Array.isArray(n.models)?[...n.models]:[],l=r+a;l<0||l>=s.length||([s[r],s[l]]=[s[l],s[r]],o(t,{models:s}))},u=X.find(e=>e.key===t);return(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[X.map(t=>{let n=e[t.key]||{enabled:!0,roundRobin:!1,models:[]},s=!1!==n.enabled,u=!!n.roundRobin,m=Array.isArray(n.models)?n.models:[];return(0,a.jsxs)("section",{"aria-label":t.label,className:`flex flex-col gap-3 rounded-2xl border border-dashed border-line bg-panel p-4 transition-opacity ${s?"opacity-100":"opacity-60"}`,children:[(0,a.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,a.jsx)("span",{className:"flex size-7 shrink-0 items-center justify-center rounded-lg bg-sky-bg text-sky","aria-hidden":"true",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:t.icon})}),(0,a.jsx)("span",{className:"min-w-0 flex-1 font-display text-sm font-semibold text-text",children:t.label}),(0,a.jsx)(Q.default,{size:"sm",checked:s,onChange:e=>o(t.key,{enabled:e}),"aria-label":`${t.label} enabled`})]}),(0,a.jsx)("p",{className:"text-xs text-muted leading-relaxed",children:t.desc}),(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2 pt-1 border-t border-line/60",children:[(0,a.jsx)("span",{className:"flex items-center gap-2 text-xs text-muted",children:(0,a.jsx)(Q.default,{size:"sm",checked:u,disabled:!s,onChange:e=>o(t.key,{roundRobin:e}),label:"Round robin"})}),(0,a.jsx)(d.default,{variant:"secondary",size:"sm",icon:"add",disabled:!s,onClick:()=>r?.(t.key),className:"h-8 border-dashed px-2.5 text-xs",children:"Add model"})]}),i.includes(t.key)&&(0,a.jsxs)("p",{role:"status",className:"rounded-xl border border-warn bg-warn-bg p-3 text-xs text-warn",children:[`On, but no models. ${g.Hc.slug} tries oc/mimo-v2.5-free; if it can't handle the request, the original route may reject the media.`," ",(0,a.jsx)("button",{type:"button",onClick:()=>r?.(t.key),className:"font-semibold underline underline-offset-2 focus-visible:shadow-focus focus-visible:outline-none",children:"Add model"})]}),m.length>0?(0,a.jsx)("ul",{"aria-label":`${t.label} model pool`,className:"flex flex-col gap-1.5 pt-1",children:m.map((r,n)=>(0,a.jsxs)("li",{className:"group/chip flex min-w-0 items-center gap-1 rounded-md border border-line bg-raised ps-2 pe-1 py-0.5 font-mono text-xs text-text [&>*:not(:first-child)]:shrink-0",children:[(0,a.jsx)("span",{className:"min-w-0 flex-1 truncate",title:r,children:r}),(0,a.jsx)(G.default,{caps:l?.(r)}),(0,a.jsx)("button",{type:"button",disabled:!s||0===n,onClick:()=>c(t.key,n,-1),"aria-label":`Move ${r} up`,title:"Move up",className:"p-0.5 text-muted hover:text-coral disabled:opacity-20",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[13px]","aria-hidden":"true",children:"arrow_upward"})}),(0,a.jsx)("button",{type:"button",disabled:!s||n===m.length-1,onClick:()=>c(t.key,n,1),"aria-label":`Move ${r} down`,title:"Move down",className:"p-0.5 text-muted hover:text-coral disabled:opacity-20",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[13px]","aria-hidden":"true",children:"arrow_downward"})}),(0,a.jsx)("button",{type:"button",disabled:!s,onClick:()=>{var r;let a;return r=t.key,a=e[r]||{enabled:!0,roundRobin:!1,models:[]},void o(r,{models:(Array.isArray(a.models)?a.models:[]).filter((e,t)=>t!==n)})},"aria-label":`Remove ${r} from ${t.label}`,title:"Remove",className:"p-0.5 text-muted hover:text-err disabled:opacity-20",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[13px]","aria-hidden":"true",children:"close"})})]},`${r}-${n}`))}):(0,a.jsx)("span",{className:"text-xs italic text-muted",children:"No models in pool"})]},t.key)}),t&&u&&(0,a.jsx)(S.default,{isOpen:!0,onClose:()=>r?.(null),onSelect:r=>((t,r)=>{if(!r?.value)return;let a=e[t]||{enabled:!0,roundRobin:!1,models:[]},n=Array.isArray(a.models)?a.models:[];n.includes(r.value)||o(t,{models:[...n,r.value]})})(t,r),activeProviders:s,title:`Add ${u.short} Model`,capFilter:u.key,addedModelValues:e[t]?.models||[],closeOnSelect:!1})]})}async function Y({putModels:e,patchStrategy:t,onModelsCommitted:r,onSaved:a}){let n=await e();return r?.(n),await t(),a?.(n),n}Z.propTypes={capacityAdapter:h().object,activeCapForModal:h().string,onActiveCapChange:h().func,onChange:h().func.isRequired,activeProviders:h().array,getCaps:h().func};var ee=r(42755);let et={enabled:!0,roundRobin:!1,models:[]};function er(e,t,r="replace"){let a,n,s,l,i,o=`${window.location.search}${window.location.hash}`,d=(s=new URLSearchParams(-1===(n=(a=o||"").indexOf("#"))?a:a.slice(0,n)),l=-1===n?"":a.slice(n),void 0!==t.combo&&(t.combo?s.set("combo",t.combo):s.delete("combo")),void 0!==t.create&&(t.create?s.set("create","1"):s.delete("create")),i=s.toString(),`${i?`/dashboard/combos?${i}`:"/dashboard/combos"}${l}`);d!==`${window.location.pathname}${o}`&&("push"===r?e.push(d,{scroll:!1}):e.replace(d,{scroll:!1}))}function ea(e,t,r){let a=Array.isArray(t)?t:[];return e&&a.some(t=>t.id===e)?e:r&&a.some(e=>e.id===r)?r:a[0]?.id||null}function en(e,t){return e?.[t]?.fallbackStrategy||"fallback"}function es(){var e;let[t,r]=(0,n.useState)([]),[f,h]=(0,n.useState)(!0),[p,x]=(0,n.useState)(""),[g,v]=(0,n.useState)(!1),[y,w]=(0,n.useState)(null),[j,N]=(0,n.useState)([]),[k,S]=(0,n.useState)({}),[C,P]=(0,n.useState)({vision:{...et},audioInput:{...et}}),[$,T]=(0,n.useState)({}),[E,O]=(0,n.useState)({}),[M,_]=(0,n.useState)(null),[D,I]=(0,n.useState)("fallback"),[U,z]=(0,n.useState)({}),[W,V]=(0,n.useState)(""),[B,J]=(0,n.useState)({}),[K,Q]=(0,n.useState)({}),[G,X]=(0,n.useState)(!1),[es,el]=(0,n.useState)(""),[ei,eo]=(0,n.useState)(""),[ed,ec]=(0,n.useState)(null),[eu,em]=(0,n.useState)(""),[ef,eh]=(0,n.useState)(null),{getCaps:ep}=(0,m.y)(),ex=(0,n.useRef)(k),eb=(0,n.useRef)(Promise.resolve()),eg=(0,n.useRef)(0),ev=(0,n.useRef)(null);(0,n.useEffect)(()=>{ex.current=k},[k]);let ey=(0,l.useSearchParams)(),ew=(0,l.useRouter)(),ej=ey?.toString()??"",eN=(e,t)=>er(ew,{combo:e},t),ek=new URLSearchParams(ej||"").get("combo")||null,eS="1"===new URLSearchParams(ej||"").get("create"),eC=t.some(e=>e.id===ek)?ek:null,eP=(0,n.useRef)(eN);eP.current=eN;let e$=(0,n.useRef)(eC||y);eC&&(e$.current=eC);let eR=ea(null,t,e$.current??y),[eA,eT]=(0,n.useState)(null),eE=eA&&t.some(e=>e.id===eA)?eA:eC||eR,eO=(0,n.useRef)(null),eM=(0,n.useRef)(!1),eq=(0,n.useRef)(null);(0,n.useEffect)(()=>{f||p||!t.length||eA||eT(eC||eR)},[f,p,t.length,eA,eC,eR]),(0,n.useEffect)(()=>{if(!f&&!p&&!eS){if(ek===eE){eq.current=null;return}if(eq.current!==eE){if(!eC)return void eP.current(eE,"replace");if(!eM.current)return void eT(eC);eP.current(eE,"replace"),eO.current?.request(()=>{eq.current=eC,ev.current=eC,eg.current+=1,eT(eC),eP.current(eC,"push")})}}},[ek,eC,eE,eS,f,p]),(0,n.useEffect)(()=>{eS?eM.current&&!g?(er(ew,{create:!1}),eO.current?.request(()=>{v(!0),er(ew,{create:!0})})):v(!0):v(!1)},[eS,ew,g]);let eF=e=>{e!==eE&&eV.requestNavigation(()=>{eq.current=e,ev.current=e,eg.current+=1,eT(e),w(e),eN(e,"push")})},eL=()=>eV.requestNavigation(()=>{v(!0),er(ew,{create:!0})}),e_=(0,n.useCallback)(async()=>{x("");try{let[t,a,n,s,l]=await Promise.all([fetch("/api/combos"),fetch("/api/providers"),fetch("/api/settings"),fetch("/api/usage/stats?period=today"),fetch("/api/models/alias")]);if(!t.ok)throw Error(`combos ${t.status}`);let i=await t.json(),o=a.ok?await a.json():{},d=n.ok?await n.json():{},c=s.ok?await s.json():{},u=l.ok?await l.json():{},m=(i.combos||[]).filter(e=>!e.kind||"llm"===e.kind);r(m),w(e=>ea(null,m,e)),N(o.connections||[]),S(d.comboStrategies||{});let f=d.capacityAdapter||{},h={};for(let t of q){var e;h[t]=(e=f[t],Array.isArray(e)?{enabled:!0,roundRobin:!1,models:e.map(e=>e?.model||e).filter(Boolean)}:e&&"object"==typeof e?{enabled:!1!==e.enabled,roundRobin:!!e.roundRobin,models:Array.isArray(e.models)?e.models.filter(Boolean):[]}:{...et})}P(h);let p=c.byModel||{},x={};for(let e of m)x[e.id]=function(e,t){if(!t||"object"!=typeof t)return 0;let r="string"==typeof e?e:e?.name,a=Array.isArray(e?.models)?e.models:[],n=0;for(let[e,s]of Object.entries(t)){let t=s?.rawModel||String(e).split(" (")[0];if(t===r)n+=s?.requests||0;else if(a.length>0)for(let e of a){let r=e.includes("/")?e.slice(e.indexOf("/")+1):e;if(t===e||t===r){n+=s?.requests||0;break}}}return n}(e,p);T(x),O(u.aliases||{})}catch(e){x(e?.message||"Failed to load combos")}finally{h(!1)}},[]);(0,n.useEffect)(()=>{e_()},[e_]);let eD=t.find(e=>e.id===eE)||null,eI=eD?en(k,eD.name):"fallback",eU=null!=eD&&null!=M?L({models:M,strategy:D,weights:U,judge:W}):null,ez=null!=eD?L({models:eD.models||[],strategy:eI,weights:k[eD.name]?.weights||{},judge:k[eD.name]?.judgeModel||""}):null,eW=!!eU&&JSON.stringify((e={saved:ez,draft:eU}).saved)!==JSON.stringify(e.draft),eV=function(e,t){let r=(0,l.useRouter)(),[a,s]=(0,n.useState)(null),i=(0,n.useRef)(e);i.current=e;let o=(0,n.useRef)(t);o.current=t;let d=(0,n.useRef)(!1),c=(0,n.useRef)({armed:!1,pendingForward:null}),u=(0,n.useRef)(!1),m=(0,n.useRef)(()=>window.setTimeout(()=>window.history.back(),0)),f=e=>{i.current?s(()=>e):e()},h=(0,n.useCallback)(e=>(function(e,t,r){if(e.pendingForward){e.pendingForward=r;return}e.armed?(e.armed=!1,e.pendingForward=r,t()):r()})(c.current,()=>window.history.back(),e),[]);return(0,n.useEffect)(()=>{d.current=!!a},[a]),(0,n.useEffect)(()=>{!e||a||c.current.armed||(History.prototype.pushState.call(window.history,window.history.state,"",window.location.href),c.current.armed=!0)},[e,a]),(0,n.useEffect)(()=>{let e=e=>{i.current&&(e.preventDefault(),e.returnValue="")},t=e=>{if(!i.current)return;let t=e.target instanceof Element?e.target.closest("a[href]"):null;(function(e,t,r,a){let n;if(!e||!t?.href||e.defaultPrevented||0!==e.button||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||"_blank"===t.target||t.hasDownload)return!1;try{n=new URL(t.href,r)}catch{return!1}return n.href!==r&&n.origin===a&&(n.pathname!==new URL(r).pathname||n.search!==new URL(r).search||n.hash===new URL(r).hash)})(e,{href:t?.href,target:t?.target,hasDownload:t?.hasAttribute("download")},window.location.href,window.location.origin)&&(e.preventDefault(),e.stopPropagation(),s(()=>()=>{o.current?.();let e=new URL(t.href,window.location.href);h(()=>r.push(`${e.pathname}${e.search}${e.hash}`))}))},a=()=>{var e;let t,r=(t=(e=c.current).pendingForward,e.pendingForward=null,t);if(r)return void r();if(u.current){u.current=!1;return}if(c.current.armed||d.current){if(c.current.armed=!1,!i.current){d.current||(u.current=!0,m.current());return}s(()=>()=>{o.current?.(),u.current=!0,m.current()})}};return window.addEventListener("beforeunload",e),document.addEventListener("click",t,!0),window.addEventListener("popstate",a),()=>{window.removeEventListener("beforeunload",e),document.removeEventListener("click",t,!0),window.removeEventListener("popstate",a)}},[r,h]),{request:f,requestNavigation:(e,t)=>{if(!t||c.current.pendingForward||new URL(t,window.location.href).href!==window.location.href){var r;r=i.current,r?f(()=>{(()=>o.current?.())(),(()=>h(e))()}):(()=>h(e))()}},pending:!!a,confirm:()=>{s(null),a?.()},cancel:()=>s(null)}}(eW,()=>{eD&&(eM.current=!1,eK.current=eD.id,eH(eD,ex.current))});eO.current=eV;let{registerRouteGuard:eB}=(0,ee.useCommandPalette)()||{};(0,n.useEffect)(()=>{if(eB)return eB(eV)},[eB,eV]),eM.current=eW;let eJ=F(C),eK=(0,n.useRef)(null),eH=(e,t)=>{(eg.current+=1,e)?(_(e.models||[]),I(en(t,e.name)),z(t[e.name]?.weights||{}),V(t[e.name]?.judgeModel||""),el("")):_(null)};(0,n.useEffect)(()=>{eD?.id!==eK.current&&(eK.current=eD?.id||null,eH(eD,ex.current))},[eD?.id]),ev.current=eE;let eQ=eD?.id;(0,n.useEffect)(()=>{if(!eQ||"weighted"!==D||!M?.length){J({}),Q({});return}let e=!1;return fetch(`/api/combos/${eQ}/headroom`).then(e=>e.ok?e.json():{}).then(t=>{e||(J(t.headroom||{}),Q(Object.fromEntries(Object.entries(t.quotaByModel||{}).map(([e,t])=>[e,t?.source||"static"]))))}).catch(()=>{}),()=>{e=!0}},[eQ,D,M]);let eG=async e=>{P(e),eo("");try{let t=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({capacityAdapter:e})});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error||`adapter save failed (${t.status})`)}}catch(e){P(C),eo(e?.message||"Failed to save adapter")}},eX=async e=>{let t=await fetch("/api/combos",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw Error((await t.json().catch(()=>({}))).error||"Failed to create combo");let r=await t.json().catch(()=>null);await e_(),(0,s.q0)(),v(!1),r?.id?(w(r.id),er(ew,{combo:r.id,create:!1},"push")):er(ew,{create:!1})},eZ=eD&&k[eD.name]||{},eY=function(e){let t={};for(let r of e||[])t[r.provider]||(t[r.provider]=[]),t[r.provider].push(r);let r={};for(let[e,a]of Object.entries(t)){let t=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"},n=a.map(t);if(a.length>0&&a.every(e=>!1===e.isActive))r[e]={label:"Paused",variant:"neutral"};else if(n.some(e=>"active"===e||"success"===e))r[e]={label:"Healthy",variant:"ok"};else if(n.some(e=>"error"===e||"expired"===e||"unavailable"===e)){let n=function(e){if(!e)return null;if("upstream_rate_limited"===e.lastErrorType)return"429";if("upstream_unavailable"===e.lastErrorType)return"5XX";if("upstream_auth_error"===e.lastErrorType||"auth_missing"===e.lastErrorType||"token_refresh_failed"===e.lastErrorType||"token_expired"===e.lastErrorType)return"Auth error";let t=Number(e.errorCode);return Number.isFinite(t)&&t>=400?String(t):"Error"}(a.find(e=>"error"===t(e)||"expired"===t(e)||"unavailable"===t(e)));r[e]={label:n||"Error",variant:"err"}}else r[e]={label:"No data",variant:"neutral"}}return r}(j),e0=function(e){let t={};for(let r of e||[])r.provider&&!t[r.provider]&&(t[r.provider]=r.name||r.provider);return t}(j),e1=async()=>{if(!eD||G)return;let e=eD.id,t=eD.name,a=eg.current,n=[...M||[]],s={fallbackStrategy:D};"weighted"===D&&(s.weights={...U}),"fusion"===D&&W&&(s.judgeModel=W),"fusion"===D&&!W&&eZ.judgeModel&&(s.judgeModel=""),X(!0),el(""),em("");try{await Y({putModels:async()=>{let t=await fetch(`/api/combos/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({models:n})});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error||"Failed to save route")}let r=await t.json().catch(()=>null);return{id:r?.id||e,models:r?.models||n}},patchStrategy:async()=>{let e,r=await (e=eb.current.then(async()=>{let e=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({comboStrategyPatch:{name:t,patch:s}})});if(!e.ok)throw Error((await e.json().catch(()=>({}))).error||`Save failed (${e.status})`);let r=ex.current[t]||{},a={...r,...s};s.weights&&(a.weights={...r.weights,...s.weights});let n={...ex.current};return a.fallbackStrategy?n[t]=a:delete n[t],ex.current=n,S(n),{ok:!0}}).catch(e=>({ok:!1,error:e?.message||"Save failed — network error"})),eb.current=e,e);if(!r?.ok)throw Error(r?.error||"Failed to save strategy")},onModelsCommitted:e=>{e?.id&&r(t=>(t||[]).map(t=>t.id===e.id?{...t,models:[...e.models||[]]}:t))},onSaved:r=>{var n,s;n=ev.current,s=eg.current,e===n&&a===s&&(eK.current=e,eH({id:e,name:t,models:r.models},ex.current)),ev.current===e&&em("Saved")}})}catch(t){ev.current===e&&(em("Couldn't save"),el(t?.message||"Failed to save"))}finally{X(!1)}},e5=async e=>{if(eD&&e!==eD.name){X(!0),el("");try{let t=await fetch(`/api/combos/${eD.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:e})});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error||"Failed to rename combo")}await e_()}catch(e){el(e?.message||"Failed to rename")}finally{X(!1)}}};return f?(0,a.jsxs)("div",{className:"flex flex-col gap-4",role:"status","aria-label":"Loading combos",children:[(0,a.jsx)(i.CardSkeleton,{}),(0,a.jsx)(i.CardSkeleton,{})]}):p&&0===t.length?(0,a.jsx)(o.default,{icon:"error",title:"Couldn't load combos",body:p,action:(0,a.jsx)(d.default,{icon:"refresh",onClick:()=>{h(!0),e_()},children:"Retry"})}):(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-6",children:[(0,a.jsx)("span",{"aria-live":"polite",className:"sr-only",children:eu}),0===t.length?(0,a.jsx)(o.default,{icon:"layers",title:"No combos yet",body:"Create model combos with fallback support.",action:(0,a.jsx)(d.default,{icon:"add",onClick:eL,children:"New combo"})}):(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-6 lg:flex-row lg:items-start",children:[(0,a.jsxs)("div",{className:"flex w-full min-w-0 shrink-0 flex-col gap-3 lg:w-80",children:[(0,a.jsx)(d.default,{variant:"secondary",icon:"add",fullWidth:!0,onClick:eL,children:"New combo"}),(0,a.jsx)("ul",{"aria-label":"Combos",className:"m-0 flex list-none flex-col gap-3 p-0",children:t.map(e=>{let t=en(k,e.name);return(0,a.jsx)("li",{children:(0,a.jsx)(b,{combo:e,strategy:t,strategyLabel:R.find(e=>e.id===t)?.label||"Fallback",strategyVariant:A[t]||"brand",usageToday:$[e.id]||0,selected:e.id===eE,onSelect:eF})},e.id)})}),eJ.length>0&&(0,a.jsxs)("p",{role:"status",className:"text-xs text-warn",children:["Capability adapter on, empty pool:"," ",eJ.map(e=>"vision"===e?"vision":"audio").join(", "),". Pick a pool below to add a model."]}),(0,a.jsxs)("section",{"aria-label":"Capability adapter",className:"flex flex-col gap-3",children:[(0,a.jsx)("h2",{className:"text-xs font-semibold tracking-wider text-muted uppercase",children:"Capability adapter"}),(0,a.jsx)(Z,{capacityAdapter:C,activeCapForModal:ed,onActiveCapChange:ec,onChange:eG,activeProviders:j,getCaps:ep}),ei&&(0,a.jsx)("p",{role:"alert",className:"text-xs text-err",children:ei})]})]}),eD&&null!==M&&(0,a.jsx)(H,{combo:{...eD,models:M},strategy:D,weights:U,judgeModel:W,headroom:B,headroomQuotaSource:K,savedModels:eD.models||[],healthByProvider:eY,providerLabelById:e0,saving:G,dirty:eW,emptyAdapters:eJ,onAddAdapterModel:ec,saveError:es,onRename:e5,onDelete:()=>{if(!eD)return;let{id:e,name:a}=eD;eh({title:"Delete combo",message:`Delete combo "${a}"? This cannot be undone.`,onConfirm:async()=>{eh(null);try{let n=await fetch(`/api/combos/${e}`,{method:"DELETE"});if(!n.ok)throw Error(`delete ${n.status}`);S(e=>{if(!Object.hasOwn(e,a))return e;let t={...e};return delete t[a],ex.current=t,t});let l=t.filter(t=>t.id!==e),i=ea(null,l,y===e?null:y);eE===e&&eN(i,"replace"),r(l),w(i),(0,s.q0)()}catch(e){el(e?.message||"Failed to delete combo")}}})},onSave:e1,onDiscard:()=>eH(eD,ex.current),onStrategyChange:e=>{eg.current+=1,I(e),el("")},onWeightSave:(e,t)=>{eg.current+=1,z(r=>({...r,[e]:t})),el("")},onJudgeChange:e=>{eg.current+=1,V(e),el("")},onModelsChange:e=>{eg.current+=1,_(e),el("")},activeProviders:j,modelAliases:E},eD.id)]}),g&&(0,a.jsx)(c.default,{isOpen:g,onClose:()=>{v(!1),er(ew,{create:!1})},onSave:eX,activeProviders:j},"create"),(0,a.jsx)(u.ConfirmDialog,{isOpen:eV.pending,onClose:eV.cancel,onConfirm:eV.confirm,title:"Discard unsaved changes?",message:"This combo has route changes that aren't saved. Leave without saving them?",confirmText:"Discard changes",cancelText:"Keep editing"}),(0,a.jsx)(u.ConfirmModal,{isOpen:!!ef,onClose:()=>eh(null),onConfirm:ef?.onConfirm,title:ef?.title||"Confirm",message:ef?.message,variant:"danger"})]})}},51825:(e,t,r)=>{"use strict";r.d(t,{default:()=>l});var a=r(95155),n=r(84588);let s={mode:{label:"Mode",format:e=>e},defaultModel:{label:"Model",format:e=>e,mono:!0},baseUrl:{label:"Endpoint",format:e=>e,isLink:!0,mono:!0},costPerQuery:{label:"Cost / call",format:e=>0===e?"Free":`$${e.toFixed(4)}`},pricingUrl:{label:"Pricing",format:()=>"View pricing",isLink:!0},freeTier:{label:"Free tier",format:e=>e},freeMonthlyQuota:{label:"Free quota",format:e=>0===e?"—":e>=999999?"Unlimited":`${e.toLocaleString()} / mo`},searchTypes:{label:"Types",format:e=>e.join(", ")},formats:{label:"Formats",format:e=>e.join(", ")},maxMaxResults:{label:"Max results",format:e=>e},maxCharacters:{label:"Max chars",format:e=>e.toLocaleString()}};function l({config:e,provider:t,title:r="Provider Info"}){if(!e)return null;let i=Object.entries(s).filter(([t])=>void 0!==e[t]&&null!==e[t]&&""!==e[t]).map(([t,r])=>({key:t,label:r.label,value:r.format(e[t]),isLink:r.isLink,mono:r.mono,raw:e[t]})),o=t?.notice?.apiKeyUrl||t?.website,d=t?.notice?.text;return(0,a.jsxs)(n.default,{children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,a.jsx)("h2",{className:"text-lg font-semibold",children:r}),o&&(0,a.jsxs)("a",{href:o,target:"_blank",rel:"noopener noreferrer",className:"text-xs text-coral-ink hover:underline inline-flex items-center gap-1",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",children:"open_in_new"}),"Get API key"]})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-x-6 gap-y-2",children:[i.map(e=>(0,a.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,a.jsx)("span",{className:"text-xs text-muted w-28 shrink-0",children:e.label}),e.isLink?(0,a.jsx)("a",{href:e.raw,target:"_blank",rel:"noopener noreferrer",className:`text-sm text-coral-ink hover:underline truncate ${e.mono?"font-mono":""}`,children:e.value}):(0,a.jsx)("span",{className:`text-sm text-text truncate ${e.mono?"font-mono":""}`,children:e.value})]},e.key)),d&&(0,a.jsxs)("div",{className:"flex items-start gap-3 min-w-0 sm:col-span-2",children:[(0,a.jsx)("span",{className:"text-xs text-muted w-28 shrink-0 mt-0.5",children:"Notice"}),(0,a.jsx)("span",{className:"text-sm text-text leading-relaxed",children:d})]})]})]})}},64371:(e,t,r)=>{"use strict";r.d(t,{default:()=>u});var a=r(95155),n=r(14051),s=r.n(n),l=r(12115),i=r(11910),o=r(15729),d=r(31474),c=r(35591);function u({value:e,onChange:t,ariaLabel:r,placeholder:n,id:s,className:m,inputClassName:f}){let h=(0,l.useRef)(null);return(0,l.useEffect)(()=>{let e=e=>{let t;if(t=(0,c.eS)(e,{inCodeEditor:!!e?.target?.closest?.(".monaco-editor")}),e?.key!=="/"||e.metaKey||e.ctrlKey||e.altKey||t.defaultPrevented||t.isComposing||t.inEditable||t.inCodeEditor)return;let r=h.current;r&&(e.preventDefault(),r.focus(),r.select())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[h]),(0,a.jsxs)("div",{className:(0,d.cn)("relative",m),children:[(0,a.jsx)(i.default,{ref:h,id:s,type:"search",icon:"search",value:e,onChange:t,placeholder:n,"aria-label":r,inputClassName:(0,d.cn)("min-h-10 sm:pe-10",f)}),!e&&(0,a.jsx)("span",{className:"pointer-events-none absolute inset-y-0 end-3 hidden items-center sm:flex","aria-hidden":"true",children:(0,a.jsx)(o.default,{children:"/"})})]})}u.propTypes={value:s().string.isRequired,onChange:s().func.isRequired,ariaLabel:s().string.isRequired,placeholder:s().string,id:s().string,className:s().string,inputClassName:s().string}},84680:(e,t,r)=>{"use strict";r.d(t,{PM:()=>a.PM,Sj:()=>a.Sj,Vy:()=>a.Vy,fF:()=>a.fF,sl:()=>a.sl,vL:()=>a.vL,y$:()=>a.y$,zM:()=>a.zM});var a=r(44923)},86465:(e,t,r)=>{"use strict";r.d(t,{default:()=>l});var a=r(95155),n=r(14051),s=r.n(n);function l({model:e,className:t}){return(0,a.jsx)("code",{className:`inline-flex max-w-full items-center truncate rounded-md border border-line bg-raised px-2 py-0.5 font-mono text-xs text-muted${t?` ${t}`:""}`,children:e})}l.propTypes={model:s().string.isRequired,className:s().string}},96748:(e,t,r)=>{"use strict";r.d(t,{default:()=>m});var a=r(95155),n=r(12115),s=r(14051),l=r.n(s),i=r(81127),o=r(11910),d=r(92542),c=r(56061);let u="https://api.openai.com/v1";function m({isOpen:e,onClose:t,onCreated:r,onSaved:s,node:l}){let f=!!l,[h,p]=(0,n.useState)({name:"",prefix:"",baseUrl:u}),[x,b]=(0,n.useState)(!1),[g,v]=(0,n.useState)(""),[y,w]=(0,n.useState)(""),[j,N]=(0,n.useState)(!1),[k,S]=(0,n.useState)(null);(0,n.useEffect)(()=>{e&&(S(null),v(""),w(""),f?p({name:l.name||"",prefix:l.prefix||"",baseUrl:l.baseUrl||u}):p({name:"",prefix:"",baseUrl:u}))},[e,f,l]);let C=async()=>{if(h.name.trim()&&h.prefix.trim()&&h.baseUrl.trim()){b(!0);try{let e=f?`/api/provider-nodes/${l.id}`:"/api/provider-nodes",t=f?"PUT":"POST",a={name:h.name,prefix:h.prefix,baseUrl:h.baseUrl};f||(a.type="custom-embedding");let n=await fetch(e,{method:t,headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),i=await n.json();n.ok&&(f?s?.(i.node):r?.(i.node))}catch(e){console.log("Error saving custom embedding node:",e)}finally{b(!1)}}},P=async()=>{N(!0);try{let e=await fetch("/api/provider-nodes/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:h.baseUrl,apiKey:g,type:"custom-embedding",modelId:y.trim()||void 0})}),t=await e.json();S(t)}catch{S({valid:!1,error:"Network error"})}finally{N(!1)}};return(0,a.jsx)(i.default,{isOpen:e,title:f?"Edit Custom Embedding":"Add Custom Embedding",onClose:t,children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsx)(o.default,{label:"Name",value:h.name,onChange:e=>p({...h,name:e.target.value}),placeholder:"Voyage AI",hint:"Required. A friendly label for this embedding provider."}),(0,a.jsx)(o.default,{label:"Prefix",value:h.prefix,onChange:e=>p({...h,prefix:e.target.value}),placeholder:"voyage",hint:"Required. Used as the provider prefix for model IDs (e.g. voyage/voyage-3)."}),(0,a.jsx)(o.default,{label:"Base URL",value:h.baseUrl,onChange:e=>p({...h,baseUrl:e.target.value}),placeholder:"https://api.voyageai.com/v1",hint:"Most embedding APIs are OpenAI-compatible: Voyage, Cohere, Jina, Mistral, Together..."}),(0,a.jsx)(o.default,{label:"API key (for check)",type:"password",value:g,onChange:e=>v(e.target.value)}),(0,a.jsx)(o.default,{label:"Model ID (for check)",value:y,onChange:e=>w(e.target.value),placeholder:"e.g. voyage-3, embed-english-v3.0, text-embedding-3-small",hint:"Required for validation. Will send a test embeddings request."}),(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)(d.default,{onClick:P,disabled:!g||!y.trim()||j||!h.baseUrl.trim(),variant:"secondary",children:j?"Checking...":"Check"}),(()=>{if(!k)return null;let{valid:e,error:t,dimensions:r}=k;return e?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(c.default,{variant:"success",children:"Valid"}),r&&(0,a.jsxs)("span",{className:"text-sm text-muted",children:[r," dims"]})]}):(0,a.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,a.jsx)(c.default,{variant:"error",children:"Invalid"}),t&&(0,a.jsx)("span",{className:"text-sm text-err",children:t})]})})()]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(d.default,{onClick:C,fullWidth:!0,disabled:!h.name.trim()||!h.prefix.trim()||!h.baseUrl.trim()||x,children:x?f?"Saving...":"Creating...":f?"Save":"Create"}),(0,a.jsx)(d.default,{onClick:t,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})})}m.propTypes={isOpen:l().bool.isRequired,onClose:l().func.isRequired,onCreated:l().func,onSaved:l().func,node:l().shape({id:l().string,name:l().string,prefix:l().string,baseUrl:l().string})}},97556:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>u});var a=r(95155),n=r(12115),s=r(14051),l=r.n(s),i=r(9233),o=r(28745),d=r(81127),c=r(77671);function u({isOpen:e,onClose:t}){let[r,s]=(0,n.useState)(""),[l,m]=(0,n.useState)(!1),[f,h]=(0,n.useState)("");return(0,n.useEffect)(()=>{e&&!r&&(m(!0),h(""),fetch(o.Nu.changelogUrl).then(e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);return e.text()}).then(e=>s(i.xI.parse(e))).catch(e=>h(e.message||"Failed to load")).finally(()=>m(!1)))},[e,r]),(0,a.jsxs)(d.default,{isOpen:e,onClose:t,title:"Change log",size:"full",children:[(0,a.jsxs)("div",{"aria-live":"polite",children:[l&&(0,a.jsx)(c.LoadingState,{lines:6,label:"Loading changelog",className:"py-4"}),f&&(0,a.jsxs)("p",{role:"alert",className:"py-4 text-err",children:["Failed to load changelog: ",f]})]}),!l&&!f&&r&&(0,a.jsx)("div",{className:"changelog-body text-text",dangerouslySetInnerHTML:{__html:r}})]})}i.xI.setOptions({gfm:!0,breaks:!0}),u.propTypes={isOpen:l().bool.isRequired,onClose:l().func.isRequired}}},e=>{e.O(0,[1610,4070,9233,6474,9671,4685,2903,7899,1863,5014,8105,198,7505,4588,9284,4321,3343,2577,1039,8441,3794,7358],()=>e(e.s=4086)),_N_E=e.O()}]);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[712],{1934:(e,t,r)=>{"use strict";r.d(t,{v:()=>a});var n=r(12115);let s=e=>{let t,r=new Set,n=(e,n)=>{let s="function"==typeof e?e(t):e;if(!Object.is(s,t)){let e=t;t=(null!=n?n:"object"!=typeof s||null===s)?s:Object.assign({},t,s),r.forEach(r=>r(t,e))}},s=()=>t,i={setState:n,getState:s,getInitialState:()=>a,subscribe:e=>(r.add(e),()=>r.delete(e))},a=t=e(n,s,i);return i},i=e=>{let t=e?s(e):s,r=e=>(function(e,t=e=>e){let r=n.useSyncExternalStore(e.subscribe,n.useCallback(()=>t(e.getState()),[e,t]),n.useCallback(()=>t(e.getInitialState()),[e,t]));return n.useDebugValue(r),r})(t,e);return Object.assign(r,t),r},a=e=>e?i(e):i},4650:(e,t,r)=>{"use strict";async function n(e){if("u">typeof navigator&&navigator?.clipboard?.writeText)try{await navigator.clipboard.writeText(String(e));return}catch{}if("u"<typeof document)throw Error("copyTextToClipboard: clipboard API unavailable");let t=document.createElement("textarea");t.value=String(e),t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();let r=!1;try{r=document.execCommand("copy")}finally{document.body.removeChild(t)}if(!r)throw Error("copyTextToClipboard: execCommand('copy') failed")}function s(e,{min:t,max:r}={}){if(""===e||null==e)return e;let n=Number(e);if(!Number.isFinite(n))return e;let i=n;return Number.isFinite(t)&&(i=Math.max(t,i)),Number.isFinite(r)&&(i=Math.min(r,i)),i}function i(e,{min:t,max:r,step:n=1,direction:a}={}){let l=""===e||null==e?NaN:Number(s(e,{min:t,max:r})),o=Number.isFinite(l)?l:Number.isFinite(t)?t:0,c=Math.max(String(n).split(".")[1]?.length??0,String(o).split(".")[1]?.length??0);return s(Number((o+a*n).toFixed(Math.min(c,10))),{min:t,max:r})}function a(e,t,{length:r,rtl:n=!1}={}){if(!Number.isInteger(r)||r<=0)return e;let s=(e%r+r)%r;switch(t){case"ArrowRight":return(s+(n?-1:1)+r)%r;case"ArrowLeft":return(s+(n?1:-1)+r)%r;case"ArrowDown":return(s+1)%r;case"ArrowUp":return(s-1+r)%r;case"Home":return 0;case"End":return r-1;default:return s}}function l(e){return["ArrowRight","ArrowLeft","ArrowDown","ArrowUp","Home","End"].includes(e)}r.d(t,{CD:()=>i,Ck:()=>o,Ec:()=>u,GO:()=>c,Gc:()=>m,JF:()=>l,N:()=>s,V7:()=>d,eM:()=>n,lZ:()=>a,qM:()=>p});let o={primary:"bg-lime text-on-lime border border-transparent shadow-[inset_0_0_0_1px_rgba(0,0,0,0.14)] hover:brightness-95",secondary:"bg-raised text-text border border-line hover:bg-line/60",ghost:"bg-transparent text-text border border-line hover:bg-raised",danger:"bg-err-bg text-err border border-transparent hover:bg-err/15",outline:"bg-transparent text-muted border border-line hover:bg-raised hover:text-text",success:"bg-ok-bg text-ok border border-transparent hover:bg-ok/15"},c={sm:"h-10 px-3 text-sm rounded-lg",md:"h-11 px-4 text-sm rounded-lg",lg:"h-11 px-6 text-sm rounded-lg"},u={sm:"h-9 text-xs",md:"h-9 text-sm",lg:"h-11 text-sm"};function d(e="primary",t="md"){let r=o[e];if(!r)throw Error(`buttonClasses: unknown variant "${e}"`);let n=c[t];if(!n)throw Error(`buttonClasses: unknown size "${t}"`);return`${r} ${n}`}function m(e,{hint:t,error:r}={}){return r?`${e}-error`:t?`${e}-hint`:void 0}function p(e){return null!=e&&!1!==e&&""!==e}},11910:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var n=r(95155),s=r(14051),i=r.n(s),a=r(31474),l=r(98582);function o({label:e,type:t="text",placeholder:r,value:s,onChange:i,error:c,hint:u,icon:d,disabled:m=!1,required:p=!1,className:f,inputClassName:x,id:h,ref:g,...b}){return(0,n.jsx)(l.default,{id:h,label:e,hint:u,error:c,required:p,className:f,children:({inputId:e,describedBy:l,invalid:o})=>(0,n.jsxs)("div",{className:"relative",children:[d&&(0,n.jsx)("div",{className:"absolute inset-y-0 start-0 flex items-center ps-3 pointer-events-none text-muted","aria-hidden":"true",children:(0,n.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:d})}),(0,n.jsx)("input",{...b,ref:g,id:e,type:t,placeholder:r,value:s,onChange:i,disabled:m,"aria-describedby":l,"aria-invalid":o||void 0,className:(0,a.cn)("w-full py-2.5 px-3 text-sm text-text bg-raised rounded-lg","border border-line placeholder:text-subtle","focus:outline-none focus:border-coral focus:shadow-focus","transition-colors duration-150 disabled:opacity-50 disabled:cursor-not-allowed","text-[16px] sm:text-sm",d&&"ps-10",o&&"border-err focus:border-err",x)})]})})}o.propTypes={label:i().node,type:i().string,placeholder:i().string,value:i().oneOfType([i().string,i().number]),onChange:i().func,error:i().node,hint:i().node,icon:i().string,disabled:i().bool,required:i().bool,className:i().string,inputClassName:i().string,id:i().string,"aria-label":i().string}},15729:(e,t,r)=>{"use strict";r.d(t,{default:()=>l});var n=r(95155),s=r(14051),i=r.n(s),a=r(31474);function l({children:e,className:t,...r}){return(0,n.jsx)("kbd",{...r,className:(0,a.cn)("inline-flex h-5 min-w-5 items-center justify-center rounded-md border border-line bg-raised px-1.5","font-mono text-[11px] font-medium text-subtle",t),children:e})}l.propTypes={children:i().node.isRequired,className:i().string}},19123:(e,t,r)=>{"use strict";r.d(t,{default:()=>l});var n=r(95155),s=r(14051),i=r.n(s),a=r(50770);function l({children:e,variant:t="neutral",size:r="md",dot:s=!1,className:i}){return(0,n.jsxs)("span",{className:`inline-flex items-center gap-1.5 rounded-full font-semibold whitespace-nowrap ${(0,a.S3)(t,r)}${i?` ${i}`:""}`,children:[s&&(0,n.jsx)("span",{"aria-hidden":"true",className:"size-2 rounded-full bg-current"}),e]})}l.propTypes={children:i().node,variant:i().oneOf(a.XY),size:i().oneOf(Object.keys(a.vO)),dot:i().bool,className:i().string}},21551:(e,t,r)=>{Promise.resolve().then(r.bind(r,42266))},25086:(e,t,r)=>{"use strict";r.d(t,{CardSkeleton:()=>d,PageLoading:()=>o,Skeleton:()=>c,SkeletonText:()=>u,Spinner:()=>l,default:()=>m});var n=r(95155),s=r(14051),i=r.n(s),a=r(31474);function l({size:e="md",className:t}){return(0,n.jsx)("span",{role:"status","aria-label":"Loading",className:(0,a.cn)("material-symbols-outlined animate-spin text-coral",{sm:"text-[16px]",md:"text-[24px]",lg:"text-[32px]",xl:"text-[48px]"}[e],t),children:"progress_activity"})}function o({message:e="Loading..."}){return(0,n.jsxs)("div",{className:"fixed inset-0 z-50 flex flex-col items-center justify-center bg-bg",children:[(0,n.jsx)(l,{size:"xl"}),(0,n.jsx)("p",{className:"mt-4 text-muted",children:e})]})}function c({className:e,...t}){return(0,n.jsx)("div",{"aria-hidden":"true",className:(0,a.cn)("animate-pulse rounded-[10px] bg-raised",e),...t})}function u({lines:e=3,className:t}){let r=Array.from({length:e},(e,t)=>t);return(0,n.jsx)("div",{className:(0,a.cn)("flex flex-col gap-2",t),"aria-hidden":"true",children:r.map(e=>(0,n.jsx)(c,{className:(0,a.cn)("h-3",e===r.length-1?"w-2/3":"w-full")},`line-${e}`))})}function d(){return(0,n.jsxs)("div",{className:"rounded-2xl border border-line bg-panel p-6 shadow-card",children:[(0,n.jsxs)("div",{className:"mb-4 flex items-center justify-between",children:[(0,n.jsx)(c,{className:"h-4 w-24"}),(0,n.jsx)(c,{className:"size-10 rounded-[10px]"})]}),(0,n.jsx)(c,{className:"mb-2 h-8 w-16"}),(0,n.jsx)(c,{className:"h-3 w-20"})]})}function m({type:e="spinner",...t}){switch(e){case"page":return(0,n.jsx)(o,{...t});case"skeleton":return(0,n.jsx)(c,{...t});case"card":return(0,n.jsx)(d,{...t});default:return(0,n.jsx)(l,{...t})}}c.propTypes={className:i().string},u.propTypes={lines:i().number,className:i().string}},27693:(e,t,r)=>{"use strict";r.d(t,{MA:()=>s.MA,Q2:()=>s.Q2,UY:()=>n.UY,h0:()=>n.h0});var n=r(28745),s=r(88105);r(28777)},28067:(e,t,r)=>{"use strict";r.d(t,{default:()=>c});var n=r(95155),s=r(14051),i=r.n(s),a=r(12115),l=r(31474),o=r(4650);function c({options:e=[],value:t,onChange:r,size:s="md",className:i,"aria-label":u,"aria-labelledby":d,...m}){let p=(0,a.useRef)([]),f=e.findIndex(e=>e.value===t),x=f<0?0:f,h=o.Ec[s];if(!h)throw Error(`SegmentedControl: unknown size "${s}"`);return(0,n.jsx)("div",{...m,role:"radiogroup","aria-label":u,"aria-labelledby":d,className:(0,l.cn)("inline-flex items-center gap-0.5 rounded-lg border border-line bg-raised p-1 overflow-x-auto",i),children:e.map((t,s)=>(0,n.jsxs)("button",{ref:e=>{p.current[s]=e},type:"button",role:"radio","aria-checked":s===f,tabIndex:s===x?0:-1,onKeyDown:t=>((t,n)=>{if(!(0,o.JF)(t.key)||0===e.length)return;t.preventDefault();let s=(0,o.lZ)(n,t.key,{length:e.length,rtl:t.currentTarget.closest("[dir]")?.getAttribute("dir")==="rtl"});p.current[s]?.focus(),r?.(e[s].value)})(t,s),onClick:()=>r?.(t.value),className:(0,l.cn)("inline-flex shrink-0 items-center gap-1.5 rounded-md px-3 font-semibold transition-colors duration-200 focus-visible:shadow-focus motion-reduce:transition-none",h,s===f?"bg-text text-bg":"text-muted hover:text-text"),children:[t.icon&&(0,n.jsx)("span",{className:"material-symbols-outlined text-[16px]","aria-hidden":"true",children:t.icon}),t.label,null!=t.count&&(0,n.jsx)("span",{className:(0,l.cn)("font-mono",s===f?"text-bg/80":"text-muted"),children:t.count})]},t.value))})}c.propTypes={options:i().arrayOf(i().shape({value:i().oneOfType([i().string,i().number]).isRequired,label:i().node.isRequired,icon:i().string,count:i().oneOfType([i().string,i().number])})),value:i().oneOfType([i().string,i().number]),onChange:i().func,size:i().oneOf(Object.keys(o.Ec)),className:i().string,"aria-label":function(e,t,r){return e["aria-label"]||e["aria-labelledby"]?null:Error(`${r}: provide "aria-label" or "aria-labelledby".`)},"aria-labelledby":i().string}},28745:(e,t,r)=>{"use strict";r.d(t,{vQ:()=>i,UY:()=>c,Nu:()=>a,B2:()=>o,h0:()=>l});var n=r(4553),s=r(41463);let i={name:`${n.Hc.name} Proxy`,description:"AI infrastructure management",version:"1.0.0",build:{channel:s.env.NEXT_PUBLIC_BUILD_CHANNEL||"",sha:s.env.NEXT_PUBLIC_BUILD_SHA||""}},a={changelogUrl:"https://raw.githubusercontent.com/tokenhop/tokenhop/refs/heads/master/CHANGELOG.md"},l={appPort:20128},o={storageKey:"theme",defaultTheme:"dark"},c={maxLines:200,pollIntervalMs:1e3}},28777:(e,t,r)=>{"use strict";r.d(t,{CP:()=>s,KC:()=>n.KC,Xg:()=>n.Xg,bs:()=>i});var n=r(2378);Object.entries(r(88105).Q2).filter(([,e])=>e.passthroughModels).map(([e])=>e),Object.entries(n.vq).flatMap(([e,t])=>t.map(t=>({provider:e,model:t.id,name:t.name})));let s=(e,t=null)=>e?.kind||e?.type||t,i={vision:{icon:"visibility",label:"Vision",desc:"Supports image input",color:"text-blue-500"},reasoning:{icon:"neurology",label:"Reasoning",desc:"Supports reasoning / thinking",color:"text-amber-500"}}},35591:(e,t,r)=>{"use strict";r.d(t,{CA:()=>d,Fz:()=>g,Ob:()=>m,Wr:()=>l,cr:()=>b,e6:()=>u,eS:()=>p,s4:()=>o,se:()=>a,xJ:()=>c,z8:()=>h});let n=["Pages","Providers","Combos","Models","Actions","Settings"],s="signal.commandPalette.recents";function i(e){return String(e??"").toLowerCase().normalize("NFKD").replace(/[̀-ͯ]/g,"")}function a(e,t,r=[]){let s=new Map((r||[]).map((e,t)=>[e,t])),l=i(t).trim(),o=[];for(let t of e||[]){let e=function(e,t){let r=e,n=t;"string"==typeof t&&"string"!=typeof e&&e&&"object"==typeof e?(r=t,n=e):"object"==typeof e&&void 0===t&&(n=e,r="");let s=i(r).replace(/\s+/g,""),a=function(e){if("string"==typeof e)return i(e);let t=e||{};return i([t.label,t.hint,t.keywords,t.id].filter(Boolean).join(" "))}(n),l=i("string"==typeof n?n:n?.label);if(!s)return{matched:!0,score:0};if(!a)return{matched:!1,score:-1};if(l.startsWith(s))return{matched:!0,score:100-.01*l.length};let o=l.split(/[\s_/-]+/).find(e=>e.startsWith(s));if(o)return{matched:!0,score:70-.05*o.length};let c=0,u=-1;for(let e of s){let t=a.indexOf(e,u+1);if(-1===t)return{matched:!1,score:-1};c+=t-u-1,u=t}return{matched:!0,score:Math.max(1,40-c)}}(l,t);e.matched&&o.push({command:t,score:e.score})}return o.sort((e,t)=>{if(t.score!==e.score)return t.score-e.score;let r=s.has(e.command.id)?s.get(e.command.id):1/0,i=s.has(t.command.id)?s.get(t.command.id):1/0;if(r!==i)return r-i;let a=n.indexOf(e.command.group)-n.indexOf(t.command.group);return 0!==a?a:String(e.command.label).localeCompare(String(t.command.label))}),o.map(e=>e.command)}function l(e){let t=new Map;for(let r of e||[])t.has(r.group)||t.set(r.group,[]),t.get(r.group).push(r);return[...n.filter(e=>t.has(e)),...[...t.keys()].filter(e=>!n.includes(e))].map(e=>({group:e,count:t.get(e).length,items:t.get(e)}))}function o(e,t,r=8){return[t,...(e||[]).filter(e=>e!==t)].slice(0,r)}function c(e=function(){try{return window.localStorage}catch{return null}}()){try{let t=e?.getItem?.(s);if(!t)return[];let r=JSON.parse(t);return Array.isArray(r)?r.filter(e=>"string"==typeof e):[]}catch{return[]}}function u(e,t){try{e?.setItem?.(s,JSON.stringify(t||[]))}catch{}}function d(e){return!e||e<=0?"No matches":`${e} result${1===e?"":"s"}`}function m({key:e,metaKey:t=!1,ctrlKey:r=!1,defaultPrevented:n=!1,isComposing:s=!1,inEditable:i=!1,inCodeEditor:a=!1}={}){return!n&&!s&&!i&&!a&&"string"==typeof e&&"k"===e.toLowerCase()&&!!(t||r)}function p(e,{inCodeEditor:t=!1}={}){let r=e?.target,n=r?.isContentEditable===!0||/^(INPUT|TEXTAREA|SELECT)$/.test(r?.tagName||"")||r?.getAttribute?.("role")==="combobox";return{key:e?.key,metaKey:!!e?.metaKey,ctrlKey:!!e?.ctrlKey,defaultPrevented:!!e?.defaultPrevented,isComposing:e?.keyCode===229||!!e?.isComposing,inEditable:n,inCodeEditor:!!t}}let f=[],x=new Map;function h(e){f.includes(e)||f.push(e)}async function g(e={}){return(await Promise.allSettled([...f,...x.values()].map(t=>t(e)))).flatMap(e=>"fulfilled"===e.status&&e.value||[])}function b(e=3e5){let t=0,r=null;return async function(n){return Date.now()-t<e&&!r?"fresh":(r||(r=Promise.resolve().then(n).then(e=>(t=Date.now(),r=null,e),e=>{throw r=null,e})),r)}}},38794:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var n=r(95155),s=r(14051),i=r.n(s),a=r(12115),l=r(50770);function o({lines:e,label:t="Console output",className:r,live:s="off",onScroll:i,scrollRef:c,cursor:u=!1,row:d}){return(0,n.jsx)("div",{ref:c,role:"log","aria-label":t,"aria-live":s,dir:"ltr",onScroll:i,tabIndex:0,className:`signal-terminal custom-scrollbar m-0 overflow-auto rounded-2xl p-[18px_22px] text-start font-mono text-[13px] leading-[1.75] focus-visible:shadow-focus${r?` ${r}`:""}`,children:(0,n.jsxs)("ol",{className:"m-0 list-none p-0",children:[d?e.map((e,t)=>(0,n.jsx)(a.Fragment,{children:d(e,t)},e.key??e.id??`${e.time}-${t}`)):e.map((e,t)=>(0,n.jsxs)("li",{className:"flex gap-4 whitespace-nowrap",children:[(0,n.jsx)("span",{className:"signal-terminal-time shrink-0",children:e.time||"--:--:--"}),(0,n.jsx)("span",{className:`w-[52px] shrink-0 font-semibold ${(0,l.pN)(e.level)}`,children:e.level}),(0,n.jsx)("span",{className:"min-w-0 flex-1 whitespace-pre",children:e.message})]},e.id??`${e.time}-${t}`)),u&&(0,n.jsxs)("li",{className:"mt-0.5 flex gap-4 whitespace-nowrap","aria-hidden":"true",children:[(0,n.jsx)("span",{className:"signal-terminal-time shrink-0",children:"--:--:--"}),(0,n.jsx)("span",{className:"signal-terminal-cursor w-[52px] shrink-0 animate-pulse font-semibold",children:"▍"})]})]})})}o.propTypes={lines:i().arrayOf(i().shape({id:i().oneOfType([i().string,i().number]),time:i().string,level:i().oneOf(["LOG","INFO","WARN","ERROR","DEBUG"]).isRequired,message:i().string.isRequired})).isRequired,label:i().string,className:i().string,live:i().oneOf(["off","polite"]),onScroll:i().func,scrollRef:i().shape({current:i().object}),cursor:i().bool,row:i().func}},42266:(e,t,r)=>{"use strict";r.d(t,{default:()=>J});var n=r(95155),s=r(12115),i=r(98500),a=r.n(i),l=r(25086),o=r(56006),c=r(92542),u=r(99312),d=r(38794),m=r(19123),p=r(64371),f=r(28067),x=r(98542),h=r(65921),g=r(27693);let b=new Set(["LOG","INFO","WARN","ERROR","DEBUG"]),y=/^(?:\[(\d{1,2}:\d{2}(?::\d{2})?)\]\s*)?(?:\[([A-Za-z]+)\]\s*)?(.*)$/s,v=/^(?:\p{Extended_Pictographic}\uFE0F?\s*)+/u,w={"⚠️":"WARN","⚠":"WARN","❌":"ERROR","\uD83D\uDD0D":"DEBUG",ℹ️:"INFO",ℹ:"INFO"},N=/^\[browser\]\s*/,j=/\b\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?\b/g,k=/\b\d{1,2}:\d{2}:\d{2}(?:\.\d+)?\b/g,C=/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi,E=/\b(id|requestId|connectionId|traceId|sessionId)("?\s*[:=]\s*"?)[\w.-]+/gi;function R(e){for(let t=0;t<e.length;t+=1){let r;if("{"===e[t]||"["===e[t]){try{r=JSON.parse(e.slice(t))}catch{continue}if("object"==typeof r&&null!==r){let n=e.slice(0,t).trimEnd(),s=JSON.stringify(r,null,2);return n?`${n}
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[712],{1934:(e,t,r)=>{"use strict";r.d(t,{v:()=>a});var n=r(12115);let s=e=>{let t,r=new Set,n=(e,n)=>{let s="function"==typeof e?e(t):e;if(!Object.is(s,t)){let e=t;t=(null!=n?n:"object"!=typeof s||null===s)?s:Object.assign({},t,s),r.forEach(r=>r(t,e))}},s=()=>t,i={setState:n,getState:s,getInitialState:()=>a,subscribe:e=>(r.add(e),()=>r.delete(e))},a=t=e(n,s,i);return i},i=e=>{let t=e?s(e):s,r=e=>(function(e,t=e=>e){let r=n.useSyncExternalStore(e.subscribe,n.useCallback(()=>t(e.getState()),[e,t]),n.useCallback(()=>t(e.getInitialState()),[e,t]));return n.useDebugValue(r),r})(t,e);return Object.assign(r,t),r},a=e=>e?i(e):i},4650:(e,t,r)=>{"use strict";async function n(e){if("u">typeof navigator&&navigator?.clipboard?.writeText)try{await navigator.clipboard.writeText(String(e));return}catch{}if("u"<typeof document)throw Error("copyTextToClipboard: clipboard API unavailable");let t=document.createElement("textarea");t.value=String(e),t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();let r=!1;try{r=document.execCommand("copy")}finally{document.body.removeChild(t)}if(!r)throw Error("copyTextToClipboard: execCommand('copy') failed")}function s(e,{min:t,max:r}={}){if(""===e||null==e)return e;let n=Number(e);if(!Number.isFinite(n))return e;let i=n;return Number.isFinite(t)&&(i=Math.max(t,i)),Number.isFinite(r)&&(i=Math.min(r,i)),i}function i(e,{min:t,max:r,step:n=1,direction:a}={}){let l=""===e||null==e?NaN:Number(s(e,{min:t,max:r})),o=Number.isFinite(l)?l:Number.isFinite(t)?t:0,c=Math.max(String(n).split(".")[1]?.length??0,String(o).split(".")[1]?.length??0);return s(Number((o+a*n).toFixed(Math.min(c,10))),{min:t,max:r})}function a(e,t,{length:r,rtl:n=!1}={}){if(!Number.isInteger(r)||r<=0)return e;let s=(e%r+r)%r;switch(t){case"ArrowRight":return(s+(n?-1:1)+r)%r;case"ArrowLeft":return(s+(n?1:-1)+r)%r;case"ArrowDown":return(s+1)%r;case"ArrowUp":return(s-1+r)%r;case"Home":return 0;case"End":return r-1;default:return s}}function l(e){return["ArrowRight","ArrowLeft","ArrowDown","ArrowUp","Home","End"].includes(e)}r.d(t,{CD:()=>i,Ck:()=>o,Ec:()=>u,GO:()=>c,Gc:()=>m,JF:()=>l,N:()=>s,V7:()=>d,eM:()=>n,lZ:()=>a,qM:()=>p});let o={primary:"bg-lime text-on-lime border border-transparent shadow-[inset_0_0_0_1px_rgba(0,0,0,0.14)] hover:brightness-95",secondary:"bg-raised text-text border border-line hover:bg-line/60",ghost:"bg-transparent text-text border border-line hover:bg-raised",danger:"bg-err-bg text-err border border-transparent hover:bg-err/15",outline:"bg-transparent text-muted border border-line hover:bg-raised hover:text-text",success:"bg-ok-bg text-ok border border-transparent hover:bg-ok/15"},c={sm:"h-10 px-3 text-sm rounded-lg",md:"h-11 px-4 text-sm rounded-lg",lg:"h-11 px-6 text-sm rounded-lg"},u={sm:"h-9 text-xs",md:"h-9 text-sm",lg:"h-11 text-sm"};function d(e="primary",t="md"){let r=o[e];if(!r)throw Error(`buttonClasses: unknown variant "${e}"`);let n=c[t];if(!n)throw Error(`buttonClasses: unknown size "${t}"`);return`${r} ${n}`}function m(e,{hint:t,error:r}={}){return r?`${e}-error`:t?`${e}-hint`:void 0}function p(e){return null!=e&&!1!==e&&""!==e}},11910:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var n=r(95155),s=r(14051),i=r.n(s),a=r(31474),l=r(98582);function o({label:e,type:t="text",placeholder:r,value:s,onChange:i,error:c,hint:u,icon:d,disabled:m=!1,required:p=!1,className:f,inputClassName:x,id:h,ref:g,...b}){return(0,n.jsx)(l.default,{id:h,label:e,hint:u,error:c,required:p,className:f,children:({inputId:e,describedBy:l,invalid:o})=>(0,n.jsxs)("div",{className:"relative",children:[d&&(0,n.jsx)("div",{className:"absolute inset-y-0 start-0 flex items-center ps-3 pointer-events-none text-muted","aria-hidden":"true",children:(0,n.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:d})}),(0,n.jsx)("input",{...b,ref:g,id:e,type:t,placeholder:r,value:s,onChange:i,disabled:m,"aria-describedby":l,"aria-invalid":o||void 0,className:(0,a.cn)("w-full py-2.5 px-3 text-sm text-text bg-raised rounded-lg","border border-line placeholder:text-subtle","focus:outline-none focus:border-coral focus:shadow-focus","transition-colors duration-150 disabled:opacity-50 disabled:cursor-not-allowed","text-[16px] sm:text-sm",d&&"ps-10",o&&"border-err focus:border-err",x)})]})})}o.propTypes={label:i().node,type:i().string,placeholder:i().string,value:i().oneOfType([i().string,i().number]),onChange:i().func,error:i().node,hint:i().node,icon:i().string,disabled:i().bool,required:i().bool,className:i().string,inputClassName:i().string,id:i().string,"aria-label":i().string}},15729:(e,t,r)=>{"use strict";r.d(t,{default:()=>l});var n=r(95155),s=r(14051),i=r.n(s),a=r(31474);function l({children:e,className:t,...r}){return(0,n.jsx)("kbd",{...r,className:(0,a.cn)("inline-flex h-5 min-w-5 items-center justify-center rounded-md border border-line bg-raised px-1.5","font-mono text-[11px] font-medium text-subtle",t),children:e})}l.propTypes={children:i().node.isRequired,className:i().string}},19123:(e,t,r)=>{"use strict";r.d(t,{default:()=>l});var n=r(95155),s=r(14051),i=r.n(s),a=r(50770);function l({children:e,variant:t="neutral",size:r="md",dot:s=!1,className:i}){return(0,n.jsxs)("span",{className:`inline-flex items-center gap-1.5 rounded-full font-semibold whitespace-nowrap ${(0,a.S3)(t,r)}${i?` ${i}`:""}`,children:[s&&(0,n.jsx)("span",{"aria-hidden":"true",className:"size-2 rounded-full bg-current"}),e]})}l.propTypes={children:i().node,variant:i().oneOf(a.XY),size:i().oneOf(Object.keys(a.vO)),dot:i().bool,className:i().string}},21551:(e,t,r)=>{Promise.resolve().then(r.bind(r,42266))},25086:(e,t,r)=>{"use strict";r.d(t,{CardSkeleton:()=>d,PageLoading:()=>o,Skeleton:()=>c,SkeletonText:()=>u,Spinner:()=>l,default:()=>m});var n=r(95155),s=r(14051),i=r.n(s),a=r(31474);function l({size:e="md",className:t}){return(0,n.jsx)("span",{role:"status","aria-label":"Loading",className:(0,a.cn)("material-symbols-outlined animate-spin text-coral",{sm:"text-[16px]",md:"text-[24px]",lg:"text-[32px]",xl:"text-[48px]"}[e],t),children:"progress_activity"})}function o({message:e="Loading..."}){return(0,n.jsxs)("div",{className:"fixed inset-0 z-50 flex flex-col items-center justify-center bg-bg",children:[(0,n.jsx)(l,{size:"xl"}),(0,n.jsx)("p",{className:"mt-4 text-muted",children:e})]})}function c({className:e,...t}){return(0,n.jsx)("div",{"aria-hidden":"true",className:(0,a.cn)("animate-pulse rounded-[10px] bg-raised",e),...t})}function u({lines:e=3,className:t}){let r=Array.from({length:e},(e,t)=>t);return(0,n.jsx)("div",{className:(0,a.cn)("flex flex-col gap-2",t),"aria-hidden":"true",children:r.map(e=>(0,n.jsx)(c,{className:(0,a.cn)("h-3",e===r.length-1?"w-2/3":"w-full")},`line-${e}`))})}function d(){return(0,n.jsxs)("div",{className:"rounded-2xl border border-line bg-panel p-6 shadow-card",children:[(0,n.jsxs)("div",{className:"mb-4 flex items-center justify-between",children:[(0,n.jsx)(c,{className:"h-4 w-24"}),(0,n.jsx)(c,{className:"size-10 rounded-[10px]"})]}),(0,n.jsx)(c,{className:"mb-2 h-8 w-16"}),(0,n.jsx)(c,{className:"h-3 w-20"})]})}function m({type:e="spinner",...t}){switch(e){case"page":return(0,n.jsx)(o,{...t});case"skeleton":return(0,n.jsx)(c,{...t});case"card":return(0,n.jsx)(d,{...t});default:return(0,n.jsx)(l,{...t})}}c.propTypes={className:i().string},u.propTypes={lines:i().number,className:i().string}},27693:(e,t,r)=>{"use strict";r.d(t,{MA:()=>s.MA,Q2:()=>s.Q2,UY:()=>n.UY,h0:()=>n.h0});var n=r(28745),s=r(88105);r(28777)},28067:(e,t,r)=>{"use strict";r.d(t,{default:()=>c});var n=r(95155),s=r(14051),i=r.n(s),a=r(12115),l=r(31474),o=r(4650);function c({options:e=[],value:t,onChange:r,size:s="md",className:i,"aria-label":u,"aria-labelledby":d,...m}){let p=(0,a.useRef)([]),f=e.findIndex(e=>e.value===t),x=f<0?0:f,h=o.Ec[s];if(!h)throw Error(`SegmentedControl: unknown size "${s}"`);return(0,n.jsx)("div",{...m,role:"radiogroup","aria-label":u,"aria-labelledby":d,className:(0,l.cn)("inline-flex items-center gap-0.5 rounded-lg border border-line bg-raised p-1 overflow-x-auto",i),children:e.map((t,s)=>(0,n.jsxs)("button",{ref:e=>{p.current[s]=e},type:"button",role:"radio","aria-checked":s===f,tabIndex:s===x?0:-1,onKeyDown:t=>((t,n)=>{if(!(0,o.JF)(t.key)||0===e.length)return;t.preventDefault();let s=(0,o.lZ)(n,t.key,{length:e.length,rtl:t.currentTarget.closest("[dir]")?.getAttribute("dir")==="rtl"});p.current[s]?.focus(),r?.(e[s].value)})(t,s),onClick:()=>r?.(t.value),className:(0,l.cn)("inline-flex shrink-0 items-center gap-1.5 rounded-md px-3 font-semibold transition-colors duration-200 focus-visible:shadow-focus motion-reduce:transition-none",h,s===f?"bg-text text-bg":"text-muted hover:text-text"),children:[t.icon&&(0,n.jsx)("span",{className:"material-symbols-outlined text-[16px]","aria-hidden":"true",children:t.icon}),t.label,null!=t.count&&(0,n.jsx)("span",{className:(0,l.cn)("font-mono",s===f?"text-bg/80":"text-muted"),children:t.count})]},t.value))})}c.propTypes={options:i().arrayOf(i().shape({value:i().oneOfType([i().string,i().number]).isRequired,label:i().node.isRequired,icon:i().string,count:i().oneOfType([i().string,i().number])})),value:i().oneOfType([i().string,i().number]),onChange:i().func,size:i().oneOf(Object.keys(o.Ec)),className:i().string,"aria-label":function(e,t,r){return e["aria-label"]||e["aria-labelledby"]?null:Error(`${r}: provide "aria-label" or "aria-labelledby".`)},"aria-labelledby":i().string}},28745:(e,t,r)=>{"use strict";r.d(t,{vQ:()=>i,UY:()=>c,Nu:()=>a,B2:()=>o,h0:()=>l});var n=r(4553),s=r(41463);let i={name:`${n.Hc.name} Proxy`,description:"AI infrastructure management",version:"1.0.3",build:{channel:s.env.NEXT_PUBLIC_BUILD_CHANNEL||"",sha:s.env.NEXT_PUBLIC_BUILD_SHA||""}},a={changelogUrl:"https://raw.githubusercontent.com/tokenhop/tokenhop/refs/heads/master/CHANGELOG.md"},l={appPort:20128},o={storageKey:"theme",defaultTheme:"dark"},c={maxLines:200,pollIntervalMs:1e3}},28777:(e,t,r)=>{"use strict";r.d(t,{CP:()=>s,KC:()=>n.KC,Xg:()=>n.Xg,bs:()=>i});var n=r(2378);Object.entries(r(88105).Q2).filter(([,e])=>e.passthroughModels).map(([e])=>e),Object.entries(n.vq).flatMap(([e,t])=>t.map(t=>({provider:e,model:t.id,name:t.name})));let s=(e,t=null)=>e?.kind||e?.type||t,i={vision:{icon:"visibility",label:"Vision",desc:"Supports image input",color:"text-blue-500"},reasoning:{icon:"neurology",label:"Reasoning",desc:"Supports reasoning / thinking",color:"text-amber-500"}}},35591:(e,t,r)=>{"use strict";r.d(t,{CA:()=>d,Fz:()=>g,Ob:()=>m,Wr:()=>l,cr:()=>b,e6:()=>u,eS:()=>p,s4:()=>o,se:()=>a,xJ:()=>c,z8:()=>h});let n=["Pages","Providers","Combos","Models","Actions","Settings"],s="signal.commandPalette.recents";function i(e){return String(e??"").toLowerCase().normalize("NFKD").replace(/[̀-ͯ]/g,"")}function a(e,t,r=[]){let s=new Map((r||[]).map((e,t)=>[e,t])),l=i(t).trim(),o=[];for(let t of e||[]){let e=function(e,t){let r=e,n=t;"string"==typeof t&&"string"!=typeof e&&e&&"object"==typeof e?(r=t,n=e):"object"==typeof e&&void 0===t&&(n=e,r="");let s=i(r).replace(/\s+/g,""),a=function(e){if("string"==typeof e)return i(e);let t=e||{};return i([t.label,t.hint,t.keywords,t.id].filter(Boolean).join(" "))}(n),l=i("string"==typeof n?n:n?.label);if(!s)return{matched:!0,score:0};if(!a)return{matched:!1,score:-1};if(l.startsWith(s))return{matched:!0,score:100-.01*l.length};let o=l.split(/[\s_/-]+/).find(e=>e.startsWith(s));if(o)return{matched:!0,score:70-.05*o.length};let c=0,u=-1;for(let e of s){let t=a.indexOf(e,u+1);if(-1===t)return{matched:!1,score:-1};c+=t-u-1,u=t}return{matched:!0,score:Math.max(1,40-c)}}(l,t);e.matched&&o.push({command:t,score:e.score})}return o.sort((e,t)=>{if(t.score!==e.score)return t.score-e.score;let r=s.has(e.command.id)?s.get(e.command.id):1/0,i=s.has(t.command.id)?s.get(t.command.id):1/0;if(r!==i)return r-i;let a=n.indexOf(e.command.group)-n.indexOf(t.command.group);return 0!==a?a:String(e.command.label).localeCompare(String(t.command.label))}),o.map(e=>e.command)}function l(e){let t=new Map;for(let r of e||[])t.has(r.group)||t.set(r.group,[]),t.get(r.group).push(r);return[...n.filter(e=>t.has(e)),...[...t.keys()].filter(e=>!n.includes(e))].map(e=>({group:e,count:t.get(e).length,items:t.get(e)}))}function o(e,t,r=8){return[t,...(e||[]).filter(e=>e!==t)].slice(0,r)}function c(e=function(){try{return window.localStorage}catch{return null}}()){try{let t=e?.getItem?.(s);if(!t)return[];let r=JSON.parse(t);return Array.isArray(r)?r.filter(e=>"string"==typeof e):[]}catch{return[]}}function u(e,t){try{e?.setItem?.(s,JSON.stringify(t||[]))}catch{}}function d(e){return!e||e<=0?"No matches":`${e} result${1===e?"":"s"}`}function m({key:e,metaKey:t=!1,ctrlKey:r=!1,defaultPrevented:n=!1,isComposing:s=!1,inEditable:i=!1,inCodeEditor:a=!1}={}){return!n&&!s&&!i&&!a&&"string"==typeof e&&"k"===e.toLowerCase()&&!!(t||r)}function p(e,{inCodeEditor:t=!1}={}){let r=e?.target,n=r?.isContentEditable===!0||/^(INPUT|TEXTAREA|SELECT)$/.test(r?.tagName||"")||r?.getAttribute?.("role")==="combobox";return{key:e?.key,metaKey:!!e?.metaKey,ctrlKey:!!e?.ctrlKey,defaultPrevented:!!e?.defaultPrevented,isComposing:e?.keyCode===229||!!e?.isComposing,inEditable:n,inCodeEditor:!!t}}let f=[],x=new Map;function h(e){f.includes(e)||f.push(e)}async function g(e={}){return(await Promise.allSettled([...f,...x.values()].map(t=>t(e)))).flatMap(e=>"fulfilled"===e.status&&e.value||[])}function b(e=3e5){let t=0,r=null;return async function(n){return Date.now()-t<e&&!r?"fresh":(r||(r=Promise.resolve().then(n).then(e=>(t=Date.now(),r=null,e),e=>{throw r=null,e})),r)}}},38794:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var n=r(95155),s=r(14051),i=r.n(s),a=r(12115),l=r(50770);function o({lines:e,label:t="Console output",className:r,live:s="off",onScroll:i,scrollRef:c,cursor:u=!1,row:d}){return(0,n.jsx)("div",{ref:c,role:"log","aria-label":t,"aria-live":s,dir:"ltr",onScroll:i,tabIndex:0,className:`signal-terminal custom-scrollbar m-0 overflow-auto rounded-2xl p-[18px_22px] text-start font-mono text-[13px] leading-[1.75] focus-visible:shadow-focus${r?` ${r}`:""}`,children:(0,n.jsxs)("ol",{className:"m-0 list-none p-0",children:[d?e.map((e,t)=>(0,n.jsx)(a.Fragment,{children:d(e,t)},e.key??e.id??`${e.time}-${t}`)):e.map((e,t)=>(0,n.jsxs)("li",{className:"flex gap-4 whitespace-nowrap",children:[(0,n.jsx)("span",{className:"signal-terminal-time shrink-0",children:e.time||"--:--:--"}),(0,n.jsx)("span",{className:`w-[52px] shrink-0 font-semibold ${(0,l.pN)(e.level)}`,children:e.level}),(0,n.jsx)("span",{className:"min-w-0 flex-1 whitespace-pre",children:e.message})]},e.id??`${e.time}-${t}`)),u&&(0,n.jsxs)("li",{className:"mt-0.5 flex gap-4 whitespace-nowrap","aria-hidden":"true",children:[(0,n.jsx)("span",{className:"signal-terminal-time shrink-0",children:"--:--:--"}),(0,n.jsx)("span",{className:"signal-terminal-cursor w-[52px] shrink-0 animate-pulse font-semibold",children:"▍"})]})]})})}o.propTypes={lines:i().arrayOf(i().shape({id:i().oneOfType([i().string,i().number]),time:i().string,level:i().oneOf(["LOG","INFO","WARN","ERROR","DEBUG"]).isRequired,message:i().string.isRequired})).isRequired,label:i().string,className:i().string,live:i().oneOf(["off","polite"]),onScroll:i().func,scrollRef:i().shape({current:i().object}),cursor:i().bool,row:i().func}},42266:(e,t,r)=>{"use strict";r.d(t,{default:()=>J});var n=r(95155),s=r(12115),i=r(98500),a=r.n(i),l=r(25086),o=r(56006),c=r(92542),u=r(99312),d=r(38794),m=r(19123),p=r(64371),f=r(28067),x=r(98542),h=r(65921),g=r(27693);let b=new Set(["LOG","INFO","WARN","ERROR","DEBUG"]),y=/^(?:\[(\d{1,2}:\d{2}(?::\d{2})?)\]\s*)?(?:\[([A-Za-z]+)\]\s*)?(.*)$/s,v=/^(?:\p{Extended_Pictographic}\uFE0F?\s*)+/u,w={"⚠️":"WARN","⚠":"WARN","❌":"ERROR","\uD83D\uDD0D":"DEBUG",ℹ️:"INFO",ℹ:"INFO"},N=/^\[browser\]\s*/,j=/\b\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?\b/g,k=/\b\d{1,2}:\d{2}:\d{2}(?:\.\d+)?\b/g,C=/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi,E=/\b(id|requestId|connectionId|traceId|sessionId)("?\s*[:=]\s*"?)[\w.-]+/gi;function R(e){for(let t=0;t<e.length;t+=1){let r;if("{"===e[t]||"["===e[t]){try{r=JSON.parse(e.slice(t))}catch{continue}if("object"==typeof r&&null!==r){let n=e.slice(0,t).trimEnd(),s=JSON.stringify(r,null,2);return n?`${n}
|
|
2
2
|
${s}`:s}}}return e}function A(e){return{...e,searchText:`${e.message}
|
|
3
3
|
${R(e.message)}`.toLowerCase()}}function L(e){if(!Number.isInteger(e)||e<1)throw Error(`retryDelayMs: expected a positive attempt, got ${e}`);return Math.min(3e4,1e3*2**(e-1))}let S={status:"connecting",attempt:0,retryInMs:0};function $(e,t){switch(t.type){case"connect":return{...e,status:"connecting",retryInMs:0};case"open":return{status:"open",attempt:0,retryInMs:0};case"error":{let t=e.attempt+1;return{status:"reconnecting",attempt:t,retryInMs:L(t)}}case"hidden":return{status:"idle",attempt:0,retryInMs:0};default:throw Error(`connectionReducer: unknown action "${t?.type}"`)}}function O(e){if("string"!=typeof e)throw Error(`parseConsoleLine: expected a string, got ${typeof e}`);let t=e.match(y),r=(t[2]||"").toUpperCase(),n=Object.keys(w).find(e=>t[3].startsWith(e)),s=b.has(r)?r:n?w[n]:"LOG",i=function(e){if("string"!=typeof e)throw Error("stripConsolePrefix: expected a string");return e.replace(v,"")}(b.has(r)?t[3]:`${t[2]?`[${t[2]}] `:""}${t[3]}`),a=N.test(i);return{time:t[1]||"",level:s,source:a?"browser":"server",message:a?i.replace(N,""):i,raw:e}}function T(e,t){if(!Array.isArray(e))throw Error("tagConsoleLines: expected an array of lines");if(!Number.isInteger(t)||t<0)throw Error(`tagConsoleLines: expected a non-negative startId, got ${t}`);return{lines:e.map((e,r)=>A({...e,id:t+r})),nextId:t+e.length}}function I(e,t,r){if(!Array.isArray(e)||!Array.isArray(t))throw Error("appendConsoleLines: expected arrays");if(!Number.isInteger(r)||r<=0)throw Error(`appendConsoleLines: expected a positive maxLines, got ${r}`);let n=[...e,...t];return n.length>r?n.slice(-r):n}function _(e,t){for(let r=Math.min(e.length,t.length);r>0;r-=1){let n=e.length-r,s=!0;for(let i=0;i<r&&s;i+=1)s=e[n+i].raw===t[i].raw;if(s)return r}return 0}let M={paused:!1,visible:[],pending:[],newCount:0,nextId:0};function q(e){if(!Number.isInteger(e.maxLines)||e.maxLines<=0)throw Error("pauseBufferReducer: resume/append needs a positive maxLines");return e.maxLines}function F(e,t){switch(t.type){case"pause":return{...e,paused:!0};case"resume":{let r=q(t),n=T(e.pending,e.nextId);return{...e,paused:!1,visible:I(e.visible,n.lines,r),pending:[],newCount:0,nextId:n.nextId}}case"append":{if(!Array.isArray(t.lines))throw Error("pauseBufferReducer: append needs lines");let r=q(t),n=T(t.lines,e.nextId);if(e.paused){let t=[...e.pending,...n.lines].slice(-r);return{...e,pending:t,newCount:t.length,nextId:n.nextId}}return{...e,visible:I(e.visible,n.lines,r),nextId:n.nextId}}case"snapshot":{if(!Array.isArray(t.lines))throw Error("pauseBufferReducer: snapshot needs lines");let r=q(t),n=t.lines.slice(-r),s=_([...e.visible,...e.pending],n);if(0===s){let t=T(n,e.nextId);if(e.paused){let n=I(e.pending,t.lines,r);return{...e,pending:n,newCount:n.length,nextId:t.nextId}}return{...e,visible:t.lines,nextId:t.nextId}}return F(e,{type:"append",lines:n.slice(s),maxLines:r})}case"clear":return{...e,visible:[],pending:[],newCount:0};default:throw Error(`pauseBufferReducer: unknown action "${t?.type}"`)}}let D={enabled:!0};function P(e,t){switch(t.type){case"scroll":{let r=!1!==t.atBottom;return r===e.enabled?e:{enabled:r}}case"toggle":return{enabled:!e.enabled};default:throw Error(`autoScrollReducer: unknown action "${t?.type}"`)}}var z=r(14051),B=r.n(z),U=r(50770),G=r(4650);function K({value:e,label:t}){let[r,i]=(0,s.useState)(null),a=(0,s.useRef)(null);(0,s.useEffect)(()=>()=>clearTimeout(a.current),[]);let l=async()=>{try{await (0,G.eM)(e),i("copied")}catch{i("error")}clearTimeout(a.current),a.current=setTimeout(()=>i(null),2e3)};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{type:"button","aria-label":t,onClick:l,className:"inline-flex size-10 shrink-0 items-center justify-center rounded-md text-[var(--signal-terminal-time)] transition-colors hover:text-[var(--signal-terminal-text)] focus-visible:shadow-focus",children:(0,n.jsx)("span",{className:"material-symbols-outlined text-[18px]","aria-hidden":"true",children:"copied"===r?"check":"error"===r?"error":"content_copy"})}),(0,n.jsx)("span",{"aria-live":"polite",className:"sr-only",children:"copied"===r?"Copied":"error"===r?"Copy failed":""})]})}K.propTypes={value:B().string.isRequired,label:B().string.isRequired};let W=(0,s.memo)(function({row:e,index:t,raw:r,expanded:s,selected:i,onToggle:a,onSelect:l,onBlur:o}){let c=`console-row-${Array.from(e.key,e=>e.codePointAt(0).toString(16)).join("-")}`,u=e=>r?e.raw||e.message:R(e.message),d=e.occurrences.map(u).join("\n\n"),m=Math.max(0,e.count-16),p=m?[...e.occurrences.slice(0,8),...e.occurrences.slice(-8)]:e.occurrences,f=m?`${p.slice(0,8).map(u).join("\n\n")}
|
|
4
4
|
|