@jheavenknows/bluerouter 5.3.83 → 5.3.85
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 +6 -5
- package/app/.next-cli-build/build-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.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- 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 +2 -2
- 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.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/model-profiles/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/model-profiles/page.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/local-ai-report/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/local-ai-report/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/local-ai-report/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.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/personal/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/personal/page.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js.nft.json +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.js.nft.json +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 +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/stt/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/stt/page.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/resource-monitor/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/resource-monitor/page.js.nft.json +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/routing-topology/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/routing-topology/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/routing-topology/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.js.nft.json +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.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error/page.js +1 -1
- package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found/page.js +1 -1
- package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/app/.next-cli-build/server/app/_not-found.rsc +6 -6
- package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/api/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 -0
- package/app/.next-cli-build/server/app/api/audit-proxy/me/route.js.nft.json +1 -0
- package/app/.next-cli-build/server/app/api/audit-proxy/me/route_client-reference-manifest.js +1 -0
- package/app/.next-cli-build/server/app/api/audit-proxy/route.js +2 -71
- package/app/.next-cli-build/server/app/api/audit-proxy/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 +2 -2
- package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/logout/route.js +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/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 +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/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 +1 -1
- 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 +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/qwen-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/qwen-settings/route.js.nft.json +1 -1
- 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/combos/[id]/route.js +2 -2
- 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 +2 -2
- 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/local-ai-report/route.js +2 -2
- package/app/.next-cli-build/server/app/api/dashboard/local-ai-report/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/routing-topology/config/route.js +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/routing-topology/config/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/routing-topology/live/route.js +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/routing-topology/live/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/routing-topology/route.js +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/routing-topology/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/token-saver/route.js +2 -2
- 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/health/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/init/route.js +1 -1
- package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/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/locale/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js +2 -2
- package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/availability/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/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/auto-import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/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/provider-nodes/validate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js +2 -2
- package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
- package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/route.js +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
- package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/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 +2 -2
- 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 +3 -3
- 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/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/require-login/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/route.js +2 -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/shutdown/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tags/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +2 -2
- package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/load/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/save/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/disable/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/enable/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/status/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/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 +2 -2
- package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/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/restart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/callback/page.js +1 -1
- package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/callback.html +1 -1
- package/app/.next-cli-build/server/app/callback.rsc +6 -6
- package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/ai-power-index.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/ai-power-index.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/!KGRhc2hib2FyZCk/dashboard/ai-power-index/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/api-keys.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/api-keys.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys/__PAGE__.segment.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_full.segment.rsc +10 -10
- package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/model-profiles/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cluster.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/cluster.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/cluster.segments/!KGRhc2hib2FyZCk/dashboard/cluster/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/cluster.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/cluster.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/local-ai-report.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/local-ai-report.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/!KGRhc2hib2FyZCk/dashboard/local-ai-report/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/logs.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/logs.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/logs.segments/!KGRhc2hib2FyZCk/dashboard/logs/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/logs.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/logs.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/personal.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/personal.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/personal.segments/!KGRhc2hib2FyZCk/dashboard/personal/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/personal.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/personal.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/provider-health.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/provider-health.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/stt.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/stt.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/providers/stt.segments/!KGRhc2hib2FyZCk/dashboard/providers/stt/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/providers/stt.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/providers/stt.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/tts.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/tts.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/providers/tts.segments/!KGRhc2hib2FyZCk/dashboard/providers/tts/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/providers/tts.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/providers/tts.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.rsc +9 -9
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +9 -9
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +9 -9
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/resource-monitor.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/resource-monitor.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/!KGRhc2hib2FyZCk/dashboard/resource-monitor/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/routing-topology.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/routing-topology.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/routing-topology.segments/!KGRhc2hib2FyZCk/dashboard/routing-topology/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/routing-topology.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/routing-topology.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings/pricing/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard.html +1 -1
- package/app/.next-cli-build/server/app/dashboard.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/favicon.ico/route.js +1 -1
- package/app/.next-cli-build/server/app/favicon.ico/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/index.html +1 -1
- package/app/.next-cli-build/server/app/index.rsc +6 -6
- package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/landing/page.js +1 -1
- package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/landing.html +1 -1
- package/app/.next-cli-build/server/app/landing.rsc +6 -6
- package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/login/page.js +1 -1
- package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/login.html +1 -1
- package/app/.next-cli-build/server/app/login.rsc +7 -7
- package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/manifest.webmanifest/route.js +2 -2
- package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/page.js +1 -1
- package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app-paths-manifest.json +6 -5
- package/app/.next-cli-build/server/chunks/2731.js +2 -2
- 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/3958.js +10 -10
- package/app/.next-cli-build/server/chunks/4432.js +1 -0
- package/app/.next-cli-build/server/chunks/4696.js +1 -1
- package/app/.next-cli-build/server/chunks/4746.js +1 -1
- package/app/.next-cli-build/server/chunks/5210.js +4 -4
- package/app/.next-cli-build/server/chunks/5530.js +18 -0
- package/app/.next-cli-build/server/chunks/607.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/6977.js +1 -1
- package/app/.next-cli-build/server/chunks/6992.js +1 -1
- package/app/.next-cli-build/server/chunks/7007.js +2 -0
- package/app/.next-cli-build/server/chunks/7812.js +1 -1
- package/app/.next-cli-build/server/chunks/8352.js +1 -1
- package/app/.next-cli-build/server/chunks/8640.js +1 -1
- package/app/.next-cli-build/server/chunks/9083.js +69 -0
- package/app/.next-cli-build/server/functions-config-manifest.json +1 -0
- 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/static/IIFO5RGYvaU0aOO82Ud1_/_buildManifest.js +1 -0
- package/app/.next-cli-build/static/chunks/{5263-5c710b449bb8ea9b.js → 5263-138eecf0d19758fe.js} +1 -1
- package/app/.next-cli-build/static/chunks/{5497-ba85afce54af9f8f.js → 5497-a78a755c8aa4623d.js} +3 -3
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/analytics/{page-c8ad699d35b93c2d.js → page-ceed626d3c451d99.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/audit-proxy/page-92c59be230ac596e.js +21 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/local-ai-report/{page-0f3e7963fc09b58f.js → page-560eded56e8ad020.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/_global-error/page-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/audit-proxy/ca/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/audit-proxy/me/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/audit-proxy/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/ldap/test/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/ldap/users/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/login/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/logout/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/callback/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/start/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/test/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/status/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/view-mode/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/branding/[asset]/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/branding/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/branding/upload/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-model-profiles/cloud-models/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-model-profiles/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/autostart/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/prompt-log-db/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/root-ca/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-settings/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/copilot-settings/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-settings/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/hermes-settings/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/openclaw-settings/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/opencode-settings/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/qwen-settings/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cluster/config/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cluster/heartbeat/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cluster/peers/[id]/command/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cluster/peers/[id]/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cluster/peers/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cluster/snapshot/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cluster/sync/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cluster/test/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/combos/[id]/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/combos/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/ai-power-index/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/analytics/ai-models/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/analytics/analyze/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/analytics/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/combos/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/endpoint/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/local-ai-report/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/[id]/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/options/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/routing-topology/config/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/routing-topology/live/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/routing-topology/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/token-saver/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/health/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/init/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/keys/[id]/caveman-test/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/keys/[id]/rotate/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/keys/[id]/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/keys/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/locale/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/message/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/sse/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/deepgram/voices/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/inworld/voices/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/minimax/voices/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/voices/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/alias/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/availability/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/custom/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/disabled/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/test/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/[provider]/[action]/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/codex/import-token/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/auto-import/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/import/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/gitlab/pat/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/grok-cli/device-code/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/grok-cli/poll/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/iflow/cookie/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/auto-import/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-authorize/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-exchange/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/api-key-models/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/import-models/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/move/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/usage/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/client/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/monitor/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/permissions/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/routing/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/shares/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/visibility/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pricing/catalog/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pricing/recalculate/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pricing/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/provider-health/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/[id]/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/openai-compatible/manage/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/validate/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/models/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test-models/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/client/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/kilo/free-models/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/suggested-models/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/test-batch/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/validate/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/test/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/deno-deploy/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/vercel-deploy/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/resource-monitor/[id]/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/resource-monitor/ai-models/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/resource-monitor/analyze/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/resource-monitor/history/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/resource-monitor/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/database/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/proxy-test/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/require-login/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/shutdown/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tags/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/stream/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/load/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/save/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/send/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/translate/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/disable/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/enable/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/status/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-check/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-disable/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-enable/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-install/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-login/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-start-daemon/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/chart/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/history/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/logs/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/providers/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/request-details/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/request-logs/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/stats/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/stream/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/api/chat/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/speech/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/transcriptions/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/voices/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/chat/completions/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/embeddings/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/images/generations/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/messages/count_tokens/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/messages/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/models/[kind]/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/models/info/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/models/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/responses/compact/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/responses/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/search/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/web/fetch/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1beta/models/[...path]/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1beta/models/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/version/restart/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/version/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/version/shutdown/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/version/update/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/manifest.webmanifest/route-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/page-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/app-error-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/forbidden-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/not-found-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/unauthorized-341e13c0c7617e2b.js +1 -0
- package/app/.next-cli-build/static/css/{f21569c5199f3f94.css → 5ea18070d2325887.css} +1 -1
- package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-5.3.78-to-5.3.79-5.3.79-20260823-174256 → upgrade-5.3.81-to-5.3.82-5.3.82-20260823-201609}/data.sqlite +0 -0
- package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-5.3.77-to-5.3.78-5.3.78-20260823-172736 → upgrade-5.3.82-to-5.3.83-5.3.83-20260823-202359}/data.sqlite +0 -0
- package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-5.3.83-to-5.3.84-5.3.84-20260823-203807/data.sqlite +0 -0
- package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite +0 -0
- package/app/package.json +4 -1
- package/package.json +2 -2
- package/app/.next-cli-build/server/chunks/3767.js +0 -18
- package/app/.next-cli-build/static/3m5XOO0ryP3m4X7stX7qm/_buildManifest.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/audit-proxy/page-992f9910d3c75785.js +0 -21
- package/app/.next-cli-build/static/chunks/app/_global-error/page-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/audit-proxy/ca/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/audit-proxy/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/ldap/test/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/ldap/users/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/login/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/logout/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/callback/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/start/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/test/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/status/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/view-mode/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/branding/[asset]/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/branding/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/branding/upload/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-model-profiles/cloud-models/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-model-profiles/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/autostart/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/prompt-log-db/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/root-ca/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-settings/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/copilot-settings/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-settings/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/hermes-settings/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/openclaw-settings/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/opencode-settings/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/qwen-settings/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cluster/config/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cluster/heartbeat/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cluster/peers/[id]/command/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cluster/peers/[id]/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cluster/peers/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cluster/snapshot/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cluster/sync/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cluster/test/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/combos/[id]/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/combos/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/ai-power-index/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/analytics/ai-models/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/analytics/analyze/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/analytics/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/combos/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/endpoint/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/local-ai-report/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/[id]/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/options/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/routing-topology/config/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/routing-topology/live/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/routing-topology/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/token-saver/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/health/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/init/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/keys/[id]/caveman-test/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/keys/[id]/rotate/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/keys/[id]/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/keys/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/locale/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/message/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/sse/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/deepgram/voices/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/inworld/voices/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/minimax/voices/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/voices/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/alias/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/availability/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/custom/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/disabled/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/test/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/[provider]/[action]/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/codex/import-token/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/auto-import/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/import/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/gitlab/pat/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/grok-cli/device-code/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/grok-cli/poll/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/iflow/cookie/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/auto-import/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-authorize/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-exchange/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/api-key-models/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/import-models/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/move/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/usage/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/client/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/monitor/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/permissions/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/routing/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/shares/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/visibility/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pricing/catalog/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pricing/recalculate/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pricing/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/provider-health/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/[id]/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/openai-compatible/manage/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/validate/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/models/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test-models/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/client/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/kilo/free-models/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/suggested-models/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/test-batch/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/validate/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/test/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/deno-deploy/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/vercel-deploy/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/resource-monitor/[id]/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/resource-monitor/ai-models/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/resource-monitor/analyze/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/resource-monitor/history/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/resource-monitor/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/database/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/proxy-test/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/require-login/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/shutdown/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tags/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/stream/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/load/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/save/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/send/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/translate/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/disable/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/enable/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/status/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-check/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-disable/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-enable/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-install/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-login/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-start-daemon/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/chart/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/history/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/logs/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/providers/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/request-details/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/request-logs/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/stats/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/stream/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/api/chat/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/speech/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/transcriptions/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/voices/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/chat/completions/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/embeddings/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/images/generations/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/messages/count_tokens/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/messages/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/models/[kind]/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/models/info/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/models/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/responses/compact/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/responses/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/search/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/web/fetch/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1beta/models/[...path]/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1beta/models/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/version/restart/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/version/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/version/shutdown/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/version/update/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/manifest.webmanifest/route-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/app/page-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/app-error-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/forbidden-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/not-found-a48c4c9356e97886.js +0 -1
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/unauthorized-a48c4c9356e97886.js +0 -1
- 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/.next-cli-build/static/{3m5XOO0ryP3m4X7stX7qm → IIFO5RGYvaU0aOO82Ud1_}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5236],{9707:(e,t,s)=>{"use strict";s.d(t,{default:()=>N});var r=s(95155),a=s(12115),n=s(98500),d=s.n(n);function o(){let[e,t]=(0,a.useState)(null),[s,n]=(0,a.useState)(!1),[d,o]=(0,a.useState)(!1),[l,i]=(0,a.useState)([]),[c,x]=(0,a.useState)(!1),[m,p]=(0,a.useState)(""),[u,h]=(0,a.useState)(!1),[b,g]=(0,a.useState)(""),[y,f]=(0,a.useState)(""),j=(0,a.useCallback)(async()=>{try{let e=await fetch("/api/audit-proxy?limit=1",{cache:"no-store"}),s=await e.json();if(!e.ok)throw Error(s.error||"Cannot load Audit Proxy IP filter");t(s.config),n(s.status?.running===!0),x(s.config?.clientIpFilterEnabled===!0),p((s.config?.allowedClientIps||[]).join("\n")),o(s.status?.security?.clientIpFilterSource==="grants"),i((s.config?.accessGrants||[]).flatMap(e=>e?.ips||[]))}catch(e){g(e.message||"Cannot load Audit Proxy IP filter")}},[]);(0,a.useEffect)(()=>{j()},[j]);let N=(0,a.useMemo)(()=>m.split(/\r?\n/).map(e=>e.trim()).filter(Boolean),[m]),v=async()=>{if(e){if(c&&0===N.length)return void g("Add at least one client IP or CIDR before enabling the filter.");h(!0),g(""),f("");try{let s=await fetch("/api/audit-proxy",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"save-ip-filter",enabled:c,allowedClientIps:N})}),r=await s.json().catch(()=>({}));if(!s.ok)throw Error(r.error||"Failed to save client IP filter");f(r.restarted?"Client IP filter saved and Audit Proxy restarted.":"Client IP filter saved."),t(r.config||e),n(r.status?.running===!0),x(r.config?.clientIpFilterEnabled===!0),p((r.config?.allowedClientIps||[]).join("\n")),o(r.status?.security?.clientIpFilterSource==="grants"),i((r.config?.accessGrants||[]).flatMap(e=>e?.ips||[]))}catch(e){g(e.message||"Failed to save client IP filter")}finally{h(!1)}}};return e?(0,r.jsxs)("section",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,r.jsxs)("div",{className:"flex flex-col gap-3 lg:flex-row lg:items-start lg:justify-between",children:[(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-primary",children:"shield_lock"}),(0,r.jsx)("h2",{className:"font-semibold text-text-main",children:"Client IP filter"}),(0,r.jsx)("span",{className:`rounded-full px-2 py-0.5 text-[10px] font-semibold ${c?"bg-green-500/10 text-green-600 dark:text-green-400":"bg-surface text-text-muted"}`,children:c?"ENABLED":"DISABLED"})]}),(0,r.jsxs)("p",{className:"mt-1 max-w-4xl text-xs leading-5 text-text-muted",children:["Restrict TCP access to the Audit Proxy itself. Only client IPs/CIDRs below can use port ",e.port,". The decision uses the socket peer IP; X-Forwarded-For and other HTTP headers are ignored."]}),d?(0,r.jsxs)("p",{className:"mt-2 max-w-4xl rounded-lg border border-primary/30 bg-primary/5 px-3 py-2 text-xs leading-5 text-text-muted",children:[(0,r.jsx)("strong",{className:"text-primary",children:"Superseded by Access grants."})," The proxy is enforcing the ",new Set(l).size," address(es) granted to users above, and this list is ignored until every grant has no IP left. Manage access there."]}):null]}),(0,r.jsxs)("label",{className:"flex shrink-0 items-center gap-2 text-sm font-medium text-text-main",children:[(0,r.jsx)("input",{type:"checkbox",checked:c,onChange:e=>x(e.target.checked),disabled:d,className:"h-4 w-4 accent-[var(--color-primary)] disabled:opacity-50"}),"Enable IP filter"]})]}),b?(0,r.jsx)("div",{className:"mt-3 rounded-lg border border-red-500/30 bg-red-500/10 px-3 py-2 text-xs text-red-600 dark:text-red-400",children:b}):null,y?(0,r.jsx)("div",{className:"mt-3 rounded-lg border border-green-500/30 bg-green-500/10 px-3 py-2 text-xs text-green-600 dark:text-green-400",children:y}):null,(0,r.jsxs)("div",{className:"mt-4 grid gap-4 lg:grid-cols-[1fr_320px]",children:[(0,r.jsxs)("label",{className:"grid gap-1.5",children:[(0,r.jsx)("span",{className:"text-sm font-semibold text-text-main",children:"Allowed client IPs / CIDRs"}),(0,r.jsx)("textarea",{rows:6,value:m,onChange:e=>p(e.target.value),disabled:d,placeholder:"172.16.253.3\n172.16.253.0/24\n10.20.30.15\n2001:db8::/64",className:"rounded-lg border border-border bg-background px-3 py-2 font-mono text-xs text-text-main outline-none focus:border-primary"}),(0,r.jsx)("span",{className:"text-[11px] leading-4 text-text-muted",children:"One IPv4, IPv6, or CIDR per line. IPv4-mapped IPv6 addresses are normalized automatically."})]}),(0,r.jsxs)("div",{className:"grid content-start gap-3",children:[(0,r.jsxs)("div",{className:"rounded-xl border border-primary/20 bg-primary/5 p-3 text-xs leading-5 text-text-muted",children:[(0,r.jsx)("div",{className:"font-semibold text-primary",children:"Security behavior"}),(0,r.jsx)("div",{className:"mt-1",children:"Allowed IP → proxy works normally."}),(0,r.jsx)("div",{children:"Other IP → TCP connection is immediately closed before CONNECT/HTTP parsing."}),(0,r.jsx)("div",{children:"Empty list + enabled → configuration is rejected."})]}),(0,r.jsx)("button",{type:"button",onClick:v,disabled:u||d,className:"rounded-lg bg-primary px-4 py-2 text-sm font-semibold text-white disabled:opacity-50",children:u?"Saving…":s?"Save & Restart Proxy":"Save IP Filter"}),s?(0,r.jsxs)("div",{className:"text-[11px] leading-4 text-text-muted",children:["Proxy is running, so applying this security policy requires a short restart of port ",e.port,"."]}):null]})]})]}):null}function l(){let[e,t]=(0,a.useState)(!1),[s,n]=(0,a.useState)(!1),[d,o]=(0,a.useState)([]),[l,i]=(0,a.useState)(!1),[c,x]=(0,a.useState)(""),[m,p]=(0,a.useState)(""),u=(e,s)=>{n(e?.proxyAuthEnabled===!0),o((e?.proxyAuthUsers||[]).map(e=>({username:e.username,hasPassword:!0===e.hasPassword,password:""}))),s&&t(!0===s.running)},h=(0,a.useCallback)(async()=>{try{let e=await fetch("/api/audit-proxy?limit=1",{cache:"no-store"}),t=await e.json();if(!e.ok)throw Error(t.error||"Cannot load proxy authentication");u(t.config,t.status)}catch(e){x(e.message||"Cannot load proxy authentication")}},[]);(0,a.useEffect)(()=>{h()},[h]);let b=(e,t)=>{o(s=>s.map((s,r)=>r===e?{...s,...t}:s))},g=async()=>{let e=d.map(e=>({...e,username:e.username.trim()}));if(s&&0===e.length)return void x("Add at least one account before enabling proxy authentication.");let t=e.find(e=>!e.hasPassword&&!e.password);if(t)return void x(`Set a password for ${t.username||"the new account"}.`);i(!0),x(""),p("");try{let t=await fetch("/api/audit-proxy",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"save-proxy-auth",enabled:s,users:e.map(e=>e.password?{username:e.username,password:e.password}:{username:e.username})})}),r=await t.json().catch(()=>({}));if(!t.ok)throw Error(r.error||"Failed to save proxy authentication");p(r.restarted?"Proxy authentication saved and Audit Proxy restarted.":"Proxy authentication saved."),u(r.config,r.status)}catch(e){x(e.message||"Failed to save proxy authentication")}finally{i(!1)}};return(0,r.jsxs)("section",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,r.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[(0,r.jsxs)("div",{className:"max-w-3xl",children:[(0,r.jsx)("h2",{className:"font-semibold text-text-main",children:"Proxy authentication"}),(0,r.jsx)("p",{className:"mt-1 text-xs leading-5 text-text-muted",children:"Requires a username and password on every CONNECT, and records which account opened each tunnel, so the audit table answers who rather than only which IP. Give each person or CI job its own account: removing one leaves the others working."}),(0,r.jsx)("p",{className:"mt-2 rounded-lg border border-amber-500/30 bg-amber-500/5 p-2 text-[11px] leading-5 text-amber-700 dark:text-amber-300",children:"The proxy listener speaks plain HTTP, so the credential crosses the client-to-proxy hop unencrypted (Basic is base64, not encryption). This keeps out anyone without the password and attributes traffic to a person; it does not hide the password from someone capturing packets on that network. On an untrusted network use it alongside the client IP allowlist, not instead of it. The password also ends up in HTTPS_PROXY, and so in the process list and shell history."})]}),(0,r.jsxs)("label",{className:"flex shrink-0 items-center gap-2 text-sm text-text-main",children:[(0,r.jsx)("input",{type:"checkbox",checked:s,onChange:e=>n(e.target.checked),disabled:l,className:"h-4 w-4 accent-[var(--color-primary)]"}),"Require credentials"]})]}),(0,r.jsxs)("div",{className:"mt-4 grid gap-2",children:[0===d.length?(0,r.jsx)("p",{className:"rounded-xl border border-border bg-background/50 p-3 text-xs text-text-muted",children:"No accounts yet."}):null,d.map((e,t)=>(0,r.jsxs)("div",{className:"grid gap-2 rounded-xl border border-border bg-background/50 p-3 sm:grid-cols-[1fr_1fr_auto]",children:[(0,r.jsx)("input",{type:"text",value:e.username,onChange:e=>b(t,{username:e.target.value}),disabled:l,placeholder:"username",className:"min-w-0 rounded-lg border border-border bg-background px-3 py-2 font-mono text-xs text-text-main outline-none focus:border-primary disabled:opacity-60"}),(0,r.jsx)("input",{type:"password",value:e.password,onChange:e=>b(t,{password:e.target.value}),disabled:l,placeholder:e.hasPassword?"Saved — leave blank to keep":"Set a password",className:"min-w-0 rounded-lg border border-border bg-background px-3 py-2 font-mono text-xs text-text-main outline-none focus:border-primary disabled:opacity-60"}),(0,r.jsx)("button",{type:"button",onClick:()=>{let e;(!(e=d[t]).hasPassword||window.confirm(`Remove ${e.username}? Anything using this account stops working after the restart.`))&&o(e=>e.filter((e,s)=>s!==t))},disabled:l,className:"rounded-lg border border-border px-3 py-2 text-xs text-text-muted transition hover:border-red-500/40 hover:text-red-600 disabled:opacity-50",children:"Remove"})]},t))]}),(0,r.jsxs)("div",{className:"mt-3 flex flex-wrap items-center gap-2",children:[(0,r.jsx)("button",{type:"button",onClick:()=>o(e=>[...e,{username:"",hasPassword:!1,password:""}]),disabled:l,className:"rounded-lg border border-border px-3 py-1.5 text-xs text-text-muted transition hover:border-primary hover:text-primary disabled:opacity-50",children:"Add account"}),(0,r.jsx)("button",{type:"button",onClick:g,disabled:l,className:"rounded-lg bg-primary px-3 py-1.5 text-xs font-semibold text-white transition hover:opacity-90 disabled:opacity-50",children:l?"Saving…":e?"Save & Restart Proxy":"Save"}),(0,r.jsxs)("span",{className:"text-[11px] text-text-muted",children:["Clients pass credentials in the proxy URL: ",(0,r.jsx)("code",{className:"font-mono",children:"http://USER:PASSWORD@host:port"})," ","— URL-encode ",(0,r.jsx)("code",{className:"font-mono",children:"@ : / #"})," if the password contains them."]})]}),c?(0,r.jsx)("p",{className:"mt-3 rounded-lg border border-red-500/30 bg-red-500/5 p-2 text-xs text-red-600 dark:text-red-400",children:c}):null,m?(0,r.jsx)("p",{className:"mt-3 rounded-lg border border-green-500/30 bg-green-500/5 p-2 text-xs text-green-600 dark:text-green-400",children:m}):null]})}function i({onChanged:e}){let[t,s]=(0,a.useState)(null),[n,d]=(0,a.useState)("manual"),[o,l]=(0,a.useState)(0),[c,x]=(0,a.useState)(!1),[m,p]=(0,a.useState)(""),[u,h]=(0,a.useState)(""),[b,g]=(0,a.useState)(""),[y,f]=(0,a.useState)(""),[j,N]=(0,a.useState)(""),[v,w]=(0,a.useState)(""),[C,k]=(0,a.useState)(""),P=(0,a.useCallback)(e=>{s(Array.isArray(e?.config?.accessGrants)?e.config.accessGrants:[]),d(e?.status?.security?.clientIpFilterSource||"manual"),l(Number(e?.status?.security?.enforcedClientIpCount||0)),x(e?.status?.running===!0)},[]),S=(0,a.useCallback)(async()=>{try{let e=await fetch("/api/audit-proxy?limit=1",{cache:"no-store"}),t=await e.json();if(!e.ok)throw Error(t.error||"Cannot load Audit Proxy access grants");P(t)}catch(e){N(e.message||"Cannot load Audit Proxy access grants")}},[P]);(0,a.useEffect)(()=>{S()},[S]);let T=(0,a.useMemo)(()=>String(u||"").split(/[\r\n,]+/).map(e=>e.trim()).filter(Boolean),[u]),A=async(t,s,r)=>{f(t),N(""),w("");try{let a=await fetch("/api/audit-proxy",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:t,...s})}),n=await a.json().catch(()=>({}));if(!a.ok)throw Error(n.error||"Failed to save Audit Proxy access grant");return P(n),w(n.restarted?`${r} Audit Proxy restarted to apply it.`:r),e?.(),!0}catch(e){return N(e.message||"Failed to save Audit Proxy access grant"),!1}finally{f("")}},I=async()=>{let e=String(m||"").trim().toLowerCase();e?await A("save-access-grant",{userId:e,ips:T,note:b},`Access grant for ${e} saved.`)&&(p(""),h(""),g("")):N("Enter the dashboard username or email to grant access to.")},E=async e=>{await A("delete-access-grant",{userId:e},`Access grant for ${e} revoked.`)&&k("")};if(!t)return null;let R=t.reduce((e,t)=>e+(t.ips?.length||0),0);return(0,r.jsxs)("section",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,r.jsx)("div",{className:"flex flex-col gap-3 lg:flex-row lg:items-start lg:justify-between",children:(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-primary",children:"group"}),(0,r.jsx)("h2",{className:"font-semibold text-text-main",children:"Access grants — who may use this proxy"}),(0,r.jsx)("span",{className:`rounded-full px-2 py-0.5 text-[10px] font-semibold ${"grants"===n?"bg-green-500/10 text-green-600 dark:text-green-400":"bg-surface text-text-muted"}`,children:"grants"===n?`ENFORCING ${o} IP`:"NOT ENFORCING"})]}),(0,r.jsxs)("p",{className:"mt-1 max-w-4xl text-xs leading-5 text-text-muted",children:["Grant a dashboard user the client IPs they may connect from. As soon as one grant carries an IP, the proxy accepts ",(0,r.jsx)("strong",{children:"only granted addresses"})," and the free-text Client IP filter below is superseded. Each granted user also gets a read-only ",(0,r.jsx)("span",{className:"font-mono",children:"/dashboard/audit-proxy"})," page with the root CA download, the launcher commands and their own addresses — no configuration, no audited traffic."]})]})}),j?(0,r.jsx)("div",{className:"mt-3 rounded-lg border border-red-500/30 bg-red-500/10 px-3 py-2 text-xs text-red-600 dark:text-red-400",children:j}):null,v?(0,r.jsx)("div",{className:"mt-3 rounded-lg border border-green-500/30 bg-green-500/10 px-3 py-2 text-xs text-green-600 dark:text-green-400",children:v}):null,(0,r.jsxs)("div",{className:"mt-4 grid gap-4 lg:grid-cols-[1fr_320px]",children:[(0,r.jsxs)("div",{className:"grid gap-3",children:[(0,r.jsxs)("label",{className:"grid gap-1.5",children:[(0,r.jsx)("span",{className:"text-sm font-semibold text-text-main",children:"Dashboard username / email"}),(0,r.jsx)("input",{value:m,onChange:e=>p(e.target.value),placeholder:"anh-tct or anh-tct@fujinet.net",className:"rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary"}),(0,r.jsx)("span",{className:"text-[11px] leading-4 text-text-muted",children:"The identity the user logs into this dashboard with (LDAP/OIDC/local). Either the username or the email form is matched."})]}),(0,r.jsxs)("label",{className:"grid gap-1.5",children:[(0,r.jsx)("span",{className:"text-sm font-semibold text-text-main",children:"Allowed client IPs / CIDRs"}),(0,r.jsx)("textarea",{rows:4,value:u,onChange:e=>h(e.target.value),placeholder:"172.16.253.2\n172.16.6.0/24",className:"rounded-lg border border-border bg-background px-3 py-2 font-mono text-xs text-text-main outline-none focus:border-primary"}),(0,r.jsx)("span",{className:"text-[11px] leading-4 text-text-muted",children:"One IPv4, IPv6 or CIDR per line — the workstation addresses this user runs Claude Code / Codex from."})]}),(0,r.jsxs)("label",{className:"grid gap-1.5",children:[(0,r.jsx)("span",{className:"text-sm font-semibold text-text-main",children:"Note (optional)"}),(0,r.jsx)("input",{value:b,onChange:e=>g(e.target.value),placeholder:"Laptop + VDI",className:"rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary"})]})]}),(0,r.jsxs)("div",{className:"grid content-start gap-3",children:[(0,r.jsxs)("div",{className:"rounded-xl border border-primary/20 bg-primary/5 p-3 text-xs leading-5 text-text-muted",children:[(0,r.jsx)("div",{className:"font-semibold text-primary",children:"What a grant changes"}),(0,r.jsx)("div",{className:"mt-1",children:"Granted IP → proxy works normally."}),(0,r.jsx)("div",{children:"Any other IP → TCP connection closed before CONNECT is parsed."}),(0,r.jsx)("div",{children:"Granted user → read-only Audit Proxy page + CA download."}),(0,r.jsx)("div",{children:"No grant with an IP → falls back to the Client IP filter below."})]}),(0,r.jsx)("button",{type:"button",onClick:I,disabled:!!y,className:"rounded-lg bg-primary px-4 py-2 text-sm font-semibold text-white disabled:opacity-50",children:"save-access-grant"===y?"Saving…":c?"Save grant & restart proxy":"Save grant"}),c?(0,r.jsx)("div",{className:"text-[11px] leading-4 text-text-muted",children:"The proxy is running, so applying a grant requires a short restart of the listener."}):null]})]}),(0,r.jsxs)("div",{className:"mt-4 border-t border-border pt-4",children:[(0,r.jsxs)("div",{className:"mb-3 flex flex-wrap items-center justify-between gap-2",children:[(0,r.jsx)("h3",{className:"text-sm font-semibold text-text-main",children:"Granted users"}),(0,r.jsxs)("span",{className:"text-[11px] text-text-muted",children:[t.length," user \xb7 ",R," address"]})]}),0===t.length?(0,r.jsx)("div",{className:"rounded-xl border border-dashed border-border p-6 text-center text-xs text-text-muted",children:"No grant yet. The proxy still follows the Client IP filter below, and only admins can open this page."}):(0,r.jsx)("div",{className:"overflow-x-auto rounded-xl border border-border",children:(0,r.jsxs)("table",{className:"min-w-full divide-y divide-border text-xs",children:[(0,r.jsx)("thead",{className:"bg-surface/80 text-left uppercase tracking-wide text-text-muted",children:(0,r.jsxs)("tr",{children:[(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"User"}),(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"Allowed client IPs"}),(0,r.jsx)("th",{className:"px-3 py-2 font-medium",children:"Note"}),(0,r.jsx)("th",{className:"px-3 py-2 text-right font-medium",children:"Actions"})]})}),(0,r.jsx)("tbody",{className:"divide-y divide-border bg-background",children:t.map(e=>(0,r.jsxs)("tr",{className:"align-top",children:[(0,r.jsx)("td",{className:"px-3 py-3 font-mono text-text-main",children:e.userId}),(0,r.jsx)("td",{className:"px-3 py-3",children:e.ips?.length?(0,r.jsx)("div",{className:"flex flex-wrap gap-1",children:e.ips.map(e=>(0,r.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-0.5 font-mono text-[10px] text-text-muted",children:e},e))}):(0,r.jsx)("span",{className:"text-amber-600 dark:text-amber-400",children:"No IP — page access only, proxy will refuse this user"})}),(0,r.jsx)("td",{className:"px-3 py-3 text-text-muted",children:e.note||"-"}),(0,r.jsx)("td",{className:"px-3 py-3",children:(0,r.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,r.jsx)("button",{type:"button",onClick:()=>{p(e.userId),h((e.ips||[]).join("\n")),g(e.note||"")},className:"rounded-lg border border-border px-2.5 py-1 font-semibold text-text-main hover:bg-surface",children:"Edit"}),C===e.userId?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("button",{type:"button",onClick:()=>E(e.userId),disabled:!!y,className:"rounded-lg border border-red-500/30 bg-red-500/10 px-2.5 py-1 font-semibold text-red-600 disabled:opacity-50",children:"Confirm revoke"}),(0,r.jsx)("button",{type:"button",onClick:()=>k(""),className:"rounded-lg border border-border px-2.5 py-1 text-text-muted",children:"Cancel"})]}):(0,r.jsx)("button",{type:"button",onClick:()=>k(e.userId),className:"rounded-lg border border-red-500/30 px-2.5 py-1 font-semibold text-red-600 hover:bg-red-500/10",children:"Revoke"})]})})]},e.userId))})]})})]})]})}var c=s(83163);let x=["api.anthropic.com","*.anthropic.com","claude.ai","*.claude.ai"],m=["api.openai.com","*.openai.com","chatgpt.com","*.chatgpt.com"],p=[{id:"claude-code",label:"Claude Code"},{id:"codex",label:"OpenAI Codex"},{id:"gemini-cli",label:"Gemini CLI"},{id:"cursor",label:"Cursor"},{id:"curl",label:"curl / scripts"}];function u({ok:e,children:t}){return(0,r.jsxs)("span",{className:`inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium ${e?"border-green-500/30 bg-green-500/10 text-green-600 dark:text-green-400":"border-border bg-surface text-text-muted"}`,children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[13px]",children:e?"check_circle":"radio_button_unchecked"}),t]})}function h(e){let t=Number(e||0);return!Number.isFinite(t)||t<=0?"0":t>=1e6?`${(t/1e6).toFixed(2)}M`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)}function b(e){let t=Number(e||0);return!Number.isFinite(t)||t<=0?"$0.00":t<.01?`$${t.toFixed(4)}`:`$${t.toFixed(2)}`}function g({label:e,value:t,hint:s}){return(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-background/50 p-3",children:[(0,r.jsx)("div",{className:"text-[11px] font-medium uppercase tracking-wide text-text-muted",children:e}),(0,r.jsx)("div",{className:"mt-1 text-lg font-semibold text-text-main",children:t}),s?(0,r.jsx)("div",{className:"mt-0.5 text-[11px] leading-4 text-text-muted",children:s}):null]})}function y({title:e,rows:t}){return t?.length?(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("h3",{className:"text-xs font-semibold uppercase tracking-wide text-text-muted",children:e}),(0,r.jsx)("div",{className:"mt-2 overflow-x-auto",children:(0,r.jsxs)("table",{className:"w-full min-w-[420px] text-left text-xs",children:[(0,r.jsx)("thead",{className:"border-b border-border text-text-muted",children:(0,r.jsxs)("tr",{children:[(0,r.jsx)("th",{className:"px-2 py-1.5 font-medium",children:"Name"}),(0,r.jsx)("th",{className:"px-2 py-1.5 text-right font-medium",children:"Reqs"}),(0,r.jsx)("th",{className:"px-2 py-1.5 text-right font-medium",children:"In"}),(0,r.jsx)("th",{className:"px-2 py-1.5 text-right font-medium",children:"Out"}),(0,r.jsx)("th",{className:"px-2 py-1.5 text-right font-medium",children:"Cache R/W"}),(0,r.jsx)("th",{className:"px-2 py-1.5 text-right font-medium",children:"Cost"})]})}),(0,r.jsx)("tbody",{children:t.map(e=>(0,r.jsxs)("tr",{className:"border-b border-border/60 text-text-main",children:[(0,r.jsx)("td",{className:"max-w-[220px] truncate px-2 py-1.5 font-mono text-[11px]",title:e.label,children:e.label}),(0,r.jsx)("td",{className:"px-2 py-1.5 text-right",children:e.requests}),(0,r.jsx)("td",{className:"px-2 py-1.5 text-right",children:h(e.inputTokens)}),(0,r.jsx)("td",{className:"px-2 py-1.5 text-right",children:h(e.outputTokens)}),(0,r.jsxs)("td",{className:"px-2 py-1.5 text-right text-text-muted",children:[h(e.cacheReadTokens),"/",h(e.cacheCreationTokens)]}),(0,r.jsx)("td",{className:"px-2 py-1.5 text-right",children:b(e.cost)})]},e.label))})]})})]}):null}function f({label:e,hint:t,children:s}){return(0,r.jsxs)("label",{className:"grid gap-1.5",children:[(0,r.jsx)("span",{className:"text-sm font-semibold text-text-main",children:e}),s,t?(0,r.jsx)("span",{className:"text-[11px] leading-4 text-text-muted",children:t}):null]})}function j({label:e,description:t,checked:s,onChange:a,disabled:n=!1}){return(0,r.jsxs)("label",{className:"flex items-start justify-between gap-4 rounded-xl border border-border bg-background/50 p-3",children:[(0,r.jsxs)("span",{children:[(0,r.jsx)("span",{className:"block text-sm font-semibold text-text-main",children:e}),(0,r.jsx)("span",{className:"mt-0.5 block text-xs leading-5 text-text-muted",children:t})]}),(0,r.jsx)("input",{type:"checkbox",checked:s,onChange:e=>a(e.target.checked),disabled:n,className:"mt-1 h-4 w-4 accent-[var(--color-primary)]"})]})}function N(){let[e,t]=(0,a.useState)(null),[s,n]=(0,a.useState)(null),[N,v]=(0,a.useState)(""),[w,C]=(0,a.useState)(""),[k,P]=(0,a.useState)(""),[S,T]=(0,a.useState)(null),[A,I]=(0,a.useState)("configuration"),E=(0,a.useCallback)(async(e=!0)=>{try{let s=await fetch("/api/audit-proxy?limit=50",{cache:"no-store"}),r=await s.json();if(!s.ok)throw Error(r.error||"Cannot load Audit Proxy");t(r),e?n(e=>e||r.config):n(r.config)}catch(e){C(e.message||"Cannot load Audit Proxy")}},[]);(0,a.useEffect)(()=>{E(!1);let e=setInterval(()=>E(!0),5e3);return()=>clearInterval(e)},[E]);let R=e?.status||{},O=R.security||{},$=R.rootCA||{},_=!0===R.running,H=(s?.allowedHosts||[]).join("\n"),L=(e,t)=>n(s=>({...s,[e]:t})),F=async(e,t={})=>{v(e),C(""),P("");try{let s=await fetch("/api/audit-proxy",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:e,...t})}),r=await s.json().catch(()=>({}));if(!s.ok)throw Error(r.error||`${e} failed`);return"test"===e?(T(r.test),P(`Simulation passed ${r.test.passed}/${r.test.total} checks.`)):P("clear-logs"===e?"Audit logs cleared.":`Audit Proxy ${e} completed.`),await E("start"!==e&&"restart"!==e),r}catch(t){return C(t.message||`${e} failed`),null}finally{v("")}},D=async()=>{v("save"),C(""),P("");try{let e=await fetch("/api/audit-proxy",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({config:s})}),t=await e.json();if(!e.ok)throw Error(t.error||"Save failed");n(t.config),P("Configuration saved."),await E(!0)}catch(e){C(e.message||"Save failed")}finally{v("")}},q=async()=>{v("save-client-host"),C(""),P("");try{let e=await fetch("/api/audit-proxy",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"save-client-host",clientProxyHost:s?.clientProxyHost||""})}),t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||"Failed to save Client proxy host");n(e=>({...e,clientProxyHost:t.config?.clientProxyHost||""})),P("Client proxy host saved."),await E(!0)}catch(e){C(e.message||"Failed to save Client proxy host")}finally{v("")}},U=async()=>{v("ca"),C("");try{let e=await fetch("/api/audit-proxy/ca",{method:"POST"}),t=await e.json();if(!e.ok)throw Error(t.error||"CA validation failed");P("Root CA is ready. Existing enterprise CA material was not rotated."),await E(!0)}catch(e){C(e.message||"CA validation failed")}finally{v("")}},B=e=>L("allowedHosts",[...new Set([...s?.allowedHosts||[],...e])]);if(!s)return(0,r.jsx)("div",{className:"rounded-xl border border-border bg-surface p-5 text-sm text-text-muted",children:"Loading Enterprise AI Audit Proxy…"});let M=Math.round(Number(s.captureLimitBytes||0)/1024/1024*10)/10,G=["0.0.0.0","::"].includes(s.bindHost)||!String(s.bindHost).startsWith("127.")&&"localhost"!==s.bindHost&&"::1"!==s.bindHost;return(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)("div",{className:"flex flex-col gap-3 rounded-2xl border border-primary/20 bg-primary/5 p-4 sm:flex-row sm:items-start sm:justify-between",children:[(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-primary",children:"policy"}),(0,r.jsx)("h1",{className:"text-lg font-bold text-text-main",children:"Enterprise AI Audit Proxy"}),(0,r.jsx)(u,{ok:_,children:_?"Running":"Stopped"}),(0,r.jsx)(u,{ok:!0===$.validated,children:"Root CA"}),(0,r.jsx)(u,{ok:s.verifyUpstreamTls,children:"Verified upstream TLS"}),(0,r.jsx)(u,{ok:!0,children:R.capabilities?.http2===!0?"HTTP/1.1 + HTTP/2":"HTTP/1.1"})]}),(0,r.jsx)("p",{className:"mt-2 max-w-5xl text-sm leading-6 text-text-muted",children:"Explicit HTTPS CONNECT proxy for Claude Code and Codex. Request method, path, query, authentication values and body bytes are forwarded without content rewriting. Standard hop-by-hop headers and BlueRouter internal headers remain intentionally removed."})]}),(0,r.jsxs)(d(),{href:"/dashboard/mitm",className:"inline-flex items-center gap-1 text-xs font-medium text-primary hover:underline",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"arrow_back"})," AI Traffic Gateway"]})]}),w?(0,r.jsx)("div",{className:"rounded-xl border border-red-500/30 bg-red-500/10 px-4 py-3 text-sm text-red-600 dark:text-red-400",children:w}):null,k?(0,r.jsx)("div",{className:"rounded-xl border border-green-500/30 bg-green-500/10 px-4 py-3 text-sm text-green-600 dark:text-green-400",children:k}):null,(0,r.jsxs)("div",{className:"flex w-fit items-center gap-1 rounded-xl border border-border bg-surface p-1",children:[(0,r.jsx)("button",{type:"button",onClick:()=>I("configuration"),className:`rounded-lg px-3 py-1.5 text-xs font-semibold transition ${"configuration"===A?"bg-primary text-white":"text-text-muted hover:bg-background hover:text-text-main"}`,children:"Configuration"}),(0,r.jsx)("button",{type:"button",onClick:()=>I("audit"),className:`rounded-lg px-3 py-1.5 text-xs font-semibold transition ${"audit"===A?"bg-primary text-white":"text-text-muted hover:bg-background hover:text-text-main"}`,children:"Audit & Usage"})]}),(0,r.jsxs)("div",{className:"configuration"===A?"space-y-4":"hidden",children:[O.lanExposedWithoutIpFilter?(0,r.jsxs)("div",{className:"rounded-xl border border-red-500/30 bg-red-500/10 px-4 py-3 text-sm text-red-700 dark:text-red-300",children:[(0,r.jsx)("strong",{children:"LAN listener has no Client IP filter."})," Enable the IP allowlist below before broad deployment. Plain HTTP, private destinations and CONNECT ports other than 443 are blocked, but the listener should still be restricted by firewall/VLAN."]}):G?(0,r.jsxs)("div",{className:"rounded-xl border border-amber-500/30 bg-amber-500/10 px-4 py-3 text-sm text-amber-700 dark:text-amber-300",children:[(0,r.jsx)("strong",{children:"LAN listener enabled."})," Keep TCP ",s.port," restricted to the intended LAN/VPN and maintain the Client IP allowlist."]}):null,$.expiringSoon?(0,r.jsx)("div",{className:"rounded-xl border border-amber-500/30 bg-amber-500/10 px-4 py-3 text-sm text-amber-700 dark:text-amber-300",children:"Root CA expires soon. Audit Proxy will not rotate enterprise CA material automatically; prepare and deploy the replacement CA through Advanced CA management."}):null,(0,r.jsxs)("div",{className:"grid gap-4 xl:grid-cols-[1.25fr_0.75fr]",children:[(0,r.jsxs)("section",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,r.jsxs)("div",{className:"mb-4 flex flex-wrap items-center justify-between gap-2",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("h2",{className:"font-semibold text-text-main",children:"Proxy configuration"}),(0,r.jsx)("p",{className:"mt-1 text-xs text-text-muted",children:"All server-side setup is managed here. No proxy daemon CLI is required."})]}),(0,r.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,r.jsx)("button",{type:"button",onClick:()=>B(x),disabled:_,className:"rounded-lg border border-border px-3 py-1.5 text-xs text-text-main hover:bg-background disabled:opacity-50",children:"+ Anthropic preset"}),(0,r.jsx)("button",{type:"button",onClick:()=>B(m),disabled:_,className:"rounded-lg border border-border px-3 py-1.5 text-xs text-text-main hover:bg-background disabled:opacity-50",children:"+ OpenAI preset"})]})]}),(0,r.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,r.jsx)(f,{label:"Bind address",hint:"127.0.0.1 = local only. Use 0.0.0.0 or a LAN IP for other workstations.",children:(0,r.jsx)("input",{value:s.bindHost,onChange:e=>L("bindHost",e.target.value),disabled:_,className:"rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary disabled:opacity-60"})}),(0,r.jsx)(f,{label:"Proxy port",hint:"Default 3128; Docker deployments must publish this port explicitly.",children:(0,r.jsx)("input",{type:"number",min:"1",max:"65535",value:s.port,onChange:e=>L("port",Number(e.target.value)),disabled:_,className:"rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary disabled:opacity-60"})}),(0,r.jsx)(f,{label:"Client proxy host",hint:"Manual persistent hostname/IP used only in deployment commands; it does not change the listener.",children:(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)("input",{value:s.clientProxyHost||"",onChange:e=>L("clientProxyHost",e.target.value),placeholder:"172.16.6.8 or proxy.example.local",className:"min-w-0 flex-1 rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary"}),(0,r.jsx)("button",{type:"button",onClick:q,disabled:!!N,className:"shrink-0 rounded-lg border border-primary/30 bg-primary/10 px-3 py-2 text-xs font-semibold text-primary disabled:opacity-50",children:"save-client-host"===N?"Saving…":"Save host"})]})}),(0,r.jsx)(f,{label:"Capture limit / request",hint:"Traffic streams immediately; only this bounded prefix is retained for audit.",children:(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("input",{type:"number",min:"0",max:"16",step:"0.5",value:M,onChange:e=>L("captureLimitBytes",Math.round(1024*Number(e.target.value)*1024)),disabled:_||!s.captureBodies,className:"min-w-0 flex-1 rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary disabled:opacity-60"}),(0,r.jsx)("span",{className:"text-xs text-text-muted",children:"MB"})]})})]}),(0,r.jsxs)("div",{className:"mt-4 grid gap-3 md:grid-cols-2",children:[(0,r.jsx)(j,{label:"Pass through non-audited hosts",description:"Unknown hosts use a blind TLS tunnel only when they resolve to public addresses on TCP 443. Private/reserved destinations are denied.",checked:s.passthroughUnknown,onChange:e=>L("passthroughUnknown",e),disabled:_}),(0,r.jsx)(j,{label:"Capture request/response bodies",description:"Credentials are redacted before persistence. Disable to retain metadata and wire hashes only.",checked:s.captureBodies,onChange:e=>L("captureBodies",e),disabled:_})]}),(0,r.jsxs)("div",{className:"mt-4 grid gap-3",children:[(0,r.jsx)(j,{label:"Restrict which client tools may connect",description:"Refuses a CONNECT whose User-Agent identifies a tool that is not listed. Catches a browser pointed at the proxy, or a script that inherited HTTPS_PROXY. It cannot catch a client that sends no User-Agent — Claude Code sends none at all and Codex only on its first tunnel, so those are always let through, and anyone can do the same by dropping the header. Hygiene, not access control: the client IP allowlist and who holds the root CA are what bound access.",checked:!0===s.clientToolFilterEnabled,onChange:e=>L("clientToolFilterEnabled",e),disabled:_}),s.clientToolFilterEnabled?(0,r.jsxs)("div",{className:"grid gap-2",children:[(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,r.jsx)("span",{className:"text-[11px] font-medium text-text-muted",children:"Add:"}),p.map(e=>(0,r.jsx)("button",{type:"button",disabled:_||(s.allowedClientTools||[]).includes(e.id),onClick:()=>L("allowedClientTools",[...new Set([...s.allowedClientTools||[],e.id])]),className:"rounded-lg border border-border px-2 py-1 text-[11px] text-text-muted transition hover:border-primary hover:text-primary disabled:opacity-40",children:e.label},e.id))]}),(0,r.jsx)(f,{label:"Allowed client tools",hint:"One entry per line: a preset id above, or any substring matched against the User-Agent. Only clients that send a User-Agent are checked. Refused connections appear in the audit table with the User-Agent that was rejected, so you can add what you actually use.",children:(0,r.jsx)("textarea",{rows:4,value:(s.allowedClientTools||[]).join("\n"),onChange:e=>L("allowedClientTools",e.target.value.split(/\r?\n/).map(e=>e.trim().toLowerCase()).filter(Boolean)),disabled:_,placeholder:"claude-code\ncodex",className:"rounded-lg border border-border bg-background px-3 py-2 font-mono text-xs text-text-main outline-none focus:border-primary disabled:opacity-60"})})]}):null]}),(0,r.jsxs)("div",{className:"mt-4 grid gap-4 md:grid-cols-[1fr_190px]",children:[(0,r.jsx)(f,{label:"TLS inspection allowlist",hint:"One hostname/wildcard per line. Only these public HTTPS hosts are decrypted and audited.",children:(0,r.jsx)("textarea",{rows:9,value:H,onChange:e=>L("allowedHosts",e.target.value.split(/\r?\n/).map(e=>e.trim()).filter(Boolean)),disabled:_,className:"rounded-lg border border-border bg-background px-3 py-2 font-mono text-xs text-text-main outline-none focus:border-primary disabled:opacity-60"})}),(0,r.jsxs)("div",{className:"grid content-start gap-4",children:[(0,r.jsx)(f,{label:"Retention",hint:"Daily local JSONL segments older than this value are deleted hourly.",children:(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("input",{type:"number",min:"1",max:"365",value:s.retentionDays,onChange:e=>L("retentionDays",Number(e.target.value)),disabled:_,className:"min-w-0 flex-1 rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary disabled:opacity-60"}),(0,r.jsx)("span",{className:"text-xs text-text-muted",children:"days"})]})}),(0,r.jsxs)("div",{className:"rounded-xl border border-green-500/20 bg-green-500/5 p-3 text-xs leading-5 text-text-muted",children:[(0,r.jsx)("div",{className:"font-semibold text-green-600 dark:text-green-400",children:"Transport controls enforced"}),"TLS verification ON \xb7 HTTP/1.1 \xb7 HTTPS CONNECT only \xb7 public TCP 443 only."]})]})]}),(0,r.jsxs)("div",{className:"mt-4 flex flex-wrap gap-2",children:[(0,r.jsx)("button",{type:"button",onClick:D,disabled:!!N||_,className:"rounded-lg bg-primary px-4 py-2 text-sm font-semibold text-white disabled:opacity-50",children:"save"===N?"Saving…":"Save"}),_?(0,r.jsx)("button",{type:"button",onClick:()=>F("stop"),disabled:!!N,className:"rounded-lg border border-red-500/30 bg-red-500/10 px-4 py-2 text-sm font-semibold text-red-500 disabled:opacity-50",children:"stop"===N?"Stopping…":"Stop Proxy"}):(0,r.jsx)("button",{type:"button",onClick:()=>F("start",{config:s}),disabled:!!N,className:"rounded-lg border border-green-500/30 bg-green-500/10 px-4 py-2 text-sm font-semibold text-green-600 disabled:opacity-50",children:"start"===N?"Starting…":"Start Proxy"}),(0,r.jsx)("button",{type:"button",onClick:()=>F("restart",{config:s}),disabled:!!N,className:"rounded-lg border border-border px-4 py-2 text-sm font-semibold text-text-main hover:bg-background disabled:opacity-50",children:"restart"===N?"Restarting…":"Save & Restart"}),(0,r.jsx)("button",{type:"button",onClick:()=>F("test"),disabled:!!N,className:"rounded-lg border border-primary/30 bg-primary/10 px-4 py-2 text-sm font-semibold text-primary disabled:opacity-50",children:"test"===N?"Testing…":"Run Simulated Test"})]})]}),(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)("section",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,r.jsx)("h2",{className:"font-semibold text-text-main",children:"Root CA"}),(0,r.jsx)("p",{className:"mt-1 text-xs leading-5 text-text-muted",children:"The existing Root CA/key pair is validated and reused. Audit Proxy never auto-rotates enterprise CA material."}),(0,r.jsxs)("div",{className:"mt-3 grid gap-2 text-xs",children:[(0,r.jsxs)("div",{className:"flex justify-between gap-3",children:[(0,r.jsx)("span",{className:"text-text-muted",children:"Status"}),(0,r.jsx)("span",{className:"font-medium text-text-main",children:$.validated?"Validated":$.certExists?"Needs attention":"Not generated"})]}),$.subject?(0,r.jsxs)("div",{className:"grid gap-1",children:[(0,r.jsx)("span",{className:"text-text-muted",children:"Subject"}),(0,r.jsx)("span",{className:"break-all font-mono text-[11px] text-text-main",children:$.subject})]}):null,$.fingerprint?(0,r.jsxs)("div",{className:"grid gap-1",children:[(0,r.jsx)("span",{className:"text-text-muted",children:"Public key fingerprint"}),(0,r.jsx)("span",{className:"break-all font-mono text-[11px] text-text-main",children:$.fingerprint})]}):null,$.notAfter?(0,r.jsxs)("div",{className:"flex justify-between gap-3",children:[(0,r.jsx)("span",{className:"text-text-muted",children:"Expires"}),(0,r.jsx)("span",{className:"text-text-main",children:new Date($.notAfter).toLocaleString()})]}):null,$.error?(0,r.jsx)("div",{className:"rounded-lg bg-red-500/10 p-2 text-red-600 dark:text-red-300",children:$.error}):null]}),(0,r.jsxs)("div",{className:"mt-4 flex flex-wrap gap-2",children:[(0,r.jsx)("button",{type:"button",onClick:U,disabled:!!N||_,className:"rounded-lg border border-border px-3 py-2 text-xs font-semibold text-text-main hover:bg-background disabled:opacity-50",children:$.certExists?"Validate / Reuse CA":"Generate CA"}),(0,r.jsx)("a",{href:"/api/audit-proxy/ca?download=cert",className:`rounded-lg border border-primary/30 bg-primary/10 px-3 py-2 text-xs font-semibold text-primary ${!$.certExists?"pointer-events-none opacity-50":""}`,children:"Download Root CA"}),(0,r.jsx)(d(),{href:"/dashboard/mitm",className:"rounded-lg border border-border px-3 py-2 text-xs font-semibold text-text-main hover:bg-background",children:"Advanced CA management"})]})]}),(0,r.jsx)(c.Ay,{clientProxyHost:s.clientProxyHost,port:s.port,onError:C})]})]}),S?(0,r.jsxs)("section",{className:`rounded-2xl border p-4 ${S.ok?"border-green-500/30 bg-green-500/5":"border-red-500/30 bg-red-500/5"}`,children:[(0,r.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("h2",{className:"font-semibold text-text-main",children:"Simulated end-to-end test"}),(0,r.jsx)("p",{className:"mt-1 text-xs text-text-muted",children:"Local throwaway TLS endpoints; no cloud credential or external API call is used."})]}),(0,r.jsxs)(u,{ok:S.ok,children:[S.passed,"/",S.total," passed \xb7 ",S.durationMs," ms"]})]}),(0,r.jsx)("div",{className:"mt-3 grid gap-2 md:grid-cols-2 xl:grid-cols-3",children:S.checks?.map(e=>(0,r.jsxs)("div",{className:"flex items-start gap-2 rounded-lg border border-border/70 bg-background/60 px-3 py-2 text-xs",children:[(0,r.jsx)("span",{className:`material-symbols-outlined text-[16px] ${e.ok?"text-green-500":"text-red-500"}`,children:e.ok?"check_circle":"error"}),(0,r.jsxs)("span",{children:[(0,r.jsx)("span",{className:"font-medium text-text-main",children:e.name}),e.detail?(0,r.jsx)("span",{className:"mt-0.5 block text-text-muted",children:e.detail}):null]})]},e.name))})]}):null,(0,r.jsx)(i,{onChanged:()=>E(!0)}),(0,r.jsx)(o,{}),(0,r.jsx)(l,{})]}),(0,r.jsxs)("div",{className:"audit"===A?"space-y-4":"hidden",children:[(0,r.jsxs)("section",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,r.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("h2",{className:"font-semibold text-text-main",children:"Token usage"}),(0,r.jsxs)("p",{className:"mt-1 text-xs text-text-muted",children:["Counts are read out of the audited provider responses themselves — ",(0,r.jsx)("code",{className:"font-mono",children:"message_start"})," carries input and cache tokens, the closing ",(0,r.jsx)("code",{className:"font-mono",children:"message_delta"})," carries output. Scope is the same window as the table below."]})]}),e?.usageSummary?.incompleteUsageCount?(0,r.jsxs)("span",{className:"rounded-lg border border-amber-500/30 bg-amber-500/10 px-2.5 py-1 text-[11px] font-medium text-amber-700 dark:text-amber-300",children:[e.usageSummary.incompleteUsageCount," response(s) truncated before the final usage event — output tokens under-counted"]}):null]}),e?.usageSummary?.totals?.requests?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"mt-3 grid gap-2 sm:grid-cols-2 lg:grid-cols-5",children:[(0,r.jsx)(g,{label:"Requests with usage",value:e.usageSummary.totals.requests}),(0,r.jsx)(g,{label:"Input",value:h(e.usageSummary.totals.inputTokens),hint:"new (uncached) input tokens"}),(0,r.jsx)(g,{label:"Output",value:h(e.usageSummary.totals.outputTokens)}),(0,r.jsx)(g,{label:"Cache read / write",value:`${h(e.usageSummary.totals.cacheReadTokens)} / ${h(e.usageSummary.totals.cacheCreationTokens)}`}),(0,r.jsx)(g,{label:"Est. cost",value:b(e.usageSummary.totals.cost),hint:"from the pricing table"})]}),(0,r.jsxs)("div",{className:"mt-4 grid gap-5 lg:grid-cols-2",children:[(0,r.jsx)(y,{title:"By model",rows:e.usageSummary.byModel}),(0,r.jsx)(y,{title:"By client tool",rows:e.usageSummary.bySourceTool})]})]}):(0,r.jsx)("p",{className:"mt-3 rounded-xl border border-border bg-background/50 p-3 text-xs text-text-muted",children:"No token usage recorded yet. Usage appears once an audited request reaches a provider that reports it (Anthropic and OpenAI both do)."})]}),(0,r.jsxs)("section",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,r.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("h2",{className:"font-semibold text-text-main",children:"Recent audit requests"}),(0,r.jsx)("p",{className:"mt-1 text-xs text-text-muted",children:"Credentials are redacted before persistence. Local writes and MySQL mirroring run through a bounded asynchronous queue."})]}),(0,r.jsxs)("div",{className:"flex items-center gap-3 text-xs text-text-muted",children:[(0,r.jsxs)("span",{children:["Queue ",R.auditStore?.queueDepth||0,"/",R.auditStore?.queueLimit||1e3]}),(0,r.jsx)("button",{type:"button",onClick:()=>F("clear-logs"),disabled:!!N,className:"rounded-lg border border-border px-3 py-1.5 hover:bg-background disabled:opacity-50",children:"Clear logs"})]})]}),(0,r.jsx)("div",{className:"mt-3 overflow-x-auto",children:(0,r.jsxs)("table",{className:"w-full min-w-[1250px] text-left text-xs",children:[(0,r.jsx)("thead",{className:"border-b border-border text-text-muted",children:(0,r.jsxs)("tr",{children:[(0,r.jsx)("th",{className:"px-2 py-2 font-medium",children:"Time"}),(0,r.jsx)("th",{className:"px-2 py-2 font-medium",children:"Protocol"}),(0,r.jsx)("th",{className:"px-2 py-2 font-medium",children:"Client"}),(0,r.jsx)("th",{className:"px-2 py-2 font-medium",children:"User"}),(0,r.jsx)("th",{className:"px-2 py-2 font-medium",children:"Provider"}),(0,r.jsx)("th",{className:"px-2 py-2 font-medium",children:"Host"}),(0,r.jsx)("th",{className:"px-2 py-2 font-medium",children:"Model"}),(0,r.jsx)("th",{className:"px-2 py-2 font-medium",children:"Request"}),(0,r.jsx)("th",{className:"px-2 py-2 text-right font-medium",children:"Tokens (in/out)"}),(0,r.jsx)("th",{className:"px-2 py-2 text-right font-medium",children:"Cache (r/w)"}),(0,r.jsx)("th",{className:"px-2 py-2 font-medium",children:"Status"}),(0,r.jsx)("th",{className:"px-2 py-2 font-medium",children:"Latency"})]})}),(0,r.jsxs)("tbody",{children:[(e?.events||[]).map(e=>(0,r.jsxs)("tr",{className:"border-b border-border/60 align-top text-text-main",children:[(0,r.jsx)("td",{className:"whitespace-nowrap px-2 py-2 text-text-muted",children:new Date(e.timestamp).toLocaleTimeString()}),(0,r.jsx)("td",{className:"px-2 py-2",children:e.protocol||"http/1.1"}),(0,r.jsx)("td",{className:"px-2 py-2 font-mono text-[11px]",children:e.client?.ip||"-"}),(0,r.jsx)("td",{className:"px-2 py-2",children:e.client?.proxyUser||"-"}),(0,r.jsx)("td",{className:"px-2 py-2",children:e.provider||"-"}),(0,r.jsx)("td",{className:"px-2 py-2 font-mono text-[11px]",children:e.host||"-"}),(0,r.jsx)("td",{className:"px-2 py-2",children:e.model||"-"}),(0,r.jsx)("td",{className:"max-w-[300px] px-2 py-2",children:(0,r.jsxs)("details",{children:[(0,r.jsxs)("summary",{className:"cursor-pointer truncate",children:[e.method," ",e.path]}),(0,r.jsx)("pre",{className:"mt-2 max-h-72 overflow-auto whitespace-pre-wrap rounded-lg bg-background p-2 text-[10px] leading-4 text-text-muted",children:JSON.stringify({request:e.request,response:e.response,error:e.error},null,2)})]})}),(0,r.jsx)("td",{className:"whitespace-nowrap px-2 py-2 text-right",children:e.usage?(0,r.jsxs)("span",{title:!1===e.usage.complete?"Response was truncated before the final usage event; output is a lower bound":void 0,children:[h(e.usage.inputTokens),"/",h(e.usage.outputTokens),!1===e.usage.complete?(0,r.jsx)("span",{className:"text-amber-600 dark:text-amber-400",children:"*"}):null]}):(0,r.jsx)("span",{className:"text-text-muted",children:"-"})}),(0,r.jsx)("td",{className:"whitespace-nowrap px-2 py-2 text-right text-text-muted",children:e.usage?`${h(e.usage.cacheReadTokens)}/${h(e.usage.cacheCreationTokens)}`:"-"}),(0,r.jsx)("td",{className:"px-2 py-2",children:e.status||"ERR"}),(0,r.jsxs)("td",{className:"whitespace-nowrap px-2 py-2",children:[e.durationMs??"-"," ms"]})]},e.id)),e?.events?.length?null:(0,r.jsx)("tr",{children:(0,r.jsx)("td",{colSpan:"12",className:"px-2 py-8 text-center text-text-muted",children:"No audited requests yet."})})]})]})})]})]})]})}},23371:(e,t,s)=>{Promise.resolve().then(s.bind(s,9707)),Promise.resolve().then(s.bind(s,35696))},35696:(e,t,s)=>{"use strict";s.d(t,{default:()=>o});var r=s(95155),a=s(12115),n=s(83163);function d({ok:e,children:t}){return(0,r.jsxs)("span",{className:`inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium ${e?"border-green-500/30 bg-green-500/10 text-green-600 dark:text-green-400":"border-border bg-surface text-text-muted"}`,children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[13px]",children:e?"check_circle":"radio_button_unchecked"}),t]})}function o(){let[e,t]=(0,a.useState)(null),[s,o]=(0,a.useState)(""),l=(0,a.useCallback)(async()=>{try{let e=await fetch("/api/audit-proxy/me",{cache:"no-store"}),s=await e.json().catch(()=>({}));if(!e.ok)throw Error(s.error||"Cannot load your Audit Proxy access");t(s)}catch(e){o(e.message||"Cannot load your Audit Proxy access")}},[]);if((0,a.useEffect)(()=>{l();let e=setInterval(l,15e3);return()=>clearInterval(e)},[l]),s&&!e)return(0,r.jsx)("div",{className:"rounded-xl border border-red-500/30 bg-red-500/10 px-4 py-3 text-sm text-red-600 dark:text-red-400",children:s});if(!e)return(0,r.jsx)("div",{className:"rounded-xl border border-border bg-surface p-5 text-sm text-text-muted",children:"Loading Enterprise AI Audit Proxy…"});let i=e.rootCA||{},c=e.grant?.ips||[];return(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)("div",{className:"rounded-2xl border border-primary/20 bg-primary/5 p-4",children:[(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-primary",children:"policy"}),(0,r.jsx)("h1",{className:"text-lg font-bold text-text-main",children:"Enterprise AI Audit Proxy"}),(0,r.jsx)(d,{ok:!0===e.running,children:e.running?"Running":"Stopped"}),(0,r.jsx)(d,{ok:!0===i.validated,children:"Root CA"})]}),(0,r.jsx)("p",{className:"mt-2 max-w-4xl text-sm leading-6 text-text-muted",children:"Your account is allowed to use the audit proxy for Claude Code and Codex. Install the root CA once, then start your CLI with one of the launchers below. Requests through the proxy are audited by your administrator."})]}),s?(0,r.jsx)("div",{className:"rounded-xl border border-red-500/30 bg-red-500/10 px-4 py-3 text-sm text-red-600 dark:text-red-400",children:s}):null,(0,r.jsxs)("div",{className:"grid gap-4 xl:grid-cols-[0.8fr_1.2fr]",children:[(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)("section",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,r.jsx)("h2",{className:"font-semibold text-text-main",children:"Your access"}),(0,r.jsx)("p",{className:"mt-1 text-xs leading-5 text-text-muted",children:"The proxy accepts connections only from the addresses below. From anywhere else the connection is closed — ask your administrator to add the address."}),(0,r.jsxs)("div",{className:"mt-3 grid gap-2 text-xs",children:[(0,r.jsxs)("div",{className:"flex justify-between gap-3",children:[(0,r.jsx)("span",{className:"text-text-muted",children:"Account"}),(0,r.jsx)("span",{className:"break-all font-mono text-text-main",children:e.grant?.userId||e.userId||"-"})]}),e.grant?.note?(0,r.jsxs)("div",{className:"flex justify-between gap-3",children:[(0,r.jsx)("span",{className:"text-text-muted",children:"Note"}),(0,r.jsx)("span",{className:"break-all text-text-main",children:e.grant.note})]}):null]}),(0,r.jsxs)("div",{className:"mt-3",children:[(0,r.jsx)("div",{className:"text-[11px] font-medium uppercase tracking-wide text-text-muted",children:"Allowed client IP"}),c.length?(0,r.jsx)("div",{className:"mt-1.5 flex flex-wrap gap-1.5",children:c.map(e=>(0,r.jsx)("span",{className:"rounded-full border border-primary/30 bg-primary/5 px-2.5 py-1 font-mono text-[11px] text-primary",children:e},e))}):(0,r.jsx)("p",{className:"mt-1.5 rounded-lg border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-[11px] leading-5 text-amber-700 dark:text-amber-300",children:e.isAdmin?"Your admin account has no grant of its own. Grants apply to the proxy allowlist only.":"No address is granted yet, so the proxy will refuse your connection. Send your workstation IP to your administrator."})]})]}),(0,r.jsxs)("section",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,r.jsx)("h2",{className:"font-semibold text-text-main",children:"Root CA"}),(0,r.jsx)("p",{className:"mt-1 text-xs leading-5 text-text-muted",children:"Download the certificate and save it to the path shown in the deployment values. It is a public certificate; it contains no key material."}),(0,r.jsxs)("div",{className:"mt-3 grid gap-2 text-xs",children:[(0,r.jsxs)("div",{className:"flex justify-between gap-3",children:[(0,r.jsx)("span",{className:"text-text-muted",children:"Status"}),(0,r.jsx)("span",{className:"font-medium text-text-main",children:i.validated?"Validated":i.certExists?"Needs attention":"Not generated"})]}),i.subject?(0,r.jsxs)("div",{className:"grid gap-1",children:[(0,r.jsx)("span",{className:"text-text-muted",children:"Subject"}),(0,r.jsx)("span",{className:"break-all font-mono text-[11px] text-text-main",children:i.subject})]}):null,i.fingerprint?(0,r.jsxs)("div",{className:"grid gap-1",children:[(0,r.jsx)("span",{className:"text-text-muted",children:"Public key fingerprint"}),(0,r.jsx)("span",{className:"break-all font-mono text-[11px] text-text-main",children:i.fingerprint})]}):null,i.notAfter?(0,r.jsxs)("div",{className:"flex justify-between gap-3",children:[(0,r.jsx)("span",{className:"text-text-muted",children:"Expires"}),(0,r.jsx)("span",{className:"text-text-main",children:new Date(i.notAfter).toLocaleString()})]}):null]}),(0,r.jsx)("div",{className:"mt-4",children:(0,r.jsx)("a",{href:"/api/audit-proxy/ca?download=cert",className:`inline-flex rounded-lg border border-primary/30 bg-primary/10 px-3 py-2 text-xs font-semibold text-primary ${i.certExists?"":"pointer-events-none opacity-50"}`,children:"Download Root CA"})})]})]}),(0,r.jsx)(n.Ay,{clientProxyHost:e.endpoint?.clientProxyHost,port:e.endpoint?.port,onError:o})]})]})}},83163:(e,t,s)=>{"use strict";s.d(t,{Ay:()=>i});var r=s(95155),a=s(12115);let n="localhost,127.0.0.1,::1",d="C:\\BlueRouter\\bluerouter-audit-root-ca.crt",o="$HOME/.bluerouter/bluerouter-audit-root-ca.crt";function l({title:e,subtitle:t,command:s,copyKey:a,copied:n,onCopy:d,recommended:o=!1}){return(0,r.jsxs)("div",{className:`rounded-xl border bg-background p-3 ${o?"border-green-500/30":"border-border"}`,children:[(0,r.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,r.jsx)("span",{className:"text-xs font-semibold text-text-main",children:e}),o?(0,r.jsx)("span",{className:"rounded-full bg-green-500/10 px-2 py-0.5 text-[10px] font-semibold text-green-600 dark:text-green-400",children:"Recommended"}):null]}),t?(0,r.jsx)("div",{className:"mt-0.5 text-[10px] leading-4 text-text-muted",children:t}):null]}),(0,r.jsx)("button",{type:"button",onClick:()=>d(a,s),className:"shrink-0 text-xs font-medium text-primary",children:n===a?"Copied":"Copy"})]}),(0,r.jsx)("pre",{className:"mt-2 overflow-x-auto whitespace-pre-wrap break-all rounded-lg bg-surface px-3 py-2 text-[11px] leading-5 text-text-muted",children:s})]})}function i({clientProxyHost:e,port:t,onError:s}){let[c,x]=(0,a.useState)(""),m=(0,a.useMemo)(()=>{var s,r;let a,l=(s=e,r=t,`http://${(a=String(s||"").trim()||"<bluerouter-host>").includes(":")&&!a.startsWith("[")?`[${a}]`:a}:${r}`),i=`set "HTTP_PROXY=${l}"&&set "HTTPS_PROXY=${l}"&&set "NO_PROXY=${n}"&&set "no_proxy=${n}"`,c=`HTTP_PROXY='${l}' HTTPS_PROXY='${l}' NO_PROXY='${n}' no_proxy='${n}'`;return{proxyUrl:l,claudePowerShell:`cmd.exe /d /c '${i}&&set "NODE_EXTRA_CA_CERTS=${d}"&&claude'`,codexPowerShell:`cmd.exe /d /c '${i}&&set "CODEX_CA_CERTIFICATE=${d}"&&codex'`,claudeBash:`env ${c} NODE_EXTRA_CA_CERTS="${o}" claude`,codexBash:`env ${c} CODEX_CA_CERTIFICATE="${o}" codex`}},[e,t]),p=`$cfg = Join-Path $env:USERPROFILE '.codex\\config.toml'
|
|
2
|
+
$block = @'
|
|
3
|
+
model_provider = "chatgpt_https"
|
|
4
|
+
|
|
5
|
+
[model_providers.chatgpt_https]
|
|
6
|
+
name = "OpenAI ChatGPT (HTTPS)"
|
|
7
|
+
base_url = "https://chatgpt.com/backend-api/codex"
|
|
8
|
+
wire_api = "responses"
|
|
9
|
+
requires_openai_auth = true
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
'@
|
|
13
|
+
New-Item -ItemType Directory -Force (Split-Path $cfg) | Out-Null
|
|
14
|
+
$body = if (Test-Path $cfg) { Get-Content $cfg -Raw } else { '' }
|
|
15
|
+
if ($body -match '(?m)^\\s*\\[model_providers\\.chatgpt_https\\]') { Write-Host 'Already configured - no change.' }
|
|
16
|
+
elseif ($body -match '(?m)^\\s*model_provider\\s*=') { Write-Host 'A model_provider key already exists - merge manually.' }
|
|
17
|
+
else {
|
|
18
|
+
if (Test-Path $cfg) { Copy-Item $cfg "$cfg.bak" -Force }
|
|
19
|
+
[IO.File]::WriteAllText($cfg, $block + $body, (New-Object Text.UTF8Encoding $false))
|
|
20
|
+
Write-Host 'Injected at top of config.toml (backup: config.toml.bak).'
|
|
21
|
+
}`,u=async(e,t)=>{try{await navigator.clipboard.writeText(t),x(e),setTimeout(()=>x(""),1500)}catch{s?.("Clipboard access failed.")}};return(0,r.jsxs)("section",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,r.jsx)("h2",{className:"font-semibold text-text-main",children:"Client deployment values"}),(0,r.jsx)("p",{className:"mt-1 text-xs leading-5 text-text-muted",children:"Process-scoped launchers do not use setx or modify Windows/System proxy. NO_PROXY keeps localhost OAuth callbacks and local MCP services off the gateway."}),(0,r.jsxs)("div",{className:"mt-3 rounded-xl border border-primary/20 bg-primary/5 p-3 text-xs leading-5 text-text-muted",children:[(0,r.jsx)("div",{className:"font-semibold text-primary",children:"Before first use"}),"Save the CA as ",(0,r.jsx)("code",{className:"rounded bg-background px-1 py-0.5",children:d})," on Windows or ",(0,r.jsx)("code",{className:"rounded bg-background px-1 py-0.5",children:o})," on Linux/macOS. The extra CA variable is harmless when the CA is already trusted by the OS."]}),(0,r.jsxs)("div",{className:"mt-3 grid gap-3",children:[(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-background p-3",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,r.jsx)("span",{className:"text-xs font-semibold text-text-main",children:"Proxy URL"}),(0,r.jsx)("button",{type:"button",onClick:()=>u("url",m.proxyUrl),className:"text-xs text-primary",children:"url"===c?"Copied":"Copy"})]}),(0,r.jsx)("code",{className:"mt-1 block break-all text-xs text-text-muted",children:m.proxyUrl})]}),(0,r.jsx)(l,{title:"Claude Code \xb7 Windows PowerShell",subtitle:"Proxy variables exist only in the child process.",command:m.claudePowerShell,copyKey:"claude-ps",copied:c,onCopy:u,recommended:!0}),(0,r.jsx)(l,{title:"Codex \xb7 Windows PowerShell",subtitle:"No persistent user/system environment changes.",command:m.codexPowerShell,copyKey:"codex-ps",copied:c,onCopy:u,recommended:!0}),(0,r.jsxs)("details",{className:"rounded-xl border border-border bg-background p-3",children:[(0,r.jsx)("summary",{className:"cursor-pointer text-xs font-semibold text-text-main",children:"Codex \xb7 skip the WebSocket retry delay (optional)"}),(0,r.jsxs)("p",{className:"mt-2 text-[11px] leading-5 text-text-muted",children:["Codex opens ",(0,r.jsx)("code",{className:"rounded bg-surface px-1 py-0.5",children:"wss://chatgpt.com/backend-api/codex/responses"})," before it will use HTTPS. This proxy refuses upgrades so every request stays auditable, which costs Codex five reconnect attempts — about 7 seconds — once per start, before it falls back. Requests are logged either way; this only removes the wait."]}),(0,r.jsxs)("p",{className:"mt-2 text-[11px] leading-5 text-text-muted",children:["Run once in PowerShell. It is idempotent, writes the top-level key above every table (TOML requires that) and keeps a ",(0,r.jsx)("code",{className:"rounded bg-surface px-1 py-0.5",children:"config.toml.bak"}),"."]}),(0,r.jsxs)("p",{className:"mt-2 text-[11px] leading-5 text-text-muted",children:["Only the transport is configurable in config.toml. Codex has no proxy key there — it reads ",(0,r.jsx)("code",{className:"rounded bg-surface px-1 py-0.5",children:"HTTP_PROXY"}),"/",(0,r.jsx)("code",{className:"rounded bg-surface px-1 py-0.5",children:"HTTPS_PROXY"}),"/",(0,r.jsx)("code",{className:"rounded bg-surface px-1 py-0.5",children:"NO_PROXY"})," from the environment only, so the launcher above stays required."]}),(0,r.jsx)("div",{className:"mt-3",children:(0,r.jsx)(l,{title:"Pin Codex to the HTTPS transport",subtitle:"Edits %USERPROFILE%\\.codex\\config.toml",command:p,copyKey:"codex-https-config",copied:c,onCopy:u})}),(0,r.jsxs)("p",{className:"mt-2 text-[11px] leading-5 text-amber-600 dark:text-amber-400",children:["Trade-off: the built-in ",(0,r.jsx)("code",{className:"rounded bg-surface px-1 py-0.5",children:"openai"})," provider is reserved, so this clones it. The clone does not send ",(0,r.jsx)("code",{className:"rounded bg-surface px-1 py-0.5",children:"content-encoding"})," (request compression), ",(0,r.jsx)("code",{className:"rounded bg-surface px-1 py-0.5",children:"x-codex-routing-hint"})," or ",(0,r.jsx)("code",{className:"rounded bg-surface px-1 py-0.5",children:"version"}),", and it pins ",(0,r.jsx)("code",{className:"rounded bg-surface px-1 py-0.5",children:"base_url"}),". Delete both blocks from config.toml to return to defaults."]})]}),(0,r.jsxs)("details",{className:"rounded-xl border border-border bg-background p-3",children:[(0,r.jsx)("summary",{className:"cursor-pointer text-xs font-semibold text-text-main",children:"Linux / macOS process-scoped commands"}),(0,r.jsxs)("div",{className:"mt-3 grid gap-3",children:[(0,r.jsx)(l,{title:"Claude Code \xb7 Bash/zsh",command:m.claudeBash,copyKey:"claude-bash",copied:c,onCopy:u}),(0,r.jsx)(l,{title:"Codex \xb7 Bash/zsh",command:m.codexBash,copyKey:"codex-bash",copied:c,onCopy:u})]})]})]})]})}}},e=>{e.O(0,[8500,8441,3794,7358],()=>e(e.s=23371)),_N_E=e.O()}]);
|
|
@@ -15,4 +15,4 @@
|
|
|
15
15
|
<section class="grid two section"><div class="card"><h2>Đ\xe1nh gi\xe1 hạ tầng</h2><p>${A(e.narrative?.infrastructureAssessment)}</p>${C(e.hardware,e=>`<div><h3>${A(e.name)} \xb7 ${A(e.reachable?"Snapshot available":"No telemetry")}</h3><p class="muted">CPU ${A(e.cpu?.model||"-")} \xb7 ${A(x(e.cpu?.cores))} cores \xb7 RAM ${A(b(e.memory?.totalBytes))} \xb7 GPU ${A((e.gpus||[]).map(e=>`${e.name} ${(e.memoryTotalMb/1024).toFixed(1)} GiB`).join(", ")||"-")}</p></div>`)}</div><div class="card"><h2>Dự b\xe1o ngắn hạn</h2><p>${A(e.narrative?.forecast)}</p><h3>Giới hạn dữ liệu</h3><ul>${C(e.dataQuality,e=>`<li>${A(e)}</li>`)}</ul></div></section>
|
|
16
16
|
<section class="card section"><h2>Kế hoạch h\xe0nh động</h2><table><thead><tr><th>Priority</th><th>Action</th><th>Owner</th><th>Validation metric</th></tr></thead><tbody>${C(e.narrative?.actions,e=>`<tr><td class="priority ${A(e.priority)}">${A(e.priority)}</td><td>${A(e.action)}</td><td>${A(e.owner)}</td><td>${A(e.validationMetric)}</td></tr>`)}</tbody></table></section>
|
|
17
17
|
<div class="footer">BlueRouter Local AI Report \xb7 Internal operational document \xb7 ${A(e.id)}</div>
|
|
18
|
-
</main></body></html>`}function R(e,t,r){let a=new Blob([e],{type:t}),s=URL.createObjectURL(a),l=document.createElement("a");l.href=s,l.download=r,document.body.appendChild(l),l.click(),l.remove(),URL.revokeObjectURL(s)}function S(){let{isAdmin:e,loading:t}=(0,l.s)(),[r,i]=(0,s.useState)({"7d":null,"30d":null}),[b,A]=(0,s.useState)("7d"),[C,S]=(0,s.useState)([]),[P,_]=(0,s.useState)(""),[L,I]=(0,s.useState)(!1),[O,q]=(0,s.useState)(!0),[U,E]=(0,s.useState)(!1),[K,B]=(0,s.useState)(""),[F,z]=(0,s.useState)(!1),D=r[b]||null,V=o.find(e=>e.value===b)||o[0];(0,s.useEffect)(()=>{if(t||!e)return;let r=!1;return(async()=>{q(!0),B("");try{let[e,t]=await Promise.all([fetch("/api/dashboard/local-ai-report",{cache:"no-store"}),fetch("/api/dashboard/analytics/ai-models",{cache:"no-store"})]),a=await e.json().catch(()=>({})),s=await t.json().catch(()=>({}));if(!e.ok)throw Error(a.error||"Kh\xf4ng tải được b\xe1o c\xe1o");if(r)return;let l=s.options||[];i(a.reports||{"7d":a.report||null,"30d":null}),I(!0===a.standby),S(l),_(a.selectedModel&&l.some(e=>e.value===a.selectedModel)?a.selectedModel:l[0]?.value||"")}catch(e){r||B(e?.message||"Kh\xf4ng tải được b\xe1o c\xe1o")}finally{r||q(!1)}})(),()=>{r=!0}},[t,e]);let G=(0,s.useCallback)(e=>{_(e),fetch("/api/dashboard/analytics/analyze",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:e})}).catch(()=>{})},[]),H=(0,s.useCallback)(async()=>{E(!0),B("");try{let e=P.indexOf("::"),t=e>=0?P.slice(0,e):"",r=e>=0?P.slice(e+2):"",a=await fetch("/api/dashboard/local-ai-report",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({connectionId:t,model:r,period:b})}),s=await a.json().catch(()=>({}));if(!a.ok)throw Error(s.error||"Kh\xf4ng thể tạo b\xe1o c\xe1o");i(e=>({...e,[b]:s.report||null}))}catch(e){B(e?.message||"Kh\xf4ng thể tạo b\xe1o c\xe1o")}finally{E(!1)}},[P,b]),W=(0,s.useCallback)(()=>{if(!D)return;let e=D.range?.period||b;R(M(D),"text/html;charset=utf-8",`local-ai-report-${e}-${D.generatedAt.slice(0,10)}.html`)},[D,b]),Q=(0,s.useCallback)(()=>{if(!D)return;let e=D.range?.period||b;R(JSON.stringify(D,null,2),"application/json;charset=utf-8",`local-ai-report-${e}-${D.generatedAt.slice(0,10)}.json`)},[D,b]),J=(0,s.useCallback)(()=>{if(!D)return;let e=new Blob([M(D)],{type:"text/html;charset=utf-8"}),t=URL.createObjectURL(e),r=window.open(t,"_blank");if(!r){URL.revokeObjectURL(t),B("Tr\xecnh duyệt đ\xe3 chặn cửa sổ in. H\xe3y cho ph\xe9p pop-up hoặc tải file HTML.");return}try{r.opener=null}catch{}r.addEventListener("load",()=>{r.focus(),r.print(),setTimeout(()=>URL.revokeObjectURL(t),3e4)},{once:!0})},[D]),X=(0,s.useCallback)(async()=>{if(!D)return;let e=[`B\xc1O C\xc1O LOCAL AI — ${d(D,b).title.toUpperCase()}`,`Trạng th\xe1i: ${n[D.status]?.label||D.status}`,`Điểm vận h\xe0nh: ${null==D.score?"N/A":`${D.score}/100`}`,"",...(D.narrative?.executiveSummary||[]).map(e=>`- ${e}`)].join("\n");await navigator.clipboard.writeText(e),z(!0),setTimeout(()=>z(!1),1800)},[D,b]),Y=(0,s.useMemo)(()=>D?.daily?.length?[...D.daily].sort((e,t)=>t.requests-e.requests)[0]:null,[D]);return t||O?(0,a.jsx)("div",{className:"flex min-h-[60vh] items-center justify-center",children:(0,a.jsxs)("div",{className:"flex items-center gap-3 rounded-2xl border border-border bg-surface px-5 py-4 text-sm text-text-muted shadow-sm",children:[(0,a.jsx)("span",{className:"material-symbols-outlined animate-spin text-primary",children:"progress_activity"}),"Đang chuẩn bị Local AI Report..."]})}):e?(0,a.jsxs)("div",{className:"mx-auto max-w-[1500px] space-y-6 pb-12",children:[(0,a.jsxs)("header",{className:"relative overflow-hidden rounded-[34px] border border-blue-400/20 bg-gradient-to-br from-[#071b35] via-[#123d78] to-[#087f9c] p-6 text-white shadow-[0_28px_90px_rgba(30,86,160,0.25)] md:p-9",children:[(0,a.jsx)("div",{className:"absolute -right-24 -top-24 h-72 w-72 rounded-full bg-cyan-300/20 blur-3xl"}),(0,a.jsx)("div",{className:"absolute bottom-0 left-1/3 h-44 w-72 rounded-full bg-blue-300/15 blur-3xl"}),(0,a.jsxs)("div",{className:"relative grid gap-8 xl:grid-cols-[minmax(0,1fr)_430px] xl:items-end",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"text-[11px] font-black uppercase tracking-[0.24em] text-cyan-200",children:"BlueRouter \xb7 AI Operations Intelligence"}),(0,a.jsx)("h1",{className:"mt-3 max-w-4xl text-3xl font-black tracking-tight md:text-5xl",children:"B\xe1o c\xe1o hoạt động Local AI"}),(0,a.jsxs)("p",{className:"mt-3 max-w-3xl text-sm leading-6 text-blue-100 md:text-base",children:["Bức tranh vận h\xe0nh local vLLM trong ",V.label," gần nhất: lưu lượng, hiệu năng, context, cache, lỗi, tải theo model v\xe0 snapshot hạ tầng."]}),(0,a.jsxs)("div",{className:"mt-5 flex flex-wrap items-center gap-3",children:[D?(0,a.jsx)(g,{status:D.status}):(0,a.jsx)("span",{className:"rounded-full border border-white/15 bg-white/10 px-3 py-1.5 text-xs font-semibold",children:"Chưa c\xf3 b\xe1o c\xe1o"}),D?(0,a.jsxs)("span",{className:"rounded-full border border-white/15 bg-white/10 px-3 py-1.5 text-xs font-semibold",children:["Confidence: ",D.confidence]}):null,D?.generatedAt?(0,a.jsxs)("span",{className:"text-xs text-blue-100",children:["Cập nhật ",p(D.generatedAt)]}):null]})]}),(0,a.jsxs)("div",{className:"rounded-2xl border border-white/15 bg-white/10 p-4 backdrop-blur-xl",children:[(0,a.jsx)("label",{className:"text-[11px] font-bold uppercase tracking-[0.14em] text-blue-100",children:"Kỳ b\xe1o c\xe1o"}),(0,a.jsx)("div",{className:"mt-2 grid grid-cols-2 gap-2 rounded-xl bg-[#082546]/70 p-1.5",children:o.map(e=>{let t=b===e.value,s=r[e.value];return(0,a.jsxs)("button",{type:"button",disabled:U,onClick:()=>{A(e.value),z(!1),B("")},className:c("relative flex h-10 items-center justify-center gap-2 rounded-lg px-3 text-sm font-bold transition disabled:cursor-not-allowed disabled:opacity-60",t?"bg-white text-[#123d78] shadow-md":"text-blue-100 hover:bg-white/10"),children:[(0,a.jsx)("span",{children:e.label}),s?(0,a.jsx)("span",{className:c("h-1.5 w-1.5 rounded-full",t?"bg-emerald-500":"bg-emerald-300"),title:`Đ\xe3 tạo ${p(s.generatedAt)}`}):null]},e.value)})}),(0,a.jsx)("label",{className:"mt-4 block text-[11px] font-bold uppercase tracking-[0.14em] text-blue-100",children:"AI model viết nhận định"}),(0,a.jsxs)("select",{value:P,onChange:e=>G(e.target.value),className:"mt-2 h-11 w-full rounded-xl border border-white/20 bg-[#0b2b53] px-3 text-sm text-white outline-none focus:border-cyan-300",children:[C.length?null:(0,a.jsx)("option",{value:"",children:"Kh\xf4ng c\xf3 AI model khả dụng"}),C.map(e=>(0,a.jsx)("option",{value:e.value,children:e.label},e.value))]}),(0,a.jsxs)("button",{type:"button",onClick:H,disabled:U||L,className:"mt-3 flex h-11 w-full items-center justify-center gap-2 rounded-xl bg-white font-bold text-[#123d78] shadow-lg transition hover:-translate-y-0.5 hover:bg-cyan-50 disabled:cursor-not-allowed disabled:opacity-60",children:[(0,a.jsx)("span",{className:c("material-symbols-outlined text-[20px]",U&&"animate-spin"),children:U?"progress_activity":"auto_awesome"}),U?`Đang ph\xe2n t\xedch dữ liệu ${V.label}...`:D?`Tạo lại b\xe1o c\xe1o ${V.label}`:`Tạo b\xe1o c\xe1o ${V.label}`]}),L?(0,a.jsx)("p",{className:"mt-2 text-xs text-amber-200",children:"Standby chỉ hiển thị report được đồng bộ từ Master."}):null]})]})]}),K?(0,a.jsxs)("div",{className:"flex items-start gap-3 rounded-2xl border border-red-500/20 bg-red-500/10 p-4 text-sm text-red-700 dark:text-red-300",children:[(0,a.jsx)("span",{className:"material-symbols-outlined",children:"error"}),(0,a.jsx)("div",{children:K})]}):null,D?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3 rounded-2xl border border-border bg-surface px-4 py-3 shadow-sm",children:[(0,a.jsxs)("div",{className:"text-xs text-text-muted",children:["Phạm vi: ",(0,a.jsxs)("span",{className:"font-semibold text-text-main",children:[p(D.range?.startIso)," → ",p(D.range?.endIso)]})," \xb7 Asia/Ho_Chi_Minh \xb7 ",D.providers?.length||0," local provider"]}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,a.jsxs)("button",{type:"button",onClick:X,className:"inline-flex items-center gap-2 rounded-xl border border-border bg-background px-3 py-2 text-xs font-semibold text-text-main hover:border-primary/40",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"content_copy"}),F?"Đ\xe3 sao ch\xe9p":"Copy summary"]}),(0,a.jsxs)("button",{type:"button",onClick:Q,className:"inline-flex items-center gap-2 rounded-xl border border-border bg-background px-3 py-2 text-xs font-semibold text-text-main hover:border-primary/40",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"data_object"}),"JSON"]}),(0,a.jsxs)("button",{type:"button",onClick:W,className:"inline-flex items-center gap-2 rounded-xl bg-primary px-3 py-2 text-xs font-bold text-white shadow-sm hover:brightness-110",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"download"}),"Tải HTML full"]}),(0,a.jsxs)("button",{type:"button",onClick:J,className:"inline-flex items-center gap-2 rounded-xl border border-border bg-background px-3 py-2 text-xs font-semibold text-text-main hover:border-primary/40",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"print"}),"In / PDF"]})]})]}),(0,a.jsxs)("section",{className:"grid gap-4 sm:grid-cols-2 xl:grid-cols-6",children:[(0,a.jsx)(j,{icon:"conversion_path",label:"Requests",value:m(D.overview?.requests),hint:`${m(D.overview?.totalTokens)} tokens`}),(0,a.jsx)(j,{icon:"verified",label:"Success rate",value:h(D.overview?.successRate,2),hint:`${x(D.overview?.errors)} usage errors`,tone:"emerald"}),(0,a.jsx)(j,{icon:"speed",label:"Latency p95",value:u(D.experience?.p95LatencyMs),hint:`p50 ${u(D.experience?.p50LatencyMs)}`,tone:"violet"}),(0,a.jsx)(j,{icon:"bolt",label:"TTFT p95",value:u(D.experience?.p95TtftMs),hint:`${x(D.experience?.outputTokensPerSecond,1)} tok/s`,tone:"amber"}),(0,a.jsx)(j,{icon:"cached",label:"Cached input",value:h(D.overview?.cacheShare),hint:`${m(D.overview?.cachedTokens)} tokens`,tone:"blue"}),(0,a.jsx)(j,{icon:"health_metrics",label:"Operational score",value:null==D.score?"N/A":`${D.score}/100`,hint:`Confidence ${D.confidence}`,tone:"critical"===D.status?"rose":"warning"===D.status?"amber":"emerald"})]}),(0,a.jsxs)(y,{className:"overflow-hidden bg-gradient-to-br from-surface to-primary/[0.035]",children:[(0,a.jsx)(f,{eyebrow:"Executive Brief",title:"T\xf3m tắt điều h\xe0nh",description:"Những t\xedn hiệu quan trọng nhất, kết hợp analytics local-only, lỗi v\xe0 snapshot hạ tầng.",icon:"summarize"}),(0,a.jsxs)("div",{className:"grid gap-4 lg:grid-cols-[minmax(0,1fr)_340px]",children:[(0,a.jsx)("div",{className:"space-y-3",children:(D.narrative?.executiveSummary||[]).map((e,t)=>(0,a.jsxs)("div",{className:"flex gap-3 rounded-2xl border border-border bg-background p-4",children:[(0,a.jsx)("span",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-lg bg-primary/10 text-xs font-black text-primary",children:t+1}),(0,a.jsx)("p",{className:"text-sm leading-6 text-text-main",children:e})]},`${t}-${e}`))}),(0,a.jsxs)("div",{className:"rounded-2xl border border-border bg-background p-5",children:[(0,a.jsx)("div",{className:"text-xs font-bold uppercase tracking-[0.14em] text-text-muted",children:"Điểm vận h\xe0nh"}),(0,a.jsx)("div",{className:"mt-2 text-6xl font-black tracking-tighter text-text-main",children:null==D.score?"—":D.score}),(0,a.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:"Thang 100 \xb7 heuristic SRE từ error, p95 latency, TTFT v\xe0 snapshot telemetry"}),(0,a.jsx)("div",{className:"mt-5 space-y-2",children:(D.operationalSignals||[]).slice(0,5).map(e=>(0,a.jsxs)("div",{className:"flex gap-2 text-xs leading-5 text-text-muted",children:[(0,a.jsx)("span",{className:"material-symbols-outlined mt-0.5 text-[16px] text-primary",children:"arrow_right"}),(0,a.jsx)("span",{children:e})]},e))})]})]})]}),(0,a.jsxs)("div",{className:"grid gap-6 xl:grid-cols-[minmax(0,1.35fr)_minmax(360px,0.65fr)]",children:[(0,a.jsxs)(y,{children:[(0,a.jsx)(f,{eyebrow:"Traffic",title:`Xu hướng ${V.label}`,description:"Request theo ng\xe0y ở m\xfai giờ Asia/Ho_Chi_Minh; hover từng cột để xem token v\xe0 lỗi.",icon:"finance_mode"}),(0,a.jsx)(w,{rows:D.daily||[]}),Y?(0,a.jsxs)("div",{className:"mt-4 grid gap-3 sm:grid-cols-3",children:[(0,a.jsx)($,{label:"Peak day",value:`${Y.date} \xb7 ${x(Y.requests)} req`}),(0,a.jsx)($,{label:"Peak error rate",value:h(Y.errorRate)}),(0,a.jsx)($,{label:"Peak tokens",value:m(Y.totalTokens)})]}):null]}),(0,a.jsxs)(y,{children:[(0,a.jsx)(f,{eyebrow:"Context Economics",title:"Token, cache & thinking",description:"Ph\xe2n t\xedch theo usage do provider b\xe1o; cached token kh\xf4ng mặc định l\xe0 GPU KV cache.",icon:"memory"}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)(N,{value:D.overview?.cacheShare*100,label:"Cached / input (%)",tone:"bg-cyan-500"}),(0,a.jsx)(N,{value:Math.min(100,D.overview?.reasoningShare*100),label:"Reasoning / output (%)",tone:"bg-violet-500"}),(0,a.jsx)(N,{value:100*(D.contextAndThinking?.largeContext?.gte50kRate||0),label:"Request context >=50k (%)",tone:"bg-amber-500"}),(0,a.jsx)(N,{value:100*(D.contextAndThinking?.thinking?.autoOffRate||0),label:"Thinking auto-off (%)",tone:"bg-rose-500"})]}),(0,a.jsxs)("div",{className:"mt-5 grid gap-3 sm:grid-cols-2 xl:grid-cols-1 2xl:grid-cols-2",children:[(0,a.jsx)($,{label:"Input tokens",value:m(D.overview?.promptTokens)}),(0,a.jsx)($,{label:"Output tokens",value:m(D.overview?.completionTokens)}),(0,a.jsx)($,{label:"Avg token/request",value:m(D.overview?.averageTokensPerRequest)}),(0,a.jsx)($,{label:"Extreme context",value:h(D.experience?.extremeInputRate)})]})]})]}),(0,a.jsxs)(y,{children:[(0,a.jsx)(f,{eyebrow:"Model Intelligence",title:"Đ\xe1nh gi\xe1 theo từng local model",description:"So s\xe1nh trong bối cảnh workload thực tế. Model \xedt hơn 20 request được đ\xe1nh dấu \xedt mẫu.",icon:"model_training"}),(0,a.jsxs)("div",{className:"grid gap-4 xl:grid-cols-2",children:[(D.models||[]).map((e,t)=>(0,a.jsx)(k,{model:e,rank:t+1},e.key)),D.models?.length?null:(0,a.jsx)("div",{className:"col-span-full rounded-2xl border border-dashed border-border p-10 text-center text-sm text-text-muted",children:"Kh\xf4ng c\xf3 model local n\xe0o ph\xe1t sinh traffic trong khoảng b\xe1o c\xe1o."})]})]}),(0,a.jsxs)(y,{children:[(0,a.jsx)(f,{eyebrow:"Infrastructure Snapshot",title:"Hạ tầng Local AI",description:`Inventory v\xe0 snapshot tại thời điểm tạo b\xe1o c\xe1o. Kh\xf4ng được diễn giải th\xe0nh lịch sử GPU ${V.label}.`,icon:"developer_board"}),(0,a.jsxs)("div",{className:"grid gap-4 xl:grid-cols-2",children:[(D.hardware||[]).map(e=>(0,a.jsx)(T,{node:e},e.id)),D.hardware?.length?null:(0,a.jsx)("div",{className:"col-span-full rounded-2xl border border-dashed border-border p-10 text-center text-sm text-text-muted",children:"Chưa cấu h\xecnh Linux Resources."})]}),(0,a.jsxs)("div",{className:"mt-5 rounded-2xl border border-primary/15 bg-primary/5 p-4 text-sm leading-6 text-text-muted",children:[(0,a.jsx)("strong",{className:"text-text-main",children:"Nhận định hạ tầng:"})," ",D.narrative?.infrastructureAssessment]})]}),(0,a.jsxs)("div",{className:"grid gap-6 xl:grid-cols-2",children:[(0,a.jsxs)(y,{children:[(0,a.jsx)(f,{eyebrow:"Strengths",title:"Điểm mạnh",icon:"workspace_premium"}),(0,a.jsx)("div",{className:"space-y-3",children:(D.narrative?.strengths||[]).map((e,t)=>(0,a.jsxs)("div",{className:"rounded-2xl border border-emerald-500/15 bg-emerald-500/5 p-4",children:[(0,a.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,a.jsx)("h3",{className:"font-bold text-text-main",children:e.title}),(0,a.jsx)("span",{className:"rounded-full bg-emerald-500/10 px-2 py-1 text-[10px] font-bold uppercase text-emerald-600",children:e.confidence})]}),(0,a.jsx)("p",{className:"mt-2 text-sm leading-6 text-text-muted",children:e.evidence})]},`${t}-${e.title}`))})]}),(0,a.jsxs)(y,{children:[(0,a.jsx)(f,{eyebrow:"Risks",title:"Điểm yếu & rủi ro",icon:"crisis_alert"}),(0,a.jsx)("div",{className:"space-y-3",children:(D.narrative?.weaknesses||[]).map((e,t)=>(0,a.jsxs)("div",{className:"rounded-2xl border border-amber-500/15 bg-amber-500/5 p-4",children:[(0,a.jsxs)("div",{className:"flex items-start gap-3",children:[(0,a.jsx)(v,{value:e.priority}),(0,a.jsx)("h3",{className:"font-bold text-text-main",children:e.title})]}),(0,a.jsx)("p",{className:"mt-2 text-sm leading-6 text-text-muted",children:e.evidence}),e.impact?(0,a.jsxs)("p",{className:"mt-2 text-xs font-medium text-amber-700 dark:text-amber-300",children:["Ảnh hưởng: ",e.impact]}):null]},`${t}-${e.title}`))})]})]}),(0,a.jsxs)("div",{className:"grid gap-6 xl:grid-cols-[minmax(0,1.1fr)_minmax(0,0.9fr)]",children:[(0,a.jsxs)(y,{children:[(0,a.jsx)(f,{eyebrow:"Reliability",title:"Lỗi ảnh hưởng Local AI",description:"Ph\xe2n loại gateway, upstream, client v\xe0 rate-limit từ request_error_events đ\xe3 scope theo local provider.",icon:"bug_report"}),(0,a.jsxs)("div",{className:"grid gap-3 sm:grid-cols-4",children:[(0,a.jsx)($,{label:"Gateway",value:x(D.errors?.summary?.gateway)}),(0,a.jsx)($,{label:"Upstream",value:x(D.errors?.summary?.upstream)}),(0,a.jsx)($,{label:"Client",value:x(D.errors?.summary?.client)}),(0,a.jsx)($,{label:"Rate limit",value:x(D.errors?.summary?.rateLimit)})]}),(0,a.jsxs)("div",{className:"mt-5 overflow-x-auto",children:[(0,a.jsxs)("table",{className:"w-full min-w-[720px] text-left text-xs",children:[(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{className:"border-b border-border text-[10px] uppercase tracking-[0.1em] text-text-muted",children:[(0,a.jsx)("th",{className:"pb-3",children:"Owner / Error"}),(0,a.jsx)("th",{className:"pb-3",children:"Model"}),(0,a.jsx)("th",{className:"pb-3",children:"Endpoint"}),(0,a.jsx)("th",{className:"pb-3 text-right",children:"Count"})]})}),(0,a.jsx)("tbody",{children:(D.errors?.topServerErrors||[]).map((e,t)=>(0,a.jsxs)("tr",{className:"border-b border-border/60",children:[(0,a.jsxs)("td",{className:"py-3",children:[(0,a.jsxs)("div",{className:"font-semibold text-text-main",children:[e.faultOwner||"unknown"," \xb7 ",e.errorType||e.status]}),(0,a.jsx)("div",{className:"mt-1 max-w-md truncate text-text-muted",title:e.sample,children:e.sample||e.errorCode||"-"})]}),(0,a.jsx)("td",{className:"py-3 text-text-muted",children:e.model||"-"}),(0,a.jsx)("td",{className:"py-3 text-text-muted",children:e.endpoint||"-"}),(0,a.jsx)("td",{className:"py-3 text-right font-bold text-text-main",children:x(e.requests)})]},`${t}-${e.label}`))})]}),D.errors?.topServerErrors?.length?null:(0,a.jsx)("div",{className:"py-8 text-center text-sm text-text-muted",children:"Kh\xf4ng c\xf3 lỗi gateway/upstream đ\xe1ng ch\xfa \xfd."})]})]}),(0,a.jsxs)(y,{children:[(0,a.jsx)(f,{eyebrow:"Workload",title:"Nguồn tải ch\xednh",description:"API key v\xe0 endpoint đ\xe3 aggregate; kh\xf4ng đưa raw bearer token v\xe0o report.",icon:"account_tree"}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"mb-2 text-xs font-bold uppercase tracking-[0.12em] text-text-muted",children:"Top API keys"}),(0,a.jsx)("div",{className:"space-y-2",children:(D.workload?.apiKeys||[]).slice(0,6).map(e=>(0,a.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border bg-background px-3 py-2.5",children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("div",{className:"truncate text-sm font-semibold text-text-main",children:e.label}),(0,a.jsx)("div",{className:"text-[11px] text-text-muted",children:e.ownerUser||e.fingerprint||"-"})]}),(0,a.jsxs)("div",{className:"text-right",children:[(0,a.jsx)("div",{className:"text-sm font-bold text-text-main",children:m(e.totalTokens)}),(0,a.jsxs)("div",{className:"text-[10px] text-text-muted",children:[h(e.tokenShare)," token"]})]})]},e.key))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"mb-2 text-xs font-bold uppercase tracking-[0.12em] text-text-muted",children:"Top endpoints"}),(0,a.jsx)("div",{className:"space-y-2",children:(D.workload?.endpoints||[]).slice(0,6).map(e=>(0,a.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border bg-background px-3 py-2.5",children:[(0,a.jsx)("div",{className:"min-w-0 truncate text-sm font-semibold text-text-main",children:e.label}),(0,a.jsxs)("div",{className:"text-right text-xs text-text-muted",children:[x(e.requests)," req \xb7 ",h(e.errorRate)," error"]})]},e.key))})]})]})]})]}),(0,a.jsxs)(y,{children:[(0,a.jsx)(f,{eyebrow:"Execution Plan",title:"Kế hoạch h\xe0nh động",description:"Ưu ti\xean theo t\xe1c động vận h\xe0nh; mỗi h\xe0nh động c\xf3 owner gợi \xfd v\xe0 chỉ số x\xe1c nhận sau khi triển khai.",icon:"checklist"}),(0,a.jsx)("div",{className:"overflow-x-auto",children:(0,a.jsxs)("table",{className:"w-full min-w-[900px] text-left text-sm",children:[(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{className:"border-b border-border text-[10px] uppercase tracking-[0.12em] text-text-muted",children:[(0,a.jsx)("th",{className:"pb-3",children:"Priority"}),(0,a.jsx)("th",{className:"pb-3",children:"H\xe0nh động"}),(0,a.jsx)("th",{className:"pb-3",children:"Owner"}),(0,a.jsx)("th",{className:"pb-3",children:"Chỉ số kiểm chứng"})]})}),(0,a.jsx)("tbody",{children:(D.narrative?.actions||[]).map((e,t)=>(0,a.jsxs)("tr",{className:"border-b border-border/60 align-top",children:[(0,a.jsx)("td",{className:"py-4",children:(0,a.jsx)(v,{value:e.priority})}),(0,a.jsx)("td",{className:"py-4 pr-6 font-medium leading-6 text-text-main",children:e.action}),(0,a.jsx)("td",{className:"py-4 pr-6 text-text-muted",children:e.owner||"-"}),(0,a.jsx)("td",{className:"py-4 text-text-muted",children:e.validationMetric||"-"})]},`${t}-${e.action}`))})]})})]}),(0,a.jsxs)(y,{children:[(0,a.jsx)(f,{eyebrow:"Forecast & Methodology",title:"Dự b\xe1o v\xe0 giới hạn b\xe1o c\xe1o",icon:"policy"}),(0,a.jsxs)("div",{className:"grid gap-5 lg:grid-cols-2",children:[(0,a.jsxs)("div",{className:"rounded-2xl border border-border bg-background p-5",children:[(0,a.jsx)("h3",{className:"font-bold text-text-main",children:"Dự b\xe1o ngắn hạn"}),(0,a.jsx)("p",{className:"mt-2 text-sm leading-6 text-text-muted",children:D.narrative?.forecast})]}),(0,a.jsxs)("div",{className:"rounded-2xl border border-border bg-background p-5",children:[(0,a.jsx)("h3",{className:"font-bold text-text-main",children:"Độ tin cậy dữ liệu"}),(0,a.jsx)("ul",{className:"mt-3 space-y-2",children:(D.dataQuality||[]).map(e=>(0,a.jsxs)("li",{className:"flex gap-2 text-sm leading-6 text-text-muted",children:[(0,a.jsx)("span",{className:"material-symbols-outlined mt-1 text-[16px] text-primary",children:"info"}),(0,a.jsx)("span",{children:e})]},e))})]})]}),D.aiWarning?(0,a.jsxs)("div",{className:"mt-4 rounded-xl border border-amber-500/20 bg-amber-500/10 p-3 text-xs text-amber-700 dark:text-amber-300",children:["AI narrative fallback được sử dụng v\xec: ",D.aiWarning]}):null,(0,a.jsxs)("div",{className:"mt-4 text-[11px] text-text-muted",children:["Report ID: ",D.id," \xb7 Analytics ",D.analyticsVersion," \xb7 Compute ",x(D.computeMs)," ms \xb7 Requested by ",D.requestedBy||"Admin"]})]})]}):(0,a.jsxs)(y,{className:"flex min-h-[340px] flex-col items-center justify-center text-center",children:[(0,a.jsx)("span",{className:"material-symbols-outlined rounded-3xl bg-primary/10 p-5 text-5xl text-primary",children:"analytics"}),(0,a.jsx)("h2",{className:"mt-5 text-2xl font-black text-text-main",children:"Chưa c\xf3 Local AI Report"}),(0,a.jsx)("p",{className:"mt-2 max-w-xl text-sm leading-6 text-text-muted",children:"Chọn AI model v\xe0 tạo b\xe1o c\xe1o. Hệ thống chỉ lấy traffic từ Provider Node c\xf3 runtime vLLM; dữ liệu cloud kh\xf4ng được trộn v\xe0o KPI local."})]})]}):null}},34701:(e,t,r)=>{"use strict";var a=r(82114);function s(){}function l(){}l.resetWarningCache=s,e.exports=function(){function e(e,t,r,s,l,n){if(n!==a){var i=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw i.name="Invariant Violation",i}}function t(){return e}e.isRequired=e;var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:l,resetWarningCache:s};return r.PropTypes=r,r}},82114:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},84175:(e,t,r)=>{Promise.resolve().then(r.bind(r,30238))},94027:(e,t,r)=>{"use strict";r.d(t,{Y:()=>o,s:()=>d});var a=r(95155),s=r(12115),l=r(14051),n=r.n(l);let i=(0,s.createContext)(null);function o({children:e}){let[t,r]=(0,s.useState)(null),[l,n]=(0,s.useState)(!0),[d,c]=(0,s.useState)(""),x=(0,s.useCallback)(async()=>{n(!0),c("");try{let e=await fetch("/api/auth/status",{cache:"no-store"}),t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t?.error||"Kh\xf4ng tải được trạng th\xe1i đăng nhập");return r(t||{}),t||{}}catch(e){return c(e?.message||"Kh\xf4ng tải được trạng th\xe1i đăng nhập"),r({}),{}}finally{n(!1)}},[]);(0,s.useEffect)(()=>{let e=!1;return(async()=>{n(!0),c("");try{let t=await fetch("/api/auth/status",{cache:"no-store"}),a=await t.json().catch(()=>({}));if(e)return;if(!t.ok)throw Error(a?.error||"Kh\xf4ng tải được trạng th\xe1i đăng nhập");r(a||{})}catch(t){e||(c(t?.message||"Kh\xf4ng tải được trạng th\xe1i đăng nhập"),r({}))}finally{e||n(!1)}})(),()=>{e=!0}},[]);let m=(0,s.useMemo)(()=>{let e,r,a,s,l,n,i;return r=(e=t&&"object"==typeof t?t:{}).displayName||e.oidcName||e.oidcEmail||e.userId||"",s=(a=!0===e.actualIsAdmin||!0===e.isAdmin&&!0!==e.showAsUser)&&!0===e.showAsUser,l=!0===e.isAdmin&&!s,n=!0===e.isMonitorAdmin,i=!0===e.isAiGatewaysMonitor,{status:e,displayName:r,userId:e.userId||"",loginMethod:e.loginMethod||"",role:e.role||"guest",actualRole:e.actualRole||e.role||"guest",isAdmin:l,actualIsAdmin:a,showAsUser:s,canToggleUserMode:!0===e.canToggleUserMode||a,isMonitorAdmin:n,isAiGatewaysMonitor:i,canManageApiKeys:!0===e.canManageApiKeys||l||n,canUseMonitorAdminTabs:!0===e.canUseMonitorAdminTabs||l||n,canViewAllAnalytics:!0===e.canViewAllAnalytics||l||n||i}},[t]),h=(0,s.useMemo)(()=>({...m,loading:l,error:d,reload:x}),[m,l,d,x]);return(0,a.jsx)(i.Provider,{value:h,children:e})}function d(){let e=(0,s.useContext)(i);return e||{status:{},displayName:"",userId:"",loginMethod:"",role:"admin",actualRole:"admin",isAdmin:!0,actualIsAdmin:!0,showAsUser:!1,canToggleUserMode:!0,isMonitorAdmin:!1,isAiGatewaysMonitor:!1,canManageApiKeys:!0,canUseMonitorAdminTabs:!0,canViewAllAnalytics:!0,loading:!1,error:"",reload:async()=>({})}}o.propTypes={children:n().node}}},e=>{e.O(0,[8441,3794,7358],()=>e(e.s=84175)),_N_E=e.O()}]);
|
|
18
|
+
</main></body></html>`}function R(e,t,r){let a=new Blob([e],{type:t}),s=URL.createObjectURL(a),l=document.createElement("a");l.href=s,l.download=r,document.body.appendChild(l),l.click(),l.remove(),URL.revokeObjectURL(s)}function S(){let{isAdmin:e,loading:t}=(0,l.s)(),[r,i]=(0,s.useState)({"7d":null,"30d":null}),[b,A]=(0,s.useState)("7d"),[C,S]=(0,s.useState)([]),[P,_]=(0,s.useState)(""),[L,I]=(0,s.useState)(!1),[O,U]=(0,s.useState)(!0),[q,E]=(0,s.useState)(!1),[K,B]=(0,s.useState)(""),[F,z]=(0,s.useState)(!1),D=r[b]||null,V=o.find(e=>e.value===b)||o[0];(0,s.useEffect)(()=>{if(t||!e)return;let r=!1;return(async()=>{U(!0),B("");try{let[e,t]=await Promise.all([fetch("/api/dashboard/local-ai-report",{cache:"no-store"}),fetch("/api/dashboard/analytics/ai-models",{cache:"no-store"})]),a=await e.json().catch(()=>({})),s=await t.json().catch(()=>({}));if(!e.ok)throw Error(a.error||"Kh\xf4ng tải được b\xe1o c\xe1o");if(r)return;let l=s.options||[];i(a.reports||{"7d":a.report||null,"30d":null}),I(!0===a.standby),S(l),_(a.selectedModel&&l.some(e=>e.value===a.selectedModel)?a.selectedModel:l[0]?.value||"")}catch(e){r||B(e?.message||"Kh\xf4ng tải được b\xe1o c\xe1o")}finally{r||U(!1)}})(),()=>{r=!0}},[t,e]);let G=(0,s.useCallback)(e=>{_(e),fetch("/api/dashboard/analytics/analyze",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:e})}).catch(()=>{})},[]),H=(0,s.useCallback)(async()=>{E(!0),B("");try{let e=P.indexOf("::"),t=e>=0?P.slice(0,e):"",r=e>=0?P.slice(e+2):"",a=await fetch("/api/dashboard/local-ai-report",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({connectionId:t,model:r,period:b})}),s=await a.json().catch(()=>({}));if(!a.ok)throw Error(s.error||"Kh\xf4ng thể tạo b\xe1o c\xe1o");i(e=>({...e,[b]:s.report||null}))}catch(e){B(e?.message||"Kh\xf4ng thể tạo b\xe1o c\xe1o")}finally{E(!1)}},[P,b]),W=(0,s.useCallback)(()=>{if(!D)return;let e=D.range?.period||b;R(M(D),"text/html;charset=utf-8",`local-ai-report-${e}-${D.generatedAt.slice(0,10)}.html`)},[D,b]),Q=(0,s.useCallback)(()=>{if(!D)return;let e=D.range?.period||b;R(JSON.stringify(D,null,2),"application/json;charset=utf-8",`local-ai-report-${e}-${D.generatedAt.slice(0,10)}.json`)},[D,b]),J=(0,s.useCallback)(()=>{if(!D)return;let e=new Blob([M(D)],{type:"text/html;charset=utf-8"}),t=URL.createObjectURL(e),r=window.open(t,"_blank");if(!r){URL.revokeObjectURL(t),B("Tr\xecnh duyệt đ\xe3 chặn cửa sổ in. H\xe3y cho ph\xe9p pop-up hoặc tải file HTML.");return}try{r.opener=null}catch{}r.addEventListener("load",()=>{r.focus(),r.print(),setTimeout(()=>URL.revokeObjectURL(t),3e4)},{once:!0})},[D]),X=(0,s.useCallback)(async()=>{if(!D)return;let e=[`B\xc1O C\xc1O LOCAL AI — ${d(D,b).title.toUpperCase()}`,`Trạng th\xe1i: ${n[D.status]?.label||D.status}`,`Điểm vận h\xe0nh: ${null==D.score?"N/A":`${D.score}/100`}`,"",...(D.narrative?.executiveSummary||[]).map(e=>`- ${e}`)].join("\n");await navigator.clipboard.writeText(e),z(!0),setTimeout(()=>z(!1),1800)},[D,b]),Y=(0,s.useMemo)(()=>D?.daily?.length?[...D.daily].sort((e,t)=>t.requests-e.requests)[0]:null,[D]);return t||O?(0,a.jsx)("div",{className:"flex min-h-[60vh] items-center justify-center",children:(0,a.jsxs)("div",{className:"flex items-center gap-3 rounded-2xl border border-border bg-surface px-5 py-4 text-sm text-text-muted shadow-sm",children:[(0,a.jsx)("span",{className:"material-symbols-outlined animate-spin text-primary",children:"progress_activity"}),"Đang chuẩn bị Local AI Report..."]})}):e?(0,a.jsxs)("div",{className:"mx-auto max-w-[1500px] space-y-6 pb-12",children:[(0,a.jsxs)("header",{className:"relative overflow-hidden rounded-[34px] border border-blue-400/20 bg-gradient-to-br from-[#071b35] via-[#123d78] to-[#087f9c] p-6 text-white shadow-[0_28px_90px_rgba(30,86,160,0.25)] md:p-9",children:[(0,a.jsx)("div",{className:"absolute -right-24 -top-24 h-72 w-72 rounded-full bg-cyan-300/20 blur-3xl"}),(0,a.jsx)("div",{className:"absolute bottom-0 left-1/3 h-44 w-72 rounded-full bg-blue-300/15 blur-3xl"}),(0,a.jsxs)("div",{className:"relative grid gap-8 xl:grid-cols-[minmax(0,1fr)_430px] xl:items-end",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"text-[11px] font-black uppercase tracking-[0.24em] text-cyan-200",children:"BlueRouter \xb7 AI Operations Intelligence"}),(0,a.jsx)("h1",{className:"mt-3 max-w-4xl text-3xl font-black tracking-tight md:text-5xl",children:"B\xe1o c\xe1o hoạt động Local AI"}),(0,a.jsxs)("p",{className:"mt-3 max-w-3xl text-sm leading-6 text-blue-100 md:text-base",children:["Bức tranh vận h\xe0nh local vLLM trong ",V.label," gần nhất: lưu lượng, hiệu năng, context, cache, lỗi, tải theo model v\xe0 snapshot hạ tầng."]}),(0,a.jsxs)("div",{className:"mt-5 flex flex-wrap items-center gap-3",children:[D?(0,a.jsx)(g,{status:D.status}):(0,a.jsx)("span",{className:"rounded-full border border-white/15 bg-white/10 px-3 py-1.5 text-xs font-semibold",children:"Chưa c\xf3 b\xe1o c\xe1o"}),D?(0,a.jsxs)("span",{className:"rounded-full border border-white/15 bg-white/10 px-3 py-1.5 text-xs font-semibold",children:["Confidence: ",D.confidence]}):null,D?.generatedAt?(0,a.jsxs)("span",{className:"text-xs text-blue-100",children:["Cập nhật ",p(D.generatedAt)]}):null]})]}),(0,a.jsxs)("div",{className:"rounded-2xl border border-white/15 bg-white/10 p-4 backdrop-blur-xl",children:[(0,a.jsx)("label",{className:"text-[11px] font-bold uppercase tracking-[0.14em] text-blue-100",children:"Kỳ b\xe1o c\xe1o"}),(0,a.jsx)("div",{className:"mt-2 grid grid-cols-2 gap-2 rounded-xl bg-[#082546]/70 p-1.5",children:o.map(e=>{let t=b===e.value,s=r[e.value];return(0,a.jsxs)("button",{type:"button",disabled:q,onClick:()=>{A(e.value),z(!1),B("")},className:c("relative flex h-10 items-center justify-center gap-2 rounded-lg px-3 text-sm font-bold transition disabled:cursor-not-allowed disabled:opacity-60",t?"bg-white text-[#123d78] shadow-md":"text-blue-100 hover:bg-white/10"),children:[(0,a.jsx)("span",{children:e.label}),s?(0,a.jsx)("span",{className:c("h-1.5 w-1.5 rounded-full",t?"bg-emerald-500":"bg-emerald-300"),title:`Đ\xe3 tạo ${p(s.generatedAt)}`}):null]},e.value)})}),(0,a.jsx)("label",{className:"mt-4 block text-[11px] font-bold uppercase tracking-[0.14em] text-blue-100",children:"AI model viết nhận định"}),(0,a.jsxs)("select",{value:P,onChange:e=>G(e.target.value),className:"mt-2 h-11 w-full rounded-xl border border-white/20 bg-[#0b2b53] px-3 text-sm text-white outline-none focus:border-cyan-300",children:[C.length?null:(0,a.jsx)("option",{value:"",children:"Kh\xf4ng c\xf3 AI model khả dụng"}),C.map(e=>(0,a.jsx)("option",{value:e.value,children:e.label},e.value))]}),(0,a.jsxs)("button",{type:"button",onClick:H,disabled:q||L,className:"mt-3 flex h-11 w-full items-center justify-center gap-2 rounded-xl bg-white font-bold text-[#123d78] shadow-lg transition hover:-translate-y-0.5 hover:bg-cyan-50 disabled:cursor-not-allowed disabled:opacity-60",children:[(0,a.jsx)("span",{className:c("material-symbols-outlined text-[20px]",q&&"animate-spin"),children:q?"progress_activity":"auto_awesome"}),q?`Đang ph\xe2n t\xedch dữ liệu ${V.label}...`:D?`Tạo lại b\xe1o c\xe1o ${V.label}`:`Tạo b\xe1o c\xe1o ${V.label}`]}),L?(0,a.jsx)("p",{className:"mt-2 text-xs text-amber-200",children:"Standby chỉ hiển thị report được đồng bộ từ Master."}):null]})]})]}),K?(0,a.jsxs)("div",{className:"flex items-start gap-3 rounded-2xl border border-red-500/20 bg-red-500/10 p-4 text-sm text-red-700 dark:text-red-300",children:[(0,a.jsx)("span",{className:"material-symbols-outlined",children:"error"}),(0,a.jsx)("div",{children:K})]}):null,D?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3 rounded-2xl border border-border bg-surface px-4 py-3 shadow-sm",children:[(0,a.jsxs)("div",{className:"text-xs text-text-muted",children:["Phạm vi: ",(0,a.jsxs)("span",{className:"font-semibold text-text-main",children:[p(D.range?.startIso)," → ",p(D.range?.endIso)]})," \xb7 Asia/Ho_Chi_Minh \xb7 ",D.providers?.length||0," local provider"]}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,a.jsxs)("button",{type:"button",onClick:X,className:"inline-flex items-center gap-2 rounded-xl border border-border bg-background px-3 py-2 text-xs font-semibold text-text-main hover:border-primary/40",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"content_copy"}),F?"Đ\xe3 sao ch\xe9p":"Copy summary"]}),(0,a.jsxs)("button",{type:"button",onClick:Q,className:"inline-flex items-center gap-2 rounded-xl border border-border bg-background px-3 py-2 text-xs font-semibold text-text-main hover:border-primary/40",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"data_object"}),"JSON"]}),(0,a.jsxs)("button",{type:"button",onClick:W,className:"inline-flex items-center gap-2 rounded-xl bg-primary px-3 py-2 text-xs font-bold text-white shadow-sm hover:brightness-110",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"download"}),"Tải HTML full"]}),(0,a.jsxs)("button",{type:"button",onClick:J,className:"inline-flex items-center gap-2 rounded-xl border border-border bg-background px-3 py-2 text-xs font-semibold text-text-main hover:border-primary/40",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"print"}),"In / PDF"]})]})]}),(0,a.jsxs)("section",{className:"grid gap-4 sm:grid-cols-2 xl:grid-cols-6",children:[(0,a.jsx)(j,{icon:"conversion_path",label:"Requests",value:m(D.overview?.requests),hint:`${m(D.overview?.totalTokens)} tokens`}),(0,a.jsx)(j,{icon:"verified",label:"Success rate",value:h(D.overview?.successRate,2),hint:`${x(D.overview?.errors)} usage errors`,tone:"emerald"}),(0,a.jsx)(j,{icon:"speed",label:"Latency p95",value:u(D.experience?.p95LatencyMs),hint:`p50 ${u(D.experience?.p50LatencyMs)}`,tone:"violet"}),(0,a.jsx)(j,{icon:"bolt",label:"TTFT p95",value:u(D.experience?.p95TtftMs),hint:`${x(D.experience?.outputTokensPerSecond,1)} tok/s`,tone:"amber"}),(0,a.jsx)(j,{icon:"cached",label:"Cached input",value:h(D.overview?.cacheShare),hint:`${m(D.overview?.cachedTokens)} tokens`,tone:"blue"}),(0,a.jsx)(j,{icon:"health_metrics",label:"Operational score",value:null==D.score?"N/A":`${D.score}/100`,hint:`Confidence ${D.confidence}`,tone:"critical"===D.status?"rose":"warning"===D.status?"amber":"emerald"})]}),(0,a.jsxs)(y,{className:"overflow-hidden bg-gradient-to-br from-surface to-primary/[0.035]",children:[(0,a.jsx)(f,{eyebrow:"Executive Brief",title:"T\xf3m tắt điều h\xe0nh",description:"Những t\xedn hiệu quan trọng nhất, kết hợp analytics local-only, lỗi v\xe0 snapshot hạ tầng.",icon:"summarize"}),(0,a.jsxs)("div",{className:"grid gap-4 lg:grid-cols-[minmax(0,1fr)_340px]",children:[(0,a.jsx)("div",{className:"space-y-3",children:(D.narrative?.executiveSummary||[]).map((e,t)=>(0,a.jsxs)("div",{className:"flex gap-3 rounded-2xl border border-border bg-background p-4",children:[(0,a.jsx)("span",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-lg bg-primary/10 text-xs font-black text-primary",children:t+1}),(0,a.jsx)("p",{className:"text-sm leading-6 text-text-main",children:e})]},`${t}-${e}`))}),(0,a.jsxs)("div",{className:"rounded-2xl border border-border bg-background p-5",children:[(0,a.jsx)("div",{className:"text-xs font-bold uppercase tracking-[0.14em] text-text-muted",children:"Điểm vận h\xe0nh"}),(0,a.jsx)("div",{className:"mt-2 text-6xl font-black tracking-tighter text-text-main",children:null==D.score?"—":D.score}),(0,a.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:"Thang 100 \xb7 heuristic SRE từ error, p95 latency, TTFT v\xe0 snapshot telemetry"}),(0,a.jsx)("div",{className:"mt-5 space-y-2",children:(D.operationalSignals||[]).slice(0,5).map(e=>(0,a.jsxs)("div",{className:"flex gap-2 text-xs leading-5 text-text-muted",children:[(0,a.jsx)("span",{className:"material-symbols-outlined mt-0.5 text-[16px] text-primary",children:"arrow_right"}),(0,a.jsx)("span",{children:e})]},e))})]})]})]}),(0,a.jsxs)("div",{className:"grid gap-6 xl:grid-cols-[minmax(0,1.35fr)_minmax(360px,0.65fr)]",children:[(0,a.jsxs)(y,{children:[(0,a.jsx)(f,{eyebrow:"Traffic",title:`Xu hướng ${V.label}`,description:"Request theo ng\xe0y ở m\xfai giờ Asia/Ho_Chi_Minh; hover từng cột để xem token v\xe0 lỗi.",icon:"finance_mode"}),(0,a.jsx)(w,{rows:D.daily||[]}),Y?(0,a.jsxs)("div",{className:"mt-4 grid gap-3 sm:grid-cols-3",children:[(0,a.jsx)($,{label:"Peak day",value:`${Y.date} \xb7 ${x(Y.requests)} req`}),(0,a.jsx)($,{label:"Peak error rate",value:h(Y.errorRate)}),(0,a.jsx)($,{label:"Peak tokens",value:m(Y.totalTokens)})]}):null]}),(0,a.jsxs)(y,{children:[(0,a.jsx)(f,{eyebrow:"Context Economics",title:"Token, cache & thinking",description:"Ph\xe2n t\xedch theo usage do provider b\xe1o; cached token kh\xf4ng mặc định l\xe0 GPU KV cache.",icon:"memory"}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)(N,{value:D.overview?.cacheShare*100,label:"Cached / input (%)",tone:"bg-cyan-500"}),(0,a.jsx)(N,{value:Math.min(100,D.overview?.reasoningShare*100),label:"Reasoning / output (%)",tone:"bg-violet-500"}),(0,a.jsx)(N,{value:100*(D.contextAndThinking?.largeContext?.gte50kRate||0),label:"Request context >=50k (%)",tone:"bg-amber-500"}),(0,a.jsx)(N,{value:100*(D.contextAndThinking?.thinking?.autoOffRate||0),label:"Thinking auto-off (%)",tone:"bg-rose-500"})]}),(0,a.jsxs)("div",{className:"mt-5 grid gap-3 sm:grid-cols-2 xl:grid-cols-1 2xl:grid-cols-2",children:[(0,a.jsx)($,{label:"Input tokens",value:m(D.overview?.promptTokens)}),(0,a.jsx)($,{label:"Output tokens",value:m(D.overview?.completionTokens)}),(0,a.jsx)($,{label:"Avg token/request",value:m(D.overview?.averageTokensPerRequest)}),(0,a.jsx)($,{label:"Extreme context",value:h(D.experience?.extremeInputRate)})]})]})]}),(0,a.jsxs)(y,{children:[(0,a.jsx)(f,{eyebrow:"Model Intelligence",title:"Đ\xe1nh gi\xe1 theo từng local model",description:"So s\xe1nh trong bối cảnh workload thực tế. Model \xedt hơn 20 request được đ\xe1nh dấu \xedt mẫu.",icon:"model_training"}),(0,a.jsxs)("div",{className:"grid gap-4 xl:grid-cols-2",children:[(D.models||[]).map((e,t)=>(0,a.jsx)(k,{model:e,rank:t+1},e.key)),D.models?.length?null:(0,a.jsx)("div",{className:"col-span-full rounded-2xl border border-dashed border-border p-10 text-center text-sm text-text-muted",children:"Kh\xf4ng c\xf3 model local n\xe0o ph\xe1t sinh traffic trong khoảng b\xe1o c\xe1o."})]})]}),(0,a.jsxs)(y,{children:[(0,a.jsx)(f,{eyebrow:"Infrastructure Snapshot",title:"Hạ tầng Local AI",description:`Inventory v\xe0 snapshot tại thời điểm tạo b\xe1o c\xe1o. Kh\xf4ng được diễn giải th\xe0nh lịch sử GPU ${V.label}.`,icon:"developer_board"}),(0,a.jsxs)("div",{className:"grid gap-4 xl:grid-cols-2",children:[(D.hardware||[]).map(e=>(0,a.jsx)(T,{node:e},e.id)),D.hardware?.length?null:(0,a.jsx)("div",{className:"col-span-full rounded-2xl border border-dashed border-border p-10 text-center text-sm text-text-muted",children:"Chưa cấu h\xecnh Linux Resources."})]}),(0,a.jsxs)("div",{className:"mt-5 rounded-2xl border border-primary/15 bg-primary/5 p-4 text-sm leading-6 text-text-muted",children:[(0,a.jsx)("strong",{className:"text-text-main",children:"Nhận định hạ tầng:"})," ",D.narrative?.infrastructureAssessment]})]}),(0,a.jsxs)("div",{className:"grid gap-6 xl:grid-cols-2",children:[(0,a.jsxs)(y,{children:[(0,a.jsx)(f,{eyebrow:"Strengths",title:"Điểm mạnh",icon:"workspace_premium"}),(0,a.jsx)("div",{className:"space-y-3",children:(D.narrative?.strengths||[]).map((e,t)=>(0,a.jsxs)("div",{className:"rounded-2xl border border-emerald-500/15 bg-emerald-500/5 p-4",children:[(0,a.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,a.jsx)("h3",{className:"font-bold text-text-main",children:e.title}),(0,a.jsx)("span",{className:"rounded-full bg-emerald-500/10 px-2 py-1 text-[10px] font-bold uppercase text-emerald-600",children:e.confidence})]}),(0,a.jsx)("p",{className:"mt-2 text-sm leading-6 text-text-muted",children:e.evidence})]},`${t}-${e.title}`))})]}),(0,a.jsxs)(y,{children:[(0,a.jsx)(f,{eyebrow:"Risks",title:"Điểm yếu & rủi ro",icon:"crisis_alert"}),(0,a.jsx)("div",{className:"space-y-3",children:(D.narrative?.weaknesses||[]).map((e,t)=>(0,a.jsxs)("div",{className:"rounded-2xl border border-amber-500/15 bg-amber-500/5 p-4",children:[(0,a.jsxs)("div",{className:"flex items-start gap-3",children:[(0,a.jsx)(v,{value:e.priority}),(0,a.jsx)("h3",{className:"font-bold text-text-main",children:e.title})]}),(0,a.jsx)("p",{className:"mt-2 text-sm leading-6 text-text-muted",children:e.evidence}),e.impact?(0,a.jsxs)("p",{className:"mt-2 text-xs font-medium text-amber-700 dark:text-amber-300",children:["Ảnh hưởng: ",e.impact]}):null]},`${t}-${e.title}`))})]})]}),(0,a.jsxs)("div",{className:"grid gap-6 xl:grid-cols-[minmax(0,1.1fr)_minmax(0,0.9fr)]",children:[(0,a.jsxs)(y,{children:[(0,a.jsx)(f,{eyebrow:"Reliability",title:"Lỗi ảnh hưởng Local AI",description:"Ph\xe2n loại gateway, upstream, client v\xe0 rate-limit từ request_error_events đ\xe3 scope theo local provider.",icon:"bug_report"}),(0,a.jsxs)("div",{className:"grid gap-3 sm:grid-cols-4",children:[(0,a.jsx)($,{label:"Gateway",value:x(D.errors?.summary?.gateway)}),(0,a.jsx)($,{label:"Upstream",value:x(D.errors?.summary?.upstream)}),(0,a.jsx)($,{label:"Client",value:x(D.errors?.summary?.client)}),(0,a.jsx)($,{label:"Rate limit",value:x(D.errors?.summary?.rateLimit)})]}),(0,a.jsxs)("div",{className:"mt-5 overflow-x-auto",children:[(0,a.jsxs)("table",{className:"w-full min-w-[720px] text-left text-xs",children:[(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{className:"border-b border-border text-[10px] uppercase tracking-[0.1em] text-text-muted",children:[(0,a.jsx)("th",{className:"pb-3",children:"Owner / Error"}),(0,a.jsx)("th",{className:"pb-3",children:"Model"}),(0,a.jsx)("th",{className:"pb-3",children:"Endpoint"}),(0,a.jsx)("th",{className:"pb-3 text-right",children:"Count"})]})}),(0,a.jsx)("tbody",{children:(D.errors?.topServerErrors||[]).map((e,t)=>(0,a.jsxs)("tr",{className:"border-b border-border/60",children:[(0,a.jsxs)("td",{className:"py-3",children:[(0,a.jsxs)("div",{className:"font-semibold text-text-main",children:[e.faultOwner||"unknown"," \xb7 ",e.errorType||e.status]}),(0,a.jsx)("div",{className:"mt-1 max-w-md truncate text-text-muted",title:e.sample,children:e.sample||e.errorCode||"-"})]}),(0,a.jsx)("td",{className:"py-3 text-text-muted",children:e.model||"-"}),(0,a.jsx)("td",{className:"py-3 text-text-muted",children:e.endpoint||"-"}),(0,a.jsx)("td",{className:"py-3 text-right font-bold text-text-main",children:x(e.requests)})]},`${t}-${e.label}`))})]}),D.errors?.topServerErrors?.length?null:(0,a.jsx)("div",{className:"py-8 text-center text-sm text-text-muted",children:"Kh\xf4ng c\xf3 lỗi gateway/upstream đ\xe1ng ch\xfa \xfd."})]})]}),(0,a.jsxs)(y,{children:[(0,a.jsx)(f,{eyebrow:"Workload",title:"Nguồn tải ch\xednh",description:"API key v\xe0 endpoint đ\xe3 aggregate; kh\xf4ng đưa raw bearer token v\xe0o report.",icon:"account_tree"}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"mb-2 text-xs font-bold uppercase tracking-[0.12em] text-text-muted",children:"Top API keys"}),(0,a.jsx)("div",{className:"space-y-2",children:(D.workload?.apiKeys||[]).slice(0,6).map(e=>(0,a.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border bg-background px-3 py-2.5",children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("div",{className:"truncate text-sm font-semibold text-text-main",children:e.label}),(0,a.jsx)("div",{className:"text-[11px] text-text-muted",children:e.ownerUser||e.fingerprint||"-"})]}),(0,a.jsxs)("div",{className:"text-right",children:[(0,a.jsx)("div",{className:"text-sm font-bold text-text-main",children:m(e.totalTokens)}),(0,a.jsxs)("div",{className:"text-[10px] text-text-muted",children:[h(e.tokenShare)," token"]})]})]},e.key))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"mb-2 text-xs font-bold uppercase tracking-[0.12em] text-text-muted",children:"Top endpoints"}),(0,a.jsx)("div",{className:"space-y-2",children:(D.workload?.endpoints||[]).slice(0,6).map(e=>(0,a.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border bg-background px-3 py-2.5",children:[(0,a.jsx)("div",{className:"min-w-0 truncate text-sm font-semibold text-text-main",children:e.label}),(0,a.jsxs)("div",{className:"text-right text-xs text-text-muted",children:[x(e.requests)," req \xb7 ",h(e.errorRate)," error"]})]},e.key))})]})]})]})]}),(0,a.jsxs)(y,{children:[(0,a.jsx)(f,{eyebrow:"Execution Plan",title:"Kế hoạch h\xe0nh động",description:"Ưu ti\xean theo t\xe1c động vận h\xe0nh; mỗi h\xe0nh động c\xf3 owner gợi \xfd v\xe0 chỉ số x\xe1c nhận sau khi triển khai.",icon:"checklist"}),(0,a.jsx)("div",{className:"overflow-x-auto",children:(0,a.jsxs)("table",{className:"w-full min-w-[900px] text-left text-sm",children:[(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{className:"border-b border-border text-[10px] uppercase tracking-[0.12em] text-text-muted",children:[(0,a.jsx)("th",{className:"pb-3",children:"Priority"}),(0,a.jsx)("th",{className:"pb-3",children:"H\xe0nh động"}),(0,a.jsx)("th",{className:"pb-3",children:"Owner"}),(0,a.jsx)("th",{className:"pb-3",children:"Chỉ số kiểm chứng"})]})}),(0,a.jsx)("tbody",{children:(D.narrative?.actions||[]).map((e,t)=>(0,a.jsxs)("tr",{className:"border-b border-border/60 align-top",children:[(0,a.jsx)("td",{className:"py-4",children:(0,a.jsx)(v,{value:e.priority})}),(0,a.jsx)("td",{className:"py-4 pr-6 font-medium leading-6 text-text-main",children:e.action}),(0,a.jsx)("td",{className:"py-4 pr-6 text-text-muted",children:e.owner||"-"}),(0,a.jsx)("td",{className:"py-4 text-text-muted",children:e.validationMetric||"-"})]},`${t}-${e.action}`))})]})})]}),(0,a.jsxs)(y,{children:[(0,a.jsx)(f,{eyebrow:"Forecast & Methodology",title:"Dự b\xe1o v\xe0 giới hạn b\xe1o c\xe1o",icon:"policy"}),(0,a.jsxs)("div",{className:"grid gap-5 lg:grid-cols-2",children:[(0,a.jsxs)("div",{className:"rounded-2xl border border-border bg-background p-5",children:[(0,a.jsx)("h3",{className:"font-bold text-text-main",children:"Dự b\xe1o ngắn hạn"}),(0,a.jsx)("p",{className:"mt-2 text-sm leading-6 text-text-muted",children:D.narrative?.forecast})]}),(0,a.jsxs)("div",{className:"rounded-2xl border border-border bg-background p-5",children:[(0,a.jsx)("h3",{className:"font-bold text-text-main",children:"Độ tin cậy dữ liệu"}),(0,a.jsx)("ul",{className:"mt-3 space-y-2",children:(D.dataQuality||[]).map(e=>(0,a.jsxs)("li",{className:"flex gap-2 text-sm leading-6 text-text-muted",children:[(0,a.jsx)("span",{className:"material-symbols-outlined mt-1 text-[16px] text-primary",children:"info"}),(0,a.jsx)("span",{children:e})]},e))})]})]}),D.aiWarning?(0,a.jsxs)("div",{className:"mt-4 rounded-xl border border-amber-500/20 bg-amber-500/10 p-3 text-xs text-amber-700 dark:text-amber-300",children:["AI narrative fallback được sử dụng v\xec: ",D.aiWarning]}):null,(0,a.jsxs)("div",{className:"mt-4 text-[11px] text-text-muted",children:["Report ID: ",D.id," \xb7 Analytics ",D.analyticsVersion," \xb7 Compute ",x(D.computeMs)," ms \xb7 Requested by ",D.requestedBy||"Admin"]})]})]}):(0,a.jsxs)(y,{className:"flex min-h-[340px] flex-col items-center justify-center text-center",children:[(0,a.jsx)("span",{className:"material-symbols-outlined rounded-3xl bg-primary/10 p-5 text-5xl text-primary",children:"analytics"}),(0,a.jsx)("h2",{className:"mt-5 text-2xl font-black text-text-main",children:"Chưa c\xf3 Local AI Report"}),(0,a.jsx)("p",{className:"mt-2 max-w-xl text-sm leading-6 text-text-muted",children:"Chọn AI model v\xe0 tạo b\xe1o c\xe1o. Hệ thống chỉ lấy traffic từ Provider Node c\xf3 runtime vLLM; dữ liệu cloud kh\xf4ng được trộn v\xe0o KPI local."})]})]}):null}},34701:(e,t,r)=>{"use strict";var a=r(82114);function s(){}function l(){}l.resetWarningCache=s,e.exports=function(){function e(e,t,r,s,l,n){if(n!==a){var i=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw i.name="Invariant Violation",i}}function t(){return e}e.isRequired=e;var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:l,resetWarningCache:s};return r.PropTypes=r,r}},82114:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},84175:(e,t,r)=>{Promise.resolve().then(r.bind(r,30238))},94027:(e,t,r)=>{"use strict";r.d(t,{Y:()=>o,s:()=>d});var a=r(95155),s=r(12115),l=r(14051),n=r.n(l);let i=(0,s.createContext)(null);function o({children:e}){let[t,r]=(0,s.useState)(null),[l,n]=(0,s.useState)(!0),[d,c]=(0,s.useState)(""),x=(0,s.useCallback)(async()=>{n(!0),c("");try{let e=await fetch("/api/auth/status",{cache:"no-store"}),t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t?.error||"Kh\xf4ng tải được trạng th\xe1i đăng nhập");return r(t||{}),t||{}}catch(e){return c(e?.message||"Kh\xf4ng tải được trạng th\xe1i đăng nhập"),r({}),{}}finally{n(!1)}},[]);(0,s.useEffect)(()=>{let e=!1;return(async()=>{n(!0),c("");try{let t=await fetch("/api/auth/status",{cache:"no-store"}),a=await t.json().catch(()=>({}));if(e)return;if(!t.ok)throw Error(a?.error||"Kh\xf4ng tải được trạng th\xe1i đăng nhập");r(a||{})}catch(t){e||(c(t?.message||"Kh\xf4ng tải được trạng th\xe1i đăng nhập"),r({}))}finally{e||n(!1)}})(),()=>{e=!0}},[]);let m=(0,s.useMemo)(()=>{let e,r,a,s,l,n,i;return r=(e=t&&"object"==typeof t?t:{}).displayName||e.oidcName||e.oidcEmail||e.userId||"",s=(a=!0===e.actualIsAdmin||!0===e.isAdmin&&!0!==e.showAsUser)&&!0===e.showAsUser,l=!0===e.isAdmin&&!s,n=!0===e.isMonitorAdmin,i=!0===e.isAiGatewaysMonitor,{status:e,displayName:r,userId:e.userId||"",loginMethod:e.loginMethod||"",role:e.role||"guest",actualRole:e.actualRole||e.role||"guest",isAdmin:l,actualIsAdmin:a,showAsUser:s,canToggleUserMode:!0===e.canToggleUserMode||a,isMonitorAdmin:n,isAiGatewaysMonitor:i,canManageApiKeys:!0===e.canManageApiKeys||l||n,canUseMonitorAdminTabs:!0===e.canUseMonitorAdminTabs||l||n,canViewAllAnalytics:!0===e.canViewAllAnalytics||l||n||i,canUseAuditProxy:!0===e.canUseAuditProxy||l}},[t]),h=(0,s.useMemo)(()=>({...m,loading:l,error:d,reload:x}),[m,l,d,x]);return(0,a.jsx)(i.Provider,{value:h,children:e})}function d(){let e=(0,s.useContext)(i);return e||{status:{},displayName:"",userId:"",loginMethod:"",role:"admin",actualRole:"admin",isAdmin:!0,actualIsAdmin:!0,showAsUser:!1,canToggleUserMode:!0,isMonitorAdmin:!1,isAiGatewaysMonitor:!1,canManageApiKeys:!0,canUseMonitorAdminTabs:!0,canViewAllAnalytics:!0,loading:!1,error:"",reload:async()=>({})}}o.propTypes={children:n().node}}},e=>{e.O(0,[8441,3794,7358],()=>e(e.s=84175)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
package/app/.next-cli-build/static/chunks/app/api/auth/oidc/callback/route-341e13c0c7617e2b.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
package/app/.next-cli-build/static/chunks/app/api/cli-model-profiles/route-341e13c0c7617e2b.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
package/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-341e13c0c7617e2b.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
package/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-341e13c0c7617e2b.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
package/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-341e13c0c7617e2b.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
package/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-341e13c0c7617e2b.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
package/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-341e13c0c7617e2b.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
package/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-341e13c0c7617e2b.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
package/app/.next-cli-build/static/chunks/app/api/cli-tools/qwen-settings/route-341e13c0c7617e2b.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174,204,219,312,335,342,387,451,501,516,543,552,654,675,684,747,748,754,767,874,887,907,920,931,948,992,997,1077,1088,1091,1110,1118,1173,1200,1243,1288,1320,1337,1382,1451,1512,1566,1666,1674,1697,1860,1907,1910,1946,1949,2121,2198,2222,2284,2296,2420,2525,2536,2627,2737,2752,2772,2785,2792,2797,2919,2922,3025,3038,3079,3113,3161,3195,3348,3352,3397,3472,3507,3510,3549,3562,3568,3577,3685,3883,3888,4010,4061,4078,4118,4245,4286,4422,4444,4486,4544,4612,4656,4674,4745,4761,4871,4896,4993,5018,5032,5091,5094,5107,5177,5211,5226,5338,5418,5466,5606,5637,5685,5703,5745,5922,5998,6091,6107,6121,6268,6319,6479,6529,6547,6580,6594,6601,6642,6691,6740,6743,6819,6919,6988,7131,7158,7180,7241,7249,7311,7429,7445,7473,7508,7520,7545,7656,7758,7772,7824,7851,7960,7988,8026,8095,8167,8207,8246,8273,8351,8433,8453,8489,8573,8648,8736,8791,8814,8870,8948,8970,8974,8975,9027,9035,9069,9088,9141,9199,9226,9230,9321,9362,9395,9461,9547,9619,9678,9709,9951],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|