@rabbi696/ezrouter 0.6.15 → 0.6.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +72 -1
- package/app/.next-cli-build/BUILD_ID +1 -1
- package/app/.next-cli-build/app-path-routes-manifest.json +27 -27
- package/app/.next-cli-build/build-manifest.json +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/convoy/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/convoy/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/convoy/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/error-log/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/error-log/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/error-log/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mcp-gateway/keys/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mcp-gateway/keys/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mcp-gateway/keys/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mcp-gateway/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mcp-gateway/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mcp-gateway/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mcp-gateway/servers/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mcp-gateway/servers/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mcp-gateway/servers/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +10 -6
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/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-pools/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/routing-health/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/routing-health/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/routing-health/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_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 +1 -1
- package/app/.next-cli-build/server/app/_not-found/page.js +1 -1
- package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/app/.next-cli-build/server/app/_not-found.rsc +3 -3
- package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
- 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 +3 -3
- 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 +1 -1
- package/app/.next-cli-build/server/app/api/auth/login/route.js +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 +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 +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 +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 +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 +1 -1
- package/app/.next-cli-build/server/app/api/auth/reset-password/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/saml/acs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/saml/acs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/saml/metadata/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/saml/metadata/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/saml/start/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/saml/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/saml/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/saml/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/status/route.js +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/changelog/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli/providers/codex/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli/providers/codex/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +1 -1
- 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 +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 +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.nft.json +1 -1
- 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 +1 -1
- 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-native/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/codex-native/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/codex-native/readiness/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/codex-native/readiness/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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/forge-settings/route.js +1 -1
- 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 +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
- 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.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/omp-settings/route.js +1 -1
- 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.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +1 -1
- 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 +1 -1
- 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/[id]/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/combos/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/export/route.js +1 -1
- package/app/.next-cli-build/server/app/api/combos/export/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/combos/import/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/combos/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/combos/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/convoy/rules/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/extras/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/restart/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/start/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/status/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/stop/route.js +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/internal/codex-native/lease/[action]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/internal/codex-native/lease/[action]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/route.js +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 +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 +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/mcp-gateway/instances/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mcp-gateway/instances/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp-gateway/instances/[id]/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mcp-gateway/instances/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp-gateway/instances/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mcp-gateway/instances/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp-gateway/keys/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mcp-gateway/keys/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp-gateway/keys/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mcp-gateway/keys/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp-gateway/message/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mcp-gateway/message/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp-gateway/oauth/[id]/[action]/route.js +2 -2
- package/app/.next-cli-build/server/app/api/mcp-gateway/oauth/[id]/[action]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp-gateway/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mcp-gateway/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp-gateway/sse/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/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 +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 +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.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/availability/route.js +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.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 +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/enabled/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/enabled/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/callback/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 +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 +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 +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 +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 +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 +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.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/api-key/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/api-key/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/auto-import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/login/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/login/status/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 +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 +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/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]/refresh-profile/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/refresh-profile/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/client/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +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 +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/route.js +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 +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/start/route.js +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 +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/routing-health/route.js +1 -1
- package/app/.next-cli-build/server/app/api/routing-health/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/require-login/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/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/token-saver/stats/route.js +1 -1
- package/app/.next-cli-build/server/app/api/token-saver/stats/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/token-saver/stream/route.js +2 -2
- package/app/.next-cli-build/server/app/api/token-saver/stream/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tool-disclosure/stats/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 +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 +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 +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 +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 +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 +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 +1 -1
- 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 +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/error-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-details/route.js +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 +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 +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 +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/alpha/search/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/alpha/search/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.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/codex/alpha/search/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/codex/alpha/search/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/codex/images/edits/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/codex/images/edits/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/codex/images/generations/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/codex/images/generations/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/codex/memories/trace_summarize/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/codex/memories/trace_summarize/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/codex/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/codex/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/codex/responses/compact/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/codex/responses/compact/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/codex/responses/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/codex/responses/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 +3 -3
- 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/[...model]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/[...model]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/search/route.js +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/systemone/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/systemone/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.nft.json +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 +3 -3
- package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
- 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 +3 -3
- package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
- 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 +5 -5
- 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 +5 -5
- 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 +3 -3
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
- 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 +5 -5
- 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 +3 -3
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
- 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 +5 -5
- 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 +3 -3
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/convoy.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/convoy.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/convoy.segments/!KGRhc2hib2FyZCk/dashboard/convoy/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/convoy.segments/!KGRhc2hib2FyZCk/dashboard/convoy.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/convoy.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/convoy.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/convoy.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/convoy.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/convoy.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/convoy.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
- 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 +5 -5
- 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 +3 -3
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/keys.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/keys.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/keys.segments/!KGRhc2hib2FyZCk/dashboard/mcp-gateway/keys/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/keys.segments/!KGRhc2hib2FyZCk/dashboard/mcp-gateway/keys.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/keys.segments/!KGRhc2hib2FyZCk/dashboard/mcp-gateway.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/keys.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/keys.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/keys.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/keys.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/keys.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/keys.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/servers.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/servers.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/servers.segments/!KGRhc2hib2FyZCk/dashboard/mcp-gateway/servers/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/servers.segments/!KGRhc2hib2FyZCk/dashboard/mcp-gateway/servers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/servers.segments/!KGRhc2hib2FyZCk/dashboard/mcp-gateway.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/servers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/servers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/servers.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/servers.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/servers.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway/servers.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway.segments/!KGRhc2hib2FyZCk/dashboard/mcp-gateway/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway.segments/!KGRhc2hib2FyZCk/dashboard/mcp-gateway.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/mcp-gateway.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
- 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 +5 -5
- 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 +3 -3
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
- 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 +5 -5
- 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 +3 -3
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
- 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 +5 -5
- 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 +3 -3
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
- 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 +5 -5
- 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 +3 -3
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
- 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 +5 -5
- 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 +3 -3
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
- 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 +5 -5
- 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 +3 -3
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +5 -5
- 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 +5 -5
- 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 +3 -3
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
- 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 +6 -6
- 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 +3 -3
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/routing-health.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/routing-health.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/routing-health.segments/!KGRhc2hib2FyZCk/dashboard/routing-health/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/routing-health.segments/!KGRhc2hib2FyZCk/dashboard/routing-health.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/routing-health.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/routing-health.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/routing-health.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/routing-health.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/routing-health.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/routing-health.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.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 +3 -3
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
- 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 +3 -3
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
- 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 +5 -5
- 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 +5 -5
- 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 +3 -3
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +5 -5
- 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 +5 -5
- 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 +3 -3
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
- 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 +5 -5
- 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 +3 -3
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
- 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 +5 -5
- 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 +3 -3
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard.html +1 -1
- package/app/.next-cli-build/server/app/dashboard.rsc +5 -5
- 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 +5 -5
- 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 +3 -3
- package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/favicon.ico/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/index.html +1 -1
- package/app/.next-cli-build/server/app/index.rsc +3 -3
- package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +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 +3 -3
- package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
- 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 +3 -3
- package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
- 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 +4 -4
- package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
- 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 +3 -3
- package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
- 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/page.js +1 -1
- package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app-paths-manifest.json +27 -27
- package/app/.next-cli-build/server/chunks/1253.js +1 -1
- package/app/.next-cli-build/server/chunks/1482.js +4 -2
- package/app/.next-cli-build/server/chunks/1531.js +1 -1
- package/app/.next-cli-build/server/chunks/1641.js +1 -0
- package/app/.next-cli-build/server/chunks/1733.js +1 -1
- package/app/.next-cli-build/server/chunks/1847.js +1 -1
- package/app/.next-cli-build/server/chunks/2269.js +1 -1
- package/app/.next-cli-build/server/chunks/2348.js +1 -1
- package/app/.next-cli-build/server/chunks/2898.js +1 -1
- package/app/.next-cli-build/server/chunks/3583.js +2 -2
- package/app/.next-cli-build/server/chunks/3593.js +2 -2
- package/app/.next-cli-build/server/chunks/369.js +22 -22
- package/app/.next-cli-build/server/chunks/3886.js +1 -1
- package/app/.next-cli-build/server/chunks/3912.js +1 -1
- package/app/.next-cli-build/server/chunks/3977.js +2 -2
- package/app/.next-cli-build/server/chunks/412.js +1 -1
- package/app/.next-cli-build/server/chunks/4378.js +3 -3
- package/app/.next-cli-build/server/chunks/4485.js +1 -1
- package/app/.next-cli-build/server/chunks/4574.js +1 -1
- package/app/.next-cli-build/server/chunks/4646.js +1 -1
- package/app/.next-cli-build/server/chunks/4704.js +2 -2
- package/app/.next-cli-build/server/chunks/4739.js +2 -2
- package/app/.next-cli-build/server/chunks/4768.js +1 -1
- package/app/.next-cli-build/server/chunks/4780.js +2 -2
- package/app/.next-cli-build/server/chunks/4803.js +2 -2
- package/app/.next-cli-build/server/chunks/4827.js +1 -1
- package/app/.next-cli-build/server/chunks/4878.js +1 -1
- package/app/.next-cli-build/server/chunks/5011.js +1 -1
- package/app/.next-cli-build/server/chunks/507.js +2 -2
- package/app/.next-cli-build/server/chunks/5130.js +1 -1
- package/app/.next-cli-build/server/chunks/{8421.js → 5251.js} +1 -1
- package/app/.next-cli-build/server/chunks/5258.js +2 -2
- package/app/.next-cli-build/server/chunks/5434.js +1 -1
- package/app/.next-cli-build/server/chunks/5460.js +40 -0
- package/app/.next-cli-build/server/chunks/5704.js +254 -0
- package/app/.next-cli-build/server/chunks/5872.js +1 -0
- package/app/.next-cli-build/server/chunks/5875.js +1 -1
- package/app/.next-cli-build/server/chunks/6252.js +2 -2
- package/app/.next-cli-build/server/chunks/6420.js +1 -1
- package/app/.next-cli-build/server/chunks/6670.js +2 -2
- package/app/.next-cli-build/server/chunks/6769.js +1 -0
- package/app/.next-cli-build/server/chunks/6799.js +2 -2
- package/app/.next-cli-build/server/chunks/698.js +2 -2
- package/app/.next-cli-build/server/chunks/7073.js +2 -2
- package/app/.next-cli-build/server/chunks/7218.js +1 -1
- package/app/.next-cli-build/server/chunks/7239.js +2 -2
- package/app/.next-cli-build/server/chunks/7362.js +1 -1
- package/app/.next-cli-build/server/chunks/7594.js +6 -6
- package/app/.next-cli-build/server/chunks/7663.js +1 -1
- package/app/.next-cli-build/server/chunks/7677.js +1 -1
- package/app/.next-cli-build/server/chunks/7775.js +1 -1
- package/app/.next-cli-build/server/chunks/7811.js +1 -0
- package/app/.next-cli-build/server/chunks/7965.js +2 -2
- package/app/.next-cli-build/server/chunks/8062.js +2 -2
- package/app/.next-cli-build/server/chunks/8129.js +1 -1
- package/app/.next-cli-build/server/chunks/8231.js +1 -1
- package/app/.next-cli-build/server/chunks/8243.js +5 -5
- package/app/.next-cli-build/server/chunks/8306.js +1 -1
- package/app/.next-cli-build/server/chunks/8469.js +2 -2
- package/app/.next-cli-build/server/chunks/8520.js +2 -2
- package/app/.next-cli-build/server/chunks/8644.js +1 -1
- package/app/.next-cli-build/server/chunks/8772.js +1 -1
- package/app/.next-cli-build/server/chunks/8976.js +1 -1
- package/app/.next-cli-build/server/chunks/9026.js +24 -24
- package/app/.next-cli-build/server/chunks/9062.js +1 -1
- package/app/.next-cli-build/server/chunks/9303.js +1 -1
- package/app/.next-cli-build/server/chunks/9485.js +1 -1
- package/app/.next-cli-build/server/chunks/9718.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.js +3 -3
- 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/static/chunks/1321-73fdccd2b1bf151d.js +1 -0
- package/app/.next-cli-build/static/chunks/{5497-8766958582f95dc7.js → 5497-ff58e90f4053e184.js} +3 -3
- package/app/.next-cli-build/static/chunks/{6252-34f2d410651e1103.js → 6252-886aa8324e135e9c.js} +13 -13
- package/app/.next-cli-build/static/chunks/8105-9b41dc96e4b019cf.js +1 -0
- package/app/.next-cli-build/static/chunks/9227-4471c8f39a105c5f.js +5 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/{page-89b4f70958736f2a.js → page-c35f746b4bd9fc90.js} +18 -14
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-fa195b4f7348e2d6.js → page-0868ecc0d2f1bd04.js} +2 -2
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/{page-a31d9ca05cc3d528.js → page-6cb070834a750fdd.js} +1 -1
- package/app/CHANGELOG.md +54 -32
- package/app/package.json +1 -1
- package/app/public/CHANGELOG.md +54 -32
- package/app/src/mitm/server.js +24 -24
- package/cli.js +71 -69
- package/package.json +1 -1
- package/src/cli/commands/connect.js +157 -15
- package/src/cli/commands/connectTools.js +222 -4
- package/src/cli/commands/show.js +101 -0
- package/src/cli/menus/providers.js +8 -0
- package/app/.next-cli-build/server/chunks/3252.js +0 -1
- package/app/.next-cli-build/server/chunks/3267.js +0 -40
- package/app/.next-cli-build/server/chunks/6707.js +0 -1
- package/app/.next-cli-build/server/chunks/8450.js +0 -254
- package/app/.next-cli-build/server/chunks/9143.js +0 -1
- package/app/.next-cli-build/static/chunks/1321-043afc56cba448b8.js +0 -1
- package/app/.next-cli-build/static/chunks/8105-9dfc2c5ffef6e778.js +0 -1
- package/app/.next-cli-build/static/chunks/9227-af65f6ac1fca28c9.js +0 -3
- /package/app/.next-cli-build/static/{zQapcWqcr7oLVi5jh7t01 → Y5Sk8uSUyB0vJ-ZgW1X1U}/_buildManifest.js +0 -0
- /package/app/.next-cli-build/static/{zQapcWqcr7oLVi5jh7t01 → Y5Sk8uSUyB0vJ-ZgW1X1U}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3826],{62022:(e,t,a)=>{Promise.resolve().then(a.bind(a,76436)),Promise.resolve().then(a.bind(a,25086))},76436:(e,t,a)=>{"use strict";a.d(t,{default:()=>U});var r=a(95155),s=a(12115),i=a(73321),n=a(57250),l=a(47218);let o="quotaCacheData",d="quotaAutoRefresh",c="quotaTrackerPreferences",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 a=t[e.id]?.quotas?.[0];return a&&"number"==typeof a.remaining?a.remaining:1/0}function b(e){let t={};return e.forEach(e=>{t[e.id]=!0}),t}function g(e,t){let a=new Set(t.map(e=>e.id));return Object.fromEntries(Object.entries(e).filter(([e])=>a.has(e)))}async function f(e,t){return await e(t)}function y(){try{let e=window.localStorage.getItem(o);return e?JSON.parse(e):{}}catch(e){return console.error("Error reading quota cache:",e),{}}}function w(e,t){try{let a=y();a[e]={...t,cachedAt:new Date().toISOString()},window.localStorage.setItem(o,JSON.stringify(a))}catch(e){console.error("Error writing quota cache:",e)}}function k(e,t){return t&&0!==t?!e||e<0?100:e>=t?0:Math.round((t-e)/t*100):0}function v(e){return e&&"object"==typeof e?String(e.modelKey||e.name||"").trim():""}function j(e,t){let a=t?.[e]?.hidden;return new Set(Array.isArray(a)?a.map(String):[])}let N={green:{text:"text-green-600 dark:text-green-400",bg:"bg-green-500",bgLight:"bg-green-500/10",emoji:"\uD83D\uDFE2"},yellow:{text:"text-yellow-600 dark:text-yellow-400",bg:"bg-yellow-500",bgLight:"bg-yellow-500/10",emoji:"\uD83D\uDFE1"},red:{text:"text-red-600 dark:text-red-400",bg:"bg-red-500",bgLight:"bg-red-500/10",emoji:"\uD83D\uDD34"}};function S({quotas:e=[],compact:t=!1,sortMode:a="default",showSortLabel:i=!1,onHideQuota:n=null}){let[l,o]=(0,s.useState)(1),d=(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):k(e?.used,e?.total)})),[e]),c=(0,s.useMemo)(()=>"remaining-asc"===a?[...d].sort((e,t)=>e.remaining-t.remaining||e.name.localeCompare(t.name)):"remaining-desc"===a?[...d].sort((e,t)=>t.remaining-e.remaining||e.name.localeCompare(t.name)):d,[d,a]),u=Math.max(1,Math.ceil(c.length/10));if((0,s.useEffect)(()=>{o(1)},[a,e]),(0,s.useEffect)(()=>{o(e=>Math.min(e,u))},[u]),!e||0===e.length)return null;let m=c.slice((l-1)*10,10*l),x=0===c.length?0:(l-1)*10+1,h=Math.min(10*l,c.length),p=t?"py-1 px-1.5":"py-2 px-3",b=t?"text-[11px]":"text-sm",g=t?"text-[11px]":"text-sm",f=t?"text-[10px] leading-tight":"text-xs",y="function"==typeof n;return(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,r.jsxs)("div",{className:"text-[10px] text-text-muted",children:[c.length," quota",c.length>1?"s":""]}),i&&(0,r.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,r.jsx)("div",{className:"overflow-x-auto",children:(0,r.jsx)("table",{className:"w-full table-fixed text-left",children:(0,r.jsx)("tbody",{children:m.map(e=>{var a;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"}:N[(a=e.remaining)>70?"green":a>=30?"yellow":"red"],o=function(e){if(!e)return"-";try{let t="string"==typeof e?new Date(e):e,a=new Date,r=t-a;if(r<=0)return"-";let s=Math.ceil(r/6e4);if(s<60)return`${s}m`;let i=Math.floor(s/60),n=s%60;if(i<24)return`${i}h ${n}m`;let l=Math.floor(i/24);return`${l}d ${i%24}h ${n}m`}catch(e){return"-"}}(e.resetAt),d=function(e){if(!e)return null;try{let t=new Date(e),a=new Date,r=new Date(a.getFullYear(),a.getMonth(),a.getDate()),s=new Date(r);s.setDate(s.getDate()+1);let i="";i=t>=r&&t<s?"Today":t>=s&&t<new Date(s.getTime()+864e5)?"Tomorrow":t.toLocaleDateString("en-US",{month:"short",day:"numeric"});let n=t.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0});return`${i}, ${n}`}catch{return null}}(e.resetAt),c=!1!==e.recurring?`in ${o}`:`expires in ${o}`;return(0,r.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,r.jsx)("td",{className:`${p} w-[30%]`,children:(0,r.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[(0,r.jsx)("span",{className:"text-[10px] shrink-0",children:l.emoji}),(0,r.jsx)("span",{className:`${b} font-medium text-text-primary truncate`,children:e.name}),e.runtimeLimited&&(e.runtimeActionUrl?(0,r.jsx)("a",{href:e.runtimeActionUrl,target:"_blank",rel:"noreferrer",className:"shrink-0 rounded bg-amber-500/15 px-1 py-0.5 text-[9px] font-medium text-amber-600 underline decoration-dotted underline-offset-2 dark:text-amber-400",title:e.runtimeLimitReason||"Verify this Google account, then retry the model.",children:e.runtimeLimitLabel||"account blocked"}):(0,r.jsx)("span",{className:"shrink-0 rounded bg-amber-500/15 px-1 py-0.5 text-[9px] font-medium text-amber-600 dark:text-amber-400",title:e.runtimeLimitReason||"The provider runtime rejected this model even though the quota endpoint still reports capacity.",children:e.runtimeLimitLabel||"runtime limit"}))]})}),(0,r.jsx)("td",{className:`${p} w-[45%]`,children:(0,r.jsxs)("div",{className:t?"space-y-1":"space-y-1.5",children:[!s&&!i&&(0,r.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,r.jsx)("div",{className:`h-full transition-all duration-300 ${l.bg}`,style:{width:`${Math.min(e.remaining,100)}%`}})}),(0,r.jsxs)("div",{className:`flex items-center justify-between ${t?"text-[10px]":"text-xs"}`,children:[(0,r.jsx)("span",{className:"text-text-muted",children:s?`${e.used.toLocaleString()} used \xb7 Unlimited`:i?`Credit: ${e.total.toFixed(2)} ${e.name.split(" ")[2]||""}`:e.percentageOnly?(0,r.jsx)("span",{title:e.quotaNote||"The provider does not expose an absolute request count.",children:"count unavailable"}):(0,r.jsxs)(r.Fragment,{children:[e.used.toLocaleString()," / ",e.total>0?e.total.toLocaleString():"∞"]})}),(0,r.jsx)("span",{className:`font-medium ${s?"text-green-600 dark:text-green-400":i?"text-blue-600 dark:text-blue-400":l.text}`,children:s?"Unlimited":i?"":`${e.remaining}%`})]})]})}),(0,r.jsx)("td",{className:`${p} ${y?"w-[20%]":"w-[25%]"}`,children:"-"!==o||d?t?(0,r.jsx)("div",{className:`${g} text-text-primary font-medium truncate`,title:d||"",children:"-"!==o?c:d}):(0,r.jsxs)("div",{className:"space-y-0.5",children:["-"!==o&&(0,r.jsx)("div",{className:`${g} text-text-primary font-medium`,children:c}),d&&(0,r.jsx)("div",{className:`${f} text-text-muted`,children:d})]}):(0,r.jsx)("div",{className:`${g} text-text-muted italic`,children:"N/A"})}),y&&(0,r.jsx)("td",{className:`${p} w-[5%] text-right`,children:(0,r.jsx)("button",{type:"button",onClick:()=>n(e),className:"inline-flex h-6 w-6 items-center justify-center rounded-md text-text-muted transition-colors hover:bg-black/5 hover:text-text-primary dark:hover:bg-white/5",title:"Hide this quota row","aria-label":`Hide quota ${e.name}`,children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[15px]",children:"visibility_off"})})})]},`${e.name}-${e.index}`)})})})}),u>1&&(0,r.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,r.jsxs)("div",{className:"flex items-center justify-between gap-2 text-[10px] text-text-muted",children:[(0,r.jsxs)("span",{children:["Showing ",x,"-",h," of ",c.length]}),(0,r.jsxs)("span",{children:["Page ",l," / ",u]})]}),(0,r.jsxs)("div",{className:"mt-1.5 flex items-center justify-end gap-1",children:[(0,r.jsx)("button",{type:"button",onClick:()=>o(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,r.jsx)("button",{type:"button",onClick:()=>o(e=>Math.min(u,e+1)),disabled:l===u,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 C=a(98542),A=a(97677),P=a(84588),$=a(35497),q=a(88105),E=a(11059),_=a(78177);let T={"builder-id":"AWS Builder ID",idc:"IAM Identity Center",google:"Google",github:"GitHub",imported:"Imported Token",api_key:"API Key"},D={claude:"claudeAutoPing",codex:"codexAutoPing"},M={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 request to an available model. Consumes a small amount of quota."};function O(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 F(e){let t=e.providerSpecificData?.region;if(t)return t;let a=e.providerSpecificData?.profileArn;return("string"==typeof a?a.split(":")[3]:"")||""}let L={five_hour:"session",seven_day:"weekly",seven_day_overage_included:"weekly",seven_day_opus:"Opus weekly",seven_day_sonnet:"Sonnet weekly"};function R(e){let t=[...new Set((e||[]).map(e=>L[e]).filter(Boolean))];return t.length?`${t.join(" + ")} limits`:"limits"}function I(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 z(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 a=Math.ceil(t/36e5),r=Math.floor(a/24),s=a%24;return r>0?`${r}d ${s}h`:`${s}h`}function U(){let{copied:e,copy:t}=(0,E.C)(),a=(0,i.useSearchParams)(),N=(0,i.useRouter)(),L=(0,i.usePathname)(),[U,W]=(0,s.useState)([]),[J,K]=(0,s.useState)({}),[H,G]=(0,s.useState)({}),[V,B]=(0,s.useState)({}),[Q,X]=(0,s.useState)(!0),[Y,Z]=(0,s.useState)({claude:{},codex:{}}),[ee,et]=(0,s.useState)(null),[ea,er]=(0,s.useState)(!1),[es,ei]=(0,s.useState)(!1),[en,el]=(0,s.useState)(!1),[eo,ed]=(0,s.useState)(60),[ec,eu]=(0,s.useState)(!0),[em,ex]=(0,s.useState)(null),[eh,ep]=(0,s.useState)(null),[eb,eg]=(0,s.useState)(null),[ef,ey]=(0,s.useState)(null),[ew,ek]=(0,s.useState)(null),[ev,ej]=(0,s.useState)(null),[eN,eS]=(0,s.useState)(!1),[eC,eA]=(0,s.useState)(null),[eP,e$]=(0,s.useState)([]),[eq,eE]=(0,s.useState)(()=>a?.get("provider")||"all"),e_=(0,s.useCallback)(e=>{eE(e);try{let t=new URLSearchParams(a?.toString()||"");"all"===e?t.delete("provider"):t.set("provider",e);let r=t.toString()?`${L}?${t.toString()}`:L;N.replace(r,{scroll:!1})}catch{}},[L,N,a]),[eT,eD]=(0,s.useState)([]),[eM,eO]=(0,s.useState)("all"),[eF,eL]=(0,s.useState)("default"),[eR,eI]=(0,s.useState)({}),[ez,eU]=(0,s.useState)(!1),[eW,eJ]=(0,s.useState)(!1),[eK,eH]=(0,s.useState)(!1),[eG,eV]=(0,s.useState)(1),[eB,eQ]=(0,s.useState)(20),[eX,eY]=(0,s.useState)(String(20)),[eZ,e0]=(0,s.useState)({page:1,pageSize:20,total:0,totalPages:1}),[e1,e5]=(0,s.useState)({eligibleConnections:0,providerFilteredConnections:0}),e2=(0,s.useRef)(0),e3=(0,s.useCallback)(async(e=eG)=>{try{var t,a;let r=new URLSearchParams({page:String(e),pageSize:String(eB),accountStatus:eM,sort:"priority"});"all"!==eq&&r.set("provider",eq);let s=await fetch(`/api/providers/client?${r.toString()}`);if(!s.ok)throw Error("Failed to fetch connections");let i=await s.json(),n=i.connections||[],l=(t=i.pagination,t||{page:1,pageSize:eB,total:0,totalPages:1}),o=function(e,t=0){return e||{eligibleConnections:t,providerFilteredConnections:t}}(i.totals,n.length);return W(n),eD(i.providerOptions||[]),e0(l),e5(o),eV((a=i.pagination,a?.page||e)),n}catch(e){return console.error("Error fetching connections:",e),W([]),eD([]),e0({page:1,pageSize:eB,total:0,totalPages:1}),e5({eligibleConnections:0,providerFilteredConnections:0}),[]}},[eM,ez,eG,eB,eq]),e4=(0,s.useCallback)(async(e,t,{force:a=!1}={})=>{G(t=>({...t,[e]:!0})),B(t=>({...t,[e]:null}));try{console.log(`[ProviderLimits] Fetching quota for ${t} (${e})`);let r=`/api/usage/${e}${a?"?force=1":""}`,s=await fetch(r);if(!s.ok){let a=(await s.json().catch(()=>({}))).error||s.statusText;if(404===s.status)return void console.warn(`[ProviderLimits] Connection not found for ${t}, skipping`);if(401===s.status){console.warn(`[ProviderLimits] Auth error for ${t}:`,a);let r={quotas:[],message:a};K(t=>({...t,[e]:r})),w(e,r);return}throw Error(`HTTP ${s.status}: ${a}`)}let i=await s.json();console.log(`[ProviderLimits] Got quota for ${t}:`,i);let n={quotas:function(e,t){if(!t||"object"!=typeof t)return[];let a=[];try{switch(e.toLowerCase()){case"github":default:t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"antigravity":if(t.quotas){let e=Object.entries(t.quotas),r=new Set(["gemini_weekly","claude_gpt_weekly"]),s=new Set(["gemini_session","claude_gpt_session"]),i=new Set([...r,...s]),n=e.filter(([e])=>e.startsWith("gemini-")&&!e.includes("image")),l=e.filter(([e])=>e.startsWith("claude-")),o=e.filter(([e])=>e.includes("image")),d=e.filter(([e])=>i.has(e)),c=e.filter(([e])=>!e.startsWith("gemini-")&&!e.startsWith("claude-")&&!e.includes("image")&&!i.has(e)),u=!!t.quotas.gemini_weekly,m=!!t.quotas.gemini_session,x=!!t.quotas.claude_gpt_weekly,h=!!t.quotas.claude_gpt_session;if(m)d.filter(([e])=>"gemini_session"===e).forEach(([e,t])=>{a.push({name:t.displayName||e,modelKey:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});else if(n.length>0){let e=n.reduce((e,t)=>(t[1].remainingPercentage??100)<(e[1].remainingPercentage??100)?t:e)[1],r=t.quotas.gemini_weekly?.resetAt;u&&e.resetAt===r&&(e.remainingPercentage??0)===0||a.push({name:"Gemini (Flash / Pro)",modelKey:"gemini",used:e.used||0,total:e.total||0,resetAt:e.resetAt||null,remainingPercentage:e.remainingPercentage})}if(u&&d.filter(([e])=>"gemini_weekly"===e).forEach(([e,t])=>{a.push({name:t.displayName||e,modelKey:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})}),h)d.filter(([e])=>"claude_gpt_session"===e).forEach(([e,t])=>{a.push({name:t.displayName||e,modelKey:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});else if(l.length>0){let e=l.reduce((e,t)=>(t[1].remainingPercentage??100)<(e[1].remainingPercentage??100)?t:e)[1],r=t.quotas.claude_gpt_weekly?.resetAt;x&&e.resetAt===r&&(e.remainingPercentage??0)===0||a.push({name:"Claude (Sonnet / Opus)",modelKey:"claude",used:e.used||0,total:e.total||0,resetAt:e.resetAt||null,remainingPercentage:e.remainingPercentage})}x&&d.filter(([e])=>"claude_gpt_weekly"===e).forEach(([e,t])=>{a.push({name:t.displayName||e,modelKey:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})}),o.forEach(([e,t])=>{a.push({name:t.displayName||e,modelKey:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})}),x||h||c.forEach(([e,t])=>{a.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 r=e;"spark_session"===e?r="Spark (5h)":"spark_weekly"===e?r="Spark (Weekly)":"session"===e?r="5h":"weekly"===e?r="Weekly":"review_session"===e?r="Review (5h)":"review_weekly"===e&&(r="Review (Weekly)"),a.push({name:r,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])=>{a.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])=>{"organization"===e&&(!t||[t.total,t.used,t.remaining].every(e=>0===(Number(e)||0)))||a.push({name:"user"===e?"Personal":"organization"===e?"Organization":e,used:t.used||0,total:Math.max(0,Number(t.total)||0)||(Number(t.used)||0)+(Number(t.remaining)||0),unit:t.unit,resetAt:t.resetAt||null})});break;case"claude":t.message?a.push({name:"error",used:0,total:0,resetAt:null,message:t.message}):t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.push({name:e,used:t.used||0,total:t.total||0,remaining:void 0!==t.remaining?t.remaining:Math.max(0,(t.total||100)-(t.used||0)),remainingPercentage:void 0!==t.remainingPercentage?t.remainingPercentage:k(t.used,t.total),resetAt:t.resetAt||null})});break;case"vercel-ai-gateway":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.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])=>{a.push({name: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])=>{a.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});break;case"kimi":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});break;case"cursor":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"deepseek":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});break;case"groq":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"ollama":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.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])=>{a.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage,unlimited:t.unlimited})})}}catch(t){return console.error(`Error parsing quota data for ${e}:`,t),[]}if(e?.toLowerCase()==="claude"){let e={"session (5h)":0,"weekly (7d)":1,"weekly fable (7d)":2,"weekly opus (7d)":3,"weekly sonnet (7d)":4};return a.sort((t,a)=>(e[t.name]??99)-(e[a.name]??99)),a}let r=(0,l.KC)(e);if(r.length>0){let e=new Map(r.map((e,t)=>[e.id,t]));a.sort((t,a)=>{let r=t.modelKey||t.name,s=a.modelKey||a.name;return("gemini"===r||"gemini_session"===r)&&(r="gemini-3.8-flash-high"),("claude"===r||"claude_gpt_session"===r)&&(r="claude-sonnet-4-6"),("gemini"===s||"gemini_session"===s)&&(s="gemini-3.8-flash-high"),("claude"===s||"claude_gpt_session"===s)&&(s="claude-sonnet-4-6"),(e.get(r)??999)-(e.get(s)??999)})}return a}(t,i),plan:i.plan||null,message:i.message||null,raw:i};K(t=>({...t,[e]:n})),w(e,n)}catch(a){console.error(`[ProviderLimits] Error fetching quota for ${t} (${e}):`,a),B(t=>({...t,[e]:a.message||"Failed to fetch quota"}))}finally{G(t=>({...t,[e]:!1}))}},[]),e8=(0,s.useCallback)(async(e,t)=>{await e4(e,t,{force:!0}),et(new Date)},[e4]),e6=(0,s.useCallback)(async(e,t)=>{if(("codex"===t||"claude"===t)&&!ef){ey(e),B(t=>({...t,[e]:null}));try{let a="claude"===t?await fetch(`/api/usage/${e}/claude-reset`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({grantId:J[e]?.raw?.resetCredits?.nextGrantId})}):await fetch(`/api/usage/${e}/codex-reset-credits`,{method:"POST"}),r=await a.json().catch(()=>({}));if(!a.ok)throw Error(r.message||r.error||r.code||"Failed to reset limit");await e4(e,t,{force:!0}),et(new Date)}catch(t){B(a=>({...a,[e]:t.message||"Failed to reset limit"}))}finally{ey(null)}}},[e4,ef,J]),e7=(0,s.useCallback)((e,t)=>{ej({connection:e,loading:!1,error:null,data:{kind:"claude",...t}})},[]),e9=(0,s.useCallback)(async e=>{ej({connection:e,loading:!0,error:null,data:null});try{let t=await fetch(`/api/usage/${e.id}/codex-reset-credits`,{cache:"no-store"}),a=await t.json().catch(()=>({}));if(!t.ok)throw Error(a.error||a.message||"Failed to load Codex reset credits");let r=Array.isArray(a.credits)?[...a.credits]:[];r.sort((e,t)=>{let a=e.expiresAt?new Date(e.expiresAt).getTime():1/0,r=t.expiresAt?new Date(t.expiresAt).getTime():1/0;return a-r}),ej({connection:e,loading:!1,error:null,data:{...a,credits:r}})}catch(t){ej({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?")){ex(e);try{if((await fetch(`/api/providers/${e}`,{method:"DELETE"})).ok){K(t=>{let a={...t};return delete a[e],a}),G(t=>{let a={...t};return delete a[e],a}),B(t=>{let a={...t};return delete a[e],a});try{let t=y();t[e]&&(delete t[e],window.localStorage.setItem(o,JSON.stringify(t)))}catch(e){console.error("Error deleting cache entry:",e)}await f(e3,eG)}}catch(e){console.error("Error deleting connection:",e)}finally{ex(null)}}},[e3,eG]),tt=(0,s.useCallback)(async(e,t)=>{ep(e);try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})})).ok&&(K(e=>({...e})),await f(e3,eG))}catch(e){console.error("Error updating connection status:",e)}finally{ep(null)}},[e3,eG]),ta=(0,s.useCallback)(async(e,t)=>{if(!eb){eg(e.id);try{let a=await fetch(`/api/providers/${e.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerSpecificData:{fastMode:t}})}),r=await a.json().catch(()=>({}));if(!a.ok)throw Error(r.error||"Failed to save fast mode");W(a=>a.map(a=>a.id===e.id?{...a,providerSpecificData:{...a.providerSpecificData,fastMode:t}}:a))}catch(e){alert(e.message||"Failed to save fast mode")}finally{eg(null)}}},[eb]),tr=(0,s.useCallback)(async e=>{if(!eC?.id)return;let t=eC.id,a=eC.provider;try{(await fetch(`/api/providers/${t}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).ok&&(await e3(),eS(!1),eA(null),q.wb.includes(a)&&await e4(t,a))}catch(e){console.error("Error saving connection:",e)}},[eC,e3,e4]),ts=(0,s.useCallback)(async(e,t,a)=>{let r=U.find(t=>t.id===e);if(!r)return;let s={...r.quotaPauseThresholds&&"object"==typeof r.quotaPauseThresholds?r.quotaPauseThresholds:{}},i=Number(a);Number.isFinite(i)&&i>0&&i<=100?s[t]=i:delete s[t];try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({quotaPauseThresholds:s})})).ok&&W(t=>t.map(t=>t.id===e?{...t,quotaPauseThresholds:s}:t))}catch(e){console.error("Error updating quota threshold:",e)}},[U]);(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&&e$(t.proxyPools)}).catch(()=>{}),()=>{e=!0}},[]);let ti=(0,s.useCallback)(async(e=!1)=>{if(en)return;el(!0),ed(60);let t=e2.current+=1,a=Math.round(10);try{let r=await e3(eG);G(b(r)),B(e=>g(e,r)),K(e=>g(e,r)),await Promise.all(r.filter(r=>e||"claude"!==r.provider||t%a==0).map(e=>e4(e.id,e.provider))),et(new Date)}catch(e){console.error("Error refreshing all providers:",e)}finally{el(!1)}},[en,e3,e4,eG]);(0,s.useEffect)(()=>{(async()=>{eu(!0);let e=await e3(eG);eu(!1),G(b(e)),B(t=>g(t,e)),K(t=>g(t,e)),await Promise.all(e.map(e=>e4(e.id,e.provider))),et(new Date)})()},[e3,e4,eG]),(0,s.useEffect)(()=>{let e=window.localStorage.getItem(d);X(null===e||"true"===e),er(!0)},[]),(0,s.useEffect)(()=>{ea&&window.localStorage.setItem(d,String(Q))},[Q,ea]),(0,s.useEffect)(()=>{try{let e=window.localStorage.getItem(c);if(e){let t=JSON.parse(e);if(t?.accountFilter&&["all","active","inactive"].includes(t.accountFilter)&&eO(t.accountFilter),t?.pageSize){let e=Number(t.pageSize);Number.isFinite(e)&&e>0&&(eQ(e),eY(String(e)))}}}catch{}ei(!0)},[]),(0,s.useEffect)(()=>{if(es)try{window.localStorage.setItem(c,JSON.stringify({accountFilter:eM,pageSize:eB}))}catch{}},[eM,eB,es]),(0,s.useEffect)(()=>{fetch("/api/settings",{cache:"no-store"}).then(e=>e.ok?e.json():{}).then(e=>{Z({claude:e?.claudeAutoPing?.connections||{},codex:e?.codexAutoPing?.connections||{}}),eI(e?.quotaVisibility||{})}).catch(()=>{})},[]);let tn=(0,s.useCallback)(async(e,t,a)=>{let r=D[t];if(!r)return;let s={...Y[t]||{},[e]:a};Z({...Y,[t]:s});try{let e=await fetch("/api/settings",{cache:"no-store"}),t={...(e.ok?await e.json():{})[r]||{},connections:s};await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({[r]:t})})}catch{Z(Y)}},[Y]),tl=(0,s.useCallback)(async(e,t)=>{eI(e);try{if(!(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({quotaVisibility:e})})).ok)throw Error("Failed to update quota visibility")}catch(e){console.error("Error updating quota visibility:",e),eI(t)}},[]),to=(0,s.useCallback)((e,t)=>{let a=v(t);if(!e||!a)return;let r=eR[e]||{},s=new Set(r.hidden||[]);if(s.add(a),"antigravity"===e){if("gemini"===a)for(let e of s)e.startsWith("gemini-")&&!e.includes("image")&&s.delete(e);else if("claude"===a)for(let e of s)e.startsWith("claude-")&&s.delete(e)}tl({...eR,[e]:{...r,hidden:[...s]}},eR)},[eR,tl]),td=(0,s.useCallback)((e,t)=>{let a=v(t);if(!e||!a)return;let r=eR[e]||{},s=new Set(r.hidden||[]);if(s.delete(a),"antigravity"===e){if("gemini"===a)for(let e of s)e.startsWith("gemini-")&&!e.includes("image")&&s.delete(e);else if("claude"===a)for(let e of s)e.startsWith("claude-")&&s.delete(e)}tl({...eR,[e]:{...r,hidden:[...s]}},eR)},[eR,tl]),tc=(0,s.useRef)(ti);(0,s.useEffect)(()=>{tc.current=ti},[ti]);let tu=(0,s.useMemo)(()=>(function({onRefresh:e,onTick:t,refreshIntervalMs:a,tickMs:r=1e3}){let s=null,i=null,n=()=>{null!==s&&(clearInterval(s),s=null),null!==i&&(clearInterval(i),i=null)};return{start:()=>{n(),s=setInterval(()=>e(),a),i=setInterval(()=>t(),r)},stop:n,isRunning:()=>null!==s||null!==i}})({onRefresh:()=>tc.current(),onTick:()=>ed(e=>e<=1?60:e-1),refreshIntervalMs:6e4}),[]);(0,s.useEffect)(()=>!ea||!Q||"u">typeof document&&document.hidden?void tu.stop():(tu.start(),()=>tu.stop()),[Q,ea,tu]),(0,s.useEffect)(()=>{let e=()=>{document.hidden?tu.stop():Q&&ea&&tu.start()};return document.addEventListener("visibilitychange",e),()=>{document.removeEventListener("visibilitychange",e),tu.stop()}},[Q,ea,tu]);let tm=(0,s.useMemo)(()=>(function(e,t,a,r,s){if("codex"===r&&"default"!==s)return[...e].sort((e,a)=>{let r=p(e,t),i=p(a,t),n="remaining-asc"===s?r-i:i-r;return 0!==n?n:(h(e)||"").localeCompare(h(a)||"")});if(!a){let t=new Map;for(let a of e){let e=a.provider||"";t.has(e)||t.set(e,[]),t.get(e).push(a)}return Array.from(t.values()).flat()}let i=e=>{let a=(t[e.id]?.quotas||[]).map(e=>e.resetAt?new Date(e.resetAt).getTime():1/0).filter(e=>Number.isFinite(e));return a.length>0?Math.min(...a):1/0};return[...e].sort((e,t)=>{let a=i(e)-i(t);return 0!==a?a:(e.provider||"").localeCompare(t.provider||"")||(h(e)||"").localeCompare(h(t)||"")})})(U,J,ez,eq,eF),[U,J,ez,eq,eF]),tx=e=>{let t=J[e.id]?.quotas;return!!t?.length&&t.some(e=>!!e.total&&!(e.total<=0)&&5>=k(e.used,e.total))},th=(0,s.useCallback)(async(e,t)=>{if(e.length&&!eK){eH(!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,eG)}catch(e){console.error("Error bulk toggling connections:",e)}finally{eH(!1)}}},[eK,e3,eG]),tp="all"===eq?"All providers":eq,tb=e1.eligibleConnections>0,tg=tm.length>0,tf=e1.eligibleConnections?e1.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"===eq?"Try changing the account status filter to see more quota trackers.":`No ${"inactive"===eM?"turned off":"active"===eM?"active":"matching"} accounts found for ${eq}.`}:{icon:"cloud_off",title:"No Providers Connected",description:"Connect to providers with OAuth to track your API quota limits and usage."},ty=function(e){var t;let{start:a,end:r}=(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 ${a}-${r} of ${e.total}`}(eZ),tw=!u.includes(eB);return ec||tb?ec||tg?(0,r.jsxs)("div",{className:"space-y-6",children:[(0,r.jsx)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-end",children:(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsxs)("button",{type:"button",onClick:()=>eJ(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":eW,title:"Filter quota providers",children:[(0,r.jsxs)("span",{className:"flex min-w-0 items-center gap-1.5",children:["all"===eq?(0,r.jsx)("span",{className:"material-symbols-outlined text-[14px] text-text-muted",children:"apps"}):(0,r.jsx)(n.A,{src:`/providers/${eq}.png`,alt:eq,size:18,className:"size-[18px] rounded object-contain",fallbackText:eq.slice(0,2).toUpperCase()}),(0,r.jsx)("span",{className:"truncate capitalize hidden lg:inline",children:tp})]}),(0,r.jsx)("span",{className:"material-symbols-outlined text-[14px] text-text-muted",children:"expand_more"})]}),eW&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("button",{type:"button",className:"fixed inset-0 z-30 bg-transparent","aria-label":"Close provider filter",onClick:()=>eJ(!1)}),(0,r.jsxs)("div",{className:"absolute left-0 z-40 mt-2 w-64 overflow-hidden rounded-2xl border border-black/10 bg-surface/95 p-1.5 shadow-xl shadow-black/10 backdrop-blur dark:border-white/10 dark:bg-surface/95 sm:w-72",children:[(0,r.jsxs)("button",{type:"button",onClick:()=>{"all"!==eq&&eV(1),e_("all"),eJ(!1)},className:`flex w-full items-center gap-3 rounded-xl px-3 py-2.5 text-left text-sm transition-colors ${"all"===eq?"bg-primary/10 text-primary":"text-text-primary hover:bg-black/5 dark:hover:bg-white/10"}`,children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[22px]",children:"apps"}),(0,r.jsx)("span",{className:"font-medium",children:"All providers"}),"all"===eq&&(0,r.jsx)("span",{className:"material-symbols-outlined ml-auto text-[20px]",children:"check"})]}),(0,r.jsx)("div",{className:"my-1 h-px bg-black/10 dark:bg-white/10"}),(0,r.jsx)("div",{className:"max-h-72 overflow-y-auto pr-1",children:eT.map(e=>(0,r.jsxs)("button",{type:"button",onClick:()=>{eq!==e&&eV(1),e_(e),eJ(!1)},className:`flex w-full items-center gap-3 rounded-xl px-3 py-2.5 text-left text-sm transition-colors ${eq===e?"bg-primary/10 text-primary":"text-text-primary hover:bg-black/5 dark:hover:bg-white/10"}`,children:[(0,r.jsx)(n.A,{src:`/providers/${e}.png`,alt:e,size:24,className:"size-6 rounded-md object-contain",fallbackText:e.slice(0,2).toUpperCase()}),(0,r.jsx)("span",{className:"font-medium capitalize",children:e}),eq===e&&(0,r.jsx)("span",{className:"material-symbols-outlined ml-auto text-[20px]",children:"check"})]},e))})]})]})]}),(0,r.jsx)("select",{value:eM,onChange:e=>{let t=e.target.value;eM!==t&&eV(1),eO(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,r.jsx)("option",{value:e.value,children:e.label},e.value))}),"codex"===eq&&(0,r.jsx)("select",{value:eF,onChange:e=>eL(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,r.jsx)("option",{value:e.value,children:e.label},e.value))}),(0,r.jsxs)("button",{type:"button",onClick:()=>eU(e=>!e),"aria-pressed":ez,className:`flex h-8 shrink-0 items-center gap-1 rounded-lg border px-2 text-xs transition-colors ${ez?"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,r.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"hourglass_top"}),(0,r.jsx)("span",{className:"hidden sm:inline",children:"Expiring first"})]}),(0,r.jsxs)("button",{type:"button",onClick:()=>{th(tm.filter(e=>(e.isActive??!0)&&tx(e)).map(e=>e.id),!1)},disabled:eK,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,r.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"block"}),(0,r.jsx)("span",{className:"hidden sm:inline",children:"Turn off Empty"})]}),(0,r.jsxs)("button",{type:"button",onClick:()=>{th(tm.filter(e=>!(e.isActive??!0)&&!tx(e)).map(e=>e.id),!0)},disabled:eK,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,r.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"check_circle"}),(0,r.jsx)("span",{className:"hidden sm:inline",children:"Turn on Available"})]}),(0,r.jsxs)("button",{onClick:()=>X(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:Q?"Disable auto-refresh":"Enable auto-refresh",children:[(0,r.jsx)("span",{className:`material-symbols-outlined text-[14px] ${Q?"text-primary":"text-text-muted"}`,children:Q?"toggle_on":"toggle_off"}),(0,r.jsx)("span",{className:"hidden text-text-primary sm:inline",children:"Auto-refresh"}),Q&&(0,r.jsxs)("span",{className:"text-[10px] text-text-muted tabular-nums",children:["(",eo,"s)"]})]}),(0,r.jsx)("button",{type:"button",onClick:()=>ti(!0),disabled:en,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,r.jsx)("span",{className:`material-symbols-outlined text-[14px] ${en?"animate-spin":""}`,children:"refresh"})})]})}),ez&&(0,r.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,r.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:tm.map(a=>{let s,i,l,o,d=J[a.id],c=H[a.id],u=V[a.id],m=!1===a.isActive,x="codex"===a.provider,p=x?(s=d?.plan?.trim())&&"unknown"!==s.toLowerCase()?s:a?.providerSpecificData?.chatgptPlanType?.trim()||null:null,b="claude"===a.provider?d?.raw?.resetCredits:null,g=x?"Codex reset credit":"Claude limit reset",f=Number.isFinite(l="number"==typeof(i=d?.raw?.resetCredits?.availableCount)?i:Number(i))?Math.max(0,l):0,y=ef===a.id,w=eb===a.id,k=em===a.id||eh===a.id||y||w,N=d?.quotas||[],E=function(e,t=[],a={}){if(!Array.isArray(t)||0===t.length)return[];let r=j(e,a);return 0===r.size?t:t.filter(e=>!r.has(v(e)))}(a.provider,N,eR),L=function(e,t=[],a={}){if(!Array.isArray(t)||0===t.length)return[];let r=j(e,a);return 0===r.size?[]:t.filter(e=>r.has(v(e)))}(a.provider,N,eR),z=(0,_.XD)(a);return(0,r.jsxs)(P.default,{padding:"none",className:`min-w-0 ${m?"opacity-60":""}`,children:[(0,r.jsx)("div",{className:"px-3 py-2 border-b border-black/10 dark:border-white/10",children:(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,r.jsx)("div",{className:"w-8 h-8 shrink-0 rounded-md flex items-center justify-center overflow-hidden",children:(0,r.jsx)(n.A,{src:`/providers/${a.provider}.png`,alt:a.provider,size:32,className:"object-contain",fallbackText:a.provider?.slice(0,2).toUpperCase()||"PR"})}),(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("h3",{className:"text-sm font-semibold text-text-primary capitalize truncate",children:a.provider}),h(a)?(0,r.jsx)("p",{className:"text-xs text-text-muted truncate",children:h(a)}):null,O(a)?(0,r.jsx)("p",{className:"text-[11px] text-text-muted/80 truncate",children:O(a)}):null,p?(0,r.jsx)("span",{className:"mt-1 inline-flex rounded-full bg-brand-500/10 px-2 py-0.5 text-[10px] font-semibold text-brand-600 dark:text-brand-300",children:p}):null,z.enabled&&(0,r.jsx)("p",{className:"mt-0.5",children:(0,r.jsx)($.Ex,{variant:z.paused?"warning":"default",size:"sm",children:z.paused?`Paused (quota${z.triggered?`: ${z.triggered.key}`:""})`:"Buffers set"})}),"kiro"===a.provider&&(0,r.jsxs)("div",{className:"mt-1 flex flex-wrap items-center gap-1",children:[(0,r.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=a.providerSpecificData?.authMethod)&&T[o]?T[o]:"api_key"===a.authType?"API Key":"OAuth"}),F(a)&&(0,r.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:F(a)}),(0,r.jsx)("span",{className:`rounded-full px-2 py-0.5 text-[10px] font-semibold ${m?"bg-surface-2 text-text-muted":"active"===a.testStatus||"success"===a.testStatus?"bg-green-500/10 text-green-600 dark:text-green-400":"error"===a.testStatus||"expired"===a.testStatus||"unavailable"===a.testStatus?"bg-red-500/10 text-red-600 dark:text-red-400":"bg-surface-2 text-text-muted"}`,children:m?"disabled":a.testStatus||"unknown"}),a.providerSpecificData?.profileArn&&(0,r.jsxs)("button",{type:"button",onClick:()=>t(a.providerSpecificData.profileArn,a.id),title:a.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,r.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:e===a.id?"check":"content_copy"}),(0,r.jsx)("code",{className:"truncate font-mono",children:a.providerSpecificData.profileArn})]})]})]})]}),(0,r.jsxs)("div",{className:"flex items-center gap-1 shrink-0",children:[(x||b)&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(A.default,{text:f>0?b?`Use your reset now (${f} left, use by ${I(b.expiresAt)}) \xb7 refills ${R(b.clears)}`:`Use one ${g}. Available: ${f}`:`No ${g}s available`,children:(0,r.jsxs)("button",{type:"button",onClick:()=>ek({connection:a,resetCreditCount:f}),disabled:f<=0||c||k,"aria-label":f>0?`Use one ${g}. ${f} available.`:`No ${g}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 ${f>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,r.jsx)("span",{className:`material-symbols-outlined text-[15px] ${y?"animate-spin":""}`,children:y?"progress_activity":"restart_alt"}),(0,r.jsx)("span",{children:f})]})}),(0,r.jsx)(A.default,{text:x?"View Codex reset credit expiry":"View Claude Code reset expiry",children:(0,r.jsx)("button",{type:"button",onClick:()=>x?e9(a):e7(a,b),disabled:c||k,"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,r.jsx)("span",{className:"material-symbols-outlined text-[17px]",children:"schedule"})})}),q.Q2[a.provider]?.fastMode&&(0,r.jsx)(A.default,{text:`Fast mode is ${a.providerSpecificData?.fastMode===!0?"on":"off"}. Uses the provider's faster processing mode at a higher token cost.`,children:(0,r.jsxs)("button",{type:"button",onClick:()=>ta(a,a.providerSpecificData?.fastMode!==!0),disabled:c||k,role:"switch","aria-label":"Toggle fast mode","aria-checked":a.providerSpecificData?.fastMode===!0,className:`flex h-8 min-w-14 items-center justify-center gap-1 rounded-lg border px-2 text-[11px] font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${a.providerSpecificData?.fastMode===!0?"border-primary/30 bg-primary/10 text-primary":"border-black/10 text-text-muted hover:bg-black/5 hover:text-primary dark:border-white/10 dark:hover:bg-white/5"}`,children:[(0,r.jsx)("span",{className:`material-symbols-outlined text-[16px] ${w?"animate-spin":""}`,children:w?"progress_activity":"speed"}),(0,r.jsx)("span",{children:"Fast"})]})})]}),D[a.provider]&&"oauth"===a.authType&&(0,r.jsx)(A.default,{text:M[a.provider],children:(0,r.jsx)("button",{type:"button",onClick:()=>tn(a.id,a.provider,Y[a.provider]?.[a.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[a.provider]?.[a.id]===!0?"text-primary":"text-text-muted"}`,children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"bolt"})})}),(0,r.jsx)(A.default,{text:"Refresh quota",children:(0,r.jsx)("button",{type:"button",onClick:()=>e8(a.id,a.provider),disabled:c||k,"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,r.jsx)("span",{className:`material-symbols-outlined text-[18px] text-text-muted ${c?"animate-spin":""}`,children:"refresh"})})}),(0,r.jsx)(A.default,{text:"Edit connection",children:(0,r.jsx)("button",{type:"button",onClick:()=>{eA(a),eS(!0)},disabled:k,"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,r.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"edit"})})}),(0,r.jsx)(A.default,{text:"Delete connection",children:(0,r.jsx)("button",{type:"button",onClick:()=>te(a.id),disabled:k,"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,r.jsx)("span",{className:`material-symbols-outlined text-[18px] ${em===a.id?"animate-pulse":""}`,children:"delete"})})}),(0,r.jsx)("div",{className:"inline-flex items-center pl-0.5",title:a.isActive??!0?"Disable connection":"Enable connection",children:(0,r.jsx)(C.default,{size:"sm",checked:a.isActive??!0,disabled:k,onChange:e=>tt(a.id,e)})})]})]})}),(0,r.jsxs)("div",{className:"px-2 py-1.5",children:[c?(0,r.jsx)("div",{className:"text-center py-5 text-text-muted",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[28px] animate-spin",children:"progress_activity"})}):u?(0,r.jsxs)("div",{className:"text-center py-5",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[28px] text-red-500",children:"error"}),(0,r.jsx)("p",{className:"mt-1.5 text-xs text-text-muted",children:u})]}):d?.message?(0,r.jsx)("div",{className:"text-center py-5",children:(0,r.jsx)("p",{className:"text-xs text-text-muted",children:d.message})}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(S,{quotas:E,compact:!0,sortMode:"default",showSortLabel:"codex"===a.provider&&"default"!==eF,onHideQuota:e=>to(a.provider,e)}),a.lastQuotaSnapshot?.windows?.length>0&&(0,r.jsxs)("div",{className:"mt-2 border-t border-black/5 pt-2 dark:border-white/5",children:[(0,r.jsx)("p",{className:"mb-1 text-[10px] text-text-muted",children:"Pause buffer — pause this account when a window's remaining % ≤"}),(0,r.jsx)("div",{className:"flex flex-col gap-1",children:a.lastQuotaSnapshot.windows.map(e=>{let t=Number(a.quotaPauseThresholds?.[e.key])||0;return(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"min-w-0 flex-1 truncate text-[11px] text-text-muted",title:e.key,children:e.key}),(0,r.jsx)("span",{className:"w-10 text-right text-[10px] tabular-nums text-text-muted",children:"number"==typeof e.remainingPercentage?`${e.remainingPercentage}%`:"—"}),(0,r.jsx)("span",{className:"text-[10px] text-text-muted",children:"≤"}),(0,r.jsx)("input",{type:"number",min:0,max:100,value:t,onChange:t=>ts(a.id,e.key,Number.parseInt(t.target.value,10)||0),className:"w-14 rounded border border-border bg-background px-1 py-0.5 text-[11px] focus:border-primary focus:outline-none","aria-label":`Pause buffer for ${e.key}`}),(0,r.jsx)("span",{className:"text-[10px] text-text-muted",children:"%"})]},e.key)})})]})]}),d?.message&&!u&&!c&&(0,r.jsx)("p",{className:"mt-2 px-1 text-[10px] leading-relaxed text-text-muted",children:d.message}),L.length>0&&(0,r.jsxs)("div",{className:"mt-2 flex min-w-0 items-center gap-1 border-t border-black/5 pt-2 text-[10px] text-text-muted dark:border-white/5",children:[(0,r.jsx)("span",{className:"material-symbols-outlined shrink-0 text-[14px]",children:"visibility_off"}),(0,r.jsx)("span",{className:"shrink-0",children:"Hidden:"}),(0,r.jsx)("div",{className:"flex min-w-0 flex-1 items-center gap-1 overflow-x-auto whitespace-nowrap pb-2",children:L.map(e=>(0,r.jsx)("button",{type:"button",onClick:()=>td(a.provider,e),className:"shrink-0 rounded-md border border-black/10 px-1.5 py-0.5 transition-colors hover:bg-black/5 hover:text-text-primary dark:border-white/10 dark:hover:bg-white/5",title:"Show this quota row",children:e.name},v(e)))})]})]})]},a.id)})}),(0,r.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,r.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,r.jsx)("span",{className:"text-xs text-text-muted",children:ty}),(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,r.jsxs)("select",{value:tw?"custom":String(eB),onChange:e=>{let t=e.target.value;if("custom"===t)return;let a=Number.parseInt(t,10);Number.isFinite(a)&&(eV(1),eQ(a),eY(String(a)))},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,r.jsxs)("option",{value:String(e),children:[e," / page"]},e)),(0,r.jsx)("option",{value:"custom",children:"Custom"})]}),(0,r.jsx)("input",{type:"number",min:"1",max:String(500),inputMode:"numeric",value:eX,onChange:e=>eY(e.target.value),onBlur:()=>{let e=Number.parseInt(eX,10);if(!Number.isFinite(e))return void eY(String(eB));let t=Math.min(500,Math.max(1,e));eV(1),eQ(t),eY(String(t))},onKeyDown:e=>{if("Enter"!==e.key)return;let t=Number.parseInt(eX,10);if(!Number.isFinite(t))return void eY(String(eB));let a=Math.min(500,Math.max(1,t));eV(1),eQ(a),eY(String(a))},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,r.jsxs)("span",{className:"text-xs text-text-muted",children:["Page ",eZ.page," / ",eZ.totalPages]})]}),(0,r.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,r.jsx)("button",{type:"button",onClick:()=>eV(1),disabled:eZ.page<=1||ec||en,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,r.jsx)("button",{type:"button",onClick:()=>eV(e=>Math.max(1,e-1)),disabled:eZ.page<=1||ec||en,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,r.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"chevron_left"})}),(0,r.jsx)("button",{type:"button",onClick:()=>eV(e=>Math.min(eZ.totalPages,e+1)),disabled:eZ.page>=eZ.totalPages||ec||en,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,r.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"chevron_right"})}),(0,r.jsx)("button",{type:"button",onClick:()=>eV(eZ.totalPages),disabled:eZ.page>=eZ.totalPages||ec||en,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,r.jsx)($.uo,{isOpen:!!ew,onClose:()=>{ef||ek(null)},onConfirm:async()=>{let e=ew?.connection;e&&(await e6(e.id,e.provider),ek(null))},title:ew?.connection?.provider==="claude"?"Reset Claude limits?":"Reset Codex limit?",message:ew?.connection?.provider==="claude"?`Refills your ${R(J[ew.connection.id]?.raw?.resetCredits?.clears)} now for ${h(ew.connection)||"this account"} \xb7 your weekly reset day stays ${I(J[ew.connection.id]?.raw?.resetCredits?.weeklyResetsAt)}. This cannot be undone. Resets left: ${ew.resetCreditCount??0}.`:`Use 1 Codex reset credit for ${h(ew?.connection||{})||"this account"}. This cannot be undone. Remaining credits: ${ew?.resetCreditCount??0}.`,confirmText:"Reset limit",cancelText:"Cancel",variant:"danger",loading:!!ef}),ev&&(0,r.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 px-4 backdrop-blur-sm",children:(0,r.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,r.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,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("h3",{className:"text-base font-semibold text-text-primary",children:ev.data?.kind==="claude"?"Claude Code Limit Resets":"Codex Reset Credit Expiry"}),(0,r.jsx)("p",{className:"mt-0.5 truncate text-xs text-text-muted",children:h(ev.connection)||(ev.data?.kind==="claude"?"Claude account":"Codex account")})]}),(0,r.jsx)("button",{type:"button",onClick:()=>ej(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,r.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"close"})})]}),(0,r.jsx)("div",{className:"max-h-[70vh] overflow-auto bg-white p-4 dark:bg-neutral-950",children:ev.loading?(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2 py-10 text-sm text-text-muted",children:[(0,r.jsx)("span",{className:"material-symbols-outlined animate-spin text-[20px]",children:"progress_activity"}),"Loading reset credits..."]}):ev.error?(0,r.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:ev.error}):ev.data?.kind==="claude"&&ev.data.grants?.length?(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.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,r.jsxs)("span",{children:[ev.data.availableCount??0," reset",1===ev.data.availableCount?"":"s"," left"]}),(0,r.jsxs)("span",{children:["Weekly reset day: ",I(ev.data.weeklyResetsAt)]})]}),(0,r.jsx)("div",{className:"overflow-x-auto rounded-xl border border-black/10 dark:border-white/10",children:(0,r.jsxs)("table",{className:"w-full min-w-[560px] text-left text-sm",children:[(0,r.jsx)("thead",{className:"bg-black/[0.03] text-xs uppercase tracking-wide text-text-muted dark:bg-white/[0.04]",children:(0,r.jsxs)("tr",{children:[(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"Reset"}),(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"Left"}),(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"Refills"}),(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"Use By"}),(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"Remaining"})]})}),(0,r.jsx)("tbody",{children:(ev.data.grants||[]).map(e=>(0,r.jsxs)("tr",{className:"border-t border-black/5 dark:border-white/5",children:[(0,r.jsxs)("td",{className:"px-3 py-2",children:[(0,r.jsx)("div",{className:"text-text-primary",children:e.label||e.id}),(0,r.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,r.jsxs)("td",{className:"whitespace-nowrap px-3 py-2 font-medium tabular-nums text-text-primary",children:[e.resetsLeft," / ",e.resetsTotal]}),(0,r.jsx)("td",{className:"px-3 py-2 text-text-muted",children:R(e.clears)}),(0,r.jsx)("td",{className:"px-3 py-2 text-text-primary",children:I(e.endsAt)}),(0,r.jsx)("td",{className:"whitespace-nowrap px-3 py-2 font-medium text-text-primary",children:z(e.endsAt)})]},e.id))})]})})]}):ev.data?.credits?.length?(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.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,r.jsxs)("span",{children:[ev.data.credits.length," reset credit",1===ev.data.credits.length?"":"s"]}),(0,r.jsxs)("span",{children:[ev.data.availableCount??0," available"]})]}),(0,r.jsx)("div",{className:"overflow-x-auto rounded-xl border border-black/10 dark:border-white/10",children:(0,r.jsxs)("table",{className:"w-full min-w-[560px] text-left text-sm",children:[(0,r.jsx)("thead",{className:"bg-black/[0.03] text-xs uppercase tracking-wide text-text-muted dark:bg-white/[0.04]",children:(0,r.jsxs)("tr",{children:[(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"Status"}),(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"Granted At"}),(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"Expires At"}),(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"Remaining"})]})}),(0,r.jsx)("tbody",{children:ev.data.credits.map((e,t)=>(0,r.jsxs)("tr",{className:"border-t border-black/5 dark:border-white/5",children:[(0,r.jsx)("td",{className:"px-3 py-2",children:(0,r.jsx)("span",{className:"rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary",children:e.status||"unknown"})}),(0,r.jsx)("td",{className:"px-3 py-2 text-text-muted",children:I(e.grantedAt)}),(0,r.jsx)("td",{className:"px-3 py-2 text-text-primary",children:I(e.expiresAt)}),(0,r.jsx)("td",{className:"px-3 py-2 font-medium text-text-primary",children:z(e.expiresAt)})]},`${e.status}-${e.expiresAt||t}`))})]})})]}):(0,r.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:ev.data?.kind==="claude"?"No limit resets available for this account.":"No reset credit details returned for this account."})})]})}),(0,r.jsx)($.wI,{isOpen:eN,connection:eC,proxyPools:eP,onSave:tr,onClose:()=>{eS(!1),eA(null)}})]}):(0,r.jsx)(P.default,{padding:"lg",children:(0,r.jsxs)("div",{className:"text-center py-12",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[64px] text-text-muted opacity-20",children:tf.icon}),(0,r.jsx)("h3",{className:"mt-4 text-lg font-semibold text-text-primary",children:tf.title}),(0,r.jsx)("p",{className:"mt-2 text-sm text-text-muted max-w-md mx-auto",children:tf.description})]})}):(0,r.jsx)(P.default,{padding:"lg",children:(0,r.jsxs)("div",{className:"text-center py-12",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[64px] text-text-muted opacity-20",children:"cloud_off"}),(0,r.jsx)("h3",{className:"mt-4 text-lg font-semibold text-text-primary",children:"No Providers Connected"}),(0,r.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,[763,8105,801,1321,5497,8441,3794,7358],()=>e(e.s=62022)),_N_E=e.O()}]);
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3826],{62022:(e,t,a)=>{Promise.resolve().then(a.bind(a,76436)),Promise.resolve().then(a.bind(a,25086))},76436:(e,t,a)=>{"use strict";a.d(t,{default:()=>U});var r=a(95155),s=a(12115),i=a(73321),n=a(57250),l=a(89523);let o="quotaCacheData",d="quotaAutoRefresh",c="quotaTrackerPreferences",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 p(e){return e.name?.trim()||e.email?.trim()||e.displayName?.trim()||null}function h(e,t){let a=t[e.id]?.quotas?.[0];return a&&"number"==typeof a.remaining?a.remaining:1/0}function b(e){let t={};return e.forEach(e=>{t[e.id]=!0}),t}function g(e,t){let a=new Set(t.map(e=>e.id));return Object.fromEntries(Object.entries(e).filter(([e])=>a.has(e)))}async function f(e,t){return await e(t)}function y(){try{let e=window.localStorage.getItem(o);return e?JSON.parse(e):{}}catch(e){return console.error("Error reading quota cache:",e),{}}}function w(e,t){try{let a=y();a[e]={...t,cachedAt:new Date().toISOString()},window.localStorage.setItem(o,JSON.stringify(a))}catch(e){console.error("Error writing quota cache:",e)}}function k(e,t){return t&&0!==t?!e||e<0?100:e>=t?0:Math.round((t-e)/t*100):0}function v(e){return e&&"object"==typeof e?String(e.modelKey||e.name||"").trim():""}function j(e,t){let a=t?.[e]?.hidden;return new Set(Array.isArray(a)?a.map(String):[])}let N={green:{text:"text-green-600 dark:text-green-400",bg:"bg-green-500",bgLight:"bg-green-500/10",emoji:"\uD83D\uDFE2"},yellow:{text:"text-yellow-600 dark:text-yellow-400",bg:"bg-yellow-500",bgLight:"bg-yellow-500/10",emoji:"\uD83D\uDFE1"},red:{text:"text-red-600 dark:text-red-400",bg:"bg-red-500",bgLight:"bg-red-500/10",emoji:"\uD83D\uDD34"}};function S({quotas:e=[],compact:t=!1,sortMode:a="default",showSortLabel:i=!1,onHideQuota:n=null}){let[l,o]=(0,s.useState)(1),d=(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):k(e?.used,e?.total)})),[e]),c=(0,s.useMemo)(()=>"remaining-asc"===a?[...d].sort((e,t)=>e.remaining-t.remaining||e.name.localeCompare(t.name)):"remaining-desc"===a?[...d].sort((e,t)=>t.remaining-e.remaining||e.name.localeCompare(t.name)):d,[d,a]),u=Math.max(1,Math.ceil(c.length/10));if((0,s.useEffect)(()=>{o(1)},[a,e]),(0,s.useEffect)(()=>{o(e=>Math.min(e,u))},[u]),!e||0===e.length)return null;let m=c.slice((l-1)*10,10*l),x=0===c.length?0:(l-1)*10+1,p=Math.min(10*l,c.length),h=t?"py-1 px-1.5":"py-2 px-3",b=t?"text-[11px]":"text-sm",g=t?"text-[11px]":"text-sm",f=t?"text-[10px] leading-tight":"text-xs",y="function"==typeof n;return(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,r.jsxs)("div",{className:"text-[10px] text-text-muted",children:[c.length," quota",c.length>1?"s":""]}),i&&(0,r.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,r.jsx)("div",{className:"overflow-x-auto",children:(0,r.jsx)("table",{className:"w-full table-fixed text-left",children:(0,r.jsx)("tbody",{children:m.map(e=>{var a;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"}:N[(a=e.remaining)>70?"green":a>=30?"yellow":"red"],o=function(e){if(!e)return"-";try{let t="string"==typeof e?new Date(e):e,a=new Date,r=t-a;if(r<=0)return"-";let s=Math.ceil(r/6e4);if(s<60)return`${s}m`;let i=Math.floor(s/60),n=s%60;if(i<24)return`${i}h ${n}m`;let l=Math.floor(i/24);return`${l}d ${i%24}h ${n}m`}catch(e){return"-"}}(e.resetAt),d=function(e){if(!e)return null;try{let t=new Date(e),a=new Date,r=new Date(a.getFullYear(),a.getMonth(),a.getDate()),s=new Date(r);s.setDate(s.getDate()+1);let i="";i=t>=r&&t<s?"Today":t>=s&&t<new Date(s.getTime()+864e5)?"Tomorrow":t.toLocaleDateString("en-US",{month:"short",day:"numeric"});let n=t.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0});return`${i}, ${n}`}catch{return null}}(e.resetAt),c=!1!==e.recurring?`in ${o}`:`expires in ${o}`;return(0,r.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,r.jsx)("td",{className:`${h} w-[30%]`,children:(0,r.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[(0,r.jsx)("span",{className:"text-[10px] shrink-0",children:l.emoji}),(0,r.jsx)("span",{className:`${b} font-medium text-text-primary truncate`,children:e.name}),e.runtimeLimited&&(e.runtimeActionUrl?(0,r.jsx)("a",{href:e.runtimeActionUrl,target:"_blank",rel:"noreferrer",className:"shrink-0 rounded bg-amber-500/15 px-1 py-0.5 text-[9px] font-medium text-amber-600 underline decoration-dotted underline-offset-2 dark:text-amber-400",title:e.runtimeLimitReason||"Verify this Google account, then retry the model.",children:e.runtimeLimitLabel||"account blocked"}):(0,r.jsx)("span",{className:"shrink-0 rounded bg-amber-500/15 px-1 py-0.5 text-[9px] font-medium text-amber-600 dark:text-amber-400",title:e.runtimeLimitReason||"The provider runtime rejected this model even though the quota endpoint still reports capacity.",children:e.runtimeLimitLabel||"runtime limit"}))]})}),(0,r.jsx)("td",{className:`${h} w-[45%]`,children:(0,r.jsxs)("div",{className:t?"space-y-1":"space-y-1.5",children:[!s&&!i&&(0,r.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,r.jsx)("div",{className:`h-full transition-all duration-300 ${l.bg}`,style:{width:`${Math.min(e.remaining,100)}%`}})}),(0,r.jsxs)("div",{className:`flex items-center justify-between ${t?"text-[10px]":"text-xs"}`,children:[(0,r.jsx)("span",{className:"text-text-muted",children:s?`${e.used.toLocaleString()} used \xb7 Unlimited`:i?`Credit: ${e.total.toFixed(2)} ${e.name.split(" ")[2]||""}`:e.percentageOnly?(0,r.jsx)("span",{title:e.quotaNote||"The provider does not expose an absolute request count.",children:"count unavailable"}):(0,r.jsxs)(r.Fragment,{children:[e.used.toLocaleString()," / ",e.total>0?e.total.toLocaleString():"∞"]})}),(0,r.jsx)("span",{className:`font-medium ${s?"text-green-600 dark:text-green-400":i?"text-blue-600 dark:text-blue-400":l.text}`,children:s?"Unlimited":i?"":`${e.remaining}%`})]})]})}),(0,r.jsx)("td",{className:`${h} ${y?"w-[20%]":"w-[25%]"}`,children:"-"!==o||d?t?(0,r.jsx)("div",{className:`${g} text-text-primary font-medium truncate`,title:d||"",children:"-"!==o?c:d}):(0,r.jsxs)("div",{className:"space-y-0.5",children:["-"!==o&&(0,r.jsx)("div",{className:`${g} text-text-primary font-medium`,children:c}),d&&(0,r.jsx)("div",{className:`${f} text-text-muted`,children:d})]}):(0,r.jsx)("div",{className:`${g} text-text-muted italic`,children:"N/A"})}),y&&(0,r.jsx)("td",{className:`${h} w-[5%] text-right`,children:(0,r.jsx)("button",{type:"button",onClick:()=>n(e),className:"inline-flex h-6 w-6 items-center justify-center rounded-md text-text-muted transition-colors hover:bg-black/5 hover:text-text-primary dark:hover:bg-white/5",title:"Hide this quota row","aria-label":`Hide quota ${e.name}`,children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[15px]",children:"visibility_off"})})})]},`${e.name}-${e.index}`)})})})}),u>1&&(0,r.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,r.jsxs)("div",{className:"flex items-center justify-between gap-2 text-[10px] text-text-muted",children:[(0,r.jsxs)("span",{children:["Showing ",x,"-",p," of ",c.length]}),(0,r.jsxs)("span",{children:["Page ",l," / ",u]})]}),(0,r.jsxs)("div",{className:"mt-1.5 flex items-center justify-end gap-1",children:[(0,r.jsx)("button",{type:"button",onClick:()=>o(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,r.jsx)("button",{type:"button",onClick:()=>o(e=>Math.min(u,e+1)),disabled:l===u,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 C=a(98542),A=a(97677),$=a(84588),P=a(35497),q=a(88105),E=a(11059),_=a(78177);let T={"builder-id":"AWS Builder ID",idc:"IAM Identity Center",google:"Google",github:"GitHub",imported:"Imported Token",api_key:"API Key"},M={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 request to an available model. Consumes a small amount of quota."};function O(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 F(e){let t=e.providerSpecificData?.region;if(t)return t;let a=e.providerSpecificData?.profileArn;return("string"==typeof a?a.split(":")[3]:"")||""}let L={five_hour:"session",seven_day:"weekly",seven_day_overage_included:"weekly",seven_day_opus:"Opus weekly",seven_day_sonnet:"Sonnet weekly"};function R(e){let t=[...new Set((e||[]).map(e=>L[e]).filter(Boolean))];return t.length?`${t.join(" + ")} limits`:"limits"}function I(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 z(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 a=Math.ceil(t/36e5),r=Math.floor(a/24),s=a%24;return r>0?`${r}d ${s}h`:`${s}h`}function U(){let{copied:e,copy:t}=(0,E.C)(),a=(0,i.useSearchParams)(),N=(0,i.useRouter)(),L=(0,i.usePathname)(),[U,W]=(0,s.useState)([]),[J,K]=(0,s.useState)({}),[H,G]=(0,s.useState)({}),[V,B]=(0,s.useState)({}),[Q,X]=(0,s.useState)(!0),[Y,Z]=(0,s.useState)({claude:{},codex:{}}),[ee,et]=(0,s.useState)(null),[ea,er]=(0,s.useState)(!1),[es,ei]=(0,s.useState)(!1),[en,el]=(0,s.useState)(!1),[eo,ed]=(0,s.useState)(60),[ec,eu]=(0,s.useState)(!0),[em,ex]=(0,s.useState)(null),[ep,eh]=(0,s.useState)(null),[eb,eg]=(0,s.useState)(null),[ef,ey]=(0,s.useState)(null),[ew,ek]=(0,s.useState)(null),[ev,ej]=(0,s.useState)(null),[eN,eS]=(0,s.useState)(!1),[eC,eA]=(0,s.useState)(null),[e$,eP]=(0,s.useState)([]),[eq,eE]=(0,s.useState)(()=>a?.get("provider")||"all"),e_=(0,s.useCallback)(e=>{eE(e);try{let t=new URLSearchParams(a?.toString()||"");"all"===e?t.delete("provider"):t.set("provider",e);let r=t.toString()?`${L}?${t.toString()}`:L;N.replace(r,{scroll:!1})}catch{}},[L,N,a]),[eT,eM]=(0,s.useState)([]),[eD,eO]=(0,s.useState)("all"),[eF,eL]=(0,s.useState)("default"),[eR,eI]=(0,s.useState)({}),[ez,eU]=(0,s.useState)(!1),[eW,eJ]=(0,s.useState)(!1),[eK,eH]=(0,s.useState)(!1),[eG,eV]=(0,s.useState)(1),[eB,eQ]=(0,s.useState)(20),[eX,eY]=(0,s.useState)(String(20)),[eZ,e0]=(0,s.useState)({page:1,pageSize:20,total:0,totalPages:1}),[e1,e5]=(0,s.useState)({eligibleConnections:0,providerFilteredConnections:0}),e2=(0,s.useRef)(0),e3=(0,s.useCallback)(async(e=eG)=>{try{var t,a;let r=new URLSearchParams({page:String(e),pageSize:String(eB),accountStatus:eD,sort:"priority"});"all"!==eq&&r.set("provider",eq);let s=await fetch(`/api/providers/client?${r.toString()}`);if(!s.ok)throw Error("Failed to fetch connections");let i=await s.json(),n=i.connections||[],l=(t=i.pagination,t||{page:1,pageSize:eB,total:0,totalPages:1}),o=function(e,t=0){return e||{eligibleConnections:t,providerFilteredConnections:t}}(i.totals,n.length);return W(n),eM(i.providerOptions||[]),e0(l),e5(o),eV((a=i.pagination,a?.page||e)),n}catch(e){return console.error("Error fetching connections:",e),W([]),eM([]),e0({page:1,pageSize:eB,total:0,totalPages:1}),e5({eligibleConnections:0,providerFilteredConnections:0}),[]}},[eD,ez,eG,eB,eq]),e4=(0,s.useCallback)(async(e,t,{force:a=!1}={})=>{G(t=>({...t,[e]:!0})),B(t=>({...t,[e]:null}));try{console.log(`[ProviderLimits] Fetching quota for ${t} (${e})`);let r=`/api/usage/${e}${a?"?force=1":""}`,s=await fetch(r);if(!s.ok){let a=(await s.json().catch(()=>({}))).error||s.statusText;if(404===s.status)return void console.warn(`[ProviderLimits] Connection not found for ${t}, skipping`);if(401===s.status){console.warn(`[ProviderLimits] Auth error for ${t}:`,a);let r={quotas:[],message:a};K(t=>({...t,[e]:r})),w(e,r);return}throw Error(`HTTP ${s.status}: ${a}`)}let i=await s.json();console.log(`[ProviderLimits] Got quota for ${t}:`,i);let n={quotas:function(e,t){if(!t||"object"!=typeof t)return[];let a=[];try{switch(e.toLowerCase()){case"github":default:t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"antigravity":if(t.quotas){let e=Object.entries(t.quotas),r=new Set(["gemini_weekly","claude_gpt_weekly"]),s=new Set(["gemini_session","claude_gpt_session"]),i=new Set([...r,...s]),n=e.filter(([e])=>e.startsWith("gemini-")&&!e.includes("image")),l=e.filter(([e])=>e.startsWith("claude-")),o=e.filter(([e])=>e.includes("image")),d=e.filter(([e])=>i.has(e)),c=e.filter(([e])=>!e.startsWith("gemini-")&&!e.startsWith("claude-")&&!e.includes("image")&&!i.has(e)),u=!!t.quotas.gemini_weekly,m=!!t.quotas.gemini_session,x=!!t.quotas.claude_gpt_weekly,p=!!t.quotas.claude_gpt_session;if(m)d.filter(([e])=>"gemini_session"===e).forEach(([e,t])=>{a.push({name:t.displayName||e,modelKey:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});else if(n.length>0){let e=n.reduce((e,t)=>(t[1].remainingPercentage??100)<(e[1].remainingPercentage??100)?t:e)[1],r=t.quotas.gemini_weekly?.resetAt;u&&e.resetAt===r&&(e.remainingPercentage??0)===0||a.push({name:"Gemini (Flash / Pro)",modelKey:"gemini",used:e.used||0,total:e.total||0,resetAt:e.resetAt||null,remainingPercentage:e.remainingPercentage})}if(u&&d.filter(([e])=>"gemini_weekly"===e).forEach(([e,t])=>{a.push({name:t.displayName||e,modelKey:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})}),p)d.filter(([e])=>"claude_gpt_session"===e).forEach(([e,t])=>{a.push({name:t.displayName||e,modelKey:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});else if(l.length>0){let e=l.reduce((e,t)=>(t[1].remainingPercentage??100)<(e[1].remainingPercentage??100)?t:e)[1],r=t.quotas.claude_gpt_weekly?.resetAt;x&&e.resetAt===r&&(e.remainingPercentage??0)===0||a.push({name:"Claude (Sonnet / Opus)",modelKey:"claude",used:e.used||0,total:e.total||0,resetAt:e.resetAt||null,remainingPercentage:e.remainingPercentage})}x&&d.filter(([e])=>"claude_gpt_weekly"===e).forEach(([e,t])=>{a.push({name:t.displayName||e,modelKey:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})}),o.forEach(([e,t])=>{a.push({name:t.displayName||e,modelKey:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})}),x||p||c.forEach(([e,t])=>{a.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 r=e;"spark_session"===e?r="Spark (5h)":"spark_weekly"===e?r="Spark (Weekly)":"session"===e?r="5h":"weekly"===e?r="Weekly":"review_session"===e?r="Review (5h)":"review_weekly"===e&&(r="Review (Weekly)"),a.push({name:r,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])=>{a.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])=>{"organization"===e&&(!t||[t.total,t.used,t.remaining].every(e=>0===(Number(e)||0)))||a.push({name:"user"===e?"Personal":"organization"===e?"Organization":e,used:t.used||0,total:Math.max(0,Number(t.total)||0)||(Number(t.used)||0)+(Number(t.remaining)||0),unit:t.unit,resetAt:t.resetAt||null})});break;case"claude":t.message?a.push({name:"error",used:0,total:0,resetAt:null,message:t.message}):t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.push({name:e,used:t.used||0,total:t.total||0,remaining:void 0!==t.remaining?t.remaining:Math.max(0,(t.total||100)-(t.used||0)),remainingPercentage:void 0!==t.remainingPercentage?t.remainingPercentage:k(t.used,t.total),resetAt:t.resetAt||null})});break;case"vercel-ai-gateway":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.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])=>{a.push({name: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])=>{a.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});break;case"kimi":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});break;case"cursor":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"deepseek":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});break;case"groq":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"ollama":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.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])=>{a.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage,unlimited:t.unlimited})})}}catch(t){return console.error(`Error parsing quota data for ${e}:`,t),[]}if(e?.toLowerCase()==="claude"){let e={"session (5h)":0,"weekly (7d)":1,"weekly fable (7d)":2,"weekly opus (7d)":3,"weekly sonnet (7d)":4};return a.sort((t,a)=>(e[t.name]??99)-(e[a.name]??99)),a}let r=(0,l.KC)(e);if(r.length>0){let e=new Map(r.map((e,t)=>[e.id,t]));a.sort((t,a)=>{let r=t.modelKey||t.name,s=a.modelKey||a.name;return("gemini"===r||"gemini_session"===r)&&(r="gemini-3.8-flash-high"),("claude"===r||"claude_gpt_session"===r)&&(r="claude-sonnet-4-6"),("gemini"===s||"gemini_session"===s)&&(s="gemini-3.8-flash-high"),("claude"===s||"claude_gpt_session"===s)&&(s="claude-sonnet-4-6"),(e.get(r)??999)-(e.get(s)??999)})}return a}(t,i),plan:i.plan||null,message:i.message||null,raw:i};K(t=>({...t,[e]:n})),w(e,n)}catch(a){console.error(`[ProviderLimits] Error fetching quota for ${t} (${e}):`,a),B(t=>({...t,[e]:a.message||"Failed to fetch quota"}))}finally{G(t=>({...t,[e]:!1}))}},[]),e8=(0,s.useCallback)(async(e,t)=>{await e4(e,t,{force:!0}),et(new Date)},[e4]),e6=(0,s.useCallback)(async(e,t)=>{if(("codex"===t||"claude"===t)&&!ef){ey(e),B(t=>({...t,[e]:null}));try{let a="claude"===t?await fetch(`/api/usage/${e}/claude-reset`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({grantId:J[e]?.raw?.resetCredits?.nextGrantId})}):await fetch(`/api/usage/${e}/codex-reset-credits`,{method:"POST"}),r=await a.json().catch(()=>({}));if(!a.ok)throw Error(r.message||r.error||r.code||"Failed to reset limit");await e4(e,t,{force:!0}),et(new Date)}catch(t){B(a=>({...a,[e]:t.message||"Failed to reset limit"}))}finally{ey(null)}}},[e4,ef,J]),e7=(0,s.useCallback)((e,t)=>{ej({connection:e,loading:!1,error:null,data:{kind:"claude",...t}})},[]),e9=(0,s.useCallback)(async e=>{ej({connection:e,loading:!0,error:null,data:null});try{let t=await fetch(`/api/usage/${e.id}/codex-reset-credits`,{cache:"no-store"}),a=await t.json().catch(()=>({}));if(!t.ok)throw Error(a.error||a.message||"Failed to load Codex reset credits");let r=Array.isArray(a.credits)?[...a.credits]:[];r.sort((e,t)=>{let a=e.expiresAt?new Date(e.expiresAt).getTime():1/0,r=t.expiresAt?new Date(t.expiresAt).getTime():1/0;return a-r}),ej({connection:e,loading:!1,error:null,data:{...a,credits:r}})}catch(t){ej({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?")){ex(e);try{if((await fetch(`/api/providers/${e}`,{method:"DELETE"})).ok){K(t=>{let a={...t};return delete a[e],a}),G(t=>{let a={...t};return delete a[e],a}),B(t=>{let a={...t};return delete a[e],a});try{let t=y();t[e]&&(delete t[e],window.localStorage.setItem(o,JSON.stringify(t)))}catch(e){console.error("Error deleting cache entry:",e)}await f(e3,eG)}}catch(e){console.error("Error deleting connection:",e)}finally{ex(null)}}},[e3,eG]),tt=(0,s.useCallback)(async(e,t)=>{eh(e);try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})})).ok&&(K(e=>({...e})),await f(e3,eG))}catch(e){console.error("Error updating connection status:",e)}finally{eh(null)}},[e3,eG]),ta=(0,s.useCallback)(async(e,t)=>{if(!eb){eg(e.id);try{let a=await fetch(`/api/providers/${e.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerSpecificData:{fastMode:t}})}),r=await a.json().catch(()=>({}));if(!a.ok)throw Error(r.error||"Failed to save fast mode");W(a=>a.map(a=>a.id===e.id?{...a,providerSpecificData:{...a.providerSpecificData,fastMode:t}}:a))}catch(e){alert(e.message||"Failed to save fast mode")}finally{eg(null)}}},[eb]),tr=(0,s.useCallback)(async e=>{if(!eC?.id)return;let t=eC.id,a=eC.provider;try{(await fetch(`/api/providers/${t}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).ok&&(await e3(),eS(!1),eA(null),q.wb.includes(a)&&await e4(t,a))}catch(e){console.error("Error saving connection:",e)}},[eC,e3,e4]),ts=(0,s.useCallback)(async(e,t,a)=>{let r=U.find(t=>t.id===e);if(!r)return;let s={...r.quotaPauseThresholds&&"object"==typeof r.quotaPauseThresholds?r.quotaPauseThresholds:{}},i=Number(a);Number.isFinite(i)&&i>0&&i<=100?s[t]=i:delete s[t];try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({quotaPauseThresholds:s})})).ok&&W(t=>t.map(t=>t.id===e?{...t,quotaPauseThresholds:s}:t))}catch(e){console.error("Error updating quota threshold:",e)}},[U]);(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&&eP(t.proxyPools)}).catch(()=>{}),()=>{e=!0}},[]);let ti=(0,s.useCallback)(async(e=!1)=>{if(en)return;el(!0),ed(60);let t=e2.current+=1,a=Math.round(10);try{let r=await e3(eG);G(b(r)),B(e=>g(e,r)),K(e=>g(e,r)),await Promise.all(r.filter(r=>e||"claude"!==r.provider||t%a==0).map(e=>e4(e.id,e.provider))),et(new Date)}catch(e){console.error("Error refreshing all providers:",e)}finally{el(!1)}},[en,e3,e4,eG]);(0,s.useEffect)(()=>{(async()=>{eu(!0);let e=await e3(eG);eu(!1),G(b(e)),B(t=>g(t,e)),K(t=>g(t,e)),await Promise.all(e.map(e=>e4(e.id,e.provider))),et(new Date)})()},[e3,e4,eG]),(0,s.useEffect)(()=>{let e=window.localStorage.getItem(d);X(null===e||"true"===e),er(!0)},[]),(0,s.useEffect)(()=>{ea&&window.localStorage.setItem(d,String(Q))},[Q,ea]),(0,s.useEffect)(()=>{try{let e=window.localStorage.getItem(c);if(e){let t=JSON.parse(e);if(t?.accountFilter&&["all","active","inactive"].includes(t.accountFilter)&&eO(t.accountFilter),t?.pageSize){let e=Number(t.pageSize);Number.isFinite(e)&&e>0&&(eQ(e),eY(String(e)))}}}catch{}ei(!0)},[]),(0,s.useEffect)(()=>{if(es)try{window.localStorage.setItem(c,JSON.stringify({accountFilter:eD,pageSize:eB}))}catch{}},[eD,eB,es]),(0,s.useEffect)(()=>{fetch("/api/settings",{cache:"no-store"}).then(e=>e.ok?e.json():{}).then(e=>{Z({claude:e?.claudeAutoPing?.connections||{},codex:e?.codexAutoPing?.connections||{}}),eI(e?.quotaVisibility||{})}).catch(()=>{})},[]);let tn=(0,s.useCallback)(async(e,t,a)=>{let r=M[t];if(!r)return;let s={...Y[t]||{},[e]:a};Z({...Y,[t]:s});try{let e=await fetch("/api/settings",{cache:"no-store"}),t={...(e.ok?await e.json():{})[r]||{},connections:s};await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({[r]:t})})}catch{Z(Y)}},[Y]),tl=(0,s.useCallback)(async(e,t)=>{eI(e);try{if(!(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({quotaVisibility:e})})).ok)throw Error("Failed to update quota visibility")}catch(e){console.error("Error updating quota visibility:",e),eI(t)}},[]),to=(0,s.useCallback)((e,t)=>{let a=v(t);if(!e||!a)return;let r=eR[e]||{},s=new Set(r.hidden||[]);if(s.add(a),"antigravity"===e){if("gemini"===a)for(let e of s)e.startsWith("gemini-")&&!e.includes("image")&&s.delete(e);else if("claude"===a)for(let e of s)e.startsWith("claude-")&&s.delete(e)}tl({...eR,[e]:{...r,hidden:[...s]}},eR)},[eR,tl]),td=(0,s.useCallback)((e,t)=>{let a=v(t);if(!e||!a)return;let r=eR[e]||{},s=new Set(r.hidden||[]);if(s.delete(a),"antigravity"===e){if("gemini"===a)for(let e of s)e.startsWith("gemini-")&&!e.includes("image")&&s.delete(e);else if("claude"===a)for(let e of s)e.startsWith("claude-")&&s.delete(e)}tl({...eR,[e]:{...r,hidden:[...s]}},eR)},[eR,tl]),tc=(0,s.useRef)(ti);(0,s.useEffect)(()=>{tc.current=ti},[ti]);let tu=(0,s.useMemo)(()=>(function({onRefresh:e,onTick:t,refreshIntervalMs:a,tickMs:r=1e3}){let s=null,i=null,n=()=>{null!==s&&(clearInterval(s),s=null),null!==i&&(clearInterval(i),i=null)};return{start:()=>{n(),s=setInterval(()=>e(),a),i=setInterval(()=>t(),r)},stop:n,isRunning:()=>null!==s||null!==i}})({onRefresh:()=>tc.current(),onTick:()=>ed(e=>e<=1?60:e-1),refreshIntervalMs:6e4}),[]);(0,s.useEffect)(()=>!ea||!Q||"u">typeof document&&document.hidden?void tu.stop():(tu.start(),()=>tu.stop()),[Q,ea,tu]),(0,s.useEffect)(()=>{let e=()=>{document.hidden?tu.stop():Q&&ea&&tu.start()};return document.addEventListener("visibilitychange",e),()=>{document.removeEventListener("visibilitychange",e),tu.stop()}},[Q,ea,tu]);let tm=(0,s.useMemo)(()=>(function(e,t,a,r,s){if("codex"===r&&"default"!==s)return[...e].sort((e,a)=>{let r=h(e,t),i=h(a,t),n="remaining-asc"===s?r-i:i-r;return 0!==n?n:(p(e)||"").localeCompare(p(a)||"")});if(!a){let t=new Map;for(let a of e){let e=a.provider||"";t.has(e)||t.set(e,[]),t.get(e).push(a)}return Array.from(t.values()).flat()}let i=e=>{let a=(t[e.id]?.quotas||[]).map(e=>e.resetAt?new Date(e.resetAt).getTime():1/0).filter(e=>Number.isFinite(e));return a.length>0?Math.min(...a):1/0};return[...e].sort((e,t)=>{let a=i(e)-i(t);return 0!==a?a:(e.provider||"").localeCompare(t.provider||"")||(p(e)||"").localeCompare(p(t)||"")})})(U,J,ez,eq,eF),[U,J,ez,eq,eF]),tx=e=>{let t=J[e.id]?.quotas;return!!t?.length&&t.some(e=>!!e.total&&!(e.total<=0)&&5>=k(e.used,e.total))},tp=(0,s.useCallback)(async(e,t)=>{if(e.length&&!eK){eH(!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,eG)}catch(e){console.error("Error bulk toggling connections:",e)}finally{eH(!1)}}},[eK,e3,eG]),th="all"===eq?"All providers":eq,tb=e1.eligibleConnections>0,tg=tm.length>0,tf=e1.eligibleConnections?e1.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"===eq?"Try changing the account status filter to see more quota trackers.":`No ${"inactive"===eD?"turned off":"active"===eD?"active":"matching"} accounts found for ${eq}.`}:{icon:"cloud_off",title:"No Providers Connected",description:"Connect to providers with OAuth to track your API quota limits and usage."},ty=function(e){var t;let{start:a,end:r}=(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 ${a}-${r} of ${e.total}`}(eZ),tw=!u.includes(eB);return ec||tb?ec||tg?(0,r.jsxs)("div",{className:"space-y-6",children:[(0,r.jsx)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-end",children:(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsxs)("button",{type:"button",onClick:()=>eJ(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":eW,title:"Filter quota providers",children:[(0,r.jsxs)("span",{className:"flex min-w-0 items-center gap-1.5",children:["all"===eq?(0,r.jsx)("span",{className:"material-symbols-outlined text-[14px] text-text-muted",children:"apps"}):(0,r.jsx)(n.A,{src:`/providers/${eq}.png`,alt:eq,size:18,className:"size-[18px] rounded object-contain",fallbackText:eq.slice(0,2).toUpperCase()}),(0,r.jsx)("span",{className:"truncate capitalize hidden lg:inline",children:th})]}),(0,r.jsx)("span",{className:"material-symbols-outlined text-[14px] text-text-muted",children:"expand_more"})]}),eW&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("button",{type:"button",className:"fixed inset-0 z-30 bg-transparent","aria-label":"Close provider filter",onClick:()=>eJ(!1)}),(0,r.jsxs)("div",{className:"absolute left-0 z-40 mt-2 w-64 overflow-hidden rounded-2xl border border-black/10 bg-surface/95 p-1.5 shadow-xl shadow-black/10 backdrop-blur dark:border-white/10 dark:bg-surface/95 sm:w-72",children:[(0,r.jsxs)("button",{type:"button",onClick:()=>{"all"!==eq&&eV(1),e_("all"),eJ(!1)},className:`flex w-full items-center gap-3 rounded-xl px-3 py-2.5 text-left text-sm transition-colors ${"all"===eq?"bg-primary/10 text-primary":"text-text-primary hover:bg-black/5 dark:hover:bg-white/10"}`,children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[22px]",children:"apps"}),(0,r.jsx)("span",{className:"font-medium",children:"All providers"}),"all"===eq&&(0,r.jsx)("span",{className:"material-symbols-outlined ml-auto text-[20px]",children:"check"})]}),(0,r.jsx)("div",{className:"my-1 h-px bg-black/10 dark:bg-white/10"}),(0,r.jsx)("div",{className:"max-h-72 overflow-y-auto pr-1",children:eT.map(e=>(0,r.jsxs)("button",{type:"button",onClick:()=>{eq!==e&&eV(1),e_(e),eJ(!1)},className:`flex w-full items-center gap-3 rounded-xl px-3 py-2.5 text-left text-sm transition-colors ${eq===e?"bg-primary/10 text-primary":"text-text-primary hover:bg-black/5 dark:hover:bg-white/10"}`,children:[(0,r.jsx)(n.A,{src:`/providers/${e}.png`,alt:e,size:24,className:"size-6 rounded-md object-contain",fallbackText:e.slice(0,2).toUpperCase()}),(0,r.jsx)("span",{className:"font-medium capitalize",children:e}),eq===e&&(0,r.jsx)("span",{className:"material-symbols-outlined ml-auto text-[20px]",children:"check"})]},e))})]})]})]}),(0,r.jsx)("select",{value:eD,onChange:e=>{let t=e.target.value;eD!==t&&eV(1),eO(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,r.jsx)("option",{value:e.value,children:e.label},e.value))}),"codex"===eq&&(0,r.jsx)("select",{value:eF,onChange:e=>eL(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,r.jsx)("option",{value:e.value,children:e.label},e.value))}),(0,r.jsxs)("button",{type:"button",onClick:()=>eU(e=>!e),"aria-pressed":ez,className:`flex h-8 shrink-0 items-center gap-1 rounded-lg border px-2 text-xs transition-colors ${ez?"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,r.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"hourglass_top"}),(0,r.jsx)("span",{className:"hidden sm:inline",children:"Expiring first"})]}),(0,r.jsxs)("button",{type:"button",onClick:()=>{tp(tm.filter(e=>(e.isActive??!0)&&tx(e)).map(e=>e.id),!1)},disabled:eK,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,r.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"block"}),(0,r.jsx)("span",{className:"hidden sm:inline",children:"Turn off Empty"})]}),(0,r.jsxs)("button",{type:"button",onClick:()=>{tp(tm.filter(e=>!(e.isActive??!0)&&!tx(e)).map(e=>e.id),!0)},disabled:eK,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,r.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"check_circle"}),(0,r.jsx)("span",{className:"hidden sm:inline",children:"Turn on Available"})]}),(0,r.jsxs)("button",{onClick:()=>X(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:Q?"Disable auto-refresh":"Enable auto-refresh",children:[(0,r.jsx)("span",{className:`material-symbols-outlined text-[14px] ${Q?"text-primary":"text-text-muted"}`,children:Q?"toggle_on":"toggle_off"}),(0,r.jsx)("span",{className:"hidden text-text-primary sm:inline",children:"Auto-refresh"}),Q&&(0,r.jsxs)("span",{className:"text-[10px] text-text-muted tabular-nums",children:["(",eo,"s)"]})]}),(0,r.jsx)("button",{type:"button",onClick:()=>ti(!0),disabled:en,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,r.jsx)("span",{className:`material-symbols-outlined text-[14px] ${en?"animate-spin":""}`,children:"refresh"})})]})}),ez&&(0,r.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,r.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:tm.map(a=>{let s,i,l,o,d=J[a.id],c=H[a.id],u=V[a.id],m=!1===a.isActive,x="codex"===a.provider,h=x?(s=d?.plan?.trim())&&"unknown"!==s.toLowerCase()?s:a?.providerSpecificData?.chatgptPlanType?.trim()||null:null,b="claude"===a.provider?d?.raw?.resetCredits:null,g=x?"Codex reset credit":"Claude limit reset",f=Number.isFinite(l="number"==typeof(i=d?.raw?.resetCredits?.availableCount)?i:Number(i))?Math.max(0,l):0,y=ef===a.id,w=eb===a.id,k=em===a.id||ep===a.id||y||w,N=d?.quotas||[],E=function(e,t=[],a={}){if(!Array.isArray(t)||0===t.length)return[];let r=j(e,a);return 0===r.size?t:t.filter(e=>!r.has(v(e)))}(a.provider,N,eR),L=function(e,t=[],a={}){if(!Array.isArray(t)||0===t.length)return[];let r=j(e,a);return 0===r.size?[]:t.filter(e=>r.has(v(e)))}(a.provider,N,eR),z=(0,_.XD)(a);return(0,r.jsxs)($.default,{padding:"none",className:`min-w-0 ${m?"opacity-60":""}`,children:[(0,r.jsx)("div",{className:"px-3 py-2 border-b border-black/10 dark:border-white/10",children:(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,r.jsx)("div",{className:"w-8 h-8 shrink-0 rounded-md flex items-center justify-center overflow-hidden",children:(0,r.jsx)(n.A,{src:`/providers/${a.provider}.png`,alt:a.provider,size:32,className:"object-contain",fallbackText:a.provider?.slice(0,2).toUpperCase()||"PR"})}),(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("h3",{className:"text-sm font-semibold text-text-primary capitalize truncate",children:a.provider}),p(a)?(0,r.jsx)("p",{className:"text-xs text-text-muted truncate",children:p(a)}):null,O(a)?(0,r.jsx)("p",{className:"text-[11px] text-text-muted/80 truncate",children:O(a)}):null,h?(0,r.jsx)("span",{className:"mt-1 inline-flex rounded-full bg-brand-500/10 px-2 py-0.5 text-[10px] font-semibold text-brand-600 dark:text-brand-300",children:h}):null,z.enabled&&(0,r.jsx)("p",{className:"mt-0.5",children:(0,r.jsx)(P.Ex,{variant:z.paused?"warning":"default",size:"sm",children:z.paused?`Paused (quota${z.triggered?`: ${z.triggered.key}`:""})`:"Buffers set"})}),"kiro"===a.provider&&(0,r.jsxs)("div",{className:"mt-1 flex flex-wrap items-center gap-1",children:[(0,r.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=a.providerSpecificData?.authMethod)&&T[o]?T[o]:"api_key"===a.authType?"API Key":"OAuth"}),F(a)&&(0,r.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:F(a)}),(0,r.jsx)("span",{className:`rounded-full px-2 py-0.5 text-[10px] font-semibold ${m?"bg-surface-2 text-text-muted":"active"===a.testStatus||"success"===a.testStatus?"bg-green-500/10 text-green-600 dark:text-green-400":"error"===a.testStatus||"expired"===a.testStatus||"unavailable"===a.testStatus?"bg-red-500/10 text-red-600 dark:text-red-400":"bg-surface-2 text-text-muted"}`,children:m?"disabled":a.testStatus||"unknown"}),a.providerSpecificData?.profileArn&&(0,r.jsxs)("button",{type:"button",onClick:()=>t(a.providerSpecificData.profileArn,a.id),title:a.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,r.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:e===a.id?"check":"content_copy"}),(0,r.jsx)("code",{className:"truncate font-mono",children:a.providerSpecificData.profileArn})]})]})]})]}),(0,r.jsxs)("div",{className:"flex items-center gap-1 shrink-0",children:[(x||b)&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(A.default,{text:f>0?b?`Use your reset now (${f} left, use by ${I(b.expiresAt)}) \xb7 refills ${R(b.clears)}`:`Use one ${g}. Available: ${f}`:`No ${g}s available`,children:(0,r.jsxs)("button",{type:"button",onClick:()=>ek({connection:a,resetCreditCount:f}),disabled:f<=0||c||k,"aria-label":f>0?`Use one ${g}. ${f} available.`:`No ${g}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 ${f>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,r.jsx)("span",{className:`material-symbols-outlined text-[15px] ${y?"animate-spin":""}`,children:y?"progress_activity":"restart_alt"}),(0,r.jsx)("span",{children:f})]})}),(0,r.jsx)(A.default,{text:x?"View Codex reset credit expiry":"View Claude Code reset expiry",children:(0,r.jsx)("button",{type:"button",onClick:()=>x?e9(a):e7(a,b),disabled:c||k,"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,r.jsx)("span",{className:"material-symbols-outlined text-[17px]",children:"schedule"})})}),q.Q2[a.provider]?.fastMode&&(0,r.jsx)(A.default,{text:`Fast mode is ${a.providerSpecificData?.fastMode===!0?"on":"off"}. Uses the provider's faster processing mode at a higher token cost.`,children:(0,r.jsxs)("button",{type:"button",onClick:()=>ta(a,a.providerSpecificData?.fastMode!==!0),disabled:c||k,role:"switch","aria-label":"Toggle fast mode","aria-checked":a.providerSpecificData?.fastMode===!0,className:`flex h-8 min-w-14 items-center justify-center gap-1 rounded-lg border px-2 text-[11px] font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${a.providerSpecificData?.fastMode===!0?"border-primary/30 bg-primary/10 text-primary":"border-black/10 text-text-muted hover:bg-black/5 hover:text-primary dark:border-white/10 dark:hover:bg-white/5"}`,children:[(0,r.jsx)("span",{className:`material-symbols-outlined text-[16px] ${w?"animate-spin":""}`,children:w?"progress_activity":"speed"}),(0,r.jsx)("span",{children:"Fast"})]})})]}),M[a.provider]&&"oauth"===a.authType&&(0,r.jsx)(A.default,{text:D[a.provider],children:(0,r.jsx)("button",{type:"button",onClick:()=>tn(a.id,a.provider,Y[a.provider]?.[a.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[a.provider]?.[a.id]===!0?"text-primary":"text-text-muted"}`,children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"bolt"})})}),x&&(0,r.jsx)(A.default,{text:a.providerSpecificData?.codexFastMode===!0?"Fast mode ON — Codex requests on this account use the priority tier. Click to disable.":"Force fast mode — Codex requests on this account use the priority tier.",children:(0,r.jsx)("button",{type:"button",onClick:()=>ta(a),disabled:k,"aria-label":"Toggle fast mode",className:`flex h-8 w-8 items-center justify-center rounded-lg transition-colors hover:bg-black/5 dark:hover:bg-white/5 ${a.providerSpecificData?.codexFastMode===!0?"text-primary":"text-text-muted"}`,children:(0,r.jsx)("span",{className:`material-symbols-outlined text-[18px] ${fastModeId===a.id?"animate-spin":""}`,children:fastModeId===a.id?"progress_activity":"speed"})})}),(0,r.jsx)(A.default,{text:"Refresh quota",children:(0,r.jsx)("button",{type:"button",onClick:()=>e8(a.id,a.provider),disabled:c||k,"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,r.jsx)("span",{className:`material-symbols-outlined text-[18px] text-text-muted ${c?"animate-spin":""}`,children:"refresh"})})}),(0,r.jsx)(A.default,{text:"Edit connection",children:(0,r.jsx)("button",{type:"button",onClick:()=>{eA(a),eS(!0)},disabled:k,"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,r.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"edit"})})}),(0,r.jsx)(A.default,{text:"Delete connection",children:(0,r.jsx)("button",{type:"button",onClick:()=>te(a.id),disabled:k,"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,r.jsx)("span",{className:`material-symbols-outlined text-[18px] ${em===a.id?"animate-pulse":""}`,children:"delete"})})}),(0,r.jsx)("div",{className:"inline-flex items-center pl-0.5",title:a.isActive??!0?"Disable connection":"Enable connection",children:(0,r.jsx)(C.default,{size:"sm",checked:a.isActive??!0,disabled:k,onChange:e=>tt(a.id,e)})})]})]})}),(0,r.jsxs)("div",{className:"px-2 py-1.5",children:[c?(0,r.jsx)("div",{className:"text-center py-5 text-text-muted",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[28px] animate-spin",children:"progress_activity"})}):u?(0,r.jsxs)("div",{className:"text-center py-5",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[28px] text-red-500",children:"error"}),(0,r.jsx)("p",{className:"mt-1.5 text-xs text-text-muted",children:u})]}):d?.message?(0,r.jsx)("div",{className:"text-center py-5",children:(0,r.jsx)("p",{className:"text-xs text-text-muted",children:d.message})}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(S,{quotas:E,compact:!0,sortMode:"default",showSortLabel:"codex"===a.provider&&"default"!==eF,onHideQuota:e=>to(a.provider,e)}),a.lastQuotaSnapshot?.windows?.length>0&&(0,r.jsxs)("div",{className:"mt-2 border-t border-black/5 pt-2 dark:border-white/5",children:[(0,r.jsx)("p",{className:"mb-1 text-[10px] text-text-muted",children:"Pause buffer — pause this account when a window's remaining % ≤"}),(0,r.jsx)("div",{className:"flex flex-col gap-1",children:a.lastQuotaSnapshot.windows.map(e=>{let t=Number(a.quotaPauseThresholds?.[e.key])||0;return(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"min-w-0 flex-1 truncate text-[11px] text-text-muted",title:e.key,children:e.key}),(0,r.jsx)("span",{className:"w-10 text-right text-[10px] tabular-nums text-text-muted",children:"number"==typeof e.remainingPercentage?`${e.remainingPercentage}%`:"—"}),(0,r.jsx)("span",{className:"text-[10px] text-text-muted",children:"≤"}),(0,r.jsx)("input",{type:"number",min:0,max:100,value:t,onChange:t=>ts(a.id,e.key,Number.parseInt(t.target.value,10)||0),className:"w-14 rounded border border-border bg-background px-1 py-0.5 text-[11px] focus:border-primary focus:outline-none","aria-label":`Pause buffer for ${e.key}`}),(0,r.jsx)("span",{className:"text-[10px] text-text-muted",children:"%"})]},e.key)})})]})]}),d?.message&&!u&&!c&&(0,r.jsx)("p",{className:"mt-2 px-1 text-[10px] leading-relaxed text-text-muted",children:d.message}),d?.raw?.speed&&(0,r.jsx)("div",{className:"mt-1 px-1 text-[10px] leading-relaxed text-text-muted tabular-nums",children:(d.raw.speed.byModel?.length?d.raw.speed.byModel:[{model:"Speed",...d.raw.speed}]).slice(0,3).map(e=>(0,r.jsxs)("p",{children:[e.model,": ",Math.round(e.avgTps).toLocaleString()," tok/s avg \xb7 last ",Math.round(e.lastTps).toLocaleString()," \xb7 TTFT ",(e.avgTtftMs/1e3).toFixed(1),"s (n=",e.samples,")"]},e.model))}),L.length>0&&(0,r.jsxs)("div",{className:"mt-2 flex min-w-0 items-center gap-1 border-t border-black/5 pt-2 text-[10px] text-text-muted dark:border-white/5",children:[(0,r.jsx)("span",{className:"material-symbols-outlined shrink-0 text-[14px]",children:"visibility_off"}),(0,r.jsx)("span",{className:"shrink-0",children:"Hidden:"}),(0,r.jsx)("div",{className:"flex min-w-0 flex-1 items-center gap-1 overflow-x-auto whitespace-nowrap pb-2",children:L.map(e=>(0,r.jsx)("button",{type:"button",onClick:()=>td(a.provider,e),className:"shrink-0 rounded-md border border-black/10 px-1.5 py-0.5 transition-colors hover:bg-black/5 hover:text-text-primary dark:border-white/10 dark:hover:bg-white/5",title:"Show this quota row",children:e.name},v(e)))})]})]})]},a.id)})}),(0,r.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,r.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,r.jsx)("span",{className:"text-xs text-text-muted",children:ty}),(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,r.jsxs)("select",{value:tw?"custom":String(eB),onChange:e=>{let t=e.target.value;if("custom"===t)return;let a=Number.parseInt(t,10);Number.isFinite(a)&&(eV(1),eQ(a),eY(String(a)))},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,r.jsxs)("option",{value:String(e),children:[e," / page"]},e)),(0,r.jsx)("option",{value:"custom",children:"Custom"})]}),(0,r.jsx)("input",{type:"number",min:"1",max:String(500),inputMode:"numeric",value:eX,onChange:e=>eY(e.target.value),onBlur:()=>{let e=Number.parseInt(eX,10);if(!Number.isFinite(e))return void eY(String(eB));let t=Math.min(500,Math.max(1,e));eV(1),eQ(t),eY(String(t))},onKeyDown:e=>{if("Enter"!==e.key)return;let t=Number.parseInt(eX,10);if(!Number.isFinite(t))return void eY(String(eB));let a=Math.min(500,Math.max(1,t));eV(1),eQ(a),eY(String(a))},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,r.jsxs)("span",{className:"text-xs text-text-muted",children:["Page ",eZ.page," / ",eZ.totalPages]})]}),(0,r.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,r.jsx)("button",{type:"button",onClick:()=>eV(1),disabled:eZ.page<=1||ec||en,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,r.jsx)("button",{type:"button",onClick:()=>eV(e=>Math.max(1,e-1)),disabled:eZ.page<=1||ec||en,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,r.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"chevron_left"})}),(0,r.jsx)("button",{type:"button",onClick:()=>eV(e=>Math.min(eZ.totalPages,e+1)),disabled:eZ.page>=eZ.totalPages||ec||en,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,r.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"chevron_right"})}),(0,r.jsx)("button",{type:"button",onClick:()=>eV(eZ.totalPages),disabled:eZ.page>=eZ.totalPages||ec||en,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,r.jsx)(P.uo,{isOpen:!!ew,onClose:()=>{ef||ek(null)},onConfirm:async()=>{let e=ew?.connection;e&&(await e6(e.id,e.provider),ek(null))},title:ew?.connection?.provider==="claude"?"Reset Claude limits?":"Reset Codex limit?",message:ew?.connection?.provider==="claude"?`Refills your ${R(J[ew.connection.id]?.raw?.resetCredits?.clears)} now for ${p(ew.connection)||"this account"} \xb7 your weekly reset day stays ${I(J[ew.connection.id]?.raw?.resetCredits?.weeklyResetsAt)}. This cannot be undone. Resets left: ${ew.resetCreditCount??0}.`:`Use 1 Codex reset credit for ${p(ew?.connection||{})||"this account"}. This cannot be undone. Remaining credits: ${ew?.resetCreditCount??0}.`,confirmText:"Reset limit",cancelText:"Cancel",variant:"danger",loading:!!ef}),ev&&(0,r.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 px-4 backdrop-blur-sm",children:(0,r.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,r.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,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("h3",{className:"text-base font-semibold text-text-primary",children:ev.data?.kind==="claude"?"Claude Code Limit Resets":"Codex Reset Credit Expiry"}),(0,r.jsx)("p",{className:"mt-0.5 truncate text-xs text-text-muted",children:p(ev.connection)||(ev.data?.kind==="claude"?"Claude account":"Codex account")})]}),(0,r.jsx)("button",{type:"button",onClick:()=>ej(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,r.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"close"})})]}),(0,r.jsx)("div",{className:"max-h-[70vh] overflow-auto bg-white p-4 dark:bg-neutral-950",children:ev.loading?(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2 py-10 text-sm text-text-muted",children:[(0,r.jsx)("span",{className:"material-symbols-outlined animate-spin text-[20px]",children:"progress_activity"}),"Loading reset credits..."]}):ev.error?(0,r.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:ev.error}):ev.data?.kind==="claude"&&ev.data.grants?.length?(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.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,r.jsxs)("span",{children:[ev.data.availableCount??0," reset",1===ev.data.availableCount?"":"s"," left"]}),(0,r.jsxs)("span",{children:["Weekly reset day: ",I(ev.data.weeklyResetsAt)]})]}),(0,r.jsx)("div",{className:"overflow-x-auto rounded-xl border border-black/10 dark:border-white/10",children:(0,r.jsxs)("table",{className:"w-full min-w-[560px] text-left text-sm",children:[(0,r.jsx)("thead",{className:"bg-black/[0.03] text-xs uppercase tracking-wide text-text-muted dark:bg-white/[0.04]",children:(0,r.jsxs)("tr",{children:[(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"Reset"}),(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"Left"}),(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"Refills"}),(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"Use By"}),(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"Remaining"})]})}),(0,r.jsx)("tbody",{children:(ev.data.grants||[]).map(e=>(0,r.jsxs)("tr",{className:"border-t border-black/5 dark:border-white/5",children:[(0,r.jsxs)("td",{className:"px-3 py-2",children:[(0,r.jsx)("div",{className:"text-text-primary",children:e.label||e.id}),(0,r.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,r.jsxs)("td",{className:"whitespace-nowrap px-3 py-2 font-medium tabular-nums text-text-primary",children:[e.resetsLeft," / ",e.resetsTotal]}),(0,r.jsx)("td",{className:"px-3 py-2 text-text-muted",children:R(e.clears)}),(0,r.jsx)("td",{className:"px-3 py-2 text-text-primary",children:I(e.endsAt)}),(0,r.jsx)("td",{className:"whitespace-nowrap px-3 py-2 font-medium text-text-primary",children:z(e.endsAt)})]},e.id))})]})})]}):ev.data?.credits?.length?(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.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,r.jsxs)("span",{children:[ev.data.credits.length," reset credit",1===ev.data.credits.length?"":"s"]}),(0,r.jsxs)("span",{children:[ev.data.availableCount??0," available"]})]}),(0,r.jsx)("div",{className:"overflow-x-auto rounded-xl border border-black/10 dark:border-white/10",children:(0,r.jsxs)("table",{className:"w-full min-w-[560px] text-left text-sm",children:[(0,r.jsx)("thead",{className:"bg-black/[0.03] text-xs uppercase tracking-wide text-text-muted dark:bg-white/[0.04]",children:(0,r.jsxs)("tr",{children:[(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"Status"}),(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"Granted At"}),(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"Expires At"}),(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"Remaining"})]})}),(0,r.jsx)("tbody",{children:ev.data.credits.map((e,t)=>(0,r.jsxs)("tr",{className:"border-t border-black/5 dark:border-white/5",children:[(0,r.jsx)("td",{className:"px-3 py-2",children:(0,r.jsx)("span",{className:"rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary",children:e.status||"unknown"})}),(0,r.jsx)("td",{className:"px-3 py-2 text-text-muted",children:I(e.grantedAt)}),(0,r.jsx)("td",{className:"px-3 py-2 text-text-primary",children:I(e.expiresAt)}),(0,r.jsx)("td",{className:"px-3 py-2 font-medium text-text-primary",children:z(e.expiresAt)})]},`${e.status}-${e.expiresAt||t}`))})]})})]}):(0,r.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:ev.data?.kind==="claude"?"No limit resets available for this account.":"No reset credit details returned for this account."})})]})}),(0,r.jsx)(P.wI,{isOpen:eN,connection:eC,proxyPools:e$,onSave:tr,onClose:()=>{eS(!1),eA(null)}})]}):(0,r.jsx)($.default,{padding:"lg",children:(0,r.jsxs)("div",{className:"text-center py-12",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[64px] text-text-muted opacity-20",children:tf.icon}),(0,r.jsx)("h3",{className:"mt-4 text-lg font-semibold text-text-primary",children:tf.title}),(0,r.jsx)("p",{className:"mt-2 text-sm text-text-muted max-w-md mx-auto",children:tf.description})]})}):(0,r.jsx)($.default,{padding:"lg",children:(0,r.jsxs)("div",{className:"text-center py-12",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[64px] text-text-muted opacity-20",children:"cloud_off"}),(0,r.jsx)("h3",{className:"mt-4 text-lg font-semibold text-text-primary",children:"No Providers Connected"}),(0,r.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,[763,8105,801,1321,5497,8441,3794,7358],()=>e(e.s=62022)),_N_E=e.O()}]);
|
package/app/CHANGELOG.md
CHANGED
|
@@ -1,48 +1,70 @@
|
|
|
1
|
-
# v0.6.
|
|
2
|
-
|
|
3
|
-
##
|
|
1
|
+
# v0.6.16 (2026-10-05)
|
|
2
|
+
|
|
3
|
+
## Core Stability, Provider Translation & Test Parity
|
|
4
|
+
- **Account Lock Aggregation & Cooldown Synchronization**:
|
|
5
|
+
- Corrected `getModelLockUntil` in `accountFallback.js` to compare active lock timestamps across model-specific and account-wide locks (`Math.max`), properly waiting for all applicable cooldowns to expire.
|
|
6
|
+
- Fixed `clearAccountError` in `auth.js` to evaluate `conn.errorCode` before exiting, ensuring stale error codes are cleared on successful connection reuse.
|
|
7
|
+
- Permitted unrecorded `lastErrorModel` connections to match in `errorMatchesModel`, avoiding false error suppression.
|
|
8
|
+
- **Runtime Stream & Format Translation Robustness**:
|
|
9
|
+
- Resolved `ReferenceError: openAICompletionToResponses is not defined` in `open-sse/handlers/chatCore/sseToJsonHandler.js` by importing `openAICompletionToResponses` from `nonStreamClientFormat.js`.
|
|
10
|
+
- Propagated `{ aborted: true }` metadata down to `onStreamComplete` when a stream is canceled mid-flight in `open-sse/utils/stream.js`.
|
|
11
|
+
- **Test Suite Modernization & Parity**:
|
|
12
|
+
- Modernized `kimchi.test.js` to Vitest with native runner support.
|
|
13
|
+
- Aligned Windsurf executor test expectations to live endpoint `https://server.codeium.com`.
|
|
14
|
+
- Updated Antigravity MITM mandatory model assertions to recognize current default `gemini-3.7-flash`.
|
|
15
|
+
- Synchronized terminal model-turn expectations to `Continue.` in Gemini format normalization.
|
|
16
|
+
- Backfilled `@/lib/usageDb.js` mocks across unit test suites for `saveRequestUsage` and `trackPendingRequest`.
|
|
17
|
+
|
|
18
|
+
# v0.6.15 (2026-10-05)
|
|
19
|
+
|
|
20
|
+
## Critical Security Fixes & PR Audit
|
|
4
21
|
- **OS Command Injection & SSRF Hardening**: Fixed OS command injection vulnerability via the `--host` argument in browser launcher CLI, and eliminated authenticated SSRF risks via DNS rebinding and redirect following on provider-node validation routes and MCP probes (`#4455`).
|
|
5
|
-
|
|
6
|
-
|
|
22
|
+
- **Security Audit of Upstream PRs (#4518 - #4571)**:
|
|
23
|
+
- **REJECTED PR #4539**: Malicious / unvetted Qoder rewards scanning attempting to run `runtime-info.exe` and execute PowerShell commands targeting DPAPI passwords on client machines.
|
|
24
|
+
- **REJECTED PR #4540**: Extraneous personal deployment config (`fly.toml`).
|
|
25
|
+
- **SUPERSEDED PRs #4538, #4541, #4560**: Competing implementations unified under the official core maintainer access control architecture in `#4567`.
|
|
26
|
+
|
|
27
|
+
## Upstream Synchronization & Core Enhancements (decolua/9router #4396 - #4571)
|
|
28
|
+
- **API Key Access Control & Scoping**:
|
|
29
|
+
- Added per-API-key access control allowing restriction of individual API keys to selected model combos and models with DB migration `012`, repos, service policy checks, and `/v1/models` catalog filtering (`#4567`).
|
|
30
|
+
- **CLI Launcher (`ezrouter`)**:
|
|
31
|
+
- Added `ezrouter show` command to inspect local CLI tool configurations offline with masked API keys (`#4519`).
|
|
32
|
+
- Upgraded `ezrouter connect` to inherit model configurations directly from remote server settings (dropping hardcoded defaults) and supported `--save` flag for mode-600 password persistence in `~/.ezrouter/connect.env` (`#4519`).
|
|
33
|
+
- Added support for Pi (`pi-coding-agent`) and Oh My Pi (`omp`) CLI tools in `connect` and `show` (`#4519`).
|
|
34
|
+
- Attached server lifecycle events before entering tray mode to avoid unhandled exits (`#4522`).
|
|
7
35
|
- **Models & Provider Integrations**:
|
|
8
|
-
- **
|
|
36
|
+
- **Codex**: Added context window expansion for `gpt-6.1-sol` to 872k tokens (`#4524`), enabled force fast mode (priority tier) for all Codex models (`#4525`), CLI identity refresh (`#4473`), 1M context variants for GPT-6 and GPT-5.6 (`#4423`), and preserved hosted web search on GPT-6 Sol/Luna (`#4420`).
|
|
37
|
+
- **Antigravity**: Added Claude Sonnet 5.5 and Opus 5.5 high/medium/low tier routing (`#4566`), stopped sending unsigned thinking blocks (`#4559`), and added in-flight awareness with per-tab session isolation (`#4530`).
|
|
38
|
+
- **GLM**: Corrected GLM-5.2 and GLM-5.3 context window to 1M tokens (`#4561`), and added Z.ai OAuth login to GLM Coding (`#4502`).
|
|
39
|
+
- **Kimi**: Routed Responses API clients directly to Kimi Code `/responses` endpoint with appropriate headers (`#4569`).
|
|
40
|
+
- **ElevenLabs**: Added ElevenLabs Scribe STT provider transport with audio upload handling and derived provider aliases (`#4537`).
|
|
41
|
+
- **MiMo & Kiro MITM**: Added models for Xiaomi MiMo and Kiro MITM interception (`#4546`).
|
|
42
|
+
- **Tokenharbor**: Seeded current free-tier model identifiers (`#4564`).
|
|
43
|
+
- **noAuth Providers**: Published free noAuth provider models in `/v1/models` (cached via suggested-models filters) while keeping retired/hidden models excluded (`#4565`).
|
|
44
|
+
- **CommandCode**: Surfaced cache tokens in usage without artificially inflating `prompt_tokens` (`#4523`).
|
|
45
|
+
- **Usage & Quotas**: Labeled per-model decode speed stats with model name on quota cards (`#4526`), and preserved reasoning and cached token details in Responses API usage tracking (`#4551`, `#4536`).
|
|
9
46
|
- **Claude**: Added Claude Sonnet 5.5 (`claude-sonnet-5.5`) (`#4489`) and `claude-opus-5.5` models in Kiro registry (`#4409`).
|
|
10
|
-
- **
|
|
11
|
-
- **Gemini**: Added Gemini 4 Argon (`gemini-4-argon`) (`#4507`), summed usage parts when Gemini omits `totalTokenCount` (`#4412`), and sanitized `$`-prefixed keys (`$ref`, `$defs`) in functionResponse results (`#4456`).
|
|
47
|
+
- **Gemini**: Added Gemini 4 Argon (`gemini-4-argon`) (`#4507`), summed usage parts when Gemini omits `totalTokenCount` (`#4412`), and sanitized `$`-prefixed keys in functionResponse results (`#4456`).
|
|
12
48
|
- **NVIDIA**: Refreshed NVIDIA NIM model catalog from 7 chat models to 33 chat models (`#4515`).
|
|
13
49
|
- **Meta Muse & System One**: Added Meta Muse provider with OAuth login and model catalog (`#4401`), and added v1m System One provider (`#4407`).
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
50
|
+
- **Format Translation & Protocols**:
|
|
51
|
+
- Ensured non-streaming responses are returned in the client's native format across all translator routes (`#4571`).
|
|
52
|
+
- Aligned Responses transport, reasoning extraction, and JSON reply handling (`#4563`).
|
|
53
|
+
- Defaulted omitted stream requests to JSON (`#4534`).
|
|
54
|
+
- Honored explicit `max_tokens` / `max_completion_tokens` caps across clients (`#4533`).
|
|
55
|
+
- Forwarded Responses `input_image` tool outputs as user image blocks rather than stringified base64 text (`#4518`).
|
|
56
|
+
- Clamped tool names to 64 characters across all providers to adhere to API limits (`#4545`).
|
|
57
|
+
- Mapped Chat Completions `response_format` to `text.format` for Responses clients (`#4547`).
|
|
58
|
+
- Preserved explicit function tool `strict` modes in Codex translation (`#4543`).
|
|
59
|
+
- Handled all Cursor `ExecServerMessage` variants in `EXEC_RESULT_FIELD` and degraded unknown variants safely (`#4550`).
|
|
19
60
|
- Added `xhigh` thinking level to Claude adaptive thinking (`#4494`).
|
|
20
61
|
- Resolved Claude Sonnet 5.x to adaptive thinking to prevent forged thinking placeholder injection (`#4483`).
|
|
21
|
-
- Injected unsigned thinking placeholders for OpenCode Go DeepSeek `/messages` (`#4436`).
|
|
22
|
-
- Captured streaming reasoning chunks arriving as `delta.reasoning` / `delta.reasoning_details` (`#4457`).
|
|
23
|
-
- **Streaming & Translation Protocols**:
|
|
24
|
-
- Forwarded Responses `input_image` tool outputs as user image blocks rather than massive stringified base64 text, preserving contiguous tool messages (`#4518`).
|
|
25
|
-
- Bounded deferred completion waits in Responses API with a 3s watchdog and ensured real usage is populated before emitting `response.completed` (`#4476`).
|
|
26
|
-
- Carried in-band stream errors across format translation (`#4477`).
|
|
27
|
-
- Converted forced-SSE JSON responses for Claude clients and shared completion converters (`#4466`).
|
|
28
|
-
- Echoed client-requested model in `message_start` for routed streams (`#4513`).
|
|
29
62
|
- Cached a tool loop's final tool results with the 4th breakpoint in Claude (`#4485`).
|
|
30
63
|
- Preserved trailing user turn to prevent accidental assistant prefill (`#4482`), and preserved intentional prefill from non-messages source formats (`#4481`).
|
|
31
|
-
- Preserved user turns containing only `container_upload` blocks (`#4404`).
|
|
32
|
-
- **Tool Calling & Schema Robustness**:
|
|
33
|
-
- Coerced free-form property values and tuple items in tool schemas (`#4442`).
|
|
34
|
-
- Deduped same-name tools for DeepSeek models (`#4417`).
|
|
35
|
-
- Always emitted tool_result `is_error` for Zed Anthropic wire (`#4464`).
|
|
36
64
|
- **Proxy & Reliability**:
|
|
37
65
|
- Added automatic fallback to insecure TLS on self-signed cert errors (`#4405`).
|
|
38
66
|
- Maintained strictProxy hold when no proxy resolves (`#4406`).
|
|
39
67
|
- Prevented Codex refresh-token reuse on auto-ping to eliminate unintended logouts (`#4425`).
|
|
40
|
-
- Extracted `resetsAtMs` from Codebuddy 6004 rate limit error and forwarded `recurring` for codebuddy-intl quota packs (`#4422`).
|
|
41
|
-
- Sent Grok CLI 1.0.44 user-agent and version headers to prevent HTTP 426 (`#4410`).
|
|
42
|
-
- **Dashboard & Persistence**:
|
|
43
|
-
- Excluded hidden providers from usage stats provider dropdown (`#4411`).
|
|
44
|
-
- Supported per-provider custom header overrides from registry (`#4402`).
|
|
45
|
-
- Synchronized `?provider=` URL parameter with provider filter on Quota page for bookmarkable deep links (`#4395`).
|
|
46
68
|
- **Branding & Local Invariants**:
|
|
47
69
|
- Preserved default gateway port strictly at **20126**.
|
|
48
70
|
- Maintained EzRouter package and CLI branding (`@rabbi696/ezrouter`, `ezrouter-app`, `ezrouter`, `sk_ezrouter`, `~/.ezrouter`).
|
package/app/package.json
CHANGED
package/app/public/CHANGELOG.md
CHANGED
|
@@ -1,48 +1,70 @@
|
|
|
1
|
-
# v0.6.
|
|
2
|
-
|
|
3
|
-
##
|
|
1
|
+
# v0.6.16 (2026-10-05)
|
|
2
|
+
|
|
3
|
+
## Core Stability, Provider Translation & Test Parity
|
|
4
|
+
- **Account Lock Aggregation & Cooldown Synchronization**:
|
|
5
|
+
- Corrected `getModelLockUntil` in `accountFallback.js` to compare active lock timestamps across model-specific and account-wide locks (`Math.max`), properly waiting for all applicable cooldowns to expire.
|
|
6
|
+
- Fixed `clearAccountError` in `auth.js` to evaluate `conn.errorCode` before exiting, ensuring stale error codes are cleared on successful connection reuse.
|
|
7
|
+
- Permitted unrecorded `lastErrorModel` connections to match in `errorMatchesModel`, avoiding false error suppression.
|
|
8
|
+
- **Runtime Stream & Format Translation Robustness**:
|
|
9
|
+
- Resolved `ReferenceError: openAICompletionToResponses is not defined` in `open-sse/handlers/chatCore/sseToJsonHandler.js` by importing `openAICompletionToResponses` from `nonStreamClientFormat.js`.
|
|
10
|
+
- Propagated `{ aborted: true }` metadata down to `onStreamComplete` when a stream is canceled mid-flight in `open-sse/utils/stream.js`.
|
|
11
|
+
- **Test Suite Modernization & Parity**:
|
|
12
|
+
- Modernized `kimchi.test.js` to Vitest with native runner support.
|
|
13
|
+
- Aligned Windsurf executor test expectations to live endpoint `https://server.codeium.com`.
|
|
14
|
+
- Updated Antigravity MITM mandatory model assertions to recognize current default `gemini-3.7-flash`.
|
|
15
|
+
- Synchronized terminal model-turn expectations to `Continue.` in Gemini format normalization.
|
|
16
|
+
- Backfilled `@/lib/usageDb.js` mocks across unit test suites for `saveRequestUsage` and `trackPendingRequest`.
|
|
17
|
+
|
|
18
|
+
# v0.6.15 (2026-10-05)
|
|
19
|
+
|
|
20
|
+
## Critical Security Fixes & PR Audit
|
|
4
21
|
- **OS Command Injection & SSRF Hardening**: Fixed OS command injection vulnerability via the `--host` argument in browser launcher CLI, and eliminated authenticated SSRF risks via DNS rebinding and redirect following on provider-node validation routes and MCP probes (`#4455`).
|
|
5
|
-
|
|
6
|
-
|
|
22
|
+
- **Security Audit of Upstream PRs (#4518 - #4571)**:
|
|
23
|
+
- **REJECTED PR #4539**: Malicious / unvetted Qoder rewards scanning attempting to run `runtime-info.exe` and execute PowerShell commands targeting DPAPI passwords on client machines.
|
|
24
|
+
- **REJECTED PR #4540**: Extraneous personal deployment config (`fly.toml`).
|
|
25
|
+
- **SUPERSEDED PRs #4538, #4541, #4560**: Competing implementations unified under the official core maintainer access control architecture in `#4567`.
|
|
26
|
+
|
|
27
|
+
## Upstream Synchronization & Core Enhancements (decolua/9router #4396 - #4571)
|
|
28
|
+
- **API Key Access Control & Scoping**:
|
|
29
|
+
- Added per-API-key access control allowing restriction of individual API keys to selected model combos and models with DB migration `012`, repos, service policy checks, and `/v1/models` catalog filtering (`#4567`).
|
|
30
|
+
- **CLI Launcher (`ezrouter`)**:
|
|
31
|
+
- Added `ezrouter show` command to inspect local CLI tool configurations offline with masked API keys (`#4519`).
|
|
32
|
+
- Upgraded `ezrouter connect` to inherit model configurations directly from remote server settings (dropping hardcoded defaults) and supported `--save` flag for mode-600 password persistence in `~/.ezrouter/connect.env` (`#4519`).
|
|
33
|
+
- Added support for Pi (`pi-coding-agent`) and Oh My Pi (`omp`) CLI tools in `connect` and `show` (`#4519`).
|
|
34
|
+
- Attached server lifecycle events before entering tray mode to avoid unhandled exits (`#4522`).
|
|
7
35
|
- **Models & Provider Integrations**:
|
|
8
|
-
- **
|
|
36
|
+
- **Codex**: Added context window expansion for `gpt-6.1-sol` to 872k tokens (`#4524`), enabled force fast mode (priority tier) for all Codex models (`#4525`), CLI identity refresh (`#4473`), 1M context variants for GPT-6 and GPT-5.6 (`#4423`), and preserved hosted web search on GPT-6 Sol/Luna (`#4420`).
|
|
37
|
+
- **Antigravity**: Added Claude Sonnet 5.5 and Opus 5.5 high/medium/low tier routing (`#4566`), stopped sending unsigned thinking blocks (`#4559`), and added in-flight awareness with per-tab session isolation (`#4530`).
|
|
38
|
+
- **GLM**: Corrected GLM-5.2 and GLM-5.3 context window to 1M tokens (`#4561`), and added Z.ai OAuth login to GLM Coding (`#4502`).
|
|
39
|
+
- **Kimi**: Routed Responses API clients directly to Kimi Code `/responses` endpoint with appropriate headers (`#4569`).
|
|
40
|
+
- **ElevenLabs**: Added ElevenLabs Scribe STT provider transport with audio upload handling and derived provider aliases (`#4537`).
|
|
41
|
+
- **MiMo & Kiro MITM**: Added models for Xiaomi MiMo and Kiro MITM interception (`#4546`).
|
|
42
|
+
- **Tokenharbor**: Seeded current free-tier model identifiers (`#4564`).
|
|
43
|
+
- **noAuth Providers**: Published free noAuth provider models in `/v1/models` (cached via suggested-models filters) while keeping retired/hidden models excluded (`#4565`).
|
|
44
|
+
- **CommandCode**: Surfaced cache tokens in usage without artificially inflating `prompt_tokens` (`#4523`).
|
|
45
|
+
- **Usage & Quotas**: Labeled per-model decode speed stats with model name on quota cards (`#4526`), and preserved reasoning and cached token details in Responses API usage tracking (`#4551`, `#4536`).
|
|
9
46
|
- **Claude**: Added Claude Sonnet 5.5 (`claude-sonnet-5.5`) (`#4489`) and `claude-opus-5.5` models in Kiro registry (`#4409`).
|
|
10
|
-
- **
|
|
11
|
-
- **Gemini**: Added Gemini 4 Argon (`gemini-4-argon`) (`#4507`), summed usage parts when Gemini omits `totalTokenCount` (`#4412`), and sanitized `$`-prefixed keys (`$ref`, `$defs`) in functionResponse results (`#4456`).
|
|
47
|
+
- **Gemini**: Added Gemini 4 Argon (`gemini-4-argon`) (`#4507`), summed usage parts when Gemini omits `totalTokenCount` (`#4412`), and sanitized `$`-prefixed keys in functionResponse results (`#4456`).
|
|
12
48
|
- **NVIDIA**: Refreshed NVIDIA NIM model catalog from 7 chat models to 33 chat models (`#4515`).
|
|
13
49
|
- **Meta Muse & System One**: Added Meta Muse provider with OAuth login and model catalog (`#4401`), and added v1m System One provider (`#4407`).
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
50
|
+
- **Format Translation & Protocols**:
|
|
51
|
+
- Ensured non-streaming responses are returned in the client's native format across all translator routes (`#4571`).
|
|
52
|
+
- Aligned Responses transport, reasoning extraction, and JSON reply handling (`#4563`).
|
|
53
|
+
- Defaulted omitted stream requests to JSON (`#4534`).
|
|
54
|
+
- Honored explicit `max_tokens` / `max_completion_tokens` caps across clients (`#4533`).
|
|
55
|
+
- Forwarded Responses `input_image` tool outputs as user image blocks rather than stringified base64 text (`#4518`).
|
|
56
|
+
- Clamped tool names to 64 characters across all providers to adhere to API limits (`#4545`).
|
|
57
|
+
- Mapped Chat Completions `response_format` to `text.format` for Responses clients (`#4547`).
|
|
58
|
+
- Preserved explicit function tool `strict` modes in Codex translation (`#4543`).
|
|
59
|
+
- Handled all Cursor `ExecServerMessage` variants in `EXEC_RESULT_FIELD` and degraded unknown variants safely (`#4550`).
|
|
19
60
|
- Added `xhigh` thinking level to Claude adaptive thinking (`#4494`).
|
|
20
61
|
- Resolved Claude Sonnet 5.x to adaptive thinking to prevent forged thinking placeholder injection (`#4483`).
|
|
21
|
-
- Injected unsigned thinking placeholders for OpenCode Go DeepSeek `/messages` (`#4436`).
|
|
22
|
-
- Captured streaming reasoning chunks arriving as `delta.reasoning` / `delta.reasoning_details` (`#4457`).
|
|
23
|
-
- **Streaming & Translation Protocols**:
|
|
24
|
-
- Forwarded Responses `input_image` tool outputs as user image blocks rather than massive stringified base64 text, preserving contiguous tool messages (`#4518`).
|
|
25
|
-
- Bounded deferred completion waits in Responses API with a 3s watchdog and ensured real usage is populated before emitting `response.completed` (`#4476`).
|
|
26
|
-
- Carried in-band stream errors across format translation (`#4477`).
|
|
27
|
-
- Converted forced-SSE JSON responses for Claude clients and shared completion converters (`#4466`).
|
|
28
|
-
- Echoed client-requested model in `message_start` for routed streams (`#4513`).
|
|
29
62
|
- Cached a tool loop's final tool results with the 4th breakpoint in Claude (`#4485`).
|
|
30
63
|
- Preserved trailing user turn to prevent accidental assistant prefill (`#4482`), and preserved intentional prefill from non-messages source formats (`#4481`).
|
|
31
|
-
- Preserved user turns containing only `container_upload` blocks (`#4404`).
|
|
32
|
-
- **Tool Calling & Schema Robustness**:
|
|
33
|
-
- Coerced free-form property values and tuple items in tool schemas (`#4442`).
|
|
34
|
-
- Deduped same-name tools for DeepSeek models (`#4417`).
|
|
35
|
-
- Always emitted tool_result `is_error` for Zed Anthropic wire (`#4464`).
|
|
36
64
|
- **Proxy & Reliability**:
|
|
37
65
|
- Added automatic fallback to insecure TLS on self-signed cert errors (`#4405`).
|
|
38
66
|
- Maintained strictProxy hold when no proxy resolves (`#4406`).
|
|
39
67
|
- Prevented Codex refresh-token reuse on auto-ping to eliminate unintended logouts (`#4425`).
|
|
40
|
-
- Extracted `resetsAtMs` from Codebuddy 6004 rate limit error and forwarded `recurring` for codebuddy-intl quota packs (`#4422`).
|
|
41
|
-
- Sent Grok CLI 1.0.44 user-agent and version headers to prevent HTTP 426 (`#4410`).
|
|
42
|
-
- **Dashboard & Persistence**:
|
|
43
|
-
- Excluded hidden providers from usage stats provider dropdown (`#4411`).
|
|
44
|
-
- Supported per-provider custom header overrides from registry (`#4402`).
|
|
45
|
-
- Synchronized `?provider=` URL parameter with provider filter on Quota page for bookmarkable deep links (`#4395`).
|
|
46
68
|
- **Branding & Local Invariants**:
|
|
47
69
|
- Preserved default gateway port strictly at **20126**.
|
|
48
70
|
- Maintained EzRouter package and CLI branding (`@rabbi696/ezrouter`, `ezrouter-app`, `ezrouter`, `sk_ezrouter`, `~/.ezrouter`).
|