@jheavenknows/bluerouter 5.4.13 → 5.4.15
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 +17 -16
- package/app/.next-cli-build/build-manifest.json +2 -2
- package/app/.next-cli-build/prerender-manifest.json +2 -2
- package/app/.next-cli-build/routes-manifest.json +6 -0
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/ai-power-index/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/ai-power-index/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/audit-proxy/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/audit-proxy/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/audit-proxy/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +2 -2
- 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/model-profiles/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/model-profiles/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/cluster/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cluster/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_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_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/logs/console/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/logs/console/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/logs/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_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_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_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_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_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/personal/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/personal/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovider/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovider/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovidermonitor/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovidermonitor/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalquota/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalquota/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_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_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_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_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/stt/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/stt/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/tts/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/tts/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +2 -2
- 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/quota/page.js +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/resource-monitor/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/resource-monitor/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/pricing/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/pricing/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_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_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_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_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_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_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/app/.next-cli-build/server/app/_not-found.rsc +5 -5
- package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/api/audit-proxy/ca/route.js +1 -1
- package/app/.next-cli-build/server/app/api/audit-proxy/ca/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/audit-proxy/me/route.js +1 -1
- package/app/.next-cli-build/server/app/api/audit-proxy/me/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/audit-proxy/route.js +2 -2
- package/app/.next-cli-build/server/app/api/audit-proxy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/audit-proxy/users/route.js +1 -1
- package/app/.next-cli-build/server/app/api/audit-proxy/users/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/login/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/logout/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/status/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/view-mode/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/view-mode/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/branding/[asset]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/branding/[asset]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/branding/route.js +1 -1
- package/app/.next-cli-build/server/app/api/branding/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/branding/upload/route.js +1 -1
- package/app/.next-cli-build/server/app/api/branding/upload/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-model-profiles/cloud-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-model-profiles/cloud-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-model-profiles/model-catalog/route.js +1 -0
- package/app/.next-cli-build/server/app/api/cli-model-profiles/model-catalog/route.js.nft.json +1 -0
- package/app/.next-cli-build/server/app/api/cli-model-profiles/model-catalog/route_client-reference-manifest.js +1 -0
- package/app/.next-cli-build/server/app/api/cli-model-profiles/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-model-profiles/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +3 -3
- 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/autostart/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +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-tools/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +3 -3
- package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
- 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/jcode-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/qwen-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cluster/config/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cluster/config/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cluster/heartbeat/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cluster/heartbeat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cluster/peers/[id]/command/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cluster/peers/[id]/command/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cluster/peers/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cluster/peers/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cluster/peers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cluster/peers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cluster/snapshot/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cluster/snapshot/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cluster/sync/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cluster/sync/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cluster/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cluster/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/codex-catalog/download/route.js +1 -1
- package/app/.next-cli-build/server/app/api/codex-catalog/download/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/codex-catalog/route.js +1 -1
- package/app/.next-cli-build/server/app/api/codex-catalog/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/codex-catalog/upload/route.js +1 -1
- package/app/.next-cli-build/server/app/api/codex-catalog/upload/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/dashboard/ai-power-index/route.js +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/ai-power-index/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/analytics/ai-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/analytics/ai-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/analytics/analyze/route.js +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/analytics/analyze/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/analytics/route.js +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/analytics/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/combos/route.js +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/combos/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/endpoint/route.js +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/endpoint/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/options/route.js +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/options/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/token-saver/route.js +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/token-saver/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/init/route.js +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/caveman-test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/caveman-test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/route.js +2 -2
- 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/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 +2 -2
- 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/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/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/oauth/[provider]/[action]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/grok-cli/device-code/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/grok-cli/device-code/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/grok-cli/poll/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/grok-cli/poll/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/auto-import/route.js +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/social-authorize/route.js +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/personal-cloud-providers/[id]/api-key-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/api-key-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/import-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/import-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/move/route.js +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/move/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/usage/route.js +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/usage/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/client/route.js +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/client/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/monitor/route.js +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/monitor/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/permissions/route.js +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/permissions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/routing/route.js +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/routing/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/shares/route.js +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/shares/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/visibility/route.js +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/visibility/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pricing/catalog/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pricing/catalog/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pricing/recalculate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/pricing/recalculate/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-health/route.js +1 -1
- package/app/.next-cli-build/server/app/api/provider-health/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/openai-compatible/manage/route.js +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/openai-compatible/manage/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/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/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/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 +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/resource-monitor/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/resource-monitor/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/resource-monitor/ai-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/resource-monitor/ai-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/resource-monitor/analyze/route.js +2 -2
- package/app/.next-cli-build/server/app/api/resource-monitor/analyze/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/resource-monitor/history/route.js +1 -1
- package/app/.next-cli-build/server/app/api/resource-monitor/history/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/resource-monitor/route.js +2 -2
- package/app/.next-cli-build/server/app/api/resource-monitor/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/export/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/export/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/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 -2
- 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/tags/route.js +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/stream/route.js +2 -2
- package/app/.next-cli-build/server/app/api/translator/load/route.js +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/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/tunnel/tailscale-login/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/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/history/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/stream/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/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/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/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/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/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/restart/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/callback/page.js +1 -1
- package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/callback.html +1 -1
- package/app/.next-cli-build/server/app/callback.rsc +5 -5
- package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/ai-power-index.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/ai-power-index.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/!KGRhc2hib2FyZCk/dashboard/ai-power-index/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/api-keys.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/api-keys.rsc +9 -9
- package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys/__PAGE__.segment.rsc +9 -9
- package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_full.segment.rsc +9 -9
- package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.rsc +20 -19
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/model-profiles/__PAGE__.segment.rsc +30 -28
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/_full.segment.rsc +20 -19
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cluster.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/cluster.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/cluster.segments/!KGRhc2hib2FyZCk/dashboard/cluster/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/cluster.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/cluster.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/logs.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/logs.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/logs.segments/!KGRhc2hib2FyZCk/dashboard/logs/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/logs.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/logs.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/personal.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/personal.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/personal.segments/!KGRhc2hib2FyZCk/dashboard/personal/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/personal.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/personal.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/provider-health.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/provider-health.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/stt.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/stt.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/stt.segments/!KGRhc2hib2FyZCk/dashboard/providers/stt/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/stt.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/stt.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/tts.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/tts.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/tts.segments/!KGRhc2hib2FyZCk/dashboard/providers/tts/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/tts.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/tts.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/resource-monitor.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/resource-monitor.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/!KGRhc2hib2FyZCk/dashboard/resource-monitor/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings/pricing/__PAGE__.segment.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 +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard.html +1 -1
- package/app/.next-cli-build/server/app/dashboard.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/favicon.ico/route.js +1 -1
- package/app/.next-cli-build/server/app/index.html +1 -1
- package/app/.next-cli-build/server/app/index.rsc +5 -5
- package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing/page.js +1 -1
- package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/landing.html +1 -1
- package/app/.next-cli-build/server/app/landing.rsc +5 -5
- package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/login/page.js +1 -1
- package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/login.html +1 -1
- package/app/.next-cli-build/server/app/login.rsc +6 -6
- package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/manifest.webmanifest/route.js +2 -2
- package/app/.next-cli-build/server/app/page.js +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 +17 -16
- package/app/.next-cli-build/server/chunks/2664.js +1 -1
- package/app/.next-cli-build/server/chunks/3399.js +1 -1
- package/app/.next-cli-build/server/chunks/3433.js +3 -3
- package/app/.next-cli-build/server/chunks/3960.js +1 -1
- package/app/.next-cli-build/server/chunks/4350.js +1 -1
- package/app/.next-cli-build/server/chunks/4746.js +1 -1
- package/app/.next-cli-build/server/chunks/4790.js +2 -2
- package/app/.next-cli-build/server/chunks/5210.js +3 -3
- package/app/.next-cli-build/server/chunks/5296.js +1 -1
- package/app/.next-cli-build/server/chunks/6118.js +1 -1
- package/app/.next-cli-build/server/chunks/6328.js +1 -1
- package/app/.next-cli-build/server/chunks/6684.js +1 -1
- package/app/.next-cli-build/server/chunks/6811.js +1 -1
- package/app/.next-cli-build/server/chunks/689.js +3 -3
- package/app/.next-cli-build/server/chunks/6992.js +1 -1
- package/app/.next-cli-build/server/chunks/7774.js +3 -3
- package/app/.next-cli-build/server/chunks/8049.js +1 -1
- package/app/.next-cli-build/server/chunks/8352.js +2 -2
- package/app/.next-cli-build/server/chunks/9.js +2 -2
- package/app/.next-cli-build/server/chunks/9012.js +1 -1
- package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/app/.next-cli-build/server/pages/404.html +1 -1
- package/app/.next-cli-build/server/pages/500.html +1 -1
- package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
- package/app/.next-cli-build/static/DuSB34H6cE3cKjeFATxgo/_buildManifest.js +1 -0
- package/app/.next-cli-build/static/chunks/{5263-bdad820566826d54.js → 5263-533ff8cecf251d8a.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/api-keys/{page-07d70ddc2fb95e53.js → page-4e908fccca3cb031.js} +4 -4
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/model-profiles/page-398c89951ed46cd1.js +1 -0
- package/app/.next-cli-build/static/chunks/app/_global-error/page-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/audit-proxy/ca/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/audit-proxy/me/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/audit-proxy/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/audit-proxy/users/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/ldap/test/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/ldap/users/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/login/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/logout/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/callback/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/start/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/test/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/status/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/view-mode/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/branding/[asset]/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/branding/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/branding/upload/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-model-profiles/cloud-models/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-model-profiles/model-catalog/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-model-profiles/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/autostart/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/prompt-log-db/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/root-ca/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-settings/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/copilot-settings/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-settings/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/hermes-settings/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/openclaw-settings/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/opencode-settings/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/qwen-settings/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cluster/config/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cluster/heartbeat/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cluster/peers/[id]/command/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cluster/peers/[id]/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cluster/peers/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cluster/snapshot/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cluster/sync/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cluster/test/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/codex-catalog/download/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/codex-catalog/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/codex-catalog/upload/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/combos/[id]/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/combos/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/ai-power-index/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/analytics/ai-models/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/analytics/analyze/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/analytics/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/combos/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/endpoint/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/[id]/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/options/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/token-saver/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/health/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/init/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/keys/[id]/caveman-test/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/keys/[id]/rotate/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/keys/[id]/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/keys/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/locale/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/message/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/sse/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/deepgram/voices/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/inworld/voices/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/minimax/voices/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/voices/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/alias/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/availability/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/custom/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/disabled/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/test/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/[provider]/[action]/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/codex/import-token/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/auto-import/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/import/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/gitlab/pat/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/grok-cli/device-code/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/grok-cli/poll/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/iflow/cookie/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/auto-import/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-authorize/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-exchange/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/api-key-models/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/import-models/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/move/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/usage/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/client/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/monitor/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/permissions/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/routing/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/shares/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/visibility/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pricing/catalog/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pricing/recalculate/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pricing/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/provider-health/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/[id]/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/openai-compatible/manage/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/validate/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/models/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test-models/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/client/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/kilo/free-models/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/suggested-models/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/test-batch/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/validate/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/test/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/deno-deploy/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/vercel-deploy/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/resource-monitor/[id]/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/resource-monitor/ai-models/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/resource-monitor/analyze/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/resource-monitor/history/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/resource-monitor/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/database/export/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/database/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/proxy-test/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/require-login/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/shutdown/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tags/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/stream/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/load/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/save/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/send/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/translate/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/disable/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/enable/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/status/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-check/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-disable/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-enable/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-install/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-login/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-start-daemon/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/chart/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/history/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/logs/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/providers/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/request-details/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/request-logs/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/stats/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/stream/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/api/chat/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/speech/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/transcriptions/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/voices/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/chat/completions/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/embeddings/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/images/generations/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/messages/count_tokens/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/messages/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/models/[kind]/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/models/info/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/models/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/responses/compact/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/responses/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/search/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/web/fetch/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1beta/models/[...path]/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1beta/models/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/version/restart/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/version/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/version/shutdown/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/version/update/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/manifest.webmanifest/route-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/page-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/app-error-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/forbidden-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/not-found-866b1d0c2eb324a0.js +1 -0
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/unauthorized-866b1d0c2eb324a0.js +1 -0
- package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-shm +0 -0
- package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-wal +0 -0
- package/app/package.json +1 -1
- package/package.json +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/model-profiles/page-514941d4d89828f3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/_global-error/page-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/audit-proxy/ca/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/audit-proxy/me/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/audit-proxy/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/audit-proxy/users/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/ldap/test/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/ldap/users/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/login/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/logout/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/callback/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/start/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/test/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/status/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/view-mode/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/branding/[asset]/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/branding/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/branding/upload/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-model-profiles/cloud-models/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-model-profiles/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/autostart/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/prompt-log-db/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/root-ca/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-settings/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/copilot-settings/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-settings/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/hermes-settings/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/openclaw-settings/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/opencode-settings/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/qwen-settings/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cluster/config/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cluster/heartbeat/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cluster/peers/[id]/command/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cluster/peers/[id]/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cluster/peers/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cluster/snapshot/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cluster/sync/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cluster/test/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/codex-catalog/download/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/codex-catalog/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/codex-catalog/upload/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/combos/[id]/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/combos/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/ai-power-index/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/analytics/ai-models/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/analytics/analyze/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/analytics/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/combos/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/endpoint/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/[id]/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/options/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/token-saver/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/health/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/init/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/keys/[id]/caveman-test/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/keys/[id]/rotate/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/keys/[id]/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/keys/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/locale/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/message/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/sse/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/deepgram/voices/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/inworld/voices/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/minimax/voices/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/voices/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/alias/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/availability/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/custom/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/disabled/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/test/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/[provider]/[action]/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/codex/import-token/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/auto-import/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/import/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/gitlab/pat/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/grok-cli/device-code/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/grok-cli/poll/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/iflow/cookie/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/auto-import/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-authorize/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-exchange/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/api-key-models/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/import-models/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/move/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/usage/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/client/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/monitor/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/permissions/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/routing/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/shares/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/visibility/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pricing/catalog/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pricing/recalculate/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pricing/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/provider-health/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/[id]/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/openai-compatible/manage/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/validate/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/models/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test-models/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/client/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/kilo/free-models/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/suggested-models/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/test-batch/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/validate/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/test/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/deno-deploy/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/vercel-deploy/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/resource-monitor/[id]/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/resource-monitor/ai-models/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/resource-monitor/analyze/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/resource-monitor/history/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/resource-monitor/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/database/export/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/database/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/proxy-test/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/require-login/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/shutdown/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tags/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/stream/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/load/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/save/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/send/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/translate/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/disable/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/enable/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/status/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-check/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-disable/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-enable/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-install/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-login/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-start-daemon/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/chart/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/history/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/logs/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/providers/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/request-details/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/request-logs/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/stats/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/stream/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/api/chat/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/speech/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/transcriptions/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/voices/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/chat/completions/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/embeddings/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/images/generations/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/messages/count_tokens/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/messages/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/models/[kind]/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/models/info/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/models/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/responses/compact/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/responses/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/search/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/web/fetch/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1beta/models/[...path]/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1beta/models/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/version/restart/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/version/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/version/shutdown/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/version/update/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/manifest.webmanifest/route-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/app/page-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/app-error-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/forbidden-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/not-found-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/unauthorized-33a3e242390aab34.js +0 -1
- package/app/.next-cli-build/static/mmuU-WYdHlWiLCuG5xDtl/_buildManifest.js +0 -1
- /package/app/.next-cli-build/static/{mmuU-WYdHlWiLCuG5xDtl → DuSB34H6cE3cKjeFATxgo}/_ssgManifest.js +0 -0
- /package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-5.4.1-to-5.4.2-5.4.2-20260823-230632 → upgrade-5.4.12-to-5.4.13-5.4.13-20260824-200839}/data.sqlite +0 -0
- /package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-5.4.2-to-5.4.3-5.4.3-20260823-231221 → upgrade-5.4.5-to-5.4.12-5.4.12-20260824-191612}/data.sqlite +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{var a={};a.id=3471,a.ids=[3471],a.modules={10:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g});var d=c(5735),e=c(24429),f=c.n(e);function g({children:a}){return(0,d.jsx)("div",{className:f().profileLayout,children:a})}},1287:(a,b,c)=>{"use strict";c.r(b),c.d(b,{__next_app__:()=>x,handler:()=>z,routeModule:()=>y});var d=c(21635),e=c(86315),f=c(1020),g=c(61287),h={};for(let a in g)0>["default","__next_app__","routeModule","handler"].indexOf(a)&&(h[a]=()=>g[a]);c.d(b,h);let i=(0,d.p)(()=>Promise.resolve().then(c.bind(c,32059))),j=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,95547,23))),k=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,55091,23))),l=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,45270,23))),m=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,28193,23))),n=(0,d.p)(()=>Promise.resolve().then(c.bind(c,30508))),o=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,95547,23))),p=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,55091,23))),q=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,45270,23))),r=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,28193,23))),s=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,95547,23))),t=(0,d.p)(()=>Promise.resolve().then(c.bind(c,10))),u=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,95547,23))),v={children:["",{children:["(dashboard)",{children:["dashboard",{children:["profile",{children:["__PAGE__",{},{page:[(0,d.p)(()=>Promise.resolve().then(c.bind(c,72428))),"D:\\bluerouter\\src\\app\\(dashboard)\\dashboard\\profile\\page.js"]}]},{layout:[t,"D:\\bluerouter\\src\\app\\(dashboard)\\dashboard\\profile\\layout.js"],"global-error":[u,"next/dist/client/components/builtin/global-error.js"]},[]]},{"global-error":[s,"next/dist/client/components/builtin/global-error.js"]},[]]},{layout:[n,"D:\\bluerouter\\src\\app\\(dashboard)\\layout.js"],"global-error":[o,"next/dist/client/components/builtin/global-error.js"],"not-found":[p,"next/dist/client/components/builtin/not-found.js"],forbidden:[q,"next/dist/client/components/builtin/forbidden.js"],unauthorized:[r,"next/dist/client/components/builtin/unauthorized.js"],metadata:{icon:[async a=>(await (0,d.p)(()=>Promise.resolve().then(c.bind(c,70440)))()).default(a)],apple:[],openGraph:[],twitter:[],manifest:"/manifest.webmanifest"}},[]]},{layout:[i,"D:\\bluerouter\\src\\app\\layout.js"],"global-error":[j,"next/dist/client/components/builtin/global-error.js"],"not-found":[k,"next/dist/client/components/builtin/not-found.js"],forbidden:[l,"next/dist/client/components/builtin/forbidden.js"],unauthorized:[m,"next/dist/client/components/builtin/unauthorized.js"],metadata:{icon:[async a=>(await (0,d.p)(()=>Promise.resolve().then(c.bind(c,70440)))()).default(a)],apple:[],openGraph:[],twitter:[],manifest:"/manifest.webmanifest"}},[]]}.children,w=(0,e.H)({tree:v,page:"/(dashboard)/dashboard/profile/page",pathname:"/dashboard/profile",require:c,loadChunk:()=>Promise.resolve(),interopDefault:f.T}),x=w.__next_app__,y=w.routeModule,z=w.handler},1932:a=>{"use strict";a.exports=require("url")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},4573:a=>{"use strict";a.exports=require("node:buffer")},8128:a=>{"use strict";a.exports=require("next/dist/server/runtime-reacts.external.js")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},18011:(a,b,c)=>{Promise.resolve().then(c.bind(c,97759))},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},19771:a=>{"use strict";a.exports=require("process")},20503:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d={MutableRequestCookiesAdapter:function(){return o},ReadonlyRequestCookiesError:function(){return j},RequestCookiesAdapter:function(){return k},appendMutableCookies:function(){return n},areCookiesMutableInCurrentPhase:function(){return q},createCookiesWithMutableAccessCheck:function(){return p},getModifiedCookieValues:function(){return m},responseCookiesToRequestCookies:function(){return s}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(91488),g=c(20445),h=c(29294),i=c(43014);class j extends Error{constructor(){super("Cookies can only be modified in a Server Action or Route Handler. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options"),Object.defineProperty(this,"__NEXT_ERROR_CODE",{value:"E1180",enumerable:!1,configurable:!0})}static callable(){throw new j}}class k{static seal(a){return new Proxy(a,{get(a,b,c){switch(b){case"clear":case"delete":case"set":return j.callable;default:return g.ReflectAdapter.get(a,b,c)}}})}static fresh(a){return new Proxy(a,{get:(a,b,c)=>g.ReflectAdapter.get(a,b,c)})}}let l=Symbol.for("next.mutated.cookies");function m(a){let b=a[l];return b&&Array.isArray(b)&&0!==b.length?b:[]}function n(a,b){let c=m(b);if(0===c.length)return!1;let d=new f.ResponseCookies(a),e=d.getAll();for(let a of c)d.set(a);for(let a of e)d.set(a);return!0}class o{static wrap(a,b){let c=new f.ResponseCookies(new Headers);for(let b of a.getAll())c.set(b);let d=[],e=new Set,j=()=>{let a=h.workAsyncStorage.getStore();if(a&&(a.pathWasRevalidated=i.ActionDidRevalidateStaticAndDynamic),d=c.getAll().filter(a=>e.has(a.name)),b){let a=[];for(let b of d){let c=new f.ResponseCookies(new Headers);c.set(b),a.push(c.toString())}b(a)}},k=new Proxy(c,{get(a,b,c){switch(b){case l:return d;case"delete":return function(...b){e.add("string"==typeof b[0]?b[0]:b[0].name);try{return a.delete(...b),k}finally{j()}};case"set":return function(...b){e.add("string"==typeof b[0]?b[0]:b[0].name);try{return a.set(...b),k}finally{j()}};default:return g.ReflectAdapter.get(a,b,c)}}});return k}}function p(a){let b=new Proxy(a.mutableCookies,{get(c,d,e){switch(d){case"delete":return function(...d){return r(a,"cookies().delete"),c.delete(...d),b};case"set":return function(...d){return r(a,"cookies().set"),c.set(...d),b};default:return g.ReflectAdapter.get(c,d,e)}}});return b}function q(a){return"action"===a.phase}function r(a,b){if(!q(a))throw new j}function s(a){let b=new f.RequestCookies(new Headers);for(let c of a.getAll())b.set(c);return b}},21820:a=>{"use strict";a.exports=require("os")},22484:()=>{},24429:a=>{a.exports={profileLayout:"layout_profileLayout__IGvnc"}},27910:a=>{"use strict";a.exports=require("stream")},28354:a=>{"use strict";a.exports=require("util")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},33873:a=>{"use strict";a.exports=require("path")},34631:a=>{"use strict";a.exports=require("tls")},38522:a=>{"use strict";a.exports=require("node:zlib")},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},41204:a=>{"use strict";a.exports=require("string_decoder")},43014:(a,b)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var c={ActionDidNotRevalidate:function(){return e},ActionDidRevalidateDynamicOnly:function(){return g},ActionDidRevalidateStaticAndDynamic:function(){return f}};for(var d in c)Object.defineProperty(b,d,{enumerable:!0,get:c[d]});let e=0,f=1,g=2},46060:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external.js")},46293:a=>{"use strict";a.exports=require("sql.js")},51455:a=>{"use strict";a.exports=require("node:fs/promises")},52355:(a,b,c)=>{Promise.resolve().then(c.bind(c,72428))},53053:a=>{"use strict";a.exports=require("node:diagnostics_channel")},55511:a=>{"use strict";a.exports=require("crypto")},58868:()=>{},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},64939:a=>{"use strict";a.exports=import("pg")},66136:a=>{"use strict";a.exports=require("timers")},72428:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"D:\\\\bluerouter\\\\src\\\\app\\\\(dashboard)\\\\dashboard\\\\profile\\\\page.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"D:\\bluerouter\\src\\app\\(dashboard)\\dashboard\\profile\\page.js","default")},73024:a=>{"use strict";a.exports=require("node:fs")},74075:a=>{"use strict";a.exports=require("zlib")},76760:a=>{"use strict";a.exports=require("node:path")},77598:a=>{"use strict";a.exports=require("node:crypto")},78474:a=>{"use strict";a.exports=require("node:events")},79428:a=>{"use strict";a.exports=require("buffer")},79748:a=>{"use strict";a.exports=require("fs/promises")},80099:a=>{"use strict";a.exports=require("node:sqlite")},81787:a=>{"use strict";a.exports=require("bun:sqlite")},87550:a=>{"use strict";a.exports=require("better-sqlite3")},89768:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"createDedupedByCallsiteServerErrorLoggerDev",{enumerable:!0,get:function(){return i}});let d=function(a){if(a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var b=e(void 0);if(b&&b.has(a))return b.get(a);var c={__proto__:null},d=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in a)if("default"!==f&&Object.prototype.hasOwnProperty.call(a,f)){var g=d?Object.getOwnPropertyDescriptor(a,f):null;g&&(g.get||g.set)?Object.defineProperty(c,f,g):c[f]=a[f]}return c.default=a,b&&b.set(a,c),c}(c(91986));function e(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(e=function(a){return a?c:b})(a)}let f={current:null},g="function"==typeof d.cache?d.cache:a=>a,h=console.warn;function i(a){return function(...b){h(a(...b))}}g(a=>{try{h(f.current)}finally{f.current=null}})},91645:a=>{"use strict";a.exports=require("net")},92305:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d={isRequestApiAllowedInCurrentPhase:function(){return k},throwForSearchParamsAccessInUseCache:function(){return j},throwWithStaticGenerationBailoutErrorWithDynamicError:function(){return i}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(15693),g=c(19121),h=c(3295);function i(a,b){throw Object.defineProperty(new f.StaticGenBailoutError(`Route ${a} with \`dynamic = "error"\` couldn't be rendered statically because it used ${b}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E543",enumerable:!1,configurable:!0})}function j(a,b){let c=Object.defineProperty(Error(`Route ${a.route} used \`searchParams\` inside "use cache". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await \`searchParams\` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E842",enumerable:!1,configurable:!0});throw Error.captureStackTrace(c,b),a.invalidDynamicUsageError??=c,c}function k(a){switch(a.phase){case"action":case"render":return!0;case"after":{let a=g.actionAsyncStorage.getStore();if(a&&(a.isAppRoute||a.isAction))return!0;let b=h.afterTaskAsyncStorage.getStore();if(b)return"action"===b.rootTaskSpawnPhase;return!1}}}},94735:a=>{"use strict";a.exports=require("events")},97759:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>v});var d=c(48249),e=c(67484),f=c(34716),g=c(50412);let h={enabled:!1,fileLoggingEnabled:!1,type:"mysql",host:"",port:"",database:"",username:"",password:"",ssl:!1,createDatabase:!1,logClientRequest:!0,logSourceRequest:!0,logTargetRequest:!0,logProviderResponse:!1,logErrors:!0,retentionDays:30,payloadRotationEnabled:!1,payloadRetentionDays:60,payloadRotationScheduleTime:"21:00",payloadRotationMaxRuntimeMinutes:60,payloadRotationIntervalHours:24,payloadRotationBatchSize:500,payloadRotationMaxBatches:20},i=[{value:60,label:"1 hour"},{value:120,label:"2 hours"},{value:180,label:"3 hours"},{value:240,label:"4 hours"},{value:360,label:"6 hours"},{value:480,label:"8 hours"},{value:720,label:"12 hours"},{value:0,label:"Until finished"}];function j({label:a,value:b,onChange:c,type:e="text",placeholder:f="",disabled:g=!1,min:h,max:i,step:k}){return(0,d.jsxs)("label",{className:"flex flex-col gap-1 text-xs",children:[(0,d.jsx)("span",{className:"text-text-muted",children:a}),(0,d.jsx)("input",{type:e,value:b||"",placeholder:f,disabled:g,min:h,max:i,step:k,onChange:a=>c(a.target.value),className:"w-full rounded border border-border bg-surface px-2 py-1.5 text-xs text-text-main focus:outline-none focus:ring-1 focus:ring-primary/50 disabled:opacity-50"})]})}function k({label:a,checked:b,onChange:c,disabled:e=!1}){return(0,d.jsxs)("label",{className:"flex items-center gap-2 text-xs text-text-main",children:[(0,d.jsx)("input",{type:"checkbox",checked:!!b,disabled:e,onChange:a=>c(a.target.checked)}),a]})}function l(){let[a,b]=(0,e.useState)(h),[c,f]=(0,e.useState)(!1),[l,m]=(0,e.useState)(null),[n,o]=(0,e.useState)(null),[p,q]=(0,e.useState)(null),r=a=>b(b=>({...b,...a})),s=async()=>{f(!0),o(null);try{let a=await fetch("/api/cli-tools/antigravity-mitm/prompt-log-db"),c=await a.json();if(!a.ok)throw Error(c.error||"Failed to load config");b({...h,...c.config||{}})}catch(a){o(a.message||"Failed to load config")}finally{f(!1)}},t=async()=>{f(!0),o(null),m(null);try{let c=await fetch("/api/cli-tools/antigravity-mitm/prompt-log-db",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({config:a})}),d=await c.json();if(!c.ok)throw Error(d.error||"Failed to save config");b({...h,...d.config||{}}),m("Saved")}catch(a){o(a.message||"Failed to save config")}finally{f(!1)}},u=async(b,c={})=>{if(!c.confirm||window.confirm("Delete all prompt_logs rows and their payloads older than the retention cutoff? Both the rows in prompt_logs (previews, model/provider/token metadata) and the referenced payloads will be removed. This cannot be undone.")){f(!0),o(null),m(null),b.includes("payload-rotation")&&q(null);try{let d=await fetch("/api/cli-tools/antigravity-mitm/prompt-log-db",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:b,config:a,confirm:!0===c.confirm})}),e=await d.text(),f={};try{f=e?JSON.parse(e):{}}catch{let a=e.replace(/<[^>]+>/g," ").replace(/\s+/g," ").trim().slice(0,200),b=504===d.status?"Manual rotation exceeded the request timeout. Use automatic rotation for long-running cleanup.":`HTTP ${d.status}: ${a||d.statusText||"non-JSON response"}`;throw Error(b)}if(!d.ok)throw Error(f.error||`HTTP ${d.status}`);b.includes("payload-rotation")&&q(f),m(f.message||f.init?.message||"OK")}catch(a){o(a.message||"Action failed")}finally{f(!1)}}},v="postgres"===a.type||"mysql"===a.type;return(0,d.jsx)(g.Zp,{title:"Request Logging",subtitle:"Control local request files and database-backed prompt logs",icon:"receipt_long",children:(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,d.jsxs)(g.Ex,{variant:a.fileLoggingEnabled?"success":"default",children:["Local files: ",a.fileLoggingEnabled?"Enabled":"Disabled"]}),(0,d.jsxs)(g.Ex,{variant:a.enabled?"success":"default",children:["Database: ",a.enabled?"Enabled":"Disabled"]})]}),(0,d.jsx)("div",{className:"rounded-lg border border-yellow-500/30 bg-yellow-500/10 p-3 text-xs text-yellow-700 dark:text-yellow-300",children:'Prompt logs may contain source code, selected code, internal URLs, user prompts, and provider responses. Checked stages store full raw JSON; prompt/response text columns keep only short previews. Per-combo "hide content" still redacts raw JSON.'}),(0,d.jsx)("div",{className:"grid gap-3 md:grid-cols-2",children:(0,d.jsxs)("label",{className:"flex flex-col gap-1 text-xs",children:[(0,d.jsx)("span",{className:"text-text-muted",children:"Database type"}),(0,d.jsxs)("select",{value:a.type,disabled:c,onChange:b=>{let c=b.target.value;r({type:c,port:"postgres"===c?a.port||"5432":"mysql"===c?a.port||"3306":a.port})},className:"w-full rounded border border-border bg-surface px-2 py-1.5 text-xs text-text-main focus:outline-none focus:ring-1 focus:ring-primary/50",children:[(0,d.jsx)("option",{value:"mysql",children:"MySQL / MariaDB"}),(0,d.jsx)("option",{value:"postgres",children:"PostgreSQL"})]})]})}),v&&(0,d.jsxs)("div",{className:"grid gap-3 md:grid-cols-2",children:[(0,d.jsx)(j,{label:"Host",value:a.host,placeholder:"127.0.0.1",onChange:a=>r({host:a}),disabled:c}),(0,d.jsx)(j,{label:"Port",value:a.port,placeholder:"postgres"===a.type?"5432":"3306",onChange:a=>r({port:a}),disabled:c}),(0,d.jsx)(j,{label:"Database",value:a.database,placeholder:"bluerouter_logs",onChange:a=>r({database:a}),disabled:c}),(0,d.jsx)(j,{label:"Username",value:a.username,placeholder:"bluerouter",onChange:a=>r({username:a}),disabled:c}),(0,d.jsx)(j,{label:"Password",type:"password",value:a.password,placeholder:"Leave as ******** to keep existing password",onChange:a=>r({password:a}),disabled:c}),(0,d.jsxs)("div",{className:"flex flex-col justify-end gap-2",children:[(0,d.jsx)(k,{label:"Use SSL",checked:a.ssl,onChange:a=>r({ssl:a}),disabled:c}),(0,d.jsx)(k,{label:"Create database if missing",checked:a.createDatabase,onChange:a=>r({createDatabase:a}),disabled:c})]})]}),(0,d.jsxs)("div",{className:"grid gap-2 rounded-lg border border-border bg-surface/40 p-3 md:grid-cols-2",children:[(0,d.jsx)(k,{label:"Save request/response to local files",checked:a.fileLoggingEnabled,onChange:a=>r({fileLoggingEnabled:a}),disabled:c}),(0,d.jsx)(k,{label:"Save request/response to Prompt Log Database",checked:a.enabled,onChange:a=>r({enabled:a}),disabled:c}),(0,d.jsx)(k,{label:"Log client request JSON",checked:a.logClientRequest,onChange:a=>r({logClientRequest:a}),disabled:c}),(0,d.jsx)(k,{label:"Log normalized/source request JSON",checked:a.logSourceRequest,onChange:a=>r({logSourceRequest:a}),disabled:c}),(0,d.jsx)(k,{label:"Log target/provider request JSON",checked:a.logTargetRequest,onChange:a=>r({logTargetRequest:a}),disabled:c}),(0,d.jsx)(k,{label:"Log provider response JSON",checked:a.logProviderResponse,onChange:a=>r({logProviderResponse:a}),disabled:c}),(0,d.jsx)(k,{label:"Log errors",checked:a.logErrors,onChange:a=>r({logErrors:a}),disabled:c})]}),(0,d.jsxs)("div",{className:"rounded-lg border border-border bg-background p-3 text-xs text-text-muted",children:["Local files are written under ",(0,d.jsx)("code",{children:"DATA_DIR/logs/requests"}),". Disabling local files stops new request/response dump files; existing files are kept."]}),(0,d.jsxs)("div",{className:"space-y-3 rounded-xl border border-border bg-surface/40 p-4",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("div",{className:"text-sm font-semibold text-text-main",children:"Prompt log rotation"}),(0,d.jsxs)("div",{className:"mt-1 text-xs text-text-muted",children:["Deletes ",(0,d.jsx)("code",{children:"prompt_logs"})," rows AND their referenced payloads older than the retention cutoff. After a full run, only logs from the last N days remain — analytics/metadata for older rows are removed as well."]})]}),(0,d.jsx)(k,{label:"Enable automatic rotation",checked:a.payloadRotationEnabled,onChange:a=>r({payloadRotationEnabled:a}),disabled:c}),(0,d.jsxs)("div",{className:"grid gap-3 md:grid-cols-2 lg:grid-cols-4",children:[(0,d.jsx)(j,{label:"Keep logs for (days)",type:"number",min:1,max:3650,step:1,value:String(a.payloadRetentionDays||60),onChange:a=>r({payloadRetentionDays:Number(a)||60}),disabled:c}),(0,d.jsx)(j,{label:"Daily start time (Vietnam, UTC+7)",type:"time",step:60,value:String(a.payloadRotationScheduleTime||"21:00"),onChange:a=>r({payloadRotationScheduleTime:a||"21:00"}),disabled:c}),(0,d.jsxs)("label",{className:"flex flex-col gap-1 text-xs",children:[(0,d.jsx)("span",{className:"text-text-muted",children:"Maximum automatic run time"}),(0,d.jsx)("select",{value:String(Number(a.payloadRotationMaxRuntimeMinutes??60)),disabled:c,onChange:a=>r({payloadRotationMaxRuntimeMinutes:Number(a.target.value)}),className:"w-full rounded border border-border bg-surface px-2 py-1.5 text-xs text-text-main focus:outline-none focus:ring-1 focus:ring-primary/50 disabled:opacity-50",children:i.map(a=>(0,d.jsx)("option",{value:String(a.value),children:a.label},a.value))})]}),(0,d.jsx)(j,{label:"Prompt-log rows per transaction",type:"number",min:50,max:5e3,step:50,value:String(a.payloadRotationBatchSize||500),onChange:a=>r({payloadRotationBatchSize:Number(a)||500}),disabled:c})]}),(0,d.jsxs)("div",{className:"rounded-lg border border-blue-500/30 bg-blue-500/10 p-3 text-xs text-blue-700 dark:text-blue-300",children:["Automatic rotation runs once per day at the selected Vietnam time. It deletes expired ",(0,d.jsx)("code",{children:"prompt_logs"})," in small transactions and checks the run-time budget between cleanup passes. If the budget is reached, remaining rows continue at the next daily run. Choose ",(0,d.jsx)("strong",{children:"Until finished"})," to keep running until no expired rows remain. On MySQL, orphan ",(0,d.jsx)("code",{children:"prompt_log_payloads"})," rows are reaped as part of the cleanup."]}),(0,d.jsxs)("div",{className:"rounded-lg border border-amber-500/30 bg-amber-500/10 p-3 text-xs text-amber-700 dark:text-amber-300",children:["Deletion is permanent: previews, model/provider/token metadata, and analytics for older rows go away too. Freed space stays inside InnoDB — ",(0,d.jsx)("code",{children:"OPTIMIZE TABLE"})," is needed to shrink the .ibd file (only during a maintenance window, with enough free disk)."]}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)(g.$n,{size:"sm",variant:"secondary",onClick:()=>u("preview-payload-rotation"),loading:c,children:"Preview expired logs"}),(0,d.jsx)(g.$n,{size:"sm",variant:"danger",onClick:()=>u("run-payload-rotation",{confirm:!0}),loading:c,children:"Delete expired logs now"})]}),p&&(0,d.jsxs)("div",{className:"grid gap-2 rounded-lg border border-border bg-background p-3 text-xs md:grid-cols-2 lg:grid-cols-4",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("span",{className:"text-text-muted",children:"Cutoff:"})," ",(0,d.jsx)("span",{className:"text-text-main",children:p.cutoff?new Date(p.cutoff).toLocaleString():"-"})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("span",{className:"text-text-muted",children:void 0===p.promptLogRowsUpdated?"Prompt-log rows past retention:":"Prompt-log rows deleted:"})," ",(0,d.jsx)("span",{className:"text-text-main",children:Number(p.promptLogRowsUpdated??p.promptLogRows??0).toLocaleString()})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("span",{className:"text-text-muted",children:void 0===p.payloadRowsDeleted?"Payload rows to delete:":"Payload rows deleted:"})," ",(0,d.jsx)("span",{className:"text-text-main",children:Number(p.payloadRowsDeleted??p.payloadRowsPastRetention??0).toLocaleString()})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("span",{className:"text-text-muted",children:void 0===p.payloadBytesDeleted?"Estimated payload size:":"Payload size deleted:"})," ",(0,d.jsx)("span",{className:"text-text-main",children:function(a){let b=Number(a||0);if(!Number.isFinite(b)||b<=0)return"0 B";let c=["B","KB","MB","GB","TB"],d=Math.min(c.length-1,Math.floor(Math.log(b)/Math.log(1024))),e=b/1024**d;return`${e.toFixed(e>=10||0===d?1:2)} ${c[d]}`}(p.payloadBytesDeleted??p.payloadBytesPastRetention??p.referencedPayloadBytes)})]}),p.hasMore?(0,d.jsx)("div",{className:"md:col-span-2 lg:col-span-4 text-amber-600",children:"More expired rows remain. Automatic rotation will continue them at the next scheduled run."}):null]}),(0,d.jsx)("div",{className:"text-[11px] text-text-muted",children:"Save to apply the automatic schedule immediately. Preview uses the values currently shown. Manual deletion is a bounded maintenance pass; use automatic rotation for multi-hour cleanup."})]}),v&&(0,d.jsxs)("div",{className:"rounded-lg border border-blue-500/30 bg-blue-500/10 p-3 text-xs text-blue-700 dark:text-blue-300",children:["Prompt logs now support MySQL/MariaDB and PostgreSQL only. MySQL/MariaDB requires ",(0,d.jsx)("code",{children:"mysql2"}),"; PostgreSQL requires ",(0,d.jsx)("code",{children:"pg"}),"."]}),l&&(0,d.jsx)("div",{className:"rounded-lg border border-green-500/30 bg-green-500/10 p-2 text-xs text-green-600",children:l}),n&&(0,d.jsx)("div",{className:"rounded-lg border border-red-500/30 bg-red-500/10 p-2 text-xs text-red-500",children:n}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)(g.$n,{size:"sm",variant:"secondary",onClick:s,loading:c,children:"Reload"}),(0,d.jsx)(g.$n,{size:"sm",variant:"secondary",onClick:()=>u("test"),loading:c,children:"Test connection"}),(0,d.jsx)(g.$n,{size:"sm",variant:"secondary",onClick:()=>u("init"),loading:c,children:"Initialize schema"}),(0,d.jsx)(g.$n,{size:"sm",onClick:t,loading:c,children:"Save"}),(0,d.jsx)(g.$n,{size:"sm",variant:"success",onClick:()=>u("save-and-init"),loading:c,children:"Save & initialize"})]})]})})}let m="(|(sAMAccountName={{username}})(userPrincipalName={{username}})(mail={{username}}))",n="image/svg+xml,image/png,image/webp,image/jpeg,image/gif",o=`${n},image/x-icon,image/vnd.microsoft.icon,.ico`;function p({status:a}){if(!a?.message)return null;let b="error"===a.type?"text-red-600 bg-red-50 border-red-200":"text-green-700 bg-green-50 border-green-200";return(0,d.jsx)("div",{className:`mt-3 rounded-xl border px-4 py-3 text-sm ${b}`,children:a.message})}function q({icon:a,title:b,desc:c,children:e}){return(0,d.jsxs)("section",{className:"rounded-2xl border border-border bg-surface p-6 shadow-sm",children:[(0,d.jsxs)("div",{className:"mb-5 flex items-start gap-3",children:[a&&(0,d.jsx)("span",{className:"material-symbols-outlined text-primary",children:a}),(0,d.jsxs)("div",{children:[(0,d.jsx)("h2",{className:"text-xl font-bold text-text-main",children:b}),c&&(0,d.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:c})]})]}),e]})}function r({label:a,hint:b,children:c}){return(0,d.jsxs)("label",{className:"block",children:[(0,d.jsx)("span",{className:"mb-1 block text-sm font-semibold text-text-main",children:a}),c,b&&(0,d.jsx)("span",{className:"mt-1 block text-xs text-text-muted",children:b})]})}function s(a){return(0,d.jsx)("input",{...a,className:`w-full rounded-xl border border-border bg-background px-3 py-2 text-sm outline-none focus:border-primary ${a.className||""}`})}function t(a){return(0,d.jsx)("textarea",{...a,className:`w-full rounded-xl border border-border bg-background px-3 py-2 text-sm outline-none focus:border-primary ${a.className||""}`})}function u({title:a,desc:b,checked:c,onChange:e,disabled:f}){return(0,d.jsxs)("div",{className:"flex items-start justify-between gap-4 rounded-xl border border-border bg-background px-4 py-3",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("div",{className:"text-sm font-semibold text-text-main",children:a}),b&&(0,d.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:b})]}),(0,d.jsx)("button",{type:"button",disabled:f,onClick:()=>e(!c),className:`relative mt-0.5 h-6 w-11 rounded-full transition disabled:opacity-50 ${c?"bg-primary":"bg-border"}`,children:(0,d.jsx)("span",{className:`absolute top-0.5 h-5 w-5 rounded-full bg-white transition ${c?"left-5":"left-0.5"}`})})]})}function v(){let[a,b]=(0,e.useState)({}),[c,g]=(0,e.useState)(!0),[h,i]=(0,e.useState)({current:"",new:"",confirm:""}),[j,k]=(0,e.useState)({type:"",message:""}),[v,w]=(0,e.useState)(!1),[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)({type:"",message:""}),[B,C]=(0,e.useState)(""),[D,E]=(0,e.useState)(""),F=(0,e.useRef)(null),[G,H]=(0,e.useState)("admin"),[I,J]=(0,e.useState)({type:"",message:""}),[K,L]=(0,e.useState)({ldapEnabled:!1,ldapUrl:"",ldapBindDn:"",ldapBindPassword:"",ldapUserBaseDn:"",ldapUserSearchFilter:m,ldapUserNameAttribute:"sAMAccountName",ldapUserDisplayAttribute:"displayName",ldapUserEmailAttribute:"mail",ldapLoginAllowedGroupDn:"",ldapAdminGroupDn:"",ldapMonitorAdminGroupDn:"",ldapAiGatewaysMonitorsGroupDn:"",ldapNestedGroups:!0,ldapAllowedUsers:[],ldapTlsRejectUnauthorized:!0,ldapConnectTimeoutMs:8e3}),[M,N]=(0,e.useState)({type:"",message:""}),[O,P]=(0,e.useState)(!1),[Q,R]=(0,e.useState)(!1),[S,T]=(0,e.useState)(""),[U,V]=(0,e.useState)([]),[W,X]=(0,e.useState)(!1),[Y,Z]=(0,e.useState)({authMode:"password",oidcIssuerUrl:"",oidcClientId:"",oidcScopes:"openid profile email",oidcLoginLabel:"Sign in with OIDC"}),[$,_]=(0,e.useState)(""),[aa,ab]=(0,e.useState)({type:"",message:""}),[ac,ad]=(0,e.useState)(!1),[ae,af]=(0,e.useState)(!1),[ag,ah]=(0,e.useState)({type:"",message:""}),ai=(0,f.useBranding)(),[aj,ak]=(0,e.useState)(""),[al,am]=(0,e.useState)(""),[an,ao]=(0,e.useState)(""),[ap,aq]=(0,e.useState)({type:"",message:""}),[ar,as]=(0,e.useState)(!1),[at,au]=(0,e.useState)(!1),[av,aw]=(0,e.useState)(!1),[ax,ay]=(0,e.useState)(!1),az=(0,e.useRef)(null),aA=(0,e.useRef)(null),aB=async()=>{g(!0);try{let a=await fetch("/api/settings",{cache:"no-store"}),c=await a.json();b(c),H(c.localLoginUsername||"admin"),L({ldapEnabled:!0===c.ldapEnabled,ldapUrl:c.ldapUrl||"",ldapBindDn:c.ldapBindDn||"",ldapBindPassword:"",ldapUserBaseDn:c.ldapUserBaseDn||c.ldapBaseDn||"",ldapUserSearchFilter:c.ldapUserSearchFilter||m,ldapUserNameAttribute:c.ldapUserNameAttribute||"sAMAccountName",ldapUserDisplayAttribute:c.ldapUserDisplayAttribute||"displayName",ldapUserEmailAttribute:c.ldapUserEmailAttribute||"mail",ldapLoginAllowedGroupDn:c.ldapLoginAllowedGroupDn||"",ldapAdminGroupDn:c.ldapAdminGroupDn||"",ldapMonitorAdminGroupDn:c.ldapMonitorAdminGroupDn||"",ldapAiGatewaysMonitorsGroupDn:c.ldapAiGatewaysMonitorsGroupDn||"",ldapNestedGroups:!1!==c.ldapNestedGroups,ldapAllowedUsers:Array.isArray(c.ldapAllowedUsers)?c.ldapAllowedUsers:[],ldapTlsRejectUnauthorized:!1!==c.ldapTlsRejectUnauthorized,ldapConnectTimeoutMs:c.ldapConnectTimeoutMs||8e3}),Z({authMode:c.authMode||"password",oidcIssuerUrl:c.oidcIssuerUrl||"",oidcClientId:c.oidcClientId||"",oidcScopes:c.oidcScopes||"openid profile email",oidcLoginLabel:c.oidcLoginLabel||"Sign in with OIDC"}),ak(c.siteTitle||""),am(c.siteShortName||""),ao(c.siteDescription||""),("oidc"===c.authMode||"both"===c.authMode)&&af(!0)}catch(a){console.log("Failed to fetch settings:",a)}finally{g(!1)}},aC=async a=>{let c=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),d=await c.json().catch(()=>({}));if(!c.ok)throw Error(d.error||"Failed to save settings");return b(a=>({...a,...d})),d},aD=async c=>{ah({type:"",message:""});let d=!1!==a.sidebarAdvancedToolsVisible;b(a=>({...a,sidebarAdvancedToolsVisible:c}));try{let a=await aC({sidebarAdvancedToolsVisible:c}),d=!1!==a.sidebarAdvancedToolsVisible;b(a=>({...a,sidebarAdvancedToolsVisible:d})),ah({type:"success",message:d?"Advanced tools are visible in the sidebar.":"Advanced tools are hidden from the sidebar."})}catch(a){b(a=>({...a,sidebarAdvancedToolsVisible:d})),ah({type:"error",message:a.message||"Failed to save sidebar setting."})}},aE=async a=>{a.preventDefault(),J({type:"",message:""});try{let a=await aC({localLoginUsername:G});H(a.localLoginUsername||G||"admin"),J({type:"success",message:"Local account name saved."})}catch(a){J({type:"error",message:a.message})}},aF=async a=>{if(a.preventDefault(),h.new!==h.confirm)return void k({type:"error",message:"Passwords do not match"});w(!0),k({type:"",message:""});try{await aC({currentPassword:h.current,newPassword:h.new}),k({type:"success",message:"Password updated successfully"}),i({current:"",new:"",confirm:""})}catch(a){k({type:"error",message:a.message||"Failed to update password"})}finally{w(!1)}},aG=async()=>{y(!0),A({type:"",message:""});try{if(B&&B!==D)throw Error("Backup password confirmation does not match.");if(B&&new TextEncoder().encode(B).length<8)throw Error("Backup password must be at least 8 characters.");let a=await fetch("/api/settings/database/export",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({password:B})});if(!a.ok){let b=await a.json().catch(()=>({}));throw Error(b.error||"Failed to export full-node backup")}let b=await a.json(),c=b?.backup?.encrypted===!0,d=JSON.stringify(b,null,2*!c),e=new Blob([d],{type:"application/json"}),f=URL.createObjectURL(e),g=document.createElement("a"),h=new Date().toISOString().replace(/[.:]/g,"-");g.href=f,g.download=c?`bluerouter-full-backup-${h}.brbackup.json`:`bluerouter-full-backup-${h}.json`,document.body.appendChild(g),g.click(),document.body.removeChild(g),URL.revokeObjectURL(f),A({type:"success",message:c?"Encrypted full-node backup downloaded.":"Plaintext full-node backup downloaded."})}catch(a){A({type:"error",message:a.message||"Failed to export full-node backup."})}finally{y(!1)}},aH=async a=>{let b=a.target.files?.[0];if(b){y(!0),A({type:"",message:""});try{let a=await b.text(),c=JSON.parse(a),d=c?.backup?.encrypted===!0;if(d&&!B)throw Error("Enter the backup password before importing this encrypted backup.");let e=await fetch("/api/settings/database",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({payload:c,password:d?B:""})}),f=await e.json().catch(()=>({}));if(!e.ok)throw Error(f.error||"Failed to import backup");await aB();let g=f.resourceMonitorImported?`Restored ${f.resourceMonitorServerCount||0} Resource Monitor server(s) and ${f.resourceMonitorHistoryCount||0} history sample(s).`:"Legacy backup: current Resource Monitor data was kept.",h=f.brandingImported?`Restored ${f.brandingAssetCount||0} branding asset(s).`:"Current logo and favicon were kept.",i=f.auditProxyImported?`Audit Proxy restored; listener is ${f.listenerRunning?"running":"stopped"}.`:"legacy-database"===f.backupKind?`Legacy Audit Proxy policy: ${f.auditProxyReason||"not present"}.`:"Audit Proxy data was not restored.",j=f.rootCAImported?"Root CA certificate/private key restored.":f.rootCAPreserved?"Current Root CA was preserved.":"";A({type:"success",message:`Backup imported successfully. ${g} ${h} ${i} ${j}`})}catch(a){A({type:"error",message:a.message||"Invalid backup file."})}finally{F.current&&(F.current.value=""),y(!1)}}},aI=(a,b)=>L(c=>({...c,[a]:b})),aJ=async a=>{a?.preventDefault?.(),P(!0),N({type:"",message:""});try{let a={...K,ldapBaseDn:K.ldapUserBaseDn,ldapAllowedUsers:K.ldapAllowedUsers};a.ldapBindPassword||delete a.ldapBindPassword;let b=await aC(a);L(a=>({...a,ldapBindPassword:"",ldapEnabled:!0===b.ldapEnabled,ldapUserBaseDn:b.ldapUserBaseDn||b.ldapBaseDn||a.ldapUserBaseDn,ldapLoginAllowedGroupDn:b.ldapLoginAllowedGroupDn||"",ldapAdminGroupDn:b.ldapAdminGroupDn||"",ldapMonitorAdminGroupDn:b.ldapMonitorAdminGroupDn||"",ldapAiGatewaysMonitorsGroupDn:b.ldapAiGatewaysMonitorsGroupDn||"",ldapNestedGroups:!1!==b.ldapNestedGroups,ldapAllowedUsers:Array.isArray(b.ldapAllowedUsers)?b.ldapAllowedUsers:a.ldapAllowedUsers})),N({type:"success",message:"LDAP settings saved."})}catch(a){N({type:"error",message:a.message||"Failed to save LDAP settings"})}finally{P(!1)}},aK=async()=>{R(!0),N({type:"",message:""});try{await aJ();let a=await fetch("/api/auth/ldap/test",{method:"POST"}),b=await a.json().catch(()=>({}));a.ok&&b.ok?N({type:"success",message:b.message||"LDAP connection OK."}):N({type:"error",message:b.error||"LDAP test failed."})}catch(a){N({type:"error",message:a.message||"LDAP test failed."})}finally{R(!1)}},aL=async()=>{X(!0),N({type:"",message:""});try{await aJ();let a=await fetch(`/api/auth/ldap/users?q=${encodeURIComponent(S)}`,{cache:"no-store"}),b=await a.json().catch(()=>({}));a.ok?(V(b.users||[]),N({type:"success",message:`Loaded ${(b.users||[]).length} LDAP user(s).`})):N({type:"error",message:b.error||"Failed to load LDAP users."})}catch(a){N({type:"error",message:a.message||"Failed to load LDAP users."})}finally{X(!1)}},aM=a=>{let b=String(a||"").trim();b&&L(a=>{let c=new Set(a.ldapAllowedUsers||[]);return c.has(b)?c.delete(b):c.add(b),{...a,ldapAllowedUsers:[...c]}})},aN=async(b=Y.authMode||"password")=>{let c=Y.oidcIssuerUrl.trim(),d=Y.oidcClientId.trim(),e=Y.oidcScopes.trim(),f=Y.oidcLoginLabel.trim(),g=$.trim();if("password"!==b&&(!c||!d||!g)&&!a.oidcConfigured)return void ab({type:"error",message:"Issuer URL, client ID, and client secret are required to enable OIDC."});ad(!0),ab({type:"",message:""});try{let a={authMode:b,oidcIssuerUrl:c,oidcClientId:d,oidcScopes:e||"openid profile email",oidcLoginLabel:f||"Sign in with OIDC"};g&&(a.oidcClientSecret=g);let h=await aC(a);Z({authMode:h.authMode||b,oidcIssuerUrl:h.oidcIssuerUrl||c,oidcClientId:h.oidcClientId||d,oidcScopes:h.oidcScopes||e||"openid profile email",oidcLoginLabel:h.oidcLoginLabel||f||"Sign in with OIDC"}),_(""),ab({type:"success",message:"OIDC settings saved."})}catch(a){ab({type:"error",message:a.message||"Failed to save OIDC settings"})}finally{ad(!1)}},aO=async(a,b)=>{if(!b)return;if(b.size>1048576)return void aq({type:"error",message:"File exceeds 1 MB limit."});let c="logo"===a?au:aw;c(!0),aq({type:"",message:""});try{let c=new FormData;c.append("asset",a),c.append("file",b);let d=await fetch("/api/branding/upload",{method:"POST",body:c}),e=await d.json().catch(()=>({}));if(!d.ok)throw Error(e.error||"Upload failed");(0,f.notifyBrandingChanged)(),aq({type:"success",message:`${"logo"===a?"Logo":"Favicon"} uploaded.`})}catch(a){aq({type:"error",message:a.message||"Upload failed."})}finally{c(!1)}},aP=async a=>{let b=a.target.files?.[0];await aO("logo",b),az.current&&(az.current.value="")},aQ=async a=>{let b=a.target.files?.[0];await aO("favicon",b),aA.current&&(aA.current.value="")},aR=async a=>{a.preventDefault(),as(!0),aq({type:"",message:""});try{await aC({siteTitle:aj.trim(),siteShortName:al.trim(),siteDescription:an.trim()}),(0,f.notifyBrandingChanged)(),aq({type:"success",message:"Branding text saved."})}catch(a){aq({type:"error",message:a.message||"Failed to save branding."})}finally{as(!1)}},aS=async a=>{aq({type:"",message:""});try{let b=await fetch(`/api/branding?asset=${a}`,{method:"DELETE"}),c=await b.json().catch(()=>({}));if(!b.ok)throw Error(c.error||"Failed to remove asset");(0,f.notifyBrandingChanged)(),aq({type:"success",message:`${"logo"===a?"Logo":"Favicon"} removed.`})}catch(a){aq({type:"error",message:a.message||"Failed to remove asset."})}},aT=async()=>{ay(!0),aq({type:"",message:""});try{let a=await fetch("/api/branding",{method:"DELETE"});if(!a.ok){let b=await a.json().catch(()=>({}));throw Error(b.error||"Failed to reset branding")}await aC({siteTitle:"",siteShortName:"",siteDescription:""}),ak(""),am(""),ao(""),(0,f.notifyBrandingChanged)(),aq({type:"success",message:"Branding reset to defaults."})}catch(a){aq({type:"error",message:a.message||"Failed to reset branding."})}finally{ay(!1)}};return c?(0,d.jsx)("div",{className:"p-8 text-text-muted",children:"Loading settings..."}):(0,d.jsxs)("div",{className:"mx-auto max-w-6xl space-y-6 p-6",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("h1",{className:"text-3xl font-bold text-text-main",children:"Settings"}),(0,d.jsx)("p",{className:"mt-1 text-text-muted",children:"Configure dashboard preferences, request logging, database backup, and authentication."})]}),(0,d.jsxs)(q,{icon:"view_sidebar",title:"Sidebar tools",desc:"Show or hide advanced dashboard tools to keep the sidebar clean.",children:[(0,d.jsx)(u,{title:"Show Advanced tools",desc:"When disabled, Media / Web, AI Traffic Gateway, CLI Tools, Proxy Pools, Skills, Console Log and Translator are hidden from the sidebar. Core admin pages remain visible.",checked:!1!==a.sidebarAdvancedToolsVisible,onChange:aD}),(0,d.jsx)(p,{status:ag})]}),(0,d.jsxs)(q,{icon:"palette",title:"Branding",desc:"Customize site title, logo and favicon shown in the dashboard, browser tab and login page. Max 1 MB per file.",children:[(0,d.jsxs)("div",{className:"grid gap-6 lg:grid-cols-2",children:[(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("div",{className:"mb-2 text-sm font-semibold text-text-main",children:"Logo"}),(0,d.jsxs)("div",{className:"flex items-center gap-4 rounded-xl border border-border bg-background p-4",children:[(0,d.jsx)("div",{className:"flex h-16 w-16 shrink-0 items-center justify-center overflow-hidden rounded-lg border border-border bg-surface",children:ai?.logoUrl?(0,d.jsx)("img",{src:ai.logoUrl,alt:"Current logo",className:"max-h-full max-w-full object-contain"}):(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted",children:"hub"})}),(0,d.jsxs)("div",{className:"flex-1 space-y-2",children:[(0,d.jsx)("div",{className:"text-xs text-text-muted",children:"Shown in the dashboard sidebar and login page. SVG, PNG, WebP, JPEG, GIF."}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)("button",{type:"button",disabled:at,onClick:()=>az.current?.click(),className:"rounded-xl bg-primary px-3 py-1.5 text-xs font-semibold text-white disabled:opacity-50",children:at?"Uploading...":ai?.logoUrl?"Replace logo":"Upload logo"}),ai?.logoUrl?(0,d.jsx)("button",{type:"button",onClick:()=>aS("logo"),className:"rounded-xl border border-border px-3 py-1.5 text-xs font-semibold text-text-main hover:border-red-300 hover:text-red-600",children:"Remove"}):null]})]}),(0,d.jsx)("input",{ref:az,type:"file",accept:n,className:"hidden",onChange:aP})]})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("div",{className:"mb-2 text-sm font-semibold text-text-main",children:"Favicon"}),(0,d.jsxs)("div",{className:"flex items-center gap-4 rounded-xl border border-border bg-background p-4",children:[(0,d.jsx)("div",{className:"flex h-16 w-16 shrink-0 items-center justify-center overflow-hidden rounded-lg border border-border bg-surface",children:ai?.faviconUrl?(0,d.jsx)("img",{src:ai.faviconUrl,alt:"Current favicon",className:"max-h-10 max-w-10 object-contain"}):(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted",children:"public"})}),(0,d.jsxs)("div",{className:"flex-1 space-y-2",children:[(0,d.jsx)("div",{className:"text-xs text-text-muted",children:"Shown in the browser tab. ICO, SVG, PNG, WebP, JPEG, GIF."}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)("button",{type:"button",disabled:av,onClick:()=>aA.current?.click(),className:"rounded-xl bg-primary px-3 py-1.5 text-xs font-semibold text-white disabled:opacity-50",children:av?"Uploading...":ai?.faviconUrl?"Replace favicon":"Upload favicon"}),ai?.faviconUrl?(0,d.jsx)("button",{type:"button",onClick:()=>aS("favicon"),className:"rounded-xl border border-border px-3 py-1.5 text-xs font-semibold text-text-main hover:border-red-300 hover:text-red-600",children:"Remove"}):null]})]}),(0,d.jsx)("input",{ref:aA,type:"file",accept:o,className:"hidden",onChange:aQ})]})]})]}),(0,d.jsxs)("form",{onSubmit:aR,className:"space-y-3",children:[(0,d.jsx)(r,{label:"Site title",hint:"Shown in browser tab and login page. Leave blank for default.",children:(0,d.jsx)(s,{value:aj,onChange:a=>ak(a.target.value),placeholder:"AI Router Gateway"})}),(0,d.jsx)(r,{label:"Company short name",hint:"Shown in dashboard sidebar and login hero text. Defaults to site title/sidebar default or 'Fujinet' on login.",children:(0,d.jsx)(s,{value:al,onChange:a=>am(a.target.value),placeholder:"Fujinet"})}),(0,d.jsx)(r,{label:"Description",hint:"Used for browser metadata.",children:(0,d.jsx)(t,{rows:3,value:an,onChange:a=>ao(a.target.value),placeholder:"AI Infrastructure Management"})}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)("button",{type:"submit",disabled:ar,className:"rounded-xl bg-primary px-4 py-2 text-sm font-semibold text-white disabled:opacity-50",children:ar?"Saving...":"Save branding text"}),(0,d.jsx)("button",{type:"button",disabled:ax,onClick:aT,className:"rounded-xl border border-border px-4 py-2 text-sm font-semibold text-text-main hover:border-red-300 hover:text-red-600 disabled:opacity-50",children:ax?"Resetting...":"Reset to defaults"})]})]})]}),(0,d.jsx)(p,{status:ap})]}),(0,d.jsx)(q,{icon:"shield",title:"Dashboard Login",desc:"Local account remains available even when LDAP is enabled.",children:(0,d.jsxs)("div",{className:"grid gap-6 lg:grid-cols-2",children:[(0,d.jsxs)("form",{onSubmit:aE,className:"space-y-3",children:[(0,d.jsx)("h3",{className:"font-semibold text-text-main",children:"Local account"}),(0,d.jsx)(r,{label:"Local username",children:(0,d.jsx)(s,{value:G,onChange:a=>H(a.target.value)})}),(0,d.jsx)("button",{className:"rounded-xl bg-primary px-4 py-2 text-sm font-semibold text-white",children:"Save account"}),(0,d.jsx)(p,{status:I})]}),(0,d.jsxs)("form",{onSubmit:aF,className:"space-y-3",children:[(0,d.jsx)("h3",{className:"font-semibold text-text-main",children:"Local password"}),a.hasPassword&&(0,d.jsx)(r,{label:"Current password",children:(0,d.jsx)(s,{type:"password",value:h.current,onChange:a=>i({...h,current:a.target.value}),required:!0})}),(0,d.jsx)(r,{label:"New password",children:(0,d.jsx)(s,{type:"password",value:h.new,onChange:a=>i({...h,new:a.target.value}),required:!0})}),(0,d.jsx)(r,{label:"Confirm password",children:(0,d.jsx)(s,{type:"password",value:h.confirm,onChange:a=>i({...h,confirm:a.target.value}),required:!0})}),(0,d.jsx)("button",{disabled:v,className:"rounded-xl bg-primary px-4 py-2 text-sm font-semibold text-white disabled:opacity-50",children:a.hasPassword?"Update Password":"Set Password"}),(0,d.jsx)(p,{status:j})]})]})}),(0,d.jsx)("div",{id:"request-logging",className:"scroll-mt-6",children:(0,d.jsx)(l,{})}),(0,d.jsxs)(q,{icon:"database",title:"Full Node Backup",desc:"Export or restore the database, Audit Proxy node configuration, Root CA, Resource Monitor data, logo and favicon.",children:[(0,d.jsxs)("div",{className:"mb-4 grid gap-3 md:grid-cols-2",children:[(0,d.jsx)(r,{label:"Backup password (optional)",hint:"Leave blank for plaintext JSON. When set, the entire backup is encrypted with AES-256-GCM and scrypt. Minimum 8 characters.",children:(0,d.jsx)(s,{type:"password",autoComplete:"new-password",value:B,onChange:a=>C(a.target.value),placeholder:"Optional encryption password"})}),(0,d.jsx)(r,{label:"Confirm password (export only)",hint:"Used only to prevent exporting a backup with a mistyped password. Not required when importing.",children:(0,d.jsx)(s,{type:"password",autoComplete:"new-password",value:D,onChange:a=>E(a.target.value),placeholder:"Repeat password before download"})})]}),(0,d.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,d.jsx)("button",{onClick:aG,disabled:x,className:"rounded-xl bg-primary px-4 py-2 text-sm font-semibold text-white disabled:opacity-50",children:"Download Full Backup"}),(0,d.jsx)("button",{onClick:()=>F.current?.click(),disabled:x,className:"rounded-xl border border-border px-4 py-2 text-sm font-semibold text-text-main hover:border-primary/50 disabled:opacity-50",children:"Import Backup"}),(0,d.jsx)("input",{ref:F,type:"file",accept:"application/json,.brbackup",className:"hidden",onChange:aH})]}),(0,d.jsx)("div",{className:"mt-3 rounded-xl border border-amber-500/30 bg-amber-500/10 px-4 py-3 text-xs leading-5 text-amber-800 dark:text-amber-300",children:"Full backups include API credentials, Audit Proxy bcrypt password hashes and the Root CA private key. Anyone holding the Root CA key can issue certificates trusted by enrolled clients. Use a password whenever the file leaves the secured backup location."}),(0,d.jsx)("p",{className:"mt-3 text-xs text-text-muted",children:"Import validates the complete Root CA pair and Audit Proxy configuration before mutation, applies the restored runtime state immediately, and rolls back database/configuration/CA state if restore fails. Legacy v2 database backups remain supported."}),(0,d.jsx)(p,{status:z})]}),(0,d.jsx)(q,{icon:"corporate_fare",title:"LDAP / Active Directory Login",desc:"Search users from a User Base DN, restrict login by group DN, and grant admin by group DN. The old Selected LDAP users list is kept as a manual admin list.",children:(0,d.jsxs)("form",{onSubmit:aJ,className:"space-y-5",children:[(0,d.jsx)("div",{className:"flex flex-wrap gap-3",children:(0,d.jsx)("button",{type:"button",onClick:()=>aI("ldapEnabled",!K.ldapEnabled),className:`rounded-xl px-3 py-2 text-sm font-semibold ${K.ldapEnabled?"bg-primary text-white":"border border-border text-text-muted"}`,children:K.ldapEnabled?"Enabled":"Disabled"})}),(0,d.jsxs)("div",{className:"grid gap-4 lg:grid-cols-2",children:[(0,d.jsx)(r,{label:"LDAP URL",children:(0,d.jsx)(s,{value:K.ldapUrl,onChange:a=>aI("ldapUrl",a.target.value),placeholder:"ldap://dc01.company.local:389"})}),(0,d.jsx)(r,{label:"LDAP User Base DN",hint:"OU/container/domain where user objects are searched. Do not use a group DN here.",children:(0,d.jsx)(s,{value:K.ldapUserBaseDn,onChange:a=>aI("ldapUserBaseDn",a.target.value),placeholder:"OU=Users,OU=xxx,DC=xx,DC=vn"})}),(0,d.jsx)(r,{label:"LDAP Bind DN",children:(0,d.jsx)(s,{value:K.ldapBindDn,onChange:a=>aI("ldapBindDn",a.target.value),placeholder:"CN=svc-bluerouter,OU=Service Accounts,DC=company,DC=local"})}),(0,d.jsx)(r,{label:"LDAP Bind Password",children:(0,d.jsx)(s,{type:"password",value:K.ldapBindPassword,onChange:a=>aI("ldapBindPassword",a.target.value),placeholder:a.ldapHasBindPassword?"Saved — leave blank to keep":"Service account password"})}),(0,d.jsx)(r,{label:"LDAP Login Allowed Group DN",hint:"Only members of this group can log in. Leave blank to allow any valid LDAP user.",children:(0,d.jsx)(s,{value:K.ldapLoginAllowedGroupDn,onChange:a=>aI("ldapLoginAllowedGroupDn",a.target.value),placeholder:"CN=Apikeys_Groups,OU=AppGroups,OU=xxx,DC=xx,DC=vn"})}),(0,d.jsx)(r,{label:"LDAP Admin Group DN",hint:"Members of this group get full admin dashboard access.",children:(0,d.jsx)(s,{value:K.ldapAdminGroupDn,onChange:a=>aI("ldapAdminGroupDn",a.target.value),placeholder:"CN=BlueRouter_Admins,OU=AppGroups,OU=xxx,DC=xx,DC=vn"})}),(0,d.jsx)(r,{label:"LDAP Monitor Admin Group DN",hint:"Members can use only Endpoint, API Keys, Usage, Analytics, Quota Tracker and Prompt Logs with admin-like permissions inside those tabs.",children:(0,d.jsx)(s,{value:K.ldapMonitorAdminGroupDn,onChange:a=>aI("ldapMonitorAdminGroupDn",a.target.value),placeholder:"CN=BlueRouter_Monitor_Admins,OU=AppGroups,OU=xxx,DC=xx,DC=vn"})}),(0,d.jsx)(r,{label:"LDAP AI Gateways Monitors Group DN",hint:"Members log in as regular users but the Analytics page aggregates statistics for every API key that has an owner, instead of only their own keys.",children:(0,d.jsx)(s,{value:K.ldapAiGatewaysMonitorsGroupDn,onChange:a=>aI("ldapAiGatewaysMonitorsGroupDn",a.target.value),placeholder:"CN=BlueRouter_AI_Gateways_Monitors,OU=AppGroups,OU=xxx,DC=xx,DC=vn"})})]}),(0,d.jsxs)("div",{className:"grid gap-4 lg:grid-cols-2",children:[(0,d.jsx)(r,{label:"User search filter",hint:"Use {{username}} placeholder.",children:(0,d.jsx)(s,{value:K.ldapUserSearchFilter,onChange:a=>aI("ldapUserSearchFilter",a.target.value)})}),(0,d.jsx)(r,{label:"Login group mode",hint:"Nested groups uses AD matching rule 1.2.840.113556.1.4.1941.",children:(0,d.jsx)(u,{title:"Nested group membership",desc:"Recommended for Active Directory nested groups.",checked:K.ldapNestedGroups,onChange:a=>aI("ldapNestedGroups",a)})}),(0,d.jsx)(r,{label:"Username attribute",children:(0,d.jsx)(s,{value:K.ldapUserNameAttribute,onChange:a=>aI("ldapUserNameAttribute",a.target.value)})}),(0,d.jsx)(r,{label:"Display attribute",children:(0,d.jsx)(s,{value:K.ldapUserDisplayAttribute,onChange:a=>aI("ldapUserDisplayAttribute",a.target.value)})}),(0,d.jsx)(r,{label:"Email attribute",children:(0,d.jsx)(s,{value:K.ldapUserEmailAttribute,onChange:a=>aI("ldapUserEmailAttribute",a.target.value)})}),(0,d.jsx)(r,{label:"Connect timeout ms",children:(0,d.jsx)(s,{type:"number",value:K.ldapConnectTimeoutMs,onChange:a=>aI("ldapConnectTimeoutMs",a.target.value)})})]}),(0,d.jsx)(u,{title:"Reject invalid TLS certificates",desc:"Disable only for test/self-signed LDAP TLS.",checked:K.ldapTlsRejectUnauthorized,onChange:a=>aI("ldapTlsRejectUnauthorized",a)}),(0,d.jsxs)("div",{className:"rounded-2xl border border-border bg-background p-4",children:[(0,d.jsxs)("div",{className:"mb-3",children:[(0,d.jsx)("h3",{className:"font-semibold text-text-main",children:"Manual admin users / LDAP owner list"}),(0,d.jsx)("p",{className:"mt-1 text-xs text-text-muted",children:"Users loaded here come from Login Allowed Group DN when set. Selected users are also treated as manual admins for backward compatibility."})]}),(0,d.jsxs)("div",{className:"mb-3 flex gap-2",children:[(0,d.jsx)(s,{value:S,onChange:a=>T(a.target.value),placeholder:"Search users..."}),(0,d.jsx)("button",{type:"button",onClick:aL,disabled:W,className:"rounded-xl border border-border px-4 py-2 text-sm font-semibold text-text-main disabled:opacity-50",children:W?"Loading...":"Load users"})]}),U.length>0&&(0,d.jsx)("div",{className:"max-h-72 overflow-auto rounded-xl border border-border",children:U.map(a=>{let b=K.ldapAllowedUsers.includes(a.username);return(0,d.jsxs)("button",{type:"button",onClick:()=>aM(a.username),className:`flex w-full items-center justify-between gap-3 border-b border-border px-3 py-2 text-left text-sm last:border-b-0 ${b?"bg-primary/10":"bg-background hover:bg-surface"}`,children:[(0,d.jsxs)("span",{children:[(0,d.jsx)("span",{className:"font-semibold text-text-main",children:a.displayName||a.username}),(0,d.jsxs)("span",{className:"ml-2 text-text-muted",children:[a.username,a.email?` \xb7 ${a.email}`:""]})]}),(0,d.jsx)("span",{className:"material-symbols-outlined text-primary",children:b?"check_circle":"radio_button_unchecked"})]},a.dn||a.username)})}),(0,d.jsxs)("div",{className:"mt-3",children:[(0,d.jsxs)("div",{className:"mb-2 text-sm font-semibold text-text-main",children:["Selected manual admin users (",K.ldapAllowedUsers.length,")"]}),0===K.ldapAllowedUsers.length?(0,d.jsx)("div",{className:"text-sm text-text-muted",children:"No users selected."}):(0,d.jsx)("div",{className:"flex flex-wrap gap-2",children:K.ldapAllowedUsers.map(a=>(0,d.jsxs)("button",{type:"button",onClick:()=>aM(a),className:"rounded-full border border-primary/30 bg-primary/10 px-3 py-1 text-xs text-primary",children:[a," \xd7"]},a))})]})]}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-3",children:[(0,d.jsx)("button",{type:"button",onClick:aK,disabled:Q,className:"rounded-xl border border-border px-4 py-2 text-sm font-semibold text-text-main disabled:opacity-50",children:Q?"Testing...":"Save & test LDAP"}),(0,d.jsx)("button",{type:"submit",disabled:O,className:"rounded-xl bg-primary px-4 py-2 text-sm font-semibold text-white disabled:opacity-50",children:O?"Saving...":"Save LDAP settings"})]}),(0,d.jsx)(p,{status:M})]})}),(0,d.jsxs)(q,{icon:"lock_open",title:"OIDC Dashboard Login",desc:"oidc"===a.authMode?"OIDC active":"both"===a.authMode?"Password + OIDC active":"Optional SSO via Authentik/Keycloak/Google",children:[(0,d.jsx)("button",{type:"button",onClick:()=>af(a=>!a),className:"mb-4 rounded-xl border border-border px-4 py-2 text-sm font-semibold text-text-main",children:ae?"Hide OIDC settings":"Show OIDC settings"}),ae&&(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsx)("div",{className:"grid gap-3 md:grid-cols-3",children:[{value:"password",title:"Password/LDAP",desc:"Keep local and LDAP login."},{value:"oidc",title:"OIDC only",desc:"Disable local/LDAP login when configured."},{value:"both",title:"Both",desc:"Allow either OIDC or local/LDAP."}].map(a=>{let b=Y.authMode===a.value;return(0,d.jsxs)("button",{type:"button",onClick:()=>Z(b=>({...b,authMode:a.value})),className:`rounded-xl border p-3 text-left ${b?"border-primary bg-primary/10":"border-border bg-background hover:border-primary/40"}`,children:[(0,d.jsx)("div",{className:"font-semibold text-text-main",children:a.title}),(0,d.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:a.desc})]},a.value)})}),(0,d.jsxs)("div",{className:"grid gap-4 lg:grid-cols-2",children:[(0,d.jsx)(r,{label:"Issuer URL",children:(0,d.jsx)(s,{value:Y.oidcIssuerUrl,onChange:a=>Z({...Y,oidcIssuerUrl:a.target.value})})}),(0,d.jsx)(r,{label:"Client ID",children:(0,d.jsx)(s,{value:Y.oidcClientId,onChange:a=>Z({...Y,oidcClientId:a.target.value})})}),(0,d.jsx)(r,{label:"Client Secret",children:(0,d.jsx)(s,{type:"password",value:$,onChange:a=>_(a.target.value),placeholder:a.oidcConfigured?"Saved — leave blank to keep":"Client secret"})}),(0,d.jsx)(r,{label:"Scopes",children:(0,d.jsx)(s,{value:Y.oidcScopes,onChange:a=>Z({...Y,oidcScopes:a.target.value})})}),(0,d.jsx)(r,{label:"Login label",children:(0,d.jsx)(s,{value:Y.oidcLoginLabel,onChange:a=>Z({...Y,oidcLoginLabel:a.target.value})})})]}),(0,d.jsx)("button",{type:"button",onClick:()=>aN(),disabled:ac,className:"rounded-xl bg-primary px-4 py-2 text-sm font-semibold text-white disabled:opacity-50",children:ac?"Saving...":"Save OIDC settings"}),(0,d.jsx)(p,{status:aa})]})]})]})}}};var b=require("../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[4741,2430,8316,8946,402,5681,4404,6064,6328,8640],()=>b(b.s=1287));module.exports=c})();
|
|
1
|
+
(()=>{var a={};a.id=3471,a.ids=[3471],a.modules={10:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g});var d=c(5735),e=c(24429),f=c.n(e);function g({children:a}){return(0,d.jsx)("div",{className:f().profileLayout,children:a})}},1932:a=>{"use strict";a.exports=require("url")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},4573:a=>{"use strict";a.exports=require("node:buffer")},8128:a=>{"use strict";a.exports=require("next/dist/server/runtime-reacts.external.js")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},14222:(a,b,c)=>{"use strict";c.r(b),c.d(b,{__next_app__:()=>x,handler:()=>z,routeModule:()=>y});var d=c(21635),e=c(86315),f=c(1020),g=c(61287),h={};for(let a in g)0>["default","__next_app__","routeModule","handler"].indexOf(a)&&(h[a]=()=>g[a]);c.d(b,h);let i=(0,d.p)(()=>Promise.resolve().then(c.bind(c,32059))),j=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,95547,23))),k=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,55091,23))),l=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,45270,23))),m=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,28193,23))),n=(0,d.p)(()=>Promise.resolve().then(c.bind(c,30508))),o=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,95547,23))),p=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,55091,23))),q=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,45270,23))),r=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,28193,23))),s=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,95547,23))),t=(0,d.p)(()=>Promise.resolve().then(c.bind(c,10))),u=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,95547,23))),v={children:["",{children:["(dashboard)",{children:["dashboard",{children:["profile",{children:["__PAGE__",{},{page:[(0,d.p)(()=>Promise.resolve().then(c.bind(c,50047))),"D:\\bluerouter\\src\\app\\(dashboard)\\dashboard\\profile\\page.js"]}]},{layout:[t,"D:\\bluerouter\\src\\app\\(dashboard)\\dashboard\\profile\\layout.js"],"global-error":[u,"next/dist/client/components/builtin/global-error.js"]},[]]},{"global-error":[s,"next/dist/client/components/builtin/global-error.js"]},[]]},{layout:[n,"D:\\bluerouter\\src\\app\\(dashboard)\\layout.js"],"global-error":[o,"next/dist/client/components/builtin/global-error.js"],"not-found":[p,"next/dist/client/components/builtin/not-found.js"],forbidden:[q,"next/dist/client/components/builtin/forbidden.js"],unauthorized:[r,"next/dist/client/components/builtin/unauthorized.js"],metadata:{icon:[async a=>(await (0,d.p)(()=>Promise.resolve().then(c.bind(c,70440)))()).default(a)],apple:[],openGraph:[],twitter:[],manifest:"/manifest.webmanifest"}},[]]},{layout:[i,"D:\\bluerouter\\src\\app\\layout.js"],"global-error":[j,"next/dist/client/components/builtin/global-error.js"],"not-found":[k,"next/dist/client/components/builtin/not-found.js"],forbidden:[l,"next/dist/client/components/builtin/forbidden.js"],unauthorized:[m,"next/dist/client/components/builtin/unauthorized.js"],metadata:{icon:[async a=>(await (0,d.p)(()=>Promise.resolve().then(c.bind(c,70440)))()).default(a)],apple:[],openGraph:[],twitter:[],manifest:"/manifest.webmanifest"}},[]]}.children,w=(0,e.H)({tree:v,page:"/(dashboard)/dashboard/profile/page",pathname:"/dashboard/profile",require:c,loadChunk:()=>Promise.resolve(),interopDefault:f.T}),x=w.__next_app__,y=w.routeModule,z=w.handler},18011:(a,b,c)=>{Promise.resolve().then(c.bind(c,97759))},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},19771:a=>{"use strict";a.exports=require("process")},20503:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d={MutableRequestCookiesAdapter:function(){return o},ReadonlyRequestCookiesError:function(){return j},RequestCookiesAdapter:function(){return k},appendMutableCookies:function(){return n},areCookiesMutableInCurrentPhase:function(){return q},createCookiesWithMutableAccessCheck:function(){return p},getModifiedCookieValues:function(){return m},responseCookiesToRequestCookies:function(){return s}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(91488),g=c(20445),h=c(29294),i=c(43014);class j extends Error{constructor(){super("Cookies can only be modified in a Server Action or Route Handler. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options"),Object.defineProperty(this,"__NEXT_ERROR_CODE",{value:"E1180",enumerable:!1,configurable:!0})}static callable(){throw new j}}class k{static seal(a){return new Proxy(a,{get(a,b,c){switch(b){case"clear":case"delete":case"set":return j.callable;default:return g.ReflectAdapter.get(a,b,c)}}})}static fresh(a){return new Proxy(a,{get:(a,b,c)=>g.ReflectAdapter.get(a,b,c)})}}let l=Symbol.for("next.mutated.cookies");function m(a){let b=a[l];return b&&Array.isArray(b)&&0!==b.length?b:[]}function n(a,b){let c=m(b);if(0===c.length)return!1;let d=new f.ResponseCookies(a),e=d.getAll();for(let a of c)d.set(a);for(let a of e)d.set(a);return!0}class o{static wrap(a,b){let c=new f.ResponseCookies(new Headers);for(let b of a.getAll())c.set(b);let d=[],e=new Set,j=()=>{let a=h.workAsyncStorage.getStore();if(a&&(a.pathWasRevalidated=i.ActionDidRevalidateStaticAndDynamic),d=c.getAll().filter(a=>e.has(a.name)),b){let a=[];for(let b of d){let c=new f.ResponseCookies(new Headers);c.set(b),a.push(c.toString())}b(a)}},k=new Proxy(c,{get(a,b,c){switch(b){case l:return d;case"delete":return function(...b){e.add("string"==typeof b[0]?b[0]:b[0].name);try{return a.delete(...b),k}finally{j()}};case"set":return function(...b){e.add("string"==typeof b[0]?b[0]:b[0].name);try{return a.set(...b),k}finally{j()}};default:return g.ReflectAdapter.get(a,b,c)}}});return k}}function p(a){let b=new Proxy(a.mutableCookies,{get(c,d,e){switch(d){case"delete":return function(...d){return r(a,"cookies().delete"),c.delete(...d),b};case"set":return function(...d){return r(a,"cookies().set"),c.set(...d),b};default:return g.ReflectAdapter.get(c,d,e)}}});return b}function q(a){return"action"===a.phase}function r(a,b){if(!q(a))throw new j}function s(a){let b=new f.RequestCookies(new Headers);for(let c of a.getAll())b.set(c);return b}},21820:a=>{"use strict";a.exports=require("os")},22484:()=>{},24429:a=>{a.exports={profileLayout:"layout_profileLayout__IGvnc"}},27910:a=>{"use strict";a.exports=require("stream")},28354:a=>{"use strict";a.exports=require("util")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},33873:a=>{"use strict";a.exports=require("path")},34631:a=>{"use strict";a.exports=require("tls")},38522:a=>{"use strict";a.exports=require("node:zlib")},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},41204:a=>{"use strict";a.exports=require("string_decoder")},43014:(a,b)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var c={ActionDidNotRevalidate:function(){return e},ActionDidRevalidateDynamicOnly:function(){return g},ActionDidRevalidateStaticAndDynamic:function(){return f}};for(var d in c)Object.defineProperty(b,d,{enumerable:!0,get:c[d]});let e=0,f=1,g=2},46060:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external.js")},46293:a=>{"use strict";a.exports=require("sql.js")},50047:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"D:\\\\bluerouter\\\\src\\\\app\\\\(dashboard)\\\\dashboard\\\\profile\\\\page.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"D:\\bluerouter\\src\\app\\(dashboard)\\dashboard\\profile\\page.js","default")},51455:a=>{"use strict";a.exports=require("node:fs/promises")},52355:(a,b,c)=>{Promise.resolve().then(c.bind(c,50047))},53053:a=>{"use strict";a.exports=require("node:diagnostics_channel")},55511:a=>{"use strict";a.exports=require("crypto")},58868:()=>{},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},64939:a=>{"use strict";a.exports=import("pg")},66136:a=>{"use strict";a.exports=require("timers")},73024:a=>{"use strict";a.exports=require("node:fs")},74075:a=>{"use strict";a.exports=require("zlib")},76760:a=>{"use strict";a.exports=require("node:path")},77598:a=>{"use strict";a.exports=require("node:crypto")},78474:a=>{"use strict";a.exports=require("node:events")},79428:a=>{"use strict";a.exports=require("buffer")},79748:a=>{"use strict";a.exports=require("fs/promises")},80099:a=>{"use strict";a.exports=require("node:sqlite")},81787:a=>{"use strict";a.exports=require("bun:sqlite")},87550:a=>{"use strict";a.exports=require("better-sqlite3")},89768:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"createDedupedByCallsiteServerErrorLoggerDev",{enumerable:!0,get:function(){return i}});let d=function(a){if(a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var b=e(void 0);if(b&&b.has(a))return b.get(a);var c={__proto__:null},d=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in a)if("default"!==f&&Object.prototype.hasOwnProperty.call(a,f)){var g=d?Object.getOwnPropertyDescriptor(a,f):null;g&&(g.get||g.set)?Object.defineProperty(c,f,g):c[f]=a[f]}return c.default=a,b&&b.set(a,c),c}(c(91986));function e(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(e=function(a){return a?c:b})(a)}let f={current:null},g="function"==typeof d.cache?d.cache:a=>a,h=console.warn;function i(a){return function(...b){h(a(...b))}}g(a=>{try{h(f.current)}finally{f.current=null}})},91645:a=>{"use strict";a.exports=require("net")},92305:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d={isRequestApiAllowedInCurrentPhase:function(){return k},throwForSearchParamsAccessInUseCache:function(){return j},throwWithStaticGenerationBailoutErrorWithDynamicError:function(){return i}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(15693),g=c(19121),h=c(3295);function i(a,b){throw Object.defineProperty(new f.StaticGenBailoutError(`Route ${a} with \`dynamic = "error"\` couldn't be rendered statically because it used ${b}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E543",enumerable:!1,configurable:!0})}function j(a,b){let c=Object.defineProperty(Error(`Route ${a.route} used \`searchParams\` inside "use cache". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await \`searchParams\` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E842",enumerable:!1,configurable:!0});throw Error.captureStackTrace(c,b),a.invalidDynamicUsageError??=c,c}function k(a){switch(a.phase){case"action":case"render":return!0;case"after":{let a=g.actionAsyncStorage.getStore();if(a&&(a.isAppRoute||a.isAction))return!0;let b=h.afterTaskAsyncStorage.getStore();if(b)return"action"===b.rootTaskSpawnPhase;return!1}}}},94735:a=>{"use strict";a.exports=require("events")},97759:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>v});var d=c(48249),e=c(67484),f=c(34716),g=c(50412);let h={enabled:!1,fileLoggingEnabled:!1,type:"mysql",host:"",port:"",database:"",username:"",password:"",ssl:!1,createDatabase:!1,logClientRequest:!0,logSourceRequest:!0,logTargetRequest:!0,logProviderResponse:!1,logErrors:!0,retentionDays:30,payloadRotationEnabled:!1,payloadRetentionDays:60,payloadRotationScheduleTime:"21:00",payloadRotationMaxRuntimeMinutes:60,payloadRotationIntervalHours:24,payloadRotationBatchSize:500,payloadRotationMaxBatches:20},i=[{value:60,label:"1 hour"},{value:120,label:"2 hours"},{value:180,label:"3 hours"},{value:240,label:"4 hours"},{value:360,label:"6 hours"},{value:480,label:"8 hours"},{value:720,label:"12 hours"},{value:0,label:"Until finished"}];function j({label:a,value:b,onChange:c,type:e="text",placeholder:f="",disabled:g=!1,min:h,max:i,step:k}){return(0,d.jsxs)("label",{className:"flex flex-col gap-1 text-xs",children:[(0,d.jsx)("span",{className:"text-text-muted",children:a}),(0,d.jsx)("input",{type:e,value:b||"",placeholder:f,disabled:g,min:h,max:i,step:k,onChange:a=>c(a.target.value),className:"w-full rounded border border-border bg-surface px-2 py-1.5 text-xs text-text-main focus:outline-none focus:ring-1 focus:ring-primary/50 disabled:opacity-50"})]})}function k({label:a,checked:b,onChange:c,disabled:e=!1}){return(0,d.jsxs)("label",{className:"flex items-center gap-2 text-xs text-text-main",children:[(0,d.jsx)("input",{type:"checkbox",checked:!!b,disabled:e,onChange:a=>c(a.target.checked)}),a]})}function l(){let[a,b]=(0,e.useState)(h),[c,f]=(0,e.useState)(!1),[l,m]=(0,e.useState)(null),[n,o]=(0,e.useState)(null),[p,q]=(0,e.useState)(null),r=a=>b(b=>({...b,...a})),s=async()=>{f(!0),o(null);try{let a=await fetch("/api/cli-tools/antigravity-mitm/prompt-log-db"),c=await a.json();if(!a.ok)throw Error(c.error||"Failed to load config");b({...h,...c.config||{}})}catch(a){o(a.message||"Failed to load config")}finally{f(!1)}},t=async()=>{f(!0),o(null),m(null);try{let c=await fetch("/api/cli-tools/antigravity-mitm/prompt-log-db",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({config:a})}),d=await c.json();if(!c.ok)throw Error(d.error||"Failed to save config");b({...h,...d.config||{}}),m("Saved")}catch(a){o(a.message||"Failed to save config")}finally{f(!1)}},u=async(b,c={})=>{if(!c.confirm||window.confirm("Delete all prompt_logs rows and their payloads older than the retention cutoff? Both the rows in prompt_logs (previews, model/provider/token metadata) and the referenced payloads will be removed. This cannot be undone.")){f(!0),o(null),m(null),b.includes("payload-rotation")&&q(null);try{let d=await fetch("/api/cli-tools/antigravity-mitm/prompt-log-db",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:b,config:a,confirm:!0===c.confirm})}),e=await d.text(),f={};try{f=e?JSON.parse(e):{}}catch{let a=e.replace(/<[^>]+>/g," ").replace(/\s+/g," ").trim().slice(0,200),b=504===d.status?"Manual rotation exceeded the request timeout. Use automatic rotation for long-running cleanup.":`HTTP ${d.status}: ${a||d.statusText||"non-JSON response"}`;throw Error(b)}if(!d.ok)throw Error(f.error||`HTTP ${d.status}`);b.includes("payload-rotation")&&q(f),m(f.message||f.init?.message||"OK")}catch(a){o(a.message||"Action failed")}finally{f(!1)}}},v="postgres"===a.type||"mysql"===a.type;return(0,d.jsx)(g.Zp,{title:"Request Logging",subtitle:"Control local request files and database-backed prompt logs",icon:"receipt_long",children:(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,d.jsxs)(g.Ex,{variant:a.fileLoggingEnabled?"success":"default",children:["Local files: ",a.fileLoggingEnabled?"Enabled":"Disabled"]}),(0,d.jsxs)(g.Ex,{variant:a.enabled?"success":"default",children:["Database: ",a.enabled?"Enabled":"Disabled"]})]}),(0,d.jsx)("div",{className:"rounded-lg border border-yellow-500/30 bg-yellow-500/10 p-3 text-xs text-yellow-700 dark:text-yellow-300",children:'Prompt logs may contain source code, selected code, internal URLs, user prompts, and provider responses. Checked stages store full raw JSON; prompt/response text columns keep only short previews. Per-combo "hide content" still redacts raw JSON.'}),(0,d.jsx)("div",{className:"grid gap-3 md:grid-cols-2",children:(0,d.jsxs)("label",{className:"flex flex-col gap-1 text-xs",children:[(0,d.jsx)("span",{className:"text-text-muted",children:"Database type"}),(0,d.jsxs)("select",{value:a.type,disabled:c,onChange:b=>{let c=b.target.value;r({type:c,port:"postgres"===c?a.port||"5432":"mysql"===c?a.port||"3306":a.port})},className:"w-full rounded border border-border bg-surface px-2 py-1.5 text-xs text-text-main focus:outline-none focus:ring-1 focus:ring-primary/50",children:[(0,d.jsx)("option",{value:"mysql",children:"MySQL / MariaDB"}),(0,d.jsx)("option",{value:"postgres",children:"PostgreSQL"})]})]})}),v&&(0,d.jsxs)("div",{className:"grid gap-3 md:grid-cols-2",children:[(0,d.jsx)(j,{label:"Host",value:a.host,placeholder:"127.0.0.1",onChange:a=>r({host:a}),disabled:c}),(0,d.jsx)(j,{label:"Port",value:a.port,placeholder:"postgres"===a.type?"5432":"3306",onChange:a=>r({port:a}),disabled:c}),(0,d.jsx)(j,{label:"Database",value:a.database,placeholder:"bluerouter_logs",onChange:a=>r({database:a}),disabled:c}),(0,d.jsx)(j,{label:"Username",value:a.username,placeholder:"bluerouter",onChange:a=>r({username:a}),disabled:c}),(0,d.jsx)(j,{label:"Password",type:"password",value:a.password,placeholder:"Leave as ******** to keep existing password",onChange:a=>r({password:a}),disabled:c}),(0,d.jsxs)("div",{className:"flex flex-col justify-end gap-2",children:[(0,d.jsx)(k,{label:"Use SSL",checked:a.ssl,onChange:a=>r({ssl:a}),disabled:c}),(0,d.jsx)(k,{label:"Create database if missing",checked:a.createDatabase,onChange:a=>r({createDatabase:a}),disabled:c})]})]}),(0,d.jsxs)("div",{className:"grid gap-2 rounded-lg border border-border bg-surface/40 p-3 md:grid-cols-2",children:[(0,d.jsx)(k,{label:"Save request/response to local files",checked:a.fileLoggingEnabled,onChange:a=>r({fileLoggingEnabled:a}),disabled:c}),(0,d.jsx)(k,{label:"Save request/response to Prompt Log Database",checked:a.enabled,onChange:a=>r({enabled:a}),disabled:c}),(0,d.jsx)(k,{label:"Log client request JSON",checked:a.logClientRequest,onChange:a=>r({logClientRequest:a}),disabled:c}),(0,d.jsx)(k,{label:"Log normalized/source request JSON",checked:a.logSourceRequest,onChange:a=>r({logSourceRequest:a}),disabled:c}),(0,d.jsx)(k,{label:"Log target/provider request JSON",checked:a.logTargetRequest,onChange:a=>r({logTargetRequest:a}),disabled:c}),(0,d.jsx)(k,{label:"Log provider response JSON",checked:a.logProviderResponse,onChange:a=>r({logProviderResponse:a}),disabled:c}),(0,d.jsx)(k,{label:"Log errors",checked:a.logErrors,onChange:a=>r({logErrors:a}),disabled:c})]}),(0,d.jsxs)("div",{className:"rounded-lg border border-border bg-background p-3 text-xs text-text-muted",children:["Local files are written under ",(0,d.jsx)("code",{children:"DATA_DIR/logs/requests"}),". Disabling local files stops new request/response dump files; existing files are kept."]}),(0,d.jsxs)("div",{className:"space-y-3 rounded-xl border border-border bg-surface/40 p-4",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("div",{className:"text-sm font-semibold text-text-main",children:"Prompt log rotation"}),(0,d.jsxs)("div",{className:"mt-1 text-xs text-text-muted",children:["Deletes ",(0,d.jsx)("code",{children:"prompt_logs"})," rows AND their referenced payloads older than the retention cutoff. After a full run, only logs from the last N days remain — analytics/metadata for older rows are removed as well."]})]}),(0,d.jsx)(k,{label:"Enable automatic rotation",checked:a.payloadRotationEnabled,onChange:a=>r({payloadRotationEnabled:a}),disabled:c}),(0,d.jsxs)("div",{className:"grid gap-3 md:grid-cols-2 lg:grid-cols-4",children:[(0,d.jsx)(j,{label:"Keep logs for (days)",type:"number",min:1,max:3650,step:1,value:String(a.payloadRetentionDays||60),onChange:a=>r({payloadRetentionDays:Number(a)||60}),disabled:c}),(0,d.jsx)(j,{label:"Daily start time (Vietnam, UTC+7)",type:"time",step:60,value:String(a.payloadRotationScheduleTime||"21:00"),onChange:a=>r({payloadRotationScheduleTime:a||"21:00"}),disabled:c}),(0,d.jsxs)("label",{className:"flex flex-col gap-1 text-xs",children:[(0,d.jsx)("span",{className:"text-text-muted",children:"Maximum automatic run time"}),(0,d.jsx)("select",{value:String(Number(a.payloadRotationMaxRuntimeMinutes??60)),disabled:c,onChange:a=>r({payloadRotationMaxRuntimeMinutes:Number(a.target.value)}),className:"w-full rounded border border-border bg-surface px-2 py-1.5 text-xs text-text-main focus:outline-none focus:ring-1 focus:ring-primary/50 disabled:opacity-50",children:i.map(a=>(0,d.jsx)("option",{value:String(a.value),children:a.label},a.value))})]}),(0,d.jsx)(j,{label:"Prompt-log rows per transaction",type:"number",min:50,max:5e3,step:50,value:String(a.payloadRotationBatchSize||500),onChange:a=>r({payloadRotationBatchSize:Number(a)||500}),disabled:c})]}),(0,d.jsxs)("div",{className:"rounded-lg border border-blue-500/30 bg-blue-500/10 p-3 text-xs text-blue-700 dark:text-blue-300",children:["Automatic rotation runs once per day at the selected Vietnam time. It deletes expired ",(0,d.jsx)("code",{children:"prompt_logs"})," in small transactions and checks the run-time budget between cleanup passes. If the budget is reached, remaining rows continue at the next daily run. Choose ",(0,d.jsx)("strong",{children:"Until finished"})," to keep running until no expired rows remain. On MySQL, orphan ",(0,d.jsx)("code",{children:"prompt_log_payloads"})," rows are reaped as part of the cleanup."]}),(0,d.jsxs)("div",{className:"rounded-lg border border-amber-500/30 bg-amber-500/10 p-3 text-xs text-amber-700 dark:text-amber-300",children:["Deletion is permanent: previews, model/provider/token metadata, and analytics for older rows go away too. Freed space stays inside InnoDB — ",(0,d.jsx)("code",{children:"OPTIMIZE TABLE"})," is needed to shrink the .ibd file (only during a maintenance window, with enough free disk)."]}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)(g.$n,{size:"sm",variant:"secondary",onClick:()=>u("preview-payload-rotation"),loading:c,children:"Preview expired logs"}),(0,d.jsx)(g.$n,{size:"sm",variant:"danger",onClick:()=>u("run-payload-rotation",{confirm:!0}),loading:c,children:"Delete expired logs now"})]}),p&&(0,d.jsxs)("div",{className:"grid gap-2 rounded-lg border border-border bg-background p-3 text-xs md:grid-cols-2 lg:grid-cols-4",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("span",{className:"text-text-muted",children:"Cutoff:"})," ",(0,d.jsx)("span",{className:"text-text-main",children:p.cutoff?new Date(p.cutoff).toLocaleString():"-"})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("span",{className:"text-text-muted",children:void 0===p.promptLogRowsUpdated?"Prompt-log rows past retention:":"Prompt-log rows deleted:"})," ",(0,d.jsx)("span",{className:"text-text-main",children:Number(p.promptLogRowsUpdated??p.promptLogRows??0).toLocaleString()})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("span",{className:"text-text-muted",children:void 0===p.payloadRowsDeleted?"Payload rows to delete:":"Payload rows deleted:"})," ",(0,d.jsx)("span",{className:"text-text-main",children:Number(p.payloadRowsDeleted??p.payloadRowsPastRetention??0).toLocaleString()})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("span",{className:"text-text-muted",children:void 0===p.payloadBytesDeleted?"Estimated payload size:":"Payload size deleted:"})," ",(0,d.jsx)("span",{className:"text-text-main",children:function(a){let b=Number(a||0);if(!Number.isFinite(b)||b<=0)return"0 B";let c=["B","KB","MB","GB","TB"],d=Math.min(c.length-1,Math.floor(Math.log(b)/Math.log(1024))),e=b/1024**d;return`${e.toFixed(e>=10||0===d?1:2)} ${c[d]}`}(p.payloadBytesDeleted??p.payloadBytesPastRetention??p.referencedPayloadBytes)})]}),p.hasMore?(0,d.jsx)("div",{className:"md:col-span-2 lg:col-span-4 text-amber-600",children:"More expired rows remain. Automatic rotation will continue them at the next scheduled run."}):null]}),(0,d.jsx)("div",{className:"text-[11px] text-text-muted",children:"Save to apply the automatic schedule immediately. Preview uses the values currently shown. Manual deletion is a bounded maintenance pass; use automatic rotation for multi-hour cleanup."})]}),v&&(0,d.jsxs)("div",{className:"rounded-lg border border-blue-500/30 bg-blue-500/10 p-3 text-xs text-blue-700 dark:text-blue-300",children:["Prompt logs now support MySQL/MariaDB and PostgreSQL only. MySQL/MariaDB requires ",(0,d.jsx)("code",{children:"mysql2"}),"; PostgreSQL requires ",(0,d.jsx)("code",{children:"pg"}),"."]}),l&&(0,d.jsx)("div",{className:"rounded-lg border border-green-500/30 bg-green-500/10 p-2 text-xs text-green-600",children:l}),n&&(0,d.jsx)("div",{className:"rounded-lg border border-red-500/30 bg-red-500/10 p-2 text-xs text-red-500",children:n}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)(g.$n,{size:"sm",variant:"secondary",onClick:s,loading:c,children:"Reload"}),(0,d.jsx)(g.$n,{size:"sm",variant:"secondary",onClick:()=>u("test"),loading:c,children:"Test connection"}),(0,d.jsx)(g.$n,{size:"sm",variant:"secondary",onClick:()=>u("init"),loading:c,children:"Initialize schema"}),(0,d.jsx)(g.$n,{size:"sm",onClick:t,loading:c,children:"Save"}),(0,d.jsx)(g.$n,{size:"sm",variant:"success",onClick:()=>u("save-and-init"),loading:c,children:"Save & initialize"})]})]})})}let m="(|(sAMAccountName={{username}})(userPrincipalName={{username}})(mail={{username}}))",n="image/svg+xml,image/png,image/webp,image/jpeg,image/gif",o=`${n},image/x-icon,image/vnd.microsoft.icon,.ico`;function p({status:a}){if(!a?.message)return null;let b="error"===a.type?"text-red-600 bg-red-50 border-red-200":"text-green-700 bg-green-50 border-green-200";return(0,d.jsx)("div",{className:`mt-3 rounded-xl border px-4 py-3 text-sm ${b}`,children:a.message})}function q({icon:a,title:b,desc:c,children:e}){return(0,d.jsxs)("section",{className:"rounded-2xl border border-border bg-surface p-6 shadow-sm",children:[(0,d.jsxs)("div",{className:"mb-5 flex items-start gap-3",children:[a&&(0,d.jsx)("span",{className:"material-symbols-outlined text-primary",children:a}),(0,d.jsxs)("div",{children:[(0,d.jsx)("h2",{className:"text-xl font-bold text-text-main",children:b}),c&&(0,d.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:c})]})]}),e]})}function r({label:a,hint:b,children:c}){return(0,d.jsxs)("label",{className:"block",children:[(0,d.jsx)("span",{className:"mb-1 block text-sm font-semibold text-text-main",children:a}),c,b&&(0,d.jsx)("span",{className:"mt-1 block text-xs text-text-muted",children:b})]})}function s(a){return(0,d.jsx)("input",{...a,className:`w-full rounded-xl border border-border bg-background px-3 py-2 text-sm outline-none focus:border-primary ${a.className||""}`})}function t(a){return(0,d.jsx)("textarea",{...a,className:`w-full rounded-xl border border-border bg-background px-3 py-2 text-sm outline-none focus:border-primary ${a.className||""}`})}function u({title:a,desc:b,checked:c,onChange:e,disabled:f}){return(0,d.jsxs)("div",{className:"flex items-start justify-between gap-4 rounded-xl border border-border bg-background px-4 py-3",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("div",{className:"text-sm font-semibold text-text-main",children:a}),b&&(0,d.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:b})]}),(0,d.jsx)("button",{type:"button",disabled:f,onClick:()=>e(!c),className:`relative mt-0.5 h-6 w-11 rounded-full transition disabled:opacity-50 ${c?"bg-primary":"bg-border"}`,children:(0,d.jsx)("span",{className:`absolute top-0.5 h-5 w-5 rounded-full bg-white transition ${c?"left-5":"left-0.5"}`})})]})}function v(){let[a,b]=(0,e.useState)({}),[c,g]=(0,e.useState)(!0),[h,i]=(0,e.useState)({current:"",new:"",confirm:""}),[j,k]=(0,e.useState)({type:"",message:""}),[v,w]=(0,e.useState)(!1),[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)({type:"",message:""}),[B,C]=(0,e.useState)(""),[D,E]=(0,e.useState)(""),F=(0,e.useRef)(null),[G,H]=(0,e.useState)("admin"),[I,J]=(0,e.useState)({type:"",message:""}),[K,L]=(0,e.useState)({ldapEnabled:!1,ldapUrl:"",ldapBindDn:"",ldapBindPassword:"",ldapUserBaseDn:"",ldapUserSearchFilter:m,ldapUserNameAttribute:"sAMAccountName",ldapUserDisplayAttribute:"displayName",ldapUserEmailAttribute:"mail",ldapLoginAllowedGroupDn:"",ldapAdminGroupDn:"",ldapMonitorAdminGroupDn:"",ldapAiGatewaysMonitorsGroupDn:"",ldapNestedGroups:!0,ldapAllowedUsers:[],ldapTlsRejectUnauthorized:!0,ldapConnectTimeoutMs:8e3}),[M,N]=(0,e.useState)({type:"",message:""}),[O,P]=(0,e.useState)(!1),[Q,R]=(0,e.useState)(!1),[S,T]=(0,e.useState)(""),[U,V]=(0,e.useState)([]),[W,X]=(0,e.useState)(!1),[Y,Z]=(0,e.useState)({authMode:"password",oidcIssuerUrl:"",oidcClientId:"",oidcScopes:"openid profile email",oidcLoginLabel:"Sign in with OIDC"}),[$,_]=(0,e.useState)(""),[aa,ab]=(0,e.useState)({type:"",message:""}),[ac,ad]=(0,e.useState)(!1),[ae,af]=(0,e.useState)(!1),[ag,ah]=(0,e.useState)({type:"",message:""}),ai=(0,f.useBranding)(),[aj,ak]=(0,e.useState)(""),[al,am]=(0,e.useState)(""),[an,ao]=(0,e.useState)(""),[ap,aq]=(0,e.useState)({type:"",message:""}),[ar,as]=(0,e.useState)(!1),[at,au]=(0,e.useState)(!1),[av,aw]=(0,e.useState)(!1),[ax,ay]=(0,e.useState)(!1),az=(0,e.useRef)(null),aA=(0,e.useRef)(null),aB=async()=>{g(!0);try{let a=await fetch("/api/settings",{cache:"no-store"}),c=await a.json();b(c),H(c.localLoginUsername||"admin"),L({ldapEnabled:!0===c.ldapEnabled,ldapUrl:c.ldapUrl||"",ldapBindDn:c.ldapBindDn||"",ldapBindPassword:"",ldapUserBaseDn:c.ldapUserBaseDn||c.ldapBaseDn||"",ldapUserSearchFilter:c.ldapUserSearchFilter||m,ldapUserNameAttribute:c.ldapUserNameAttribute||"sAMAccountName",ldapUserDisplayAttribute:c.ldapUserDisplayAttribute||"displayName",ldapUserEmailAttribute:c.ldapUserEmailAttribute||"mail",ldapLoginAllowedGroupDn:c.ldapLoginAllowedGroupDn||"",ldapAdminGroupDn:c.ldapAdminGroupDn||"",ldapMonitorAdminGroupDn:c.ldapMonitorAdminGroupDn||"",ldapAiGatewaysMonitorsGroupDn:c.ldapAiGatewaysMonitorsGroupDn||"",ldapNestedGroups:!1!==c.ldapNestedGroups,ldapAllowedUsers:Array.isArray(c.ldapAllowedUsers)?c.ldapAllowedUsers:[],ldapTlsRejectUnauthorized:!1!==c.ldapTlsRejectUnauthorized,ldapConnectTimeoutMs:c.ldapConnectTimeoutMs||8e3}),Z({authMode:c.authMode||"password",oidcIssuerUrl:c.oidcIssuerUrl||"",oidcClientId:c.oidcClientId||"",oidcScopes:c.oidcScopes||"openid profile email",oidcLoginLabel:c.oidcLoginLabel||"Sign in with OIDC"}),ak(c.siteTitle||""),am(c.siteShortName||""),ao(c.siteDescription||""),("oidc"===c.authMode||"both"===c.authMode)&&af(!0)}catch(a){console.log("Failed to fetch settings:",a)}finally{g(!1)}},aC=async a=>{let c=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),d=await c.json().catch(()=>({}));if(!c.ok)throw Error(d.error||"Failed to save settings");return b(a=>({...a,...d})),d},aD=async c=>{ah({type:"",message:""});let d=!1!==a.sidebarAdvancedToolsVisible;b(a=>({...a,sidebarAdvancedToolsVisible:c}));try{let a=await aC({sidebarAdvancedToolsVisible:c}),d=!1!==a.sidebarAdvancedToolsVisible;b(a=>({...a,sidebarAdvancedToolsVisible:d})),ah({type:"success",message:d?"Advanced tools are visible in the sidebar.":"Advanced tools are hidden from the sidebar."})}catch(a){b(a=>({...a,sidebarAdvancedToolsVisible:d})),ah({type:"error",message:a.message||"Failed to save sidebar setting."})}},aE=async a=>{a.preventDefault(),J({type:"",message:""});try{let a=await aC({localLoginUsername:G});H(a.localLoginUsername||G||"admin"),J({type:"success",message:"Local account name saved."})}catch(a){J({type:"error",message:a.message})}},aF=async a=>{if(a.preventDefault(),h.new!==h.confirm)return void k({type:"error",message:"Passwords do not match"});w(!0),k({type:"",message:""});try{await aC({currentPassword:h.current,newPassword:h.new}),k({type:"success",message:"Password updated successfully"}),i({current:"",new:"",confirm:""})}catch(a){k({type:"error",message:a.message||"Failed to update password"})}finally{w(!1)}},aG=async()=>{y(!0),A({type:"",message:""});try{if(B&&B!==D)throw Error("Backup password confirmation does not match.");if(B&&new TextEncoder().encode(B).length<8)throw Error("Backup password must be at least 8 characters.");let a=await fetch("/api/settings/database/export",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({password:B})});if(!a.ok){let b=await a.json().catch(()=>({}));throw Error(b.error||"Failed to export full-node backup")}let b=await a.json(),c=b?.backup?.encrypted===!0,d=JSON.stringify(b,null,2*!c),e=new Blob([d],{type:"application/json"}),f=URL.createObjectURL(e),g=document.createElement("a"),h=new Date().toISOString().replace(/[.:]/g,"-");g.href=f,g.download=c?`bluerouter-full-backup-${h}.brbackup.json`:`bluerouter-full-backup-${h}.json`,document.body.appendChild(g),g.click(),document.body.removeChild(g),URL.revokeObjectURL(f),A({type:"success",message:c?"Encrypted full-node backup downloaded.":"Plaintext full-node backup downloaded."})}catch(a){A({type:"error",message:a.message||"Failed to export full-node backup."})}finally{y(!1)}},aH=async a=>{let b=a.target.files?.[0];if(b){y(!0),A({type:"",message:""});try{let a=await b.text(),c=JSON.parse(a),d=c?.backup?.encrypted===!0;if(d&&!B)throw Error("Enter the backup password before importing this encrypted backup.");let e=await fetch("/api/settings/database",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({payload:c,password:d?B:""})}),f=await e.json().catch(()=>({}));if(!e.ok)throw Error(f.error||"Failed to import backup");await aB();let g=f.resourceMonitorImported?`Restored ${f.resourceMonitorServerCount||0} Resource Monitor server(s) and ${f.resourceMonitorHistoryCount||0} history sample(s).`:"Legacy backup: current Resource Monitor data was kept.",h=f.brandingImported?`Restored ${f.brandingAssetCount||0} branding asset(s).`:"Current logo and favicon were kept.",i=f.auditProxyImported?`Audit Proxy restored; listener is ${f.listenerRunning?"running":"stopped"}.`:"legacy-database"===f.backupKind?`Legacy Audit Proxy policy: ${f.auditProxyReason||"not present"}.`:"Audit Proxy data was not restored.",j=f.rootCAImported?"Root CA certificate/private key restored.":f.rootCAPreserved?"Current Root CA was preserved.":"";A({type:"success",message:`Backup imported successfully. ${g} ${h} ${i} ${j}`})}catch(a){A({type:"error",message:a.message||"Invalid backup file."})}finally{F.current&&(F.current.value=""),y(!1)}}},aI=(a,b)=>L(c=>({...c,[a]:b})),aJ=async a=>{a?.preventDefault?.(),P(!0),N({type:"",message:""});try{let a={...K,ldapBaseDn:K.ldapUserBaseDn,ldapAllowedUsers:K.ldapAllowedUsers};a.ldapBindPassword||delete a.ldapBindPassword;let b=await aC(a);L(a=>({...a,ldapBindPassword:"",ldapEnabled:!0===b.ldapEnabled,ldapUserBaseDn:b.ldapUserBaseDn||b.ldapBaseDn||a.ldapUserBaseDn,ldapLoginAllowedGroupDn:b.ldapLoginAllowedGroupDn||"",ldapAdminGroupDn:b.ldapAdminGroupDn||"",ldapMonitorAdminGroupDn:b.ldapMonitorAdminGroupDn||"",ldapAiGatewaysMonitorsGroupDn:b.ldapAiGatewaysMonitorsGroupDn||"",ldapNestedGroups:!1!==b.ldapNestedGroups,ldapAllowedUsers:Array.isArray(b.ldapAllowedUsers)?b.ldapAllowedUsers:a.ldapAllowedUsers})),N({type:"success",message:"LDAP settings saved."})}catch(a){N({type:"error",message:a.message||"Failed to save LDAP settings"})}finally{P(!1)}},aK=async()=>{R(!0),N({type:"",message:""});try{await aJ();let a=await fetch("/api/auth/ldap/test",{method:"POST"}),b=await a.json().catch(()=>({}));a.ok&&b.ok?N({type:"success",message:b.message||"LDAP connection OK."}):N({type:"error",message:b.error||"LDAP test failed."})}catch(a){N({type:"error",message:a.message||"LDAP test failed."})}finally{R(!1)}},aL=async()=>{X(!0),N({type:"",message:""});try{await aJ();let a=await fetch(`/api/auth/ldap/users?q=${encodeURIComponent(S)}`,{cache:"no-store"}),b=await a.json().catch(()=>({}));a.ok?(V(b.users||[]),N({type:"success",message:`Loaded ${(b.users||[]).length} LDAP user(s).`})):N({type:"error",message:b.error||"Failed to load LDAP users."})}catch(a){N({type:"error",message:a.message||"Failed to load LDAP users."})}finally{X(!1)}},aM=a=>{let b=String(a||"").trim();b&&L(a=>{let c=new Set(a.ldapAllowedUsers||[]);return c.has(b)?c.delete(b):c.add(b),{...a,ldapAllowedUsers:[...c]}})},aN=async(b=Y.authMode||"password")=>{let c=Y.oidcIssuerUrl.trim(),d=Y.oidcClientId.trim(),e=Y.oidcScopes.trim(),f=Y.oidcLoginLabel.trim(),g=$.trim();if("password"!==b&&(!c||!d||!g)&&!a.oidcConfigured)return void ab({type:"error",message:"Issuer URL, client ID, and client secret are required to enable OIDC."});ad(!0),ab({type:"",message:""});try{let a={authMode:b,oidcIssuerUrl:c,oidcClientId:d,oidcScopes:e||"openid profile email",oidcLoginLabel:f||"Sign in with OIDC"};g&&(a.oidcClientSecret=g);let h=await aC(a);Z({authMode:h.authMode||b,oidcIssuerUrl:h.oidcIssuerUrl||c,oidcClientId:h.oidcClientId||d,oidcScopes:h.oidcScopes||e||"openid profile email",oidcLoginLabel:h.oidcLoginLabel||f||"Sign in with OIDC"}),_(""),ab({type:"success",message:"OIDC settings saved."})}catch(a){ab({type:"error",message:a.message||"Failed to save OIDC settings"})}finally{ad(!1)}},aO=async(a,b)=>{if(!b)return;if(b.size>1048576)return void aq({type:"error",message:"File exceeds 1 MB limit."});let c="logo"===a?au:aw;c(!0),aq({type:"",message:""});try{let c=new FormData;c.append("asset",a),c.append("file",b);let d=await fetch("/api/branding/upload",{method:"POST",body:c}),e=await d.json().catch(()=>({}));if(!d.ok)throw Error(e.error||"Upload failed");(0,f.notifyBrandingChanged)(),aq({type:"success",message:`${"logo"===a?"Logo":"Favicon"} uploaded.`})}catch(a){aq({type:"error",message:a.message||"Upload failed."})}finally{c(!1)}},aP=async a=>{let b=a.target.files?.[0];await aO("logo",b),az.current&&(az.current.value="")},aQ=async a=>{let b=a.target.files?.[0];await aO("favicon",b),aA.current&&(aA.current.value="")},aR=async a=>{a.preventDefault(),as(!0),aq({type:"",message:""});try{await aC({siteTitle:aj.trim(),siteShortName:al.trim(),siteDescription:an.trim()}),(0,f.notifyBrandingChanged)(),aq({type:"success",message:"Branding text saved."})}catch(a){aq({type:"error",message:a.message||"Failed to save branding."})}finally{as(!1)}},aS=async a=>{aq({type:"",message:""});try{let b=await fetch(`/api/branding?asset=${a}`,{method:"DELETE"}),c=await b.json().catch(()=>({}));if(!b.ok)throw Error(c.error||"Failed to remove asset");(0,f.notifyBrandingChanged)(),aq({type:"success",message:`${"logo"===a?"Logo":"Favicon"} removed.`})}catch(a){aq({type:"error",message:a.message||"Failed to remove asset."})}},aT=async()=>{ay(!0),aq({type:"",message:""});try{let a=await fetch("/api/branding",{method:"DELETE"});if(!a.ok){let b=await a.json().catch(()=>({}));throw Error(b.error||"Failed to reset branding")}await aC({siteTitle:"",siteShortName:"",siteDescription:""}),ak(""),am(""),ao(""),(0,f.notifyBrandingChanged)(),aq({type:"success",message:"Branding reset to defaults."})}catch(a){aq({type:"error",message:a.message||"Failed to reset branding."})}finally{ay(!1)}};return c?(0,d.jsx)("div",{className:"p-8 text-text-muted",children:"Loading settings..."}):(0,d.jsxs)("div",{className:"mx-auto max-w-6xl space-y-6 p-6",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("h1",{className:"text-3xl font-bold text-text-main",children:"Settings"}),(0,d.jsx)("p",{className:"mt-1 text-text-muted",children:"Configure dashboard preferences, request logging, database backup, and authentication."})]}),(0,d.jsxs)(q,{icon:"view_sidebar",title:"Sidebar tools",desc:"Show or hide advanced dashboard tools to keep the sidebar clean.",children:[(0,d.jsx)(u,{title:"Show Advanced tools",desc:"When disabled, Media / Web, AI Traffic Gateway, CLI Tools, Proxy Pools, Skills, Console Log and Translator are hidden from the sidebar. Core admin pages remain visible.",checked:!1!==a.sidebarAdvancedToolsVisible,onChange:aD}),(0,d.jsx)(p,{status:ag})]}),(0,d.jsxs)(q,{icon:"palette",title:"Branding",desc:"Customize site title, logo and favicon shown in the dashboard, browser tab and login page. Max 1 MB per file.",children:[(0,d.jsxs)("div",{className:"grid gap-6 lg:grid-cols-2",children:[(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("div",{className:"mb-2 text-sm font-semibold text-text-main",children:"Logo"}),(0,d.jsxs)("div",{className:"flex items-center gap-4 rounded-xl border border-border bg-background p-4",children:[(0,d.jsx)("div",{className:"flex h-16 w-16 shrink-0 items-center justify-center overflow-hidden rounded-lg border border-border bg-surface",children:ai?.logoUrl?(0,d.jsx)("img",{src:ai.logoUrl,alt:"Current logo",className:"max-h-full max-w-full object-contain"}):(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted",children:"hub"})}),(0,d.jsxs)("div",{className:"flex-1 space-y-2",children:[(0,d.jsx)("div",{className:"text-xs text-text-muted",children:"Shown in the dashboard sidebar and login page. SVG, PNG, WebP, JPEG, GIF."}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)("button",{type:"button",disabled:at,onClick:()=>az.current?.click(),className:"rounded-xl bg-primary px-3 py-1.5 text-xs font-semibold text-white disabled:opacity-50",children:at?"Uploading...":ai?.logoUrl?"Replace logo":"Upload logo"}),ai?.logoUrl?(0,d.jsx)("button",{type:"button",onClick:()=>aS("logo"),className:"rounded-xl border border-border px-3 py-1.5 text-xs font-semibold text-text-main hover:border-red-300 hover:text-red-600",children:"Remove"}):null]})]}),(0,d.jsx)("input",{ref:az,type:"file",accept:n,className:"hidden",onChange:aP})]})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("div",{className:"mb-2 text-sm font-semibold text-text-main",children:"Favicon"}),(0,d.jsxs)("div",{className:"flex items-center gap-4 rounded-xl border border-border bg-background p-4",children:[(0,d.jsx)("div",{className:"flex h-16 w-16 shrink-0 items-center justify-center overflow-hidden rounded-lg border border-border bg-surface",children:ai?.faviconUrl?(0,d.jsx)("img",{src:ai.faviconUrl,alt:"Current favicon",className:"max-h-10 max-w-10 object-contain"}):(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted",children:"public"})}),(0,d.jsxs)("div",{className:"flex-1 space-y-2",children:[(0,d.jsx)("div",{className:"text-xs text-text-muted",children:"Shown in the browser tab. ICO, SVG, PNG, WebP, JPEG, GIF."}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)("button",{type:"button",disabled:av,onClick:()=>aA.current?.click(),className:"rounded-xl bg-primary px-3 py-1.5 text-xs font-semibold text-white disabled:opacity-50",children:av?"Uploading...":ai?.faviconUrl?"Replace favicon":"Upload favicon"}),ai?.faviconUrl?(0,d.jsx)("button",{type:"button",onClick:()=>aS("favicon"),className:"rounded-xl border border-border px-3 py-1.5 text-xs font-semibold text-text-main hover:border-red-300 hover:text-red-600",children:"Remove"}):null]})]}),(0,d.jsx)("input",{ref:aA,type:"file",accept:o,className:"hidden",onChange:aQ})]})]})]}),(0,d.jsxs)("form",{onSubmit:aR,className:"space-y-3",children:[(0,d.jsx)(r,{label:"Site title",hint:"Shown in browser tab and login page. Leave blank for default.",children:(0,d.jsx)(s,{value:aj,onChange:a=>ak(a.target.value),placeholder:"AI Router Gateway"})}),(0,d.jsx)(r,{label:"Company short name",hint:"Shown in dashboard sidebar and login hero text. Defaults to site title/sidebar default or 'Fujinet' on login.",children:(0,d.jsx)(s,{value:al,onChange:a=>am(a.target.value),placeholder:"Fujinet"})}),(0,d.jsx)(r,{label:"Description",hint:"Used for browser metadata.",children:(0,d.jsx)(t,{rows:3,value:an,onChange:a=>ao(a.target.value),placeholder:"AI Infrastructure Management"})}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)("button",{type:"submit",disabled:ar,className:"rounded-xl bg-primary px-4 py-2 text-sm font-semibold text-white disabled:opacity-50",children:ar?"Saving...":"Save branding text"}),(0,d.jsx)("button",{type:"button",disabled:ax,onClick:aT,className:"rounded-xl border border-border px-4 py-2 text-sm font-semibold text-text-main hover:border-red-300 hover:text-red-600 disabled:opacity-50",children:ax?"Resetting...":"Reset to defaults"})]})]})]}),(0,d.jsx)(p,{status:ap})]}),(0,d.jsx)(q,{icon:"shield",title:"Dashboard Login",desc:"Local account remains available even when LDAP is enabled.",children:(0,d.jsxs)("div",{className:"grid gap-6 lg:grid-cols-2",children:[(0,d.jsxs)("form",{onSubmit:aE,className:"space-y-3",children:[(0,d.jsx)("h3",{className:"font-semibold text-text-main",children:"Local account"}),(0,d.jsx)(r,{label:"Local username",children:(0,d.jsx)(s,{value:G,onChange:a=>H(a.target.value)})}),(0,d.jsx)("button",{className:"rounded-xl bg-primary px-4 py-2 text-sm font-semibold text-white",children:"Save account"}),(0,d.jsx)(p,{status:I})]}),(0,d.jsxs)("form",{onSubmit:aF,className:"space-y-3",children:[(0,d.jsx)("h3",{className:"font-semibold text-text-main",children:"Local password"}),a.hasPassword&&(0,d.jsx)(r,{label:"Current password",children:(0,d.jsx)(s,{type:"password",value:h.current,onChange:a=>i({...h,current:a.target.value}),required:!0})}),(0,d.jsx)(r,{label:"New password",children:(0,d.jsx)(s,{type:"password",value:h.new,onChange:a=>i({...h,new:a.target.value}),required:!0})}),(0,d.jsx)(r,{label:"Confirm password",children:(0,d.jsx)(s,{type:"password",value:h.confirm,onChange:a=>i({...h,confirm:a.target.value}),required:!0})}),(0,d.jsx)("button",{disabled:v,className:"rounded-xl bg-primary px-4 py-2 text-sm font-semibold text-white disabled:opacity-50",children:a.hasPassword?"Update Password":"Set Password"}),(0,d.jsx)(p,{status:j})]})]})}),(0,d.jsx)("div",{id:"request-logging",className:"scroll-mt-6",children:(0,d.jsx)(l,{})}),(0,d.jsxs)(q,{icon:"database",title:"Full Node Backup",desc:"Export or restore the database, Audit Proxy node configuration, Root CA, Resource Monitor data, logo and favicon.",children:[(0,d.jsxs)("div",{className:"mb-4 grid gap-3 md:grid-cols-2",children:[(0,d.jsx)(r,{label:"Backup password (optional)",hint:"Leave blank for plaintext JSON. When set, the entire backup is encrypted with AES-256-GCM and scrypt. Minimum 8 characters.",children:(0,d.jsx)(s,{type:"password",autoComplete:"new-password",value:B,onChange:a=>C(a.target.value),placeholder:"Optional encryption password"})}),(0,d.jsx)(r,{label:"Confirm password (export only)",hint:"Used only to prevent exporting a backup with a mistyped password. Not required when importing.",children:(0,d.jsx)(s,{type:"password",autoComplete:"new-password",value:D,onChange:a=>E(a.target.value),placeholder:"Repeat password before download"})})]}),(0,d.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,d.jsx)("button",{onClick:aG,disabled:x,className:"rounded-xl bg-primary px-4 py-2 text-sm font-semibold text-white disabled:opacity-50",children:"Download Full Backup"}),(0,d.jsx)("button",{onClick:()=>F.current?.click(),disabled:x,className:"rounded-xl border border-border px-4 py-2 text-sm font-semibold text-text-main hover:border-primary/50 disabled:opacity-50",children:"Import Backup"}),(0,d.jsx)("input",{ref:F,type:"file",accept:"application/json,.brbackup",className:"hidden",onChange:aH})]}),(0,d.jsx)("div",{className:"mt-3 rounded-xl border border-amber-500/30 bg-amber-500/10 px-4 py-3 text-xs leading-5 text-amber-800 dark:text-amber-300",children:"Full backups include API credentials, Audit Proxy bcrypt password hashes and the Root CA private key. Anyone holding the Root CA key can issue certificates trusted by enrolled clients. Use a password whenever the file leaves the secured backup location."}),(0,d.jsx)("p",{className:"mt-3 text-xs text-text-muted",children:"Import validates the complete Root CA pair and Audit Proxy configuration before mutation, applies the restored runtime state immediately, and rolls back database/configuration/CA state if restore fails. Legacy v2 database backups remain supported."}),(0,d.jsx)(p,{status:z})]}),(0,d.jsx)(q,{icon:"corporate_fare",title:"LDAP / Active Directory Login",desc:"Search users from a User Base DN, restrict login by group DN, and grant admin by group DN. The old Selected LDAP users list is kept as a manual admin list.",children:(0,d.jsxs)("form",{onSubmit:aJ,className:"space-y-5",children:[(0,d.jsx)("div",{className:"flex flex-wrap gap-3",children:(0,d.jsx)("button",{type:"button",onClick:()=>aI("ldapEnabled",!K.ldapEnabled),className:`rounded-xl px-3 py-2 text-sm font-semibold ${K.ldapEnabled?"bg-primary text-white":"border border-border text-text-muted"}`,children:K.ldapEnabled?"Enabled":"Disabled"})}),(0,d.jsxs)("div",{className:"grid gap-4 lg:grid-cols-2",children:[(0,d.jsx)(r,{label:"LDAP URL",children:(0,d.jsx)(s,{value:K.ldapUrl,onChange:a=>aI("ldapUrl",a.target.value),placeholder:"ldap://dc01.company.local:389"})}),(0,d.jsx)(r,{label:"LDAP User Base DN",hint:"OU/container/domain where user objects are searched. Do not use a group DN here.",children:(0,d.jsx)(s,{value:K.ldapUserBaseDn,onChange:a=>aI("ldapUserBaseDn",a.target.value),placeholder:"OU=Users,OU=xxx,DC=xx,DC=vn"})}),(0,d.jsx)(r,{label:"LDAP Bind DN",children:(0,d.jsx)(s,{value:K.ldapBindDn,onChange:a=>aI("ldapBindDn",a.target.value),placeholder:"CN=svc-bluerouter,OU=Service Accounts,DC=company,DC=local"})}),(0,d.jsx)(r,{label:"LDAP Bind Password",children:(0,d.jsx)(s,{type:"password",value:K.ldapBindPassword,onChange:a=>aI("ldapBindPassword",a.target.value),placeholder:a.ldapHasBindPassword?"Saved — leave blank to keep":"Service account password"})}),(0,d.jsx)(r,{label:"LDAP Login Allowed Group DN",hint:"Only members of this group can log in. Leave blank to allow any valid LDAP user.",children:(0,d.jsx)(s,{value:K.ldapLoginAllowedGroupDn,onChange:a=>aI("ldapLoginAllowedGroupDn",a.target.value),placeholder:"CN=Apikeys_Groups,OU=AppGroups,OU=xxx,DC=xx,DC=vn"})}),(0,d.jsx)(r,{label:"LDAP Admin Group DN",hint:"Members of this group get full admin dashboard access.",children:(0,d.jsx)(s,{value:K.ldapAdminGroupDn,onChange:a=>aI("ldapAdminGroupDn",a.target.value),placeholder:"CN=BlueRouter_Admins,OU=AppGroups,OU=xxx,DC=xx,DC=vn"})}),(0,d.jsx)(r,{label:"LDAP Monitor Admin Group DN",hint:"Members can use only Endpoint, API Keys, Usage, Analytics, Quota Tracker and Prompt Logs with admin-like permissions inside those tabs.",children:(0,d.jsx)(s,{value:K.ldapMonitorAdminGroupDn,onChange:a=>aI("ldapMonitorAdminGroupDn",a.target.value),placeholder:"CN=BlueRouter_Monitor_Admins,OU=AppGroups,OU=xxx,DC=xx,DC=vn"})}),(0,d.jsx)(r,{label:"LDAP AI Gateways Monitors Group DN",hint:"Members log in as regular users but the Analytics page aggregates statistics for every API key that has an owner, instead of only their own keys.",children:(0,d.jsx)(s,{value:K.ldapAiGatewaysMonitorsGroupDn,onChange:a=>aI("ldapAiGatewaysMonitorsGroupDn",a.target.value),placeholder:"CN=BlueRouter_AI_Gateways_Monitors,OU=AppGroups,OU=xxx,DC=xx,DC=vn"})})]}),(0,d.jsxs)("div",{className:"grid gap-4 lg:grid-cols-2",children:[(0,d.jsx)(r,{label:"User search filter",hint:"Use {{username}} placeholder.",children:(0,d.jsx)(s,{value:K.ldapUserSearchFilter,onChange:a=>aI("ldapUserSearchFilter",a.target.value)})}),(0,d.jsx)(r,{label:"Login group mode",hint:"Nested groups uses AD matching rule 1.2.840.113556.1.4.1941.",children:(0,d.jsx)(u,{title:"Nested group membership",desc:"Recommended for Active Directory nested groups.",checked:K.ldapNestedGroups,onChange:a=>aI("ldapNestedGroups",a)})}),(0,d.jsx)(r,{label:"Username attribute",children:(0,d.jsx)(s,{value:K.ldapUserNameAttribute,onChange:a=>aI("ldapUserNameAttribute",a.target.value)})}),(0,d.jsx)(r,{label:"Display attribute",children:(0,d.jsx)(s,{value:K.ldapUserDisplayAttribute,onChange:a=>aI("ldapUserDisplayAttribute",a.target.value)})}),(0,d.jsx)(r,{label:"Email attribute",children:(0,d.jsx)(s,{value:K.ldapUserEmailAttribute,onChange:a=>aI("ldapUserEmailAttribute",a.target.value)})}),(0,d.jsx)(r,{label:"Connect timeout ms",children:(0,d.jsx)(s,{type:"number",value:K.ldapConnectTimeoutMs,onChange:a=>aI("ldapConnectTimeoutMs",a.target.value)})})]}),(0,d.jsx)(u,{title:"Reject invalid TLS certificates",desc:"Disable only for test/self-signed LDAP TLS.",checked:K.ldapTlsRejectUnauthorized,onChange:a=>aI("ldapTlsRejectUnauthorized",a)}),(0,d.jsxs)("div",{className:"rounded-2xl border border-border bg-background p-4",children:[(0,d.jsxs)("div",{className:"mb-3",children:[(0,d.jsx)("h3",{className:"font-semibold text-text-main",children:"Manual admin users / LDAP owner list"}),(0,d.jsx)("p",{className:"mt-1 text-xs text-text-muted",children:"Users loaded here come from Login Allowed Group DN when set. Selected users are also treated as manual admins for backward compatibility."})]}),(0,d.jsxs)("div",{className:"mb-3 flex gap-2",children:[(0,d.jsx)(s,{value:S,onChange:a=>T(a.target.value),placeholder:"Search users..."}),(0,d.jsx)("button",{type:"button",onClick:aL,disabled:W,className:"rounded-xl border border-border px-4 py-2 text-sm font-semibold text-text-main disabled:opacity-50",children:W?"Loading...":"Load users"})]}),U.length>0&&(0,d.jsx)("div",{className:"max-h-72 overflow-auto rounded-xl border border-border",children:U.map(a=>{let b=K.ldapAllowedUsers.includes(a.username);return(0,d.jsxs)("button",{type:"button",onClick:()=>aM(a.username),className:`flex w-full items-center justify-between gap-3 border-b border-border px-3 py-2 text-left text-sm last:border-b-0 ${b?"bg-primary/10":"bg-background hover:bg-surface"}`,children:[(0,d.jsxs)("span",{children:[(0,d.jsx)("span",{className:"font-semibold text-text-main",children:a.displayName||a.username}),(0,d.jsxs)("span",{className:"ml-2 text-text-muted",children:[a.username,a.email?` \xb7 ${a.email}`:""]})]}),(0,d.jsx)("span",{className:"material-symbols-outlined text-primary",children:b?"check_circle":"radio_button_unchecked"})]},a.dn||a.username)})}),(0,d.jsxs)("div",{className:"mt-3",children:[(0,d.jsxs)("div",{className:"mb-2 text-sm font-semibold text-text-main",children:["Selected manual admin users (",K.ldapAllowedUsers.length,")"]}),0===K.ldapAllowedUsers.length?(0,d.jsx)("div",{className:"text-sm text-text-muted",children:"No users selected."}):(0,d.jsx)("div",{className:"flex flex-wrap gap-2",children:K.ldapAllowedUsers.map(a=>(0,d.jsxs)("button",{type:"button",onClick:()=>aM(a),className:"rounded-full border border-primary/30 bg-primary/10 px-3 py-1 text-xs text-primary",children:[a," \xd7"]},a))})]})]}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-3",children:[(0,d.jsx)("button",{type:"button",onClick:aK,disabled:Q,className:"rounded-xl border border-border px-4 py-2 text-sm font-semibold text-text-main disabled:opacity-50",children:Q?"Testing...":"Save & test LDAP"}),(0,d.jsx)("button",{type:"submit",disabled:O,className:"rounded-xl bg-primary px-4 py-2 text-sm font-semibold text-white disabled:opacity-50",children:O?"Saving...":"Save LDAP settings"})]}),(0,d.jsx)(p,{status:M})]})}),(0,d.jsxs)(q,{icon:"lock_open",title:"OIDC Dashboard Login",desc:"oidc"===a.authMode?"OIDC active":"both"===a.authMode?"Password + OIDC active":"Optional SSO via Authentik/Keycloak/Google",children:[(0,d.jsx)("button",{type:"button",onClick:()=>af(a=>!a),className:"mb-4 rounded-xl border border-border px-4 py-2 text-sm font-semibold text-text-main",children:ae?"Hide OIDC settings":"Show OIDC settings"}),ae&&(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsx)("div",{className:"grid gap-3 md:grid-cols-3",children:[{value:"password",title:"Password/LDAP",desc:"Keep local and LDAP login."},{value:"oidc",title:"OIDC only",desc:"Disable local/LDAP login when configured."},{value:"both",title:"Both",desc:"Allow either OIDC or local/LDAP."}].map(a=>{let b=Y.authMode===a.value;return(0,d.jsxs)("button",{type:"button",onClick:()=>Z(b=>({...b,authMode:a.value})),className:`rounded-xl border p-3 text-left ${b?"border-primary bg-primary/10":"border-border bg-background hover:border-primary/40"}`,children:[(0,d.jsx)("div",{className:"font-semibold text-text-main",children:a.title}),(0,d.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:a.desc})]},a.value)})}),(0,d.jsxs)("div",{className:"grid gap-4 lg:grid-cols-2",children:[(0,d.jsx)(r,{label:"Issuer URL",children:(0,d.jsx)(s,{value:Y.oidcIssuerUrl,onChange:a=>Z({...Y,oidcIssuerUrl:a.target.value})})}),(0,d.jsx)(r,{label:"Client ID",children:(0,d.jsx)(s,{value:Y.oidcClientId,onChange:a=>Z({...Y,oidcClientId:a.target.value})})}),(0,d.jsx)(r,{label:"Client Secret",children:(0,d.jsx)(s,{type:"password",value:$,onChange:a=>_(a.target.value),placeholder:a.oidcConfigured?"Saved — leave blank to keep":"Client secret"})}),(0,d.jsx)(r,{label:"Scopes",children:(0,d.jsx)(s,{value:Y.oidcScopes,onChange:a=>Z({...Y,oidcScopes:a.target.value})})}),(0,d.jsx)(r,{label:"Login label",children:(0,d.jsx)(s,{value:Y.oidcLoginLabel,onChange:a=>Z({...Y,oidcLoginLabel:a.target.value})})})]}),(0,d.jsx)("button",{type:"button",onClick:()=>aN(),disabled:ac,className:"rounded-xl bg-primary px-4 py-2 text-sm font-semibold text-white disabled:opacity-50",children:ac?"Saving...":"Save OIDC settings"}),(0,d.jsx)(p,{status:aa})]})]})]})}}};var b=require("../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[4741,2430,8316,8946,402,5681,4404,6064,6328,8640],()=>b(b.s=14222));module.exports=c})();
|