@techysy/10router 1.3.0 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/.next-cli-build/BUILD_ID +1 -1
- package/app/.next-cli-build/app-path-routes-manifest.json +7 -6
- package/app/.next-cli-build/build-manifest.json +3 -3
- package/app/.next-cli-build/prerender-manifest.json +3 -3
- package/app/.next-cli-build/react-loadable-manifest.json +1 -1
- package/app/.next-cli-build/routes-manifest.json +6 -0
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/experimental/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/experimental/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/experimental/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +5 -5
- 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 +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +3 -3
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-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/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 +2 -2
- package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found/page.js +1 -1
- package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_not-found.html +2 -2
- package/app/.next-cli-build/server/app/_not-found.rsc +6 -6
- package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/api/auth/login/route.js +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 +2 -2
- package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/verify-password/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/verify-password/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +2 -2
- 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-profiles/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/claude-profiles/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +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/codex-profiles/route.js +2 -2
- 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 +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +2 -2
- 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 +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 +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -2
- 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 +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 +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/openclaw-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +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/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/route.js +1 -1
- package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/extras/route.js +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 +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 +1 -1
- package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/route.js +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/rotate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/keys/rotate/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 +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/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 +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/caps/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/caps/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/custom/bulk/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/custom/bulk/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/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/network/egress-region/route.js +1 -1
- package/app/.next-cli-build/server/app/api/network/egress-region/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/codebuddy-cn/bulk-import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/checkin/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/checkin/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/export/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/export/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/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 +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/qoder/checkin/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/qoder/checkin/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/qoder-cn/checkin/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/qoder-cn/checkin/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/transfer/export/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/transfer/export/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/transfer/import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/transfer/import/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 +2 -2
- 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/desktop-kill/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/desktop-kill/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/desktop-status/route.js +2 -2
- package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/desktop-status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/zed/auto-import/route.js +2 -2
- 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]/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 +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 +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 +2 -2
- package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
- package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/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 +2 -2
- package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/health/route.js +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +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 +2 -2
- 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 +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/security/status/route.js +1 -1
- package/app/.next-cli-build/server/app/api/security/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/import-usage/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/import-usage/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 +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 +2 -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 +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 +1 -1
- package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +2 -2
- 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 +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 +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 +2 -2
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/claude-reset/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/claude-reset/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/chart/route.js +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/dashboard/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/dashboard/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/quotas/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/quotas/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/api/chat/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +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 +1 -1
- package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/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 +2 -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/shell-update/route.js +2 -0
- package/app/.next-cli-build/server/app/api/version/shell-update/route.js.nft.json +1 -0
- package/app/.next-cli-build/server/app/api/version/shell-update/route_client-reference-manifest.js +1 -0
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/callback/page.js +1 -1
- package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/callback.html +2 -2
- package/app/.next-cli-build/server/app/callback.rsc +6 -6
- package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/basic-chat.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cli-tools.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/combos.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/combos.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/endpoint.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/experimental.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/experimental.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/experimental.segments/!KGRhc2hib2FyZCk/dashboard/experimental/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/experimental.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/experimental.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mitm.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/mitm.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/profile.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/profile.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/new.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/pxpipe.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/quota.html +2 -3
- package/app/.next-cli-build/server/app/dashboard/quota.rsc +9 -9
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +9 -9
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +9 -9
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/skills.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/skills.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/token-saver.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/translator.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/translator.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/usage.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/usage.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard.html +2 -2
- package/app/.next-cli-build/server/app/dashboard.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/favicon.ico/route.js +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 +6 -6
- package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/landing/page.js +1 -1
- package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/landing.html +2 -2
- package/app/.next-cli-build/server/app/landing.rsc +7 -7
- package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +7 -7
- 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 +2 -2
- package/app/.next-cli-build/server/app/login.rsc +7 -7
- package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/manifest.webmanifest/route.js +2 -2
- 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 +7 -6
- package/app/.next-cli-build/server/chunks/1159.js +1 -1
- package/app/.next-cli-build/server/chunks/1329.js +1 -1
- package/app/.next-cli-build/server/chunks/1710.js +1 -1
- package/app/.next-cli-build/server/chunks/2112.js +1 -1
- package/app/.next-cli-build/server/chunks/2120.js +1 -1
- package/app/.next-cli-build/server/chunks/2132.js +1 -1
- package/app/.next-cli-build/server/chunks/2269.js +1 -0
- package/app/.next-cli-build/server/chunks/2468.js +1 -0
- package/app/.next-cli-build/server/chunks/2926.js +1 -1
- package/app/.next-cli-build/server/chunks/3245.js +1 -1
- package/app/.next-cli-build/server/chunks/3433.js +2 -2
- package/app/.next-cli-build/server/chunks/3500.js +4 -4
- package/app/.next-cli-build/server/chunks/3535.js +1 -1
- package/app/.next-cli-build/server/chunks/3792.js +1 -1
- package/app/.next-cli-build/server/chunks/3885.js +1 -1
- package/app/.next-cli-build/server/chunks/3943.js +1 -1
- package/app/.next-cli-build/server/chunks/4123.js +2 -1
- package/app/.next-cli-build/server/chunks/4177.js +1 -1
- package/app/.next-cli-build/server/chunks/4282.js +1 -1
- package/app/.next-cli-build/server/chunks/436.js +1 -1
- package/app/.next-cli-build/server/chunks/4575.js +1 -1
- package/app/.next-cli-build/server/chunks/4746.js +1 -1
- package/app/.next-cli-build/server/chunks/4803.js +1 -1
- package/app/.next-cli-build/server/chunks/4927.js +3 -3
- package/app/.next-cli-build/server/chunks/5210.js +26 -26
- package/app/.next-cli-build/server/chunks/5330.js +3 -3
- package/app/.next-cli-build/server/chunks/539.js +1 -1
- package/app/.next-cli-build/server/chunks/5485.js +1 -1
- package/app/.next-cli-build/server/chunks/5615.js +1 -1
- package/app/.next-cli-build/server/chunks/5781.js +1 -1
- package/app/.next-cli-build/server/chunks/6070.js +1 -1
- package/app/.next-cli-build/server/chunks/615.js +1 -1
- package/app/.next-cli-build/server/chunks/6306.js +1 -1
- package/app/.next-cli-build/server/chunks/6326.js +1 -1
- package/app/.next-cli-build/server/chunks/6492.js +1 -1
- package/app/.next-cli-build/server/chunks/6756.js +1 -1
- package/app/.next-cli-build/server/chunks/6763.js +1 -1
- package/app/.next-cli-build/server/chunks/6922.js +1 -1
- package/app/.next-cli-build/server/chunks/6956.js +1 -1
- package/app/.next-cli-build/server/chunks/6960.js +5 -5
- package/app/.next-cli-build/server/chunks/7067.js +1 -1
- package/app/.next-cli-build/server/chunks/7070.js +1 -0
- package/app/.next-cli-build/server/chunks/7122.js +1 -1
- package/app/.next-cli-build/server/chunks/7247.js +1 -1
- package/app/.next-cli-build/server/chunks/7274.js +3 -3
- package/app/.next-cli-build/server/chunks/7322.js +1 -1
- package/app/.next-cli-build/server/chunks/7774.js +2 -2
- package/app/.next-cli-build/server/chunks/7828.js +1 -1
- package/app/.next-cli-build/server/chunks/7965.js +1 -1
- package/app/.next-cli-build/server/chunks/8172.js +2 -2
- package/app/.next-cli-build/server/chunks/8370.js +1 -1
- package/app/.next-cli-build/server/chunks/8410.js +1 -1
- package/app/.next-cli-build/server/chunks/8499.js +13 -13
- package/app/.next-cli-build/server/chunks/8520.js +1 -1
- package/app/.next-cli-build/server/chunks/8595.js +1 -1
- package/app/.next-cli-build/server/chunks/8672.js +1 -1
- package/app/.next-cli-build/server/chunks/8749.js +1 -1
- package/app/.next-cli-build/server/chunks/8895.js +6 -6
- package/app/.next-cli-build/server/chunks/8920.js +1 -1
- package/app/.next-cli-build/server/chunks/9046.js +1 -1
- package/app/.next-cli-build/server/chunks/9154.js +1 -1
- package/app/.next-cli-build/server/chunks/939.js +1 -1
- package/app/.next-cli-build/server/chunks/9489.js +2 -2
- package/app/.next-cli-build/server/chunks/9609.js +1 -1
- package/app/.next-cli-build/server/chunks/9628.js +1 -1
- package/app/.next-cli-build/server/instrumentation.js +1 -1
- package/app/.next-cli-build/server/instrumentation.js.nft.json +1 -1
- package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/app/.next-cli-build/server/middleware-react-loadable-manifest.js +1 -1
- package/app/.next-cli-build/server/middleware.js +4 -4
- package/app/.next-cli-build/server/middleware.js.nft.json +1 -1
- package/app/.next-cli-build/server/pages/404.html +2 -2
- package/app/.next-cli-build/server/pages/500.html +1 -1
- package/app/.next-cli-build/static/HXtMOamjH7NR-IuqflR2K/_buildManifest.js +1 -0
- package/app/.next-cli-build/static/chunks/1321-04a0bd75a8aa1806.js +1 -0
- package/app/.next-cli-build/static/chunks/5497-9afa8ec82cb51857.js +7 -0
- package/app/.next-cli-build/static/chunks/{6808-d3ffacc1373713c6.js → 6808-7c2c0ea1ee14763c.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/experimental/page-5ec2e868aa2ff281.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/profile/page-7c9d46f8c09d480e.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-0ee5ba586a2d3dfa.js +14 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-bc56399135571dd5.js +1 -0
- package/app/.next-cli-build/static/chunks/app/_global-error/{page-2b9ff155b9d0f304.js → page-1058a44b968ee535.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/login/{route-2b9ff155b9d0f304.js → route-1058a44b968ee535.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/logout/{route-2b9ff155b9d0f304.js → route-1058a44b968ee535.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/callback/{route-2b9ff155b9d0f304.js → route-1058a44b968ee535.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/start/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/test/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/reset-password/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/saml/acs/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/saml/metadata/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/saml/start/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/saml/test/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/status/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/verify-password/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-profiles/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-settings/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-profiles/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/copilot-settings/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-settings/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/devin-settings/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/grok-build-settings/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/hermes-settings/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/openclaw-settings/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/opencode-settings/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/combos/[id]/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/combos/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/headroom/extras/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/headroom/proxy/[...path]/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/headroom/restart/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/headroom/start/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/headroom/status/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/headroom/stop/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/health/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/init/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/keys/[id]/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/keys/rotate/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/keys/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/locale/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/message/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/sse/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/deepgram/voices/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/inworld/voices/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/minimax/voices/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/voices/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/alias/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/availability/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/caps/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/custom/bulk/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/custom/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/disabled/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/test/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/network/egress-region/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/[provider]/[action]/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/bulk-import/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/checkin/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/export/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/codex/bulk-import/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/codex/import-token/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/auto-import/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/import/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/gitlab/pat/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/iflow/cookie/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/api-key/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/auto-import/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import-cli-proxy/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-authorize/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-exchange/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/qoder/checkin/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/qoder-cn/checkin/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/transfer/export/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/transfer/import/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/xiaomi-mimo/api-key/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/xiaomi-mimo/auto-import/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/xiaomi-mimo/desktop-kill/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/xiaomi-mimo/desktop-status/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/zed/auto-import/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/zed/import/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pricing/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/[id]/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/validate/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/models/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test-models/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/client/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/kilo/free-models/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/suggested-models/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/test-batch/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/validate/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/test/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/deno-deploy/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/vercel-deploy/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/health/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/install/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/logs/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/restart/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/start/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/stats/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/status/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/stop/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/security/status/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/database/import-usage/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/database/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/proxy-test/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/require-login/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/shutdown/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tags/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/stream/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/load/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/save/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/send/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/translate/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/disable/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/enable/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/status/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-check/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-disable/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-enable/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-install/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/claude-reset/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/chart/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/dashboard/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/history/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/logs/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/providers/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/quotas/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/request-details/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/request-logs/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/stats/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/stream/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/api/chat/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/speech/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/transcriptions/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/voices/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/chat/completions/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/embeddings/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/images/generations/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/messages/count_tokens/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/messages/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/models/[kind]/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/models/info/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/models/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/responses/compact/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/responses/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/search/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/systemone/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/videos/[id]/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/videos/edits/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/videos/extensions/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/videos/generations/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/web/fetch/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1beta/models/[...path]/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1beta/models/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/version/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/version/shell-update/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/version/shutdown/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/version/update/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/landing/page-01cca10383327c01.js +1 -0
- package/app/.next-cli-build/static/chunks/app/login/page-b5eb40dc7d4e285e.js +1 -0
- package/app/.next-cli-build/static/chunks/app/manifest.webmanifest/route-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/app/page-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/app-error-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/forbidden-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/not-found-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/unauthorized-1058a44b968ee535.js +1 -0
- package/app/.next-cli-build/static/chunks/{webpack-34fe8baab4ced03b.js → webpack-1adc95943fa90500.js} +1 -1
- package/app/.next-cli-build/static/css/b28513ee0ebc26ad.css +1 -0
- package/app/package.json +71 -71
- package/app/public/i18n/changelog/en.md +47 -0
- package/app/public/i18n/changelog/zh-CN.md +47 -0
- package/app/public/i18n/changelog/zh-TW.md +47 -0
- package/app/public/i18n/literals/zh-CN.json +49 -4
- package/app/public/i18n/literals/zh-TW.json +50 -4
- package/app/public/providers/apinex.png +0 -0
- package/app/public/providers/atria.png +0 -0
- package/app/public/providers/minimax-free.png +0 -0
- package/app/public/providers/muse.png +0 -0
- package/app/public/providers/opencode-zen.png +0 -0
- package/app/public/providers/tokenharbor.png +0 -0
- package/app/public/providers/v1m.png +0 -0
- package/package.json +61 -61
- package/src/cli/menus/providers.js +3 -2
- package/src/cli/utils/modelSelector.js +1 -1
- package/app/.next-cli-build/server/chunks/2051.js +0 -1
- package/app/.next-cli-build/server/chunks/4290.js +0 -1
- package/app/.next-cli-build/server/chunks/8247.js +0 -1
- package/app/.next-cli-build/static/chunks/1321-b226b10e6272fc21.js +0 -1
- package/app/.next-cli-build/static/chunks/5497-c5b293fd9b36c51d.js +0 -7
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/experimental/page-f2be5e1e9fb2a81d.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/profile/page-912bf60e8bad7f94.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-2bc7898568623185.js +0 -14
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-f7223ed3275a94a5.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/start/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/test/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/reset-password/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/saml/acs/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/saml/metadata/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/saml/start/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/saml/test/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/status/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/verify-password/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-profiles/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-settings/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-profiles/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/copilot-settings/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-settings/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/devin-settings/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/grok-build-settings/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/hermes-settings/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/openclaw-settings/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/opencode-settings/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/combos/[id]/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/combos/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/headroom/extras/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/headroom/proxy/[...path]/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/headroom/restart/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/headroom/start/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/headroom/status/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/headroom/stop/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/health/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/init/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/keys/[id]/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/keys/rotate/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/keys/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/locale/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/message/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/sse/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/deepgram/voices/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/inworld/voices/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/minimax/voices/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/voices/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/alias/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/availability/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/caps/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/custom/bulk/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/custom/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/disabled/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/test/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/network/egress-region/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/[provider]/[action]/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/bulk-import/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/checkin/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/export/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/codex/bulk-import/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/codex/import-token/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/auto-import/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/import/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/gitlab/pat/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/iflow/cookie/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/api-key/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/auto-import/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import-cli-proxy/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-authorize/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-exchange/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/qoder/checkin/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/qoder-cn/checkin/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/transfer/export/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/transfer/import/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/xiaomi-mimo/api-key/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/xiaomi-mimo/auto-import/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/xiaomi-mimo/desktop-kill/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/xiaomi-mimo/desktop-status/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/zed/auto-import/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/zed/import/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pricing/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/[id]/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/validate/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/models/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test-models/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/client/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/kilo/free-models/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/suggested-models/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/test-batch/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/validate/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/test/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/deno-deploy/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/vercel-deploy/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/health/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/install/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/logs/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/restart/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/start/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/stats/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/status/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/stop/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/security/status/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/database/import-usage/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/database/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/proxy-test/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/require-login/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/shutdown/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tags/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/stream/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/load/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/save/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/send/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/translate/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/disable/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/enable/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/status/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-check/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-disable/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-enable/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-install/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/claude-reset/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/chart/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/dashboard/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/history/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/logs/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/providers/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/quotas/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/request-details/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/request-logs/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/stats/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/stream/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/api/chat/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/speech/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/transcriptions/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/voices/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/chat/completions/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/embeddings/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/images/generations/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/messages/count_tokens/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/messages/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/models/[kind]/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/models/info/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/models/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/responses/compact/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/responses/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/search/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/systemone/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/videos/[id]/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/videos/edits/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/videos/extensions/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/videos/generations/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/web/fetch/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1beta/models/[...path]/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1beta/models/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/version/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/version/shutdown/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/version/update/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/landing/page-38924391f8649361.js +0 -1
- package/app/.next-cli-build/static/chunks/app/login/page-0c4e2808c937c740.js +0 -1
- package/app/.next-cli-build/static/chunks/app/manifest.webmanifest/route-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/app/page-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/app-error-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/forbidden-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/not-found-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/unauthorized-2b9ff155b9d0f304.js +0 -1
- package/app/.next-cli-build/static/css/bdf1d87cd5f4db94.css +0 -1
- package/app/.next-cli-build/static/wj14lzSQILIu20--ipzW4/_buildManifest.js +0 -1
- /package/app/.next-cli-build/static/{wj14lzSQILIu20--ipzW4 → HXtMOamjH7NR-IuqflR2K}/_ssgManifest.js +0 -0
package/app/.next-cli-build/static/chunks/{6808-d3ffacc1373713c6.js → 6808-7c2c0ea1ee14763c.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6808],{5214:(e,t,s)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"workAsyncStorage",{enumerable:!0,get:function(){return r.workAsyncStorageInstance}});let r=s(17828)},6808:(e,t,s)=>{s.r(t),s.d(t,{default:()=>$});var r=s(95155),l=s(12115),a=s(73321),n=s(88105),o=s(56061),i=s(84588),d=s(14051),c=s.n(d),u=s(45496),m=s(43185),x=s(73006);function p({stats:e}){let t=(0,x.kk)();return(0,r.jsxs)("div",{className:"grid min-w-0 grid-cols-1 gap-3 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5 sm:gap-4",children:[(0,r.jsxs)(i.default,{className:"flex min-w-0 flex-col items-center text-center gap-1 px-3 py-3 sm:px-4",children:[(0,r.jsx)("span",{className:"text-text-muted text-xs uppercase font-semibold sm:text-sm",children:"Total Requests"}),(0,r.jsx)("span",{className:"w-full truncate text-lg font-bold xl:text-xl",title:(0,m.y)(e.totalRequests,t),children:(0,m.y)(e.totalRequests,t)})]}),(0,r.jsxs)(i.default,{className:"flex min-w-0 flex-col items-center text-center gap-1 px-3 py-3 sm:px-4",children:[(0,r.jsx)("span",{className:"text-text-muted text-xs uppercase font-semibold sm:text-sm",children:"Total Input Tokens"}),(0,r.jsx)("span",{className:"w-full truncate text-lg font-bold text-primary xl:text-xl",title:(0,m.y)(e.totalPromptTokens,t),children:(0,m.y)(e.totalPromptTokens,t)})]}),(0,r.jsxs)(i.default,{className:"flex min-w-0 flex-col items-center text-center gap-1 px-3 py-3 sm:px-4",children:[(0,r.jsx)("span",{className:"text-text-muted text-xs uppercase font-semibold sm:text-sm",children:"Cached Tokens"}),(0,r.jsx)("span",{className:"w-full truncate text-lg font-bold text-info xl:text-xl",title:(0,m.y)(e.totalCachedTokens,t),children:(0,m.y)(e.totalCachedTokens,t)})]}),(0,r.jsxs)(i.default,{className:"flex min-w-0 flex-col items-center text-center gap-1 px-3 py-3 sm:px-4",children:[(0,r.jsx)("span",{className:"text-text-muted text-xs uppercase font-semibold sm:text-sm",children:"Output Tokens"}),(0,r.jsx)("span",{className:"w-full truncate text-lg font-bold text-success xl:text-xl",title:(0,m.y)(e.totalCompletionTokens,t),children:(0,m.y)(e.totalCompletionTokens,t)})]}),(0,r.jsxs)(i.default,{className:"flex min-w-0 flex-col items-center text-center gap-1 px-3 py-3 sm:px-4",children:[(0,r.jsx)("span",{className:"text-text-muted text-xs uppercase font-semibold sm:text-sm",children:"Est. Cost"}),(0,r.jsxs)("span",{className:"w-full truncate text-lg font-bold text-warning xl:text-xl",title:`~${(0,u.F)(e.totalCost)}`,children:["~",(0,u.F)(e.totalCost)]}),(0,r.jsx)("span",{className:"text-[10px] text-text-muted",children:"Estimated, not actual billing"})]})]})}p.propTypes={stats:c().object.isRequired};let h=e=>new Intl.NumberFormat().format(e||0);function g(e){if(!e)return"Never";let t=Math.floor((Date.now()-new Date(e))/6e4);return t<1?"Just now":t<60?`${t}m ago`:t<1440?`${Math.floor(t/60)}h ago`:new Date(e).toLocaleDateString()}function f({field:e,currentSort:t,currentOrder:s}){return t!==e?(0,r.jsx)("span",{className:"ml-1 opacity-20",children:"↕"}):(0,r.jsx)("span",{className:"ml-1",children:"asc"===s?"↑":"↓"})}function y({item:e,viewMode:t,isSummary:s=!1}){return"tokens"===t?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:s&&void 0===e.promptTokens?"—":h(e.promptTokens)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:e.cachedTokens?h(e.cachedTokens):"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:s&&void 0===e.completionTokens?"—":h(e.completionTokens)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right font-medium",children:h(e.totalTokens)})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:s&&void 0===e.inputCost?"—":(0,u.F)(e.inputCost)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:e.cachedCost?(0,u.F)(e.cachedCost):"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:s&&void 0===e.outputCost?"—":(0,u.F)(e.outputCost)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right font-medium text-warning",children:(0,u.F)(e.totalCost||e.cost)})]})}function b({title:e,columns:t,groupedData:s,tableType:a,sortBy:n,sortOrder:o,onToggleSort:d,viewMode:c,storageKey:u,renderDetailCells:m,renderSummaryCells:x,emptyMessage:p}){let[h,g]=(0,l.useState)(new Set);(0,l.useEffect)(()=>{try{let e=localStorage.getItem(u);e&&g(new Set(JSON.parse(e)))}catch(e){console.error(`Failed to load ${u}:`,e)}},[u]),(0,l.useEffect)(()=>{try{localStorage.setItem(u,JSON.stringify([...h]))}catch(e){console.error(`Failed to save ${u}:`,e)}},[h,u]);let j=(0,l.useCallback)(e=>{g(t=>{let s=new Set(t);return s.has(e)?s.delete(e):s.add(e),s})},[]),N=(0,l.useMemo)(()=>"tokens"===c?[{field:"promptTokens",label:"Input Tokens"},{field:"cachedTokens",label:"Cached"},{field:"completionTokens",label:"Output Tokens"},{field:"totalTokens",label:"Total Tokens"}]:[{field:"inputCost",label:"Input Cost"},{field:"cachedCost",label:"Cached Cost"},{field:"outputCost",label:"Output Cost"},{field:"cost",label:"Total Cost"}],[c]),v=t.length+N.length;return(0,r.jsxs)(i.default,{className:"overflow-hidden",children:[(0,r.jsx)("div",{className:"p-4 border-b border-border bg-bg-alt/50",children:(0,r.jsx)("h3",{className:"font-semibold",children:e})}),(0,r.jsx)("div",{className:"overflow-x-auto",children:(0,r.jsxs)("table",{className:"w-full text-sm text-left",children:[(0,r.jsx)("thead",{className:"bg-bg-alt/30 text-text-muted uppercase text-xs",children:(0,r.jsxs)("tr",{children:[t.map(e=>(0,r.jsxs)("th",{className:`px-6 py-3 cursor-pointer hover:bg-bg-alt/50 ${"right"===e.align?"text-right":""}`,onClick:()=>d(a,e.field),children:[e.label," ",(0,r.jsx)(f,{field:e.field,currentSort:n,currentOrder:o})]},e.field)),N.map(e=>(0,r.jsxs)("th",{className:"px-6 py-3 text-right cursor-pointer hover:bg-bg-alt/50",onClick:()=>d(a,e.field),children:[e.label," ",(0,r.jsx)(f,{field:e.field,currentSort:n,currentOrder:o})]},e.field))]})}),(0,r.jsxs)("tbody",{className:"divide-y divide-border",children:[s.map(e=>(0,r.jsxs)(l.Fragment,{children:[(0,r.jsxs)("tr",{className:"group-summary cursor-pointer hover:bg-bg-alt/50 transition-colors",onClick:()=>j(e.groupKey),children:[(0,r.jsx)("td",{className:"px-6 py-3",children:(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:`material-symbols-outlined text-[18px] text-text-muted transition-transform ${h.has(e.groupKey)?"rotate-90":""}`,children:"chevron_right"}),(0,r.jsx)("span",{className:`font-medium transition-colors ${e.summary.pending>0?"text-primary":""}`,children:e.groupKey})]})}),x(e),(0,r.jsx)(y,{item:e.summary,viewMode:c,isSummary:!0})]}),h.has(e.groupKey)&&e.items.map(e=>(0,r.jsxs)("tr",{className:"group-detail hover:bg-bg-alt/20 transition-colors",children:[m(e),(0,r.jsx)(y,{item:e,viewMode:c})]},`detail-${e.key}`))]},e.groupKey)),0===s.length&&(0,r.jsx)("tr",{children:(0,r.jsx)("td",{colSpan:v,className:"px-6 py-8 text-center text-text-muted",children:p})})]})]})})]})}f.propTypes={field:c().string.isRequired,currentSort:c().string.isRequired,currentOrder:c().string.isRequired},y.propTypes={item:c().object.isRequired,viewMode:c().string.isRequired,isSummary:c().bool},b.propTypes={title:c().string.isRequired,columns:c().arrayOf(c().shape({field:c().string.isRequired,label:c().string.isRequired,align:c().string})).isRequired,groupedData:c().array.isRequired,tableType:c().string.isRequired,sortBy:c().string.isRequired,sortOrder:c().string.isRequired,onToggleSort:c().func.isRequired,viewMode:c().string.isRequired,storageKey:c().string.isRequired,renderDetailCells:c().func.isRequired,renderSummaryCells:c().func.isRequired,emptyMessage:c().string.isRequired};var j=s(37206);function N(e){let t=n.Q2[e];return!t?.serviceKinds||t.serviceKinds.includes("llm")}let v=(0,j.default)(()=>Promise.all([s.e(2574),s.e(3862),s.e(3842),s.e(6357),s.e(3521)]).then(s.bind(s,63521)),{loadableGenerated:{webpack:()=>[63521]},ssr:!1}),w=(0,j.default)(()=>Promise.all([s.e(3842),s.e(839),s.e(124)]).then(s.bind(s,10124)),{loadableGenerated:{webpack:()=>[10124]},ssr:!1});function k({timestamp:e}){let t,[,s]=(0,l.useState)(0);return(0,l.useEffect)(()=>{let e=setInterval(()=>s(e=>e+1),1e3);return()=>clearInterval(e)},[]),(0,r.jsx)(r.Fragment,{children:(t=Math.floor((Date.now()-new Date(e))/1e3))<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`})}function C({requests:e=[]}){return(0,r.jsxs)(i.default,{className:"flex min-w-0 flex-col overflow-hidden",padding:"sm",style:{height:480},children:[(0,r.jsx)("div",{className:"px-1 py-2 border-b border-border shrink-0",children:(0,r.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"Recent Requests"})}),e.length?(0,r.jsx)("div",{className:"flex-1 overflow-y-auto",children:(0,r.jsxs)("table",{className:"w-full min-w-[300px] border-collapse text-xs",children:[(0,r.jsx)("thead",{className:"sticky top-0 bg-bg z-10",children:(0,r.jsxs)("tr",{className:"border-b border-border",children:[(0,r.jsx)("th",{className:"py-1.5 text-left font-semibold text-text-muted w-2"}),(0,r.jsx)("th",{className:"py-1.5 text-left font-semibold text-text-muted",children:"Model"}),(0,r.jsx)("th",{className:"py-1.5 text-right font-semibold text-text-muted whitespace-nowrap",children:"In / Out"}),(0,r.jsx)("th",{className:"py-1.5 text-right font-semibold text-text-muted",children:"When"})]})}),(0,r.jsx)("tbody",{className:"divide-y divide-border/50",children:e.map((e,t)=>{let s=!e.status||"ok"===e.status||"success"===e.status;return(0,r.jsxs)("tr",{className:"hover:bg-bg-alt transition-colors",children:[(0,r.jsx)("td",{className:"py-1.5",children:(0,r.jsx)("span",{className:`block w-1.5 h-1.5 rounded-full ${s?"bg-success":"bg-danger"}`})}),(0,r.jsx)("td",{className:"py-1.5 font-mono truncate max-w-[120px]",title:e.model,children:e.model}),(0,r.jsxs)("td",{className:"py-1.5 text-right whitespace-nowrap",children:[(0,r.jsxs)("span",{className:"text-primary",children:[h(e.promptTokens),"↑"]})," ",(0,r.jsxs)("span",{className:"text-success",children:[h(e.completionTokens),"↓"]})]}),(0,r.jsx)("td",{className:"py-1.5 text-right text-text-muted whitespace-nowrap",children:(0,r.jsx)(k,{timestamp:e.timestamp})})]},t)})})]})}):(0,r.jsx)("div",{className:"flex-1 flex items-center justify-center text-text-muted text-sm",children:"No requests yet."})]})}let T=new Set(["requests","lastUsed","promptTokens","cachedTokens","completionTokens","totalTokens","cost","inputCost","cachedCost","outputCost"]);function S(e,t,s,r,l){var a=function(e,t){if(!Array.isArray(e))return[];let s={};return e.forEach(e=>{let r=function(e,t){switch(t){case"rawModel":return e.rawModel||"Unknown Model";case"accountName":return e.accountName||`Account ${e.connectionId?.slice(0,8)}...`||"Unknown Account";case"keyName":return e.keyName||"Unknown Key";case"endpoint":return e.endpoint||"Unknown Endpoint";default:return e[t]||"Unknown"}}(e,t);s[r]||(s[r]={groupKey:r,summary:{requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,totalTokens:0,cost:0,inputCost:0,cachedCost:0,outputCost:0,lastUsed:null,pending:0},items:[]});let l=s[r].summary;l.requests+=e.requests||0,l.promptTokens+=e.promptTokens||0,l.completionTokens+=e.completionTokens||0,l.cachedTokens+=e.cachedTokens||0,l.totalTokens+=e.totalTokens||0,l.cost+=e.cost||0,l.inputCost+=e.inputCost||0,l.cachedCost+=e.cachedCost||0,l.outputCost+=e.outputCost||0,l.pending+=e.pending||0,e.lastUsed&&(!l.lastUsed||new Date(e.lastUsed)>new Date(l.lastUsed))&&(l.lastUsed=e.lastUsed),s[r].items.push(e)}),Object.values(s)}(function(e,t={},s,r){return Object.entries(e||{}).map(([e,s])=>{let r=(s.promptTokens||0)+(s.completionTokens||0),l=s.cost||0,a=s.cachedTokens||0,n=Math.max(0,(s.promptTokens||0)-a),o=r>0?(s.completionTokens||0)*(l/r):0;return{...s,key:e,totalTokens:r,totalCost:l,inputCost:r>0?l/r*n:0,cachedCost:r>0?l/r*a:0,outputCost:o,pending:t[e]||0}}).sort((e,t)=>{let l=e[s],a=t[s];return("string"==typeof l&&(l=l.toLowerCase()),"string"==typeof a&&(a=a.toLowerCase()),l<a)?"asc"===r?-1:1:l>a?"asc"===r?1:-1:0})}(e,t,r,l),s);if(!T.has(r))return a;let n="asc"===l?1:-1;return[...a].sort((e,t)=>{let s=e.summary[r],l=t.summary[r];return"lastUsed"===r&&(s=s?new Date(s).getTime():0,l=l?new Date(l).getTime():0),((s||0)-(l||0))*n})}let q=[{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],M=[{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"accountName",label:"Account"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],R=[{field:"keyName",label:"API Key Name"},{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],O=[{field:"endpoint",label:"Endpoint"},{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],P=[{value:"model",label:"Usage by Model"},{value:"account",label:"Usage by Account"},{value:"apiKey",label:"Usage by API Key"},{value:"endpoint",label:"Usage by Endpoint"}],U=[{value:"today",label:"Today"},{value:"24h",label:"24h"},{value:"7d",label:"7D"},{value:"30d",label:"30D"},{value:"60d",label:"60D"},{value:"all",label:"All"}];function $({period:e,setPeriod:t,hidePeriodSelector:s=!1}={}){let i=(0,a.useRouter)(),d=(0,a.useSearchParams)(),c=d.get("sortBy")||"rawModel",u=d.get("sortOrder")||"asc",[m,x]=(0,l.useState)(null),[f,y]=(0,l.useState)(!0),[j,k]=(0,l.useState)(!1),[T,_]=(0,l.useState)("model"),[D,F]=(0,l.useState)("costs"),[A,E]=(0,l.useState)([]),[K,I]=(0,l.useState)({}),[L,B]=(0,l.useState)("today"),z=(0,l.useRef)(!0),J=(0,l.useRef)(!1),G=e??L,W=t??B;(0,l.useEffect)(()=>{Promise.all([fetch("/api/providers").then(e=>e.ok?e.json():null),fetch("/api/provider-nodes").then(e=>e.ok?e.json():null),fetch("/api/settings",{cache:"no-store"}).then(e=>e.ok?e.json():null).then(e=>({topologyVisibility:e?.topologyVisibility||{},showCommunityProviders:e?.showCommunityProviders!==!1}))]).then(([e,t,{topologyVisibility:s,showCommunityProviders:r}])=>{I(s);let l={};for(let e of t?.nodes||[])l[e.id]=e.name;let a=e=>!r&&n.Q2[e]?.community===!0,o=new Set;E([...(e?.connections||[]).filter(e=>!(!1===e.isActive||!N(e.provider)||a(e.provider)||o.has(e.provider))&&(o.add(e.provider),!0)).map(e=>({...e,nodeName:l[e.provider]||null})),...Object.values(n.IS).filter(e=>{let t;return e.noAuth&&!e.hidden&&!a(e.id)&&!o.has(e.id)&&N(e.id)&&!1!==(t=s?.[e.id])&&(!0===t||!e.topologyHiddenByDefault)}).map(e=>({provider:e.id,name:e.name}))])}).catch(()=>{})},[]),(0,l.useEffect)(()=>{z.current?(z.current=!1,y(!0)):k(!0),fetch(`/api/usage/stats?period=${G}`).then(e=>e.ok?e.json():null).then(e=>{e&&(J.current=!0,x(t=>({...t,...e})))}).catch(()=>{}).finally(()=>{y(!1),k(!1)})},[G]),(0,l.useEffect)(()=>{let e=new EventSource("/api/usage/stream");return e.onmessage=e=>{try{let t=JSON.parse(e.data);x(e=>e?{...e,activeRequests:t.activeRequests,recentRequests:t.recentRequests,errorProvider:t.errorProvider,pending:t.pending}:e),J.current&&y(!1)}catch(e){console.error("[SSE CLIENT] parse error:",e)}},e.onerror=()=>y(!1),()=>e.close()},[]);let Q=(0,l.useCallback)((e,t)=>{let s=new URLSearchParams(d.toString());s.get("sortBy")===t?s.set("sortOrder","asc"===s.get("sortOrder")?"desc":"asc"):(s.set("sortBy",t),s.set("sortOrder","asc")),i.replace(`?${s.toString()}`,{scroll:!1})},[d,i]),V=(0,l.useMemo)(()=>{if(!m)return null;switch(T){case"model":{let e=m.pending?.byModel||{};return{columns:q,groupedData:S(m.byModel,e,"rawModel",c,u),storageKey:"usage-stats:expanded-models",emptyMessage:"No usage recorded yet.",renderSummaryCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:h(e.summary.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:g(e.summary.lastUsed)})]}),renderDetailCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:`px-6 py-3 font-medium transition-colors ${e.pending>0?"text-primary":""}`,children:e.rawModel}),(0,r.jsx)("td",{className:"px-6 py-3",children:(0,r.jsx)(o.default,{variant:e.pending>0?"primary":"neutral",size:"sm",children:e.provider})}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:h(e.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:g(e.lastUsed)})]})}}case"account":{let e={};return m?.pending?.byAccount&&Object.entries(m.byAccount||{}).forEach(([t,s])=>{let r=m.pending.byAccount[s.connectionId];if(r){let l=s.provider?`${s.rawModel} (${s.provider})`:s.rawModel;e[t]=r[l]||0}}),{columns:M,groupedData:S(m.byAccount,e,"accountName",c,u),storageKey:"usage-stats:expanded-accounts",emptyMessage:"No account-specific usage recorded yet.",renderSummaryCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:h(e.summary.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:g(e.summary.lastUsed)})]}),renderDetailCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:`px-6 py-3 font-medium transition-colors ${e.pending>0?"text-primary":""}`,children:e.accountName||`Account ${e.connectionId?.slice(0,8)}...`}),(0,r.jsx)("td",{className:`px-6 py-3 font-medium transition-colors ${e.pending>0?"text-primary":""}`,children:e.rawModel}),(0,r.jsx)("td",{className:"px-6 py-3",children:(0,r.jsx)(o.default,{variant:e.pending>0?"primary":"neutral",size:"sm",children:e.provider})}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:h(e.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:g(e.lastUsed)})]})}}case"apiKey":return{columns:R,groupedData:S(m.byApiKey,{},"keyName",c,u),storageKey:"usage-stats:expanded-apikeys",emptyMessage:"No API key usage recorded yet.",renderSummaryCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:h(e.summary.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:g(e.summary.lastUsed)})]}),renderDetailCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 font-medium",children:e.keyName}),(0,r.jsx)("td",{className:"px-6 py-3",children:e.rawModel}),(0,r.jsx)("td",{className:"px-6 py-3",children:(0,r.jsx)(o.default,{variant:"neutral",size:"sm",children:e.provider})}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:h(e.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:g(e.lastUsed)})]})};default:return{columns:O,groupedData:S(m.byEndpoint,{},"endpoint",c,u),storageKey:"usage-stats:expanded-endpoints",emptyMessage:"No endpoint usage recorded yet.",renderSummaryCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:h(e.summary.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:g(e.summary.lastUsed)})]}),renderDetailCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 font-medium font-mono text-sm",children:e.endpoint}),(0,r.jsx)("td",{className:"px-6 py-3",children:e.rawModel}),(0,r.jsx)("td",{className:"px-6 py-3",children:(0,r.jsx)(o.default,{variant:"neutral",size:"sm",children:e.provider})}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:h(e.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:g(e.lastUsed)})]})}}},[m,T,c,u]);if(!m&&!f)return(0,r.jsx)("div",{className:"text-text-muted",children:"Failed to load usage statistics."});let H=(0,r.jsx)("div",{className:"flex items-center justify-center py-12 text-text-muted",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[32px] animate-spin",children:"progress_activity"})});return(0,r.jsxs)("div",{className:"flex min-w-0 flex-col gap-6",children:[!s&&(0,r.jsxs)("div",{className:"flex w-full items-center gap-2 sm:w-auto sm:self-end",children:[(0,r.jsx)("div",{className:"grid flex-1 grid-cols-6 items-center gap-1 rounded-lg border border-border bg-bg-alt p-1 sm:flex sm:flex-none",children:U.map(e=>(0,r.jsx)("button",{onClick:()=>W(e.value),disabled:j,className:`rounded-md px-3 py-1 text-sm font-medium transition-colors ${G===e.value?"bg-primary text-white shadow-sm":"text-text-muted hover:bg-surface-2 hover:text-text"}`,children:e.label},e.value))}),j&&(0,r.jsx)("span",{className:"material-symbols-outlined text-[16px] text-text-muted animate-spin",children:"progress_activity"})]}),f?H:(0,r.jsx)(p,{stats:m}),f?H:(0,r.jsxs)("div",{className:"grid min-w-0 grid-cols-1 items-stretch gap-2 lg:grid-cols-[minmax(0,2fr)_minmax(280px,1fr)]",children:[(0,r.jsx)(v,{providers:A,activeRequests:m.activeRequests||[],lastProvider:m.recentRequests?.[0]?.provider||"",errorProvider:m.errorProvider||""}),(0,r.jsx)(C,{requests:m.recentRequests||[]})]}),f?H:(0,r.jsx)(w,{period:G}),(0,r.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,r.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,r.jsx)("select",{value:T,onChange:e=>_(e.target.value),className:"w-full rounded-lg border border-border bg-surface px-3 py-1.5 text-sm font-medium text-text-main focus:outline-none focus:ring-2 focus:ring-primary/50 sm:w-auto",style:{colorScheme:"auto"},children:P.map(e=>(0,r.jsx)("option",{value:e.value,children:e.label},e.value))}),(0,r.jsxs)("div",{className:"grid grid-cols-2 items-center gap-1 rounded-lg border border-border bg-bg-alt p-1 sm:flex",children:[(0,r.jsx)("button",{onClick:()=>F("costs"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"costs"===D?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-surface-2"}`,children:"Costs"}),(0,r.jsx)("button",{onClick:()=>F("tokens"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"tokens"===D?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-surface-2"}`,children:"Tokens"})]})]}),f?H:V&&(0,r.jsx)(b,{title:"",columns:V.columns,groupedData:V.groupedData,tableType:T,sortBy:c,sortOrder:u,onToggleSort:Q,viewMode:D,storageKey:V.storageKey,renderSummaryCells:V.renderSummaryCells,renderDetailCells:V.renderDetailCells,emptyMessage:V.emptyMessage})]})]})}},17828:(e,t,s)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"workAsyncStorageInstance",{enumerable:!0,get:function(){return r}});let r=(0,s(64054).createAsyncLocalStorage)()},21957:(e,t,s)=>{function r({moduleIds:e}){return null}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"PreloadChunks",{enumerable:!0,get:function(){return r}}),s(95155),s(47650),s(5214),s(2451),s(53887)},37206:(e,t,s)=>{s.d(t,{default:()=>l.a});var r=s(75707),l=s.n(r)},41112:(e,t,s)=>{function r({reason:e,children:t}){return t}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"BailoutToCSR",{enumerable:!0,get:function(){return r}}),s(1980)},43185:(e,t,s)=>{function r(){if("u"<typeof localStorage)return!0;let e=localStorage.getItem("compactUnits");return null===e||"0"!==e}function l(e,t="en",s=!1){let a=e||0;return s||r()?String(t).startsWith("zh")?a>=1e8?`${(a/1e8).toFixed(1)}亿`:a>=1e4?`${(a/1e4).toFixed(1)}万`:a.toLocaleString():a>=1e9?`${(a/1e9).toFixed(1)}B`:a>=1e6?`${(a/1e6).toFixed(1)}M`:a>=1e3?`${(a/1e3).toFixed(1)}K`:a.toLocaleString():a.toLocaleString()}s.d(t,{k:()=>r,y:()=>l})},64054:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0});var s={bindSnapshot:function(){return i},createAsyncLocalStorage:function(){return o},createSnapshot:function(){return d}};for(var r in s)Object.defineProperty(t,r,{enumerable:!0,get:s[r]});let l=Object.defineProperty(Error("Invariant: AsyncLocalStorage accessed in runtime where it is not available"),"__NEXT_ERROR_CODE",{value:"E504",enumerable:!1,configurable:!0});class a{disable(){throw l}getStore(){}run(){throw l}exit(){throw l}enterWith(){throw l}static bind(e){return e}}let n="u">typeof globalThis&&globalThis.AsyncLocalStorage;function o(){return n?new n:new a}function i(e){return n?n.bind(e):a.bind(e)}function d(){return n?n.snapshot():function(e,...t){return e(...t)}}},68635:(e,t,s)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return i}});let r=s(95155),l=s(12115),a=s(41112);function n(e){return{default:e&&"default"in e?e.default:e}}s(21957);let o={loader:()=>Promise.resolve(n(()=>null)),loading:null,ssr:!0},i=function(e){let t={...o,...e},s=(0,l.lazy)(()=>t.loader().then(n)),i=t.loading;function d(e){let n=i?(0,r.jsx)(i,{isLoading:!0,pastDelay:!0,error:null}):null,o=!t.ssr||!!t.loading,d=o?l.Suspense:l.Fragment,c=t.ssr?(0,r.jsxs)(r.Fragment,{children:[null,(0,r.jsx)(s,{...e})]}):(0,r.jsx)(a.BailoutToCSR,{reason:"next/dynamic",children:(0,r.jsx)(s,{...e})});return(0,r.jsx)(d,{...o?{fallback:n}:{},children:c})}return d.displayName="LoadableComponent",d}},75707:(e,t,s)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return l}});let r=s(73623)._(s(68635));function l(e,t){let s={};"function"==typeof e&&(s.loader=e);let l={...s,...t};return(0,r.default)({...l,modules:l.loadableGenerated?.modules})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)}}]);
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6808],{5214:(e,t,s)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"workAsyncStorage",{enumerable:!0,get:function(){return r.workAsyncStorageInstance}});let r=s(17828)},6808:(e,t,s)=>{s.r(t),s.d(t,{default:()=>$});var r=s(95155),l=s(12115),a=s(73321),n=s(88105),o=s(56061),i=s(84588),d=s(14051),c=s.n(d),u=s(45496),m=s(43185),x=s(73006);function p({stats:e}){let t=(0,x.kk)();return(0,r.jsxs)("div",{className:"grid min-w-0 grid-cols-1 gap-3 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5 sm:gap-4",children:[(0,r.jsxs)(i.default,{className:"flex min-w-0 flex-col items-center text-center gap-1 px-3 py-3 sm:px-4",children:[(0,r.jsx)("span",{className:"text-text-muted text-xs uppercase font-semibold sm:text-sm",children:"Total Requests"}),(0,r.jsx)("span",{className:"w-full truncate text-lg font-bold xl:text-xl",title:(0,m.y)(e.totalRequests,t),children:(0,m.y)(e.totalRequests,t)})]}),(0,r.jsxs)(i.default,{className:"flex min-w-0 flex-col items-center text-center gap-1 px-3 py-3 sm:px-4",children:[(0,r.jsx)("span",{className:"text-text-muted text-xs uppercase font-semibold sm:text-sm",children:"Total Input Tokens"}),(0,r.jsx)("span",{className:"w-full truncate text-lg font-bold text-primary xl:text-xl",title:(0,m.y)(e.totalPromptTokens,t),children:(0,m.y)(e.totalPromptTokens,t)})]}),(0,r.jsxs)(i.default,{className:"flex min-w-0 flex-col items-center text-center gap-1 px-3 py-3 sm:px-4",children:[(0,r.jsx)("span",{className:"text-text-muted text-xs uppercase font-semibold sm:text-sm",children:"Cached Tokens"}),(0,r.jsx)("span",{className:"w-full truncate text-lg font-bold text-info xl:text-xl",title:(0,m.y)(e.totalCachedTokens,t),children:(0,m.y)(e.totalCachedTokens,t)})]}),(0,r.jsxs)(i.default,{className:"flex min-w-0 flex-col items-center text-center gap-1 px-3 py-3 sm:px-4",children:[(0,r.jsx)("span",{className:"text-text-muted text-xs uppercase font-semibold sm:text-sm",children:"Output Tokens"}),(0,r.jsx)("span",{className:"w-full truncate text-lg font-bold text-success xl:text-xl",title:(0,m.y)(e.totalCompletionTokens,t),children:(0,m.y)(e.totalCompletionTokens,t)})]}),(0,r.jsxs)(i.default,{className:"flex min-w-0 flex-col items-center text-center gap-1 px-3 py-3 sm:px-4",children:[(0,r.jsx)("span",{className:"text-text-muted text-xs uppercase font-semibold sm:text-sm",children:"Est. Cost"}),(0,r.jsxs)("span",{className:"w-full truncate text-lg font-bold text-warning xl:text-xl",title:`~${(0,u.F)(e.totalCost)}`,children:["~",(0,u.F)(e.totalCost)]}),(0,r.jsx)("span",{className:"text-[10px] text-text-muted",children:"Estimated, not actual billing"})]})]})}p.propTypes={stats:c().object.isRequired};let h=e=>new Intl.NumberFormat().format(e||0);function g(e){if(!e)return"Never";let t=Math.floor((Date.now()-new Date(e))/6e4);return t<1?"Just now":t<60?`${t}m ago`:t<1440?`${Math.floor(t/60)}h ago`:new Date(e).toLocaleDateString()}function f({field:e,currentSort:t,currentOrder:s}){return t!==e?(0,r.jsx)("span",{className:"ml-1 opacity-20",children:"↕"}):(0,r.jsx)("span",{className:"ml-1",children:"asc"===s?"↑":"↓"})}function y({item:e,viewMode:t,isSummary:s=!1}){return"tokens"===t?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:s&&void 0===e.promptTokens?"—":h(e.promptTokens)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:e.cachedTokens?h(e.cachedTokens):"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:s&&void 0===e.completionTokens?"—":h(e.completionTokens)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right font-medium",children:h(e.totalTokens)})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:s&&void 0===e.inputCost?"—":(0,u.F)(e.inputCost)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:e.cachedCost?(0,u.F)(e.cachedCost):"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:s&&void 0===e.outputCost?"—":(0,u.F)(e.outputCost)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right font-medium text-warning",children:(0,u.F)(e.totalCost||e.cost)})]})}function b({title:e,columns:t,groupedData:s,tableType:a,sortBy:n,sortOrder:o,onToggleSort:d,viewMode:c,storageKey:u,renderDetailCells:m,renderSummaryCells:x,emptyMessage:p}){let[h,g]=(0,l.useState)(new Set);(0,l.useEffect)(()=>{try{let e=localStorage.getItem(u);e&&g(new Set(JSON.parse(e)))}catch(e){console.error(`Failed to load ${u}:`,e)}},[u]),(0,l.useEffect)(()=>{try{localStorage.setItem(u,JSON.stringify([...h]))}catch(e){console.error(`Failed to save ${u}:`,e)}},[h,u]);let j=(0,l.useCallback)(e=>{g(t=>{let s=new Set(t);return s.has(e)?s.delete(e):s.add(e),s})},[]),N=(0,l.useMemo)(()=>"tokens"===c?[{field:"promptTokens",label:"Input Tokens"},{field:"cachedTokens",label:"Cached"},{field:"completionTokens",label:"Output Tokens"},{field:"totalTokens",label:"Total Tokens"}]:[{field:"inputCost",label:"Input Cost"},{field:"cachedCost",label:"Cached Cost"},{field:"outputCost",label:"Output Cost"},{field:"cost",label:"Total Cost"}],[c]),v=t.length+N.length;return(0,r.jsxs)(i.default,{className:"overflow-hidden",children:[(0,r.jsx)("div",{className:"p-4 border-b border-border bg-bg-alt/50",children:(0,r.jsx)("h3",{className:"font-semibold",children:e})}),(0,r.jsx)("div",{className:"overflow-x-auto",children:(0,r.jsxs)("table",{className:"w-full text-sm text-left",children:[(0,r.jsx)("thead",{className:"bg-bg-alt/30 text-text-muted uppercase text-xs",children:(0,r.jsxs)("tr",{children:[t.map(e=>(0,r.jsxs)("th",{className:`px-6 py-3 cursor-pointer hover:bg-bg-alt/50 ${"right"===e.align?"text-right":""}`,onClick:()=>d(a,e.field),children:[e.label," ",(0,r.jsx)(f,{field:e.field,currentSort:n,currentOrder:o})]},e.field)),N.map(e=>(0,r.jsxs)("th",{className:"px-6 py-3 text-right cursor-pointer hover:bg-bg-alt/50",onClick:()=>d(a,e.field),children:[e.label," ",(0,r.jsx)(f,{field:e.field,currentSort:n,currentOrder:o})]},e.field))]})}),(0,r.jsxs)("tbody",{className:"divide-y divide-border",children:[s.map(e=>(0,r.jsxs)(l.Fragment,{children:[(0,r.jsxs)("tr",{className:"group-summary cursor-pointer hover:bg-bg-alt/50 transition-colors",onClick:()=>j(e.groupKey),children:[(0,r.jsx)("td",{className:"px-6 py-3",children:(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:`material-symbols-outlined text-[18px] text-text-muted transition-transform ${h.has(e.groupKey)?"rotate-90":""}`,children:"chevron_right"}),(0,r.jsx)("span",{className:`font-medium transition-colors ${e.summary.pending>0?"text-primary":""}`,children:e.groupKey})]})}),x(e),(0,r.jsx)(y,{item:e.summary,viewMode:c,isSummary:!0})]}),h.has(e.groupKey)&&e.items.map(e=>(0,r.jsxs)("tr",{className:"group-detail hover:bg-bg-alt/20 transition-colors",children:[m(e),(0,r.jsx)(y,{item:e,viewMode:c})]},`detail-${e.key}`))]},e.groupKey)),0===s.length&&(0,r.jsx)("tr",{children:(0,r.jsx)("td",{colSpan:v,className:"px-6 py-8 text-center text-text-muted",children:p})})]})]})})]})}f.propTypes={field:c().string.isRequired,currentSort:c().string.isRequired,currentOrder:c().string.isRequired},y.propTypes={item:c().object.isRequired,viewMode:c().string.isRequired,isSummary:c().bool},b.propTypes={title:c().string.isRequired,columns:c().arrayOf(c().shape({field:c().string.isRequired,label:c().string.isRequired,align:c().string})).isRequired,groupedData:c().array.isRequired,tableType:c().string.isRequired,sortBy:c().string.isRequired,sortOrder:c().string.isRequired,onToggleSort:c().func.isRequired,viewMode:c().string.isRequired,storageKey:c().string.isRequired,renderDetailCells:c().func.isRequired,renderSummaryCells:c().func.isRequired,emptyMessage:c().string.isRequired};var j=s(37206);function N(e){let t=n.Q2[e];return!t?.serviceKinds||t.serviceKinds.includes("llm")}let v=(0,j.default)(()=>Promise.all([s.e(2574),s.e(3862),s.e(3842),s.e(6357),s.e(3521)]).then(s.bind(s,63521)),{loadableGenerated:{webpack:()=>[63521]},ssr:!1}),w=(0,j.default)(()=>Promise.all([s.e(3842),s.e(839),s.e(124)]).then(s.bind(s,10124)),{loadableGenerated:{webpack:()=>[10124]},ssr:!1});function k({timestamp:e}){let t,[,s]=(0,l.useState)(0);return(0,l.useEffect)(()=>{let e=setInterval(()=>s(e=>e+1),1e3);return()=>clearInterval(e)},[]),(0,r.jsx)(r.Fragment,{children:(t=Math.floor((Date.now()-new Date(e))/1e3))<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`})}function C({requests:e=[]}){return(0,r.jsxs)(i.default,{className:"flex min-w-0 flex-col overflow-hidden",padding:"sm",style:{height:480},children:[(0,r.jsx)("div",{className:"px-1 py-2 border-b border-border shrink-0",children:(0,r.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"Recent Requests"})}),e.length?(0,r.jsx)("div",{className:"flex-1 overflow-y-auto",children:(0,r.jsxs)("table",{className:"w-full min-w-[300px] border-collapse text-xs",children:[(0,r.jsx)("thead",{className:"sticky top-0 bg-bg z-10",children:(0,r.jsxs)("tr",{className:"border-b border-border",children:[(0,r.jsx)("th",{className:"py-1.5 text-left font-semibold text-text-muted w-2"}),(0,r.jsx)("th",{className:"py-1.5 text-left font-semibold text-text-muted",children:"Model"}),(0,r.jsx)("th",{className:"py-1.5 text-right font-semibold text-text-muted whitespace-nowrap",children:"In / Out"}),(0,r.jsx)("th",{className:"py-1.5 text-right font-semibold text-text-muted",children:"When"})]})}),(0,r.jsx)("tbody",{className:"divide-y divide-border/50",children:e.map((e,t)=>{let s=!e.status||"ok"===e.status||"success"===e.status;return(0,r.jsxs)("tr",{className:"hover:bg-bg-alt transition-colors",children:[(0,r.jsx)("td",{className:"py-1.5",children:(0,r.jsx)("span",{className:`block w-1.5 h-1.5 rounded-full ${s?"bg-success":"bg-danger"}`})}),(0,r.jsx)("td",{className:"py-1.5 font-mono truncate max-w-[120px]",title:e.model,children:e.model}),(0,r.jsxs)("td",{className:"py-1.5 text-right whitespace-nowrap",children:[(0,r.jsxs)("span",{className:"text-primary",children:[h(e.promptTokens),"↑"]})," ",(0,r.jsxs)("span",{className:"text-success",children:[h(e.completionTokens),"↓"]})]}),(0,r.jsx)("td",{className:"py-1.5 text-right text-text-muted whitespace-nowrap",children:(0,r.jsx)(k,{timestamp:e.timestamp})})]},t)})})]})}):(0,r.jsx)("div",{className:"flex-1 flex items-center justify-center text-text-muted text-sm",children:"No requests yet."})]})}let T=new Set(["requests","lastUsed","promptTokens","cachedTokens","completionTokens","totalTokens","cost","inputCost","cachedCost","outputCost"]);function S(e,t,s,r,l){var a=function(e,t){if(!Array.isArray(e))return[];let s={};return e.forEach(e=>{let r=function(e,t){switch(t){case"rawModel":return e.rawModel||"Unknown Model";case"accountName":return e.accountName||`Account ${e.connectionId?.slice(0,8)}...`||"Unknown Account";case"keyName":return e.keyName||"Unknown Key";case"endpoint":return e.endpoint||"Unknown Endpoint";default:return e[t]||"Unknown"}}(e,t);s[r]||(s[r]={groupKey:r,summary:{requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,totalTokens:0,cost:0,inputCost:0,cachedCost:0,outputCost:0,lastUsed:null,pending:0},items:[]});let l=s[r].summary;l.requests+=e.requests||0,l.promptTokens+=e.promptTokens||0,l.completionTokens+=e.completionTokens||0,l.cachedTokens+=e.cachedTokens||0,l.totalTokens+=e.totalTokens||0,l.cost+=e.cost||0,l.inputCost+=e.inputCost||0,l.cachedCost+=e.cachedCost||0,l.outputCost+=e.outputCost||0,l.pending+=e.pending||0,e.lastUsed&&(!l.lastUsed||new Date(e.lastUsed)>new Date(l.lastUsed))&&(l.lastUsed=e.lastUsed),s[r].items.push(e)}),Object.values(s)}(function(e,t={},s,r){return Object.entries(e||{}).map(([e,s])=>{let r=(s.promptTokens||0)+(s.completionTokens||0),l=s.cost||0,a=s.cachedTokens||0,n=Math.max(0,(s.promptTokens||0)-a),o=r>0?(s.completionTokens||0)*(l/r):0;return{...s,key:e,totalTokens:r,totalCost:l,inputCost:r>0?l/r*n:0,cachedCost:r>0?l/r*a:0,outputCost:o,pending:t[e]||0}}).sort((e,t)=>{let l=e[s],a=t[s];return("string"==typeof l&&(l=l.toLowerCase()),"string"==typeof a&&(a=a.toLowerCase()),l<a)?"asc"===r?-1:1:l>a?"asc"===r?1:-1:0})}(e,t,r,l),s);if(!T.has(r))return a;let n="asc"===l?1:-1;return[...a].sort((e,t)=>{let s=e.summary[r],l=t.summary[r];return"lastUsed"===r&&(s=s?new Date(s).getTime():0,l=l?new Date(l).getTime():0),((s||0)-(l||0))*n})}let q=[{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],M=[{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"accountName",label:"Account"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],R=[{field:"keyName",label:"API Key Name"},{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],O=[{field:"endpoint",label:"Endpoint"},{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],P=[{value:"model",label:"Usage by Model"},{value:"account",label:"Usage by Account"},{value:"apiKey",label:"Usage by API Key"},{value:"endpoint",label:"Usage by Endpoint"}],U=[{value:"today",label:"Today"},{value:"24h",label:"24h"},{value:"7d",label:"7D"},{value:"30d",label:"30D"},{value:"60d",label:"60D"},{value:"all",label:"All"}];function $({period:e,setPeriod:t,hidePeriodSelector:s=!1}={}){let i=(0,a.useRouter)(),d=(0,a.useSearchParams)(),c=d.get("sortBy")||"rawModel",u=d.get("sortOrder")||"asc",[m,x]=(0,l.useState)(null),[f,y]=(0,l.useState)(!0),[j,k]=(0,l.useState)(!1),[T,_]=(0,l.useState)("model"),[D,F]=(0,l.useState)("costs"),[A,E]=(0,l.useState)([]),[K,I]=(0,l.useState)({}),[L,B]=(0,l.useState)("today"),z=(0,l.useRef)(!0),J=(0,l.useRef)(!1),G=e??L,Q=t??B;(0,l.useEffect)(()=>{Promise.all([fetch("/api/providers").then(e=>e.ok?e.json():null),fetch("/api/provider-nodes").then(e=>e.ok?e.json():null),fetch("/api/settings",{cache:"no-store"}).then(e=>e.ok?e.json():null).then(e=>({topologyVisibility:e?.topologyVisibility||{},showCommunityProviders:e?.showCommunityProviders!==!1}))]).then(([e,t,{topologyVisibility:s,showCommunityProviders:r}])=>{I(s);let l={};for(let e of t?.nodes||[])l[e.id]=e.name;let a=e=>!r&&n.Q2[e]?.community===!0,o=new Set;E([...(e?.connections||[]).filter(e=>!(!1===e.isActive||!N(e.provider)||a(e.provider)||n.Q2[e.provider]?.hidden||o.has(e.provider))&&(o.add(e.provider),!0)).map(e=>({...e,nodeName:l[e.provider]||null})),...Object.values(n.IS).filter(e=>{let t;return e.noAuth&&!e.hidden&&!a(e.id)&&!o.has(e.id)&&N(e.id)&&!1!==(t=s?.[e.id])&&(!0===t||!e.topologyHiddenByDefault)}).map(e=>({provider:e.id,name:e.name}))])}).catch(()=>{})},[]),(0,l.useEffect)(()=>{z.current?(z.current=!1,y(!0)):k(!0),fetch(`/api/usage/stats?period=${G}`).then(e=>e.ok?e.json():null).then(e=>{e&&(J.current=!0,x(t=>({...t,...e})))}).catch(()=>{}).finally(()=>{y(!1),k(!1)})},[G]),(0,l.useEffect)(()=>{let e=new EventSource("/api/usage/stream");return e.onmessage=e=>{try{let t=JSON.parse(e.data);x(e=>e?{...e,activeRequests:t.activeRequests,recentRequests:t.recentRequests,errorProvider:t.errorProvider,pending:t.pending}:e),J.current&&y(!1)}catch(e){console.error("[SSE CLIENT] parse error:",e)}},e.onerror=()=>y(!1),()=>e.close()},[]);let W=(0,l.useCallback)((e,t)=>{let s=new URLSearchParams(d.toString());s.get("sortBy")===t?s.set("sortOrder","asc"===s.get("sortOrder")?"desc":"asc"):(s.set("sortBy",t),s.set("sortOrder","asc")),i.replace(`?${s.toString()}`,{scroll:!1})},[d,i]),V=(0,l.useMemo)(()=>{if(!m)return null;switch(T){case"model":{let e=m.pending?.byModel||{};return{columns:q,groupedData:S(m.byModel,e,"rawModel",c,u),storageKey:"usage-stats:expanded-models",emptyMessage:"No usage recorded yet.",renderSummaryCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:h(e.summary.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:g(e.summary.lastUsed)})]}),renderDetailCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:`px-6 py-3 font-medium transition-colors ${e.pending>0?"text-primary":""}`,children:e.rawModel}),(0,r.jsx)("td",{className:"px-6 py-3",children:(0,r.jsx)(o.default,{variant:e.pending>0?"primary":"neutral",size:"sm",children:e.provider})}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:h(e.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:g(e.lastUsed)})]})}}case"account":{let e={};return m?.pending?.byAccount&&Object.entries(m.byAccount||{}).forEach(([t,s])=>{let r=m.pending.byAccount[s.connectionId];if(r){let l=s.provider?`${s.rawModel} (${s.provider})`:s.rawModel;e[t]=r[l]||0}}),{columns:M,groupedData:S(m.byAccount,e,"accountName",c,u),storageKey:"usage-stats:expanded-accounts",emptyMessage:"No account-specific usage recorded yet.",renderSummaryCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:h(e.summary.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:g(e.summary.lastUsed)})]}),renderDetailCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:`px-6 py-3 font-medium transition-colors ${e.pending>0?"text-primary":""}`,children:e.accountName||`Account ${e.connectionId?.slice(0,8)}...`}),(0,r.jsx)("td",{className:`px-6 py-3 font-medium transition-colors ${e.pending>0?"text-primary":""}`,children:e.rawModel}),(0,r.jsx)("td",{className:"px-6 py-3",children:(0,r.jsx)(o.default,{variant:e.pending>0?"primary":"neutral",size:"sm",children:e.provider})}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:h(e.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:g(e.lastUsed)})]})}}case"apiKey":return{columns:R,groupedData:S(m.byApiKey,{},"keyName",c,u),storageKey:"usage-stats:expanded-apikeys",emptyMessage:"No API key usage recorded yet.",renderSummaryCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:h(e.summary.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:g(e.summary.lastUsed)})]}),renderDetailCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 font-medium",children:e.keyName}),(0,r.jsx)("td",{className:"px-6 py-3",children:e.rawModel}),(0,r.jsx)("td",{className:"px-6 py-3",children:(0,r.jsx)(o.default,{variant:"neutral",size:"sm",children:e.provider})}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:h(e.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:g(e.lastUsed)})]})};default:return{columns:O,groupedData:S(m.byEndpoint,{},"endpoint",c,u),storageKey:"usage-stats:expanded-endpoints",emptyMessage:"No endpoint usage recorded yet.",renderSummaryCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:h(e.summary.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:g(e.summary.lastUsed)})]}),renderDetailCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-6 py-3 font-medium font-mono text-sm",children:e.endpoint}),(0,r.jsx)("td",{className:"px-6 py-3",children:e.rawModel}),(0,r.jsx)("td",{className:"px-6 py-3",children:(0,r.jsx)(o.default,{variant:"neutral",size:"sm",children:e.provider})}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:h(e.requests)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:g(e.lastUsed)})]})}}},[m,T,c,u]);if(!m&&!f)return(0,r.jsx)("div",{className:"text-text-muted",children:"Failed to load usage statistics."});let H=(0,r.jsx)("div",{className:"flex items-center justify-center py-12 text-text-muted",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[32px] animate-spin",children:"progress_activity"})});return(0,r.jsxs)("div",{className:"flex min-w-0 flex-col gap-6",children:[!s&&(0,r.jsxs)("div",{className:"flex w-full items-center gap-2 sm:w-auto sm:self-end",children:[(0,r.jsx)("div",{className:"grid flex-1 grid-cols-6 items-center gap-1 rounded-lg border border-border bg-bg-alt p-1 sm:flex sm:flex-none",children:U.map(e=>(0,r.jsx)("button",{onClick:()=>Q(e.value),disabled:j,className:`rounded-md px-3 py-1 text-sm font-medium transition-colors ${G===e.value?"bg-primary text-white shadow-sm":"text-text-muted hover:bg-surface-2 hover:text-text"}`,children:e.label},e.value))}),j&&(0,r.jsx)("span",{className:"material-symbols-outlined text-[16px] text-text-muted animate-spin",children:"progress_activity"})]}),f?H:(0,r.jsx)(p,{stats:m}),f?H:(0,r.jsxs)("div",{className:"grid min-w-0 grid-cols-1 items-stretch gap-2 lg:grid-cols-[minmax(0,2fr)_minmax(280px,1fr)]",children:[(0,r.jsx)(v,{providers:A,activeRequests:m.activeRequests||[],lastProvider:m.recentRequests?.[0]?.provider||"",errorProvider:m.errorProvider||""}),(0,r.jsx)(C,{requests:m.recentRequests||[]})]}),f?H:(0,r.jsx)(w,{period:G}),(0,r.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,r.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,r.jsx)("select",{value:T,onChange:e=>_(e.target.value),className:"w-full rounded-lg border border-border bg-surface px-3 py-1.5 text-sm font-medium text-text-main focus:outline-none focus:ring-2 focus:ring-primary/50 sm:w-auto",style:{colorScheme:"auto"},children:P.map(e=>(0,r.jsx)("option",{value:e.value,children:e.label},e.value))}),(0,r.jsxs)("div",{className:"grid grid-cols-2 items-center gap-1 rounded-lg border border-border bg-bg-alt p-1 sm:flex",children:[(0,r.jsx)("button",{onClick:()=>F("costs"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"costs"===D?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-surface-2"}`,children:"Costs"}),(0,r.jsx)("button",{onClick:()=>F("tokens"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"tokens"===D?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-surface-2"}`,children:"Tokens"})]})]}),f?H:V&&(0,r.jsx)(b,{title:"",columns:V.columns,groupedData:V.groupedData,tableType:T,sortBy:c,sortOrder:u,onToggleSort:W,viewMode:D,storageKey:V.storageKey,renderSummaryCells:V.renderSummaryCells,renderDetailCells:V.renderDetailCells,emptyMessage:V.emptyMessage})]})]})}},17828:(e,t,s)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"workAsyncStorageInstance",{enumerable:!0,get:function(){return r}});let r=(0,s(64054).createAsyncLocalStorage)()},21957:(e,t,s)=>{function r({moduleIds:e}){return null}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"PreloadChunks",{enumerable:!0,get:function(){return r}}),s(95155),s(47650),s(5214),s(2451),s(53887)},37206:(e,t,s)=>{s.d(t,{default:()=>l.a});var r=s(75707),l=s.n(r)},41112:(e,t,s)=>{function r({reason:e,children:t}){return t}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"BailoutToCSR",{enumerable:!0,get:function(){return r}}),s(1980)},43185:(e,t,s)=>{function r(){if("u"<typeof localStorage)return!0;let e=localStorage.getItem("compactUnits");return null===e||"0"!==e}function l(e,t="en",s=!1){let a=e||0;return s||r()?String(t).startsWith("zh")?a>=1e8?`${(a/1e8).toFixed(1)}亿`:a>=1e4?`${(a/1e4).toFixed(1)}万`:a.toLocaleString():a>=1e9?`${(a/1e9).toFixed(1)}B`:a>=1e6?`${(a/1e6).toFixed(1)}M`:a>=1e3?`${(a/1e3).toFixed(1)}K`:a.toLocaleString():a.toLocaleString()}s.d(t,{k:()=>r,y:()=>l})},64054:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0});var s={bindSnapshot:function(){return i},createAsyncLocalStorage:function(){return o},createSnapshot:function(){return d}};for(var r in s)Object.defineProperty(t,r,{enumerable:!0,get:s[r]});let l=Object.defineProperty(Error("Invariant: AsyncLocalStorage accessed in runtime where it is not available"),"__NEXT_ERROR_CODE",{value:"E504",enumerable:!1,configurable:!0});class a{disable(){throw l}getStore(){}run(){throw l}exit(){throw l}enterWith(){throw l}static bind(e){return e}}let n="u">typeof globalThis&&globalThis.AsyncLocalStorage;function o(){return n?new n:new a}function i(e){return n?n.bind(e):a.bind(e)}function d(){return n?n.snapshot():function(e,...t){return e(...t)}}},68635:(e,t,s)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return i}});let r=s(95155),l=s(12115),a=s(41112);function n(e){return{default:e&&"default"in e?e.default:e}}s(21957);let o={loader:()=>Promise.resolve(n(()=>null)),loading:null,ssr:!0},i=function(e){let t={...o,...e},s=(0,l.lazy)(()=>t.loader().then(n)),i=t.loading;function d(e){let n=i?(0,r.jsx)(i,{isLoading:!0,pastDelay:!0,error:null}):null,o=!t.ssr||!!t.loading,d=o?l.Suspense:l.Fragment,c=t.ssr?(0,r.jsxs)(r.Fragment,{children:[null,(0,r.jsx)(s,{...e})]}):(0,r.jsx)(a.BailoutToCSR,{reason:"next/dynamic",children:(0,r.jsx)(s,{...e})});return(0,r.jsx)(d,{...o?{fallback:n}:{},children:c})}return d.displayName="LoadableComponent",d}},75707:(e,t,s)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return l}});let r=s(73623)._(s(68635));function l(e,t){let s={};"function"==typeof e&&(s.loader=e);let l={...s,...t};return(0,r.default)({...l,modules:l.loadableGenerated?.modules})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3696],{1325:(e,t,s)=>{"use strict";s.d(t,{default:()=>o});var a=s(95155),l=s(12115),n=s(35497),r=s(73006);function d({label:e,value:t,tone:s="default"}){return(0,a.jsxs)("div",{className:"flex items-start justify-between gap-4 py-2 border-b border-border/50 last:border-0",children:[(0,a.jsx)("span",{className:"text-xs sm:text-sm text-text-muted shrink-0",children:e}),(0,a.jsx)("span",{className:`text-xs sm:text-sm font-medium text-right break-all ${"danger"===s?"text-red-600 dark:text-red-400":"warn"===s?"text-amber-600 dark:text-amber-400":"ok"===s?"text-green-600 dark:text-green-400":"text-text-main"}`,children:t})]})}function i({settings:e,patch:t}){let[s,o]=(0,l.useState)(null);(0,l.useEffect)(()=>{let e=!1;return fetch("/api/security/status").then(e=>e.ok?e.json():null).then(t=>{e||o(t)}).catch(()=>{e||o(null)}),()=>{e=!0}},[]);let c=!0===e.dashboardLocalOnly,x=s?.listenHost||null,m=["127.0.0.1","localhost","::1"].includes(String(x||"").toLowerCase()),h=(s?.lanAddresses||[]).map(e=>`http://${e.address}${s?.port?`:${s.port}`:""}`),u=!!s&&!s.hasPassword&&!s.bootstrapPassword&&!s.ssoConfigured,p=!!s&&!1===s.requireLogin,f=c||u&&!p;return(0,a.jsxs)(n.Zp,{children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,a.jsx)("div",{className:"size-10 rounded-lg flex items-center justify-center bg-emerald-500/10 text-emerald-500 shrink-0",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"shield"})}),(0,a.jsx)("h3",{className:"text-base sm:text-lg font-semibold",children:(0,r.Tl)("Security")})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:(0,r.Tl)("Dashboard: local access only")}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:(0,r.Tl)("Refuse every non-local request to the dashboard and its management APIs. The LLM API (/v1) is unaffected — it uses its own API keys. Takes effect immediately; you will lose remote access to this dashboard until you turn it off from the machine itself.")})]}),(0,a.jsx)(n.lM,{checked:c,onChange:()=>t({dashboardLocalOnly:!c},"Error toggling dashboard local-only mode:")})]}),s&&(0,a.jsxs)("div",{className:"pt-2 border-t border-border/50",children:[(0,a.jsx)("p",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide pt-2 pb-1",children:(0,r.Tl)("Exposure")}),(0,a.jsx)(d,{label:(0,r.Tl)("Listener"),value:x||(0,r.Tl)("Unknown"),tone:m?"ok":"default"}),!m&&h.length>0&&(0,a.jsx)(d,{label:(0,r.Tl)("Reachable on the LAN at"),value:h.join(" ")}),(0,a.jsx)(d,{label:(0,r.Tl)("Dashboard password"),value:s.hasPassword?(0,r.Tl)("Password is set"):s.bootstrapPassword?(0,r.Tl)("Set by INITIAL_PASSWORD"):s.ssoConfigured?(0,r.Tl)("Sign-in is delegated to SSO"):(0,r.Tl)("No password set"),tone:s.hasPassword||s.bootstrapPassword||s.ssoConfigured?"ok":"danger"}),(0,a.jsx)(d,{label:(0,r.Tl)("Log-in check"),value:s.requireLogin?(0,r.Tl)("Sign-in is required"):(0,r.Tl)("Sign-in is off"),tone:s.requireLogin?"ok":"danger"}),(0,a.jsx)(d,{label:(0,r.Tl)("Dashboard access"),value:f?(0,r.Tl)("This machine only"):p?(0,r.Tl)("Anyone who can reach the port"):(0,r.Tl)("Anyone who can reach the port and knows the password"),tone:f?"ok":"warn"}),(0,a.jsx)(d,{label:(0,r.Tl)("Credential storage"),value:!0===s.credentialsEncrypted?(0,r.Tl)("Encrypted in the local database (AES-256-GCM)"):!1===s.credentialsEncrypted?(0,r.Tl)("Plain text in the local database — encryption failed, check the data directory"):(0,r.Tl)("Unknown"),tone:!0===s.credentialsEncrypted?"ok":"warn"}),!0===s.credentialsEncrypted&&(0,a.jsx)("p",{className:"text-xs text-text-muted pt-2",children:(0,r.Tl)("The key lives outside the database, so a copied data.sqlite alone cannot be read. Back up the key file with the database, or set CREDENTIAL_SECRET.")}),u&&!p&&(0,a.jsx)("p",{className:"text-xs text-red-600 dark:text-red-400 pt-2",children:(0,r.Tl)("No password is set yet, so the dashboard opens on this machine only. Set a password on the Settings page to reach it from other devices. The gateway API (/v1) is unaffected.")}),p&&(0,a.jsx)("p",{className:"text-xs text-red-600 dark:text-red-400 pt-2",children:(0,r.Tl)("Log-in check is off: anyone who can reach this port can manage every provider and credential. Turn it on again on the Settings page.")})," "]})]})]})}function o(){let[e,t]=(0,l.useState)({}),[s,d]=(0,l.useState)(()=>"1"===window.localStorage.getItem("quotaHideNoQuota")),[o,c]=(0,l.useState)(()=>"1"===window.localStorage.getItem("quotaNestedCycle"));(0,l.useEffect)(()=>{window.localStorage.setItem("quotaHideNoQuota",s?"1":"0")},[s]),(0,l.useEffect)(()=>{window.localStorage.setItem("quotaNestedCycle",o?"1":"0")},[o]),(0,l.useEffect)(()=>{fetch("/api/settings").then(e=>e.json()).then(e=>t(e||{})).catch(e=>console.error("Failed to fetch settings:",e))},[]);let x=async(e,s)=>{try{let s=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),a=await s.json();s.ok&&t(e=>({...e,...a}))}catch(e){console.log(s,e)}};return(0,a.jsx)("div",{className:"max-w-2xl mx-auto px-4 sm:px-0",children:(0,a.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,a.jsxs)(n.Zp,{children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,a.jsx)("div",{className:"size-10 rounded-lg flex items-center justify-center bg-cyan-500/10 text-cyan-500 shrink-0",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"device_hub"})}),(0,a.jsx)("h3",{className:"text-base sm:text-lg font-semibold",children:(0,r.Tl)("Providers")})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4 pb-4 border-b border-border/50",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:(0,r.Tl)("Hide no-quota provider cards")}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:(0,r.Tl)("Quota page view: hide cards that have no quota to display")})]}),(0,a.jsx)(n.lM,{checked:s,onChange:()=>d(e=>!e)})]}),(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4 pb-4 border-b border-border/50",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:(0,r.Tl)("Nested cycle quota bars")}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:(0,r.Tl)("Draw contained windows (rolling ⊂ weekly ⊂ monthly) as one nested track instead of flat rows")})]}),(0,a.jsx)(n.lM,{checked:o,onChange:()=>c(e=>!e)})]}),(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:(0,r.Tl)("OAuth import / export")}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:(0,r.Tl)("Show Import / Export buttons on OAuth provider pages (encrypted transfer, experimental)")})]}),(0,a.jsx)(n.lM,{checked:!0===e.codeBuddyOAuthImport,onChange:()=>x({codeBuddyOAuthImport:!0!==e.codeBuddyOAuthImport},"Error toggling codebuddy OAuth import:")})]}),(0,a.jsx)("p",{className:"text-xs text-text-muted italic pt-2 border-t border-border/50",children:(0,r.Tl)("Import / Export moved behind the check-in button — turn off auto check-in to show them again")})]})]}),(0,a.jsxs)(n.Zp,{children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,a.jsx)("div",{className:"size-10 rounded-lg flex items-center justify-center bg-amber-500/10 text-amber-500 shrink-0",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"science"})}),(0,a.jsx)("h3",{className:"text-base sm:text-lg font-semibold",children:(0,r.Tl)("Experimental")})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:(0,r.Tl)("Qoder auto daily credit claim")}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:(0,r.Tl)("Automatically claim daily campaign credits for Qoder and Qoder CN accounts")})]}),(0,a.jsx)(n.lM,{checked:!0===e.qoderCheckin,onChange:()=>x({qoderCheckin:!0!==e.qoderCheckin},"Error toggling Qoder auto check-in:")})]}),(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4 pt-4 border-t border-border/50",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:(0,r.Tl)("CodeBuddy daily active session")}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:(0,r.Tl)("Send one free-tier chat request per account daily so the activity credits are granted")})]}),(0,a.jsx)(n.lM,{checked:!0===e.codeBuddyIntlSession,onChange:()=>x({codeBuddyIntlSession:!0!==e.codeBuddyIntlSession},"Error toggling codebuddy intl daily session:")})]}),(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4 pt-4 border-t border-border/50",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:(0,r.Tl)("CodeBuddy CN auto daily check-in")}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:(0,r.Tl)("Automatically check in accounts daily (retries all day until confirmed)")})]}),(0,a.jsx)(n.lM,{checked:!0===e.codeBuddyCheckin,onChange:()=>x({codeBuddyCheckin:!0!==e.codeBuddyCheckin},"Error toggling codebuddy auto check-in:")})]})]})]}),(0,a.jsx)(i,{settings:e,patch:x})]})})}},51580:(e,t,s)=>{Promise.resolve().then(s.bind(s,1325))}},e=>{e.O(0,[3170,305,1321,5497,8441,3794,7358],()=>e(e.s=51580)),_N_E=e.O()}]);
|
package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/profile/page-7c9d46f8c09d480e.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3471],{13966:(e,t,s)=>{Promise.resolve().then(s.bind(s,64561))},43185:(e,t,s)=>{"use strict";function a(){if("u"<typeof localStorage)return!0;let e=localStorage.getItem("compactUnits");return null===e||"0"!==e}function r(e,t="en",s=!1){let l=e||0;return s||a()?String(t).startsWith("zh")?l>=1e8?`${(l/1e8).toFixed(1)}亿`:l>=1e4?`${(l/1e4).toFixed(1)}万`:l.toLocaleString():l>=1e9?`${(l/1e9).toFixed(1)}B`:l>=1e6?`${(l/1e6).toFixed(1)}M`:l>=1e3?`${(l/1e3).toFixed(1)}K`:l.toLocaleString():l.toLocaleString()}s.d(t,{k:()=>a,y:()=>r})},64561:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>y});var a=s(95155),r=s(12115),l=s(35497),i=s(81127),n=s(32486),o=s(21931),d=s(1620),c=s(31474),m=s(90620),x=s(93308),p=s(38202),u=s(45496),h=s(43185),g=s(65635),b=s(73006);function f(){if("u"<typeof document)return"en";let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${x.CL}=`)),t=e?decodeURIComponent(e.split("=")[1]):"en";return(0,x.QC)(t)}function y(){let{theme:e,setTheme:t,isDark:s}=(0,d.D)(),[x,y]=(0,r.useState)(()=>f()),[j,w]=(0,r.useState)(!0),[N,v]=(0,r.useState)(!0),[S,C]=(0,r.useState)(!1),[k,L]=(0,r.useState)(!1),[T,A]=(0,r.useState)(!1),[I,P]=(0,r.useState)(!1),[O,M]=(0,r.useState)({open:!1,value:"",confirm:"",error:"",loading:!1}),[E,R]=(0,r.useState)({loading:!1,message:"",type:""}),[$,D]=(0,r.useState)(null),[U,F]=(0,r.useState)({loading:!1,message:"",type:""}),[q,J]=(0,r.useState)(!1),[_,z]=(0,r.useState)({fallbackStrategy:"fill-first"}),[H,B]=(0,r.useState)(!0),[X,K]=(0,r.useState)({current:"",new:"",confirm:""}),[W,V]=(0,r.useState)({type:"",message:""}),[Z,Q]=(0,r.useState)(!1),[Y,G]=(0,r.useState)(!1),[ee,et]=(0,r.useState)({type:"",message:""}),[es,ea]=(0,r.useState)({open:!1,mode:"",password:""}),er=(0,r.useRef)(null),[el,ei]=(0,r.useState)({authMode:"password",oidcIssuerUrl:"",oidcClientId:"",oidcScopes:"openid profile email",oidcLoginLabel:"Sign in with OIDC"}),[en,eo]=(0,r.useState)(""),[ed,ec]=(0,r.useState)({type:"",message:""}),[em,ex]=(0,r.useState)(!1),[ep,eu]=(0,r.useState)(!1),[eh,eg]=(0,r.useState)({type:"",message:""}),[eb,ef]=(0,r.useState)(!1),ey=window.location.origin,ej=ey?`${ey}/api/auth/oidc/callback`:"/api/auth/oidc/callback",ew=ey?`${ey}/api/auth/saml/acs`:"/api/auth/saml/acs",eN=ey?`${ey}/api/auth/saml/metadata`:"/api/auth/saml/metadata",[ev,eS]=(0,r.useState)("saml"),[eC,ek]=(0,r.useState)({samlEntryPoint:"",samlIssuer:"urn:10router:sp",samlCert:"",samlLoginLabel:"Sign in with SAML SSO",samlAttributeEmail:"email",samlAttributeName:"name"}),[eL,eT]=(0,r.useState)({type:"",message:""}),[eA,eI]=(0,r.useState)(!1),[eP,eO]=(0,r.useState)(!1),[eM,eE]=(0,r.useState)({type:"",message:""}),[eR,e$]=(0,r.useState)(!1),eD=(0,r.useRef)(null),eU=(0,r.useRef)(null),eF=(0,r.useRef)(null),eq=(0,r.useRef)(null),eJ=(0,r.useRef)(null),[e_,ez]=(0,r.useState)({type:"",message:""}),[eH,eB]=(0,r.useState)(!1),[eX,eK]=(0,r.useState)({outboundProxyEnabled:!1,outboundProxyUrl:"",outboundNoProxy:""}),[eW,eV]=(0,r.useState)({type:"",message:""}),[eZ,eQ]=(0,r.useState)(!1),[eY,eG]=(0,r.useState)(!1),[e0,e1]=(0,r.useState)(!1);(0,r.useEffect)(()=>{e1(!["localhost","127.0.0.1","::1"].includes(window.location.hostname))},[]),(0,r.useEffect)(()=>{y(f()),w((0,u.i)()),v((0,h.k)())},[S]);let e5=async()=>{let e=!1===_.showCommunityProviders;try{let t=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({showCommunityProviders:e})}),s=await t.json();t.ok&&z(e=>({...e,...s}))}catch(e){console.log("Error toggling show-community-providers:",e)}};(0,r.useEffect)(()=>{fetch("/api/settings").then(e=>e.json()).then(e=>{z(e),ei({authMode:e?.authMode||"password",oidcIssuerUrl:e?.oidcIssuerUrl||"",oidcClientId:e?.oidcClientId||"",oidcScopes:e?.oidcScopes||"openid profile email",oidcLoginLabel:e?.oidcLoginLabel||"Sign in with OIDC"}),eo(""),eS(e?.ssoType||"saml"),ek({samlEntryPoint:e?.samlEntryPoint||"",samlIssuer:e?.samlIssuer||"urn:10router:sp",samlCert:e?.samlCert||"",samlLoginLabel:e?.samlLoginLabel||"Sign in with SAML SSO",samlAttributeEmail:e?.samlAttributeEmail||"email",samlAttributeName:e?.samlAttributeName||"name"}),(e?.authMode==="sso"||e?.authMode==="saml"||e?.authMode==="oidc"||e?.authMode==="both")&&ef(!0),eK({outboundProxyEnabled:e?.outboundProxyEnabled===!0,outboundProxyUrl:e?.outboundProxyUrl||"",outboundNoProxy:e?.outboundNoProxy||""}),B(!1)}).catch(e=>{console.error("Failed to fetch settings:",e),B(!1)})},[]);let e2=async e=>{if(e.preventDefault(),!0===_.outboundProxyEnabled){eQ(!0),eV({type:"",message:""});try{let e=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({outboundProxyUrl:eX.outboundProxyUrl,outboundNoProxy:eX.outboundNoProxy})}),t=await e.json();e.ok?(z(e=>({...e,...t})),eV({type:"success",message:"Proxy settings applied"})):eV({type:"error",message:t.error||"Failed to update proxy settings"})}catch(e){eV({type:"error",message:"An error occurred"})}finally{eQ(!1)}}},e3=async()=>{if(!0!==_.outboundProxyEnabled)return;let e=(eX.outboundProxyUrl||"").trim();if(!e)return void eV({type:"error",message:"Please enter a Proxy URL to test"});eG(!0),eV({type:"",message:""});try{let t=await fetch("/api/settings/proxy-test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({proxyUrl:e})}),s=await t.json();t.ok&&s?.ok?eV({type:"success",message:`Proxy test OK (${s.status}) in ${s.elapsedMs}ms`}):eV({type:"error",message:s?.error||"Proxy test failed"})}catch(e){eV({type:"error",message:"An error occurred"})}finally{eG(!1)}},e4=async e=>{eQ(!0),eV({type:"",message:""});try{let t=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({outboundProxyEnabled:e})}),s=await t.json();t.ok?(z(e=>({...e,...s})),eK(e=>({...e,outboundProxyEnabled:s?.outboundProxyEnabled===!0})),eV({type:"success",message:e?"Proxy enabled":"Proxy disabled"})):eV({type:"error",message:s.error||"Failed to update proxy settings"})}catch(e){eV({type:"error",message:"An error occurred"})}finally{eQ(!1)}},e6=async e=>{if(e.preventDefault(),!X.new.trim())return void V({type:"error",message:(0,b.Tl)("Password cannot be empty")});if(X.new!==X.confirm)return void V({type:"error",message:"Passwords do not match"});Q(!0),V({type:"",message:""});try{let e=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPassword:X.current,newPassword:X.new})}),t=await e.json();e.ok?(V({type:"success",message:"Password updated successfully"}),K({current:"",new:"",confirm:""})):V({type:"error",message:t.error||"Failed to update password"})}catch(e){V({type:"error",message:"An error occurred"})}finally{Q(!1)}},e9=async e=>{try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({fallbackStrategy:e})})).ok&&z(t=>({...t,fallbackStrategy:e}))}catch(e){console.error("Failed to update settings:",e)}},e8=async e=>{try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({comboStrategy:e})})).ok&&z(t=>({...t,comboStrategy:e}))}catch(e){console.error("Failed to update combo strategy:",e)}},e7=async e=>{let t=parseInt(e);if(!isNaN(t)&&!(t<1))try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({stickyRoundRobinLimit:t})})).ok&&z(e=>({...e,stickyRoundRobinLimit:t}))}catch(e){console.error("Failed to update sticky limit:",e)}},te=async e=>{let t=parseInt(e);if(!isNaN(t)&&!(t<1))try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({comboStickyRoundRobinLimit:t})})).ok&&z(e=>({...e,comboStickyRoundRobinLimit:t}))}catch(e){console.error("Failed to update combo sticky limit:",e)}},tt=async e=>{try{let t=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({requireLogin:e})});if(!t.ok){let e=await t.json().catch(()=>({}));e?.code==="PASSWORD_REQUIRED"&&M({open:!0,value:"",confirm:"",error:"",loading:!1});return}t.ok&&(z(t=>({...t,requireLogin:e,...e?{hideLoginOffBanner:!1}:{}})),window.dispatchEvent(new Event(n.f)))}catch(e){console.error("Failed to update require login:",e)}},ts=async()=>{let{value:e,confirm:t}=O;if(!e.trim())return void M(e=>({...e,error:(0,b.Tl)("Password cannot be empty")}));if(e!==t)return void M(e=>({...e,error:(0,b.Tl)("Passwords do not match")}));M(e=>({...e,loading:!0,error:""}));try{let t=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({newPassword:e,requireLogin:!0})}),s=await t.json().catch(()=>({}));if(!t.ok)return void M(e=>({...e,loading:!1,error:s?.error||(0,b.Tl)("Failed to update password")}));z(e=>({...e,requireLogin:!0,hasPassword:!0,hideLoginOffBanner:!1})),M({open:!1,value:"",confirm:"",error:"",loading:!1}),window.dispatchEvent(new Event(n.f))}catch{M(e=>({...e,loading:!1,error:(0,b.Tl)("An error occurred")}))}},ta=async e=>{try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({autoUpdateCheck:e})})).ok&&(z(t=>({...t,autoUpdateCheck:e})),R({loading:!1,message:"",type:""}))}catch(e){console.error("Failed to update automatic update check:",e)}},tr=async()=>{R({loading:!0,message:"",type:""}),D(null),F({loading:!1,message:"",type:""});try{let e=await fetch("/api/version?check=1",{cache:"no-store"}),t=e.ok?await e.json():null;t?.latestVersion?t.hasUpdate?(R({loading:!1,type:"info",message:(0,b.Tl)("New version available: v${latest} (installed v${current})").replace("${latest}",t.latestVersion).replace("${current}",t.currentVersion)}),D({latestVersion:t.latestVersion,installChannel:t.installChannel||""})):R({loading:!1,type:"ok",message:(0,b.Tl)("You are on the latest version (v${current}).").replace("${current}",t.currentVersion)}):R({loading:!1,type:"error",message:(0,b.Tl)("Could not reach the update server. Try again later.")})}catch{R({loading:!1,type:"error",message:(0,b.Tl)("Could not reach the update server. Try again later.")})}},tl=async()=>{F({loading:!0,message:"",type:""});let e=(0,b.Tl)("Could not notify the desktop shell. Use the Releases page instead.");try{let t=await fetch("/api/version/shell-update",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({version:$?.latestVersion||""})});F(t.ok?{loading:!1,type:"ok",message:(0,b.Tl)("Desktop shell notified — confirm the download in its update window (system tray).")}:{loading:!1,type:"error",message:e})}catch{F({loading:!1,type:"error",message:e})}},ti=async e=>{try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({hideLoginOffBanner:e})})).ok&&(z(t=>({...t,hideLoginOffBanner:e})),window.dispatchEvent(new Event(n.f)))}catch(e){console.error("Failed to update login-off banner:",e)}},tn=(e,t)=>{ei(s=>({...s,[e]:t}))},to=async(e=el.authMode||"password")=>{let t=el.oidcIssuerUrl.trim(),s=el.oidcClientId.trim(),a=el.oidcScopes.trim(),r=el.oidcLoginLabel.trim(),l=en.trim();if("password"!==e&&(!t||!s||!l)&&!_.oidcConfigured)return void ec({type:"error",message:"Issuer URL, client ID, and client secret are required to enable OIDC."});ex(!0),ec({type:"",message:""}),eg({type:"",message:""});try{let i={authMode:e,ssoType:"oidc",oidcIssuerUrl:t,oidcClientId:s,oidcScopes:a||"openid profile email",oidcLoginLabel:r||"Sign in with OIDC"};l&&(i.oidcClientSecret=l);let n=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)}),o=await n.json();n.ok?(z(e=>({...e,...o})),ei({authMode:o?.authMode||e,oidcIssuerUrl:o?.oidcIssuerUrl||t,oidcClientId:o?.oidcClientId||s,oidcScopes:o?.oidcScopes||a||"openid profile email",oidcLoginLabel:o?.oidcLoginLabel||r||"Sign in with OIDC"}),eo(""),ec({type:"success",message:"oidc"===e?"OIDC login enabled":"both"===e?"Password and OIDC login enabled":"OIDC settings saved"})):ec({type:"error",message:o.error||"Failed to save OIDC settings"})}catch(e){ec({type:"error",message:"An error occurred"})}finally{ex(!1)}},td=async()=>{let e=el.oidcIssuerUrl.trim(),t=el.oidcClientId.trim(),s=el.oidcScopes.trim(),a=en.trim();if(!e||!t)return void eg({type:"error",message:"Issuer URL and client ID are required to test the connection."});eu(!0),ec({type:"",message:""}),eg({type:"",message:""});try{let r=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({authMode:el.authMode||_.authMode||"password",oidcIssuerUrl:e,oidcClientId:t,oidcScopes:s||"openid profile email",oidcLoginLabel:el.oidcLoginLabel.trim()||"Sign in with OIDC",...a?{oidcClientSecret:a}:{}})}),l=await r.json().catch(()=>({}));if(!r.ok)return void eg({type:"error",message:l.error||"Failed to save OIDC settings before testing"});let i=await fetch("/api/auth/oidc/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({issuerUrl:l.oidcIssuerUrl||e,clientId:l.oidcClientId||t,scopes:l.oidcScopes||s||"openid profile email"})}),n=await i.json().catch(()=>({}));if(i.ok&&n?.ok){let e=n.clientSecretTested?!0===n.clientSecretValid?`Connection OK. Discovery loaded from ${n.issuerUrl}. Client secret validated too.`:`Connection OK. Discovery loaded from ${n.issuerUrl}. Client secret was not checked.`:`Connection OK. Discovery loaded from ${n.issuerUrl}.`;eg({type:"success",message:e})}else eg({type:"error",message:n.error||"OIDC connection test failed"})}catch(e){eg({type:"error",message:"An error occurred"})}finally{eu(!1)}},tc=(e,t)=>{ek(s=>({...s,[e]:t}))},tm=async(e=el.authMode||"password")=>{eI(!0),eT({type:"",message:""}),eE({type:"",message:""});try{let t={authMode:e,ssoType:"saml",samlEntryPoint:eC.samlEntryPoint.trim(),samlIssuer:eC.samlIssuer.trim()||"urn:10router:sp",samlCert:eC.samlCert.trim(),samlLoginLabel:eC.samlLoginLabel.trim()||"Sign in with SAML SSO",samlAttributeEmail:eC.samlAttributeEmail.trim()||"email",samlAttributeName:eC.samlAttributeName.trim()||"name"},s=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),a=await s.json();s.ok?(z(e=>({...e,...a})),ek({samlEntryPoint:a?.samlEntryPoint||t.samlEntryPoint,samlIssuer:a?.samlIssuer||t.samlIssuer,samlCert:a?.samlCert||t.samlCert,samlLoginLabel:a?.samlLoginLabel||t.samlLoginLabel,samlAttributeEmail:a?.samlAttributeEmail||t.samlAttributeEmail,samlAttributeName:a?.samlAttributeName||t.samlAttributeName}),eT({type:"success",message:"sso"===e||"saml"===e?"SAML SSO login enabled":"both"===e?"Password and SAML SSO login enabled":"SAML 2.0 settings saved"})):eT({type:"error",message:a.error||"Failed to save SAML settings"})}catch{eT({type:"error",message:"An error occurred while saving SAML settings"})}finally{eI(!1)}},tx=async()=>{eO(!0),eT({type:"",message:""}),eE({type:"",message:""});try{let e=await fetch("/api/auth/saml/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({samlEntryPoint:eC.samlEntryPoint.trim(),samlIssuer:eC.samlIssuer.trim(),samlCert:eC.samlCert.trim()})}),t=await e.json();e.ok&&t.ok?eE({type:"success",message:t.message||"SAML configuration verified!"}):eE({type:"error",message:t.error||"SAML configuration test failed"})}catch{eE({type:"error",message:"An error occurred while testing SAML configuration"})}finally{eO(!1)}},tp=async e=>{try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({enableObservability:e})})).ok&&z(t=>({...t,enableObservability:e}))}catch(e){console.error("Failed to update enableObservability:",e)}},tu=async()=>{try{let e=await fetch("/api/settings");if(!e.ok)return;let t=await e.json();z(t)}catch(e){console.error("Failed to reload settings:",e)}},th=async e=>{G(!0),et({type:"",message:""});try{let t=await fetch("/api/settings/database",{headers:{"x-10r-password":e}});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error||"Failed to export database")}let s=await t.json(),a=JSON.stringify(s,null,2),r=new Blob([a],{type:"application/json"}),l=URL.createObjectURL(r),i=document.createElement("a"),n=new Date().toISOString().replace(/[.:]/g,"-");i.href=l,i.download=`10router-backup-${n}.json`,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(l);let o=Array.isArray(s?.credentialErrors)?s.credentialErrors:[];o.length>0?et({type:"error",message:(0,b.Tl)("Backup downloaded, but {count} connection(s) could not be decrypted — their credentials are stored as ciphertext and can only be restored with the original key.").replace("{count}",String(o.length))}):et({type:"success",message:"Database backup downloaded"})}catch(e){et({type:"error",message:e.message||"Failed to export database"})}finally{G(!1)}},tg=e=>/\\.(sqlite|sqlite3|db)$/i.test(e.name)||"application/x-sqlite3"===e.type||"application/vnd.sqlite3"===e.type||"application/octet-stream"===e.type,tb=e=>/\\.(json)$/i.test(e.name)||"application/json"===e.type,tf=async(e,t=null)=>{eB(!0),ez({type:"",message:""});try{let s,a=tb(e)&&!tg(e),r={};if(t&&(r["x-10r-password"]=t),a){let t;try{let s=await e.text();t=JSON.parse(s)}catch{eB(!1),ez({type:"error",message:(0,b.Tl)("Invalid JSON usage file")});return}s=JSON.stringify(Array.isArray(t)?{usageHistory:t}:t),r["Content-Type"]="application/json"}else{let t=new FormData;t.append("file",e),s=t}let l=await fetch("/api/settings/database/import-usage",{method:"POST",body:s,headers:r}),i=await l.json();if(!l.ok){if(401===l.status&&!t){eJ.current=e,ea({open:!0,mode:"usage-import",password:""});return}throw Error(i.error||"Failed to import usage")}ez({type:"success",message:`${(0,b.Tl)("Imported")} ${i.imported} ${(0,b.Tl)("usage records")} (${(0,b.Tl)("skipped")} ${i.skipped}, ${(0,b.Tl)("total")} ${i.total})`})}catch(e){ez({type:"error",message:e.message||"Failed to import usage"})}finally{eB(!1)}},ty=async e=>{let t=er.current;if(t){G(!0);try{let s=await t.text(),a=JSON.parse(s),r=await fetch("/api/settings/database",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...a,password:e})}),l=await r.json().catch(()=>({}));if(!r.ok)throw Error(l.error||"Failed to import database");await tu(),et({type:"success",message:"Database imported successfully"})}catch(e){et({type:"error",message:e.message||"Invalid backup file"})}finally{er.current=null,G(!1)}}},tj=async()=>{let{mode:e,password:t}=es;if(ea({open:!1,mode:"",password:""}),"export"===e)await th(t);else if("import"===e)await ty(t);else if("usage-import"===e){let e=eJ.current;eJ.current=null,e&&await tf(e,t)}},tw=!0===_.enableObservability,tN=async()=>{J(!0);try{await fetch("/api/version/shutdown",{method:"POST"})}catch(e){}J(!1),L(!1)},tv=async()=>{try{(await fetch("/api/auth/logout",{method:"POST"})).ok&&window.location.assign("/login")}catch(e){console.error("Failed to logout:",e)}};return(0,a.jsxs)("div",{className:"max-w-2xl mx-auto px-4 sm:px-0",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,a.jsxs)(l.Zp,{children:[(0,a.jsxs)("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-4",children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 sm:gap-4",children:[(0,a.jsx)("div",{className:"size-10 sm:size-12 rounded-lg bg-green-500/10 text-green-500 flex items-center justify-center shrink-0",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-xl sm:text-2xl",children:"computer"})}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-lg sm:text-xl font-semibold",children:"Local Mode"}),(0,a.jsx)("p",{className:"text-sm text-text-muted",children:"Running on your machine"})]})]}),(0,a.jsx)("div",{className:"inline-flex p-1 rounded-lg bg-black/5 dark:bg-white/5 w-full sm:w-auto",children:["light","dark","system"].map(s=>(0,a.jsxs)("button",{type:"button",onClick:()=>t(s),className:(0,c.cn)("flex items-center justify-center gap-1 sm:gap-1.5 px-2 sm:px-3 py-1.5 rounded-md font-medium transition-all flex-1 sm:flex-initial",e===s?"bg-white dark:bg-white/10 text-text-main shadow-sm":"text-text-muted hover:text-text-main"),children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"light"===s?"light_mode":"dark"===s?"dark_mode":"contrast"}),(0,a.jsx)("span",{className:"capitalize text-xs sm:text-sm",children:s})]},s))})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-3 pt-4 border-t border-border",children:[(0,a.jsx)("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between p-3 rounded-lg bg-bg border border-border gap-2",children:(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:"Database Location"}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted font-mono break-all",children:"~/.10router/db/data.sqlite"})]})}),(0,a.jsxs)("div",{className:"flex flex-col sm:flex-row gap-2",children:[(0,a.jsx)(l.$n,{variant:"secondary",icon:"download",onClick:()=>ea({open:!0,mode:"export",password:""}),loading:Y,className:"w-full sm:w-auto",children:"Download Backup"}),(0,a.jsx)(l.$n,{variant:"outline",icon:"upload",onClick:()=>eF.current?.click(),disabled:Y,className:"w-full sm:w-auto",children:"Import Backup"}),(0,a.jsx)(l.$n,{variant:"outline",icon:"history",onClick:()=>eq.current?.click(),loading:eH,className:"w-full sm:w-auto",children:(0,b.Tl)("Import Usage")}),(0,a.jsx)("input",{ref:eF,type:"file",accept:"application/json,.json",className:"hidden",onChange:e=>{let t=e.target.files?.[0];eF.current&&(eF.current.value=""),t&&(er.current=t,et({type:"",message:""}),ea({open:!0,mode:"import",password:""}))}}),(0,a.jsx)("input",{ref:eq,type:"file",accept:".sqlite,.db,.sqlite3,.json,application/json",className:"hidden",onChange:e=>{let t=e.target.files?.[0];if(eq.current&&(eq.current.value=""),t){if(!tg(t)&&!tb(t))return void ez({type:"error",message:(0,b.Tl)("Only SQLite (.sqlite/.db) or JSON (.json) usage files can be imported")});tf(t)}}})]}),(0,a.jsx)("p",{className:"text-xs text-amber-600 dark:text-amber-400",children:(0,b.Tl)("The backup file contains provider credentials in readable form — store it like a password.")}),ee.message&&(0,a.jsx)("p",{className:`text-sm ${"error"===ee.type?"text-red-500":"text-green-600 dark:text-green-400"}`,children:ee.message}),e_.message&&(0,a.jsx)("p",{className:`text-sm ${"error"===e_.type?"text-red-500":"text-green-600 dark:text-green-400"}`,children:e_.message})]})]}),(0,a.jsxs)(l.Zp,{children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,a.jsx)("div",{className:"size-10 rounded-lg bg-blue-500/10 text-blue-500 flex items-center justify-center shrink-0",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"language"})}),(0,a.jsx)("h3",{className:"text-base sm:text-lg font-semibold",children:(0,b.Tl)("Language")})]}),(0,a.jsxs)("button",{onClick:()=>C(!0),className:"flex items-center justify-between w-full p-3 rounded-lg bg-bg border border-border hover:border-primary/50 transition-colors","data-i18n-skip":"true",children:[(0,a.jsx)("span",{className:"text-sm text-text-muted",children:(0,b.Tl)("Display language")}),(0,a.jsx)("span",{className:"text-2xl",children:p.h[x]||"\uD83C\uDF10"})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between gap-4 mt-3 p-3 rounded-lg bg-bg border border-border",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:(0,b.Tl)("Regional currency")}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Show costs in local currency (\xa5/NT$/₩/₫); off → $"})]}),(0,a.jsx)(l.lM,{checked:j,onChange:()=>{let e=!(0,u.i)();"u">typeof localStorage&&localStorage.setItem("useRegionalCurrency",e?"1":"0"),w(e)}})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between gap-4 mt-3 p-3 rounded-lg bg-bg border border-border",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:(0,b.Tl)("Unit abbreviation")}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Large numbers as 亿/万 (zh) or M/B (en); off → full numbers"})]}),(0,a.jsx)(l.lM,{checked:N,onChange:()=>{let e=!(0,h.k)();"u">typeof localStorage&&localStorage.setItem("compactUnits",e?"1":"0"),v(e)}})]})]}),(0,a.jsxs)(l.Zp,{children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,a.jsx)("div",{className:"size-10 rounded-lg flex items-center justify-center bg-primary/10 text-primary shrink-0",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"shield"})}),(0,a.jsx)("h3",{className:"text-base sm:text-lg font-semibold",children:(0,b.Tl)("Security")})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:(0,b.Tl)("Require login")}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:(0,b.Tl)("When ON, dashboard requires password. When OFF, access without login.")})]}),(0,a.jsx)(l.lM,{checked:!1!==_.requireLogin,onChange:()=>{!1===_.requireLogin?tt(!0):A(!0)},disabled:H})]}),!1===_.requireLogin&&(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4 pl-3 border-l-2 border-red-500/40",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:(0,b.Tl)("Show the log-in-off warning banner")}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:(0,b.Tl)("The red banner at the top of every page while the log-in check is off. Turning log-in back on shows it again next time.")})]}),(0,a.jsx)(l.lM,{checked:!0!==_.hideLoginOffBanner,onChange:()=>{!0===_.hideLoginOffBanner?ti(!1):P(!0)},disabled:H})]}),!1!==_.requireLogin&&(0,a.jsxs)("form",{onSubmit:e6,className:"flex flex-col gap-4 pt-4 border-t border-border/50",children:[_.hasPassword&&(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"text-xs sm:text-sm font-medium",children:"Current Password"}),(0,a.jsx)(l.pd,{type:"password",placeholder:"Enter current password",value:X.current,onChange:e=>K({...X,current:e.target.value}),required:!0})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"text-xs sm:text-sm font-medium",children:"New Password"}),(0,a.jsx)(l.pd,{type:"password",placeholder:"Enter new password",value:X.new,onChange:e=>K({...X,new:e.target.value}),required:!0})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"text-xs sm:text-sm font-medium",children:"Confirm New Password"}),(0,a.jsx)(l.pd,{type:"password",placeholder:"Confirm new password",value:X.confirm,onChange:e=>K({...X,confirm:e.target.value}),required:!0})]})]}),W.message&&(0,a.jsx)("p",{className:`text-xs sm:text-sm ${"error"===W.type?"text-red-500":"text-green-500"}`,children:W.message}),(0,a.jsx)("div",{className:"pt-2",children:(0,a.jsx)(l.$n,{type:"submit",variant:"primary",loading:Z,className:"w-full sm:w-auto",children:_.hasPassword?"Update Password":"Set Password"})})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2 pt-4 border-t border-border/50",children:[(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:(0,b.Tl)("Check for updates automatically")}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:(0,b.Tl)("When OFF, 10Router no longer contacts the update server on its own or shows new-version notices — including security fixes. You can still check by hand.")})]}),(0,a.jsx)(l.lM,{checked:!1!==_.autoUpdateCheck,onChange:()=>ta(!1===_.autoUpdateCheck),disabled:H})]}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,a.jsx)(l.$n,{type:"button",variant:"secondary",size:"sm",onClick:tr,loading:E.loading,children:(0,b.Tl)("Check now")}),$&&"desktop"===$.installChannel&&(0,a.jsx)(l.$n,{type:"button",variant:"secondary",size:"sm",onClick:tl,loading:U.loading,children:(0,b.Tl)("Update via desktop shell")}),E.message&&(0,a.jsx)("p",{className:`text-xs sm:text-sm ${"error"===E.type?"text-red-500":"info"===E.type?"text-primary":"text-green-500"}`,children:E.message}),U.message&&(0,a.jsx)("p",{className:`text-xs sm:text-sm ${"error"===U.type?"text-red-500":"text-green-500"}`,children:U.message})]})]})]})]}),(0,a.jsxs)(l.Zp,{children:[(0,a.jsxs)("button",{type:"button",onClick:()=>ef(e=>!e),className:"w-full flex items-center gap-3 text-left",children:[(0,a.jsx)("div",{className:"size-10 rounded-lg flex items-center justify-center bg-indigo-500/10 text-indigo-500 shrink-0",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"lock_open"})}),(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("h3",{className:"text-base sm:text-lg font-semibold",children:(0,b.Tl)("Single Sign-On (SSO)")}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"sso"===_.authMode||"oidc"===_.authMode||"saml"===_.authMode?`${"saml"===_.ssoType?"SAML 2.0":"OIDC"} SSO active`:"both"===_.authMode?`Password + ${"saml"===_.ssoType?"SAML 2.0":"OIDC"} active`:"Optional SSO via Okta, Entra ID, Keycloak, or OIDC"})]}),(0,a.jsx)("span",{className:"material-symbols-outlined text-text-muted shrink-0",children:eb?"expand_less":"expand_more"})]}),eb&&(0,a.jsxs)("div",{className:"flex flex-col gap-4 mt-4",children:[(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:(0,b.Tl)("Configure enterprise Single Sign-On (SSO) for dashboard access using SAML 2.0 or OIDC.")}),(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"font-medium text-sm sm:text-base",children:"SSO Protocol"}),(0,a.jsxs)("div",{className:"flex p-1 rounded-lg bg-black/5 dark:bg-white/5 border border-border",children:[(0,a.jsx)("button",{type:"button",onClick:()=>eS("saml"),className:(0,c.cn)("flex-1 py-1.5 px-3 rounded-md font-medium text-xs sm:text-sm transition-all text-center","saml"===ev?"bg-white dark:bg-white/10 text-text-main shadow-sm":"text-text-muted hover:text-text-main"),children:"SAML 2.0"}),(0,a.jsx)("button",{type:"button",onClick:()=>eS("oidc"),className:(0,c.cn)("flex-1 py-1.5 px-3 rounded-md font-medium text-xs sm:text-sm transition-all text-center","oidc"===ev?"bg-white dark:bg-white/10 text-text-main shadow-sm":"text-text-muted hover:text-text-main"),children:"OIDC"})]})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"font-medium text-sm sm:text-base",children:"Auth Mode"}),(0,a.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-2",children:[{value:"password",title:"Password only",desc:"Keep legacy password login."},{value:"sso",title:`${"saml"===ev?"SAML":"OIDC"} only`,desc:"Require SSO for dashboard access."},{value:"both",title:"Both",desc:"Allow password or SSO login."}].map(e=>{let t=el.authMode,s="password"===e.value?"password"===t:"sso"===e.value?"sso"===t||"saml"===t||"oidc"===t:"both"===t;return(0,a.jsxs)("button",{type:"button",onClick:()=>tn("authMode",e.value),className:(0,c.cn)("text-left rounded-lg border p-3 transition-colors",s?"border-primary bg-primary/5":"border-border bg-bg hover:bg-black/5 dark:hover:bg-white/5"),disabled:H||em||eA,children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:e.title}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted mt-1",children:e.desc})]},e.value)})})]}),"saml"===ev?(0,a.jsxs)("div",{className:"flex flex-col gap-4 pt-2 border-t border-border/50",children:[(0,a.jsxs)("div",{className:"rounded-lg border border-border bg-bg/80 overflow-hidden",children:[(0,a.jsxs)("button",{type:"button",onClick:()=>e$(e=>!e),className:"w-full p-3 flex items-center justify-between gap-2 text-left hover:bg-surface/50 transition-colors",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-primary text-lg",children:"menu_book"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"font-semibold text-xs sm:text-sm text-text-main",children:"IdP Setup Guidelines & Provider Configuration Instructions"}),(0,a.jsx)("p",{className:"text-[11px] text-text-muted",children:"Click to view setup steps for AWS IAM Identity Center, Okta, Entra ID, Keycloak, & Authentik"})]})]}),(0,a.jsx)("span",{className:"material-symbols-outlined text-text-muted transition-transform text-lg",style:{transform:eR?"rotate(180deg)":"none"},children:"expand_more"})]}),eR&&(0,a.jsxs)("div",{className:"p-4 border-t border-border bg-surface/30 text-xs text-text-main flex flex-col gap-3",children:[(0,a.jsxs)("div",{className:"p-2.5 rounded border border-primary/20 bg-primary/5 text-primary text-xs",children:[(0,a.jsx)("p",{className:"font-semibold mb-1",children:"\uD83D\uDD11 Required Service Provider (SP) Values for your IdP Setup:"}),(0,a.jsxs)("ul",{className:"list-disc pl-4 space-y-1 font-mono text-[11px]",children:[(0,a.jsxs)("li",{children:[(0,a.jsx)("b",{children:"Assertion Consumer Service (ACS) URL:"})," ",(0,a.jsx)("code",{className:"bg-bg px-1 py-0.5 rounded break-all",children:ew})]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("b",{children:"SP Entity ID / Audience URI:"})," ",(0,a.jsx)("code",{className:"bg-bg px-1 py-0.5 rounded break-all",children:eC.samlIssuer||"urn:10router:sp"})]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("b",{children:"NameID Format:"})," ",(0,a.jsx)("code",{className:"bg-bg px-1 py-0.5 rounded",children:"EmailAddress"})," or ",(0,a.jsx)("code",{className:"bg-bg px-1 py-0.5 rounded",children:"Unspecified"})]})]})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3 pt-1",children:[(0,a.jsxs)("div",{className:"p-3 rounded border border-border bg-bg/50 flex flex-col gap-1.5",children:[(0,a.jsxs)("p",{className:"font-semibold text-text-main flex items-center gap-1.5",children:[(0,a.jsx)("span",{children:"☁️"})," AWS IAM Identity Center"]}),(0,a.jsxs)("ol",{className:"list-decimal pl-4 text-text-muted space-y-1",children:[(0,a.jsxs)("li",{children:["Applications → ",(0,a.jsx)("b",{children:"Add application"})," → Select ",(0,a.jsx)("b",{children:"Add custom SAML 2.0 application"}),"."]}),(0,a.jsxs)("li",{children:["Set ",(0,a.jsx)("b",{children:"Application ACS URL"})," to ",(0,a.jsx)("code",{className:"text-text-main font-mono",children:ew}),"."]}),(0,a.jsxs)("li",{children:["Set ",(0,a.jsx)("b",{children:"Application SAML audience"})," to ",(0,a.jsx)("code",{className:"text-text-main font-mono",children:eC.samlIssuer||"urn:10router:sp"}),"."]}),(0,a.jsxs)("li",{children:["Under ",(0,a.jsx)("i",{children:"Attribute mappings"}),", map ",(0,a.jsx)("code",{className:"text-text-main font-mono",children:"Subject"})," or ",(0,a.jsx)("code",{className:"text-text-main font-mono",children:"email"})," to ",(0,a.jsxs)("code",{className:"text-text-main font-mono",children:["$","{user:email}"]}),"."]}),(0,a.jsxs)("li",{children:["Download ",(0,a.jsx)("b",{children:"IAM Identity Center SAML metadata XML"})," file and use 1-Click Import below!"]})]})]}),(0,a.jsxs)("div",{className:"p-3 rounded border border-border bg-bg/50 flex flex-col gap-1.5",children:[(0,a.jsxs)("p",{className:"font-semibold text-text-main flex items-center gap-1.5",children:[(0,a.jsx)("span",{children:"\uD83D\uDD37"})," Microsoft Entra ID (Azure AD)"]}),(0,a.jsxs)("ol",{className:"list-decimal pl-4 text-text-muted space-y-1",children:[(0,a.jsxs)("li",{children:["Enterprise Applications → ",(0,a.jsx)("b",{children:"New application"})," → ",(0,a.jsx)("b",{children:"Create your own application"}),"."]}),(0,a.jsxs)("li",{children:["Select ",(0,a.jsx)("b",{children:"Single sign-on"})," → ",(0,a.jsx)("b",{children:"SAML"}),"."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("b",{children:"Identifier (Entity ID):"})," ",(0,a.jsx)("code",{className:"text-text-main font-mono",children:eC.samlIssuer||"urn:10router:sp"})]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("b",{children:"Reply URL (ACS):"})," ",(0,a.jsx)("code",{className:"text-text-main font-mono",children:ew})]}),(0,a.jsxs)("li",{children:["Download ",(0,a.jsx)("b",{children:"Federation Metadata XML"})," and import or copy X.509 Certificate."]})]})]}),(0,a.jsxs)("div",{className:"p-3 rounded border border-border bg-bg/50 flex flex-col gap-1.5",children:[(0,a.jsxs)("p",{className:"font-semibold text-text-main flex items-center gap-1.5",children:[(0,a.jsx)("span",{children:"\uD83D\uDFE2"})," Okta / Auth0"]}),(0,a.jsxs)("ol",{className:"list-decimal pl-4 text-text-muted space-y-1",children:[(0,a.jsxs)("li",{children:["Applications → ",(0,a.jsx)("b",{children:"Create App Integration"})," → Select ",(0,a.jsx)("b",{children:"SAML 2.0"}),"."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("b",{children:"Single Sign-On URL:"})," ",(0,a.jsx)("code",{className:"text-text-main font-mono",children:ew})]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("b",{children:"Audience URI (SP Entity ID):"})," ",(0,a.jsx)("code",{className:"text-text-main font-mono",children:eC.samlIssuer||"urn:10router:sp"})]}),(0,a.jsxs)("li",{children:["Name ID format: ",(0,a.jsx)("i",{children:"EmailAddress"}),"."]}),(0,a.jsx)("li",{children:"Download Identity Provider metadata XML or copy the X.509 cert."})]})]}),(0,a.jsxs)("div",{className:"p-3 rounded border border-border bg-bg/50 flex flex-col gap-1.5",children:[(0,a.jsxs)("p",{className:"font-semibold text-text-main flex items-center gap-1.5",children:[(0,a.jsx)("span",{children:"\uD83D\uDEE1️"})," Keycloak / Authentik"]}),(0,a.jsxs)("ol",{className:"list-decimal pl-4 text-text-muted space-y-1",children:[(0,a.jsxs)("li",{children:["Clients → ",(0,a.jsx)("b",{children:"Create client"})," → Select ",(0,a.jsx)("b",{children:"SAML"}),"."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("b",{children:"Client ID:"})," ",(0,a.jsx)("code",{className:"text-text-main font-mono",children:eC.samlIssuer||"urn:10router:sp"})]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("b",{children:"Master SAML Processing URL:"})," ",(0,a.jsx)("code",{className:"text-text-main font-mono",children:ew})]}),(0,a.jsx)("li",{children:"Export SAML Descriptor XML or copy IDP Certificate PEM."})]})]})]})]})]}),(0,a.jsxs)("div",{className:"p-3 rounded-lg border border-dashed border-primary/40 bg-primary/5 flex flex-col sm:flex-row sm:items-center justify-between gap-3",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"font-medium text-sm text-text-main",children:"1-Click IdP Metadata XML Import"}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Auto-fill SSO URL, Issuer & Cert from XML metadata"})]}),(0,a.jsx)(l.$n,{type:"button",variant:"outline",size:"sm",icon:"upload_file",onClick:()=>eD.current?.click(),children:"Upload Metadata XML"}),(0,a.jsx)("input",{ref:eD,type:"file",accept:".xml,application/xml,text/xml",className:"hidden",onChange:e=>{let t=e.target.files?.[0];if(eD.current&&(eD.current.value=""),!t)return;let s=new FileReader;s.onload=e=>{try{let t=e.target?.result||"",s=new DOMParser().parseFromString(t,"text/xml");if(s.querySelector("parsererror"))return void eT({type:"error",message:"Unable to parse valid SAML IdP metadata from XML file"});let a=s.documentElement.getAttribute("entityID")||"",r=Array.from(s.querySelectorAll("SingleSignOnService, *|SingleSignOnService")),l="";for(let e of r){let t=e.getAttribute("Binding")||"",s=e.getAttribute("Location")||"";if(s&&(l=s,t.includes("HTTP-Redirect")))break}let i=Array.from(s.querySelectorAll("X509Certificate, *|X509Certificate")),n="";i.length>0&&(n=i[0].textContent.trim()),ek(e=>({...e,samlEntryPoint:l||e.samlEntryPoint,samlIssuer:e.samlIssuer||"urn:10router:sp",samlCert:n||e.samlCert})),eT({type:"success",message:`IdP Metadata imported! (SSO URL: ${l?"found":"not found"}, EntityID: ${a?"found":"not found"}, Cert: ${n?"found":"not found"})`})}catch(e){eT({type:"error",message:"Error reading IdP Metadata XML file"})}},s.readAsText(t)}})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"font-medium text-sm sm:text-base",children:"Single Sign-On Service URL (samlEntryPoint)"}),(0,a.jsx)(l.pd,{placeholder:"https://idp.example.com/app/saml/sso/...",value:eC.samlEntryPoint,onChange:e=>tc("samlEntryPoint",e.target.value),disabled:H||eA})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"font-medium text-sm sm:text-base",children:"SP Entity ID / Audience (samlIssuer)"}),(0,a.jsx)(l.pd,{placeholder:"urn:10router:sp",value:eC.samlIssuer,onChange:e=>tc("samlIssuer",e.target.value),disabled:H||eA})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("label",{className:"font-medium text-sm sm:text-base",children:"IdP X.509 Certificate (samlCert)"}),(0,a.jsx)(l.$n,{type:"button",variant:"outline",size:"sm",icon:"file_upload",onClick:()=>eU.current?.click(),children:"Upload Certificate"}),(0,a.jsx)("input",{ref:eU,type:"file",accept:".crt,.pem,.cer,text/plain",className:"hidden",onChange:e=>{let t=e.target.files?.[0];if(eU.current&&(eU.current.value=""),!t)return;let s=new FileReader;s.onload=e=>{let t=e.target?.result||"";ek(e=>({...e,samlCert:t.trim()})),eT({type:"success",message:"Certificate file loaded into configuration."})},s.readAsText(t)}})]}),(0,a.jsx)("textarea",{rows:4,placeholder:"-----BEGIN CERTIFICATE-----\nMIIC...\n-----END CERTIFICATE-----",value:eC.samlCert,onChange:e=>tc("samlCert",e.target.value),className:"w-full p-2.5 rounded-lg border border-border bg-bg text-xs font-mono text-text-main focus:outline-none focus:border-primary",disabled:H||eA}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Paste raw Base64 certificate or PEM block."})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-4",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"font-medium text-sm sm:text-base",children:"Login Button Label"}),(0,a.jsx)(l.pd,{placeholder:"Sign in with SAML SSO",value:eC.samlLoginLabel,onChange:e=>tc("samlLoginLabel",e.target.value),disabled:H||eA})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"font-medium text-sm sm:text-base",children:"Email Claim Attribute"}),(0,a.jsx)(l.pd,{placeholder:"email",value:eC.samlAttributeEmail,onChange:e=>tc("samlAttributeEmail",e.target.value),disabled:H||eA})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"font-medium text-sm sm:text-base",children:"Display Name Claim"}),(0,a.jsx)(l.pd,{placeholder:"name",value:eC.samlAttributeName,onChange:e=>tc("samlAttributeName",e.target.value),disabled:H||eA})]})]})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2 p-3 rounded-lg border border-border bg-bg text-xs sm:text-sm text-text-muted",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"font-medium text-text-main",children:"ACS Callback URL"}),(0,a.jsx)("code",{className:"block break-all font-mono text-xs",children:ew})]}),(0,a.jsx)(l.$n,{type:"button",variant:"outline",size:"sm",icon:"content_copy",onClick:async()=>{await (0,g.e)(ew),eT({type:"success",message:"ACS URL copied to clipboard!"})},children:"Copy"})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2 pt-2 border-t border-border/50",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"font-medium text-text-main",children:"SP XML Metadata"}),(0,a.jsx)("code",{className:"block break-all font-mono text-xs",children:eN})]}),(0,a.jsxs)("a",{href:eN,target:"_blank",rel:"noopener noreferrer",download:"10router-sp-metadata.xml",className:"inline-flex items-center gap-1 text-xs font-medium text-primary hover:underline",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"download"}),"Download XML"]})]})]}),(0,a.jsxs)("div",{className:"flex flex-col sm:flex-row gap-2 pt-2 border-t border-border/50",children:[(0,a.jsx)(l.$n,{type:"button",variant:"primary",loading:eA,onClick:()=>tm(el.authMode),className:"w-full sm:w-auto",children:"Save SAML settings"}),(0,a.jsx)(l.$n,{type:"button",variant:"outline",loading:eP,onClick:tx,className:"w-full sm:w-auto",children:"Test SAML settings"})]}),eM.message&&(0,a.jsx)("p",{className:`text-xs sm:text-sm ${"error"===eM.type?"text-red-500":"text-green-500"}`,children:eM.message}),eL.message&&(0,a.jsx)("p",{className:`text-xs sm:text-sm ${"error"===eL.type?"text-red-500":"text-green-500"}`,children:eL.message})]}):(0,a.jsxs)("div",{className:"flex flex-col gap-4 pt-2 border-t border-border/50",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"font-medium text-sm sm:text-base",children:"Issuer URL"}),(0,a.jsx)(l.pd,{placeholder:"https://auth.example.com/application/o/10router/",value:el.oidcIssuerUrl,onChange:e=>tn("oidcIssuerUrl",e.target.value),disabled:H||em})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"font-medium text-sm sm:text-base",children:"Client ID"}),(0,a.jsx)(l.pd,{placeholder:"10router-dashboard",value:el.oidcClientId,onChange:e=>tn("oidcClientId",e.target.value),disabled:H||em})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"font-medium text-sm sm:text-base",children:"Client Secret"}),(0,a.jsx)(l.pd,{type:"password",placeholder:"Leave blank to keep existing secret",value:en,onChange:e=>eo(e.target.value),disabled:H||em}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:"This value is write-only after saving."})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"font-medium text-sm sm:text-base",children:"Scopes"}),(0,a.jsx)(l.pd,{placeholder:"openid profile email",value:el.oidcScopes,onChange:e=>tn("oidcScopes",e.target.value),disabled:H||em})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"font-medium text-sm sm:text-base",children:"Login Button Label"}),(0,a.jsx)(l.pd,{placeholder:"Sign in with OIDC",value:el.oidcLoginLabel,onChange:e=>tn("oidcLoginLabel",e.target.value),disabled:H||em})]})]}),(0,a.jsxs)("div",{className:"rounded-lg border border-border bg-bg p-3 text-xs sm:text-sm text-text-muted",children:[(0,a.jsx)("p",{className:"font-medium text-text-main mb-1",children:"Redirect URI"}),(0,a.jsx)("code",{className:"block break-all font-mono",children:ej})]}),(0,a.jsxs)("div",{className:"flex flex-col sm:flex-row gap-2 pt-2 border-t border-border/50",children:[(0,a.jsx)(l.$n,{type:"button",variant:"primary",loading:em,onClick:()=>to(),className:"w-full sm:w-auto",children:"Save OIDC settings"}),(0,a.jsx)(l.$n,{type:"button",variant:"outline",loading:ep,onClick:td,className:"w-full sm:w-auto",children:"Test connection"})]}),eh.message&&(0,a.jsx)("p",{className:`text-xs sm:text-sm ${"error"===eh.type?"text-red-500":"text-green-500"}`,children:eh.message}),ed.message&&(0,a.jsx)("p",{className:`text-xs sm:text-sm ${"error"===ed.type?"text-red-500":"text-green-500"}`,children:ed.message})]}),"oidc"===_.authMode||"saml"===_.authMode||"sso"===_.authMode?(0,a.jsxs)("p",{className:"text-xs sm:text-sm text-amber-600 dark:text-amber-400",children:["SSO login (","saml"===_.ssoType?"SAML 2.0":"OIDC",") is currently active. Password login is disabled until you switch back."]}):null,"both"===_.authMode&&(0,a.jsxs)("p",{className:"text-xs sm:text-sm text-amber-600 dark:text-amber-400",children:["Password and SSO login (","saml"===_.ssoType?"SAML 2.0":"OIDC",") are both active."]})]})]}),(0,a.jsxs)(l.Zp,{children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,a.jsx)("div",{className:"size-10 rounded-lg flex items-center justify-center bg-blue-500/10 text-blue-500 shrink-0",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"route"})}),(0,a.jsx)("h3",{className:"text-base sm:text-lg font-semibold",children:"Routing Strategy"})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:"Round Robin"}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:"Cycle through accounts to distribute load"})]}),(0,a.jsx)(l.lM,{checked:"round-robin"===_.fallbackStrategy,onChange:()=>e9("round-robin"===_.fallbackStrategy?"fill-first":"round-robin"),disabled:H})]}),"round-robin"===_.fallbackStrategy&&(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4 pt-2 border-t border-border/50",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:"Sticky Limit"}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:"Calls per account before switching"})]}),(0,a.jsx)(l.pd,{type:"number",min:"1",max:"10",value:_.stickyRoundRobinLimit||3,onChange:e=>e7(e.target.value),disabled:H,className:"w-16 sm:w-20 text-center shrink-0"})]}),(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4 pt-4 border-t border-border/50",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:"Combo Round Robin"}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:"Cycle through providers in combos instead of always starting with first"})]}),(0,a.jsx)(l.lM,{checked:"round-robin"===_.comboStrategy,onChange:()=>e8("round-robin"===_.comboStrategy?"fallback":"round-robin"),disabled:H})]}),"round-robin"===_.comboStrategy&&(0,a.jsxs)("div",{className:"flex items-center justify-between pt-2 border-t border-border/50",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"font-medium",children:"Combo Sticky Limit"}),(0,a.jsx)("p",{className:"text-sm text-text-muted",children:"Calls per combo model before switching"})]}),(0,a.jsx)(l.pd,{type:"number",min:"1",max:"100",value:_.comboStickyRoundRobinLimit||1,onChange:e=>te(e.target.value),disabled:H,className:"w-20 text-center"})]}),(0,a.jsxs)("p",{className:"text-xs text-text-muted italic pt-2 border-t border-border/50",children:["round-robin"===_.fallbackStrategy?`Currently distributing requests across all available accounts with ${_.stickyRoundRobinLimit||3} calls per account.`:"Currently using accounts in priority order (Fill First).","round-robin"===_.comboStrategy?` Combos rotate after ${_.comboStickyRoundRobinLimit||1} call${1===(_.comboStickyRoundRobinLimit||1)?"":"s"} per model.`:" Combos always start with their first model."]})]})]}),(0,a.jsxs)(l.Zp,{children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,a.jsx)("div",{className:"size-10 rounded-lg flex items-center justify-center bg-cyan-500/10 text-cyan-500 shrink-0",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"device_hub"})}),(0,a.jsx)("h3",{className:"text-base sm:text-lg font-semibold",children:(0,b.Tl)("Providers")})]}),(0,a.jsx)("div",{className:"flex flex-col gap-4",children:(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:(0,b.Tl)("Show trial providers")}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:(0,b.Tl)("Show public unauthenticated trial channels (e.g. OpenCode Free)")})]}),(0,a.jsx)(l.lM,{checked:!1!==_.showCommunityProviders,onChange:e5})]})})]}),(0,a.jsxs)(l.Zp,{children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,a.jsx)("div",{className:"size-10 rounded-lg flex items-center justify-center bg-purple-500/10 text-purple-500 shrink-0",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"wifi"})}),(0,a.jsx)("h3",{className:"text-base sm:text-lg font-semibold",children:(0,b.Tl)("Network")})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:"Outbound Proxy"}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:"Enable proxy for OAuth + provider outbound requests."})]}),(0,a.jsx)(l.lM,{checked:!0===_.outboundProxyEnabled,onChange:()=>e4(!0!==_.outboundProxyEnabled),disabled:H||eZ})]}),!0===_.outboundProxyEnabled&&(0,a.jsxs)("form",{onSubmit:e2,className:"flex flex-col gap-4 pt-2 border-t border-border/50",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"font-medium text-sm sm:text-base",children:"Proxy URL"}),(0,a.jsx)(l.pd,{placeholder:"http://127.0.0.1:7897",value:eX.outboundProxyUrl,onChange:e=>eK(t=>({...t,outboundProxyUrl:e.target.value})),disabled:H||eZ}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:"Leave empty to inherit existing env proxy (if any)."})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2 pt-2 border-t border-border/50",children:[(0,a.jsx)("label",{className:"font-medium text-sm sm:text-base",children:"No Proxy"}),(0,a.jsx)(l.pd,{placeholder:"localhost,127.0.0.1",value:eX.outboundNoProxy,onChange:e=>eK(t=>({...t,outboundNoProxy:e.target.value})),disabled:H||eZ}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:"Comma-separated hostnames/domains to bypass the proxy."})]}),(0,a.jsxs)("div",{className:"pt-2 border-t border-border/50 flex flex-col sm:flex-row items-stretch sm:items-center gap-2",children:[(0,a.jsx)(l.$n,{type:"button",variant:"secondary",loading:eY,disabled:H||eZ,onClick:e3,className:"w-full sm:w-auto",children:"Test proxy URL"}),(0,a.jsx)(l.$n,{type:"submit",variant:"primary",loading:eZ,className:"w-full sm:w-auto",children:"Apply"})]})]}),eW.message&&(0,a.jsx)("p",{className:`text-xs sm:text-sm ${"error"===eW.type?"text-red-500":"text-green-500"} pt-2 border-t border-border/50`,children:eW.message})]})]}),(0,a.jsxs)(l.Zp,{children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,a.jsx)("div",{className:"size-10 rounded-lg flex items-center justify-center bg-orange-500/10 text-orange-500 shrink-0",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"monitoring"})}),(0,a.jsx)("h3",{className:"text-base sm:text-lg font-semibold",children:(0,b.Tl)("Observability")})]}),(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:"Enable Observability"}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:"Record request details for inspection in the logs view"})]}),(0,a.jsx)(l.lM,{checked:tw,onChange:tp,disabled:H})]})]}),(0,a.jsxs)("div",{className:"flex flex-col sm:flex-row gap-2",children:[(0,a.jsx)(l.$n,{variant:"outline",fullWidth:!0,icon:"power_settings_new",onClick:()=>L(!0),className:"text-red-500 border-red-200 hover:bg-red-50 hover:border-red-300",children:"Shutdown"}),(0,a.jsx)(l.$n,{variant:"outline",fullWidth:!0,icon:"logout",onClick:tv,children:"Logout"})]}),(0,a.jsxs)("div",{className:"text-center text-xs sm:text-sm text-text-muted py-4",children:[(0,a.jsxs)("p",{children:[m.vQ.name," v",m.vQ.version]}),(0,a.jsx)("p",{className:"mt-1",children:e0?"Remote Mode":"Local Mode - All data stored on your machine"})]})]}),(0,a.jsx)(o.default,{hideTrigger:!0,isOpen:S,onClose:e=>{C(!1),y(e)}}),(0,a.jsx)(i.ConfirmModal,{isOpen:T,onClose:()=>A(!1),onConfirm:()=>{A(!1),tt(!1)},title:(0,b.Tl)("Turn off the log-in check?"),message:(0,b.Tl)("Anyone who can reach this port will be able to manage every provider, key and credential without a password. The dashboard keeps a warning banner while it is off."),confirmText:(0,b.Tl)("Turn it off"),cancelText:(0,b.Tl)("Cancel"),variant:"danger"}),(0,a.jsx)(i.ConfirmModal,{isOpen:I,onClose:()=>P(!1),onConfirm:()=>{P(!1),ti(!0)},title:(0,b.Tl)("Hide the log-in-off warning?"),message:(0,b.Tl)("The dashboard stays open to anyone who can reach this port — hiding the banner only removes the reminder, not the risk. It comes back automatically if you turn the log-in check on and off again."),confirmText:(0,b.Tl)("Hide it"),cancelText:(0,b.Tl)("Cancel"),variant:"danger"}),(0,a.jsx)(i.ConfirmModal,{isOpen:k,onClose:()=>L(!1),onConfirm:tN,title:"Close Proxy",message:"Are you sure you want to close the proxy server?",confirmText:"Close",cancelText:"Cancel",variant:"danger",loading:q}),(0,a.jsxs)(i.default,{isOpen:O.open,onClose:()=>M({open:!1,value:"",confirm:"",error:"",loading:!1}),title:(0,b.Tl)("Set a password to turn on the log-in check"),size:"sm",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(l.$n,{variant:"ghost",onClick:()=>M({open:!1,value:"",confirm:"",error:"",loading:!1}),disabled:O.loading,children:(0,b.Tl)("Cancel")}),(0,a.jsx)(l.$n,{variant:"primary",onClick:ts,loading:O.loading,children:(0,b.Tl)("Set password and turn on")})]}),children:[(0,a.jsx)("p",{className:"text-text-muted mb-3 text-sm",children:(0,b.Tl)("You have not set a dashboard password of your own yet. Choose one now — you will need it to sign in from then on.")}),(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,a.jsx)(l.pd,{type:"password",value:O.value,onChange:e=>M(t=>({...t,value:e.target.value,error:""})),placeholder:(0,b.Tl)("New password"),autoFocus:!0}),(0,a.jsx)(l.pd,{type:"password",value:O.confirm,onChange:e=>M(t=>({...t,confirm:e.target.value,error:""})),onKeyDown:e=>{"Enter"===e.key&&ts()},placeholder:(0,b.Tl)("Confirm new password")}),O.error&&(0,a.jsx)("p",{className:"text-xs text-red-500",children:O.error})]})]}),(0,a.jsxs)(i.default,{isOpen:es.open,onClose:()=>ea({open:!1,mode:"",password:""}),title:"Confirm Password",size:"sm",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(l.$n,{variant:"ghost",onClick:()=>ea({open:!1,mode:"",password:""}),disabled:Y,children:"Cancel"}),(0,a.jsx)(l.$n,{variant:"primary",onClick:tj,loading:Y,disabled:!es.password,children:"Confirm"})]}),children:[(0,a.jsxs)("p",{className:"text-text-muted mb-3 text-sm",children:["Enter your current password to ","export"===es.mode?"export":"import"," the database."]}),(0,a.jsx)(l.pd,{type:"password",value:es.password,onChange:e=>ea(t=>({...t,password:e.target.value})),onKeyDown:e=>{"Enter"===e.key&&es.password&&tj()},placeholder:"Current password",autoFocus:!0})]})]})}}},e=>{e.O(0,[3170,305,1321,5497,8441,3794,7358],()=>e(e.s=13966)),_N_E=e.O()}]);
|