vansrouter 0.91.87 → 0.91.89
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 +10 -10
- 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 +4 -4
- 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 +2 -2
- 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 +19 -19
- 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 +2 -2
- 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 +2 -2
- 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/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 +3 -3
- 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-fitness/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-fitness/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-fitness/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 +2 -2
- 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/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 +2 -2
- 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/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 +2 -2
- package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +2 -2
- 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/_global-error.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +2 -2
- 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 +4 -4
- package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/api/auth/check/route.js.nft.json +1 -1
- 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/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +5 -5
- 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.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/codewhale-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/codewhale-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/codex-profiles/route.js.nft.json +1 -1
- 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.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/crush-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/crush-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.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +1 -1
- 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/forge-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/forge-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-profiles/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +1 -1
- 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 +2 -2
- 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/omp-settings/route.js +3 -3
- package/app/.next-cli-build/server/app/api/cli-tools/omp-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/cli-tools/pi-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/pi-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/smelt-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/smelt-settings/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/presets/route.js +1 -1
- package/app/.next-cli-build/server/app/api/combos/presets/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/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/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.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/zed/auto-import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/zed/import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/zed/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 +2 -2
- 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]/gcp-projects/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/gcp-projects/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]/overrides/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/overrides/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/route.js +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/bulk/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/bulk/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/circuit-breakers/[name]/reset/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/circuit-breakers/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 +2 -2
- 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]/fitness/clear/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 +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 +2 -2
- 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 +2 -2
- 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/fitness/clear-all/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/fitness/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/netlify-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 +2 -2
- 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/ready/route.js +1 -1
- package/app/.next-cli-build/server/app/api/ready/route.js.nft.json +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/proxy-test/route.js +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/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 +1 -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 +1 -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]/claude-reset/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/claude-reset/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -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 +1 -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/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/[id]/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/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 +7 -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 +1 -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.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/[kind]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/[kind]/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 +1 -1
- 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/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/update/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 +4 -4
- package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +4 -4
- 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 +1 -1
- package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +4 -4
- 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 +6 -6
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +4 -4
- 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 +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +4 -4
- 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/mitm.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +4 -4
- 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 +6 -6
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +4 -4
- 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 +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-fitness.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-fitness.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/proxy-fitness.segments/!KGRhc2hib2FyZCk/dashboard/proxy-fitness/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-fitness.segments/!KGRhc2hib2FyZCk/dashboard/proxy-fitness.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-fitness.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-fitness.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-fitness.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/proxy-fitness.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-fitness.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/proxy-fitness.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +4 -4
- 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 +1 -1
- package/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +4 -4
- 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 +9 -9
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +9 -9
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +4 -4
- 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 +4 -4
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
- 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 +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +4 -4
- 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 +6 -6
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +4 -4
- 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 +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/translator.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 +6 -6
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +4 -4
- 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 +6 -6
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/favicon.ico/route.js.nft.json +1 -1
- 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 +4 -4
- package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +4 -4
- 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 +1 -1
- package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
- 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/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +4 -4
- 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 +2 -2
- package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/masuk/page.js +1 -1
- package/app/.next-cli-build/server/app/masuk/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/masuk/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app-paths-manifest.json +10 -10
- package/app/.next-cli-build/server/chunks/1253.js +1 -1
- package/app/.next-cli-build/server/chunks/1685.js +4 -4
- package/app/.next-cli-build/server/chunks/1693.js +14 -14
- package/app/.next-cli-build/server/chunks/2098.js +1 -1
- package/app/.next-cli-build/server/chunks/224.js +1 -1
- package/app/.next-cli-build/server/chunks/2247.js +1 -1
- package/app/.next-cli-build/server/chunks/228.js +1 -1
- package/app/.next-cli-build/server/chunks/2365.js +1 -1
- package/app/.next-cli-build/server/chunks/2557.js +9 -9
- package/app/.next-cli-build/server/chunks/2741.js +5 -5
- package/app/.next-cli-build/server/chunks/2994.js +1 -1
- package/app/.next-cli-build/server/chunks/3059.js +1 -1
- package/app/.next-cli-build/server/chunks/3129.js +9 -0
- package/app/.next-cli-build/server/chunks/3519.js +1 -1
- package/app/.next-cli-build/server/chunks/{4574.js → 3548.js} +4 -12
- package/app/.next-cli-build/server/chunks/3738.js +1 -1
- package/app/.next-cli-build/server/chunks/3909.js +7 -0
- package/app/.next-cli-build/server/chunks/4105.js +1 -1
- package/app/.next-cli-build/server/chunks/4121.js +1 -1
- package/app/.next-cli-build/server/chunks/4387.js +1 -1
- package/app/.next-cli-build/server/chunks/4784.js +1 -0
- package/app/.next-cli-build/server/chunks/5376.js +1 -1
- package/app/.next-cli-build/server/chunks/5661.js +2 -0
- package/app/.next-cli-build/server/chunks/6127.js +1 -0
- package/app/.next-cli-build/server/chunks/6385.js +1 -1
- package/app/.next-cli-build/server/chunks/6635.js +120 -0
- package/app/.next-cli-build/server/chunks/6723.js +1 -1
- package/app/.next-cli-build/server/chunks/6797.js +1 -0
- package/app/.next-cli-build/server/chunks/7010.js +1 -1
- package/app/.next-cli-build/server/chunks/7074.js +1 -1
- package/app/.next-cli-build/server/chunks/7104.js +1 -1
- package/app/.next-cli-build/server/chunks/7173.js +1 -0
- package/app/.next-cli-build/server/chunks/7601.js +1 -0
- package/app/.next-cli-build/server/chunks/7622.js +1 -0
- package/app/.next-cli-build/server/chunks/77.js +1 -0
- package/app/.next-cli-build/server/chunks/7863.js +1 -1
- package/app/.next-cli-build/server/chunks/7950.js +1 -1
- package/app/.next-cli-build/server/chunks/8413.js +1 -1
- package/app/.next-cli-build/server/chunks/8695.js +1 -0
- package/app/.next-cli-build/server/chunks/9152.js +1 -0
- package/app/.next-cli-build/server/chunks/9462.js +3 -3
- package/app/.next-cli-build/server/chunks/9536.js +1 -1
- package/app/.next-cli-build/server/chunks/9813.js +1 -1
- package/app/.next-cli-build/server/chunks/9974.js +1 -1
- package/app/.next-cli-build/server/instrumentation.js +1 -1
- package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/app/.next-cli-build/server/middleware-react-loadable-manifest.js +1 -1
- package/app/.next-cli-build/server/middleware.js +6 -6
- 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/4385-cbf2781a85164825.js +1 -0
- package/app/.next-cli-build/static/chunks/{5882-1249cbe42852fd96.js → 5882-bb73715e79a1edc7.js} +15 -15
- package/app/.next-cli-build/static/chunks/7811.44f1e90e48ee2405.js +7 -0
- package/app/.next-cli-build/static/chunks/{9131-d37a1bf502688d4e.js → 9131-5c48f6b07c55928d.js} +2 -2
- package/app/.next-cli-build/static/chunks/{8667.b22b7da66acd945f.js → 9752.f8753c75713960c0.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/page-695c6386c328069c.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/{page-7a18b45a954e3c68.js → page-6fb9dbec413202a9.js} +24 -24
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-a6d3f510934cc6a5.js → page-b15161b2f2dbe57a.js} +4 -4
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-350e9dd8ec551006.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/token-saver/page-f3837ee992c42414.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/translator/page-c7d23dc2ea52f500.js +1 -0
- package/app/.next-cli-build/static/chunks/webpack-a0ce735078312e9a.js +1 -0
- package/app/.next-cli-build/static/css/e277fef3d96cd619.css +1 -0
- package/app/package.json +3 -3
- package/app/public/i18n/literals/fa.json +1 -1
- package/app/public/i18n/literals/id.json +1366 -170
- package/app/public/i18n/literals/km.json +1398 -0
- package/app/public/i18n/literals/pt-BR.json +1 -1
- package/app/public/i18n/literals/th.json +1 -1
- package/app/public/i18n/literals/zh-CN.json +1 -1
- package/app/public/providers/nace.png +0 -0
- package/app/public/providers/sensenova.png +0 -0
- package/app/src/app/(dashboard)/dashboard/cli-tools/components/GenericCliToolCard.js +69 -11
- package/app/src/app/(dashboard)/dashboard/combos/page.js +71 -19
- package/app/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.js +1 -1
- package/app/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/components/SttExampleCard.js +2 -5
- package/app/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/components/TtsExampleCard.js +94 -11
- package/app/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/components/exampleShared.js +2 -0
- package/app/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +6 -1
- package/app/src/app/(dashboard)/dashboard/token-saver/TokenSaverClient.js +18 -0
- package/app/src/app/(dashboard)/dashboard/token-saver/TokenSaverSettings.js +37 -0
- package/app/src/app/(dashboard)/dashboard/translator/page.js +9 -2
- package/app/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaTable.js +4 -2
- package/app/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.js +16 -1
- package/app/src/app/api/cli-tools/pi-settings/route.js +32 -14
- package/app/src/app/api/providers/[id]/test/testUtils.js +40 -1
- package/app/src/app/api/providers/validate/route.js +1 -0
- package/app/src/lib/db/driver.js +27 -0
- package/app/src/lib/db/helpers/nullBytes.js +28 -0
- package/app/src/lib/db/repos/settingsRepo.js +3 -0
- package/app/src/mitm/server.js +24 -24
- package/app/src/shared/constants/monaco.js +7 -0
- package/app/src/shared/constants/ttsProviders.js +16 -0
- package/app/src/shared/utils/bulkAdd.js +3 -0
- package/app/src/shared/utils/modelSearchFilter.js +2 -0
- package/app/src/sse/handlers/chat.js +2 -0
- package/app/src/sse/handlers/imageGeneration.js +12 -0
- package/app/src/sse/handlers/stt.js +31 -4
- package/app/src/sse/handlers/tts.js +9 -2
- package/package.json +1 -1
- package/app/.next-cli-build/server/chunks/1691.js +0 -1
- package/app/.next-cli-build/server/chunks/2445.js +0 -1
- package/app/.next-cli-build/server/chunks/2764.js +0 -1
- package/app/.next-cli-build/server/chunks/3280.js +0 -7
- package/app/.next-cli-build/server/chunks/3398.js +0 -120
- package/app/.next-cli-build/server/chunks/3650.js +0 -1
- package/app/.next-cli-build/server/chunks/3712.js +0 -1
- package/app/.next-cli-build/server/chunks/3750.js +0 -1
- package/app/.next-cli-build/server/chunks/5302.js +0 -1
- package/app/.next-cli-build/server/chunks/634.js +0 -1
- package/app/.next-cli-build/server/chunks/8729.js +0 -2
- package/app/.next-cli-build/server/chunks/9984.js +0 -1
- package/app/.next-cli-build/static/chunks/4385-03007e8e097ad6f8.js +0 -1
- package/app/.next-cli-build/static/chunks/7811.b41ad2c055232420.js +0 -7
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/page-db17236a5b2183ab.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-85770718a5ce696c.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/token-saver/page-700aef5520cd0812.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/translator/page-7fa12dc3d0d68dca.js +0 -1
- package/app/.next-cli-build/static/chunks/webpack-619acf270537f5d4.js +0 -1
- package/app/.next-cli-build/static/css/918f11e454be0692.css +0 -1
- /package/app/.next-cli-build/static/{-8-NstHfD1iTKOGgb6O6F → LbAvi6x-snQC6rsQ9_c6d}/_buildManifest.js +0 -0
- /package/app/.next-cli-build/static/{-8-NstHfD1iTKOGgb6O6F → LbAvi6x-snQC6rsQ9_c6d}/_ssgManifest.js +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7811],{21863:(e,t,r)=>{function l(e,t){return!1===e?"default":"active"===t||"success"===t?"success":"error"===t||"expired"===t||"unavailable"===t?"error":"default"}function s(e){let t={};for(let r of e||[])r?.provider&&(t[r.provider]||(t[r.provider]={total:0,active:0}),t[r.provider].total+=1,!1!==r.isActive&&(t[r.provider].active+=1));let r=new Set;for(let[e,l]of Object.entries(t))l.total>0&&0===l.active&&r.add(e);return r}r.d(t,{g:()=>l,i:()=>s})},85479:(e,t,r)=>{r.d(t,{y:()=>n});var l=r(82030),s=r(24332);let a=null,i=null;function n(){let[e,t]=(0,l.useState)(()=>a?.byFull||{}),[r,n]=(0,l.useState)(()=>a?.byId||{});return(0,l.useEffect)(()=>{if(a)return;let e=!0;return(a?Promise.resolve(a):i||(i=fetch("/api/models").then(async e=>{if(!e.ok)throw Error(`models ${e.status}`);return a=function(e){let t={},r={};for(let l of e||[])l.caps&&(l.fullModel&&(t[l.fullModel]=l.caps),l.routedModel&&(t[l.routedModel]=l.caps),l.model&&(r[l.model]=l.caps));return{byFull:t,byId:r}}((await e.json()).models)}).catch(()=>({byFull:{},byId:{}})).finally(()=>{i=null}))).then(r=>{e&&(t(r.byFull),n(r.byId))}),()=>{e=!1}},[]),{getCaps:(0,l.useCallback)(t=>(function(e,t,r){if(!r)return null;if(e[r])return e[r];let l=r.includes("/")?r.slice(r.indexOf("/")+1):r;if(t[l])return t[l];let a=r.includes("/")?r.slice(0,r.indexOf("/")):null,i=(0,s.nl)(a,l);return{vision:i.vision,search:i.search,reasoning:i.reasoning,contextWindow:i.contextWindow,maxOutput:i.maxOutput}})(e,r,t),[e,r])}}},87811:(e,t,r)=>{r.r(t),r.d(t,{default:()=>y});var l=r(15102),s=r(82030),a=r(28937),i=r.n(a),n=r(7665),o=r(31704),d=r(24260),c=r(85479),m=r(55223),u=r(31038);function p(e){if(!e||"string"!=typeof e)return{raw:"",isEmpty:!0,isRegex:!1,regex:null,positiveTerms:[],negativeTerms:[]};let t=e.trim();if(!t)return{raw:"",isEmpty:!0,isRegex:!1,regex:null,positiveTerms:[],negativeTerms:[]};if(t.startsWith("/")){let e=t.match(/^\/(.+)\/([a-z]*)$/i);if(e)try{let r=e[2]||"i",l=new RegExp(e[1],r);return{raw:t,isEmpty:!1,isRegex:!0,regex:l,positiveTerms:[],negativeTerms:[]}}catch{}else if(t.length>1)try{let e=RegExp(t.slice(1),"i");return{raw:t,isEmpty:!1,isRegex:!0,regex:e,positiveTerms:[],negativeTerms:[]}}catch{}}let r=t.split(/\s+/),l=[],s=[];for(let e of r)e&&((e.startsWith("!")||e.startsWith("-"))&&e.length>1?s.push(e.slice(1).toLowerCase()):l.push(e.toLowerCase()));return{raw:t,isEmpty:0===l.length&&0===s.length,isRegex:!1,regex:null,positiveTerms:l,negativeTerms:s}}function h(e,t){let r="string"!=typeof t&&t?t:p(t);if(r.isEmpty)return!0;let l=[];if("string"==typeof e?l=[e]:Array.isArray(e)?l=e.filter(e=>"string"==typeof e):e&&"object"==typeof e&&(l=[e.name,e.id,e.value,e.alias,e.provider].filter(e=>"string"==typeof e)),0===l.length)return!1;if(r.isRegex&&r.regex){let e=l.join(" ");return/\(\?!|\(\?<!/.test(r.raw)?r.regex.test(e):l.some(e=>r.regex.test(e))||r.regex.test(e)}let s=l.map(e=>e.toLowerCase());if(r.negativeTerms.length>0){for(let e of r.negativeTerms)if(s.some(t=>t.includes(e)))return!1}if(r.positiveTerms.length>0){for(let e of r.positiveTerms)if(!s.some(t=>t.includes(e)))return!1}return!0}var f=r(21863);let x=[...Object.keys(u.zN),...Object.keys(u.IS),...Object.keys(u.nJ),...Object.keys(u.fg)],g=Object.keys(u.IS).filter(e=>u.IS[e].noAuth),v=["cursor","cline","clinepass","zed"];function b(e,t,r){let[l,a]=(0,s.useState)([]),i=(t??[]).join("|");return(0,s.useEffect)(()=>{let t=i?i.split("|"):[];if(!e||0===t.length)return void a([]);let l=!1;return Promise.all(t.map(async e=>{let t=await fetch(`/api/providers/${e}/models`,{cache:"no-store"});if(!t.ok)return[];let r=await t.json();return Array.isArray(r.models)?r.models:[]})).then(e=>{if(l)return;let t=new Set;a(e.flat().filter(e=>!(!e?.id||t.has(e.id))&&(t.add(e.id),!0)))}).catch(e=>{console.warn(`Unable to load ${r} models for selector:`,e),l||a([])}),()=>{l=!0}},[e,i,r]),l}function y({isOpen:e,onClose:t,onSelect:r,onDeselect:a,onSelectBatch:i,onDeselectBatch:j,selectedModel:w,activeProviders:C=[],title:k="Select Model",size:$="lg",modelAliases:S={},kindFilter:N=null,capFilter:E=null,addedModelValues:O=[],closeOnSelect:M=!0,allowProviderWildcard:P=!1}){let[A,T]=(0,s.useState)(null),R=async()=>{try{let e=await fetch("/api/providers");if(!e.ok)throw Error(`Failed to fetch providers: ${e.status}`);let t=await e.json();T(t.connections||[])}catch(e){console.error("Error fetching providers in ModelSelectModal:",e),T([])}};(0,s.useEffect)(()=>{e&&R()},[e]);let z=(0,s.useMemo)(()=>null!==A?A:C||[],[A,C]),F=(0,s.useMemo)(()=>{let e=z.filter(e=>e&&!1!==e.isActive);return N?e.filter(e=>{let t=u.Q2[e.provider];return(t?.serviceKinds||["llm"]).includes(N)}):e},[z,N]),D=(0,s.useMemo)(()=>(0,f.i)(z),[z]),{getCaps:W}=(0,c.y)(),[_,I]=(0,s.useState)(""),[K,q]=(0,s.useState)([]),[B,G]=(0,s.useState)([]),[L,J]=(0,s.useState)([]),[Q,U]=(0,s.useState)({}),V=(0,s.useMemo)(()=>{let e=Object.fromEntries(v.map(e=>[e,[]]));for(let t of F)t?.id&&Object.prototype.hasOwnProperty.call(e,t.provider)&&e[t.provider].push(t.id);return e},[F]),Z=V.cursor,H=V.cline,X=V.clinepass,Y=V.zed,ee=b(e,Z,"Cursor"),et=b(e,H,"Cline"),er=b(e,X,"ClinePass"),el=b(e,Y,"Zed"),es=async()=>{try{let e=await fetch("/api/combos");if(!e.ok)throw Error(`Failed to fetch combos: ${e.status}`);let t=await e.json();q(t.combos||[])}catch(e){console.error("Error fetching combos:",e),q([])}};(0,s.useEffect)(()=>{e&&es()},[e]);let ea=async()=>{try{let e=await fetch("/api/provider-nodes");if(!e.ok)throw Error(`Failed to fetch provider nodes: ${e.status}`);let t=await e.json();G(t.nodes||[])}catch(e){console.error("Error fetching provider nodes:",e),G([])}};(0,s.useEffect)(()=>{e&&ea()},[e]);let ei=async()=>{try{let e=await fetch("/api/models/custom");if(!e.ok)throw Error(`Failed to fetch custom models: ${e.status}`);let t=await e.json();J(t.models||[])}catch(e){console.error("Error fetching custom models:",e),J([])}};(0,s.useEffect)(()=>{e&&ei()},[e]);let en=async()=>{try{let e=await fetch("/api/models/disabled");if(!e.ok)throw Error(`Failed to fetch disabled models: ${e.status}`);let t=await e.json();U(t.disabled||{})}catch(e){console.error("Error fetching disabled models:",e),U({})}};(0,s.useEffect)(()=>{e&&en()},[e]);let eo=(0,s.useMemo)(()=>({...u.zN,...u.IS,...u.nJ,...u.fg}),[]),ed=(0,s.useMemo)(()=>{let e={},t=new Set(["webSearch","webFetch"]),r=new Set(["image","tts","stt","embedding","imageToText"]),l=new Set(["tts","image","webFetch"]),s=F.map(e=>e.provider),a=(N?g.filter(e=>(u.Q2[e]?.serviceKinds||["llm"]).includes(N)):g).filter(e=>!D.has(e)),i=new Set((B||[]).map(e=>e?.id).filter(Boolean));return[...new Set([...s,...a,...N?[]:L.map(e=>e.providerAlias).filter(e=>((0,u.mq)(e)||(0,u.gb)(e))&&i.has(e)&&!D.has(e))].filter(e=>!D.has(e)))].sort((e,t)=>{let r=x.indexOf(e),l=x.indexOf(t);return(-1===r?999:r)-(-1===l?999:l)}).forEach(s=>{let a=(0,u.wG)(s),i=eo[s]||{name:s,color:"#666"},n=(0,u.mq)(s)||(0,u.gb)(s);if(N&&t.has(N)){e[s]={name:i.name,alias:a,color:i.color,models:[{id:s,name:i.name,value:s}]};return}if(i.passthroughModels){let t=Object.entries(S).filter(([,e])=>e.startsWith(`${a}/`)).map(([e,t])=>({id:t.replace(`${a}/`,""),name:e,value:t})),n=L.filter(e=>e.providerAlias===a).map(e=>({id:e.id,name:e.name||e.id,value:`${a}/${e.id}`,kind:(0,m.CP)(e),isCustom:!0})),o=t;if(N&&r.has(N)){let e=n.filter(e=>(0,m.CP)(e)===N);0===(o=[...e,...(0,m.KC)(s).filter(e=>(0,m.CP)(e)===N).map(e=>({id:e.id,name:e.name,value:`${a}/${e.id}`,kind:(0,m.CP)(e)})).filter(t=>!e.some(e=>e.value===t.value))]).length&&l.has(N)&&(i.serviceKinds||["llm"]).includes(N)&&(o=[{id:s,name:i.name,value:a}])}else{let e=n.filter(e=>!(0,m.CP)(e)||"llm"===(0,m.CP)(e)),r=new Set([...t,...e].map(e=>e.value)),l=(0,m.KC)(s).filter(e=>!(0,m.CP)(e)||"llm"===(0,m.CP)(e)).map(e=>({id:e.id,name:e.name,value:`${a}/${e.id}`,kind:(0,m.CP)(e)})).filter(e=>!r.has(e.value));o=[...e,...t.filter(t=>!e.some(e=>e.value===t.value)),...l]}if(o.length>0){let t=B.find(e=>e.id===s),r=t?.name||i.name;e[s]={name:r,alias:a,color:i.color,models:o}}}else if(n){if(N&&r.has(N))return;let t=F.find(e=>e.provider===s)||z.find(e=>e.provider===s),l=B.find(e=>e.id===s),a=l?.name||t?.name||i.name,n=t?.providerSpecificData?.prefix||l?.prefix||s,o=Object.entries(S).filter(([,e])=>e.startsWith(`${s}/`)).map(([e,t])=>({id:t.replace(`${s}/`,""),name:e,value:`${n}/${t.replace(`${s}/`,"")}`})),d=L.filter(e=>e.providerAlias===s).map(e=>({id:e.id,name:e.name||e.id,value:`${n}/${e.id}`,isCustom:!0})),c=new Set(o.map(e=>e.value)),m=[...o,...d.filter(e=>!c.has(e.value))],u=m.length>0?m:[{id:`__placeholder__${s}`,name:`${n}/model-id`,value:`${n}/model-id`,isPlaceholder:!0}];e[s]={name:a,alias:n,color:i.color,models:u,isCustom:!0,hasModels:m.length>0}}else{var o;let t="cursor"===s?ee:"cline"===s?et:"clinepass"===s?er:"zed"===s?el:[],n=t.length>0?t:(0,m.KC)(s),d=new Set(n.map(e=>e.id)),c=n.length>0,u=Object.entries(S).filter(([e,t])=>t.startsWith(`${a}/`)&&(!c||e===t.replace(`${a}/`,""))&&!d.has(t.replace(`${a}/`,""))).map(([e,t])=>({id:t.replace(`${a}/`,""),name:e,value:t,isCustom:!0})),p=new Set(u.map(e=>e.id)),h=L.filter(e=>e.providerAlias===a&&!d.has(e.id)&&!p.has(e.id)).map(e=>({id:e.id,name:e.name||e.id,value:`${a}/${e.id}`,isCustom:!0})),f=[...n.map(e=>({id:e.id,name:e.name,value:`${a}/${e.id}`,kind:(0,m.CP)(e)})),...u,...h],x=new Set,g=(o=f.filter(e=>!x.has(e.value)&&(x.add(e.value),!0)),N?r.has(N)?o.filter(e=>e.isPlaceholder||(0,m.CP)(e)===N):o:o.filter(e=>e.isPlaceholder||e.isCustom||!(0,m.CP)(e)||"llm"===(0,m.CP)(e)));0===g.length&&N&&l.has(N)&&(i.serviceKinds||["llm"]).includes(N)&&(g=[{id:s,name:i.name,value:a}]),g.length>0&&(e[s]={name:i.name,alias:a,color:i.color,models:g})}}),Object.entries(e).forEach(([t,r])=>{let l=new Set([...Q[(0,u.wG)(t)]||[],...Q[t]||[]]);0!==l.size&&(r.models=r.models.filter(e=>!l.has(e.id)),0===r.models.length&&delete e[t])}),Object.entries(e).forEach(([t,r])=>{let l=F.filter(e=>e.provider===t),s=[];for(let e of l)Array.isArray(e.providerSpecificData?.enabledModels)&&e.providerSpecificData.enabledModels.length>0&&s.push(...e.providerSpecificData.enabledModels);if(s.length>0){let l=new Set(s),a=r.alias||(0,u.wG)(t)||t;r.models=r.models.filter(e=>l.has(e.id)||l.has(e.value)||l.has(`${a}/${e.id}`)||e.value&&l.has(e.value.replace(`${a}/`,""))),0===r.models.length&&delete e[t]}}),e},[F,S,eo,B,L,Q,N,z,D,ee,et,er,el]),ec=(0,s.useMemo)(()=>p(_),[_]),em=(0,s.useMemo)(()=>N||E?[]:ec.isEmpty?K:K.filter(e=>h(e.name,ec)),[K,ec,N,E]),eu=(0,s.useMemo)(()=>{let e={};return Object.entries(ed).forEach(([t,r])=>{var l;let s=r.models;if(!E||0!==(s=s.filter(e=>W(e.value)?.[E]===!0)).length){if(!ec.isEmpty){let e=h(r.name,ec),l=P&&(r.alias&&h(r.alias,ec)||t&&h(t,ec)||h(`${r.alias}/*`,ec));if(0===(s=s.filter(t=>!!h(t,ec)||(!!e||!!l)&&(!(ec.negativeTerms.length>0)||h(t,{...ec,positiveTerms:[]})))).length)return}e[t]={...r,models:[...(l=s).filter(e=>O.includes(e.value)).sort((e,t)=>e.name.localeCompare(t.name)),...l.filter(e=>!O.includes(e.value)).sort((e,t)=>e.name.localeCompare(t.name))]}}}),e},[ed,ec,O,P]),ep=(0,s.useMemo)(()=>{let e=[];return Object.values(eu).forEach(t=>{t.models.forEach(t=>{t.isPlaceholder||e.push(t)})}),e},[eu]),eh=(0,s.useMemo)(()=>ep.filter(e=>!O.includes(e.value)),[ep,O]),ef=(0,s.useMemo)(()=>ep.filter(e=>O.includes(e.value)),[ep,O]),ex=e=>{let l=e?.value||e?.name||e;O.includes(l)&&a?a(e):r(e),M&&(t(),I(""))};return(0,l.jsxs)(n.A,{isOpen:e,onClose:()=>{t(),I("")},title:k,size:$,className:"p-4!",footer:null,children:[(0,l.jsxs)("div",{className:"flex items-center gap-2 mb-3 px-2.5 py-2 bg-primary/8 border border-primary/20 rounded-lg text-xs text-text-muted",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-primary shrink-0",style:{fontSize:"14px"},children:"info"}),(0,l.jsx)("span",{children:P?"Click to add/remove a model, or click a provider name for wildcard (e.g. provider/*). Search supports exclusions (e.g. claude -haiku) and RegEx (/pattern/).":"Click to add, click again to remove. Search supports exclusions (e.g. claude -haiku) and RegEx (/pattern/)."})]}),(0,l.jsxs)("div",{className:"mb-3 space-y-2",children:[(0,l.jsxs)("div",{className:"relative",children:[(0,l.jsx)("span",{className:"material-symbols-outlined absolute left-2.5 top-1/2 -translate-y-1/2 text-text-muted text-[16px]",children:"search"}),(0,l.jsx)("input",{type:"text",placeholder:P?"Search models (e.g. claude -haiku, oc/*, /regex/)...":"Search models (e.g. claude -haiku, !embed, /regex/)...",value:_,onChange:e=>I(e.target.value),className:"w-full pl-8 pr-20 py-1.5 bg-surface border border-border rounded text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,l.jsxs)("div",{className:"absolute right-2 top-1/2 -translate-y-1/2 flex items-center gap-1",children:[ec.isRegex&&(0,l.jsx)("span",{className:"text-[10px] px-1 py-0.2 rounded bg-primary/10 text-primary font-mono font-medium",children:"regex"}),ec.negativeTerms.length>0&&!ec.isRegex&&(0,l.jsx)("span",{className:"text-[10px] px-1 py-0.2 rounded bg-amber-500/10 text-amber-500 font-mono font-medium",children:"!exclude"}),_&&(0,l.jsx)("button",{type:"button",onClick:()=>I(""),className:"text-text-muted hover:text-text-main cursor-pointer p-0.5 rounded",title:"Clear search",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px] leading-none",children:"close"})})]})]}),!M&&ep.length>0&&(0,l.jsxs)("div",{className:"flex items-center justify-between px-1 text-[11px] text-text-muted",children:[(0,l.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,l.jsxs)("span",{children:[ep.length," models"]}),O.length>0&&(0,l.jsxs)("span",{className:"text-primary font-medium",children:["(",O.length," selected)"]})]}),(0,l.jsxs)("div",{className:"flex items-center gap-1.5",children:[eh.length>0&&(0,l.jsxs)("button",{type:"button",onClick:()=>{0!==eh.length&&(i?i(eh):eh.forEach(e=>r(e)))},className:"px-2 py-0.5 rounded text-[11px] font-medium bg-primary/10 text-primary hover:bg-primary/20 transition-colors cursor-pointer",title:"Select all filtered models",children:["Select All (",eh.length,")"]}),ef.length>0&&(0,l.jsxs)("button",{type:"button",onClick:()=>{0!==ef.length&&(j?j(ef):a&&ef.forEach(e=>a(e)))},className:"px-2 py-0.5 rounded text-[11px] font-medium bg-border/40 text-text-muted hover:text-text-main hover:bg-border/60 transition-colors cursor-pointer",title:"Deselect all filtered models",children:["Deselect All (",ef.length,")"]})]})]})]}),(0,l.jsxs)("div",{className:"max-h-[400px] overflow-y-auto space-y-3",children:[em.length>0&&(0,l.jsxs)("div",{children:[(0,l.jsxs)("div",{className:"flex items-center gap-1.5 mb-1.5 sticky top-0 bg-surface py-0.5",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-primary text-[14px]",children:"layers"}),(0,l.jsx)("span",{className:"text-xs font-medium text-primary",children:"Combos"}),(0,l.jsxs)("span",{className:"text-[10px] text-text-muted",children:["(",em.length,")"]})]}),(0,l.jsx)("div",{className:"flex flex-wrap gap-1.5",children:em.map(e=>{let t=w===e.name;return(0,l.jsxs)("button",{onClick:()=>ex({id:e.name,name:e.name,value:e.name}),className:`
|
|
2
|
-
px-2 py-1 rounded-xl text-xs font-medium transition-all border hover:cursor-pointer flex items-center gap-1
|
|
3
|
-
${t?"bg-primary text-white border-primary":O.includes(e.name)?"bg-primary border-primary text-white hover:bg-primary-hover":"bg-surface border-border text-text-main hover:border-primary/50 hover:bg-primary/5"}
|
|
4
|
-
`,children:[O.includes(e.name)&&(0,l.jsx)("span",{className:"material-symbols-outlined leading-none",style:{fontSize:"10px"},children:"check"}),e.name]},e.id)})})]}),Object.entries(eu).map(([e,t])=>{let r=`${t.alias||e}/*`,s=P&&O.includes(r);return(0,l.jsxs)("div",{children:[(0,l.jsxs)("div",{className:"flex items-center gap-1.5 mb-1.5 sticky top-0 bg-surface py-0.5 z-10",children:[(0,l.jsx)(o.A,{src:`/providers/${e}.png`,alt:t.name,size:14,fallbackText:(t.name||e).slice(0,2).toUpperCase(),fallbackColor:t.color}),P?(0,l.jsxs)("button",{type:"button",onClick:()=>ex({value:r,name:r}),title:s?`Click to remove wildcard ${r}`:`Click to allow all models from ${t.name} (${r})`,className:`inline-flex items-center gap-1.5 px-2 py-0.5 rounded-md text-xs font-medium transition-all cursor-pointer border ${s?"bg-primary text-white border-primary shadow-2xs hover:bg-primary-hover":"text-primary border-transparent hover:bg-primary/10 hover:border-primary/20"}`,children:[s&&(0,l.jsx)("span",{className:"material-symbols-outlined leading-none text-[12px]",children:"check"}),(0,l.jsx)("span",{children:t.name}),(0,l.jsx)("span",{className:`text-[10px] font-mono px-1 py-0.2 rounded ${s?"bg-white/20 text-white":"text-text-muted bg-sidebar border border-border/50"}`,children:r})]}):(0,l.jsx)("span",{className:"text-xs font-medium text-primary",children:t.name}),(0,l.jsxs)("span",{className:"text-[10px] text-text-muted",children:["(",t.models.length,")"]})]}),(0,l.jsx)("div",{className:"flex flex-wrap gap-1.5",children:t.models.map(e=>{let t=w===e.value,r=e.isPlaceholder;return(0,l.jsx)("button",{onClick:()=>ex(e),title:r?"Select to pre-fill, then edit model ID in the input":void 0,className:`
|
|
5
|
-
px-2 py-1 rounded-xl text-xs font-medium transition-all border hover:cursor-pointer
|
|
6
|
-
${r?"border-dashed border-border text-text-muted hover:border-primary/50 hover:text-primary bg-surface italic":t?"bg-primary text-white border-primary":O.includes(e.value)?"bg-primary border-primary text-white hover:bg-primary-hover":"bg-surface border-border text-text-main hover:border-primary/50 hover:bg-primary/5"}
|
|
7
|
-
`,children:(0,l.jsxs)("span",{className:"flex items-center gap-1",children:[O.includes(e.value)&&!r&&(0,l.jsx)("span",{className:"material-symbols-outlined leading-none",style:{fontSize:"10px"},children:"check"}),r?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[11px]",children:"edit"}),e.name]}):e.isCustom?(0,l.jsxs)(l.Fragment,{children:[e.name,(0,l.jsx)("span",{className:"text-[9px] opacity-60 font-normal",children:"custom"}),(0,l.jsx)(d.A,{caps:W(e.value)})]}):(0,l.jsxs)(l.Fragment,{children:[e.name,(0,l.jsx)(d.A,{caps:W(e.value)})]})]})},e.value)})})]},e)}),0===Object.keys(eu).length&&0===em.length&&(0,l.jsxs)("div",{className:"text-center py-4 text-text-muted",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-2xl mb-1 block",children:"search_off"}),(0,l.jsx)("p",{className:"text-xs",children:"No models found"})]})]})]})}y.propTypes={isOpen:i().bool.isRequired,onClose:i().func.isRequired,onSelect:i().func.isRequired,onDeselect:i().func,onSelectBatch:i().func,onDeselectBatch:i().func,selectedModel:i().string,activeProviders:i().arrayOf(i().shape({provider:i().string.isRequired})),title:i().string,size:i().string,modelAliases:i().object,kindFilter:i().string,addedModelValues:i().arrayOf(i().string),closeOnSelect:i().bool,allowProviderWildcard:i().bool}}}]);
|
package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/page-db17236a5b2183ab.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3649],{1117:(e,t,s)=>{Promise.resolve().then(s.bind(s,14813))},14813:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>n});var a=s(15102),l=s(82030),o=s(10736),r=s(21577),i=s(85479);function n(){let[e,t]=(0,l.useState)([]),[s,n]=(0,l.useState)(!0),[m,x]=(0,l.useState)(!1),[u,p]=(0,l.useState)(null),[h,f]=(0,l.useState)([]),[g,b]=(0,l.useState)({}),[y,j]=(0,l.useState)(null),[w,N]=(0,l.useState)([]),[v,k]=(0,l.useState)(!1),{getCaps:C}=(0,i.y)(),[S,$]=(0,l.useState)(null),{copied:E,copy:D}=(0,r.C)();(0,l.useEffect)(()=>{T()},[]),(0,l.useEffect)(()=>{let t=new Set(e.map(e=>e.id));N(e=>e.filter(e=>t.has(e)))},[e]);let F=e.filter(e=>w.includes(e.id)),O=e.length>0&&w.length===e.length,P=w.length>0,T=async()=>{try{let[e,s,a]=await Promise.all([fetch("/api/combos",{cache:"no-store"}),fetch("/api/providers",{cache:"no-store"}),fetch("/api/settings",{cache:"no-store"})]),l=await e.json(),o=await s.json(),r=a.ok?await a.json():{};e.ok&&t((l.combos||[]).filter(e=>!e.kind||"llm"===e.kind)),s.ok&&f((o.connections||[]).filter(e=>!1!==e.isActive)),b(r.comboStrategies||{})}catch(e){console.log("Error fetching data:",e)}finally{n(!1)}},M=async e=>{try{let t=await fetch("/api/combos",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(t.ok)await T(),x(!1);else{let e=await t.json();alert(e.error||"Failed to create combo")}}catch(e){console.log("Error creating combo:",e)}},_=async(e,t)=>{try{let s=await fetch(`/api/combos/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(s.ok)await T(),p(null);else{let e=await s.json();alert(e.error||"Failed to update combo")}}catch(e){console.log("Error updating combo:",e)}},A=async e=>{let t="cursor"===e?"Cursor Default":"Claude Default";j(e);try{let s=await fetch(`/api/combos/presets?source=${e}`),a=await s.json();if(!s.ok)return void alert(a.error||`Failed to preview ${t}`);let l=(a.items||[]).length,o=a.toCreate??(a.items||[]).filter(e=>!e.exists).length,r=a.toSkip??(a.items||[]).filter(e=>e.exists).length;if(0===l)return void alert(`No ${t} models available to generate.`);if(0===o)return void alert(`All ${l} ${t} combos already exist. Nothing to create.`);$({title:`Generate ${t}`,message:`Create ${o} combo${1===o?"":"s"} named like ${"cursor"===e?"Cursor":"Claude"} model IDs (seeded with cu/… or cc/…). ${r} already exist and will be skipped. You can edit any combo afterward to add fallbacks.`,confirmText:"Generate",variant:"primary",onConfirm:async()=>{$(e=>e?{...e,loading:!0}:null);try{let s=await fetch("/api/combos/presets",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({source:e})}),a=await s.json();if(!s.ok){alert(a.error||`Failed to generate ${t}`),$(e=>e?{...e,loading:!1}:null);return}await T(),$(null)}catch(e){console.log(`Error generating ${t}:`,e),alert(`Failed to generate ${t}`),$(e=>e?{...e,loading:!1}:null)}}})}catch(e){console.log(`Error previewing ${t}:`,e),alert(`Failed to preview ${t}`)}finally{j(null)}},B=(e,t=g)=>{let s={...t};for(let t of e)delete s[t];return s},I=async e=>{await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({comboStrategies:e})}),b(e)},R=async s=>{let a=e.find(e=>e.id===s);$({title:"Delete Combo",message:a?`Delete combo "${a.name}"?`:"Delete this combo?",onConfirm:async()=>{$(e=>e?{...e,loading:!0}:null);try{(await fetch(`/api/combos/${s}`,{method:"DELETE"})).ok&&(a?.name&&await I(B([a.name])),t(e=>e.filter(e=>e.id!==s)),N(e=>e.filter(e=>e!==s))),$(null)}catch(e){console.log("Error deleting combo:",e),$(e=>e?{...e,loading:!1}:null)}}})},J=async(e,t)=>{try{let s={...g},a={...s[e]||{},...t};a.fallbackStrategy&&"fallback"!==a.fallbackStrategy?s[e]=a:delete s[e],await I(s)}catch(e){console.log("Error updating combo strategy:",e)}},z=async e=>{if(0!==F.length&&e){k(!0);try{let t={...g};for(let s of F)"fallback"===e?delete t[s.name]:t[s.name]={...t[s.name]||{},fallbackStrategy:e};await I(t)}catch(e){console.log("Error bulk updating combo strategy:",e),alert("Failed to update strategy for selected combos")}finally{k(!1)}}};return s?(0,a.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,a.jsx)(o.CardSkeleton,{}),(0,a.jsx)(o.CardSkeleton,{})]}):(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-6 px-1 sm:px-0",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("p",{className:"text-sm text-text-muted",children:"Group models under one name, then pick a strategy per combo."}),(0,a.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-2 mt-3",children:[(0,a.jsxs)("div",{className:"flex items-start gap-2 p-2 rounded-lg bg-surface-2/50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px] text-primary mt-0.5 shrink-0",children:"arrow_downward"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{className:"text-xs font-medium text-text-main",children:"Fallback"}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Tries models in order, next on failure"})]})]}),(0,a.jsxs)("div",{className:"flex items-start gap-2 p-2 rounded-lg bg-surface-2/50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px] text-primary mt-0.5 shrink-0",children:"sync"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{className:"text-xs font-medium text-text-main",children:"Round Robin"}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Rotates across requests to spread load"})]})]}),(0,a.jsxs)("div",{className:"flex items-start gap-2 p-2 rounded-lg bg-surface-2/50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px] text-primary mt-0.5 shrink-0",children:"hub"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{className:"text-xs font-medium text-text-main",children:"Fusion"}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Parallel query + judge synthesis (N+1 calls)"})]})]}),(0,a.jsxs)("div",{className:"flex items-start gap-2 p-2 rounded-lg bg-surface-2/50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px] text-primary mt-0.5 shrink-0",children:"auto_awesome"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{className:"text-xs font-medium text-text-main",children:"Capacity auto-switch"}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Routes image/PDF/audio to capable models"})]})]})]}),(0,a.jsxs)("p",{className:"text-xs text-text-muted mt-3 max-w-2xl",children:[(0,a.jsx)("span",{className:"font-medium text-text-main",children:"Cursor / Claude Default"})," create combos named exactly like those clients' model IDs (e.g. ",(0,a.jsx)("code",{className:"font-mono",children:"composer-2.5"}),", ",(0,a.jsx)("code",{className:"font-mono",children:"opus"}),"), seeded with the matching ",(0,a.jsx)("code",{className:"font-mono",children:"cu/…"})," or ",(0,a.jsx)("code",{className:"font-mono",children:"cc/…"})," route so traffic can hit the router without the prefix."," ",'Note: Cursor IDE often blocks built-in Composer / Grok from Override OpenAI Base URL ("model does not support custom API"); add them via Cursor\'s ',(0,a.jsx)("span",{className:"font-medium text-text-main",children:"Add Custom Model"})," using the combo name, or pick a model Cursor allows through the custom endpoint."]})]}),(0,a.jsxs)("div",{className:"flex w-full flex-col gap-2 sm:w-auto sm:shrink-0",children:[(0,a.jsx)(o.Button,{icon:"add",onClick:()=>x(!0),className:"w-full sm:w-auto whitespace-nowrap",children:"Create Combo"}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-2",children:[(0,a.jsx)(o.Button,{variant:"secondary",size:"sm",icon:"edit_note",loading:"cursor"===y,disabled:!!y,onClick:()=>A("cursor"),className:"w-full whitespace-nowrap",children:"Cursor Default"}),(0,a.jsx)(o.Button,{variant:"secondary",size:"sm",icon:"smart_toy",loading:"claude"===y,disabled:!!y,onClick:()=>A("claude"),className:"w-full whitespace-nowrap",children:"Claude Default"})]})]})]}),0===e.length?(0,a.jsx)(o.Card,{children:(0,a.jsxs)("div",{className:"text-center py-12",children:[(0,a.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-primary/10 text-primary mb-4",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[32px]",children:"layers"})}),(0,a.jsx)("p",{className:"text-text-main font-medium mb-1",children:"No combos yet"}),(0,a.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Create model combos with fallback support"}),(0,a.jsx)(o.Button,{icon:"add",onClick:()=>x(!0),className:"w-full sm:w-auto",children:"Create Combo"})]})}):(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-2 rounded-lg border border-black/5 bg-black/[0.015] px-3 py-2 dark:border-white/5 dark:bg-white/[0.02] sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsxs)("label",{className:"flex cursor-pointer items-center gap-2 text-xs text-text-muted hover:text-primary select-none",children:[(0,a.jsx)("input",{type:"checkbox",checked:O,ref:e=>{e&&(e.indeterminate=P&&!O)},onChange:()=>N(O?[]:e.map(e=>e.id)),className:"h-3.5 w-3.5 rounded border-gray-300 text-primary focus:ring-primary","aria-label":"Select all combos"}),(0,a.jsx)("span",{children:P?`${w.length} selected`:`Select all (${e.length})`})]}),(0,a.jsx)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:P&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"w-full min-w-[160px] sm:w-[200px]",children:(0,a.jsx)(o.Select,{options:c,value:"",placeholder:"Set strategy…",disabled:v,onChange:e=>{let t=e.target.value;t&&z(t)},selectClassName:"py-1.5 text-xs"})}),(0,a.jsxs)(o.Button,{size:"sm",variant:"danger",icon:"delete",disabled:v,loading:v,onClick:()=>{if(0===F.length)return;let e=F.length;$({title:"Delete Selected Combos",message:`Delete ${e} selected combo${1===e?"":"s"}? This cannot be undone.`,confirmText:"Delete",variant:"danger",onConfirm:async()=>{$(e=>e?{...e,loading:!0}:null),k(!0);try{let e=F.map(e=>e.id),s=await Promise.all(e.map(e=>fetch(`/api/combos/${e}`,{method:"DELETE"}))),a=F.filter((e,t)=>s[t]?.ok),l=new Set(a.map(e=>e.id)),o=e.length-a.length;a.length>0&&(await I(B(a.map(e=>e.name))),t(e=>e.filter(e=>!l.has(e.id))),N(e=>e.filter(e=>!l.has(e)))),$(null),o>0&&alert(`Deleted with ${o} failure${1===o?"":"s"}.`)}catch(e){console.log("Error bulk deleting combos:",e),alert("Failed to delete selected combos"),$(e=>e?{...e,loading:!1}:null)}finally{k(!1)}}})},className:"whitespace-nowrap",children:["Delete (",w.length,")"]}),(0,a.jsx)(o.Button,{size:"sm",variant:"ghost",onClick:()=>N([]),disabled:v,children:"Clear"})]})})]}),(0,a.jsx)("div",{className:"flex flex-col gap-3",children:e.map(e=>(0,a.jsx)(d,{combo:e,getCaps:C,activeProviders:h,copied:E,onCopy:D,onEdit:()=>p(e),onDelete:()=>R(e.id),strategy:g[e.name]||{},onSetStrategy:t=>J(e.name,t),selected:w.includes(e.id),onToggleSelect:()=>{var t;return t=e.id,void N(e=>e.includes(t)?e.filter(e=>e!==t):[...e,t])}},e.id))})]}),m&&(0,a.jsx)(o.ComboFormModal,{isOpen:m,onClose:()=>x(!1),onSave:M,activeProviders:h},"create"),u&&(0,a.jsx)(o.ComboFormModal,{isOpen:!!u,combo:u,onClose:()=>p(null),onSave:e=>_(u.id,e),activeProviders:h},u.id),(0,a.jsx)(o.ConfirmModal,{isOpen:!!S,onClose:()=>!S?.loading&&$(null),onConfirm:S?.onConfirm,title:S?.title||"Confirm",message:S?.message,confirmText:S?.confirmText||"Confirm",variant:S?.variant||"danger",loading:!!S?.loading})]})}s(31038);let c=[{value:"fallback",label:"Fallback — try in order"},{value:"round-robin",label:"Round Robin — rotate"},{value:"fusion",label:"Fusion — panel + judge"}];function d({combo:e,getCaps:t,activeProviders:s=[],copied:r,onCopy:i,onEdit:n,onDelete:m,strategy:x={},onSetStrategy:u,selected:p=!1,onToggleSelect:h}){let[f,g]=(0,l.useState)(!1),b=x.fallbackStrategy||"fallback",y=x.judgeModel||"";return(0,a.jsxs)(o.Card,{padding:"sm",className:`group ${p?"ring-1 ring-primary/40 bg-primary/[0.03]":""}`,children:[(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 items-start gap-3 sm:items-center",children:[(0,a.jsx)("label",{className:"flex shrink-0 items-center pt-1 sm:pt-0 cursor-pointer",title:"Select combo",children:(0,a.jsx)("input",{type:"checkbox",checked:p,onChange:h,onClick:e=>e.stopPropagation(),className:"h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary","aria-label":`Select ${e.name}`})}),(0,a.jsx)("div",{className:"size-8 rounded-lg bg-primary/10 flex items-center justify-center shrink-0",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-primary text-[18px]",children:"layers"})}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("code",{className:"block truncate font-mono text-sm font-medium",children:e.name}),(0,a.jsxs)("div",{className:"mt-1 flex min-w-0 flex-wrap items-center gap-1",children:[0===e.models.length?(0,a.jsx)("span",{className:"text-xs text-text-muted italic",children:"No models"}):e.models.slice(0,3).map((e,s)=>(0,a.jsxs)("code",{className:"inline-flex items-center gap-1 rounded bg-black/5 px-1.5 py-0.5 font-mono text-xs text-text-muted dark:bg-white/5",children:[(0,a.jsx)("span",{children:e}),(0,a.jsx)(o.CapacityBadges,{caps:t?.(e)})]},s)),e.models.length>3&&(0,a.jsxs)("span",{className:"text-[10px] text-text-muted",children:["+",e.models.length-3," more"]})]}),e.models.length>0&&e.models.every(e=>t?.(e)?.vision===!1)&&(0,a.jsxs)("button",{type:"button",onClick:n,className:"mt-1 inline-flex items-center gap-1 text-[11px] text-amber-600 hover:text-amber-700 dark:text-amber-400 dark:hover:text-amber-300",title:"Edit combo to add a vision-capable model",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"visibility_off"}),"Cannot see images — edit combo"]}),"fusion"===b&&(0,a.jsxs)("div",{className:"mt-2 flex min-w-0 flex-wrap items-center gap-1.5",children:[(0,a.jsx)("span",{className:"text-[11px] font-medium text-text-muted",children:"Judge"}),(0,a.jsxs)("button",{onClick:()=>g(!0),className:"inline-flex max-w-full items-center gap-1 rounded border border-dashed border-primary/40 px-1.5 py-0.5 font-mono text-[11px] text-primary hover:border-primary hover:bg-primary/5 transition-colors",title:"Pick the model that fuses panel answers",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[13px]",children:"gavel"}),(0,a.jsx)("span",{className:"truncate",children:y||`Auto — ${e.models[0]||"first model"}`})]}),y&&(0,a.jsx)("button",{onClick:()=>u({judgeModel:""}),className:"p-0.5 rounded text-text-muted hover:text-red-500 hover:bg-red-500/10 transition-colors",title:"Reset judge to Auto",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[13px]",children:"close"})})]})]})]}),(0,a.jsxs)("div",{className:"flex w-full flex-col gap-2 sm:w-auto sm:flex-row sm:items-center sm:gap-3 sm:shrink-0",children:[(0,a.jsx)("div",{className:"w-full sm:w-[200px]",children:(0,a.jsx)(o.Select,{options:c,value:b,onChange:e=>u({fallbackStrategy:e.target.value}),selectClassName:"py-1.5 text-xs"})}),(0,a.jsxs)("div",{className:"grid grid-cols-3 gap-1 sm:flex",children:[(0,a.jsxs)("button",{onClick:t=>{t.stopPropagation(),i(e.name,`combo-${e.id}`)},className:"flex flex-col items-center rounded px-2 py-1 text-text-muted transition-colors hover:bg-black/5 hover:text-primary dark:hover:bg-white/5",title:"Copy combo name",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:r===`combo-${e.id}`?"check":"content_copy"}),(0,a.jsx)("span",{className:"text-[10px] leading-tight",children:"Copy"})]}),(0,a.jsxs)("button",{onClick:n,className:"flex flex-col items-center rounded px-2 py-1 text-text-muted transition-colors hover:bg-black/5 hover:text-primary dark:hover:bg-white/5",title:"Edit",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"edit"}),(0,a.jsx)("span",{className:"text-[10px] leading-tight",children:"Edit"})]}),(0,a.jsxs)("button",{onClick:m,className:"flex flex-col items-center rounded px-2 py-1 text-red-500 transition-colors hover:bg-red-500/10",title:"Delete",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"delete"}),(0,a.jsx)("span",{className:"text-[10px] leading-tight",children:"Delete"})]})]})]})]}),f&&(0,a.jsx)(o.ModelSelectModal,{isOpen:f,onClose:()=>g(!1),onSelect:e=>{u({judgeModel:e?.value||""}),g(!1)},activeProviders:s,title:"Select Judge Model",addedModelValues:y?[y]:[],closeOnSelect:!0})]})}},85479:(e,t,s)=>{"use strict";s.d(t,{y:()=>i});var a=s(82030),l=s(24332);let o=null,r=null;function i(){let[e,t]=(0,a.useState)(()=>o?.byFull||{}),[s,i]=(0,a.useState)(()=>o?.byId||{});return(0,a.useEffect)(()=>{if(o)return;let e=!0;return(o?Promise.resolve(o):r||(r=fetch("/api/models").then(async e=>{if(!e.ok)throw Error(`models ${e.status}`);return o=function(e){let t={},s={};for(let a of e||[])a.caps&&(a.fullModel&&(t[a.fullModel]=a.caps),a.routedModel&&(t[a.routedModel]=a.caps),a.model&&(s[a.model]=a.caps));return{byFull:t,byId:s}}((await e.json()).models)}).catch(()=>({byFull:{},byId:{}})).finally(()=>{r=null}))).then(s=>{e&&(t(s.byFull),i(s.byId))}),()=>{e=!1}},[]),{getCaps:(0,a.useCallback)(t=>(function(e,t,s){if(!s)return null;if(e[s])return e[s];let a=s.includes("/")?s.slice(s.indexOf("/")+1):s;if(t[a])return t[a];let o=s.includes("/")?s.slice(0,s.indexOf("/")):null,r=(0,l.nl)(o,a);return{vision:r.vision,search:r.search,reasoning:r.reasoning,contextWindow:r.contextWindow,maxOutput:r.maxOutput}})(e,s,t),[e,s])}}}},e=>{e.O(0,[3885,7523,7236,4385,736,2147,3204,7358],()=>e(e.s=1117)),_N_E=e.O()}]);
|
package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-85770718a5ce696c.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3826],{5244:(e,t,r)=>{Promise.resolve().then(r.bind(r,30742)),Promise.resolve().then(r.bind(r,70665)),Promise.resolve().then(r.bind(r,47056))},30742:(e,t,r)=>{"use strict";r.d(t,{default:()=>d});var a=r(15102),s=r(82030),i=r(62758),l=r(97955);let n={daily:"Daily",weekly:"Weekly",monthly:"Monthly","one-time":"One-time",rolling:"Rolling"},o={daily:{variant:"success"},weekly:{variant:"info"},"one-time":{variant:"warning"},monthly:{variant:"default",className:"bg-purple-500/10 text-purple-600 dark:text-purple-400"},rolling:{variant:"default",className:"bg-cyan-500/10 text-cyan-600 dark:text-cyan-400"}};function d({tiers:e=[]}){let[t,r]=(0,s.useState)(null),[c,u]=(0,s.useState)(""),[m,x]=(0,s.useState)(!1);(0,s.useEffect)(()=>{let e=!1;return fetch("/api/providers",{cache:"no-store"}).then(e=>e.ok?e.json():null).then(t=>{if(e||!t)return;let a=new Set;for(let e of t.connections||[])!1!==e.isActive&&(e.provider&&a.add(e.provider),e.alias&&a.add(e.alias));r(a)}).catch(()=>{e||r(new Set)}),()=>{e=!0}},[]);let h=(0,s.useMemo)(()=>{let r=new Map;for(let t of e){let e=t.providerId;r.has(e)||r.set(e,{id:e,name:t.providerName||e,alias:t.providerAlias||null,refresh:t.freeRefresh||null,models:[]});let a=r.get(e);!a.refresh&&t.freeRefresh&&(a.refresh=t.freeRefresh),t.modelId&&a.models.push({id:t.modelId,name:t.modelName||t.modelId})}let a=c.trim().toLowerCase(),s=[...r.values()].map(e=>({...e,connected:!!(t&&(t.has(e.id)||e.alias&&t.has(e.alias)))}));return(a?s.filter(e=>e.name.toLowerCase().includes(a)||(e.alias||"").toLowerCase().includes(a)||e.models.some(e=>e.name.toLowerCase().includes(a)||e.id.toLowerCase().includes(a))):s).sort((e,t)=>e.connected!==t.connected?e.connected?-1:1:e.name.localeCompare(t.name))},[e,t,c]),p=h.filter(e=>e.connected).length,b=t?h.length-p:0,g=m||c.trim()?h:h.filter(e=>e.connected);return(0,a.jsx)(i.A,{padding:"lg",title:"Available free tiers",subtitle:"Provider free allowances from the registry. Connected providers first; the rest are behind the toggle.",children:0===e.length?(0,a.jsx)("p",{className:"py-6 text-center text-sm text-text-muted",children:"No free tiers found."}):(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsx)("input",{type:"search",value:c,onChange:e=>u(e.target.value),placeholder:"Filter by provider or model…","aria-label":"Filter free tiers by provider or model",className:"min-w-[12rem] flex-1 rounded border border-border bg-surface px-2.5 py-1.5 text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,a.jsxs)("span",{className:"text-[11px] text-text-muted",children:[p," connected",null===t?" (checking…)":` \xb7 ${b} without an account`]}),b>0&&!c.trim()&&(0,a.jsxs)("button",{type:"button",onClick:()=>x(e=>!e),"aria-pressed":m,className:"rounded border border-border px-2.5 py-1.5 text-xs text-text-muted transition-colors hover:border-primary hover:text-primary",children:[m?"Hide":"Show"," providers without an account"]})]}),0===g.length?(0,a.jsx)("p",{className:"py-6 text-center text-sm text-text-muted",children:null===t?"Checking your connections…":"No free tier matches. Add a connection for a provider below, or clear the filter."}):(0,a.jsx)("div",{className:"flex flex-col divide-y divide-black/5 dark:divide-white/5",children:g.map(e=>{let r=o[e.refresh]||{variant:"default"};return(0,a.jsxs)("div",{className:"flex flex-col gap-1.5 py-3",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsx)("span",{className:"text-sm font-medium text-text-primary",children:e.name}),e.alias&&e.alias!==e.name&&(0,a.jsx)("span",{className:"font-mono text-[10px] text-text-muted",children:e.alias}),e.connected?(0,a.jsx)(l.A,{size:"sm",variant:"success",children:"Connected"}):t?(0,a.jsx)("span",{className:"text-[11px] italic text-text-muted",children:"no account yet"}):null,e.refresh?(0,a.jsx)(l.A,{size:"sm",variant:r.variant,className:r.className,children:n[e.refresh]||e.refresh}):(0,a.jsx)("span",{className:"text-xs italic text-text-muted",title:"Reset cadence not documented","aria-label":"Reset cadence not documented",children:"—"}),(0,a.jsx)("span",{className:"ml-auto text-[11px] text-text-muted",children:0===e.models.length?"free tier available":`${e.models.length} free model${e.models.length>1?"s":""}`})]}),e.models.length>0&&(0,a.jsx)("div",{className:"flex flex-wrap gap-1.5",children:e.models.map(e=>(0,a.jsx)("span",{title:e.id,className:"rounded bg-black/[0.04] px-1.5 py-0.5 font-mono text-[11px] text-text-muted dark:bg-white/[0.06]",children:e.name},e.id))})]},e.id)})})]})})}},70665:(e,t,r)=>{"use strict";r.d(t,{default:()=>R});var a=r(15102),s=r(82030),i=r(93278),l=r(31704),n=r(51427);let o=new Set(["antigravity","gemini-cli","cursor"]),d="quotaCacheData",c="quotaAutoRefresh",u=[10,20,50,100],m=[{value:"all",label:"All accounts"},{value:"active",label:"Active"},{value:"inactive",label:"Turned off"}],x=[{value:"default",label:"Default quota order"},{value:"remaining-asc",label:"% quota: low to high"},{value:"remaining-desc",label:"% quota: high to low"}];function h(e){return e.name?.trim()||e.email?.trim()||e.displayName?.trim()||null}function p(e,t){let r=t[e.id]?.quotas?.[0];return r&&"number"==typeof r.remaining?r.remaining:1/0}function b(e){let t={};return e.forEach(e=>{t[e.id]=!0}),t}function g(e,t){let r=new Set(t.map(e=>e.id));return Object.fromEntries(Object.entries(e).filter(([e])=>r.has(e)))}async function f(e,t){return await e(t)}function y(){try{let e=window.localStorage.getItem(d);return e?JSON.parse(e):{}}catch(e){return console.error("Error reading quota cache:",e),{}}}function v(e,t){try{let r=y();r[e]={...t,cachedAt:new Date().toISOString()},window.localStorage.setItem(d,JSON.stringify(r))}catch(e){console.error("Error writing quota cache:",e)}}function w(e,t){return t&&0!==t?!e||e<0?100:e>=t?0:Math.round((t-e)/t*100):0}let k=[];function j({quotas:e=k,compact:t=!1,sortMode:r="default",showSortLabel:i=!1}){let[l,n]=(0,s.useState)(1),o=(0,s.useMemo)(()=>e.map((e,t)=>({...e,index:t,remaining:e?.remaining!==void 0?Math.max(0,Math.round(e.remaining)):e?.remainingPercentage!==void 0?Math.round(e.remainingPercentage):w(e?.used,e?.total)})),[e]),d=(0,s.useMemo)(()=>"remaining-asc"===r?o.toSorted((e,t)=>e.remaining-t.remaining||e.name.localeCompare(t.name)):"remaining-desc"===r?o.toSorted((e,t)=>t.remaining-e.remaining||e.name.localeCompare(t.name)):o,[o,r]),c=Math.max(1,Math.ceil(d.length/10)),[u,m]=(0,s.useState)(r),[x,h]=(0,s.useState)(e),[p,b]=(0,s.useState)(c);if(r!==u||e!==x?(m(r),h(e),b(c),n(1)):c!==p&&(b(c),n(e=>Math.min(e,c))),!e||0===e.length)return null;let g=d.slice((l-1)*10,10*l),f=0===d.length?0:(l-1)*10+1,y=Math.min(10*l,d.length),v=t?"py-1 px-1.5":"py-2 px-3",N=t?"text-[11px]":"text-sm",C=t?"text-[11px]":"text-sm",S=t?"text-[10px] leading-tight":"text-xs";return(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"text-[10px] text-text-muted",children:[d.length," quota",d.length>1?"s":""]}),i&&(0,a.jsx)("div",{className:"rounded-md border border-black/10 bg-black/[0.02] px-2 py-1 text-[10px] text-text-muted dark:border-white/10 dark:bg-white/[0.03]",children:"Sorted by account remaining"})]}),(0,a.jsx)("div",{className:"overflow-x-auto",children:(0,a.jsx)("table",{className:"w-full min-w-[420px] table-fixed text-left",children:(0,a.jsx)("tbody",{children:g.map(e=>{var r;let s=!0===e.unlimited,i=!0===e.isCreditBalance,l=i?{text:"text-blue-600 dark:text-blue-400",bg:"bg-blue-500",bgLight:"bg-blue-500/10",emoji:"\uD83D\uDCB0"}:(r=e.remaining)>70?{text:"text-green-600 dark:text-green-400",bg:"bg-green-500",bgLight:"bg-green-500/10",emoji:"\uD83D\uDFE2"}:r>=30?{text:"text-yellow-600 dark:text-yellow-400",bg:"bg-yellow-500",bgLight:"bg-yellow-500/10",emoji:"\uD83D\uDFE1"}:{text:"text-red-600 dark:text-red-400",bg:"bg-red-500",bgLight:"bg-red-500/10",emoji:"\uD83D\uDD34"},n=e.neverExpires?"-":function(e){if(!e)return"-";try{let t="string"==typeof e?new Date(e):e,r=new Date,a=t-r;if(a<=0)return"-";let s=Math.ceil(a/6e4);if(s<60)return`${s}m`;let i=Math.floor(s/60),l=s%60;if(i<24)return`${i}h ${l}m`;let n=Math.floor(i/24);return`${n}d ${i%24}h ${l}m`}catch(e){return"-"}}(e.resetAt),o=!e.neverExpires&&!e.resetAt&&!!e.detailUrl,d=e.neverExpires?"Never expires":o?"See details":function(e){if(!e)return null;try{let t=new Date(e),r=new Date,a=new Date(r.getFullYear(),r.getMonth(),r.getDate()),s=new Date(a);s.setDate(s.getDate()+1);let i="";i=t>=a&&t<s?"Today":t>=s&&t<new Date(s.getTime()+864e5)?"Tomorrow":t.toLocaleDateString("en-US",{month:"short",day:"numeric"});let l=t.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0});return`${i}, ${l}`}catch{return null}}(e.resetAt),c=o&&e.detailUrl?e.detailUrl:d,u=!1!==e.recurring?`in ${n}`:`expires in ${n}`;return(0,a.jsxs)("tr",{className:"border-b border-black/5 dark:border-white/5 hover:bg-black/[0.02] dark:hover:bg-white/[0.02] transition-colors",children:[(0,a.jsx)("td",{className:`${v} w-[30%]`,children:(0,a.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[(0,a.jsx)("span",{className:"text-[10px] shrink-0",children:l.emoji}),(0,a.jsx)("span",{className:`${N} font-medium text-text-primary truncate`,children:e.name})]})}),(0,a.jsx)("td",{className:`${v} w-[45%]`,children:(0,a.jsxs)("div",{className:t?"space-y-1":"space-y-1.5",children:[!s&&!i&&(0,a.jsx)("div",{className:`${t?"h-1":"h-1.5"} rounded-full overflow-hidden border ${l.bgLight} ${0===e.remaining?"border-black/10 dark:border-white/10":"border-transparent"}`,children:(0,a.jsx)("div",{className:`h-full transition-all duration-300 ${l.bg}`,style:{width:`${Math.min(e.remaining,100)}%`}})}),(0,a.jsxs)("div",{className:`flex items-center justify-between ${t?"text-[10px]":"text-xs"}`,children:[(0,a.jsx)("span",{className:"text-text-muted",title:s?`${e.used.toLocaleString()} used \xb7 Unlimited`:i?`Credit balance: ${e.total.toFixed(2)} ${e.currency||""}`:`${e.used.toLocaleString()} / ${e.total>0?e.total.toLocaleString():"∞"}`,children:s?`${e.used.toLocaleString()} used \xb7 Unlimited`:i?`Credit: ${e.total.toFixed(2)} ${e.currency||""}`:`${e.used.toLocaleString()} / ${e.total>0?e.total.toLocaleString():"∞"}`}),(0,a.jsx)("span",{className:`font-medium ${s?"text-green-600 dark:text-green-400":l.text}`,children:s?"Unlimited":i?"":`${e.remaining}%`})]})]})}),(0,a.jsx)("td",{className:`${v} w-[25%]`,children:"-"!==n||d?t?(0,a.jsx)("div",{className:`${C} text-text-primary font-medium truncate`,title:c||"",children:"-"!==n?u:d}):(0,a.jsxs)("div",{className:"space-y-0.5",children:["-"!==n&&(0,a.jsx)("div",{className:`${C} text-text-primary font-medium`,children:u}),o?(0,a.jsxs)("a",{href:e.detailUrl,target:"_blank",rel:"noopener noreferrer",className:`${S} text-text-muted inline-flex items-center gap-0.5 hover:text-text-primary hover:underline`,title:`Open usage details: ${c}`,"aria-label":`Open usage details for ${e.name}`,children:[d,(0,a.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"open_in_new"})]}):d&&(0,a.jsx)("div",{className:`${S} text-text-muted`,children:d})]}):(0,a.jsx)("div",{className:`${C} text-text-muted italic`,children:"N/A"})})]},`${e.name}-${e.index}`)})})})}),c>1&&(0,a.jsxs)("div",{className:"rounded-md border border-black/10 bg-black/[0.02] px-2 py-1.5 dark:border-white/10 dark:bg-white/[0.03]",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2 text-[10px] text-text-muted",children:[(0,a.jsxs)("span",{children:["Showing ",f,"-",y," of ",d.length]}),(0,a.jsxs)("span",{children:["Page ",l," / ",c]})]}),(0,a.jsxs)("div",{className:"mt-1.5 flex items-center justify-end gap-1",children:[(0,a.jsx)("button",{type:"button",onClick:()=>n(e=>Math.max(1,e-1)),disabled:1===l,className:"flex h-6 items-center rounded-md border border-black/10 px-2 text-[10px] text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5",children:"Prev"}),(0,a.jsx)("button",{type:"button",onClick:()=>n(e=>Math.min(c,e+1)),disabled:l===c,className:"flex h-6 items-center rounded-md border border-black/10 px-2 text-[10px] text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5",children:"Next"})]})]})]})}var N=r(52252),C=r(18419),S=r(62758),A=r(10736),$=r(31038),P=r(21577);let E={"builder-id":"AWS Builder ID",idc:"IAM Identity Center",google:"Google",github:"GitHub",imported:"Imported Token",api_key:"API Key"},q={claude:"claudeAutoPing",codex:"codexAutoPing"},D={claude:"When your 5h quota runs out, auto-sends a request the moment it resets so a new window starts right away.",codex:"Auto-starts the next 5h Codex window after reset by sending a tiny gpt-5.5 request. Consumes a small amount of quota."};function T(e){return e.name?.trim()&&e.email?.trim()&&e.name.trim()!==e.email.trim()?e.email.trim():e.name?.trim()&&e.displayName?.trim()&&e.name.trim()!==e.displayName.trim()?e.displayName.trim():null}function M(e){let t=e.providerSpecificData?.region;if(t)return t;let r=e.providerSpecificData?.profileArn;return("string"==typeof r?r.split(":")[3]:"")||""}let _={five_hour:"session",seven_day:"weekly",seven_day_overage_included:"weekly",seven_day_opus:"Opus weekly",seven_day_sonnet:"Sonnet weekly"};function L(e){let t=[...new Set((e||[]).map(e=>_[e]).filter(Boolean))];return t.length?`${t.join(" + ")} limits`:"limits"}function O(e){if(!e)return"N/A";let t=new Date(e);return Number.isFinite(t.getTime())?t.toLocaleString(void 0,{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit"}):"N/A"}function I(e){if(!e)return"N/A";let t=new Date(e).getTime()-Date.now();if(!Number.isFinite(t))return"N/A";if(t<=0)return"Expired";let r=Math.ceil(t/36e5),a=Math.floor(r/24),s=r%24;return a>0?`${a}d ${s}h`:`${s}h`}function R(){let e,{copied:t,copy:r}=(0,P.C)(),k=(0,i.useSearchParams)(),_=(0,i.useRouter)(),R=(0,i.usePathname)(),[F,U]=(0,s.useState)([]),[z,B]=(0,s.useState)({}),[J,K]=(0,s.useState)({}),[W,G]=(0,s.useState)({}),[H,V]=(0,s.useState)(!0),[Y,Q]=(0,s.useState)({claude:{},codex:{}}),[X,Z]=(0,s.useState)(null),[ee,et]=(0,s.useState)(!1),[er,ea]=(0,s.useState)(!1),[es,ei]=(0,s.useState)(60),[el,en]=(0,s.useState)(!0),[eo,ed]=(0,s.useState)(null),[ec,eu]=(0,s.useState)(null),[em,ex]=(0,s.useState)(null),[eh,ep]=(0,s.useState)(null),[eb,eg]=(0,s.useState)(null),[ef,ey]=(0,s.useState)(!1),[ev,ew]=(0,s.useState)(null),[ek,ej]=(0,s.useState)([]),[eN,eC]=(0,s.useState)(()=>k?.get("provider")||"all"),eS=(0,s.useCallback)(e=>{eC(e);try{let t=new URLSearchParams(k?.toString()||"");"all"===e?t.delete("provider"):t.set("provider",e);let r=t.toString()?`${R}?${t.toString()}`:R;_.replace(r,{scroll:!1})}catch{}},[R,_,k]),[eA,e$]=(0,s.useState)([]),[eP,eE]=(0,s.useState)("all"),[eq,eD]=(0,s.useState)("all"),[eT,eM]=(0,s.useState)("default"),[e_,eL]=(0,s.useState)(!1),[eO,eI]=(0,s.useState)(!1),[eR,eF]=(0,s.useState)(!1),[eU,ez]=(0,s.useState)(!1),[eB,eJ]=(0,s.useState)(1),[eK,eW]=(0,s.useState)(20),[eG,eH]=(0,s.useState)(String(20)),[eV,eY]=(0,s.useState)({page:1,pageSize:20,total:0,totalPages:1}),[eQ,eX]=(0,s.useState)({eligibleConnections:0,providerFilteredConnections:0}),eZ=(0,s.useRef)(null),e0=(0,s.useRef)(null),e1=(0,s.useRef)(0),e5=(0,s.useRef)((e=0,{begin:()=>++e,isLatest:t=>t===e})),e2=(0,s.useRef)(!1);(0,s.useEffect)(()=>{let e=k?.get("provider")||"all";eC(t=>t===e?t:e)},[k]);let e3=(0,s.useCallback)(async(e=eB)=>{let t=e5.current.begin();try{var r,a;let s=new URLSearchParams({page:String(e),pageSize:String(eK),accountStatus:eq,sort:"priority"});"all"!==eN&&s.set("provider",eN);let i=await fetch(`/api/providers/client?${s.toString()}`,{cache:"no-store"});if(!i.ok)throw Error("Failed to fetch connections");let l=await i.json();if(!e5.current.isLatest(t))return null;let n=l.connections||[],o=(r=l.pagination,r||{page:1,pageSize:eK,total:0,totalPages:1}),d=function(e,t=0){return e||{eligibleConnections:t,providerFilteredConnections:t}}(l.totals,n.length);return U(n),e$(l.providerOptions||[]),eY(o),eX(d),eJ((a=l.pagination,a?.page||e)),n}catch(e){if(!e5.current.isLatest(t))return null;return console.error("Error fetching connections:",e),U([]),e$([]),eY({page:1,pageSize:eK,total:0,totalPages:1}),eX({eligibleConnections:0,providerFilteredConnections:0}),[]}},[eq,eB,eK,eN]),e4=(0,s.useCallback)(async(e,t,{force:r=!1}={})=>{K(t=>({...t,[e]:!0})),G(t=>({...t,[e]:null}));try{console.log(`[ProviderLimits] Fetching quota for ${t} (${e})`);let a=await fetch(`/api/usage/${e}${r?"?force=1":""}`,{cache:"no-store"});if(!a.ok){let r=(await a.json().catch(()=>({}))).error||a.statusText;if(404===a.status)return void console.warn(`[ProviderLimits] Connection not found for ${t}, skipping`);if(401===a.status){console.warn(`[ProviderLimits] Auth error for ${t}:`,r);let a={quotas:[],message:r};B(t=>({...t,[e]:a})),v(e,a);return}throw Error(`HTTP ${a.status}: ${r}`)}let s=await a.json();console.log(`[ProviderLimits] Got quota for ${t}:`,s);let i={quotas:function(e,t){if(!t||"object"!=typeof t)return[];let r=[];try{switch(e.toLowerCase()){case"github":default:t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"antigravity":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:t.displayName||e,modelKey:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});break;case"codex":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{let a=e;"spark_session"===e?a="Spark (5h)":"spark_weekly"===e?a="Spark (Weekly)":"session"===e?a="5h":"weekly"===e?a="Weekly":"review_session"===e?a="Review (5h)":"review_weekly"===e&&(a="Review (Weekly)"),r.push({name:a,quotaType:e,used:t.used||0,total:t.total||0,remaining:t.remaining,resetAt:t.resetAt||null})});break;case"kiro":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"qoder":case"qoder-cn":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{t&&0!==(Number(t.total)||0)&&r.push({name:"user"===e?"Personal":"organization"===e?"Organization":"addOn"===e?"Add-on":e,used:t.used||0,total:t.total||0,unit:t.unit,resetAt:t.resetAt||null,neverExpires:!0===t.neverExpires,detailUrl:t.detailUrl||null})});break;case"cursor":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});break;case"claude":t.message?r.push({name:"error",used:0,total:0,resetAt:null,message:t.message}):t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"vercel-ai-gateway":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});break;case"codebuddy-cn":case"codebuddy-intl":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,recurring:!1!==t.recurring})});break;case"kimi":case"deepseek":t.quotas&&Object.entries(t.quotas).forEach(([t,a])=>{r.push({name:t,used:a.used||0,total:a.total||0,resetAt:a.resetAt||null,remainingPercentage:a.remainingPercentage,..."deepseek"===e.toLowerCase()?{isCreditBalance:!0===a.isCreditBalance,currency:a.currency||"USD"}:{}})});break;case"freebuff":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:t.displayName||e,modelKey:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,recurring:!1!==t.recurring})});break;case"grok-cli":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});break;case"zed":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage,unlimited:t.unlimited})});break;case"minimax-code":case"minimax-code-global":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,remaining:t.remaining,remainingPercentage:t.remainingPercentage,resetAt:t.resetAt||null,message:t.message,isCreditBalance:t.isCreditBalance,currency:t.currency})})}}catch(t){return console.error(`Error parsing quota data for ${e}:`,t),[]}let a=(0,n.KC)(e);if(a.length>0){let e=new Map(a.map((e,t)=>[e.id,t]));r.sort((t,r)=>{let a=t.modelKey||t.name,s=r.modelKey||r.name;return(e.get(a)??999)-(e.get(s)??999)})}return r}(t,s),plan:s.plan||null,message:s.message||null,raw:s};B(t=>({...t,[e]:i})),v(e,i)}catch(r){console.error(`[ProviderLimits] Error fetching quota for ${t} (${e}):`,r),G(t=>({...t,[e]:r.message||"Failed to fetch quota"}))}finally{K(t=>({...t,[e]:!1}))}},[]),e8=(0,s.useCallback)(async(e,t)=>{await e4(e,t,{force:!0}),Z(new Date)},[e4]),e6=(0,s.useCallback)(async(e,t)=>{if(("codex"===t||"claude"===t)&&!em){ex(e),G(t=>({...t,[e]:null}));try{let r="claude"===t?await fetch(`/api/usage/${e}/claude-reset`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({grantId:z[e]?.raw?.resetCredits?.nextGrantId})}):await fetch(`/api/usage/${e}/codex-reset-credits`,{method:"POST"}),a=await r.json().catch(()=>({}));if(!r.ok)throw Error(a.message||a.error||a.code||"Failed to reset limit");await e4(e,t,{force:!0}),Z(new Date)}catch(t){G(r=>({...r,[e]:t.message||"Failed to reset limit"}))}finally{ex(null)}}},[e4,em,z]),e7=(0,s.useCallback)((e,t)=>{eg({connection:e,loading:!1,error:null,data:{kind:"claude",...t}})},[]),e9=(0,s.useCallback)(async e=>{eg({connection:e,loading:!0,error:null,data:null});try{let t=await fetch(`/api/usage/${e.id}/codex-reset-credits`,{cache:"no-store"}),r=await t.json().catch(()=>({}));if(!t.ok)throw Error(r.error||r.message||"Failed to load Codex reset credits");let a=Array.isArray(r.credits)?[...r.credits]:[];a.sort((e,t)=>{let r=e.expiresAt?new Date(e.expiresAt).getTime():1/0,a=t.expiresAt?new Date(t.expiresAt).getTime():1/0;return r-a}),eg({connection:e,loading:!1,error:null,data:{...r,credits:a}})}catch(t){eg({connection:e,loading:!1,error:t.message||"Failed to load Codex reset credits",data:null})}},[]),te=(0,s.useCallback)(async e=>{if(confirm("Delete this connection?")){ed(e);try{if((await fetch(`/api/providers/${e}`,{method:"DELETE"})).ok){B(t=>{let r={...t};return delete r[e],r}),K(t=>{let r={...t};return delete r[e],r}),G(t=>{let r={...t};return delete r[e],r});try{let t=y();t[e]&&(delete t[e],window.localStorage.setItem(d,JSON.stringify(t)))}catch(e){console.error("Error deleting cache entry:",e)}await f(e3,eB)}}catch(e){console.error("Error deleting connection:",e)}finally{ed(null)}}},[e3,eB]),tt=(0,s.useCallback)(async(e,t)=>{eu(e);try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})})).ok&&(B(e=>({...e})),await f(e3,eB))}catch(e){console.error("Error updating connection status:",e)}finally{eu(null)}},[e3,eB]),tr=(0,s.useCallback)(async e=>{if(!ev?.id)return;let t=ev.id,r=ev.provider;try{(await fetch(`/api/providers/${t}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).ok&&(await e3(),ey(!1),ew(null),$.wb.includes(r)&&await e4(t,r))}catch(e){console.error("Error saving connection:",e)}},[ev,e3,e4]);(0,s.useEffect)(()=>{let e=!1;return fetch("/api/proxy-pools?isActive=true",{cache:"no-store"}).then(e=>e.json()).then(t=>{!e&&t?.proxyPools&&ej(t.proxyPools)}).catch(()=>{}),()=>{e=!0}},[]);let ta=(0,s.useCallback)(async(e=!1)=>{if(e2.current)return;e2.current=!0,ea(!0),ei(60);let t=e1.current+=1,r=Math.round(10);try{let a=await e3(eB);if(!a)return;K(b(a)),G(e=>g(e,a)),B(e=>g(e,a)),await Promise.all(a.filter(a=>e||"claude"!==a.provider||t%r==0).map(e=>e4(e.id,e.provider))),Z(new Date)}catch(e){console.error("Error refreshing all providers:",e)}finally{e2.current=!1,ea(!1)}},[e3,e4,eB]);(0,s.useEffect)(()=>{let e=!1;return(async()=>{en(!0);let t=await e3(eB);e||(en(!1),!t||(K(b(t)),G(e=>g(e,t)),B(e=>g(e,t)),await Promise.all(t.map(e=>e4(e.id,e.provider))),e||Z(new Date)))})(),()=>{e=!0}},[e3,e4,eB]),(0,s.useEffect)(()=>{let e=window.localStorage.getItem(c);V(null===e||"true"===e),et(!0)},[]),(0,s.useEffect)(()=>{ee&&window.localStorage.setItem(c,String(H))},[H,ee]),(0,s.useEffect)(()=>{fetch("/api/settings",{cache:"no-store"}).then(e=>e.ok?e.json():{}).then(e=>Q({claude:e?.claudeAutoPing?.connections||{},codex:e?.codexAutoPing?.connections||{}})).catch(()=>{})},[]);let ts=(0,s.useCallback)(async(e,t,r)=>{let a=q[t];if(!a)return;let s={...Y[t]||{},[e]:r};Q({...Y,[t]:s});try{let e=await fetch("/api/settings",{cache:"no-store"}),t={...(e.ok?await e.json():{})[a]||{},connections:s};await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({[a]:t})})}catch{Q(Y)}},[Y]);(0,s.useEffect)(()=>{if(!ee||!H){eZ.current&&(clearInterval(eZ.current),eZ.current=null),e0.current&&(clearInterval(e0.current),e0.current=null);return}return eZ.current=setInterval(()=>{ta()},6e4),e0.current=setInterval(()=>{ei(e=>e<=1?60:e-1)},1e3),()=>{eZ.current&&clearInterval(eZ.current),e0.current&&clearInterval(e0.current)}},[H,ta,ee]),(0,s.useEffect)(()=>{let e=()=>{document.hidden?(eZ.current&&(clearInterval(eZ.current),eZ.current=null),e0.current&&(clearInterval(e0.current),e0.current=null)):H&&ee&&(eZ.current=setInterval(()=>ta(),6e4),e0.current=setInterval(()=>{ei(e=>e<=1?60:e-1)},1e3))};return document.addEventListener("visibilitychange",e),()=>{document.removeEventListener("visibilitychange",e)}},[H,ta,ee]),(0,s.useEffect)(()=>{eE("all")},[eN]);let ti=(0,s.useMemo)(()=>eN&&o.has(eN)?(0,n.KC)(eN).map(e=>({id:e.id,name:e.name||e.id})):[],[eN]),tl=(0,s.useMemo)(()=>(function(e,t,r,a,s){if("codex"===a&&"default"!==s)return[...e].sort((e,r)=>{let a=p(e,t),i=p(r,t),l="remaining-asc"===s?a-i:i-a;return 0!==l?l:(h(e)||"").localeCompare(h(r)||"")});if(!r){let t=new Map;for(let r of e){let e=r.provider||"";t.has(e)||t.set(e,[]),t.get(e).push(r)}return Array.from(t.values()).flat()}let i=e=>{let r=(t[e.id]?.quotas||[]).map(e=>e.resetAt?new Date(e.resetAt).getTime():1/0).filter(e=>Number.isFinite(e));return r.length>0?Math.min(...r):1/0};return[...e].sort((e,t)=>{let r=i(e)-i(t);return 0!==r?r:(e.provider||"").localeCompare(t.provider||"")||(h(e)||"").localeCompare(h(t)||"")})})("all"===eN?F:F.filter(e=>e.provider===eN),z,e_,eN,eT),[F,z,e_,eN,eT]),tn=e=>{let t=z[e.id]?.quotas;return!!t?.length&&t.some(e=>!!e.total&&!(e.total<=0)&&5>=w(e.used,e.total))},to=(0,s.useCallback)(async(e,t)=>{if(e.length&&!eR){eF(!0);try{await Promise.all(e.map(e=>fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})}))),await f(e3,eB)}catch(e){console.error("Error bulk toggling connections:",e)}finally{eF(!1)}}},[eR,e3,eB]),td=(0,s.useMemo)(()=>tl.filter(e=>(function(e,t,r){if(e?.provider!=="codex")return!1;let a="string"==typeof t?.message?t.message:"",s="string"==typeof r?r:"";return a.includes("Usage API temporarily unavailable (401)")||a.includes("temporarily unavailable (401)")||a.includes("Codex connected")&&a.includes("401")||s.includes("temporarily unavailable (401)")||s.includes("HTTP 401")})(e,z[e.id],W[e.id])).map(e=>e.id),[tl,z,W]),tc=(0,s.useCallback)(async()=>{if(td.length&&!eU&&confirm(`Delete ${td.length} Codex connection(s) with "Usage API temporarily unavailable (401)"?`)){ez(!0);try{await Promise.all(td.map(e=>fetch(`/api/providers/${e}`,{method:"DELETE"}))),B(e=>{let t={...e};for(let e of td)delete t[e];return t}),K(e=>{let t={...e};for(let e of td)delete t[e];return t}),G(e=>{let t={...e};for(let e of td)delete t[e];return t});try{let e=y(),t=!1;for(let r of td)e[r]&&(delete e[r],t=!0);t&&window.localStorage.setItem(d,JSON.stringify(e))}catch(e){console.error("Error deleting cache entries:",e)}await f(e3,eB)}catch(e){console.error("Error bulk deleting codex unavailable connections:",e)}finally{ez(!1)}}},[td,eU,e3,eB]),tu="all"===eN?"All providers":eN,tm=eQ.eligibleConnections>0,tx=tl.length>0,th=eQ.eligibleConnections?eQ.providerFilteredConnections?{icon:"filter_alt_off",title:"No Accounts On This Page",description:"Try moving to another page or refreshing the current filters."}:{icon:"filter_alt_off",title:"No Accounts Match Current Filters",description:"all"===eN?"Try changing the account status filter to see more quota trackers.":`No ${"inactive"===eq?"turned off":"active"===eq?"active":"matching"} accounts found for ${eN}.`}:{icon:"cloud_off",title:"No Providers Connected",description:"Connect to providers with OAuth to track your API quota limits and usage."},tp=function(e){var t;let{start:r,end:a}=(t=e).total?{start:(t.page-1)*t.pageSize+1,end:Math.min(t.page*t.pageSize,t.total)}:{start:0,end:0};return`Showing ${r}-${a} of ${e.total}`}(eV),tb=!u.includes(eK);return el||tm?el||tx?(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsx)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-end",children:(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsxs)("button",{type:"button",onClick:()=>eI(e=>!e),className:"flex h-8 items-center justify-between gap-1 rounded-lg border border-black/10 bg-black/[0.02] px-2 text-xs text-text-primary transition-colors hover:bg-black/5 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/10","aria-haspopup":"menu","aria-expanded":eO,title:"Filter quota providers",children:[(0,a.jsxs)("span",{className:"flex min-w-0 items-center gap-1.5",children:["all"===eN?(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px] text-text-muted",children:"apps"}):(0,a.jsx)(l.A,{src:`/providers/${eN}.webp`,alt:eN,size:18,className:"size-[18px] rounded object-contain",fallbackText:eN.slice(0,2).toUpperCase()}),(0,a.jsx)("span",{className:"truncate capitalize hidden lg:inline",children:tu})]}),(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px] text-text-muted",children:"expand_more"})]}),eO&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("button",{type:"button",className:"fixed inset-0 z-30 bg-transparent","aria-label":"Close provider filter",onClick:()=>eI(!1)}),(0,a.jsxs)("div",{className:"absolute left-0 z-40 mt-1.5 w-52 overflow-hidden rounded-xl border border-black/10 bg-surface/95 p-1 shadow-lg shadow-black/10 backdrop-blur dark:border-white/10 dark:bg-surface/95 sm:w-60",children:[(0,a.jsxs)("button",{type:"button",onClick:()=>{"all"!==eN&&eJ(1),eS("all"),eI(!1)},className:`flex w-full items-center gap-2 rounded-lg px-2.5 py-1.5 text-left text-xs transition-colors ${"all"===eN?"bg-primary/10 text-primary":"text-text-primary hover:bg-black/5 dark:hover:bg-white/10"}`,children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"apps"}),(0,a.jsx)("span",{className:"font-medium",children:"All providers"}),"all"===eN&&(0,a.jsx)("span",{className:"material-symbols-outlined ml-auto text-[16px]",children:"check"})]}),(0,a.jsx)("div",{className:"my-1 h-px bg-black/10 dark:bg-white/10"}),(0,a.jsx)("div",{className:"max-h-60 overflow-y-auto pr-0.5",children:eA.map(e=>(0,a.jsxs)("button",{type:"button",onClick:()=>{eN!==e&&eJ(1),eS(e),eI(!1)},className:`flex w-full items-center gap-2 rounded-lg px-2.5 py-1.5 text-left text-xs transition-colors ${eN===e?"bg-primary/10 text-primary":"text-text-primary hover:bg-black/5 dark:hover:bg-white/10"}`,children:[(0,a.jsx)(l.A,{src:`/providers/${e}.webp`,alt:e,size:18,className:"size-[18px] rounded object-contain",fallbackText:e.slice(0,2).toUpperCase()}),(0,a.jsx)("span",{className:"font-medium capitalize",children:e}),eN===e&&(0,a.jsx)("span",{className:"material-symbols-outlined ml-auto text-[16px]",children:"check"})]},e))})]})]})]}),(0,a.jsx)("select",{value:eq,onChange:e=>{let t=e.target.value;eq!==t&&eJ(1),eD(t)},className:"h-8 rounded-lg border border-black/10 bg-black/[0.02] px-2 text-xs text-text-primary outline-none transition-colors hover:bg-black/5 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/10","aria-label":"Filter accounts by status",children:m.map(e=>(0,a.jsx)("option",{value:e.value,children:e.label},e.value))}),"codex"===eN&&(0,a.jsx)("select",{value:eT,onChange:e=>eM(e.target.value),className:"h-8 rounded-lg border border-black/10 bg-black/[0.02] px-2 text-xs text-text-primary outline-none transition-colors hover:bg-black/5 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/10","aria-label":"Sort Codex quotas by remaining",children:x.map(e=>(0,a.jsx)("option",{value:e.value,children:e.label},e.value))}),o.has(eN)&&ti.length>0&&(0,a.jsxs)("select",{value:eP,onChange:e=>eE(e.target.value),className:"h-8 rounded-lg border border-black/10 bg-black/[0.02] px-2 text-xs text-text-primary outline-none transition-colors hover:bg-black/5 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/10","aria-label":"Filter quotas by model",children:[(0,a.jsx)("option",{value:"all",children:"All models"}),ti.map(e=>(0,a.jsx)("option",{value:e.id,children:e.name},e.id))]}),(0,a.jsxs)("button",{type:"button",onClick:()=>eL(e=>!e),"aria-pressed":e_,className:`flex h-8 shrink-0 items-center gap-1 rounded-lg border px-2 text-xs transition-colors ${e_?"border-amber-500/40 bg-amber-500/10 text-amber-500":"border-black/10 text-text-primary hover:bg-black/5 dark:border-white/10 dark:hover:bg-white/5"}`,title:"Sort accounts by earliest quota reset time",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"hourglass_top"}),(0,a.jsx)("span",{className:"hidden sm:inline",children:"Expiring first"})]}),(0,a.jsxs)("button",{type:"button",onClick:()=>{to(tl.filter(e=>(e.isActive??!0)&&tn(e)).map(e=>e.id),!1)},disabled:eR,className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-red-500/30 px-2 text-xs text-red-500 transition-colors hover:bg-red-500/10 disabled:opacity-50",title:"Disable connections with depleted quota on the current page",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"block"}),(0,a.jsx)("span",{className:"hidden sm:inline",children:"Turn off Empty"})]}),(0,a.jsxs)("button",{type:"button",onClick:()=>{to(tl.filter(e=>!(e.isActive??!0)&&!tn(e)).map(e=>e.id),!0)},disabled:eR,className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-emerald-500/30 px-2 text-xs text-emerald-500 transition-colors hover:bg-emerald-500/10 disabled:opacity-50",title:"Enable connections that still have quota on the current page",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"check_circle"}),(0,a.jsx)("span",{className:"hidden sm:inline",children:"Turn on Available"})]}),"codex"===eN&&(0,a.jsxs)("button",{type:"button",onClick:tc,disabled:eU||0===td.length,className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-red-500/40 bg-red-500/10 px-2 text-xs text-red-600 dark:text-red-400 transition-colors hover:bg-red-500/20 disabled:opacity-40 disabled:cursor-not-allowed",title:td.length>0?`Delete ${td.length} Codex connection(s) with "Usage API temporarily unavailable (401)"`:"No Codex 401 unavailable connections on current page",children:[(0,a.jsx)("span",{className:`material-symbols-outlined text-[14px] ${eU?"animate-spin":""}`,children:eU?"progress_activity":"delete_sweep"}),(0,a.jsxs)("span",{className:"hidden sm:inline",children:["Delete 401 (",td.length,")"]}),(0,a.jsxs)("span",{className:"sm:hidden",children:["401 (",td.length,")"]})]}),(0,a.jsxs)("button",{onClick:()=>V(e=>!e),className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-black/10 px-2 text-xs transition-colors hover:bg-black/5 dark:border-white/10 dark:hover:bg-white/5",title:H?"Disable auto-refresh":"Enable auto-refresh",children:[(0,a.jsx)("span",{className:`material-symbols-outlined text-[14px] ${H?"text-primary":"text-text-muted"}`,children:H?"toggle_on":"toggle_off"}),(0,a.jsx)("span",{className:"hidden text-text-primary sm:inline",children:"Auto-refresh"}),H&&(0,a.jsxs)("span",{className:"text-[10px] text-text-muted tabular-nums",children:["(",es,"s)"]})]}),(0,a.jsx)("button",{type:"button",onClick:()=>ta(!0),disabled:er,className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-black/10 px-2 text-xs text-text-primary transition-colors hover:bg-black/5 dark:border-white/10 dark:hover:bg-white/5 disabled:opacity-50",title:"Refresh all",children:(0,a.jsx)("span",{className:`material-symbols-outlined text-[14px] ${er?"animate-spin":""}`,children:"refresh"})})]})}),e_&&(0,a.jsx)("div",{className:"rounded-xl border border-amber-500/20 bg-amber-500/10 px-3 py-2 text-xs text-amber-700 dark:text-amber-300",children:"Expiring-first currently reorders accounts inside the current page. Cross-page ordering still follows backend pagination."}),(0,a.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:tl.map(e=>{var s;let i,n,o,d=z[e.id],c=J[e.id],u=W[e.id],m=!1===e.isActive,x="codex"===e.provider,p="claude"===e.provider?d?.raw?.resetCredits:null,b=x?"Codex reset credit":"Claude limit reset",g=Number.isFinite(n="number"==typeof(i=d?.raw?.resetCredits?.availableCount)?i:Number(i))?Math.max(0,n):0,f=em===e.id,y=eo===e.id||ec===e.id||f;return(0,a.jsxs)(S.A,{padding:"none",className:`min-w-0 ${m?"opacity-60":""}`,children:[(0,a.jsx)("div",{className:"px-3 py-2 border-b border-black/10 dark:border-white/10",children:(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,a.jsx)("div",{className:"w-8 h-8 shrink-0 rounded-md flex items-center justify-center overflow-hidden",children:(0,a.jsx)(l.A,{src:`/providers/${e.provider}.webp`,alt:e.provider,size:32,className:"object-contain",fallbackText:e.provider?.slice(0,2).toUpperCase()||"PR"})}),(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("h3",{className:"text-sm font-semibold text-text-primary capitalize truncate",children:e.provider}),h(e)?(0,a.jsx)("p",{className:"text-xs text-text-muted truncate",children:h(e)}):null,T(e)?(0,a.jsx)("p",{className:"text-[11px] text-text-muted/80 truncate",children:T(e)}):null,"kiro"===e.provider&&(0,a.jsxs)("div",{className:"mt-1 flex flex-wrap items-center gap-1",children:[(0,a.jsx)("span",{className:"rounded-full bg-brand-500/10 px-2 py-0.5 text-[10px] font-semibold text-brand-600 dark:text-brand-300",children:(o=e.providerSpecificData?.authMethod)&&E[o]?E[o]:"api_key"===e.authType?"API Key":"OAuth"}),M(e)&&(0,a.jsx)("span",{className:"rounded-full bg-blue-500/10 px-2 py-0.5 text-[10px] font-semibold text-blue-600 dark:text-blue-400",children:M(e)}),(0,a.jsx)("span",{className:`rounded-full px-2 py-0.5 text-[10px] font-semibold ${m?"bg-surface-2 text-text-muted":"active"===e.testStatus||"success"===e.testStatus?"bg-green-500/10 text-green-600 dark:text-green-400":"error"===e.testStatus||"expired"===e.testStatus||"unavailable"===e.testStatus?"bg-red-500/10 text-red-600 dark:text-red-400":"bg-surface-2 text-text-muted"}`,children:m?"disabled":e.testStatus||"unknown"}),e.providerSpecificData?.profileArn&&(0,a.jsxs)("button",{type:"button",onClick:()=>r(e.providerSpecificData.profileArn,e.id),title:e.providerSpecificData.profileArn,className:"inline-flex max-w-full items-center gap-1 rounded-full border border-border-subtle px-2 py-0.5 text-[10px] text-text-muted transition-colors hover:text-primary",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:t===e.id?"check":"content_copy"}),(0,a.jsx)("code",{className:"truncate font-mono",children:e.providerSpecificData.profileArn})]})]})]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-1 shrink-0",children:[(x||p)&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(C.A,{text:g>0?p?`Use your reset now (${g} left, use by ${O(p.expiresAt)}) \xb7 refills ${L(p.clears)}`:`Use one ${b}. Available: ${g}`:`No ${b}s available`,children:(0,a.jsxs)("button",{type:"button",onClick:()=>ep({connection:e,resetCreditCount:g}),disabled:g<=0||c||y,"aria-label":g>0?`Use one ${b}. ${g} available.`:`No ${b}s available`,className:`flex h-8 min-w-10 items-center justify-center gap-1 rounded-lg border px-2 text-[11px] font-medium tabular-nums transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary/60 disabled:cursor-not-allowed disabled:opacity-60 ${g>0?"border-primary/30 bg-primary/5 text-primary hover:bg-primary/10":"border-black/10 bg-black/[0.02] text-text-muted dark:border-white/10 dark:bg-white/[0.03]"}`,children:[(0,a.jsx)("span",{className:`material-symbols-outlined text-[15px] ${f?"animate-spin":""}`,children:f?"progress_activity":"restart_alt"}),(0,a.jsx)("span",{children:g})]})}),(0,a.jsx)(C.A,{text:x?"View Codex reset credit expiry":"View Claude Code reset expiry",children:(0,a.jsx)("button",{type:"button",onClick:()=>x?e9(e):e7(e,p),disabled:c||y,"aria-label":x?"View Codex reset credit expiry":"View Claude Code reset expiry",className:"flex h-8 w-8 items-center justify-center rounded-lg border border-black/10 text-text-muted transition-colors hover:bg-black/5 hover:text-primary disabled:cursor-not-allowed disabled:opacity-50 dark:border-white/10 dark:hover:bg-white/5",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[17px]",children:"schedule"})})})]}),q[e.provider]&&"oauth"===e.authType&&(0,a.jsx)(C.A,{text:D[e.provider],children:(0,a.jsx)("button",{type:"button",onClick:()=>ts(e.id,e.provider,Y[e.provider]?.[e.id]!==!0),"aria-label":"Toggle auto-ping",className:`flex h-8 w-8 items-center justify-center rounded-lg transition-colors hover:bg-black/5 dark:hover:bg-white/5 ${Y[e.provider]?.[e.id]===!0?"text-primary":"text-text-muted"}`,children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"bolt"})})}),(0,a.jsx)(C.A,{text:"Refresh quota",children:(0,a.jsx)("button",{type:"button",onClick:()=>e8(e.id,e.provider),disabled:c||y,"aria-label":"Refresh quota",className:"flex h-8 w-8 items-center justify-center rounded-lg hover:bg-black/5 dark:hover:bg-white/5 transition-colors disabled:opacity-50",children:(0,a.jsx)("span",{className:`material-symbols-outlined text-[18px] text-text-muted ${c?"animate-spin":""}`,children:"refresh"})})}),(0,a.jsx)(C.A,{text:"Edit connection",children:(0,a.jsx)("button",{type:"button",onClick:()=>{ew(e),ey(!0)},disabled:y,"aria-label":"Edit connection",className:"flex h-8 w-8 items-center justify-center rounded-lg hover:bg-black/5 dark:hover:bg-white/5 text-text-muted hover:text-primary transition-colors disabled:opacity-50",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"edit"})})}),(0,a.jsx)(C.A,{text:"Delete connection",children:(0,a.jsx)("button",{type:"button",onClick:()=>te(e.id),disabled:y,"aria-label":"Delete connection",className:"flex h-8 w-8 items-center justify-center rounded-lg hover:bg-red-500/10 text-red-500 transition-colors disabled:opacity-50",children:(0,a.jsx)("span",{className:`material-symbols-outlined text-[18px] ${eo===e.id?"animate-pulse":""}`,children:"delete"})})}),(0,a.jsx)("div",{className:"inline-flex items-center pl-0.5",title:e.isActive??!0?"Disable connection":"Enable connection",children:(0,a.jsx)(N.A,{size:"sm",checked:e.isActive??!0,disabled:y,onChange:t=>tt(e.id,t)})})]})]})}),(0,a.jsx)("div",{className:"px-2 py-1.5",children:c?(0,a.jsx)("div",{className:"text-center py-5 text-text-muted",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[28px] animate-spin",children:"progress_activity"})}):u?(0,a.jsxs)("div",{className:"text-center py-5",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[28px] text-red-500",children:"error"}),(0,a.jsx)("p",{className:"mt-1.5 text-xs text-text-muted",children:u})]}):d?.message?(0,a.jsx)("div",{className:"text-center py-5",children:(0,a.jsx)("p",{className:"text-xs text-text-muted",children:d.message})}):(0,a.jsx)(j,{quotas:(s=d?.quotas,Array.isArray(s)&&"all"!==eP&&eP?s.filter(e=>(e&&(e.modelKey||e.name)||"")===eP):s||[]),compact:!0,sortMode:"default",showSortLabel:"codex"===e.provider&&"default"!==eT})})]},e.id)})}),(0,a.jsx)("div",{className:"rounded-xl border border-black/10 bg-black/[0.02] px-3 py-2 dark:border-white/10 dark:bg-white/[0.03]",children:(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,a.jsx)("span",{className:"text-xs text-text-muted",children:tp}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)("select",{value:tb?"custom":String(eK),onChange:e=>{let t=e.target.value;if("custom"===t)return;let r=Number.parseInt(t,10);Number.isFinite(r)&&(eJ(1),eW(r),eH(String(r)))},className:"h-8 rounded-lg border border-black/10 bg-black/[0.02] px-2 text-xs text-text-primary outline-none transition-colors hover:bg-black/5 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/10","aria-label":"Accounts per page",children:[u.map(e=>(0,a.jsxs)("option",{value:String(e),children:[e," / page"]},e)),(0,a.jsx)("option",{value:"custom",children:"Custom"})]}),(0,a.jsx)("input",{type:"number",min:"1",max:String(500),inputMode:"numeric",value:eG,onChange:e=>eH(e.target.value),onBlur:()=>{let e=Number.parseInt(eG,10);if(!Number.isFinite(e))return void eH(String(eK));let t=Math.min(500,Math.max(1,e));eJ(1),eW(t),eH(String(t))},onKeyDown:e=>{if("Enter"!==e.key)return;let t=Number.parseInt(eG,10);if(!Number.isFinite(t))return void eH(String(eK));let r=Math.min(500,Math.max(1,t));eJ(1),eW(r),eH(String(r))},className:"h-8 w-20 rounded-lg border border-black/10 bg-black/[0.02] px-2 text-xs text-text-primary outline-none transition-colors hover:bg-black/5 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/10","aria-label":"Custom accounts per page",placeholder:"Custom"}),(0,a.jsxs)("span",{className:"text-xs text-text-muted",children:["Page ",eV.page," / ",eV.totalPages]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,a.jsx)("button",{type:"button",onClick:()=>eJ(1),disabled:eV.page<=1||el||er,className:"flex h-8 items-center rounded-lg border border-black/10 px-3 text-xs text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5",children:"First Page"}),(0,a.jsx)("button",{type:"button",onClick:()=>eJ(e=>Math.max(1,e-1)),disabled:eV.page<=1||el||er,className:"flex h-8 w-8 items-center justify-center rounded-lg border border-black/10 text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5","aria-label":"Previous accounts page",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"chevron_left"})}),(0,a.jsx)("button",{type:"button",onClick:()=>eJ(e=>Math.min(eV.totalPages,e+1)),disabled:eV.page>=eV.totalPages||el||er,className:"flex h-8 w-8 items-center justify-center rounded-lg border border-black/10 text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5","aria-label":"Next accounts page",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"chevron_right"})}),(0,a.jsx)("button",{type:"button",onClick:()=>eJ(eV.totalPages),disabled:eV.page>=eV.totalPages||el||er,className:"flex h-8 items-center rounded-lg border border-black/10 px-3 text-xs text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5",children:"Last Page"})]})]})}),(0,a.jsx)(A.ConfirmModal,{isOpen:!!eh,onClose:()=>{em||ep(null)},onConfirm:async()=>{let e=eh?.connection;e&&(await e6(e.id,e.provider),ep(null))},title:eh?.connection?.provider==="claude"?"Reset Claude limits?":"Reset Codex limit?",message:eh?.connection?.provider==="claude"?`Refills your ${L(z[eh.connection.id]?.raw?.resetCredits?.clears)} now for ${h(eh.connection)||"this account"} \xb7 your weekly reset day stays ${O(z[eh.connection.id]?.raw?.resetCredits?.weeklyResetsAt)}. This cannot be undone. Resets left: ${eh.resetCreditCount??0}.`:`Use 1 Codex reset credit for ${h(eh?.connection||{})||"this account"}. This cannot be undone. Remaining credits: ${eh?.resetCreditCount??0}.`,confirmText:"Reset limit",cancelText:"Cancel",variant:"danger",loading:!!em}),eb&&(0,a.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 px-4 backdrop-blur-sm",children:(0,a.jsxs)("div",{className:"w-full max-w-2xl overflow-hidden rounded-2xl border border-black/15 bg-white shadow-2xl ring-1 ring-black/10 dark:border-white/15 dark:bg-neutral-950 dark:ring-white/10",children:[(0,a.jsxs)("div",{className:"flex items-start justify-between gap-3 border-b border-black/10 bg-black/[0.03] px-4 py-3 dark:border-white/10 dark:bg-white/[0.04]",children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("h3",{className:"text-base font-semibold text-text-primary",children:eb.data?.kind==="claude"?"Claude Code Limit Resets":"Codex Reset Credit Expiry"}),(0,a.jsx)("p",{className:"mt-0.5 truncate text-xs text-text-muted",children:h(eb.connection)||(eb.data?.kind==="claude"?"Claude account":"Codex account")})]}),(0,a.jsx)("button",{type:"button",onClick:()=>eg(null),className:"flex h-8 w-8 items-center justify-center rounded-lg text-text-muted transition-colors hover:bg-black/5 hover:text-text-primary dark:hover:bg-white/5","aria-label":"Close reset credit expiry modal",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"close"})})]}),(0,a.jsx)("div",{className:"max-h-[70vh] overflow-auto bg-white p-4 dark:bg-neutral-950",children:eb.loading?(0,a.jsxs)("div",{className:"flex items-center justify-center gap-2 py-10 text-sm text-text-muted",children:[(0,a.jsx)("span",{className:"material-symbols-outlined animate-spin text-[20px]",children:"progress_activity"}),"Loading reset credits..."]}):eb.error?(0,a.jsx)("div",{className:"rounded-xl border border-red-500/20 bg-red-500/10 px-3 py-2 text-sm text-red-600 dark:text-red-300",children:eb.error}):eb.data?.kind==="claude"&&eb.data.grants?.length?(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between rounded-xl border border-black/10 bg-black/[0.02] px-3 py-2 text-xs text-text-muted dark:border-white/10 dark:bg-white/[0.03]",children:[(0,a.jsxs)("span",{children:[eb.data.availableCount??0," reset",1===eb.data.availableCount?"":"s"," left"]}),(0,a.jsxs)("span",{children:["Weekly reset day: ",O(eb.data.weeklyResetsAt)]})]}),(0,a.jsx)("div",{className:"overflow-x-auto rounded-xl border border-black/10 dark:border-white/10",children:(0,a.jsxs)("table",{className:"w-full min-w-[560px] text-left text-sm",children:[(0,a.jsx)("thead",{className:"bg-black/[0.03] text-xs uppercase tracking-wide text-text-muted dark:bg-white/[0.04]",children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Reset"}),(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Left"}),(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Refills"}),(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Use By"}),(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Remaining"})]})}),(0,a.jsx)("tbody",{children:(eb.data.grants||[]).map(e=>(0,a.jsxs)("tr",{className:"border-t border-black/5 dark:border-white/5",children:[(0,a.jsxs)("td",{className:"px-3 py-2",children:[(0,a.jsx)("div",{className:"text-text-primary",children:e.label||e.id}),(0,a.jsx)("span",{className:"mt-1 inline-block rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary",children:e.resetsLeft<=0?"used":e.paused?"paused":e.endsAt&&new Date(e.endsAt).getTime()<=Date.now()?"expired":e.usableNow?"usable now":e.startsAt&&new Date(e.startsAt).getTime()>Date.now()?"not started":e.useRequiresLimit?"at limit only":"unavailable"})]}),(0,a.jsxs)("td",{className:"whitespace-nowrap px-3 py-2 font-medium tabular-nums text-text-primary",children:[e.resetsLeft," / ",e.resetsTotal]}),(0,a.jsx)("td",{className:"px-3 py-2 text-text-muted",children:L(e.clears)}),(0,a.jsx)("td",{className:"px-3 py-2 text-text-primary",children:O(e.endsAt)}),(0,a.jsx)("td",{className:"whitespace-nowrap px-3 py-2 font-medium text-text-primary",children:I(e.endsAt)})]},e.id))})]})})]}):eb.data?.credits?.length?(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between rounded-xl border border-black/10 bg-black/[0.02] px-3 py-2 text-xs text-text-muted dark:border-white/10 dark:bg-white/[0.03]",children:[(0,a.jsxs)("span",{children:[eb.data.credits.length," reset credit",1===eb.data.credits.length?"":"s"]}),(0,a.jsxs)("span",{children:[eb.data.availableCount??0," available"]})]}),(0,a.jsx)("div",{className:"overflow-x-auto rounded-xl border border-black/10 dark:border-white/10",children:(0,a.jsxs)("table",{className:"w-full min-w-[560px] text-left text-sm",children:[(0,a.jsx)("thead",{className:"bg-black/[0.03] text-xs uppercase tracking-wide text-text-muted dark:bg-white/[0.04]",children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Status"}),(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Granted At"}),(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Expires At"}),(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Remaining"})]})}),(0,a.jsx)("tbody",{children:eb.data.credits.map((e,t)=>(0,a.jsxs)("tr",{className:"border-t border-black/5 dark:border-white/5",children:[(0,a.jsx)("td",{className:"px-3 py-2",children:(0,a.jsx)("span",{className:"rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary",children:e.status||"unknown"})}),(0,a.jsx)("td",{className:"px-3 py-2 text-text-muted",children:O(e.grantedAt)}),(0,a.jsx)("td",{className:"px-3 py-2 text-text-primary",children:O(e.expiresAt)}),(0,a.jsx)("td",{className:"px-3 py-2 font-medium text-text-primary",children:I(e.expiresAt)})]},`${e.status}-${e.expiresAt||t}`))})]})})]}):(0,a.jsx)("div",{className:"rounded-xl border border-black/10 bg-black/[0.02] px-3 py-8 text-center text-sm text-text-muted dark:border-white/10 dark:bg-white/[0.03]",children:eb.data?.kind==="claude"?"No limit resets available for this account.":"No reset credit details returned for this account."})})]})}),(0,a.jsx)(A.EditConnectionModal,{isOpen:ef,connection:ev,proxyPools:ek,onSave:tr,onClose:()=>{ey(!1),ew(null)}})]}):(0,a.jsx)(S.A,{padding:"lg",children:(0,a.jsxs)("div",{className:"text-center py-12",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[64px] text-text-muted opacity-20",children:th.icon}),(0,a.jsx)("h3",{className:"mt-4 text-lg font-semibold text-text-primary",children:th.title}),(0,a.jsx)("p",{className:"mt-2 text-sm text-text-muted max-w-md mx-auto",children:th.description})]})}):(0,a.jsx)(S.A,{padding:"lg",children:(0,a.jsxs)("div",{className:"text-center py-12",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[64px] text-text-muted opacity-20",children:"cloud_off"}),(0,a.jsx)("h3",{className:"mt-4 text-lg font-semibold text-text-primary",children:"No Providers Connected"}),(0,a.jsx)("p",{className:"mt-2 text-sm text-text-muted max-w-md mx-auto",children:"Connect to providers with OAuth to track your API quota limits and usage."})]})})}}},e=>{e.O(0,[3885,7523,7236,4385,736,2147,3204,7358],()=>e(e.s=5244)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9839],{27068:(e,t,a)=>{"use strict";a.d(t,{default:()=>m});var s=a(15102),r=a(82030),l=a(10736),n=a(21577),i=a(20264);let o={version:null,extras:{code:!1,ml:!1},available:["code","ml"],loading:!1};function c({rtkEnabled:e,handleRtkEnabled:t,headroomRunning:a,headroomStatusLabel:r,setShowHeadroomInstallModal:n,headroomEnabled:i,handleHeadroomEnabled:o,headroomStatus:d,headroomExtras:m,pendingExtras:x,codeAware:h,kompress:p,restartingProxy:u,toggleExtraActive:g,handleRemoveExtra:f,removingExtra:b,togglePendingExtra:j,handleInstallExtras:y,extrasActionLoading:v,extrasActionError:N,installLog:w,cavemanEnabled:C,visibleCavemanLevels:k,handleCavemanLevel:S,cavemanLevel:E,cavemanLevels:T,handleCavemanEnabled:P,ponytailEnabled:L,ponytailLevels:I,handlePonytailLevel:B,ponytailLevel:M,handlePonytailEnabled:R,pxpipeChipClass:U,pxpipeStatusLabel:O,setShowPxpipeModal:A,pxpipeStatus:H,pxpipeEnabled:G,handlePxpipeEnabled:$}){return(0,s.jsxs)(l.Card,{id:"rtk",children:[(0,s.jsx)("div",{className:"flex items-center justify-between mb-2",children:(0,s.jsxs)("h2",{className:"text-lg font-semibold flex items-center gap-2",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-primary",children:"bolt"}),"Token Saver"]})}),(0,s.jsxs)("div",{className:"flex items-center justify-between pt-2 pb-4 border-b border-border gap-4",children:[(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsxs)("p",{className:"font-medium",children:["Compress tool output"," ",(0,s.jsx)("a",{href:"https://github.com/rtk-ai/rtk",target:"_blank",rel:"noreferrer",className:"text-xs font-normal text-primary underline hover:opacity-80",children:"(RTK)"})]}),(0,s.jsx)("p",{className:"text-sm text-text-muted",children:"git/grep/ls/tree/logs → 60-90% fewer input tokens"})]}),(0,s.jsx)(l.Toggle,{checked:e,onChange:()=>t(!e)})]}),(0,s.jsxs)("div",{className:"flex items-center justify-between py-4 gap-4 flex-wrap",children:[(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsxs)("div",{className:"flex items-center gap-3 flex-wrap",children:[(0,s.jsxs)("p",{className:"font-medium",children:["Compress context"," ",(0,s.jsx)("a",{href:"https://github.com/chopratejas/headroom",target:"_blank",rel:"noreferrer",className:"text-xs font-normal text-primary underline hover:opacity-80",children:"(Headroom)"})]}),(0,s.jsx)("span",{className:`text-xs px-2 py-0.5 rounded ${a?"bg-success/15 text-success":"bg-warning/15 text-warning"}`,children:r}),(0,s.jsx)("button",{type:"button",onClick:()=>n(!0),className:"text-xs text-primary underline hover:opacity-80",children:a?"Manage":"Setup"})]}),(0,s.jsx)("p",{className:"text-sm text-text-muted mt-1",children:"Compress prompts via /v1/compress before routing to the model"})]}),(0,s.jsx)(l.Toggle,{checked:i,onChange:()=>o(!i)})]}),d.installed&&(0,s.jsxs)("div",{className:"mb-3 ml-1 pl-3 pb-4 border-l-2 border-border",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 flex-wrap",children:[(0,s.jsxs)("span",{className:"text-xs text-text-muted",children:["Compression extras",m.version?` \xb7 v${m.version}`:"",":"]}),m.available.map(e=>{let t=!!m.extras[e],a=x.includes(e),r="code"===e?"tree-sitter AST compression for code responses":"Kompress-v2 HF model for prose/agentic traces (~+1GB)";if(t){let t="code"===e?h:p;return(0,s.jsxs)("div",{className:"flex items-center gap-1.5 text-xs px-2 py-1 rounded border border-success/40 bg-success/5 text-text",title:r,children:[(0,s.jsx)(l.Toggle,{size:"sm",checked:t,disabled:u,onChange:()=>g(e,!t)}),(0,s.jsxs)("span",{className:"font-medium",children:["[",e,"]"]}),(0,s.jsx)("button",{type:"button",onClick:()=>f(e),disabled:b===e,className:"ml-1 text-error underline hover:opacity-80 disabled:opacity-50",title:`Uninstall [${e}]`,children:b===e?"Uninstalling…":"Uninstall"})]},e)}return(0,s.jsxs)("label",{className:`flex items-center gap-1.5 text-xs px-2 py-1 rounded border cursor-pointer transition-colors ${a?"border-primary bg-primary/10 text-primary":"border-border text-text-muted hover:bg-surface-2"}`,title:r,children:[(0,s.jsx)("input",{type:"checkbox",className:"w-3 h-3",checked:a,onChange:()=>j(e)}),(0,s.jsxs)("span",{className:"font-medium",children:["[",e,"]"]}),(0,s.jsx)("span",{className:"opacity-70",children:"not installed"})]},e)}),x.length>0&&(0,s.jsx)("button",{onClick:y,disabled:v,className:"text-xs px-2.5 py-1 rounded bg-primary text-white hover:opacity-90 disabled:opacity-50",children:v?"Installing…":`Install [proxy,${x.join(",")}]`})]}),N&&(0,s.jsx)("p",{className:"text-xs text-error mt-1",children:N}),u&&(0,s.jsx)("p",{className:"text-xs text-text-muted mt-1",children:"Restarting proxy…"}),(v||b)&&w&&(0,s.jsx)("pre",{className:"mt-2 max-h-32 overflow-auto rounded bg-surface-2 p-2 text-[10px] leading-tight text-text-muted whitespace-pre-wrap",children:w}),(0,s.jsxs)("p",{className:"text-xs text-text-muted mt-1",children:["Installing adds the package; use ",(0,s.jsx)("code",{children:"on"}),"/",(0,s.jsx)("code",{children:"off"})," ","to activate it (restarts the proxy). Default install is"," ",(0,s.jsx)("code",{children:"[proxy]"})," only (SmartCrusher for JSON). Adding"," ",(0,s.jsx)("code",{children:"[code]"})," enables AST compression (Python/JS/TS/Go/Rust/Java/C/C++/Perl). Adding ",(0,s.jsx)("code",{children:"[ml]"})," ","enables the Kompress-v2 HF model for prose/agentic traces but adds ~1 GB (torch + huggingface-hub)."]})]}),(0,s.jsxs)("div",{className:"flex items-center justify-between pt-4 border-t border-border gap-4 flex-wrap",children:[(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsxs)("p",{className:"font-medium",children:["Compress LLM output"," ",(0,s.jsx)("a",{href:"https://github.com/JuliusBrussee/caveman",target:"_blank",rel:"noreferrer",className:"text-xs font-normal text-primary underline hover:opacity-80",children:"(Caveman)"})]}),(0,s.jsx)("p",{className:"text-sm text-text-muted",children:"Terse-style system prompt → ~65% fewer output tokens (up to 87%)"})]}),(0,s.jsxs)("div",{className:"flex items-center gap-3 shrink-0",children:[C&&(0,s.jsxs)("div",{className:"flex flex-col items-end gap-1",children:[(0,s.jsx)("div",{className:"flex items-center gap-1.5",children:k.map(e=>(0,s.jsx)("button",{onClick:()=>S(e.id),className:`px-3 py-1.5 rounded text-xs font-medium border transition-colors ${E===e.id?"bg-primary text-white border-primary":"bg-transparent border-border text-text-muted hover:bg-surface-2"}`,title:e.desc,children:e.label},e.id))}),(0,s.jsx)("p",{className:"text-xs text-primary",children:T.find(e=>e.id===E)?.desc})]}),(0,s.jsx)(l.Toggle,{checked:C,onChange:()=>P(!C)})]})]}),(0,s.jsxs)("div",{className:"flex items-center justify-between pt-4 mt-4 border-t border-border gap-4 flex-wrap",children:[(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsxs)("p",{className:"font-medium",children:["Lazy senior dev"," ",(0,s.jsx)("a",{href:"https://github.com/DietrichGebert/ponytail",target:"_blank",rel:"noreferrer",className:"text-xs font-normal text-primary underline hover:opacity-80",children:"(Ponytail)"})]}),(0,s.jsx)("p",{className:"text-sm text-text-muted",children:"Bias the model toward minimal code: YAGNI, reuse stdlib, deletion over addition"})]}),(0,s.jsxs)("div",{className:"flex items-center gap-3 shrink-0",children:[L&&(0,s.jsxs)("div",{className:"flex flex-col items-end gap-1",children:[(0,s.jsx)("div",{className:"flex items-center gap-1.5",children:I.map(e=>(0,s.jsx)("button",{onClick:()=>B(e.id),className:`px-3 py-1.5 rounded text-xs font-medium border transition-colors ${M===e.id?"bg-primary text-white border-primary":"bg-transparent border-border text-text-muted hover:bg-surface-2"}`,title:e.desc,children:e.label},e.id))}),(0,s.jsx)("p",{className:"text-xs text-primary",children:I.find(e=>e.id===M)?.desc})]}),(0,s.jsx)(l.Toggle,{checked:L,onChange:()=>R(!L)})]})]}),(0,s.jsxs)("div",{className:"flex items-center justify-between pt-4 mt-4 border-t border-border gap-4 flex-wrap",children:[(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsxs)("div",{className:"flex items-center gap-3 flex-wrap",children:[(0,s.jsxs)("p",{className:"font-medium",children:["Compress prompts as images"," ",(0,s.jsx)("a",{href:"https://github.com/teamchong/pxpipe",target:"_blank",rel:"noreferrer",className:"text-xs font-normal text-primary underline hover:opacity-80",children:"(PXPIPE)"})]}),(0,s.jsx)("span",{className:`text-xs px-2 py-0.5 rounded ${U}`,children:O}),(0,s.jsx)("button",{type:"button",onClick:()=>A(!0),className:"text-xs text-primary underline hover:opacity-80",children:H.installed?"Manage":"Setup"}),(0,s.jsx)("a",{href:"/dashboard/pxpipe",className:"text-xs text-primary underline hover:opacity-80",children:"Dashboard"})]}),(0,s.jsx)("p",{className:"text-sm text-text-muted mt-1",children:"Transforms large textual context into optimized images before sending to the LLM. Ideal for huge prompts, tool outputs and long conversations."})]}),(0,s.jsx)(l.Toggle,{checked:G,disabled:!H.installed,onChange:()=>$(!G)})]})]})}var d=a(29674);function m(){let[e,t]=(0,r.useState)(!0),[a,m]=(0,r.useState)(!1),[x,h]=(0,r.useState)("http://localhost:8787"),[p,u]=(0,r.useState)(3e3),[g,f]=(0,r.useState)(!1),[b,j]=(0,r.useState)("full"),[y,v]=(0,r.useState)(!1),[N,w]=(0,r.useState)("full"),[C,k]=(0,r.useState)(!1),[S,E]=(0,r.useState)(!0),[T,P]=(0,r.useState)(!1),[L,I]=(0,r.useState)({loopGuard:!0,circuitBreaker:!0,semaphore:!0}),[B,M]=(0,r.useState)(i.kk),{copied:R,copy:U}=(0,n.C)(),O=async e=>{try{await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}catch(e){console.log("Error updating setting:",e)}},A=function({patchSetting:e,setHeadroomEnabled:t,headroomUrl:a,setHeadroomUrl:s,codeAware:l,kompress:n,setCodeAware:i,setKompress:c}){let[d,m]=(0,r.useState)({installed:!1,running:!1,python:null,loading:!0}),[x,h]=(0,r.useState)(!1),[p,u]=(0,r.useState)(!1),[g,f]=(0,r.useState)(""),[b,j]=(0,r.useState)(o),[y,v]=(0,r.useState)([]),[N,w]=(0,r.useState)(!1),[C,k]=(0,r.useState)(""),[S,E]=(0,r.useState)(null),[T,P]=(0,r.useState)(""),[L,I]=(0,r.useState)(null),[B,M]=(0,r.useState)(!1),R=(0,r.useRef)(null),U=(0,r.useCallback)(async()=>{m(e=>({...e,loading:!0}));try{let e=await fetch("/api/headroom/status",{headers:{"Cache-Control":"no-store"}}),t=await e.json();if(m({...t,loading:!1}),!t?.installed){j(o),v([]);return}try{let e=await fetch("/api/headroom/extras",{headers:{"Cache-Control":"no-store"}});if(!e.ok)throw Error("extras status failed");let t=await e.json();j(e=>({...e,version:t.version??null,extras:t.extras||o.extras,available:t.available||o.available,loading:!1}))}catch{j(o)}v([])}catch{m({installed:!1,running:!1,python:null,loading:!1}),j(o),v([])}},[]);(0,r.useEffect)(()=>()=>{R.current&&clearInterval(R.current)},[]);let O=(0,r.useCallback)(async()=>{f(""),u(!0);try{let e=await fetch("/api/headroom/start",{method:"POST"}),t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||"Failed to start proxy");await U()}catch(e){f(e.message)}finally{u(!1)}},[U]),A=(0,r.useCallback)(async()=>{u(!0);try{await fetch("/api/headroom/stop",{method:"POST"}),await U()}finally{u(!1)}},[U]),H=(0,r.useCallback)(()=>{P(""),R.current&&clearInterval(R.current);let e=async()=>{try{let e=await fetch("/api/headroom/extras?log=1",{headers:{"Cache-Control":"no-store"}}),t=await e.json().catch(()=>({}));"string"==typeof t.log&&P(t.log)}catch{}};e(),R.current=setInterval(e,1500)},[]),G=(0,r.useCallback)(()=>{R.current&&(clearInterval(R.current),R.current=null)},[]),$=(0,r.useCallback)(async()=>{if(y.length){w(!0),k(""),H();try{let e=await fetch("/api/headroom/extras",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({extras:y})}),t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||"Install failed");j(e=>({...e,version:t.version??e.version,extras:t.extras||e.extras})),v([])}catch(e){k(e.message)}finally{G(),w(!1)}}},[y,H,G]),D=(0,r.useCallback)(async e=>{E(e),k(""),H();try{let t=await fetch("/api/headroom/extras",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({extras:[e]})}),a=await t.json().catch(()=>({}));if(!t.ok)throw Error(a.error||"Remove failed");j(e=>({...e,version:a.version??e.version,extras:a.extras||e.extras}))}catch(e){k(e.message)}finally{G(),E(null)}},[H,G]),_=(0,r.useCallback)(async(t,a)=>{if(k(""),"code"===t&&i(a),"ml"===t&&c(a),await e({["code"===t?"headroomCodeAware":"headroomKompress"]:a}),d.running){M(!0);try{let e=await fetch("/api/headroom/restart",{method:"POST"}),t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||"Restart failed");await U()}catch(e){k(e.message)}finally{M(!1)}}},[d.running,e,U,i,c]),z=async()=>{let t=a.trim()||"http://localhost:8787";s(t),await e({headroomUrl:t}),U()};return{headroomStatus:d,showInstallModal:x,setShowInstallModal:h,actionLoading:p,actionError:g,headroomExtras:b,pendingExtras:y,extrasActionLoading:N,extrasActionError:C,removingExtra:S,installLog:T,extrasConfirm:L,setExtrasConfirm:I,codeAware:l,kompress:n,restartingProxy:B,refresh:U,start:O,stop:A,startLogPolling:H,toggleExtraActive:_,installExtras:$,removeExtra:D,toggleEnabled:r=>{let l=a.trim()||"http://localhost:8787";s(l),t(r),e({headroomEnabled:r,headroomUrl:l})},blurUrl:z,setPendingExtras:v}}({patchSetting:O,setHeadroomEnabled:m,headroomUrl:x,setHeadroomUrl:h,codeAware:C,kompress:S,setCodeAware:k,setKompress:E}),H=function({patchSetting:e,setPxpipeEnabled:t}){let[a,s]=(0,r.useState)({installed:!1,installing:!1,running:!1,version:null,loading:!0}),[l,n]=(0,r.useState)(null),[i,o]=(0,r.useState)(!1),[c,d]=(0,r.useState)(!1),[m,x]=(0,r.useState)(""),[h,p]=(0,r.useState)(25e3),u=(0,r.useCallback)(async()=>{s(e=>({...e,loading:!0}));try{let e=await fetch("/api/pxpipe/status",{headers:{"Cache-Control":"no-store"}}),t=await e.json();s({...t,loading:!1}),"number"==typeof t.minChars&&p(t.minChars)}catch{s({installed:!1,installing:!1,running:!1,version:null,loading:!1})}},[]),g=(0,r.useCallback)(async()=>{try{let e=await fetch("/api/pxpipe/health",{method:"POST"});n(await e.json())}catch(e){n({healthy:!1,checks:[],error:e.message})}},[]),f=(0,r.useCallback)(async e=>{x(""),d(!0);try{let t=await fetch(`/api/pxpipe/${e}`,{method:"POST"}),a=await t.json().catch(()=>({}));if(!t.ok)throw Error(a.error||`PXPIPE ${e} failed`);await u(),await g()}catch(e){x(e.message)}finally{d(!1)}},[g,u]);return{pxpipeStatus:a,pxpipeHealth:l,showModal:i,setShowModal:o,actionLoading:c,actionError:m,minChars:h,setMinChars:p,refresh:u,health:g,action:f,setEnabled:a=>{t(a),e({pxpipeEnabled:a})},blurMinChars:()=>{let t=Math.max(0,Number(h)||25e3);p(t),e({pxpipeMinChars:t})}}}({patchSetting:O,setPxpipeEnabled:P}),{headroomStatus:G,showInstallModal:$,setShowInstallModal:D,actionLoading:_,actionError:z,headroomExtras:F,pendingExtras:J,extrasActionLoading:W,extrasActionError:X,removingExtra:q,installLog:K,extrasConfirm:Y,setExtrasConfirm:Q,restartingProxy:V,refresh:Z,start:ee,stop:et,toggleExtraActive:ea,installExtras:es,removeExtra:er,toggleEnabled:el,blurUrl:en,setPendingExtras:ei}=A,{pxpipeStatus:eo,pxpipeHealth:ec,showModal:ed,setShowModal:em,actionLoading:ex,actionError:eh,minChars:ep,setMinChars:eu,refresh:eg,health:ef,action:eb,setEnabled:ej,blurMinChars:ey}=H;(0,r.useEffect)(()=>(0,i.oQ)(()=>M((0,i.kk)())),[]);let ev=d.hT.includes(B),eN=ev?d.ev:d.ev.filter(e=>!e.wenyan),ew=!ev&&d.ev.find(e=>e.id===b)?.wenyan?"ultra":b;(0,r.useEffect)(()=>{ew!==b&&O({cavemanLevel:ew})},[b,ew]);let eC=async e=>{try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({rtkEnabled:e})})).ok&&t(e)}catch(e){console.log("Error updating rtkEnabled:",e)}},ek=(e,t)=>{I(a=>({...a,[e]:t})),O({[`${e}Enabled`]:t})};(0,r.useEffect)(()=>{(async()=>{try{let e=await fetch("/api/settings");if(e.ok){let a=await e.json();t(!1!==a.rtkEnabled),m(!!a.headroomEnabled),h(a.headroomUrl||"http://localhost:8787"),"number"==typeof a.headroomTimeoutMs&&u(a.headroomTimeoutMs),k(!0===a.headroomCodeAware),E(!1!==a.headroomKompress),f(!!a.cavemanEnabled),j(a.cavemanLevel||"full"),v(!!a.ponytailEnabled),w(a.ponytailLevel||"full"),P(!!a.pxpipeEnabled),"number"==typeof a.pxpipeMinChars&&eu(a.pxpipeMinChars),I({loopGuard:!1!==a.loopGuardEnabled,circuitBreaker:!1!==a.circuitBreakerEnabled,semaphore:!1!==a.semaphoreEnabled}),Z(),eg().then(ef)}}catch{}})()},[Z,eg,ef,eu]);let eS=!!G.running,eE=G.loading?"Checking…":eS?"Running":!1===G.localUrl||G.installed?!1!==G.localUrl?"Stopped":"External":"Not installed",eT=!1!==G.localUrl,eP=!!G.canStart,eL=eT&&!!G.managedPid,eI=ec?.healthy===!0,eB=eo.loading?"Checking…":eo.installing?"Installing…":eo.installed?eI?"Healthy":eo.running?"Running":"Stopped":"Not installed",eM=eI||eo.running?"bg-success/15 text-success":"bg-warning/15 text-warning";return(0,s.jsxs)("div",{className:"space-y-6 p-6",children:[(0,s.jsx)(c,{rtkEnabled:e,handleRtkEnabled:eC,headroomRunning:eS,headroomStatusLabel:eE,setShowHeadroomInstallModal:D,headroomEnabled:a,handleHeadroomEnabled:el,headroomStatus:G,headroomExtras:F,pendingExtras:J,codeAware:C,kompress:S,restartingProxy:V,toggleExtraActive:ea,handleRemoveExtra:e=>{Q({title:`Remove [${e}]`,message:`Remove [${e}] and its packages?`,confirmText:"Remove",variant:"danger",onConfirm:()=>er(e)})},removingExtra:q,togglePendingExtra:e=>{ei(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},handleInstallExtras:()=>{if(0!==J.length){if(J.includes("ml"))return void Q({title:"Install [ml]",message:"[ml] downloads ~1 GB (torch + huggingface-hub). Continue?",confirmText:"Install",variant:"primary",onConfirm:es});es()}},extrasActionLoading:W,extrasActionError:X,installLog:K,cavemanEnabled:g,visibleCavemanLevels:eN,handleCavemanLevel:e=>{j(e),O({cavemanLevel:e})},cavemanLevel:ew,cavemanLevels:d.ev,handleCavemanEnabled:e=>{f(e),O({cavemanEnabled:e})},ponytailEnabled:y,ponytailLevels:d.Nv,handlePonytailLevel:e=>{w(e),O({ponytailLevel:e})},ponytailLevel:N,handlePonytailEnabled:e=>{v(e),O({ponytailEnabled:e})},pxpipeChipClass:eM,pxpipeStatusLabel:eB,setShowPxpipeModal:em,pxpipeStatus:eo,pxpipeEnabled:T,handlePxpipeEnabled:ej}),(0,s.jsxs)(l.Card,{id:"guards",children:[(0,s.jsx)("div",{className:"flex items-center justify-between mb-2",children:(0,s.jsxs)("h2",{className:"text-lg font-semibold flex items-center gap-2",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-primary",children:"shield"}),"Guards & Shields"]})}),(0,s.jsxs)("div",{className:"flex items-center justify-between pt-2 pb-4 border-b border-border gap-4",children:[(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsx)("p",{className:"font-medium",children:"Loop Guard"}),(0,s.jsx)("p",{className:"text-sm text-text-muted",children:"Detects repeating tool call sequences and text-only planning loops. Injects corrections to prevent infinite agent run-loops."})]}),(0,s.jsx)(l.Toggle,{checked:L.loopGuard,onChange:()=>ek("loopGuard",!L.loopGuard)})]}),(0,s.jsxs)("div",{className:"flex items-center justify-between py-4 border-b border-border gap-4 flex-wrap",children:[(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsx)("p",{className:"font-medium",children:"Circuit Breaker"}),(0,s.jsx)("p",{className:"text-sm text-text-muted",children:"Temporarily halts upstream calls for offline or failing providers to prevent spamming and conserve connection resource."})]}),(0,s.jsx)(l.Toggle,{checked:L.circuitBreaker,onChange:()=>ek("circuitBreaker",!L.circuitBreaker)})]}),(0,s.jsxs)("div",{className:"flex items-center justify-between py-4 gap-4 flex-wrap",children:[(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsx)("p",{className:"font-medium",children:"Semaphore (Concurrency Limiter)"}),(0,s.jsx)("p",{className:"text-sm text-text-muted",children:"Enforces simultaneous request limits per provider account. Prevents rate-limits (429) and account blockings."})]}),(0,s.jsx)(l.Toggle,{checked:L.semaphore,onChange:()=>ek("semaphore",!L.semaphore)})]})]}),(0,s.jsx)(l.Modal,{isOpen:$,title:eS?"Headroom":"Setup Headroom",onClose:()=>D(!1),children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between text-sm",children:[(0,s.jsx)("span",{children:"Status"}),(0,s.jsx)("span",{className:eS?"text-success":"text-warning",children:eE})]}),eS&&(0,s.jsx)("a",{href:"/api/headroom/proxy/dashboard",target:"_blank",rel:"noreferrer",className:"w-full rounded border border-border px-4 py-2 text-center text-sm hover:bg-surface-2",children:"Open Headroom Dashboard"}),(0,s.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,s.jsx)("p",{className:"text-sm font-medium",children:"Proxy URL"}),(0,s.jsx)(l.Input,{value:x,onChange:e=>h(e.target.value),onBlur:en,placeholder:"http://localhost:8787",className:"font-mono text-sm"}),(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"Use a local proxy for Start/Stop, or an external Docker sidecar like http://headroom:8787."})]}),(0,s.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,s.jsx)("p",{className:"text-sm font-medium",children:"Timeout (ms)"}),(0,s.jsx)(l.Input,{value:String(p),onChange:e=>u(e.target.value),onBlur:()=>{let e=Math.round(Number(p)),t=Number.isFinite(e)&&e>0?e:3e3;u(t),O({headroomTimeoutMs:t})},placeholder:"3000",className:"font-mono text-sm"}),(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"Request timeout in milliseconds. Defaults to 3000 ms."})]}),eL?(0,s.jsx)(l.Button,{onClick:et,variant:"ghost",fullWidth:!0,disabled:_,children:_?"Stopping…":"Stop Headroom"}):eS?(0,s.jsx)("p",{className:"text-sm text-success",children:"Headroom proxy is reachable. You can enable the token saver."}):eP?(0,s.jsx)(l.Button,{onClick:ee,fullWidth:!0,disabled:_,children:_?"Starting…":"Start Headroom"}):eT?G.python?(0,s.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,s.jsx)("p",{className:"text-sm font-medium",children:"Install then click Start:"}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("pre",{className:"flex-1 rounded bg-black/5 dark:bg-white/5 p-2 text-xs font-mono overflow-x-auto",children:'pip install "headroom-ai[proxy]"'}),(0,s.jsx)(l.Button,{size:"sm",variant:"ghost",onClick:()=>U('pip install "headroom-ai[proxy]"'),children:R?"Copied":"Copy"})]})]}):(0,s.jsx)("p",{className:"text-sm text-warning",children:"Python ≥ 3.10 required for local managed mode. Install Python first, or use an external proxy URL."}):(0,s.jsx)("p",{className:"text-sm text-warning",children:"Start Headroom separately at the configured URL, then recheck."}),z&&(0,s.jsx)("p",{className:"text-sm text-warning",children:z}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(l.Button,{onClick:()=>Z(),variant:"ghost",fullWidth:!0,children:"Recheck"}),(0,s.jsx)(l.Button,{onClick:()=>D(!1),fullWidth:!0,children:"Done"})]})]})}),(0,s.jsx)(l.Modal,{isOpen:ed,title:eo.installed?"PXPIPE":"Setup PXPIPE",onClose:()=>em(!1),children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsx)("p",{className:"text-sm text-text-muted",children:"Compress prompts using multimodal encoding. Runs in-process — no extra server or environment variables required."}),(0,s.jsxs)("div",{className:"flex items-center justify-between text-sm",children:[(0,s.jsx)("span",{children:"Status"}),(0,s.jsxs)("span",{className:eI||eo.running?"text-success":"text-warning",children:[eB,eo.version?` \xb7 v${eo.version}`:""]})]}),ec?.checks?.length>0&&(0,s.jsxs)("div",{className:"flex flex-col gap-1 rounded border border-border p-3",children:[(0,s.jsx)("p",{className:"text-sm font-medium mb-1",children:"Health check"}),ec.checks.map(e=>(0,s.jsxs)("div",{className:"flex items-center justify-between text-xs",children:[(0,s.jsxs)("span",{className:e.ok?"text-success":"text-warning",children:[e.ok?"●":"○"," ",e.label]}),e.detail&&(0,s.jsx)("span",{className:"text-text-muted font-mono truncate max-w-[50%]",children:e.detail})]},e.id)),ec.error&&(0,s.jsx)("p",{className:"text-xs text-warning mt-1",children:ec.error})]}),eo.installed?(0,s.jsxs)("div",{className:"grid grid-cols-2 gap-2",children:[eo.running?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(l.Button,{onClick:()=>eb("restart"),variant:"ghost",disabled:ex,children:"Restart"}),(0,s.jsx)(l.Button,{onClick:()=>eb("stop"),variant:"ghost",disabled:ex,children:"Stop"})]}):(0,s.jsx)(l.Button,{onClick:()=>eb("start"),disabled:ex,children:ex?"Starting…":"Start"}),(0,s.jsx)(l.Button,{onClick:()=>eb("install"),variant:"ghost",disabled:ex,children:"Repair"}),(0,s.jsx)("a",{href:"/dashboard/pxpipe#logs",className:"col-span-2 rounded border border-border px-4 py-2 text-center text-sm hover:bg-surface-2",children:"Open Logs"})]}):(0,s.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,s.jsx)("p",{className:"text-sm text-warning",children:"PXPIPE is not installed."}),(0,s.jsx)(l.Button,{onClick:()=>eb("install"),fullWidth:!0,disabled:ex||eo.installing,children:ex||eo.installing?"Installing…":"Install"}),(0,s.jsxs)("p",{className:"text-xs text-text-muted",children:["Installs the npm package ",(0,s.jsx)("code",{className:"font-mono",children:"pxpipe-proxy"})," into the 9Router data directory. May take a few minutes."]})]}),(0,s.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,s.jsx)("p",{className:"text-sm font-medium",children:"Minimum prompt size (chars)"}),(0,s.jsx)(l.Input,{value:String(ep),onChange:e=>eu(e.target.value),onBlur:ey,placeholder:"25000",className:"font-mono text-sm"}),(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"Requests smaller than this bypass PXPIPE and are sent as-is."})]}),eh&&(0,s.jsx)("p",{className:"text-sm text-warning",children:eh}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(l.Button,{onClick:()=>eg().then(ef),variant:"ghost",fullWidth:!0,children:"Recheck"}),(0,s.jsx)(l.Button,{onClick:()=>em(!1),fullWidth:!0,children:"Done"})]})]})}),(0,s.jsx)(l.ConfirmModal,{isOpen:!!Y,onClose:()=>Q(null),onConfirm:()=>{let e=Y?.onConfirm;Q(null),e?.()},title:Y?.title,message:Y?.message,confirmText:Y?.confirmText,variant:Y?.variant})]})}},29674:(e,t,a)=>{"use strict";a.d(t,{Cp:()=>n,Hx:()=>l,Iv:()=>d,Nv:()=>x,RL:()=>c,ev:()=>m,fl:()=>i,hT:()=>s,oX:()=>r,t6:()=>o});let s=["zh-CN","zh-TW"],r=[{icon:"public",title:"Access Anywhere",desc:"Use your API from any network"},{icon:"group",title:"Share Endpoint",desc:"Share URL with team members"},{icon:"code",title:"Use in Cursor/Cline",desc:"Connect AI tools remotely"},{icon:"lock",title:"Encrypted",desc:"End-to-end TLS via Cloudflare"}],l=2e3,n=3e5,i=5e3,o=5,c=1e4,d=5e3,m=[{id:"lite",label:"Lite",desc:"Drop filler, keep grammar"},{id:"full",label:"Full",desc:"Drop articles, fragments OK"},{id:"ultra",label:"Ultra",desc:"Telegraphic, max compression"},{id:"wenyan-lite",label:"文 Lite",desc:"Classical Chinese, light compression",wenyan:!0},{id:"wenyan",label:"文 Full",desc:"Maximum 文言文, 80-90% reduction",wenyan:!0},{id:"wenyan-ultra",label:"文 Ultra",desc:"Extreme classical compression",wenyan:!0}],x=[{id:"lite",label:"Lite",desc:"Build asked, name lazier option"},{id:"full",label:"Full",desc:"Ladder enforced: stdlib/native first"},{id:"ultra",label:"Ultra",desc:"YAGNI extremist, deletion first"}]},58600:(e,t,a)=>{Promise.resolve().then(a.bind(a,27068))}},e=>{e.O(0,[3885,7523,7236,4385,736,2147,3204,7358],()=>e(e.s=58600)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3528],{74936:(e,t,a)=>{Promise.resolve().then(a.bind(a,82514))},82514:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>u});var s=a(15102),n=a(82030),r=a(10736),l=a(21577),o=a(49526);let i=(0,a(88511).default)(()=>a.e(8667).then(a.bind(a,58667)),{loadableGenerated:{webpack:()=>[58667]},ssr:!1});function d(e,t){return fetch("/api/translator/save",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({file:e,content:t})}).catch(()=>{})}let c={blue:"bg-blue-500/10 text-blue-500",orange:"bg-orange-500/10 text-orange-500",green:"bg-green-500/10 text-green-500",purple:"bg-purple-500/10 text-purple-500"},p=[{id:1,label:"Client Request",file:"1_req_client.json",lang:"json",desc:"Raw request from client"},{id:2,label:"Source Body",file:"2_req_source.json",lang:"json",desc:"After initial conversion"},{id:3,label:"OpenAI Intermediate",file:"3_req_openai.json",lang:"json",desc:"source → openai"},{id:4,label:"Target Request",file:"4_req_target.json",lang:"json",desc:"openai → target + URL + headers"},{id:5,label:"Provider Response",file:"5_res_provider.txt",lang:"text",desc:"Raw SSE from provider"},{id:6,label:"OpenAI Response",file:"6_res_openai.txt",lang:"text",desc:"target → openai (response)"},{id:7,label:"Client Response",file:"7_res_client.txt",lang:"text",desc:"Final response to client"}],x={minimap:{enabled:!1},fontSize:12,lineNumbers:"on",scrollBeyondLastLine:!1,wordWrap:"on",automaticLayout:!0};function u(){let{isDark:e}=(0,o.D)(),[t,a]=(0,n.useState)({}),[c,u]=(0,n.useState)({1:!0}),[f,h]=(0,n.useState)({}),[g,j]=(0,n.useState)(null),y=(e,t)=>h(a=>({...a,[e]:t})),b=(e,t)=>a(a=>({...a,[e]:t})),v=e=>u(t=>{let a={};return p.forEach(e=>{a[e.id]=!1}),a[e]=!0,a}),_=async e=>{let t=p.find(t=>t.id===e);y(`load-${e}`,!0);try{let a=await fetch(`/api/translator/load?file=${t.file}`),s=await a.json();s.success?(b(e,s.content),1===e&&await N(s.content)):alert(s.error||"File not found")}catch(e){alert(e.message)}y(`load-${e}`,!1)},N=async e=>{try{let t="string"==typeof e?JSON.parse(e):e,a=await fetch("/api/translator/translate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({step:1,body:t})}),s=await a.json();s.success&&j(s.result)}catch{}},w=async()=>{y("toOpenAI",!0);try{let e=t[1],a=JSON.parse(e);d("1_req_client.json",e),d("2_req_source.json",JSON.stringify({timestamp:new Date().toISOString(),headers:{},body:a.body||a},null,2));let s=await fetch("/api/translator/translate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({step:2,body:a})}),n=await s.json();if(!n.success)return void alert(n.error);let r=JSON.stringify(n.result.body,null,2);b(3,r),v(3)}catch(e){alert(e.message)}y("toOpenAI",!1)},S=async()=>{y("toTarget",!0);try{let e=t[3],a=JSON.parse(e);d("3_req_openai.json",e);let s=await fetch("/api/translator/translate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({step:3,body:{...a,provider:g?.provider,model:g?.model}})}),n=await s.json();if(!n.success)return void alert(n.error);let r={...n.result,provider:g?.provider,model:g?.model};b(4,JSON.stringify(r,null,2)),v(4)}catch(e){alert(e.message)}y("toTarget",!1)},O=async()=>{y("send",!0);try{let e=t[4],a=JSON.parse(e);d("4_req_target.json",e);let s=a.provider||g?.provider,n=a.model||g?.model;if(!s||!n)return void alert("Missing provider or model. Please run step 1 first to detect them.");let r=await fetch("/api/translator/send",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:s,model:n,body:a.body||a})});if(!r.ok){let e=await r.json().catch(()=>({error:r.statusText}));alert(e.error||"Send failed");return}let l=r.body.getReader(),o=new TextDecoder,i="";for(;;){let{done:e,value:t}=await l.read();if(e)break;i+=o.decode(t,{stream:!0})}b(5,i),v(5),await fetch("/api/translator/save",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({file:"5_res_provider.txt",content:i})})}catch(e){alert(e.message)}finally{y("send",!1)}},{copy:C}=(0,l.C)(),T=async e=>{t[e]&&C(t[e],`translator-step-${e}`)};return(0,s.jsxs)("div",{className:"p-8 space-y-3",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h1",{className:"text-2xl font-bold text-text-main",children:"Translator Debug"}),(0,s.jsx)("p",{className:"text-sm text-text-muted mt-1",children:"Replay request flow — matches log files"})]}),g&&(0,s.jsxs)("div",{className:"flex items-center gap-2 flex-wrap justify-end",children:[(0,s.jsx)(m,{label:"src",value:g.sourceFormat,color:"blue"}),(0,s.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,s.jsx)(m,{label:"dst",value:g.targetFormat,color:"orange"}),(0,s.jsx)(m,{label:"provider",value:g.provider,color:"green"}),(0,s.jsx)(m,{label:"model",value:g.model,color:"purple"})]})]}),p.map(a=>{var n;let l=1===(n=a.id)?(0,s.jsx)(r.Button,{size:"sm",icon:"arrow_forward",loading:f.toOpenAI,onClick:w,children:"→ OpenAI"}):3===n?(0,s.jsx)(r.Button,{size:"sm",icon:"arrow_forward",loading:f.toTarget,onClick:S,children:"→ Target"}):4===n?(0,s.jsx)(r.Button,{size:"sm",icon:"send",loading:f.send,onClick:O,children:"Send"}):null,o=!!c[a.id],d=t[a.id]||"";return(0,s.jsx)(r.Card,{children:(0,s.jsxs)("div",{className:"p-4 space-y-3",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsxs)("button",{type:"button",onClick:()=>{let e;return e=a.id,u(t=>({...t,[e]:!t[e]}))},className:"flex items-center gap-2 flex-1 text-left group",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[20px] text-text-muted group-hover:text-primary transition-colors",children:o?"expand_more":"chevron_right"}),(0,s.jsx)("span",{className:"text-xs font-mono text-text-muted/60 w-4",children:a.id}),(0,s.jsx)("h3",{className:"text-sm font-semibold text-text-main",children:a.label}),(0,s.jsx)("span",{className:"text-xs text-text-muted/60 font-mono",children:a.file}),d&&(0,s.jsxs)("span",{className:"text-xs text-green-500",children:["(",d.length," chars)"]})]}),!o&&(0,s.jsxs)("div",{className:"flex gap-1 shrink-0",children:[(0,s.jsx)(r.Button,{size:"sm",variant:"ghost",icon:"folder_open",loading:f[`load-${a.id}`],onClick:()=>_(a.id)}),l]})]}),o&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("div",{className:"border border-border rounded-lg overflow-hidden",children:(0,s.jsx)(i,{height:"400px",defaultLanguage:"text"===a.lang?"plaintext":"json",value:d,onChange:e=>{b(a.id,e||""),1===a.id&&N(e||"")},theme:e?"vs-dark":"light",options:x})}),(0,s.jsxs)("div",{className:"flex gap-2 flex-wrap",children:[(0,s.jsx)(r.Button,{size:"sm",variant:"outline",icon:"folder_open",loading:f[`load-${a.id}`],onClick:()=>_(a.id),children:"Load"}),(0,s.jsx)(r.Button,{size:"sm",variant:"outline",icon:"data_object",onClick:()=>(e=>{try{let a=JSON.parse(t[e]);b(e,JSON.stringify(a,null,2))}catch{}})(a.id),children:"Format"}),(0,s.jsx)(r.Button,{size:"sm",variant:"outline",icon:"content_copy",onClick:()=>T(a.id),children:"Copy"}),l]})]})]})},a.id)})]})}function m({label:e,value:t,color:a}){return(0,s.jsxs)("span",{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs font-mono ${c[a]}`,children:[(0,s.jsxs)("span",{className:"text-text-muted/70 font-sans text-[10px]",children:[e,":"]}),t]})}}},e=>{e.O(0,[3885,7523,7236,4385,736,2147,3204,7358],()=>e(e.s=74936)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(()=>{"use strict";var e,t,r,o,a,n,c,i,d,f={},l={};function s(e){var t=l[e];if(void 0!==t)return t.exports;var r=l[e]={exports:{}},o=!0;try{f[e].call(r.exports,r,r.exports,s),o=!1}finally{o&&delete l[e]}return r.exports}s.m=f,e=[],s.O=(t,r,o,a)=>{if(r){a=a||0;for(var n=e.length;n>0&&e[n-1][2]>a;n--)e[n]=e[n-1];e[n]=[r,o,a];return}for(var c=1/0,n=0;n<e.length;n++){for(var[r,o,a]=e[n],i=!0,d=0;d<r.length;d++)(!1&a||c>=a)&&Object.keys(s.O).every(e=>s.O[e](r[d]))?r.splice(d--,1):(i=!1,a<c&&(c=a));if(i){e.splice(n--,1);var f=o();void 0!==f&&(t=f)}}return t},s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,s.t=function(e,o){if(1&o&&(e=this(e)),8&o||"object"==typeof e&&e&&(4&o&&e.__esModule||16&o&&"function"==typeof e.then))return e;var a=Object.create(null);s.r(a);var n={};t=t||[null,r({}),r([]),r(r)];for(var c=2&o&&e;"object"==typeof c&&!~t.indexOf(c);c=r(c))Object.getOwnPropertyNames(c).forEach(t=>n[t]=()=>e[t]);return n.default=()=>e,s.d(a,n),a},s.d=(e,t)=>{for(var r in t)s.o(t,r)&&!s.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},s.f={},s.e=e=>Promise.all(Object.keys(s.f).reduce((t,r)=>(s.f[r](e,t),t),[])),s.u=e=>5334===e?"static/chunks/5334-4a80ee40870b70ae.js":122===e?"static/chunks/122-1edd536e9b8e570e.js":1342===e?"static/chunks/1342-9835342a614a64b4.js":"static/chunks/"+(7418===e?"642b329c":e)+"."+({406:"4f42123cc5ed5ba2",941:"1766407a48f890e1",1090:"89c1de86da2aa90b",1409:"9d9e122fbb02e985",1567:"380d58c42bf5620c",2506:"a736ea140305128d",2673:"e645c662bafae6d3",2884:"1ee037d127ecd60f",3078:"9f489473bfa599b8",3124:"945def356dab66f4",3245:"72bf2b81ee2bcca7",3257:"e1e47662cfe81b1a",3386:"40dd0f8e311a09d0",3657:"c58fec9fff675721",3809:"48b8b386bff490fa",4853:"925770de54bdb4c5",5331:"128ab40951332f33",5337:"6f17a3ebf2023e34",5383:"8d7c4a1d7e7037b7",5690:"4cdbb60056bd492a",6127:"ccd1dc2d64e544e9",6460:"09ce3c6558a5441a",6474:"fa00a78ed014b990",6748:"6061e692e483ea91",6909:"43d4d8b5cca19811",7418:"6470aa395ac1043a",7811:"b41ad2c055232420",8667:"b22b7da66acd945f",8937:"bee84b19d912feae",9146:"110d301bb1128a55"})[e]+".js",s.miniCssF=e=>"static/css/008a05b0ad6b854a.css",s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o={},s.l=(e,t,r,a)=>{if(o[e])return void o[e].push(t);if(void 0!==r)for(var n,c,i=document.getElementsByTagName("script"),d=0;d<i.length;d++){var f=i[d];if(f.getAttribute("src")==e||f.getAttribute("data-webpack")=="_N_E:"+r){n=f;break}}n||(c=!0,(n=document.createElement("script")).charset="utf-8",n.timeout=120,s.nc&&n.setAttribute("nonce",s.nc),n.setAttribute("data-webpack","_N_E:"+r),n.src=s.tu(e)),o[e]=[t];var l=(t,r)=>{n.onerror=n.onload=null,clearTimeout(u);var a=o[e];if(delete o[e],n.parentNode&&n.parentNode.removeChild(n),a&&a.forEach(e=>e(r)),t)return t(r)},u=setTimeout(l.bind(null,void 0,{type:"timeout",target:n}),12e4);n.onerror=l.bind(null,n.onerror),n.onload=l.bind(null,n.onload),c&&document.head.appendChild(n)},s.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.tt=()=>(void 0===a&&(a={createScriptURL:e=>e},"u">typeof trustedTypes&&trustedTypes.createPolicy&&(a=trustedTypes.createPolicy("nextjs#bundler",a))),a),s.tu=e=>s.tt().createScriptURL(e),s.p="/_next/",n={8068:0},s.f.miniCss=(e,t)=>{if(n[e])t.push(n[e]);else 0!==n[e]&&({2554:1})[e]&&t.push(n[e]=new Promise((t,r)=>{var o=s.miniCssF(e),a=s.p+o;if(((e,t)=>{for(var r=document.getElementsByTagName("link"),o=0;o<r.length;o++){var a=r[o],n=a.getAttribute("data-href")||a.getAttribute("href");if("stylesheet"===a.rel&&(n===e||n===t))return a}for(var c=document.getElementsByTagName("style"),o=0;o<c.length;o++){var a=c[o],n=a.getAttribute("data-href");if(n===e||n===t)return a}})(o,a))return t();((e,t,r,o)=>{var a=document.createElement("link");a.rel="stylesheet",a.type="text/css",a.onerror=a.onload=n=>{if(a.onerror=a.onload=null,"load"===n.type)r();else{var c=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.href||t,d=Error("Loading CSS chunk "+e+" failed.\n("+i+")");d.code="CSS_CHUNK_LOAD_FAILED",d.type=c,d.request=i,a.parentNode.removeChild(a),o(d)}},a.href=t;if("function"==typeof _N_E_STYLE_LOAD){var n=a.href,c=a.onload,i=a.onerror;_N_E_STYLE_LOAD(0===n.indexOf(window.location.origin)?new URL(n).pathname:n).then(function(){c&&c.call(a,{type:"load"})},function(){i&&i.call(a,{})})}else document.head.appendChild(a)})(e,a,t,r)}).then(()=>{n[e]=0},t=>{throw delete n[e],t}))},c={8068:0,2819:0,186:0},s.f.j=(e,t)=>{var r=s.o(c,e)?c[e]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(186|2554|2819|8068)$/.test(e))c[e]=0;else{var o=new Promise((t,o)=>r=c[e]=[t,o]);t.push(r[2]=o);var a=s.p+s.u(e),n=Error();s.l(a,t=>{if(s.o(c,e)&&(0!==(r=c[e])&&(c[e]=void 0),r)){var o=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src;n.message="Loading chunk "+e+" failed.\n("+o+": "+a+")",n.name="ChunkLoadError",n.type=o,n.request=a,r[1](n)}},"chunk-"+e,e)}},s.O.j=e=>0===c[e],i=(e,t)=>{var r,o,[a,n,i]=t,d=0;if(a.some(e=>0!==c[e])){for(r in n)s.o(n,r)&&(s.m[r]=n[r]);if(i)var f=i(s)}for(e&&e(t);d<a.length;d++)o=a[d],s.o(c,o)&&c[o]&&c[o][0](),c[o]=0;return s.O(f)},(d=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(i.bind(null,0)),d.push=i.bind(null,d.push.bind(d))})();
|