9router 0.4.26 → 0.4.28
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/BUILD_ID +1 -1
- package/app/.next/app-path-routes-manifest.json +5 -4
- package/app/.next/build-manifest.json +2 -2
- package/app/.next/required-server-files.json +4 -1
- package/app/.next/routes-manifest.json +6 -0
- package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +4 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/quota/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/skills/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error/page.js +2 -2
- package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +1 -1
- package/app/.next/server/app/_global-error.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page.js +2 -2
- package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_not-found.html +1 -1
- package/app/.next/server/app/_not-found.rsc +4 -4
- package/app/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/api/auth/login/route.js +1 -1
- package/app/.next/server/app/api/auth/login/route.js.nft.json +1 -1
- package/app/.next/server/app/api/auth/logout/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/all-statuses/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/copilot-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/cowork-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/droid-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/hermes-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/opencode-settings/route.js +1 -1
- package/app/.next/server/app/api/cloud/auth/route.js +1 -1
- package/app/.next/server/app/api/cloud/auth/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cloud/credentials/update/route.js +1 -1
- package/app/.next/server/app/api/cloud/credentials/update/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cloud/model/resolve/route.js +1 -1
- package/app/.next/server/app/api/cloud/model/resolve/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cloud/models/alias/route.js +1 -1
- package/app/.next/server/app/api/cloud/models/alias/route.js.nft.json +1 -1
- package/app/.next/server/app/api/combos/[id]/route.js +1 -1
- package/app/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/combos/route.js +1 -1
- package/app/.next/server/app/api/combos/route.js.nft.json +1 -1
- package/app/.next/server/app/api/health/route.js +1 -1
- package/app/.next/server/app/api/init/route.js +1 -1
- package/app/.next/server/app/api/init/route.js.nft.json +1 -1
- package/app/.next/server/app/api/keys/[id]/route.js +1 -1
- package/app/.next/server/app/api/keys/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/keys/route.js +1 -1
- package/app/.next/server/app/api/keys/route.js.nft.json +1 -1
- package/app/.next/server/app/api/locale/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
- package/app/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
- package/app/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
- package/app/.next/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
- package/app/.next/server/app/api/media-providers/tts/voices/route.js +1 -1
- package/app/.next/server/app/api/models/alias/route.js +1 -1
- package/app/.next/server/app/api/models/alias/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/availability/route.js +1 -1
- package/app/.next/server/app/api/models/availability/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/custom/route.js +1 -1
- package/app/.next/server/app/api/models/custom/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/disabled/route.js +1 -1
- package/app/.next/server/app/api/models/disabled/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/route.js +1 -1
- package/app/.next/server/app/api/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/test/route.js +1 -1
- package/app/.next/server/app/api/models/test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +2 -2
- package/app/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
- package/app/.next/server/app/api/oauth/cursor/import/route.js +1 -1
- package/app/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
- package/app/.next/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
- package/app/.next/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/kiro/auto-import/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/import/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
- package/app/.next/server/app/api/pricing/route.js +1 -1
- package/app/.next/server/app/api/pricing/route.js.nft.json +1 -1
- package/app/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
- package/app/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/provider-nodes/route.js +1 -1
- package/app/.next/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/app/.next/server/app/api/provider-nodes/validate/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/models/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/client/route.js +1 -1
- package/app/.next/server/app/api/providers/client/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
- package/app/.next/server/app/api/providers/route.js +1 -1
- package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/suggested-models/route.js +1 -1
- package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
- package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/validate/route.js +1 -1
- package/app/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/app/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
- package/app/.next/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
- package/app/.next/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/proxy-pools/route.js +1 -1
- package/app/.next/server/app/api/proxy-pools/route.js.nft.json +1 -1
- package/app/.next/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
- package/app/.next/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/database/route.js +1 -1
- package/app/.next/server/app/api/settings/database/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/proxy-test/route.js +1 -1
- package/app/.next/server/app/api/settings/require-login/route.js +1 -1
- package/app/.next/server/app/api/settings/require-login/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/route.js +1 -1
- package/app/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/shutdown/route.js +1 -1
- package/app/.next/server/app/api/tags/route.js +1 -1
- package/app/.next/server/app/api/translator/console-logs/route.js +1 -1
- package/app/.next/server/app/api/translator/console-logs/stream/route.js +2 -2
- package/app/.next/server/app/api/translator/load/route.js +1 -1
- package/app/.next/server/app/api/translator/save/route.js +1 -1
- package/app/.next/server/app/api/translator/send/route.js +1 -1
- package/app/.next/server/app/api/translator/send/route.js.nft.json +1 -1
- package/app/.next/server/app/api/translator/translate/route.js +1 -1
- package/app/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/disable/route.js +1 -1
- package/app/.next/server/app/api/tunnel/disable/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/enable/route.js +1 -1
- package/app/.next/server/app/api/tunnel/enable/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/status/route.js +1 -1
- package/app/.next/server/app/api/tunnel/status/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-check/route.js +2 -2
- package/app/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-install/route.js +2 -2
- package/app/.next/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnel/tailscale-login/route.js +2 -2
- package/app/.next/server/app/api/tunnel/tailscale-start-daemon/route.js +2 -2
- package/app/.next/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
- package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/chart/route.js +1 -1
- package/app/.next/server/app/api/usage/chart/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/history/route.js +1 -1
- package/app/.next/server/app/api/usage/history/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/providers/route.js +1 -1
- package/app/.next/server/app/api/usage/providers/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/request-details/route.js +1 -1
- package/app/.next/server/app/api/usage/request-details/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/request-logs/route.js +1 -1
- package/app/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/stats/route.js +1 -1
- package/app/.next/server/app/api/usage/stats/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/stream/route.js +2 -2
- package/app/.next/server/app/api/usage/stream/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/api/chat/route.js +1 -1
- package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/audio/speech/route.js +1 -1
- package/app/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
- package/app/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/audio/voices/route.js +1 -1
- package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
- package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
- package/app/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/images/generations/route.js +2 -2
- package/app/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
- package/app/.next/server/app/api/v1/messages/route.js +1 -1
- package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/models/[kind]/route.js +1 -1
- package/app/.next/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/models/info/route.js +1 -1
- package/app/.next/server/app/api/v1/models/route.js +1 -1
- package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/responses/compact/route.js +1 -1
- package/app/.next/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/responses/route.js +1 -1
- package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/route.js +1 -1
- package/app/.next/server/app/api/v1/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/search/route.js +1 -1
- package/app/.next/server/app/api/v1/search/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/web/fetch/route.js +1 -1
- package/app/.next/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
- package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1beta/models/route.js +1 -1
- package/app/.next/server/app/api/version/route.js +1 -1
- package/app/.next/server/app/api/version/shutdown/route.js +1 -0
- package/app/.next/server/app/api/version/shutdown/route.js.nft.json +1 -0
- package/app/.next/server/app/api/version/shutdown/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/version/update/route.js +1 -1
- package/app/.next/server/app/callback/page.js +2 -2
- package/app/.next/server/app/callback/page.js.nft.json +1 -1
- package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/callback.html +1 -1
- package/app/.next/server/app/callback.rsc +4 -4
- package/app/.next/server/app/callback.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/callback.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.html +1 -1
- package/app/.next/server/app/dashboard/basic-chat.rsc +6 -6
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next/server/app/dashboard/cli-tools.rsc +6 -6
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.html +1 -1
- package/app/.next/server/app/dashboard/combos.rsc +6 -6
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.html +1 -1
- package/app/.next/server/app/dashboard/endpoint.rsc +6 -6
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/media-providers/web.html +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.rsc +6 -6
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/mitm.html +1 -1
- package/app/.next/server/app/dashboard/mitm.rsc +6 -6
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.html +1 -1
- package/app/.next/server/app/dashboard/profile.rsc +6 -6
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.html +1 -1
- package/app/.next/server/app/dashboard/providers/new.rsc +6 -6
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.html +1 -1
- package/app/.next/server/app/dashboard/providers.rsc +6 -6
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.rsc +6 -6
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/quota.html +2 -2
- package/app/.next/server/app/dashboard/quota.rsc +7 -7
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/quota.segments/_full.segment.rsc +7 -7
- package/app/.next/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/quota.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/settings/pricing/page.js +2 -2
- package/app/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
- package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.rsc +4 -4
- package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/skills.html +1 -1
- package/app/.next/server/app/dashboard/skills.rsc +6 -6
- package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/skills.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/skills.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/translator.html +1 -1
- package/app/.next/server/app/dashboard/translator.rsc +6 -6
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.html +1 -1
- package/app/.next/server/app/dashboard/usage.rsc +6 -6
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard.html +1 -1
- package/app/.next/server/app/dashboard.rsc +6 -6
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/favicon.ico/route.js +1 -1
- package/app/.next/server/app/index.html +1 -1
- package/app/.next/server/app/index.rsc +4 -4
- package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/index.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/landing/page.js +2 -2
- package/app/.next/server/app/landing/page.js.nft.json +1 -1
- package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing.html +1 -1
- package/app/.next/server/app/landing.rsc +5 -5
- package/app/.next/server/app/landing.segments/_full.segment.rsc +5 -5
- package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/landing.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
- package/app/.next/server/app/login/page.js +2 -2
- package/app/.next/server/app/login/page.js.nft.json +1 -1
- package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/login.html +1 -1
- package/app/.next/server/app/login.rsc +5 -5
- package/app/.next/server/app/login.segments/_full.segment.rsc +5 -5
- package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/login.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/app/.next/server/app/manifest.webmanifest/route.js +2 -2
- package/app/.next/server/app/page.js +2 -2
- package/app/.next/server/app/page.js.nft.json +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app-paths-manifest.json +5 -4
- package/app/.next/server/chunks/1444.js +9 -0
- package/app/.next/server/chunks/1574.js +2 -2
- package/app/.next/server/chunks/2049.js +1 -1
- package/app/.next/server/chunks/3774.js +3 -3
- package/app/.next/server/chunks/450.js +1 -1
- package/app/.next/server/chunks/4892.js +2 -2
- package/app/.next/server/chunks/499.js +9 -0
- package/app/.next/server/chunks/6263.js +1 -1
- package/app/.next/server/chunks/6283.js +1 -1
- package/app/.next/server/chunks/6502.js +2 -2
- package/app/.next/server/chunks/6890.js +1 -1
- package/app/.next/server/chunks/7061.js +2 -2
- package/app/.next/server/chunks/7292.js +9 -0
- package/app/.next/server/chunks/7810.js +1 -1
- package/app/.next/server/chunks/8035.js +1 -1
- package/app/.next/server/chunks/8367.js +2 -2
- package/app/.next/server/chunks/8495.js +9 -0
- package/app/.next/server/middleware-build-manifest.js +1 -1
- package/app/.next/server/middleware.js +3 -3
- package/app/.next/server/pages/404.html +1 -1
- package/app/.next/server/pages/500.html +1 -1
- package/app/.next/static/chunks/{1939-5f1c000b260c0698.js → 1939-d9b80a9e484ae21d.js} +1 -1
- package/app/.next/static/chunks/{4156-773921135dfe2c75.js → 4156-3a7b60c65001de9a.js} +3 -3
- package/app/.next/static/chunks/505-34993b83fbc3f56a.js +1 -0
- package/app/.next/static/chunks/8035-b43a2fdebf8069b1.js +3 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/{page-7890b74e481f9d92.js → page-29ce6662637d64e4.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-597b5dde6cf827f1.js +3 -0
- package/app/.next/static/chunks/app/_global-error/page-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/auth/login/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/auth/logout/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/all-statuses/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/auth/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/credentials/update/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/model/resolve/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/models/alias/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/combos/[id]/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/combos/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/health/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/init/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/keys/[id]/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/keys/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/locale/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/models/alias/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/models/availability/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/models/custom/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/models/disabled/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/models/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/models/test/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/pricing/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/providers/client/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/providers/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/providers/suggested-models/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/providers/test-batch/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/providers/validate/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/settings/database/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/settings/proxy-test/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/settings/require-login/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/settings/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/shutdown/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/tags/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/translator/console-logs/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/translator/load/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/translator/save/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/translator/send/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/translator/translate/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/disable/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/enable/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/status/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-login/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/tunnel/tailscale-start-daemon/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/usage/chart/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/usage/history/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/usage/providers/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/usage/request-details/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/usage/request-logs/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/usage/stats/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/usage/stream/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/v1/api/chat/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/voices/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/v1/embeddings/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/v1/images/generations/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/v1/messages/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/[kind]/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/info/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/v1/responses/compact/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/v1/responses/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/v1/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/v1/search/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/v1/web/fetch/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/v1beta/models/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/version/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/version/shutdown/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/api/version/update/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/landing/{page-34e119eac6b7e1a4.js → page-0084367666bd9046.js} +1 -1
- package/app/.next/static/chunks/app/manifest.webmanifest/route-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/app/page-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-5ea305bd1a1dc348.js +1 -0
- package/app/.next/static/css/8c050f20c62e3425.css +1 -0
- package/app/.next/static/zRbzYKfSwZoKLIJvdVXO-/_buildManifest.js +1 -0
- package/app/node_modules/sql.js/dist/sql-wasm.js +185 -0
- package/app/node_modules/sql.js/package.json +58 -0
- package/app/package.json +2 -2
- package/app/server.js +1 -1
- package/app/src/lib/db/adapters/bunSqliteAdapter.js +63 -0
- package/app/src/lib/db/adapters/nodeSqliteAdapter.js +84 -0
- package/app/src/lib/db/adapters/sqljsAdapter.js +4 -3
- package/app/src/lib/updater/updater.js +25 -0
- package/app/src/mitm/server.js +1 -1
- package/cli.js +15 -13
- package/hooks/sqliteRuntime.js +14 -27
- package/package.json +1 -1
- package/app/.next/static/chunks/505-47d92a147b3d6af5.js +0 -1
- package/app/.next/static/chunks/8035-c87b74c7e1a7cf78.js +0 -3
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-b150970e241c5c7b.js +0 -1
- package/app/.next/static/chunks/app/_global-error/page-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/auth/login/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/auth/logout/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/all-statuses/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/auth/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/credentials/update/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/model/resolve/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/models/alias/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/combos/[id]/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/combos/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/health/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/init/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/keys/[id]/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/keys/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/locale/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/models/alias/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/models/availability/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/models/custom/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/models/disabled/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/models/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/models/test/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/pricing/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/providers/client/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/providers/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/providers/suggested-models/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/providers/test-batch/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/providers/validate/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/settings/database/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/settings/proxy-test/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/settings/require-login/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/settings/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/shutdown/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/tags/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/translator/console-logs/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/translator/load/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/translator/save/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/translator/send/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/translator/translate/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/disable/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/enable/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/status/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-login/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/tunnel/tailscale-start-daemon/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/usage/chart/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/usage/history/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/usage/providers/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/usage/request-details/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/usage/request-logs/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/usage/stats/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/usage/stream/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/v1/api/chat/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/voices/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/v1/embeddings/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/v1/images/generations/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/[kind]/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/info/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/v1/responses/compact/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/v1/responses/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/v1/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/v1/search/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/v1/web/fetch/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/version/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/api/version/update/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/manifest.webmanifest/route-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/app/page-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-20fa0affdf8859be.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-20fa0affdf8859be.js +0 -1
- package/app/.next/static/css/5d8cd780e73c8876.css +0 -1
- package/app/.next/static/gkZl0mznmfSjxMQgK_CRr/_buildManifest.js +0 -1
- /package/app/.next/static/{gkZl0mznmfSjxMQgK_CRr → zRbzYKfSwZoKLIJvdVXO-}/_ssgManifest.js +0 -0
|
@@ -20,4 +20,4 @@ model = "${w}"
|
|
|
20
20
|
provider: "custom"
|
|
21
21
|
base_url: "${U()}"
|
|
22
22
|
`},{filename:"~/.hermes/.env",content:`OPENAI_API_KEY=${t}
|
|
23
|
-
`}])})]})}var w=c(93617);function x({toolId:a,tool:b,isExpanded:c,onToggle:h,baseUrl:i,apiKeys:j,activeProviders:k=[],cloudEnabled:l=!1,tunnelEnabled:m=!1}){let[n,o]=(0,e.useState)(null),[p,q]=(0,e.useState)(!1),[r,s]=(0,e.useState)(""),[t,u]=(0,e.useState)(()=>j?.length>0?j[0].key:""),v=a=>{let b=t&&t.trim()?t:l?"your-api-key":"sk_9router",c=i||"http://127.0.0.1:20128",d=c.endsWith("/v1")?c:`${c}/v1`;return a.replace(/\{\{baseUrl\}\}/g,d).replace(/\{\{apiKey\}\}/g,b).replace(/\{\{model\}\}/g,r||"provider/model-id")},{copy:y}=(0,w.C)(),z=async(a,b)=>{await y(v(a),`toolcard-${b}`),o(b),setTimeout(()=>o(null),2e3)},A=k.length>0,B=()=>(!b.requiresExternalUrl||!!l||!!m)&&(!b.requiresCloud||!!l);return(0,d.jsxs)(f.Zp,{padding:"xs",className:"overflow-hidden overflow-x-hidden",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between hover:cursor-pointer",onClick:h,children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 rounded-lg flex items-center justify-center shrink-0",children:b.image?(0,d.jsx)(g.default,{src:b.image,alt:b.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}}):b.icon?(0,d.jsx)("span",{className:"material-symbols-outlined text-xl",style:{color:b.color},children:b.icon}):(0,d.jsx)(g.default,{src:`/providers/${a}.png`,alt:b.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:b.name}),(0,d.jsx)("p",{className:"text-xs text-text-muted truncate",children:b.description})]})]}),(0,d.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${c?"rotate-180":""}`,children:"expand_more"})]}),c&&(0,d.jsx)("div",{className:"mt-6 pt-6 border-t border-border",children:b.guideSteps?(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[b.notes&&0!==b.notes.length?(0,d.jsx)("div",{className:"flex flex-col gap-2 mb-4",children:b.notes.map((a,b)=>{if("cloudCheck"===a.type&&(l||m))return null;let c="warning"===a.type,e="cloudCheck"===a.type&&!l&&!m,f="bg-blue-500/10 border-blue-500/30",g="text-blue-600 dark:text-blue-400",h="text-blue-500",i="info";return c?(f="bg-yellow-500/10 border-yellow-500/30",g="text-yellow-600 dark:text-yellow-400",h="text-yellow-500",i="warning"):e&&(f="bg-red-500/10 border-red-500/30",g="text-red-600 dark:text-red-400",h="text-red-500",i="error"),(0,d.jsxs)("div",{className:`flex items-start gap-3 p-3 rounded-lg border ${f}`,children:[(0,d.jsx)("span",{className:`material-symbols-outlined text-lg ${h}`,children:i}),(0,d.jsx)("p",{className:`text-sm ${g}`,children:a.text})]},b)})}):null,B()&&b.guideSteps.map(a=>(0,d.jsxs)("div",{className:"flex items-start gap-4",children:[(0,d.jsx)("div",{className:"size-8 rounded-full flex items-center justify-center shrink-0 text-sm font-semibold text-white",style:{backgroundColor:b.color},children:a.step}),(0,d.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,d.jsx)("p",{className:"font-medium text-text",children:a.title}),a.desc&&(0,d.jsx)("p",{className:"text-sm text-text-muted mt-0.5",children:a.desc}),"apiKeySelector"===a.type&&(0,d.jsx)("div",{className:"mt-2 flex flex-col sm:flex-row sm:items-center gap-2",children:j&&j.length>0?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("select",{value:t,onChange:a=>u(a.target.value),className:"w-full sm:w-auto flex-1 px-3 py-2 bg-bg-secondary rounded-lg text-sm border border-border focus:outline-none focus:ring-1 focus:ring-primary/50",children:j.map(a=>(0,d.jsx)("option",{value:a.key,children:a.key},a.id))}),(0,d.jsx)("button",{onClick:()=>z(t,"apiKey"),className:"shrink-0 px-3 py-2 bg-bg-secondary hover:bg-bg-tertiary rounded-lg border border-border transition-colors",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-lg",children:"apiKey"===n?"check":"content_copy"})})]}):(0,d.jsx)("span",{className:"text-sm text-text-muted",children:l?"No API keys - Create one in Keys page":"sk_9router"})}),"modelSelector"===a.type&&(0,d.jsxs)("div",{className:"mt-2 flex flex-col sm:flex-row sm:items-center gap-2",children:[(0,d.jsx)("input",{type:"text",value:r,onChange:a=>s(a.target.value),placeholder:"provider/model-id",className:"w-full sm:w-auto flex-1 px-3 py-2 bg-bg-secondary rounded-lg text-sm border border-border focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,d.jsx)("button",{onClick:()=>q(!0),disabled:!A,className:`shrink-0 px-3 py-2 rounded-lg border text-sm transition-colors ${A?"bg-bg-secondary border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select Model"}),r&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("button",{onClick:()=>z(r,"model"),className:"shrink-0 px-3 py-2 bg-bg-secondary hover:bg-bg-tertiary rounded-lg border border-border transition-colors",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-lg",children:"model"===n?"check":"content_copy"})}),(0,d.jsx)("button",{onClick:()=>s(""),className:"p-2 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-lg",children:"close"})})]})]}),a.value&&(0,d.jsxs)("div",{className:"mt-2 flex flex-col sm:flex-row sm:items-center gap-2",children:[(0,d.jsx)("code",{className:"w-full sm:w-auto flex-1 px-3 py-2 bg-bg-secondary rounded-lg text-sm font-mono border border-border truncate",children:v(a.value)}),a.copyable&&(0,d.jsx)("button",{onClick:()=>z(a.value,`${a.step}-${a.title}`),className:"shrink-0 px-3 py-2 bg-bg-secondary hover:bg-bg-tertiary rounded-lg border border-border transition-colors",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-lg",children:n===`${a.step}-${a.title}`?"check":"content_copy"})})]})]})]},a.step)),B()&&b.codeBlock&&(0,d.jsxs)("div",{className:"mt-2",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,d.jsx)("span",{className:"text-xs text-text-muted uppercase tracking-wide",children:b.codeBlock.language}),(0,d.jsxs)("button",{onClick:()=>z(b.codeBlock.code,"codeblock"),className:"flex items-center gap-1 px-2 py-1 text-xs bg-bg-secondary hover:bg-bg-tertiary rounded border border-border transition-colors",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-sm",children:"codeblock"===n?"check":"content_copy"}),"codeblock"===n?"Copied!":"Copy"]})]}),(0,d.jsx)("pre",{className:"p-4 bg-bg-secondary rounded-lg border border-border overflow-x-auto",children:(0,d.jsx)("code",{className:"text-sm font-mono whitespace-pre",children:v(b.codeBlock.code)})})]})]}):(0,d.jsx)("p",{className:"text-text-muted text-sm",children:"Coming soon..."})}),(0,d.jsx)(f.rq,{isOpen:p,onClose:()=>q(!1),onSelect:a=>{s(a.value)},selectedModel:r,activeProviders:k,title:"Select Model"})]})}function y({tool:a,isExpanded:b,onToggle:c,baseUrl:h,apiKeys:i,activeProviders:j,cloudEnabled:k,initialStatus:m,tunnelEnabled:o,tunnelPublicUrl:p,tailscaleEnabled:q,tailscaleUrl:r}){let s,t,u,v,w,[x,z]=(0,e.useState)(m||null),[A,B]=(0,e.useState)(!1),[C,D]=(0,e.useState)(!1),[E,F]=(0,e.useState)(!1),[G,H]=(0,e.useState)(null),[I,J]=(0,e.useState)(!1),[K,L]=(0,e.useState)(""),[M,N]=(0,e.useState)(""),[O,P]=(0,e.useState)(""),[Q,R]=(0,e.useState)(!1),[S,T]=(0,e.useState)(!1),[U,V]=(0,e.useState)({}),[W,X]=(0,e.useState)(!1),[Y,Z]=(0,e.useState)(""),[$,_]=(0,e.useState)([]),[aa,ab]=(0,e.useState)(""),ac=x?.installed?x.config&&x.has9Router?n(x.config?.provider?.["9router"]?.options?.baseURL||"",{tunnelPublicUrl:p,tailscaleUrl:r})?"configured":"other":"not_configured":null,ad=()=>{let a=Y||h;return a.endsWith("/v1")?a:`${a}/v1`},ae=K&&!i.some(a=>a.key===K),af=async()=>{B(!0);try{let a=await fetch("/api/cli-tools/opencode-settings"),b=await a.json();z(b)}catch(a){z({installed:!1,error:a.message})}finally{B(!1)}},ag=async()=>{D(!0),H(null);try{let a=K&&K.trim()||k?K:"sk_9router",b=await fetch("/api/cli-tools/opencode-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:ad(),apiKey:a,models:$,activeModel:""===aa?"":aa||$[0],subagentModel:O})}),c=await b.json();b.ok?(H({type:"success",text:"Settings applied successfully!"}),af()):H({type:"error",text:c.error||"Failed to apply settings"})}catch(a){H({type:"error",text:a.message})}finally{D(!1)}},ah=async()=>{F(!0),H(null);try{let a=await fetch("/api/cli-tools/opencode-settings",{method:"DELETE"}),b=await a.json();a.ok?(H({type:"success",text:"Settings reset successfully!"}),N(""),P(""),_([]),ab(""),af()):H({type:"error",text:b.error||"Failed to reset settings"})}catch(a){H({type:"error",text:a.message})}finally{F(!1)}};return(0,d.jsxs)(f.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3 hover:cursor-pointer sm:items-center",onClick:c,children:[(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(g.default,{src:"/providers/opencode.png",alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),"configured"===ac&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-green-500/10 text-green-600 dark:text-green-400 rounded-full",children:"Connected"}),"not_configured"===ac&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 rounded-full",children:"Not configured"}),"other"===ac&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-blue-500/10 text-blue-600 dark:text-blue-400 rounded-full",children:"Other"})]}),(0,d.jsx)("p",{className:"text-xs text-text-muted truncate",children:a.description})]})]}),(0,d.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${b?"rotate-180":""}`,children:"expand_more"})]}),b&&(0,d.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[A&&(0,d.jsxs)("div",{className:"flex items-center gap-2 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),(0,d.jsx)("span",{children:"Checking OpenCode CLI..."})]}),!A&&x&&!x.installed&&(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-yellow-500",children:"warning"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:"OpenCode CLI not detected locally"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Manual configuration is still available if 9router is deployed on a remote server."})]})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2 pl-9",children:[(0,d.jsxs)(f.$n,{variant:"secondary",size:"sm",onClick:()=>X(!0),className:"!bg-yellow-500/20 !border-yellow-500/40 !text-yellow-700 dark:!text-yellow-300 hover:!bg-yellow-500/30",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px] mr-1",children:"content_copy"}),"Manual Config"]}),(0,d.jsxs)(f.$n,{variant:"outline",size:"sm",onClick:()=>J(!I),children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px] mr-1",children:I?"expand_less":"help"}),I?"Hide":"How to Install"]})]})]}),I&&(0,d.jsxs)("div",{className:"p-4 bg-surface border border-border rounded-lg",children:[(0,d.jsx)("h4",{className:"font-medium mb-3",children:"Installation Guide"}),(0,d.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-text-muted mb-1",children:"macOS / Linux:"}),(0,d.jsx)("code",{className:"block px-3 py-2 bg-black/5 dark:bg-white/5 rounded font-mono text-xs",children:"npm install -g opencode-ai"})]}),(0,d.jsxs)("p",{className:"text-text-muted",children:["After installation, run ",(0,d.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"opencode"})," to verify."]})]})]})]}),!A&&x?.installed&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"Select Endpoint"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),(0,d.jsx)(l,{value:Y||Y||`${h}/v1`,onChange:Z,requiresExternalUrl:a.requiresExternalUrl,tunnelEnabled:o,tunnelPublicUrl:p,tailscaleEnabled:q,tailscaleUrl:r})]}),x?.config?.provider?.["9router"]?.options?.baseURL&&(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"Current"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),(0,d.jsx)("span",{className:"min-w-0 truncate rounded bg-surface/40 px-2 py-2 text-xs text-text-muted sm:py-1.5",children:x.config.provider["9router"].options.baseURL})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"API Key"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),i.length>0||K?(0,d.jsxs)("select",{value:K,onChange:a=>L(a.target.value),className:"w-full min-w-0 px-2 py-2 bg-surface rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50 sm:py-1.5",children:[ae&&(0,d.jsx)("option",{value:K,children:K}),i.map(a=>(0,d.jsx)("option",{value:a.key,children:a.key},a.id))]}):(0,d.jsx)("span",{className:"min-w-0 rounded bg-surface/40 px-2 py-2 text-xs text-text-muted sm:py-1.5",children:k?"No API keys - Create one in Keys page":"sk_9router (default)"})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr] sm:items-start sm:gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right pt-1",children:"Models"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px] mt-1.5",children:"arrow_forward"}),(0,d.jsxs)("div",{className:"flex-1 flex flex-col gap-2",children:[(0,d.jsx)("div",{className:"flex flex-wrap gap-1.5 min-h-[28px] px-2 py-1.5 bg-surface rounded border border-border",children:0===$.length?(0,d.jsx)("span",{className:"text-xs text-text-muted",children:"No models selected"}):$.map(a=>(0,d.jsxs)("span",{onClick:async()=>{if(a===aa)try{(await fetch("/api/cli-tools/opencode-settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({clearActiveModel:!0})})).ok&&(ab(""),af())}catch(a){console.log("Error clearing active model:",a)}else ab(a)},className:`inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs cursor-pointer transition-colors ${a===aa?"bg-primary/10 text-primary border border-primary":"bg-black/5 dark:bg-white/5 text-text-muted border border-transparent hover:border-border"}`,title:a===aa?"Click to clear active model":"Click to set as active",children:[a===aa&&(0,d.jsx)("span",{className:"material-symbols-outlined text-[10px]",children:"star"}),a,(0,d.jsx)("button",{onClick:async b=>{b.stopPropagation();try{if((await fetch(`/api/cli-tools/opencode-settings?model=${encodeURIComponent(a)}`,{method:"DELETE"})).ok){let b=$.filter(b=>b!==a);_(b),aa===a&&ab(""),af()}}catch(a){console.log("Error removing model:",a)}},className:"ml-0.5 hover:text-red-500",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"close"})})]},a))}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("button",{onClick:()=>R(!0),disabled:!j?.length,className:`px-2 py-1 rounded border text-xs transition-colors ${j?.length?"bg-surface border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Add Model"}),(0,d.jsx)("span",{className:"text-xs text-text-muted",children:$.length>0&&aa?(0,d.jsxs)(d.Fragment,{children:["Active: ",(0,d.jsx)("span",{className:"text-primary",children:aa})]}):$.length>0?(0,d.jsx)("span",{className:"text-yellow-500",children:"Click a model to set/clear active"}):"Select models to add"})]})]})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"Subagent Model"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),(0,d.jsx)("input",{type:"text",value:O,onChange:a=>P(a.target.value),placeholder:M||"provider/model-id (defaults to main model)",className:"w-full min-w-0 px-2 py-2 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50 sm:py-1.5"}),(0,d.jsx)("button",{onClick:()=>T(!0),disabled:!j?.length,className:`w-full sm:w-auto rounded border px-2 py-2 text-xs transition-colors sm:py-1.5 whitespace-nowrap sm:shrink-0 ${j?.length?"bg-surface border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select Model"}),O&&(0,d.jsx)("button",{onClick:()=>P(""),className:"p-1 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear (will use main model)",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]})]}),G&&(0,d.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===G.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"success"===G.type?"check_circle":"error"}),(0,d.jsx)("span",{children:G.text})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-2 sm:flex sm:items-center",children:[(0,d.jsxs)(f.$n,{variant:"primary",size:"sm",onClick:ag,disabled:0===$.length,loading:C,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"save"}),"Apply"]}),(0,d.jsxs)(f.$n,{variant:"outline",size:"sm",onClick:ah,disabled:!x.has9Router,loading:E,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"restore"}),"Reset"]}),(0,d.jsxs)(f.$n,{variant:"ghost",size:"sm",onClick:()=>X(!0),children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"content_copy"}),"Manual Config"]})]})]})]}),(0,d.jsx)(f.rq,{isOpen:Q,onClose:()=>R(!1),onSelect:a=>{!$.includes(a.value)&&(_([...$,a.value]),aa||ab(a.value)),R(!1)},selectedModel:null,activeProviders:j,modelAliases:U,title:"Add Model for OpenCode"}),(0,d.jsx)(f.rq,{isOpen:S,onClose:()=>T(!1),onSelect:a=>{P(a.value),T(!1)},selectedModel:O,activeProviders:j,modelAliases:U,title:"Select Subagent Model for OpenCode"}),(0,d.jsx)(f.uR,{isOpen:W,onClose:()=>X(!1),title:"OpenCode - Manual Configuration",configs:(s=K&&K.trim()?K:k?"<API_KEY_FROM_DASHBOARD>":"sk_9router",t=$.length>0?$:["provider/model-id"],u=aa||$[0]||t[0],v=O||u,w={},t.forEach(a=>{w[a]={name:a}}),[{filename:"~/.config/opencode/opencode.json",content:JSON.stringify({provider:{"9router":{npm:"@ai-sdk/openai-compatible",options:{baseURL:ad(),apiKey:s},models:w}},model:`9router/${u}`,agent:{explorer:{description:"Fast explorer subagent for codebase exploration",mode:"subagent",model:`9router/${v}`}}},null,2)}])})]})}let z="/api/cli-tools/cowork-settings";function A({tool:a,isExpanded:b,onToggle:c,baseUrl:h,apiKeys:i,activeProviders:j,hasActiveProviders:k,cloudEnabled:m,cloudUrl:n,tunnelEnabled:o,tunnelPublicUrl:p,tailscaleEnabled:q,tailscaleUrl:r,initialStatus:s}){let t,u,[v,w]=(0,e.useState)(s||null),[x,y]=(0,e.useState)(!1),[B,C]=(0,e.useState)(!1),[D,E]=(0,e.useState)(!1),[F,G]=(0,e.useState)(null),[H,I]=(0,e.useState)(""),[J,K]=(0,e.useState)([]),[L,M]=(0,e.useState)(!1),[N,O]=(0,e.useState)(""),[P,Q]=(0,e.useState)([]),[R,S]=(0,e.useState)(!1),[T,U]=(0,e.useState)(!1),V=async()=>{y(!0);try{let a=await fetch(z),b=await a.json();w(b)}catch(a){w({installed:!1,error:a.message})}finally{y(!1)}},W=()=>{let a;return(a=(N||"").replace(/\/+$/,""))?/\/v1$/.test(a)?a:`${a}/v1`:""},X=v?.installed?v?.cowork?.baseUrl?v.has9Router?"configured":"other":"not_configured":null,Y=H&&!i.some(a=>a.key===H),Z=async()=>{G(null);let a=W();if(0===J.length)return void G({type:"error",text:"Please select at least one model"});C(!0);try{let b=H?.trim()||(i?.length>0?i[0].key:null)||(m?null:"sk_9router"),c=await fetch(z,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:a,apiKey:b,models:J,plugins:P})}),d=await c.json();c.ok?(G({type:"success",text:"Settings applied. Quit & reopen Claude Desktop to load."}),V()):G({type:"error",text:d.error||"Failed to apply settings"})}catch(a){G({type:"error",text:a.message})}finally{C(!1)}},$=async({name:a,models:b})=>{try{let c=await fetch("/api/combos",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:a,models:b})});if(!c.ok){let a=await c.json();G({type:"error",text:a.error||"Failed to create combo"});return}J.includes(a)||K([...J,a]),S(!1),G({type:"success",text:`Combo "${a}" created and added.`})}catch(a){G({type:"error",text:a.message})}},_=async()=>{E(!0),G(null);try{let a=await fetch(z,{method:"DELETE"}),b=await a.json();a.ok?(G({type:"success",text:"Settings reset successfully"}),K([]),Q(v?.defaultPlugins||[]),V()):G({type:"error",text:b.error||"Failed to reset"})}catch(a){G({type:"error",text:a.message})}finally{E(!1)}};return(0,d.jsxs)(f.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3 hover:cursor-pointer sm:items-center",onClick:c,children:[(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(g.default,{src:a.image,alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),"configured"===X&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-green-500/10 text-green-600 dark:text-green-400 rounded-full",children:"Connected"}),"not_configured"===X&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 rounded-full",children:"Not configured"}),"other"===X&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-blue-500/10 text-blue-600 dark:text-blue-400 rounded-full",children:"Other"})]}),(0,d.jsx)("p",{className:"text-xs text-text-muted truncate",children:a.description})]})]}),(0,d.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${b?"rotate-180":""}`,children:"expand_more"})]}),b&&(0,d.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[x&&(0,d.jsxs)("div",{className:"flex items-center gap-2 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),(0,d.jsx)("span",{children:"Checking Claude Cowork..."})]}),!x&&v&&!v.installed&&(0,d.jsxs)("div",{className:"flex flex-col gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-yellow-500",children:"warning"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:"Claude Desktop (Cowork mode) not detected"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Open Claude Desktop → Help → Troubleshooting → Enable Developer mode → Configure third-party inference, then return here."})]})]}),(0,d.jsx)("div",{className:"pl-9",children:(0,d.jsxs)(f.$n,{variant:"secondary",size:"sm",onClick:()=>M(!0),className:"!bg-yellow-500/20 !border-yellow-500/40 !text-yellow-700 dark:!text-yellow-300 hover:!bg-yellow-500/30",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px] mr-1",children:"content_copy"}),"Manual Config"]})})]}),!x&&v?.installed&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"Select Endpoint"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),(0,d.jsx)(l,{value:W(),onChange:a=>O((a||"").replace(/\/v1\/?$/,"")),tunnelEnabled:o,tunnelPublicUrl:p,tailscaleEnabled:q,tailscaleUrl:r,cloudEnabled:m,cloudUrl:n})]}),v?.cowork?.baseUrl&&(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"Current"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),(0,d.jsx)("span",{className:"min-w-0 truncate rounded bg-surface/40 px-2 py-2 text-xs text-text-muted sm:py-1.5",children:v.cowork.baseUrl})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"API Key"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),i.length>0||H?(0,d.jsxs)("select",{value:H,onChange:a=>I(a.target.value),className:"w-full min-w-0 px-2 py-2 bg-surface rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50 sm:py-1.5",children:[Y&&(0,d.jsx)("option",{value:H,children:H}),i.map(a=>(0,d.jsx)("option",{value:a.key,children:a.key},a.id))]}):(0,d.jsx)("span",{className:"min-w-0 rounded bg-surface/40 px-2 py-2 text-xs text-text-muted sm:py-1.5",children:m?"No API keys - Create one in Keys page":"sk_9router (default)"})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr] sm:items-start sm:gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right pt-1",children:"Models"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px] mt-1.5",children:"arrow_forward"}),(0,d.jsxs)("div",{className:"flex-1 flex flex-col gap-2",children:[(0,d.jsx)("div",{className:"flex flex-wrap gap-1.5 min-h-[28px] px-2 py-1.5 bg-surface rounded border border-border",children:0===J.length?(0,d.jsx)("span",{className:"text-xs text-text-muted",children:"No models selected"}):J.map(a=>(0,d.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs bg-black/5 dark:bg-white/5 text-text-muted border border-transparent hover:border-border",children:[a,(0,d.jsx)("button",{onClick:()=>K(b=>b.filter(b=>b!==a)),className:"ml-0.5 hover:text-red-500",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"close"})})]},a))}),(0,d.jsx)("button",{onClick:()=>S(!0),disabled:!k,className:`self-start px-2 py-1 rounded border text-xs transition-colors ${k?"bg-primary/10 border-primary/40 text-primary hover:bg-primary/20 cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"+ Add Combo (claude-)"})]})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr] sm:items-start sm:gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right pt-1",children:"Plugins"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px] mt-1.5",children:"arrow_forward"}),(0,d.jsxs)("div",{className:"flex-1 flex flex-col gap-2",children:[(0,d.jsx)("div",{className:"flex flex-wrap gap-1.5 min-h-[28px] px-2 py-1.5 bg-surface rounded border border-border",children:0===P.filter(a=>"exa"!==a.name).length?(0,d.jsx)("span",{className:"text-xs text-text-muted",children:"No plugins"}):P.filter(a=>"exa"!==a.name).map(a=>(0,d.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs bg-black/5 dark:bg-white/5 text-text-muted border border-transparent hover:border-border",children:[a.title||a.name,a.oauth&&(0,d.jsx)("span",{className:"text-[8px] text-amber-600",children:"OAuth"}),(0,d.jsx)("button",{onClick:()=>{var b;return b=a.name,void Q(P.filter(a=>a.name!==b))},className:"ml-0.5 hover:text-red-500",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"close"})})]},a.name))}),(0,d.jsx)("button",{onClick:()=>U(!0),className:"self-start px-2 py-1 rounded border text-xs bg-primary/10 border-primary/40 text-primary hover:bg-primary/20 cursor-pointer",children:"+ Browse MCP marketplace"}),(0,d.jsxs)("p",{className:"text-[10px] text-text-muted leading-snug",children:["\uD83D\uDCA1 Exa is auto-installed. Prefer ",(0,d.jsx)("code",{className:"px-1 py-0.5 rounded bg-black/5 dark:bg-white/5",children:"web_search_exa"})," for web search and ",(0,d.jsx)("code",{className:"px-1 py-0.5 rounded bg-black/5 dark:bg-white/5",children:"web_fetch_exa"})," for reading pages."]})]})]})]}),F&&(0,d.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===F.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"success"===F.type?"check_circle":"error"}),(0,d.jsx)("span",{children:F.text})]}),(0,d.jsxs)("div",{className:"flex flex-col sm:flex-row sm:items-center gap-2",children:[(0,d.jsxs)(f.$n,{variant:"primary",size:"sm",onClick:Z,disabled:0===J.length,loading:B,className:"w-full sm:w-auto",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"save"}),"Apply"]}),(0,d.jsxs)(f.$n,{variant:"outline",size:"sm",onClick:_,disabled:!v.has9Router,loading:D,className:"w-full sm:w-auto",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"restore"}),"Reset"]}),(0,d.jsxs)(f.$n,{variant:"ghost",size:"sm",onClick:()=>M(!0),className:"w-full sm:w-auto",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"content_copy"}),"Manual Config"]})]})]})]}),(0,d.jsx)(f.uR,{isOpen:L,onClose:()=>M(!1),title:"Claude Cowork - Manual Configuration",configs:(t=H&&H.trim()?H:m?"<API_KEY_FROM_DASHBOARD>":"sk_9router",u=J.length>0?J:["provider/model-id"],[{filename:"~/Library/Application Support/Claude-3p/configLibrary/<appliedId>.json",content:JSON.stringify({inferenceProvider:"gateway",inferenceGatewayBaseUrl:W()||"https://your-public-host/v1",inferenceGatewayApiKey:t,inferenceModels:u.map(a=>({name:a}))},null,2)}])}),(0,d.jsx)(f.CK,{isOpen:R,combo:null,onClose:()=>S(!1),onSave:$,activeProviders:j,forcePrefix:"claude-",title:"Create Cowork Combo"}),(0,d.jsx)(f.Nf,{isOpen:T,onClose:()=>U(!1),onAdd:a=>{P.some(b=>b.name===a.name)||Q([...P,a])},addedNames:P.map(a=>a.name)})]})}function B({tool:a,isExpanded:b,onToggle:c,baseUrl:h,apiKeys:i,activeProviders:j,cloudEnabled:k,initialStatus:m,tunnelEnabled:o,tunnelPublicUrl:p,tailscaleEnabled:q,tailscaleUrl:r}){let s,t,[u,v]=(0,e.useState)(m||null),[w,x]=(0,e.useState)(!1),[y,z]=(0,e.useState)(!1),[A,C]=(0,e.useState)(!1),[D,E]=(0,e.useState)(null),[F,G]=(0,e.useState)(""),[H,I]=(0,e.useState)(""),[J,K]=(0,e.useState)({}),[L,M]=(0,e.useState)(!1),[N,O]=(0,e.useState)([]),[P,Q]=(0,e.useState)(!1),R=u?u.has9Router?n(u.currentUrl||"",{tunnelPublicUrl:p,tailscaleUrl:r})?"configured":"other":"not_configured":null,S=()=>{let a=H||h;return a.endsWith("/v1")?a:`${a}/v1`},T=F&&!i.some(a=>a.key===F),U=async()=>{x(!0);try{let a=await fetch("/api/cli-tools/copilot-settings"),b=await a.json();v(b)}catch(a){v({error:a.message})}finally{x(!1)}},V=async()=>{z(!0),E(null);try{let a=F&&F.trim()||k?F:"sk_9router",b=await fetch("/api/cli-tools/copilot-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:S(),apiKey:a,models:N})}),c=await b.json();b.ok?(E({type:"success",text:c.message||"Settings applied! Reload VS Code."}),U()):E({type:"error",text:c.error||"Failed to apply settings"})}catch(a){E({type:"error",text:a.message})}finally{z(!1)}},W=async()=>{C(!0),E(null);try{let a=await fetch("/api/cli-tools/copilot-settings",{method:"DELETE"}),b=await a.json();a.ok?(E({type:"success",text:"Settings reset successfully!"}),O([]),U()):E({type:"error",text:b.error||"Failed to reset settings"})}catch(a){E({type:"error",text:a.message})}finally{C(!1)}};return(0,d.jsxs)(f.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3 hover:cursor-pointer sm:items-center",onClick:c,children:[(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(g.default,{src:"/providers/copilot.png",alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),"configured"===R&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-green-500/10 text-green-600 dark:text-green-400 rounded-full",children:"Connected"}),"not_configured"===R&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 rounded-full",children:"Not configured"}),"other"===R&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-blue-500/10 text-blue-600 dark:text-blue-400 rounded-full",children:"Other"})]}),(0,d.jsx)("p",{className:"text-xs text-text-muted truncate",children:a.description})]})]}),(0,d.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${b?"rotate-180":""}`,children:"expand_more"})]}),b&&(0,d.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[w&&(0,d.jsxs)("div",{className:"flex items-center gap-2 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),(0,d.jsx)("span",{children:"Checking Copilot config..."})]}),!w&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex items-start gap-3 p-3 bg-blue-500/10 border border-blue-500/30 rounded-lg",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-blue-500 text-lg",children:"info"}),(0,d.jsxs)("div",{className:"text-xs text-blue-700 dark:text-blue-300",children:[(0,d.jsxs)("p",{className:"font-medium",children:["Writes to ",(0,d.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/10 rounded",children:"chatLanguageModels.json"})]}),(0,d.jsx)("p",{className:"mt-0.5 opacity-80",children:"Reload VS Code after applying for changes to take effect."})]})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"Select Endpoint"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),(0,d.jsx)(l,{value:H||H||`${h}/v1`,onChange:I,requiresExternalUrl:a.requiresExternalUrl,tunnelEnabled:o,tunnelPublicUrl:p,tailscaleEnabled:q,tailscaleUrl:r})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"API Key"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),i.length>0||F?(0,d.jsxs)("select",{value:F,onChange:a=>G(a.target.value),className:"w-full min-w-0 px-2 py-2 bg-surface rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50 sm:py-1.5",children:[T&&(0,d.jsx)("option",{value:F,children:F}),i.map(a=>(0,d.jsx)("option",{value:a.key,children:a.key},a.id))]}):(0,d.jsx)("span",{className:"min-w-0 rounded bg-surface/40 px-2 py-2 text-xs text-text-muted sm:py-1.5",children:k?"No API keys - Create one in Keys page":"sk_9router (default)"})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr] sm:items-start sm:gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right pt-1",children:"Models"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px] mt-1.5",children:"arrow_forward"}),(0,d.jsxs)("div",{className:"flex-1 flex flex-col gap-2",children:[(0,d.jsx)("div",{className:"flex flex-wrap gap-1.5 min-h-[28px] px-2 py-1.5 bg-surface rounded border border-border",children:0===N.length?(0,d.jsx)("span",{className:"text-xs text-text-muted",children:"No models selected"}):N.map(a=>(0,d.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs bg-black/5 dark:bg-white/5 text-text-muted border border-transparent hover:border-border",children:[a,(0,d.jsx)("button",{onClick:b=>{b.stopPropagation(),O(b=>b.filter(b=>b!==a))},className:"ml-0.5 hover:text-red-500",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"close"})})]},a))}),(0,d.jsx)("div",{children:(0,d.jsx)("button",{onClick:()=>Q(!0),disabled:!j?.length,className:`px-2 py-1 rounded border text-xs transition-colors ${j?.length?"bg-surface border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Add Model"})})]})]})]}),D&&(0,d.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===D.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"success"===D.type?"check_circle":"error"}),(0,d.jsx)("span",{children:D.text})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-2 sm:flex sm:items-center",children:[(0,d.jsxs)(f.$n,{variant:"primary",size:"sm",onClick:V,disabled:0===N.length,loading:y,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"save"}),"Apply"]}),(0,d.jsxs)(f.$n,{variant:"outline",size:"sm",onClick:W,disabled:!u?.has9Router,loading:A,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"restore"}),"Reset"]}),(0,d.jsxs)(f.$n,{variant:"ghost",size:"sm",onClick:()=>M(!0),disabled:0===N.length,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"content_copy"}),"Manual Config"]})]})]})]}),(0,d.jsx)(f.rq,{isOpen:P,onClose:()=>Q(!1),onSelect:a=>{N.includes(a.value)||O([...N,a.value]),Q(!1)},selectedModel:null,activeProviders:j,modelAliases:J,title:"Add Model for GitHub Copilot"}),(0,d.jsx)(f.uR,{isOpen:L,onClose:()=>M(!1),title:"GitHub Copilot - Manual Configuration",configs:(s=F&&F.trim()?F:k?"<API_KEY_FROM_DASHBOARD>":"sk_9router",t=S(),[{filename:"~/Library/Application Support/Code/User/chatLanguageModels.json",content:JSON.stringify([{name:"9Router",vendor:"azure",apiKey:s,models:(N.length>0?N:["provider/model-id"]).map(a=>({id:a,name:a,url:`${t}/chat/completions#models.ai.azure.com`,toolCalling:!0,vision:!1,maxInputTokens:128e3,maxOutputTokens:16e3}))}],null,2)}])})]})}let C="http://127.0.0.1:20128";function D({apiKeys:a,cloudEnabled:b,onStatusChange:c}){let[g,h]=(0,e.useState)(null),[i,j]=(0,e.useState)(!1),[k,l]=(0,e.useState)(!1),[m,n]=(0,e.useState)(""),[o,p]=(0,e.useState)(()=>a?.[0]?.key||""),[q,r]=(0,e.useState)(null),[s,t]=(0,e.useState)(null),[u,v]=(0,e.useState)(null),[w,x]=(0,e.useState)(C),[y,z]=(0,e.useState)(null),A=g?.isWin===!0,B=A||g?.hasCachedPassword||g?.needsSudoPassword===!1,E=g?.isAdmin!==!1;!E&&(A||g?.hasCachedPassword||g?.needsSudoPassword);let F=(0,e.useCallback)(async()=>{try{let a=await fetch("/api/cli-tools/antigravity-mitm");if(a.ok){let b=await a.json();h(b),b.mitmRouterBaseUrl&&x(b.mitmRouterBaseUrl),c?.(b)}}catch{h({running:!1,certExists:!1,dnsStatus:{}})}},[c]),G=a=>{v(null),g&&(B?H(a,""):(r(a),l(!0),t(null)))},H=async(c,d,e=!1)=>{j(!0),v(null);try{let f;if("trust-cert"===c)f=await fetch("/api/cli-tools/antigravity-mitm",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"trust-cert",sudoPassword:d})});else if("start"===c){let c=o?.trim()||(a?.length>0?a[0].key:null)||(b?null:"sk_9router");f=await fetch("/api/cli-tools/antigravity-mitm",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:c,sudoPassword:d,mitmRouterBaseUrl:w.trim()||C,forceKillPort443:e})})}else f=await fetch("/api/cli-tools/antigravity-mitm",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({sudoPassword:d})});if(!f.ok){let a=await f.json().catch(()=>({}));if("PORT_443_BUSY"===a.code&&a.portOwner){l(!1),z({owner:a.portOwner,password:d});return}v(a.error||`Failed to ${c} MITM server`);return}l(!1),n(""),z(null),await F()}catch(a){v(a.message||"Network error")}finally{j(!1),r(null)}},I=()=>{m.trim()?H(q,m):t("Sudo password is required")},J=g?.running;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.Zp,{padding:"sm",className:"border-primary/20 bg-primary/5",children:(0,d.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,d.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-primary text-[20px]",children:"security"}),(0,d.jsx)("span",{className:"font-semibold text-sm text-text-main",children:"MITM Server"}),J?(0,d.jsx)(f.Ex,{variant:"success",size:"sm",children:"Running"}):(0,d.jsx)(f.Ex,{variant:"default",size:"sm",children:"Stopped"})]}),(0,d.jsx)("div",{className:"flex flex-wrap items-center gap-1 text-xs text-text-muted","data-i18n-skip":"true",children:[{label:"Cert",ok:g?.certExists},{label:"Trusted",ok:g?.certTrusted},{label:"Server",ok:J}].map(({label:a,ok:b})=>(0,d.jsxs)("span",{className:`flex items-center gap-0.5 px-1.5 py-0.5 rounded ${b?"text-green-600":"text-text-muted"}`,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:b?"check_circle":"cancel"}),a]},a))})]}),(0,d.jsxs)("div",{className:"px-2 py-2 rounded-lg bg-surface/50 border border-border/50 flex flex-col gap-2",children:[(0,d.jsxs)("p",{className:"text-[11px] text-text-muted leading-relaxed",children:[(0,d.jsx)("span",{className:"font-medium text-text-main",children:"Purpose:"})," Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router"]}),(0,d.jsxs)("p",{className:"text-[11px] text-text-muted leading-relaxed",children:[(0,d.jsx)("span",{className:"font-medium text-text-main",children:"How it works:"})," Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot"]})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,d.jsxs)("div",{className:"grid gap-1 sm:grid-cols-[8rem_auto_1fr] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"9Router Base URL"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),(0,d.jsx)("input",{type:"text",value:w,onChange:a=>x(a.target.value),placeholder:C,disabled:J,className:"flex-1 min-w-0 px-2 py-1.5 bg-surface rounded border border-border text-xs text-text-main focus:outline-none focus:ring-1 focus:ring-primary/50 disabled:opacity-50"})]}),!J&&(0,d.jsxs)("div",{className:"grid gap-1 sm:grid-cols-[8rem_auto_1fr] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"API Key"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),(0,d.jsx)("input",{type:"text",list:"mitm-api-keys",value:o,onChange:a=>p(a.target.value),placeholder:b?"Enter or pick API key":"sk_9router (default)",className:"flex-1 min-w-0 px-2 py-1.5 bg-surface rounded border border-border text-xs text-text-main focus:outline-none focus:ring-1 focus:ring-primary/50"}),a?.length>0&&(0,d.jsx)("datalist",{id:"mitm-api-keys",children:a.map(a=>(0,d.jsx)("option",{value:a.key,children:a.name||a.key},a.id))})]})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:flex-wrap sm:items-center","data-i18n-skip":"true",children:[g?.certExists&&!g?.certTrusted&&(0,d.jsxs)("button",{onClick:()=>G("trust-cert"),disabled:i,className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-yellow-500/30 bg-yellow-500/10 px-4 py-2 text-xs font-medium text-yellow-600 transition-colors hover:bg-yellow-500/20 disabled:opacity-50 sm:w-auto sm:py-1.5",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"verified_user"}),"Trust Cert"]}),J?(0,d.jsxs)("button",{onClick:()=>G("stop"),disabled:i,className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-red-500/30 bg-red-500/10 px-4 py-2 text-xs font-medium text-red-500 transition-colors hover:bg-red-500/20 disabled:opacity-50 sm:w-auto sm:py-1.5",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"stop_circle"}),"Stop Server"]}):(0,d.jsxs)("button",{onClick:()=>G("start"),disabled:i||!g||A&&!E,title:A&&!E?"Administrator required":void 0,className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-primary/30 bg-primary/10 px-4 py-2 text-xs font-medium text-primary transition-colors hover:bg-primary/20 disabled:opacity-50 sm:w-auto sm:py-1.5",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"play_circle"}),"Start Server"]}),J&&(0,d.jsx)("p",{className:"text-xs text-text-muted",children:"Enable DNS per tool below to activate interception"})]}),u&&(0,d.jsxs)("div",{className:"flex items-start gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600 dark:text-red-400 border border-red-500/20",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mt-0.5 shrink-0",children:"error"}),(0,d.jsx)("span",{children:u})]}),A&&!E&&(0,d.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600 border border-red-500/20",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"shield_lock"}),(0,d.jsx)("span",{children:"Administrator required — restart 9Router as Administrator to use MITM"})]})]})}),k&&(0,d.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm",children:(0,d.jsxs)("div",{className:"mx-4 flex w-full max-w-sm flex-col gap-4 rounded-xl border border-border bg-surface p-5 shadow-xl sm:p-6",children:[(0,d.jsx)("h3",{className:"font-semibold text-text-main",children:"Sudo Password Required"}),(0,d.jsxs)("div",{className:"flex items-start gap-3 p-3 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-yellow-500 text-[20px]",children:"warning"}),(0,d.jsx)("p",{className:"text-xs text-text-muted",children:"Required for SSL certificate and server startup"})]}),(0,d.jsx)(f.pd,{type:"password",placeholder:"Enter sudo password",value:m,onChange:a=>n(a.target.value),onKeyDown:a=>{"Enter"!==a.key||i||I()}}),s&&(0,d.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),(0,d.jsx)("span",{children:s})]}),(0,d.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,d.jsx)(f.$n,{variant:"ghost",size:"sm",onClick:()=>{l(!1),n(""),t(null)},disabled:i,children:"Cancel"}),(0,d.jsx)(f.$n,{variant:"primary",size:"sm",onClick:I,loading:i,children:"Confirm"})]})]})}),y&&(0,d.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm",children:(0,d.jsxs)("div",{className:"mx-4 flex w-full max-w-md flex-col gap-4 rounded-xl border border-border bg-surface p-5 shadow-xl sm:p-6",children:[(0,d.jsx)("h3",{className:"font-semibold text-text-main",children:"Port 443 Already In Use"}),(0,d.jsxs)("div",{className:"flex items-start gap-3 p-3 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-yellow-500 text-[20px]",children:"warning"}),(0,d.jsxs)("div",{className:"flex flex-col gap-1 text-xs text-text-muted",children:[(0,d.jsx)("p",{children:"Port 443 đang bị process kh\xe1c chiếm:"}),(0,d.jsxs)("p",{className:"font-mono text-text-main","data-i18n-skip":"true",children:[y.owner.name," (PID ",y.owner.pid,")"]}),(0,d.jsx)("p",{children:"Kill process n\xe0y để chạy MITM Server?"})]})]}),(0,d.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,d.jsx)(f.$n,{variant:"ghost",size:"sm",onClick:()=>{z(null),j(!1)},disabled:i,children:"Cancel"}),(0,d.jsx)(f.$n,{variant:"primary",size:"sm",onClick:()=>{H("start",y?.password||"",!0)},loading:i,children:"Kill & Start"})]})]})})]})}var E=c(5683);function F({tool:a,isExpanded:b,onToggle:c,serverRunning:h,dnsActive:i,hasCachedPassword:j,needsSudoPassword:k,isWin:l,apiKeys:m,activeProviders:n,hasActiveProviders:o,modelAliases:p={},cloudEnabled:q,onDnsChange:r}){let[s,t]=(0,e.useState)(!1),[u,v]=(0,e.useState)(null),[w,x]=(0,e.useState)(!1),[y,z]=(0,e.useState)(""),[A,B]=(0,e.useState)(null),[C,D]=(0,e.useState)(null),[G,H]=(0,e.useState)({}),[I,J]=(0,e.useState)(!1),[K,L]=(0,e.useState)(null),M=E.TOOL_HOSTS[a.id]??[],N=l||j||!1===k,O=(0,e.useCallback)(async b=>{try{await fetch("/api/cli-tools/antigravity-mitm/alias",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({tool:a.id,mappings:b})})}catch{}},[a.id]),P=(a,b)=>{H(c=>({...c,[a]:b}))},Q=()=>{if(!h)return;let a=i?"disable":"enable";N?R(a,""):(B(a),x(!0),D(null))},R=async(b,c)=>{t(!0),v(null);try{let d=await fetch("/api/cli-tools/antigravity-mitm",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({tool:a.id,action:b,sudoPassword:c})}),e=await d.json();if(!d.ok)throw Error(e.error||"Failed to toggle DNS");"enable"===b&&v(`Restart ${a.name} to apply changes`),x(!1),z(""),r?.(e)}catch{}finally{t(!1),B(null)}},S=()=>{y.trim()?R(A,y):D("Sudo password is required")};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(f.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3 hover:cursor-pointer sm:items-center",onClick:c,children:[(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(g.default,{src:a.image,alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),h?i?(0,d.jsx)(f.Ex,{variant:"success",size:"sm",children:"Active"}):(0,d.jsx)(f.Ex,{variant:"warning",size:"sm",children:"DNS off"}):(0,d.jsx)(f.Ex,{variant:"default",size:"sm",children:"Server off"})]}),(0,d.jsxs)("p",{className:"text-xs text-text-muted sm:truncate",children:["Intercept ",a.name," requests via MITM proxy"]})]})]}),(0,d.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${b?"rotate-180":""}`,children:"expand_more"})]}),b&&(0,d.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[M.length>0&&(0,d.jsxs)("div",{className:"mt-2 rounded-md border border-border bg-surface/50 px-2 py-1.5",children:[(0,d.jsx)("p",{className:"text-[10px] font-medium tracking-wide text-text-main/80 mb-1",children:"Edit hosts file manually to add the following entries:"}),(0,d.jsx)("ul",{className:"list-none space-y-0.5 font-mono text-[10px] text-text-muted break-all",children:M.map(a=>(0,d.jsxs)("li",{children:["127.0.0.1 ",a]},a))})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-0.5 text-[11px] text-text-muted px-1",children:[(0,d.jsxs)("p",{children:["Toggle DNS to redirect ",a.name," traffic through 9Router via MITM."]}),!i&&(0,d.jsx)("p",{className:"text-amber-600 text-[10px] mt-1",children:"⚠️ Enable DNS to edit model mappings"})]}),a.defaultModels?.length>0&&(0,d.jsx)("div",{className:"flex flex-col gap-2",children:a.defaultModels.map(a=>(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[9rem_auto_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right",children:a.name}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),(0,d.jsxs)("div",{className:"relative w-full min-w-0",children:[(0,d.jsx)("input",{type:"text",value:G[a.alias]||"",onChange:b=>P(a.alias,b.target.value),onBlur:b=>{var c,d;return c=a.alias,d=b.target.value,void O({...G,[c]:d})},placeholder:"provider/model-id",disabled:!i,className:`w-full min-w-0 pl-2 pr-7 py-2 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50 sm:py-1.5 ${!i?"opacity-50 cursor-not-allowed":""}`}),G[a.alias]&&(0,d.jsx)("button",{onClick:()=>{P(a.alias,""),O({...G,[a.alias]:""})},className:"absolute right-1 top-1/2 -translate-y-1/2 p-0.5 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]}),(0,d.jsx)("button",{onClick:()=>{L(a.alias),J(!0)},disabled:!o||!i,className:`rounded border px-2 py-2 text-xs transition-colors sm:py-1.5 ${o&&i?"bg-surface border-border hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select"})]},a.alias))}),a.defaultModels?.length===0&&(0,d.jsx)("p",{className:"text-xs text-text-muted px-1",children:"Model mappings will be available soon."}),(0,d.jsxs)("div",{className:"flex flex-col gap-2 sm:items-start",children:[i?(0,d.jsxs)("button",{onClick:Q,disabled:!h||s,className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-red-500/30 bg-red-500/10 px-4 py-2 text-xs font-medium text-red-500 transition-colors hover:bg-red-500/20 disabled:cursor-not-allowed disabled:opacity-50 sm:w-auto sm:py-1.5",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"stop_circle"}),"Stop DNS"]}):(0,d.jsxs)("button",{onClick:Q,disabled:!h||s,className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-primary/30 bg-primary/10 px-4 py-2 text-xs font-medium text-primary transition-colors hover:bg-primary/20 disabled:cursor-not-allowed disabled:opacity-50 sm:w-auto sm:py-1.5",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"play_circle"}),"Start DNS"]}),u&&(0,d.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs text-amber-500",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"warning"}),(0,d.jsx)("span",{children:u})]})]})]})]}),w&&(0,d.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm",children:(0,d.jsxs)("div",{className:"mx-4 flex w-full max-w-sm flex-col gap-4 rounded-xl border border-border bg-surface p-5 shadow-xl sm:p-6",children:[(0,d.jsx)("h3",{className:"font-semibold text-text-main",children:"Sudo Password Required"}),(0,d.jsxs)("div",{className:"flex items-start gap-3 p-3 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-yellow-500 text-[20px]",children:"warning"}),(0,d.jsx)("p",{className:"text-xs text-text-muted",children:"Required to modify /etc/hosts and flush DNS cache"})]}),(0,d.jsx)(f.pd,{type:"password",placeholder:"Enter sudo password",value:y,onChange:a=>z(a.target.value),onKeyDown:a=>{"Enter"!==a.key||s||S()}}),C&&(0,d.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),(0,d.jsx)("span",{children:C})]}),(0,d.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,d.jsx)(f.$n,{variant:"ghost",size:"sm",onClick:()=>{x(!1),z(""),D(null)},disabled:s,children:"Cancel"}),(0,d.jsx)(f.$n,{variant:"primary",size:"sm",onClick:S,loading:s,children:"Confirm"})]})]})}),(0,d.jsx)(f.rq,{isOpen:I,onClose:()=>J(!1),onSelect:a=>{if(!K||a.isPlaceholder)return;let b={...G,[K]:a.value};H(b),O(b)},selectedModel:K?G[K]:null,activeProviders:n,modelAliases:p,title:`Select model for ${K}`})]})}var G=c(30978),H=c.n(G);function I({tool:a}){return(0,d.jsx)(H(),{href:"/dashboard/mitm",className:"block",children:(0,d.jsx)(f.Zp,{padding:"sm",className:"overflow-hidden hover:border-primary/50 transition-colors cursor-pointer",children:(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(g.default,{src:a.image,alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-purple-500/10 text-purple-600 dark:text-purple-400 rounded-full",children:"MITM"})]}),(0,d.jsx)("p",{className:"text-xs text-text-muted truncate",children:a.description})]})]}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[20px]",children:"chevron_right"})]})})})}}};
|
|
23
|
+
`}])})]})}var w=c(93617);function x({toolId:a,tool:b,isExpanded:c,onToggle:h,baseUrl:i,apiKeys:j,activeProviders:k=[],cloudEnabled:l=!1,tunnelEnabled:m=!1}){let[n,o]=(0,e.useState)(null),[p,q]=(0,e.useState)(!1),[r,s]=(0,e.useState)(""),[t,u]=(0,e.useState)(()=>j?.length>0?j[0].key:""),v=a=>{let b=t&&t.trim()?t:l?"your-api-key":"sk_9router",c=i||"http://localhost:20128",d=c.endsWith("/v1")?c:`${c}/v1`;return a.replace(/\{\{baseUrl\}\}/g,d).replace(/\{\{apiKey\}\}/g,b).replace(/\{\{model\}\}/g,r||"provider/model-id")},{copy:y}=(0,w.C)(),z=async(a,b)=>{await y(v(a),`toolcard-${b}`),o(b),setTimeout(()=>o(null),2e3)},A=k.length>0,B=()=>(!b.requiresExternalUrl||!!l||!!m)&&(!b.requiresCloud||!!l);return(0,d.jsxs)(f.Zp,{padding:"xs",className:"overflow-hidden overflow-x-hidden",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between hover:cursor-pointer",onClick:h,children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 rounded-lg flex items-center justify-center shrink-0",children:b.image?(0,d.jsx)(g.default,{src:b.image,alt:b.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}}):b.icon?(0,d.jsx)("span",{className:"material-symbols-outlined text-xl",style:{color:b.color},children:b.icon}):(0,d.jsx)(g.default,{src:`/providers/${a}.png`,alt:b.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:b.name}),(0,d.jsx)("p",{className:"text-xs text-text-muted truncate",children:b.description})]})]}),(0,d.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${c?"rotate-180":""}`,children:"expand_more"})]}),c&&(0,d.jsx)("div",{className:"mt-6 pt-6 border-t border-border",children:b.guideSteps?(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[b.notes&&0!==b.notes.length?(0,d.jsx)("div",{className:"flex flex-col gap-2 mb-4",children:b.notes.map((a,b)=>{if("cloudCheck"===a.type&&(l||m))return null;let c="warning"===a.type,e="cloudCheck"===a.type&&!l&&!m,f="bg-blue-500/10 border-blue-500/30",g="text-blue-600 dark:text-blue-400",h="text-blue-500",i="info";return c?(f="bg-yellow-500/10 border-yellow-500/30",g="text-yellow-600 dark:text-yellow-400",h="text-yellow-500",i="warning"):e&&(f="bg-red-500/10 border-red-500/30",g="text-red-600 dark:text-red-400",h="text-red-500",i="error"),(0,d.jsxs)("div",{className:`flex items-start gap-3 p-3 rounded-lg border ${f}`,children:[(0,d.jsx)("span",{className:`material-symbols-outlined text-lg ${h}`,children:i}),(0,d.jsx)("p",{className:`text-sm ${g}`,children:a.text})]},b)})}):null,B()&&b.guideSteps.map(a=>(0,d.jsxs)("div",{className:"flex items-start gap-4",children:[(0,d.jsx)("div",{className:"size-8 rounded-full flex items-center justify-center shrink-0 text-sm font-semibold text-white",style:{backgroundColor:b.color},children:a.step}),(0,d.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,d.jsx)("p",{className:"font-medium text-text",children:a.title}),a.desc&&(0,d.jsx)("p",{className:"text-sm text-text-muted mt-0.5",children:a.desc}),"apiKeySelector"===a.type&&(0,d.jsx)("div",{className:"mt-2 flex flex-col sm:flex-row sm:items-center gap-2",children:j&&j.length>0?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("select",{value:t,onChange:a=>u(a.target.value),className:"w-full sm:w-auto flex-1 px-3 py-2 bg-bg-secondary rounded-lg text-sm border border-border focus:outline-none focus:ring-1 focus:ring-primary/50",children:j.map(a=>(0,d.jsx)("option",{value:a.key,children:a.key},a.id))}),(0,d.jsx)("button",{onClick:()=>z(t,"apiKey"),className:"shrink-0 px-3 py-2 bg-bg-secondary hover:bg-bg-tertiary rounded-lg border border-border transition-colors",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-lg",children:"apiKey"===n?"check":"content_copy"})})]}):(0,d.jsx)("span",{className:"text-sm text-text-muted",children:l?"No API keys - Create one in Keys page":"sk_9router"})}),"modelSelector"===a.type&&(0,d.jsxs)("div",{className:"mt-2 flex flex-col sm:flex-row sm:items-center gap-2",children:[(0,d.jsx)("input",{type:"text",value:r,onChange:a=>s(a.target.value),placeholder:"provider/model-id",className:"w-full sm:w-auto flex-1 px-3 py-2 bg-bg-secondary rounded-lg text-sm border border-border focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,d.jsx)("button",{onClick:()=>q(!0),disabled:!A,className:`shrink-0 px-3 py-2 rounded-lg border text-sm transition-colors ${A?"bg-bg-secondary border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select Model"}),r&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("button",{onClick:()=>z(r,"model"),className:"shrink-0 px-3 py-2 bg-bg-secondary hover:bg-bg-tertiary rounded-lg border border-border transition-colors",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-lg",children:"model"===n?"check":"content_copy"})}),(0,d.jsx)("button",{onClick:()=>s(""),className:"p-2 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-lg",children:"close"})})]})]}),a.value&&(0,d.jsxs)("div",{className:"mt-2 flex flex-col sm:flex-row sm:items-center gap-2",children:[(0,d.jsx)("code",{className:"w-full sm:w-auto flex-1 px-3 py-2 bg-bg-secondary rounded-lg text-sm font-mono border border-border truncate",children:v(a.value)}),a.copyable&&(0,d.jsx)("button",{onClick:()=>z(a.value,`${a.step}-${a.title}`),className:"shrink-0 px-3 py-2 bg-bg-secondary hover:bg-bg-tertiary rounded-lg border border-border transition-colors",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-lg",children:n===`${a.step}-${a.title}`?"check":"content_copy"})})]})]})]},a.step)),B()&&b.codeBlock&&(0,d.jsxs)("div",{className:"mt-2",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,d.jsx)("span",{className:"text-xs text-text-muted uppercase tracking-wide",children:b.codeBlock.language}),(0,d.jsxs)("button",{onClick:()=>z(b.codeBlock.code,"codeblock"),className:"flex items-center gap-1 px-2 py-1 text-xs bg-bg-secondary hover:bg-bg-tertiary rounded border border-border transition-colors",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-sm",children:"codeblock"===n?"check":"content_copy"}),"codeblock"===n?"Copied!":"Copy"]})]}),(0,d.jsx)("pre",{className:"p-4 bg-bg-secondary rounded-lg border border-border overflow-x-auto",children:(0,d.jsx)("code",{className:"text-sm font-mono whitespace-pre",children:v(b.codeBlock.code)})})]})]}):(0,d.jsx)("p",{className:"text-text-muted text-sm",children:"Coming soon..."})}),(0,d.jsx)(f.rq,{isOpen:p,onClose:()=>q(!1),onSelect:a=>{s(a.value)},selectedModel:r,activeProviders:k,title:"Select Model"})]})}function y({tool:a,isExpanded:b,onToggle:c,baseUrl:h,apiKeys:i,activeProviders:j,cloudEnabled:k,initialStatus:m,tunnelEnabled:o,tunnelPublicUrl:p,tailscaleEnabled:q,tailscaleUrl:r}){let s,t,u,v,w,[x,z]=(0,e.useState)(m||null),[A,B]=(0,e.useState)(!1),[C,D]=(0,e.useState)(!1),[E,F]=(0,e.useState)(!1),[G,H]=(0,e.useState)(null),[I,J]=(0,e.useState)(!1),[K,L]=(0,e.useState)(""),[M,N]=(0,e.useState)(""),[O,P]=(0,e.useState)(""),[Q,R]=(0,e.useState)(!1),[S,T]=(0,e.useState)(!1),[U,V]=(0,e.useState)({}),[W,X]=(0,e.useState)(!1),[Y,Z]=(0,e.useState)(""),[$,_]=(0,e.useState)([]),[aa,ab]=(0,e.useState)(""),ac=x?.installed?x.config&&x.has9Router?n(x.config?.provider?.["9router"]?.options?.baseURL||"",{tunnelPublicUrl:p,tailscaleUrl:r})?"configured":"other":"not_configured":null,ad=()=>{let a=Y||h;return a.endsWith("/v1")?a:`${a}/v1`},ae=K&&!i.some(a=>a.key===K),af=async()=>{B(!0);try{let a=await fetch("/api/cli-tools/opencode-settings"),b=await a.json();z(b)}catch(a){z({installed:!1,error:a.message})}finally{B(!1)}},ag=async()=>{D(!0),H(null);try{let a=K&&K.trim()||k?K:"sk_9router",b=await fetch("/api/cli-tools/opencode-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:ad(),apiKey:a,models:$,activeModel:""===aa?"":aa||$[0],subagentModel:O})}),c=await b.json();b.ok?(H({type:"success",text:"Settings applied successfully!"}),af()):H({type:"error",text:c.error||"Failed to apply settings"})}catch(a){H({type:"error",text:a.message})}finally{D(!1)}},ah=async()=>{F(!0),H(null);try{let a=await fetch("/api/cli-tools/opencode-settings",{method:"DELETE"}),b=await a.json();a.ok?(H({type:"success",text:"Settings reset successfully!"}),N(""),P(""),_([]),ab(""),af()):H({type:"error",text:b.error||"Failed to reset settings"})}catch(a){H({type:"error",text:a.message})}finally{F(!1)}};return(0,d.jsxs)(f.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3 hover:cursor-pointer sm:items-center",onClick:c,children:[(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(g.default,{src:"/providers/opencode.png",alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),"configured"===ac&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-green-500/10 text-green-600 dark:text-green-400 rounded-full",children:"Connected"}),"not_configured"===ac&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 rounded-full",children:"Not configured"}),"other"===ac&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-blue-500/10 text-blue-600 dark:text-blue-400 rounded-full",children:"Other"})]}),(0,d.jsx)("p",{className:"text-xs text-text-muted truncate",children:a.description})]})]}),(0,d.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${b?"rotate-180":""}`,children:"expand_more"})]}),b&&(0,d.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[A&&(0,d.jsxs)("div",{className:"flex items-center gap-2 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),(0,d.jsx)("span",{children:"Checking OpenCode CLI..."})]}),!A&&x&&!x.installed&&(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-yellow-500",children:"warning"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:"OpenCode CLI not detected locally"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Manual configuration is still available if 9router is deployed on a remote server."})]})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2 pl-9",children:[(0,d.jsxs)(f.$n,{variant:"secondary",size:"sm",onClick:()=>X(!0),className:"!bg-yellow-500/20 !border-yellow-500/40 !text-yellow-700 dark:!text-yellow-300 hover:!bg-yellow-500/30",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px] mr-1",children:"content_copy"}),"Manual Config"]}),(0,d.jsxs)(f.$n,{variant:"outline",size:"sm",onClick:()=>J(!I),children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px] mr-1",children:I?"expand_less":"help"}),I?"Hide":"How to Install"]})]})]}),I&&(0,d.jsxs)("div",{className:"p-4 bg-surface border border-border rounded-lg",children:[(0,d.jsx)("h4",{className:"font-medium mb-3",children:"Installation Guide"}),(0,d.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-text-muted mb-1",children:"macOS / Linux:"}),(0,d.jsx)("code",{className:"block px-3 py-2 bg-black/5 dark:bg-white/5 rounded font-mono text-xs",children:"npm install -g opencode-ai"})]}),(0,d.jsxs)("p",{className:"text-text-muted",children:["After installation, run ",(0,d.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"opencode"})," to verify."]})]})]})]}),!A&&x?.installed&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"Select Endpoint"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),(0,d.jsx)(l,{value:Y||Y||`${h}/v1`,onChange:Z,requiresExternalUrl:a.requiresExternalUrl,tunnelEnabled:o,tunnelPublicUrl:p,tailscaleEnabled:q,tailscaleUrl:r})]}),x?.config?.provider?.["9router"]?.options?.baseURL&&(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"Current"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),(0,d.jsx)("span",{className:"min-w-0 truncate rounded bg-surface/40 px-2 py-2 text-xs text-text-muted sm:py-1.5",children:x.config.provider["9router"].options.baseURL})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"API Key"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),i.length>0||K?(0,d.jsxs)("select",{value:K,onChange:a=>L(a.target.value),className:"w-full min-w-0 px-2 py-2 bg-surface rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50 sm:py-1.5",children:[ae&&(0,d.jsx)("option",{value:K,children:K}),i.map(a=>(0,d.jsx)("option",{value:a.key,children:a.key},a.id))]}):(0,d.jsx)("span",{className:"min-w-0 rounded bg-surface/40 px-2 py-2 text-xs text-text-muted sm:py-1.5",children:k?"No API keys - Create one in Keys page":"sk_9router (default)"})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr] sm:items-start sm:gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right pt-1",children:"Models"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px] mt-1.5",children:"arrow_forward"}),(0,d.jsxs)("div",{className:"flex-1 flex flex-col gap-2",children:[(0,d.jsx)("div",{className:"flex flex-wrap gap-1.5 min-h-[28px] px-2 py-1.5 bg-surface rounded border border-border",children:0===$.length?(0,d.jsx)("span",{className:"text-xs text-text-muted",children:"No models selected"}):$.map(a=>(0,d.jsxs)("span",{onClick:async()=>{if(a===aa)try{(await fetch("/api/cli-tools/opencode-settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({clearActiveModel:!0})})).ok&&(ab(""),af())}catch(a){console.log("Error clearing active model:",a)}else ab(a)},className:`inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs cursor-pointer transition-colors ${a===aa?"bg-primary/10 text-primary border border-primary":"bg-black/5 dark:bg-white/5 text-text-muted border border-transparent hover:border-border"}`,title:a===aa?"Click to clear active model":"Click to set as active",children:[a===aa&&(0,d.jsx)("span",{className:"material-symbols-outlined text-[10px]",children:"star"}),a,(0,d.jsx)("button",{onClick:async b=>{b.stopPropagation();try{if((await fetch(`/api/cli-tools/opencode-settings?model=${encodeURIComponent(a)}`,{method:"DELETE"})).ok){let b=$.filter(b=>b!==a);_(b),aa===a&&ab(""),af()}}catch(a){console.log("Error removing model:",a)}},className:"ml-0.5 hover:text-red-500",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"close"})})]},a))}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("button",{onClick:()=>R(!0),disabled:!j?.length,className:`px-2 py-1 rounded border text-xs transition-colors ${j?.length?"bg-surface border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Add Model"}),(0,d.jsx)("span",{className:"text-xs text-text-muted",children:$.length>0&&aa?(0,d.jsxs)(d.Fragment,{children:["Active: ",(0,d.jsx)("span",{className:"text-primary",children:aa})]}):$.length>0?(0,d.jsx)("span",{className:"text-yellow-500",children:"Click a model to set/clear active"}):"Select models to add"})]})]})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"Subagent Model"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),(0,d.jsx)("input",{type:"text",value:O,onChange:a=>P(a.target.value),placeholder:M||"provider/model-id (defaults to main model)",className:"w-full min-w-0 px-2 py-2 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50 sm:py-1.5"}),(0,d.jsx)("button",{onClick:()=>T(!0),disabled:!j?.length,className:`w-full sm:w-auto rounded border px-2 py-2 text-xs transition-colors sm:py-1.5 whitespace-nowrap sm:shrink-0 ${j?.length?"bg-surface border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select Model"}),O&&(0,d.jsx)("button",{onClick:()=>P(""),className:"p-1 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear (will use main model)",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]})]}),G&&(0,d.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===G.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"success"===G.type?"check_circle":"error"}),(0,d.jsx)("span",{children:G.text})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-2 sm:flex sm:items-center",children:[(0,d.jsxs)(f.$n,{variant:"primary",size:"sm",onClick:ag,disabled:0===$.length,loading:C,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"save"}),"Apply"]}),(0,d.jsxs)(f.$n,{variant:"outline",size:"sm",onClick:ah,disabled:!x.has9Router,loading:E,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"restore"}),"Reset"]}),(0,d.jsxs)(f.$n,{variant:"ghost",size:"sm",onClick:()=>X(!0),children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"content_copy"}),"Manual Config"]})]})]})]}),(0,d.jsx)(f.rq,{isOpen:Q,onClose:()=>R(!1),onSelect:a=>{!$.includes(a.value)&&(_([...$,a.value]),aa||ab(a.value)),R(!1)},selectedModel:null,activeProviders:j,modelAliases:U,title:"Add Model for OpenCode"}),(0,d.jsx)(f.rq,{isOpen:S,onClose:()=>T(!1),onSelect:a=>{P(a.value),T(!1)},selectedModel:O,activeProviders:j,modelAliases:U,title:"Select Subagent Model for OpenCode"}),(0,d.jsx)(f.uR,{isOpen:W,onClose:()=>X(!1),title:"OpenCode - Manual Configuration",configs:(s=K&&K.trim()?K:k?"<API_KEY_FROM_DASHBOARD>":"sk_9router",t=$.length>0?$:["provider/model-id"],u=aa||$[0]||t[0],v=O||u,w={},t.forEach(a=>{w[a]={name:a}}),[{filename:"~/.config/opencode/opencode.json",content:JSON.stringify({provider:{"9router":{npm:"@ai-sdk/openai-compatible",options:{baseURL:ad(),apiKey:s},models:w}},model:`9router/${u}`,agent:{explorer:{description:"Fast explorer subagent for codebase exploration",mode:"subagent",model:`9router/${v}`}}},null,2)}])})]})}let z="/api/cli-tools/cowork-settings";function A({tool:a,isExpanded:b,onToggle:c,baseUrl:h,apiKeys:i,activeProviders:j,hasActiveProviders:k,cloudEnabled:m,cloudUrl:n,tunnelEnabled:o,tunnelPublicUrl:p,tailscaleEnabled:q,tailscaleUrl:r,initialStatus:s}){let t,u,[v,w]=(0,e.useState)(s||null),[x,y]=(0,e.useState)(!1),[B,C]=(0,e.useState)(!1),[D,E]=(0,e.useState)(!1),[F,G]=(0,e.useState)(null),[H,I]=(0,e.useState)(""),[J,K]=(0,e.useState)([]),[L,M]=(0,e.useState)(!1),[N,O]=(0,e.useState)(""),[P,Q]=(0,e.useState)([]),[R,S]=(0,e.useState)(!1),[T,U]=(0,e.useState)(!1),V=async()=>{y(!0);try{let a=await fetch(z),b=await a.json();w(b)}catch(a){w({installed:!1,error:a.message})}finally{y(!1)}},W=()=>{let a;return(a=(N||"").replace(/\/+$/,""))?/\/v1$/.test(a)?a:`${a}/v1`:""},X=v?.installed?v?.cowork?.baseUrl?v.has9Router?"configured":"other":"not_configured":null,Y=H&&!i.some(a=>a.key===H),Z=async()=>{G(null);let a=W();if(0===J.length)return void G({type:"error",text:"Please select at least one model"});C(!0);try{let b=H?.trim()||(i?.length>0?i[0].key:null)||(m?null:"sk_9router"),c=await fetch(z,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:a,apiKey:b,models:J,plugins:P})}),d=await c.json();c.ok?(G({type:"success",text:"Settings applied. Quit & reopen Claude Desktop to load."}),V()):G({type:"error",text:d.error||"Failed to apply settings"})}catch(a){G({type:"error",text:a.message})}finally{C(!1)}},$=async({name:a,models:b})=>{try{let c=await fetch("/api/combos",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:a,models:b})});if(!c.ok){let a=await c.json();G({type:"error",text:a.error||"Failed to create combo"});return}J.includes(a)||K([...J,a]),S(!1),G({type:"success",text:`Combo "${a}" created and added.`})}catch(a){G({type:"error",text:a.message})}},_=async()=>{E(!0),G(null);try{let a=await fetch(z,{method:"DELETE"}),b=await a.json();a.ok?(G({type:"success",text:"Settings reset successfully"}),K([]),Q(v?.defaultPlugins||[]),V()):G({type:"error",text:b.error||"Failed to reset"})}catch(a){G({type:"error",text:a.message})}finally{E(!1)}};return(0,d.jsxs)(f.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3 hover:cursor-pointer sm:items-center",onClick:c,children:[(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(g.default,{src:a.image,alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),"configured"===X&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-green-500/10 text-green-600 dark:text-green-400 rounded-full",children:"Connected"}),"not_configured"===X&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 rounded-full",children:"Not configured"}),"other"===X&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-blue-500/10 text-blue-600 dark:text-blue-400 rounded-full",children:"Other"})]}),(0,d.jsx)("p",{className:"text-xs text-text-muted truncate",children:a.description})]})]}),(0,d.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${b?"rotate-180":""}`,children:"expand_more"})]}),b&&(0,d.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[x&&(0,d.jsxs)("div",{className:"flex items-center gap-2 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),(0,d.jsx)("span",{children:"Checking Claude Cowork..."})]}),!x&&v&&!v.installed&&(0,d.jsxs)("div",{className:"flex flex-col gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-yellow-500",children:"warning"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:"Claude Desktop (Cowork mode) not detected"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Open Claude Desktop → Help → Troubleshooting → Enable Developer mode → Configure third-party inference, then return here."})]})]}),(0,d.jsx)("div",{className:"pl-9",children:(0,d.jsxs)(f.$n,{variant:"secondary",size:"sm",onClick:()=>M(!0),className:"!bg-yellow-500/20 !border-yellow-500/40 !text-yellow-700 dark:!text-yellow-300 hover:!bg-yellow-500/30",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px] mr-1",children:"content_copy"}),"Manual Config"]})})]}),!x&&v?.installed&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"Select Endpoint"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),(0,d.jsx)(l,{value:W(),onChange:a=>O((a||"").replace(/\/v1\/?$/,"")),tunnelEnabled:o,tunnelPublicUrl:p,tailscaleEnabled:q,tailscaleUrl:r,cloudEnabled:m,cloudUrl:n})]}),v?.cowork?.baseUrl&&(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"Current"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),(0,d.jsx)("span",{className:"min-w-0 truncate rounded bg-surface/40 px-2 py-2 text-xs text-text-muted sm:py-1.5",children:v.cowork.baseUrl})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"API Key"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),i.length>0||H?(0,d.jsxs)("select",{value:H,onChange:a=>I(a.target.value),className:"w-full min-w-0 px-2 py-2 bg-surface rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50 sm:py-1.5",children:[Y&&(0,d.jsx)("option",{value:H,children:H}),i.map(a=>(0,d.jsx)("option",{value:a.key,children:a.key},a.id))]}):(0,d.jsx)("span",{className:"min-w-0 rounded bg-surface/40 px-2 py-2 text-xs text-text-muted sm:py-1.5",children:m?"No API keys - Create one in Keys page":"sk_9router (default)"})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr] sm:items-start sm:gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right pt-1",children:"Models"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px] mt-1.5",children:"arrow_forward"}),(0,d.jsxs)("div",{className:"flex-1 flex flex-col gap-2",children:[(0,d.jsx)("div",{className:"flex flex-wrap gap-1.5 min-h-[28px] px-2 py-1.5 bg-surface rounded border border-border",children:0===J.length?(0,d.jsx)("span",{className:"text-xs text-text-muted",children:"No models selected"}):J.map(a=>(0,d.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs bg-black/5 dark:bg-white/5 text-text-muted border border-transparent hover:border-border",children:[a,(0,d.jsx)("button",{onClick:()=>K(b=>b.filter(b=>b!==a)),className:"ml-0.5 hover:text-red-500",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"close"})})]},a))}),(0,d.jsx)("button",{onClick:()=>S(!0),disabled:!k,className:`self-start px-2 py-1 rounded border text-xs transition-colors ${k?"bg-primary/10 border-primary/40 text-primary hover:bg-primary/20 cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"+ Add Combo (claude-)"})]})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr] sm:items-start sm:gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right pt-1",children:"Plugins"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px] mt-1.5",children:"arrow_forward"}),(0,d.jsxs)("div",{className:"flex-1 flex flex-col gap-2",children:[(0,d.jsx)("div",{className:"flex flex-wrap gap-1.5 min-h-[28px] px-2 py-1.5 bg-surface rounded border border-border",children:0===P.filter(a=>"exa"!==a.name).length?(0,d.jsx)("span",{className:"text-xs text-text-muted",children:"No plugins"}):P.filter(a=>"exa"!==a.name).map(a=>(0,d.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs bg-black/5 dark:bg-white/5 text-text-muted border border-transparent hover:border-border",children:[a.title||a.name,a.oauth&&(0,d.jsx)("span",{className:"text-[8px] text-amber-600",children:"OAuth"}),(0,d.jsx)("button",{onClick:()=>{var b;return b=a.name,void Q(P.filter(a=>a.name!==b))},className:"ml-0.5 hover:text-red-500",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"close"})})]},a.name))}),(0,d.jsx)("button",{onClick:()=>U(!0),className:"self-start px-2 py-1 rounded border text-xs bg-primary/10 border-primary/40 text-primary hover:bg-primary/20 cursor-pointer",children:"+ Browse MCP marketplace"}),(0,d.jsxs)("p",{className:"text-[10px] text-text-muted leading-snug",children:["\uD83D\uDCA1 Exa is auto-installed. Prefer ",(0,d.jsx)("code",{className:"px-1 py-0.5 rounded bg-black/5 dark:bg-white/5",children:"web_search_exa"})," for web search and ",(0,d.jsx)("code",{className:"px-1 py-0.5 rounded bg-black/5 dark:bg-white/5",children:"web_fetch_exa"})," for reading pages."]})]})]})]}),F&&(0,d.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===F.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"success"===F.type?"check_circle":"error"}),(0,d.jsx)("span",{children:F.text})]}),(0,d.jsxs)("div",{className:"flex flex-col sm:flex-row sm:items-center gap-2",children:[(0,d.jsxs)(f.$n,{variant:"primary",size:"sm",onClick:Z,disabled:0===J.length,loading:B,className:"w-full sm:w-auto",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"save"}),"Apply"]}),(0,d.jsxs)(f.$n,{variant:"outline",size:"sm",onClick:_,disabled:!v.has9Router,loading:D,className:"w-full sm:w-auto",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"restore"}),"Reset"]}),(0,d.jsxs)(f.$n,{variant:"ghost",size:"sm",onClick:()=>M(!0),className:"w-full sm:w-auto",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"content_copy"}),"Manual Config"]})]})]})]}),(0,d.jsx)(f.uR,{isOpen:L,onClose:()=>M(!1),title:"Claude Cowork - Manual Configuration",configs:(t=H&&H.trim()?H:m?"<API_KEY_FROM_DASHBOARD>":"sk_9router",u=J.length>0?J:["provider/model-id"],[{filename:"~/Library/Application Support/Claude-3p/configLibrary/<appliedId>.json",content:JSON.stringify({inferenceProvider:"gateway",inferenceGatewayBaseUrl:W()||"https://your-public-host/v1",inferenceGatewayApiKey:t,inferenceModels:u.map(a=>({name:a}))},null,2)}])}),(0,d.jsx)(f.CK,{isOpen:R,combo:null,onClose:()=>S(!1),onSave:$,activeProviders:j,forcePrefix:"claude-",title:"Create Cowork Combo"}),(0,d.jsx)(f.Nf,{isOpen:T,onClose:()=>U(!1),onAdd:a=>{P.some(b=>b.name===a.name)||Q([...P,a])},addedNames:P.map(a=>a.name)})]})}function B({tool:a,isExpanded:b,onToggle:c,baseUrl:h,apiKeys:i,activeProviders:j,cloudEnabled:k,initialStatus:m,tunnelEnabled:o,tunnelPublicUrl:p,tailscaleEnabled:q,tailscaleUrl:r}){let s,t,[u,v]=(0,e.useState)(m||null),[w,x]=(0,e.useState)(!1),[y,z]=(0,e.useState)(!1),[A,C]=(0,e.useState)(!1),[D,E]=(0,e.useState)(null),[F,G]=(0,e.useState)(""),[H,I]=(0,e.useState)(""),[J,K]=(0,e.useState)({}),[L,M]=(0,e.useState)(!1),[N,O]=(0,e.useState)([]),[P,Q]=(0,e.useState)(!1),R=u?u.has9Router?n(u.currentUrl||"",{tunnelPublicUrl:p,tailscaleUrl:r})?"configured":"other":"not_configured":null,S=()=>{let a=H||h;return a.endsWith("/v1")?a:`${a}/v1`},T=F&&!i.some(a=>a.key===F),U=async()=>{x(!0);try{let a=await fetch("/api/cli-tools/copilot-settings"),b=await a.json();v(b)}catch(a){v({error:a.message})}finally{x(!1)}},V=async()=>{z(!0),E(null);try{let a=F&&F.trim()||k?F:"sk_9router",b=await fetch("/api/cli-tools/copilot-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:S(),apiKey:a,models:N})}),c=await b.json();b.ok?(E({type:"success",text:c.message||"Settings applied! Reload VS Code."}),U()):E({type:"error",text:c.error||"Failed to apply settings"})}catch(a){E({type:"error",text:a.message})}finally{z(!1)}},W=async()=>{C(!0),E(null);try{let a=await fetch("/api/cli-tools/copilot-settings",{method:"DELETE"}),b=await a.json();a.ok?(E({type:"success",text:"Settings reset successfully!"}),O([]),U()):E({type:"error",text:b.error||"Failed to reset settings"})}catch(a){E({type:"error",text:a.message})}finally{C(!1)}};return(0,d.jsxs)(f.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3 hover:cursor-pointer sm:items-center",onClick:c,children:[(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(g.default,{src:"/providers/copilot.png",alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),"configured"===R&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-green-500/10 text-green-600 dark:text-green-400 rounded-full",children:"Connected"}),"not_configured"===R&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 rounded-full",children:"Not configured"}),"other"===R&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-blue-500/10 text-blue-600 dark:text-blue-400 rounded-full",children:"Other"})]}),(0,d.jsx)("p",{className:"text-xs text-text-muted truncate",children:a.description})]})]}),(0,d.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${b?"rotate-180":""}`,children:"expand_more"})]}),b&&(0,d.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[w&&(0,d.jsxs)("div",{className:"flex items-center gap-2 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),(0,d.jsx)("span",{children:"Checking Copilot config..."})]}),!w&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex items-start gap-3 p-3 bg-blue-500/10 border border-blue-500/30 rounded-lg",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-blue-500 text-lg",children:"info"}),(0,d.jsxs)("div",{className:"text-xs text-blue-700 dark:text-blue-300",children:[(0,d.jsxs)("p",{className:"font-medium",children:["Writes to ",(0,d.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/10 rounded",children:"chatLanguageModels.json"})]}),(0,d.jsx)("p",{className:"mt-0.5 opacity-80",children:"Reload VS Code after applying for changes to take effect."})]})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"Select Endpoint"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),(0,d.jsx)(l,{value:H||H||`${h}/v1`,onChange:I,requiresExternalUrl:a.requiresExternalUrl,tunnelEnabled:o,tunnelPublicUrl:p,tailscaleEnabled:q,tailscaleUrl:r})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"API Key"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),i.length>0||F?(0,d.jsxs)("select",{value:F,onChange:a=>G(a.target.value),className:"w-full min-w-0 px-2 py-2 bg-surface rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50 sm:py-1.5",children:[T&&(0,d.jsx)("option",{value:F,children:F}),i.map(a=>(0,d.jsx)("option",{value:a.key,children:a.key},a.id))]}):(0,d.jsx)("span",{className:"min-w-0 rounded bg-surface/40 px-2 py-2 text-xs text-text-muted sm:py-1.5",children:k?"No API keys - Create one in Keys page":"sk_9router (default)"})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_auto_1fr] sm:items-start sm:gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right pt-1",children:"Models"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px] mt-1.5",children:"arrow_forward"}),(0,d.jsxs)("div",{className:"flex-1 flex flex-col gap-2",children:[(0,d.jsx)("div",{className:"flex flex-wrap gap-1.5 min-h-[28px] px-2 py-1.5 bg-surface rounded border border-border",children:0===N.length?(0,d.jsx)("span",{className:"text-xs text-text-muted",children:"No models selected"}):N.map(a=>(0,d.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs bg-black/5 dark:bg-white/5 text-text-muted border border-transparent hover:border-border",children:[a,(0,d.jsx)("button",{onClick:b=>{b.stopPropagation(),O(b=>b.filter(b=>b!==a))},className:"ml-0.5 hover:text-red-500",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"close"})})]},a))}),(0,d.jsx)("div",{children:(0,d.jsx)("button",{onClick:()=>Q(!0),disabled:!j?.length,className:`px-2 py-1 rounded border text-xs transition-colors ${j?.length?"bg-surface border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Add Model"})})]})]})]}),D&&(0,d.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===D.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"success"===D.type?"check_circle":"error"}),(0,d.jsx)("span",{children:D.text})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-2 sm:flex sm:items-center",children:[(0,d.jsxs)(f.$n,{variant:"primary",size:"sm",onClick:V,disabled:0===N.length,loading:y,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"save"}),"Apply"]}),(0,d.jsxs)(f.$n,{variant:"outline",size:"sm",onClick:W,disabled:!u?.has9Router,loading:A,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"restore"}),"Reset"]}),(0,d.jsxs)(f.$n,{variant:"ghost",size:"sm",onClick:()=>M(!0),disabled:0===N.length,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"content_copy"}),"Manual Config"]})]})]})]}),(0,d.jsx)(f.rq,{isOpen:P,onClose:()=>Q(!1),onSelect:a=>{N.includes(a.value)||O([...N,a.value]),Q(!1)},selectedModel:null,activeProviders:j,modelAliases:J,title:"Add Model for GitHub Copilot"}),(0,d.jsx)(f.uR,{isOpen:L,onClose:()=>M(!1),title:"GitHub Copilot - Manual Configuration",configs:(s=F&&F.trim()?F:k?"<API_KEY_FROM_DASHBOARD>":"sk_9router",t=S(),[{filename:"~/Library/Application Support/Code/User/chatLanguageModels.json",content:JSON.stringify([{name:"9Router",vendor:"azure",apiKey:s,models:(N.length>0?N:["provider/model-id"]).map(a=>({id:a,name:a,url:`${t}/chat/completions#models.ai.azure.com`,toolCalling:!0,vision:!1,maxInputTokens:128e3,maxOutputTokens:16e3}))}],null,2)}])})]})}let C="http://localhost:20128";function D({apiKeys:a,cloudEnabled:b,onStatusChange:c}){let[g,h]=(0,e.useState)(null),[i,j]=(0,e.useState)(!1),[k,l]=(0,e.useState)(!1),[m,n]=(0,e.useState)(""),[o,p]=(0,e.useState)(()=>a?.[0]?.key||""),[q,r]=(0,e.useState)(null),[s,t]=(0,e.useState)(null),[u,v]=(0,e.useState)(null),[w,x]=(0,e.useState)(C),[y,z]=(0,e.useState)(null),A=g?.isWin===!0,B=A||g?.hasCachedPassword||g?.needsSudoPassword===!1,E=g?.isAdmin!==!1;!E&&(A||g?.hasCachedPassword||g?.needsSudoPassword);let F=(0,e.useCallback)(async()=>{try{let a=await fetch("/api/cli-tools/antigravity-mitm");if(a.ok){let b=await a.json();h(b),b.mitmRouterBaseUrl&&x(b.mitmRouterBaseUrl),c?.(b)}}catch{h({running:!1,certExists:!1,dnsStatus:{}})}},[c]),G=a=>{v(null),g&&(B?H(a,""):(r(a),l(!0),t(null)))},H=async(c,d,e=!1)=>{j(!0),v(null);try{let f;if("trust-cert"===c)f=await fetch("/api/cli-tools/antigravity-mitm",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"trust-cert",sudoPassword:d})});else if("start"===c){let c=o?.trim()||(a?.length>0?a[0].key:null)||(b?null:"sk_9router");f=await fetch("/api/cli-tools/antigravity-mitm",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:c,sudoPassword:d,mitmRouterBaseUrl:w.trim()||C,forceKillPort443:e})})}else f=await fetch("/api/cli-tools/antigravity-mitm",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({sudoPassword:d})});if(!f.ok){let a=await f.json().catch(()=>({}));if("PORT_443_BUSY"===a.code&&a.portOwner){l(!1),z({owner:a.portOwner,password:d});return}v(a.error||`Failed to ${c} MITM server`);return}l(!1),n(""),z(null),await F()}catch(a){v(a.message||"Network error")}finally{j(!1),r(null)}},I=()=>{m.trim()?H(q,m):t("Sudo password is required")},J=g?.running;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.Zp,{padding:"sm",className:"border-primary/20 bg-primary/5",children:(0,d.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,d.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-primary text-[20px]",children:"security"}),(0,d.jsx)("span",{className:"font-semibold text-sm text-text-main",children:"MITM Server"}),J?(0,d.jsx)(f.Ex,{variant:"success",size:"sm",children:"Running"}):(0,d.jsx)(f.Ex,{variant:"default",size:"sm",children:"Stopped"})]}),(0,d.jsx)("div",{className:"flex flex-wrap items-center gap-1 text-xs text-text-muted","data-i18n-skip":"true",children:[{label:"Cert",ok:g?.certExists},{label:"Trusted",ok:g?.certTrusted},{label:"Server",ok:J}].map(({label:a,ok:b})=>(0,d.jsxs)("span",{className:`flex items-center gap-0.5 px-1.5 py-0.5 rounded ${b?"text-green-600":"text-text-muted"}`,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:b?"check_circle":"cancel"}),a]},a))})]}),(0,d.jsxs)("div",{className:"px-2 py-2 rounded-lg bg-surface/50 border border-border/50 flex flex-col gap-2",children:[(0,d.jsxs)("p",{className:"text-[11px] text-text-muted leading-relaxed",children:[(0,d.jsx)("span",{className:"font-medium text-text-main",children:"Purpose:"})," Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router"]}),(0,d.jsxs)("p",{className:"text-[11px] text-text-muted leading-relaxed",children:[(0,d.jsx)("span",{className:"font-medium text-text-main",children:"How it works:"})," Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot"]})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,d.jsxs)("div",{className:"grid gap-1 sm:grid-cols-[8rem_auto_1fr] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"9Router Base URL"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),(0,d.jsx)("input",{type:"text",value:w,onChange:a=>x(a.target.value),placeholder:C,disabled:J,className:"flex-1 min-w-0 px-2 py-1.5 bg-surface rounded border border-border text-xs text-text-main focus:outline-none focus:ring-1 focus:ring-primary/50 disabled:opacity-50"})]}),!J&&(0,d.jsxs)("div",{className:"grid gap-1 sm:grid-cols-[8rem_auto_1fr] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right sm:text-sm",children:"API Key"}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),(0,d.jsx)("input",{type:"text",list:"mitm-api-keys",value:o,onChange:a=>p(a.target.value),placeholder:b?"Enter or pick API key":"sk_9router (default)",className:"flex-1 min-w-0 px-2 py-1.5 bg-surface rounded border border-border text-xs text-text-main focus:outline-none focus:ring-1 focus:ring-primary/50"}),a?.length>0&&(0,d.jsx)("datalist",{id:"mitm-api-keys",children:a.map(a=>(0,d.jsx)("option",{value:a.key,children:a.name||a.key},a.id))})]})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:flex-wrap sm:items-center","data-i18n-skip":"true",children:[g?.certExists&&!g?.certTrusted&&(0,d.jsxs)("button",{onClick:()=>G("trust-cert"),disabled:i,className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-yellow-500/30 bg-yellow-500/10 px-4 py-2 text-xs font-medium text-yellow-600 transition-colors hover:bg-yellow-500/20 disabled:opacity-50 sm:w-auto sm:py-1.5",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"verified_user"}),"Trust Cert"]}),J?(0,d.jsxs)("button",{onClick:()=>G("stop"),disabled:i,className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-red-500/30 bg-red-500/10 px-4 py-2 text-xs font-medium text-red-500 transition-colors hover:bg-red-500/20 disabled:opacity-50 sm:w-auto sm:py-1.5",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"stop_circle"}),"Stop Server"]}):(0,d.jsxs)("button",{onClick:()=>G("start"),disabled:i||!g||A&&!E,title:A&&!E?"Administrator required":void 0,className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-primary/30 bg-primary/10 px-4 py-2 text-xs font-medium text-primary transition-colors hover:bg-primary/20 disabled:opacity-50 sm:w-auto sm:py-1.5",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"play_circle"}),"Start Server"]}),J&&(0,d.jsx)("p",{className:"text-xs text-text-muted",children:"Enable DNS per tool below to activate interception"})]}),u&&(0,d.jsxs)("div",{className:"flex items-start gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600 dark:text-red-400 border border-red-500/20",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mt-0.5 shrink-0",children:"error"}),(0,d.jsx)("span",{children:u})]}),A&&!E&&(0,d.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600 border border-red-500/20",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"shield_lock"}),(0,d.jsx)("span",{children:"Administrator required — restart 9Router as Administrator to use MITM"})]})]})}),k&&(0,d.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm",children:(0,d.jsxs)("div",{className:"mx-4 flex w-full max-w-sm flex-col gap-4 rounded-xl border border-border bg-surface p-5 shadow-xl sm:p-6",children:[(0,d.jsx)("h3",{className:"font-semibold text-text-main",children:"Sudo Password Required"}),(0,d.jsxs)("div",{className:"flex items-start gap-3 p-3 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-yellow-500 text-[20px]",children:"warning"}),(0,d.jsx)("p",{className:"text-xs text-text-muted",children:"Required for SSL certificate and server startup"})]}),(0,d.jsx)(f.pd,{type:"password",placeholder:"Enter sudo password",value:m,onChange:a=>n(a.target.value),onKeyDown:a=>{"Enter"!==a.key||i||I()}}),s&&(0,d.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),(0,d.jsx)("span",{children:s})]}),(0,d.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,d.jsx)(f.$n,{variant:"ghost",size:"sm",onClick:()=>{l(!1),n(""),t(null)},disabled:i,children:"Cancel"}),(0,d.jsx)(f.$n,{variant:"primary",size:"sm",onClick:I,loading:i,children:"Confirm"})]})]})}),y&&(0,d.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm",children:(0,d.jsxs)("div",{className:"mx-4 flex w-full max-w-md flex-col gap-4 rounded-xl border border-border bg-surface p-5 shadow-xl sm:p-6",children:[(0,d.jsx)("h3",{className:"font-semibold text-text-main",children:"Port 443 Already In Use"}),(0,d.jsxs)("div",{className:"flex items-start gap-3 p-3 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-yellow-500 text-[20px]",children:"warning"}),(0,d.jsxs)("div",{className:"flex flex-col gap-1 text-xs text-text-muted",children:[(0,d.jsx)("p",{children:"Port 443 đang bị process kh\xe1c chiếm:"}),(0,d.jsxs)("p",{className:"font-mono text-text-main","data-i18n-skip":"true",children:[y.owner.name," (PID ",y.owner.pid,")"]}),(0,d.jsx)("p",{children:"Kill process n\xe0y để chạy MITM Server?"})]})]}),(0,d.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,d.jsx)(f.$n,{variant:"ghost",size:"sm",onClick:()=>{z(null),j(!1)},disabled:i,children:"Cancel"}),(0,d.jsx)(f.$n,{variant:"primary",size:"sm",onClick:()=>{H("start",y?.password||"",!0)},loading:i,children:"Kill & Start"})]})]})})]})}var E=c(5683);function F({tool:a,isExpanded:b,onToggle:c,serverRunning:h,dnsActive:i,hasCachedPassword:j,needsSudoPassword:k,isWin:l,apiKeys:m,activeProviders:n,hasActiveProviders:o,modelAliases:p={},cloudEnabled:q,onDnsChange:r}){let[s,t]=(0,e.useState)(!1),[u,v]=(0,e.useState)(null),[w,x]=(0,e.useState)(!1),[y,z]=(0,e.useState)(""),[A,B]=(0,e.useState)(null),[C,D]=(0,e.useState)(null),[G,H]=(0,e.useState)({}),[I,J]=(0,e.useState)(!1),[K,L]=(0,e.useState)(null),M=E.TOOL_HOSTS[a.id]??[],N=l||j||!1===k,O=(0,e.useCallback)(async b=>{try{await fetch("/api/cli-tools/antigravity-mitm/alias",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({tool:a.id,mappings:b})})}catch{}},[a.id]),P=(a,b)=>{H(c=>({...c,[a]:b}))},Q=()=>{if(!h)return;let a=i?"disable":"enable";N?R(a,""):(B(a),x(!0),D(null))},R=async(b,c)=>{t(!0),v(null);try{let d=await fetch("/api/cli-tools/antigravity-mitm",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({tool:a.id,action:b,sudoPassword:c})}),e=await d.json();if(!d.ok)throw Error(e.error||"Failed to toggle DNS");"enable"===b&&v(`Restart ${a.name} to apply changes`),x(!1),z(""),r?.(e)}catch{}finally{t(!1),B(null)}},S=()=>{y.trim()?R(A,y):D("Sudo password is required")};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(f.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3 hover:cursor-pointer sm:items-center",onClick:c,children:[(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(g.default,{src:a.image,alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),h?i?(0,d.jsx)(f.Ex,{variant:"success",size:"sm",children:"Active"}):(0,d.jsx)(f.Ex,{variant:"warning",size:"sm",children:"DNS off"}):(0,d.jsx)(f.Ex,{variant:"default",size:"sm",children:"Server off"})]}),(0,d.jsxs)("p",{className:"text-xs text-text-muted sm:truncate",children:["Intercept ",a.name," requests via MITM proxy"]})]})]}),(0,d.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${b?"rotate-180":""}`,children:"expand_more"})]}),b&&(0,d.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[M.length>0&&(0,d.jsxs)("div",{className:"mt-2 rounded-md border border-border bg-surface/50 px-2 py-1.5",children:[(0,d.jsx)("p",{className:"text-[10px] font-medium tracking-wide text-text-main/80 mb-1",children:"Edit hosts file manually to add the following entries:"}),(0,d.jsx)("ul",{className:"list-none space-y-0.5 font-mono text-[10px] text-text-muted break-all",children:M.map(a=>(0,d.jsxs)("li",{children:["127.0.0.1 ",a]},a))})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-0.5 text-[11px] text-text-muted px-1",children:[(0,d.jsxs)("p",{children:["Toggle DNS to redirect ",a.name," traffic through 9Router via MITM."]}),!i&&(0,d.jsx)("p",{className:"text-amber-600 text-[10px] mt-1",children:"⚠️ Enable DNS to edit model mappings"})]}),a.defaultModels?.length>0&&(0,d.jsx)("div",{className:"flex flex-col gap-2",children:a.defaultModels.map(a=>(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[9rem_auto_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-text-main sm:text-right",children:a.name}),(0,d.jsx)("span",{className:"material-symbols-outlined hidden text-text-muted text-[14px] sm:inline",children:"arrow_forward"}),(0,d.jsxs)("div",{className:"relative w-full min-w-0",children:[(0,d.jsx)("input",{type:"text",value:G[a.alias]||"",onChange:b=>P(a.alias,b.target.value),onBlur:b=>{var c,d;return c=a.alias,d=b.target.value,void O({...G,[c]:d})},placeholder:"provider/model-id",disabled:!i,className:`w-full min-w-0 pl-2 pr-7 py-2 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50 sm:py-1.5 ${!i?"opacity-50 cursor-not-allowed":""}`}),G[a.alias]&&(0,d.jsx)("button",{onClick:()=>{P(a.alias,""),O({...G,[a.alias]:""})},className:"absolute right-1 top-1/2 -translate-y-1/2 p-0.5 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]}),(0,d.jsx)("button",{onClick:()=>{L(a.alias),J(!0)},disabled:!o||!i,className:`rounded border px-2 py-2 text-xs transition-colors sm:py-1.5 ${o&&i?"bg-surface border-border hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select"})]},a.alias))}),a.defaultModels?.length===0&&(0,d.jsx)("p",{className:"text-xs text-text-muted px-1",children:"Model mappings will be available soon."}),(0,d.jsxs)("div",{className:"flex flex-col gap-2 sm:items-start",children:[i?(0,d.jsxs)("button",{onClick:Q,disabled:!h||s,className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-red-500/30 bg-red-500/10 px-4 py-2 text-xs font-medium text-red-500 transition-colors hover:bg-red-500/20 disabled:cursor-not-allowed disabled:opacity-50 sm:w-auto sm:py-1.5",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"stop_circle"}),"Stop DNS"]}):(0,d.jsxs)("button",{onClick:Q,disabled:!h||s,className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-primary/30 bg-primary/10 px-4 py-2 text-xs font-medium text-primary transition-colors hover:bg-primary/20 disabled:cursor-not-allowed disabled:opacity-50 sm:w-auto sm:py-1.5",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"play_circle"}),"Start DNS"]}),u&&(0,d.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs text-amber-500",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"warning"}),(0,d.jsx)("span",{children:u})]})]})]})]}),w&&(0,d.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm",children:(0,d.jsxs)("div",{className:"mx-4 flex w-full max-w-sm flex-col gap-4 rounded-xl border border-border bg-surface p-5 shadow-xl sm:p-6",children:[(0,d.jsx)("h3",{className:"font-semibold text-text-main",children:"Sudo Password Required"}),(0,d.jsxs)("div",{className:"flex items-start gap-3 p-3 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-yellow-500 text-[20px]",children:"warning"}),(0,d.jsx)("p",{className:"text-xs text-text-muted",children:"Required to modify /etc/hosts and flush DNS cache"})]}),(0,d.jsx)(f.pd,{type:"password",placeholder:"Enter sudo password",value:y,onChange:a=>z(a.target.value),onKeyDown:a=>{"Enter"!==a.key||s||S()}}),C&&(0,d.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),(0,d.jsx)("span",{children:C})]}),(0,d.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,d.jsx)(f.$n,{variant:"ghost",size:"sm",onClick:()=>{x(!1),z(""),D(null)},disabled:s,children:"Cancel"}),(0,d.jsx)(f.$n,{variant:"primary",size:"sm",onClick:S,loading:s,children:"Confirm"})]})]})}),(0,d.jsx)(f.rq,{isOpen:I,onClose:()=>J(!1),onSelect:a=>{if(!K||a.isPlaceholder)return;let b={...G,[K]:a.value};H(b),O(b)},selectedModel:K?G[K]:null,activeProviders:n,modelAliases:p,title:`Select model for ${K}`})]})}var G=c(30978),H=c.n(G);function I({tool:a}){return(0,d.jsx)(H(),{href:"/dashboard/mitm",className:"block",children:(0,d.jsx)(f.Zp,{padding:"sm",className:"overflow-hidden hover:border-primary/50 transition-colors cursor-pointer",children:(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(g.default,{src:a.image,alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-purple-500/10 text-purple-600 dark:text-purple-400 rounded-full",children:"MITM"})]}),(0,d.jsx)("p",{className:"text-xs text-text-muted truncate",children:a.description})]})]}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[20px]",children:"chevron_right"})]})})})}}};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
exports.id=7061,exports.ids=[7061],exports.modules={64035:(a,b,c)=>{
|
|
1
|
+
"use strict";exports.id=7061,exports.ids=[7061],exports.modules={64035:(a,b,c)=>{c.d(b,{CG:()=>e,oG:()=>d,zE:()=>f});let d=`
|
|
2
2
|
PRAGMA journal_mode = WAL;
|
|
3
3
|
PRAGMA synchronous = NORMAL;
|
|
4
4
|
PRAGMA temp_store = MEMORY;
|
|
@@ -6,4 +6,4 @@ PRAGMA mmap_size = 30000000;
|
|
|
6
6
|
PRAGMA cache_size = -64000;
|
|
7
7
|
PRAGMA foreign_keys = ON;
|
|
8
8
|
PRAGMA busy_timeout = 5000;
|
|
9
|
-
`,e={_meta:{columns:{key:"TEXT PRIMARY KEY",value:"TEXT NOT NULL"}},settings:{columns:{id:"INTEGER PRIMARY KEY CHECK (id = 1)",data:"TEXT NOT NULL"}},providerConnections:{columns:{id:"TEXT PRIMARY KEY",provider:"TEXT NOT NULL",authType:"TEXT NOT NULL",name:"TEXT",email:"TEXT",priority:"INTEGER",isActive:"INTEGER DEFAULT 1",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pc_provider ON providerConnections(provider)","CREATE INDEX IF NOT EXISTS idx_pc_provider_active ON providerConnections(provider, isActive)","CREATE INDEX IF NOT EXISTS idx_pc_priority ON providerConnections(provider, priority)"]},providerNodes:{columns:{id:"TEXT PRIMARY KEY",type:"TEXT",name:"TEXT",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pn_type ON providerNodes(type)"]},proxyPools:{columns:{id:"TEXT PRIMARY KEY",isActive:"INTEGER DEFAULT 1",testStatus:"TEXT",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pp_active ON proxyPools(isActive)","CREATE INDEX IF NOT EXISTS idx_pp_status ON proxyPools(testStatus)"]},apiKeys:{columns:{id:"TEXT PRIMARY KEY",key:"TEXT UNIQUE NOT NULL",name:"TEXT",machineId:"TEXT",isActive:"INTEGER DEFAULT 1",createdAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_ak_key ON apiKeys(key)"]},combos:{columns:{id:"TEXT PRIMARY KEY",name:"TEXT UNIQUE NOT NULL",kind:"TEXT",models:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_combo_name ON combos(name)"]},kv:{columns:{scope:"TEXT NOT NULL",key:"TEXT NOT NULL",value:"TEXT NOT NULL"},primaryKey:"PRIMARY KEY (scope, key)",indexes:["CREATE INDEX IF NOT EXISTS idx_kv_scope ON kv(scope)"]},usageHistory:{columns:{id:"INTEGER PRIMARY KEY AUTOINCREMENT",timestamp:"TEXT NOT NULL",provider:"TEXT",model:"TEXT",connectionId:"TEXT",apiKey:"TEXT",endpoint:"TEXT",promptTokens:"INTEGER DEFAULT 0",completionTokens:"INTEGER DEFAULT 0",cost:"REAL DEFAULT 0",status:"TEXT",tokens:"TEXT",meta:"TEXT"},indexes:["CREATE INDEX IF NOT EXISTS idx_uh_ts ON usageHistory(timestamp DESC)","CREATE INDEX IF NOT EXISTS idx_uh_provider ON usageHistory(provider)","CREATE INDEX IF NOT EXISTS idx_uh_model ON usageHistory(model)","CREATE INDEX IF NOT EXISTS idx_uh_conn ON usageHistory(connectionId)"]},usageDaily:{columns:{dateKey:"TEXT PRIMARY KEY",data:"TEXT NOT NULL"}},requestDetails:{columns:{id:"TEXT PRIMARY KEY",timestamp:"TEXT NOT NULL",provider:"TEXT",model:"TEXT",connectionId:"TEXT",status:"TEXT",data:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_rd_ts ON requestDetails(timestamp DESC)","CREATE INDEX IF NOT EXISTS idx_rd_provider ON requestDetails(provider)","CREATE INDEX IF NOT EXISTS idx_rd_model ON requestDetails(model)","CREATE INDEX IF NOT EXISTS idx_rd_conn ON requestDetails(connectionId)"]}};function f(a,b){let c=Object.entries(b.columns).map(([a,b])=>`${a} ${b}`);return b.primaryKey&&c.push(b.primaryKey),`CREATE TABLE IF NOT EXISTS ${a} (${c.join(", ")})`}},76971:(a,b,c)=>{a=c.nmd(a);var d=void 0,e=function(b){return d||(d=new Promise(function(d,e){var f,g=void 0!==b?b:{},h=g.onAbort;g.onAbort=function(a){e(Error(a)),h&&h(a)},g.postRun=g.postRun||[],g.postRun.push(function(){d(g)}),a=void 0,o||=void 0!==g?g:{};var i=!!globalThis.window,j=!!globalThis.WorkerGlobalScope,k=globalThis.process?.versions?.node&&"renderer"!=globalThis.process?.type;o.onRuntimeInitialized=function(){function a(a,b){switch(typeof b){case"boolean":U(a,+!!b);break;case"number":P(a,b);break;case"string":R(a,b,-1,-1);break;case"object":if(null===b)Q(a);else if(null!=b.length){var c=bq(b.length);v.set(b,c),S(a,c,b.length,-1),br(c)}else W(a,"Wrong API use : tried to return a value of an unknown type ("+b+").",-1);break;default:Q(a)}}function b(a,b){for(var c=[],d=0;d<a;d+=1){var e=T(b+4*d,"i32"),f=K(e);if(1===f||2===f)e=O(e);else if(3===f)e=M(e);else if(4===f){e=L(f=e),f=N(f);for(var g=new Uint8Array(e),h=0;h<e;h+=1)g[h]=v[f+h];e=g}else e=null;c.push(e)}return c}function c(a,b){this.Qa=a,this.db=b,this.Oa=1,this.mb=[]}function d(a,b){if(this.db=b,this.fb=bf(a),null===this.fb)throw Error("Unable to allocate memory for the SQL string");this.lb=this.fb,this.$a=this.sb=null}function e(a){if(this.filename="dbfile_"+(0xffffffff*Math.random()>>>0),null!=a){var b=this.filename,c="/",d=b;if(c&&(c="string"==typeof c?c:aw(c),d=b?$(c+"/"+b):c),d=function(a,b=438){return aM(a,4095&b|32768,0)}(d,b=ak(!0,!0)),a){if("string"==typeof a){c=Array(a.length);for(var e=0,g=a.length;e<g;++e)c[e]=a.charCodeAt(e);a=c}aU(d,146|b),a$(c=aW(d,577),a,0,a.length,0),aX(c),aU(d,b)}}this.handleError(h(this.filename,f)),this.db=T(f,"i32"),Z(this.db),this.gb={},this.Sa={}}var f=bv(4),g=o.cwrap,h=g("sqlite3_open","number",["string","number"]),i=g("sqlite3_close_v2","number",["number"]),j=g("sqlite3_exec","number",["number","string","number","number","number"]),k=g("sqlite3_changes","number",["number"]),l=g("sqlite3_prepare_v2","number",["number","string","number","number","number"]),m=g("sqlite3_sql","string",["number"]),n=g("sqlite3_normalized_sql","string",["number"]),p=g("sqlite3_prepare_v2","number",["number","number","number","number","number"]),q=g("sqlite3_bind_text","number",["number","number","number","number","number"]),r=g("sqlite3_bind_blob","number",["number","number","number","number","number"]),s=g("sqlite3_bind_double","number",["number","number","number"]),t=g("sqlite3_bind_int","number",["number","number","number"]),u=g("sqlite3_bind_parameter_index","number",["number","string"]),w=g("sqlite3_step","number",["number"]),x=g("sqlite3_errmsg","string",["number"]),y=g("sqlite3_column_count","number",["number"]),z=g("sqlite3_data_count","number",["number"]),A=g("sqlite3_column_double","number",["number","number"]),B=g("sqlite3_column_text","string",["number","number"]),C=g("sqlite3_column_blob","number",["number","number"]),D=g("sqlite3_column_bytes","number",["number","number"]),E=g("sqlite3_column_type","number",["number","number"]),F=g("sqlite3_column_name","string",["number","number"]),G=g("sqlite3_reset","number",["number"]),H=g("sqlite3_clear_bindings","number",["number"]),I=g("sqlite3_finalize","number",["number"]),J=g("sqlite3_create_function_v2","number","number string number number number number number number number".split(" ")),K=g("sqlite3_value_type","number",["number"]),L=g("sqlite3_value_bytes","number",["number"]),M=g("sqlite3_value_text","string",["number"]),N=g("sqlite3_value_blob","number",["number"]),O=g("sqlite3_value_double","number",["number"]),P=g("sqlite3_result_double","",["number","number"]),Q=g("sqlite3_result_null","",["number"]),R=g("sqlite3_result_text","",["number","string","number","number"]),S=g("sqlite3_result_blob","",["number","number","number","number"]),U=g("sqlite3_result_int","",["number","number"]),W=g("sqlite3_result_error","",["number","string","number"]),X=g("sqlite3_aggregate_context","number",["number","number"]),Z=g("RegisterExtensionFunctions","number",["number"]),_=g("sqlite3_update_hook","number",["number","number","number"]);c.prototype.bind=function(a){if(!this.Qa)throw"Statement closed";return this.reset(),Array.isArray(a)?this.Gb(a):null==a||"object"!=typeof a||this.Hb(a)},c.prototype.step=function(){if(!this.Qa)throw"Statement closed";this.Oa=1;var a=w(this.Qa);switch(a){case 100:return!0;case 101:return!1;default:throw this.db.handleError(a)}},c.prototype.Ab=function(a){return null==a&&(a=this.Oa,this.Oa+=1),A(this.Qa,a)},c.prototype.Ob=function(a){if(null==a&&(a=this.Oa,this.Oa+=1),a=B(this.Qa,a),"function"!=typeof BigInt)throw Error("BigInt is not supported");return BigInt(a)},c.prototype.Tb=function(a){return null==a&&(a=this.Oa,this.Oa+=1),B(this.Qa,a)},c.prototype.getBlob=function(a){null==a&&(a=this.Oa,this.Oa+=1);var b=D(this.Qa,a);a=C(this.Qa,a);for(var c=new Uint8Array(b),d=0;d<b;d+=1)c[d]=v[a+d];return c},c.prototype.get=function(a,b){b=b||{},null!=a&&this.bind(a)&&this.step(),a=[];for(var c=z(this.Qa),d=0;d<c;d+=1)switch(E(this.Qa,d)){case 1:var e=b.useBigInt?this.Ob(d):this.Ab(d);a.push(e);break;case 2:a.push(this.Ab(d));break;case 3:a.push(this.Tb(d));break;case 4:a.push(this.getBlob(d));break;default:a.push(null)}return a},c.prototype.qb=function(){for(var a=[],b=y(this.Qa),c=0;c<b;c+=1)a.push(F(this.Qa,c));return a},c.prototype.zb=function(a,b){a=this.get(a,b),b=this.qb();for(var c={},d=0;d<b.length;d+=1)c[b[d]]=a[d];return c},c.prototype.Sb=function(){return m(this.Qa)},c.prototype.Pb=function(){return n(this.Qa)},c.prototype.run=function(a){return null!=a&&this.bind(a),this.step(),this.reset()},c.prototype.wb=function(a,b){null==b&&(b=this.Oa,this.Oa+=1),a=bf(a),this.mb.push(a),this.db.handleError(q(this.Qa,b,a,-1,0))},c.prototype.Fb=function(a,b){null==b&&(b=this.Oa,this.Oa+=1);var c=bq(a.length);v.set(a,c),this.mb.push(c),this.db.handleError(r(this.Qa,b,c,a.length,0))},c.prototype.vb=function(a,b){null==b&&(b=this.Oa,this.Oa+=1),this.db.handleError((a===(0|a)?t:s)(this.Qa,b,a))},c.prototype.Ib=function(a){null==a&&(a=this.Oa,this.Oa+=1),r(this.Qa,a,0,0,0)},c.prototype.xb=function(a,b){switch(null==b&&(b=this.Oa,this.Oa+=1),typeof a){case"string":this.wb(a,b);return;case"number":this.vb(a,b);return;case"bigint":this.wb(a.toString(),b);return;case"boolean":this.vb(a+0,b);return;case"object":if(null===a)return void this.Ib(b);if(null!=a.length)return void this.Fb(a,b)}throw"Wrong API use : tried to bind a value of an unknown type ("+a+")."},c.prototype.Hb=function(a){var b=this;return Object.keys(a).forEach(function(c){var d=u(b.Qa,c);0!==d&&b.xb(a[c],d)}),!0},c.prototype.Gb=function(a){for(var b=0;b<a.length;b+=1)this.xb(a[b],b+1);return!0},c.prototype.reset=function(){return this.freemem(),0===H(this.Qa)&&0===G(this.Qa)},c.prototype.freemem=function(){for(var a;void 0!==(a=this.mb.pop());)br(a)},c.prototype.Ya=function(){this.freemem();var a=0===I(this.Qa);return delete this.db.gb[this.Qa],this.Qa=0,a},d.prototype.next=function(){if(null===this.fb)return{done:!0};if(null!==this.$a&&(this.$a.Ya(),this.$a=null),!this.db.db)throw this.ob(),Error("Database closed");var a=bw(),b=bv(4);V(f),V(b);try{this.db.handleError(p(this.db.db,this.lb,-1,f,b)),this.lb=T(b,"i32");var d=T(f,"i32");if(0===d)return this.ob(),{done:!0};return this.$a=new c(d,this.db),this.db.gb[d]=this.$a,{value:this.$a,done:!1}}catch(a){throw this.sb=Y(this.lb),this.ob(),a}finally{bu(a)}},d.prototype.ob=function(){br(this.fb),this.fb=null},d.prototype.Qb=function(){return null!==this.sb?this.sb:Y(this.lb)},"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator&&(d.prototype[Symbol.iterator]=function(){return this}),e.prototype.run=function(a,b){if(!this.db)throw"Database closed";if(b){a=this.tb(a,b);try{a.step()}finally{a.Ya()}}else this.handleError(j(this.db,a,0,0,f));return this},e.prototype.exec=function(a,b,d){if(!this.db)throw"Database closed";var e=null,g=null,h=null;try{h=g=bf(a);var i=bv(4);for(a=[];0!==T(h,"i8");){V(f),V(i),this.handleError(p(this.db,h,-1,f,i));var j=T(f,"i32");if(h=T(i,"i32"),0!==j){var k=null;for(e=new c(j,this),null!=b&&e.bind(b);e.step();)null===k&&(k={columns:e.qb(),values:[]},a.push(k)),k.values.push(e.get(null,d));e.Ya()}}return a}catch(a){throw e&&e.Ya(),a}finally{g&&br(g)}},e.prototype.Mb=function(a,b,c,d,e){"function"==typeof b&&(d=c,c=b,b=void 0),a=this.tb(a,b);try{for(;a.step();)c(a.zb(null,e))}finally{a.Ya()}if("function"==typeof d)return d()},e.prototype.tb=function(a,b){if(V(f),this.handleError(l(this.db,a,-1,f,0)),0===(a=T(f,"i32")))throw"Nothing to prepare";var d=new c(a,this);return null!=b&&d.bind(b),this.gb[a]=d},e.prototype.Ub=function(a){return new d(a,this)},e.prototype.Nb=function(){Object.values(this.gb).forEach(function(a){a.Ya()}),Object.values(this.Sa).forEach(bh),this.Sa={},this.handleError(i(this.db));var a,b,c,d=(a=this.filename,b=aW(a,b=b||0),aZ(b,c=new Uint8Array(a=aS(a).size),0,a,0),aX(b),c);return this.handleError(h(this.filename,f)),this.db=T(f,"i32"),Z(this.db),d},e.prototype.close=function(){null!==this.db&&(Object.values(this.gb).forEach(function(a){a.Ya()}),Object.values(this.Sa).forEach(bh),this.Sa={},this.Za&&(bh(this.Za),this.Za=void 0),this.handleError(i(this.db)),aR("/"+this.filename),this.db=null)},e.prototype.handleError=function(a){if(0===a)return null;throw Error(a=x(this.db))},e.prototype.Rb=function(){return k(this.db)},e.prototype.Kb=function(c,d){Object.prototype.hasOwnProperty.call(this.Sa,c)&&(bh(this.Sa[c]),delete this.Sa[c]);var e=bl(function(c,e,f){e=b(e,f);try{var g=d.apply(null,e)}catch(a){W(c,a,-1);return}a(c,g)},"viii");return this.Sa[c]=e,this.handleError(J(this.db,c,d.length,1,0,e,0,0,0)),this},e.prototype.Jb=function(c,d){var e=d.init||function(){return null},f=d.finalize||function(a){return a},g=d.step;if(!g)throw"An aggregate function must have a step function in "+c;var h={};Object.hasOwnProperty.call(this.Sa,c)&&(bh(this.Sa[c]),delete this.Sa[c]),d=c+"__finalize",Object.hasOwnProperty.call(this.Sa,d)&&(bh(this.Sa[d]),delete this.Sa[d]);var i=bl(function(a,c,d){var f=X(a,1);Object.hasOwnProperty.call(h,f)||(h[f]=e()),c=b(c,d),c=[h[f]].concat(c);try{h[f]=g.apply(null,c)}catch(b){delete h[f],W(a,b,-1)}},"viii"),j=bl(function(b){var c=X(b,1);try{var d=f(h[c])}catch(a){delete h[c],W(b,a,-1);return}a(b,d),delete h[c]},"vi");return this.Sa[c]=i,this.Sa[d]=j,this.handleError(J(this.db,c,g.length-1,1,0,0,i,j,0)),this},e.prototype.Zb=function(a){return this.Za&&(_(this.db,0,0),bh(this.Za),this.Za=void 0),a&&(this.Za=bl(function(b,c,d,e,f){switch(c){case 18:b="insert";break;case 23:b="update";break;case 9:b="delete";break;default:throw"unknown operationCode in updateHook callback: "+c}if(d=Y(d),e=Y(e),f>Number.MAX_SAFE_INTEGER)throw"rowId too big to fit inside a Number";a(b,d,e,Number(f))},"viiiij"),_(this.db,this.Za,0)),this},c.prototype.bind=c.prototype.bind,c.prototype.step=c.prototype.step,c.prototype.get=c.prototype.get,c.prototype.getColumnNames=c.prototype.qb,c.prototype.getAsObject=c.prototype.zb,c.prototype.getSQL=c.prototype.Sb,c.prototype.getNormalizedSQL=c.prototype.Pb,c.prototype.run=c.prototype.run,c.prototype.reset=c.prototype.reset,c.prototype.freemem=c.prototype.freemem,c.prototype.free=c.prototype.Ya,d.prototype.next=d.prototype.next,d.prototype.getRemainingSQL=d.prototype.Qb,e.prototype.run=e.prototype.run,e.prototype.exec=e.prototype.exec,e.prototype.each=e.prototype.Mb,e.prototype.prepare=e.prototype.tb,e.prototype.iterateStatements=e.prototype.Ub,e.prototype.export=e.prototype.Nb,e.prototype.close=e.prototype.close,e.prototype.handleError=e.prototype.handleError,e.prototype.getRowsModified=e.prototype.Rb,e.prototype.create_function=e.prototype.Kb,e.prototype.create_aggregate=e.prototype.Jb,e.prototype.updateHook=e.prototype.Zb,o.Database=e};var l="./this.program",m=(a,b)=>{throw b},n=globalThis.document?.currentScript?.src;n=__filename;var o,p,q,r="";if(k){var s=c(73024);r=__dirname+"/",q=a=>(a=G(a)?new URL(a):a,s.readFileSync(a)),p=async a=>(a=G(a)?new URL(a):a,s.readFileSync(a,void 0)),1<process.argv.length&&(l=process.argv[1].replace(/\\/g,"/")),process.argv.slice(2),a.exports=o,m=(a,b)=>{throw process.exitCode=a,b}}else if(i||j){try{r=new URL(".",n).href}catch{}j&&(q=a=>{var b=new XMLHttpRequest;return b.open("GET",a,!1),b.responseType="arraybuffer",b.send(null),new Uint8Array(b.response)}),p=async a=>{if(G(a))return new Promise((b,c)=>{var d=new XMLHttpRequest;d.open("GET",a,!0),d.responseType="arraybuffer",d.onload=()=>{200==d.status||0==d.status&&d.response?b(d.response):c(d.status)},d.onerror=c,d.send(null)});var b=await fetch(a,{credentials:"same-origin"});if(b.ok)return b.arrayBuffer();throw Error(b.status+" : "+b.url)}}var t,u,v,w,x,y,z,A,B,C,D=console.log.bind(console),E=console.error.bind(console),F=!1,G=a=>a.startsWith("file://");function H(){var a=bx.buffer;v=new Int8Array(a),x=new Int16Array(a),w=new Uint8Array(a),new Uint16Array(a),y=new Int32Array(a),z=new Uint32Array(a),A=new Float32Array(a),B=new Float64Array(a),C=new BigInt64Array(a),new BigUint64Array(a)}function I(a){throw o.onAbort?.(a),E(a="Aborted("+a+")"),F=!0,new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.")}async function J(a){if(!t)try{var b=await p(a);return new Uint8Array(b)}catch{}if(a==a3&&t)a=new Uint8Array(t);else if(q)a=q(a);else throw"both async and sync fetching of the wasm failed";return a}async function K(a,b){try{var c=await J(a);return await WebAssembly.instantiate(c,b)}catch(a){E(`failed to asynchronously prepare wasm: ${a}`),I(a)}}async function L(a){if(!t&&!G(a3)&&!k)try{var b=fetch(a3,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(b,a)}catch(a){E(`wasm streaming compile failed: ${a}`),E("falling back to ArrayBuffer instantiation")}return K(a3,a)}class M{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`,this.status=a}}var N=a=>{for(;0<a.length;)a.shift()(o)},O=[],P=[],Q=()=>{var a=o.preRun.shift();P.push(a)},R=0,S=null;function T(a,b="i8"){switch(b.endsWith("*")&&(b="*"),b){case"i1":case"i8":return v[a];case"i16":return x[a>>1];case"i32":return y[a>>2];case"i64":return C[a>>3];case"float":return A[a>>2];case"double":return B[a>>3];case"*":return z[a>>2];default:I(`invalid type for getValue: ${b}`)}}var U=!0;function V(a){var b="i32";switch(b.endsWith("*")&&(b="*"),b){case"i1":case"i8":v[a]=0;break;case"i16":x[a>>1]=0;break;case"i32":y[a>>2]=0;break;case"i64":C[a>>3]=BigInt(0);break;case"float":A[a>>2]=0;break;case"double":B[a>>3]=0;break;case"*":z[a>>2]=0;break;default:I(`invalid type for setValue: ${b}`)}}var W=new TextDecoder,X=(a,b,c,d)=>{if(c=b+c,d)return c;for(;a[b]&&!(b>=c);)++b;return b},Y=(a,b,c)=>a?W.decode(w.subarray(a,X(w,a,b,c))):"",Z=(a,b)=>{for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},$=a=>{var b="/"===a.charAt(0),c="/"===a.slice(-1);return(a=Z(a.split("/").filter(a=>!!a),!b).join("/"))||b||(a="."),a&&c&&(a+="/"),(b?"/":"")+a},_=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);return(a=b[0],b=b[1],a||b)?a+(b&&=b.slice(0,-1)):"."},aa=a=>a&&a.match(/([^\/]+|\/)\/*$/)[1],ab=a=>{(ab=(()=>{if(k){var a=c(77598);return b=>a.randomFillSync(b)}return a=>crypto.getRandomValues(a)})())(a)},ac=a=>{var b=X(a,0);return W.decode(a.buffer?a.subarray(0,b):new Uint8Array(a.slice(0,b)))},ad=[],ae=a=>{for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);127>=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},af=(a,b,c,d)=>{if(!(0<d))return 0;var e=c;d=c+d-1;for(var f=0;f<a.length;++f){var g=a.codePointAt(f);if(127>=g){if(c>=d)break;b[c++]=g}else if(2047>=g){if(c+1>=d)break;b[c++]=192|g>>6,b[c++]=128|63&g}else if(65535>=g){if(c+2>=d)break;b[c++]=224|g>>12,b[c++]=128|g>>6&63,b[c++]=128|63&g}else{if(c+3>=d)break;b[c++]=240|g>>18,b[c++]=128|g>>12&63,b[c++]=128|g>>6&63,b[c++]=128|63&g,f++}}return b[c]=0,c-e},ag=[];function ah(a,b){ag[a]={input:[],output:[],eb:b},aK(a,ai)}var ai={open(a){var b=ag[a.node.rdev];if(!b)throw new as(43);a.tty=b,a.seekable=!1},close(a){a.tty.eb.fsync(a.tty)},fsync(a){a.tty.eb.fsync(a.tty)},read(a,b,c,d){if(!a.tty||!a.tty.eb.Bb)throw new as(60);for(var e=0,f=0;f<d;f++){try{var g=a.tty.eb.Bb(a.tty)}catch(a){throw new as(29)}if(void 0===g&&0===e)throw new as(6);if(null==g)break;e++,b[c+f]=g}return e&&(a.node.atime=Date.now()),e},write(a,b,c,d){if(!a.tty||!a.tty.eb.ub)throw new as(60);try{for(var e=0;e<d;e++)a.tty.eb.ub(a.tty,b[c+e])}catch(a){throw new as(29)}return d&&(a.node.mtime=a.node.ctime=Date.now()),e}},aj={Wa:null,Xa:()=>aj.createNode(null,"/",16895,0),createNode(a,b,c,d){if(24576==(61440&c)||4096==(61440&c))throw new as(63);return aj.Wa||(aj.Wa={dir:{node:{Ta:aj.La.Ta,Ua:aj.La.Ua,lookup:aj.La.lookup,ib:aj.La.ib,rename:aj.La.rename,unlink:aj.La.unlink,rmdir:aj.La.rmdir,readdir:aj.La.readdir,symlink:aj.La.symlink},stream:{Va:aj.Ma.Va}},file:{node:{Ta:aj.La.Ta,Ua:aj.La.Ua},stream:{Va:aj.Ma.Va,read:aj.Ma.read,write:aj.Ma.write,jb:aj.Ma.jb,kb:aj.Ma.kb}},link:{node:{Ta:aj.La.Ta,Ua:aj.La.Ua,readlink:aj.La.readlink},stream:{}},yb:{node:{Ta:aj.La.Ta,Ua:aj.La.Ua},stream:aJ}}),aB((c=aA(a,b,c,d)).mode)?(c.La=aj.Wa.dir.node,c.Ma=aj.Wa.dir.stream,c.Na={}):32768==(61440&c.mode)?(c.La=aj.Wa.file.node,c.Ma=aj.Wa.file.stream,c.Ra=0,c.Na=null):40960==(61440&c.mode)?(c.La=aj.Wa.link.node,c.Ma=aj.Wa.link.stream):8192==(61440&c.mode)&&(c.La=aj.Wa.yb.node,c.Ma=aj.Wa.yb.stream),c.atime=c.mtime=c.ctime=Date.now(),a&&(a.Na[b]=c,a.atime=a.mtime=a.ctime=c.atime),c},fc:a=>a.Na?a.Na.subarray?a.Na.subarray(0,a.Ra):new Uint8Array(a.Na):new Uint8Array(0),La:{Ta(a){var b={};return b.dev=8192==(61440&a.mode)?a.id:1,b.ino=a.id,b.mode=a.mode,b.nlink=1,b.uid=0,b.gid=0,b.rdev=a.rdev,aB(a.mode)?b.size=4096:32768==(61440&a.mode)?b.size=a.Ra:40960==(61440&a.mode)?b.size=a.link.length:b.size=0,b.atime=new Date(a.atime),b.mtime=new Date(a.mtime),b.ctime=new Date(a.ctime),b.blksize=4096,b.blocks=Math.ceil(b.size/b.blksize),b},Ua(a,b){for(var c of["mode","atime","mtime","ctime"])null!=b[c]&&(a[c]=b[c]);void 0!==b.size&&(b=b.size,a.Ra!=b&&(0==b?(a.Na=null,a.Ra=0):(c=a.Na,a.Na=new Uint8Array(b),c&&a.Na.set(c.subarray(0,Math.min(b,a.Ra))),a.Ra=b)))},lookup(){throw aj.nb||(aj.nb=new as(44),aj.nb.stack="<generic error, no stack>"),aj.nb},ib:(a,b,c,d)=>aj.createNode(a,b,c,d),rename(a,b,c){try{var d=az(b,c)}catch(a){}if(d){if(aB(a.mode))for(var e in d.Na)throw new as(55);ay(d)}delete a.parent.Na[a.name],b.Na[c]=a,a.name=c,b.ctime=b.mtime=a.parent.ctime=a.parent.mtime=Date.now()},unlink(a,b){delete a.Na[b],a.ctime=a.mtime=Date.now()},rmdir(a,b){var c,d=az(a,b);for(c in d.Na)throw new as(55);delete a.Na[b],a.ctime=a.mtime=Date.now()},readdir:a=>[".","..",...Object.keys(a.Na)],symlink:(a,b,c)=>((a=aj.createNode(a,b,41471,0)).link=c,a),readlink(a){if(40960!=(61440&a.mode))throw new as(28);return a.link}},Ma:{read(a,b,c,d,e){var f=a.node.Na;if(e>=a.node.Ra)return 0;if(8<(a=Math.min(a.node.Ra-e,d))&&f.subarray)b.set(f.subarray(e,e+a),c);else for(d=0;d<a;d++)b[c+d]=f[e+d];return a},write(a,b,c,d,e,f){if(b.buffer===v.buffer&&(f=!1),!d)return 0;if((a=a.node).mtime=a.ctime=Date.now(),b.subarray&&(!a.Na||a.Na.subarray)){if(f)return a.Na=b.subarray(c,c+d),a.Ra=d;if(0===a.Ra&&0===e)return a.Na=b.slice(c,c+d),a.Ra=d;if(e+d<=a.Ra)return a.Na.set(b.subarray(c,c+d),e),d}f=e+d;var g=a.Na?a.Na.length:0;if(g>=f||(f=Math.max(f,g*(1048576>g?2:1.125)>>>0),0!=g&&(f=Math.max(f,256)),g=a.Na,a.Na=new Uint8Array(f),0<a.Ra&&a.Na.set(g.subarray(0,a.Ra),0)),a.Na.subarray&&b.subarray)a.Na.set(b.subarray(c,c+d),e);else for(f=0;f<d;f++)a.Na[e+f]=b[c+f];return a.Ra=Math.max(a.Ra,e+d),d},Va(a,b,c){if(1===c?b+=a.position:2===c&&32768==(61440&a.node.mode)&&(b+=a.node.Ra),0>b)throw new as(28);return b},jb(a,b,c,d,e){if(32768!=(61440&a.node.mode))throw new as(43);if(a=a.node.Na,2&e||!a||a.buffer!==v.buffer){e=!0;var f=bs(65536,d=65536*Math.ceil(b/65536));if(f&&w.fill(0,f,f+d),!(d=f))throw new as(48);a&&((0<c||c+b<a.length)&&(a=a.subarray?a.subarray(c,c+b):Array.prototype.slice.call(a,c,c+b)),v.set(a,d))}else e=!1,d=a.byteOffset;return{Xb:d,Eb:e}},kb:(a,b,c,d)=>(aj.Ma.write(a,b,0,d,c,!1),0)}},ak=(a,b)=>{var c=0;return a&&(c|=365),b&&(c|=146),c},al=null,am={},an=[],ao=1,ap=null,aq=!1,ar=!0,as=class{name="ErrnoError";constructor(a){this.Pa=a}},at=class{hb={};node=null;get flags(){return this.hb.flags}set flags(a){this.hb.flags=a}get position(){return this.hb.position}set position(a){this.hb.position=a}},au=class{La={};Ma={};bb=null;constructor(a,b,c,d){a||=this,this.parent=a,this.Xa=a.Xa,this.id=ao++,this.name=b,this.mode=c,this.rdev=d,this.atime=this.mtime=this.ctime=Date.now()}get read(){return 365==(365&this.mode)}set read(a){a?this.mode|=365:this.mode&=-366}get write(){return 146==(146&this.mode)}set write(a){a?this.mode|=146:this.mode&=-147}};function av(a,b={}){if(!a)throw new as(44);b.pb??(b.pb=!0),"/"===a.charAt(0)||(a="//"+a);var c=0;a:for(;40>c;c++){a=a.split("/").filter(a=>!!a);for(var d=al,e="/",f=0;f<a.length;f++){var g=f===a.length-1;if(g&&b.parent)break;if("."!==a[f])if(".."===a[f])if(e=_(e),d===d.parent){a=e+"/"+a.slice(f+1).join("/"),c--;continue a}else d=d.parent;else{e=$(e+"/"+a[f]);try{d=az(d,a[f])}catch(a){if(44===a?.Pa&&g&&b.Wb)return{path:e};throw a}if(d.bb&&(!g||b.pb)&&(d=d.bb.root),40960==(61440&d.mode)&&(!g||b.ab)){if(!d.La.readlink)throw new as(52);"/"===(d=d.La.readlink(d)).charAt(0)||(d=_(e)+"/"+d),a=d+"/"+a.slice(f+1).join("/");continue a}}}return{path:e,node:d}}throw new as(32)}function aw(a){for(var b;;){if(a===a.parent)return a=a.Xa.Db,b?"/"!==a[a.length-1]?`${a}/${b}`:a+b:a;b=b?`${a.name}/${b}`:a.name,a=a.parent}}function ax(a,b){for(var c=0,d=0;d<b.length;d++)c=(c<<5)-c+b.charCodeAt(d)|0;return(a+c>>>0)%ap.length}function ay(a){var b=ax(a.parent.id,a.name);if(ap[b]===a)ap[b]=a.cb;else for(b=ap[b];b;){if(b.cb===a){b.cb=a.cb;break}b=b.cb}}function az(a,b){var c=aB(a.mode)?(c=aC(a,"x"))?c:2*!a.La.lookup:54;if(c)throw new as(c);for(c=ap[ax(a.id,b)];c;c=c.cb){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.La.lookup(a,b)}function aA(a,b,c,d){return b=ax((a=new au(a,b,c,d)).parent.id,a.name),a.cb=ap[b],ap[b]=a}function aB(a){return 16384==(61440&a)}function aC(a,b){return ar?0:b.includes("r")&&!(292&a.mode)||b.includes("w")&&!(146&a.mode)||b.includes("x")&&!(73&a.mode)?2:0}function aD(a,b){if(!aB(a.mode))return 54;try{return az(a,b),20}catch(a){}return aC(a,"wx")}function aE(a,b,c){try{var d=az(a,b)}catch(a){return a.Pa}if(a=aC(a,"wx"))return a;if(c){if(!aB(d.mode))return 54;if(d===d.parent||"/"===aw(d))return 10}else if(aB(d.mode))return 31;return 0}function aF(a){if(!a)throw new as(63);return a}function aG(a){if(!(a=an[a]))throw new as(8);return a}function aH(a,b=-1){if(a=Object.assign(new at,a),-1==b)a:{for(b=0;4096>=b;b++)if(!an[b])break a;throw new as(33)}return a.fd=b,an[b]=a}function aI(a,b,c){var d=a?.Ma.Ua;a=d?a:b,aF(d??=b.La.Ua),d(a,c)}var aJ={open(a){a.Ma=am[a.node.rdev].Ma,a.Ma.open?.(a)},Va(){throw new as(70)}};function aK(a,b){am[a]={Ma:b}}function aL(a,b){var c="/"===b;if(c&&al)throw new as(10);if(!c&&b){var d=av(b,{pb:!1});if(b=d.path,(d=d.node).bb)throw new as(10);if(!aB(d.mode))throw new as(54)}b={type:a,kc:{},Db:b,Vb:[]},(a=a.Xa(b)).Xa=b,b.root=a,c?al=a:d&&(d.bb=b,d.Xa&&d.Xa.Vb.push(b))}function aM(a,b,c){var d=av(a,{parent:!0}).node;if(!(a=aa(a)))throw new as(28);if("."===a||".."===a)throw new as(20);var e=aD(d,a);if(e)throw new as(e);if(!d.La.ib)throw new as(63);return d.La.ib(d,a,b,c)}function aN(a,b=511){return aM(a,1023&b|16384,0)}function aO(a,b,c){void 0===c&&(c=b,b=438),aM(a,8192|b,c)}function aP(a,b){if(!((...a)=>{for(var b="",c=!1,d=a.length-1;-1<=d&&!c;d--){if("string"!=typeof(c=0<=d?a[d]:"/"))throw TypeError("Arguments to path.resolve must be strings");if(!c)return"";b=c+"/"+b,c="/"===c.charAt(0)}return b=Z(b.split("/").filter(a=>!!a),!c).join("/"),(c?"/":"")+b||"."})(a))throw new as(44);var c=av(b,{parent:!0}).node;if(!c)throw new as(44);var d=aD(c,b=aa(b));if(d)throw new as(d);if(!c.La.symlink)throw new as(63);c.La.symlink(c,b,a)}function aQ(a){var b=av(a,{parent:!0}).node,c=az(b,a=aa(a)),d=aE(b,a,!0);if(d)throw new as(d);if(!b.La.rmdir)throw new as(63);if(c.bb)throw new as(10);b.La.rmdir(b,a),ay(c)}function aR(a){var b=av(a,{parent:!0}).node;if(!b)throw new as(44);var c=az(b,a=aa(a)),d=aE(b,a,!1);if(d)throw new as(d);if(!b.La.unlink)throw new as(63);if(c.bb)throw new as(10);b.La.unlink(b,a),ay(c)}function aS(a,b){return aF((a=av(a,{ab:!b}).node).La.Ta)(a)}function aT(a,b,c,d){aI(a,b,{mode:4095&c|-4096&b.mode,ctime:Date.now(),Lb:d})}function aU(a,b){aT(null,a="string"==typeof a?av(a,{ab:!0}).node:a,b)}function aV(a,b,c){if(aB(b.mode))throw new as(31);if(32768!=(61440&b.mode))throw new as(28);var d=aC(b,"w");if(d)throw new as(d);aI(a,b,{size:c,timestamp:Date.now()})}function aW(a,b,c=438){if(""===a)throw new as(44);if("string"==typeof b){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if(void 0===d)throw Error(`Unknown file open mode: ${b}`);b=d}if(c=64&b?4095&c|32768:0,"object"==typeof a)d=a;else{var e=a.endsWith("/"),f=av(a,{ab:!(131072&b),Wb:!0});d=f.node,a=f.path}if(f=!1,64&b)if(d){if(128&b)throw new as(20)}else{if(e)throw new as(31);d=aM(a,511|c,0),f=!0}if(!d)throw new as(44);if(8192==(61440&d.mode)&&(b&=-513),65536&b&&!aB(d.mode))throw new as(54);if(!f&&(d?40960==(61440&d.mode)?e=32:(e=["r","w","rw"][3&b],512&b&&(e+="w"),e=aB(d.mode)&&("r"!==e||576&b)?31:aC(d,e)):e=44,e))throw new as(e);return 512&b&&!f&&aV(null,e="string"==typeof(e=d)?av(e,{ab:!0}).node:e,0),(b=aH({node:d,path:aw(d),flags:-131713&b,seekable:!0,position:0,Ma:d.Ma,Yb:[],error:!1})).Ma.open&&b.Ma.open(b),f&&aU(d,511&c),b}function aX(a){if(null===a.fd)throw new as(8);a.rb&&(a.rb=null);try{a.Ma.close&&a.Ma.close(a)}catch(a){throw a}finally{an[a.fd]=null}a.fd=null}function aY(a,b,c){if(null===a.fd)throw new as(8);if(!a.seekable||!a.Ma.Va)throw new as(70);if(0!=c&&1!=c&&2!=c)throw new as(28);a.position=a.Ma.Va(a,b,c),a.Yb=[]}function aZ(a,b,c,d,e){if(0>d||0>e)throw new as(28);if(null===a.fd||1==(2097155&a.flags))throw new as(8);if(aB(a.node.mode))throw new as(31);if(!a.Ma.read)throw new as(28);var f=void 0!==e;if(f){if(!a.seekable)throw new as(70)}else e=a.position;return b=a.Ma.read(a,b,c,d,e),f||(a.position+=b),b}function a$(a,b,c,d,e){if(0>d||0>e)throw new as(28);if(null===a.fd||0==(2097155&a.flags))throw new as(8);if(aB(a.node.mode))throw new as(31);if(!a.Ma.write)throw new as(28);a.seekable&&1024&a.flags&&aY(a,0,2);var f=void 0!==e;if(f){if(!a.seekable)throw new as(70)}else e=a.position;return b=a.Ma.write(a,b,c,d,e,void 0),f||(a.position+=b),b}function a_(a,b,c){a=$("/dev/"+a);var d=ak(!!b,!!c);a_.Cb??(a_.Cb=64);var e=a_.Cb++<<8;aK(e,{open(a){a.seekable=!1},close(){c?.buffer?.length&&c(10)},read(a,c,d,e){for(var f=0,g=0;g<e;g++){try{var h=b()}catch(a){throw new as(29)}if(void 0===h&&0===f)throw new as(6);if(null==h)break;f++,c[d+g]=h}return f&&(a.node.atime=Date.now()),f},write(a,b,d,e){for(var f=0;f<e;f++)try{c(b[d+f])}catch(a){throw new as(29)}return e&&(a.node.mtime=a.node.ctime=Date.now()),f}}),aO(a,d,e)}var a0={};function a1(a,b,c){if("/"===b.charAt(0))return b;if(a=-100===a?"/":aG(a).path,0==b.length){if(!c)throw new as(44);return a}return a+"/"+b}function a2(a,b){z[a>>2]=b.dev,z[a+4>>2]=b.mode,z[a+8>>2]=b.nlink,z[a+12>>2]=b.uid,z[a+16>>2]=b.gid,z[a+20>>2]=b.rdev,C[a+24>>3]=BigInt(b.size),y[a+32>>2]=4096,y[a+36>>2]=b.blocks;var c=b.atime.getTime(),d=b.mtime.getTime(),e=b.ctime.getTime();return C[a+40>>3]=BigInt(Math.floor(c/1e3)),z[a+48>>2]=c%1e3*1e6,C[a+56>>3]=BigInt(Math.floor(d/1e3)),z[a+64>>2]=d%1e3*1e6,C[a+72>>3]=BigInt(Math.floor(e/1e3)),z[a+80>>2]=e%1e3*1e6,C[a+88>>3]=BigInt(b.ino),0}var a3,a4,a5,a6=void 0,a7=()=>{var a=y[a6>>2];return a6+=4,a},a8=0,a9=[0,31,60,91,121,152,182,213,244,274,305,335],ba=[0,31,59,90,120,151,181,212,243,273,304,334],bb={},bc=a=>{u=a,U||0<a8||(o.onExit?.(a),F=!0),m(a,new M(a))},bd={},be=()=>{if(!a4){var a,b={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8",_:l||"./this.program"};for(a in bd)void 0===bd[a]?delete b[a]:b[a]=bd[a];var c=[];for(a in b)c.push(`${a}=${b[a]}`);a4=c}return a4},bf=a=>{var b=ae(a)+1,c=bq(b);return c&&af(a,w,c,b),c},bg=[],bh=a=>{a5.delete(by.get(a)),by.set(a,null),bg.push(a)},bi=a=>{let b=a.length;return[b%128|128,b>>7,...a]},bj={i:127,p:127,j:126,f:125,d:124,e:111},bk=a=>bi(Array.from(a,a=>bj[a])),bl=(a,b)=>{if(!a5){a5=new WeakMap;var c=by.length;if(a5)for(var d=0;d<0+c;d++){var e=by.get(d);e&&a5.set(e,d)}}if(c=a5.get(a)||0)return c;c=bg.length?bg.pop():by.grow(1);try{by.set(c,a)}catch(d){if(!(d instanceof TypeError))throw d;b=Uint8Array.of(0,97,115,109,1,0,0,0,1,...bi([1,96,...bk(b.slice(1)),...bk("v"===b[0]?"":b[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),b=new WebAssembly.Module(b),b=new WebAssembly.Instance(b,{e:{f:a}}).exports.f,by.set(c,b)}return a5.set(a,c),c};if(ap=Array(4096),aL(aj,"/"),aN("/tmp"),aN("/home"),aN("/home/web_user"),aN("/dev"),aK(259,{read:()=>0,write:(a,b,c,d)=>d,Va:()=>0}),aO("/dev/null",259),ah(1280,{Bb(){a:{if(!ad.length){var a=null;if(k){var b=Buffer.alloc(256),c=0,d=process.stdin.fd;try{c=s.readSync(d,b,0,256)}catch(a){if(a.toString().includes("EOF"))c=0;else throw a}0<c&&(a=b.slice(0,c).toString("utf-8"))}else globalThis.window?.prompt&&null!==(a=window.prompt("Input: "))&&(a+="\n");if(!a){a=null;break a}b=Array(ae(a)+1),a=af(a,b,0,b.length),b.length=a,ad=b}a=ad.shift()}return a},ub(a,b){null===b||10===b?(D(ac(a.output)),a.output=[]):0!=b&&a.output.push(b)},fsync(a){0<a.output?.length&&(D(ac(a.output)),a.output=[])},hc:()=>({bc:25856,dc:5,ac:191,cc:35387,$b:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}),ic:()=>0,jc:()=>[24,80]}),ah(1536,{ub(a,b){null===b||10===b?(E(ac(a.output)),a.output=[]):0!=b&&a.output.push(b)},fsync(a){0<a.output?.length&&(E(ac(a.output)),a.output=[])}}),aO("/dev/tty",1280),aO("/dev/tty1",1536),bm=new Uint8Array(1024),bn=0,a_("random",bo=()=>(0===bn&&(ab(bm),bn=bm.byteLength),bm[--bn])),a_("urandom",bo),aN("/dev/shm"),aN("/dev/shm/tmp"),aN("/proc"),bp=aN("/proc/self"),aN("/proc/self/fd"),aL({Xa(){var a=aA(bp,"fd",16895,73);return a.Ma={Va:aj.Ma.Va},a.La={lookup(a,b){var c=aG(a=+b);return(a={parent:null,Xa:{Db:"fake"},La:{readlink:()=>c.path},id:a+1}).parent=a},readdir:()=>Array.from(an.entries()).filter(([,a])=>a).map(([a])=>a.toString())},a}},"/proc/self/fd"),o.noExitRuntime&&(U=o.noExitRuntime),o.print&&(D=o.print),o.printErr&&(E=o.printErr),o.wasmBinary&&(t=o.wasmBinary),o.thisProgram&&(l=o.thisProgram),o.preInit)for("function"==typeof o.preInit&&(o.preInit=[o.preInit]);0<o.preInit.length;)o.preInit.shift()();o.stackSave=()=>bw(),o.stackRestore=a=>bu(a),o.stackAlloc=a=>bv(a),o.cwrap=(a,b,c,d)=>{var e=!c||c.every(a=>"number"===a||"boolean"===a);return"string"!==b&&e&&!d?o["_"+a]:(...d)=>((a,b,c,d)=>{var e,f={string:a=>{var b=0;if(null!=a&&0!==a){b=ae(a)+1;var c=bv(b);af(a,w,c,b),b=c}return b},array:a=>{var b=bv(a.length);return v.set(a,b),b}};a=o["_"+a];var g=[],h=0;if(d)for(var i=0;i<d.length;i++){var j=f[c[i]];j?(0===h&&(h=bw()),g[i]=j(d[i])):g[i]=d[i]}return e=c=a(...g),0!==h&&bu(h),c="string"===b?Y(e):"boolean"===b?!!e:e})(a,b,c,d)},o.addFunction=bl,o.removeFunction=bh,o.UTF8ToString=Y,o.stringToNewUTF8=bf,o.writeArrayToMemory=(a,b)=>{v.set(a,b)};var bm,bn,bo,bp,bq,br,bs,bt,bu,bv,bw,bx,by,bz={a:(a,b,c,d)=>I(`Assertion failed: ${Y(a)}, at: `+[b?Y(b):"unknown filename",c,d?Y(d):"unknown function"]),i:function(a,b){try{return a=Y(a),aU(a,b),0}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return-a.Pa}},L:function(a,b,c){try{if(b=Y(b),b=a1(a,b),-8&c)return -28;var d=av(b,{ab:!0}).node;if(!d)return -44;return a="",4&c&&(a+="r"),2&c&&(a+="w"),1&c&&(a+="x"),a&&aC(d,a)?-2:0}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return-a.Pa}},j:function(a,b){try{var c=aG(a);return aT(c,c.node,b,!1),0}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return-a.Pa}},h:function(a){try{var b=aG(a);return aI(b,b.node,{timestamp:Date.now(),Lb:!1}),0}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return-a.Pa}},b:function(a,b,c){a6=c;try{var d=aG(a);switch(b){case 0:var e=a7();if(0>e)break;for(;an[e];)e++;return function(a,b=-1){return a=aH(a,b),a.Ma?.ec?.(a),a}(d,e).fd;case 1:case 2:case 13:case 14:return 0;case 3:return d.flags;case 4:return e=a7(),d.flags|=e,0;case 12:return x[(e=a7())+0>>1]=2,0}return -28}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return-a.Pa}},g:function(a,b){try{var c=aG(a),d=c.node,e=c.Ma.Ta;a=e?c:d,e??=d.La.Ta,aF(e);var f=e(a);return a2(b,f)}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return-a.Pa}},H:function(a,b){b=-0x20000000000000>b||0x20000000000000<b?NaN:Number(b);try{if(isNaN(b))return -61;var c=aG(a);if(0>b||0==(2097155&c.flags))throw new as(28);return aV(c,c.node,b),0}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return-a.Pa}},G:function(a,b){try{if(0===b)return -28;var c=ae("/")+1;if(b<c)return -68;return af("/",w,a,b),c}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return-a.Pa}},K:function(a,b){try{return a=Y(a),a2(b,aS(a,!0))}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return-a.Pa}},C:function(a,b,c){try{return b=Y(b),b=a1(a,b),aN(b,c),0}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return-a.Pa}},J:function(a,b,c,d){try{return b=Y(b),b=a1(a,b,4096&d),a2(c,256&d?aS(b,!0):aS(b))}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return-a.Pa}},x:function(a,b,c,d){a6=d;try{b=Y(b),b=a1(a,b);var e=d?a7():0;return aW(b,c,e).fd}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return-a.Pa}},v:function(a,b,c,d){try{if(b=Y(b),b=a1(a,b),0>=d)return -28;var e=av(b).node;if(!e)throw new as(44);if(!e.La.readlink)throw new as(28);var f=e.La.readlink(e),g=Math.min(d,ae(f)),h=v[c+g];return af(f,w,c,d+1),v[c+g]=h,g}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return-a.Pa}},u:function(a){try{return a=Y(a),aQ(a),0}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return-a.Pa}},f:function(a,b){try{return a=Y(a),a2(b,aS(a))}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return-a.Pa}},r:function(a,b,c){try{if(b=Y(b),b=a1(a,b),c)if(512!==c)return -28;else aQ(b);else aR(b);return 0}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return-a.Pa}},q:function(a,b,c){try{b=Y(b),b=a1(a,b,!0);var d,e,f=Date.now();if(c){var g=z[c>>2]+0x100000000*y[c+4>>2],h=y[c+8>>2];d=0x3fffffff==h?f:0x3ffffffe==h?null:1e3*g+h/1e6,c+=16,g=z[c>>2]+0x100000000*y[c+4>>2],h=y[c+8>>2],e=0x3fffffff==h?f:0x3ffffffe==h?null:1e3*g+h/1e6}else e=d=f;if(null!==(e??d)){a=d;var i=av(b,{ab:!0}).node;aF(i.La.Ua)(i,{atime:a,mtime:e})}return 0}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return-a.Pa}},m:()=>I(""),l:()=>{U=!1,a8=0},A:function(a,b){a=new Date(1e3*(a=-0x20000000000000>a||0x20000000000000<a?NaN:Number(a))),y[b>>2]=a.getSeconds(),y[b+4>>2]=a.getMinutes(),y[b+8>>2]=a.getHours(),y[b+12>>2]=a.getDate(),y[b+16>>2]=a.getMonth(),y[b+20>>2]=a.getFullYear()-1900,y[b+24>>2]=a.getDay();var c=a.getFullYear();y[b+28>>2]=(0!=c%4||0==c%100&&0!=c%400?ba:a9)[a.getMonth()]+a.getDate()-1|0,y[b+36>>2]=-(60*a.getTimezoneOffset()),c=new Date(a.getFullYear(),6,1).getTimezoneOffset();var d=new Date(a.getFullYear(),0,1).getTimezoneOffset();y[b+32>>2]=0|(c!=d&&a.getTimezoneOffset()==Math.min(d,c))},y:function(a,b,c,d,e,f,g){e=-0x20000000000000>e||0x20000000000000<e?NaN:Number(e);try{var h=aG(d);if(0!=(2&b)&&0==(2&c)&&2!=(2097155&h.flags)||1==(2097155&h.flags))throw new as(2);if(!h.Ma.jb)throw new as(43);if(!a)throw new as(28);var i=h.Ma.jb(h,a,e,b,c),j=i.Xb;return y[f>>2]=i.Eb,z[g>>2]=j,0}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return-a.Pa}},z:function(a,b,c,d,e,f){f=-0x20000000000000>f||0x20000000000000<f?NaN:Number(f);try{var g=aG(e);if(2&c){if(c=f,32768!=(61440&g.node.mode))throw new as(43);if(!(2&d)){var h=w.slice(a,a+b);g.Ma.kb&&g.Ma.kb(g,h,c,b,d)}}}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return-a.Pa}},n:(a,b)=>{if(bb[a]&&(clearTimeout(bb[a].id),delete bb[a]),!b)return 0;var c=setTimeout(()=>{delete bb[a];var b=()=>bt(a,performance.now());if(!F)try{b()}catch(a){a instanceof M||"unwind"==a||m(1,a)}finally{if(!(U||0<a8))try{u=b=u,bc(b)}catch(a){a instanceof M||"unwind"==a||m(1,a)}}},b);return bb[a]={id:c,lc:b},0},B:(a,b,c,d)=>{var e=(new Date).getFullYear(),f=new Date(e,0,1).getTimezoneOffset();e=new Date(e,6,1).getTimezoneOffset(),z[a>>2]=60*Math.max(f,e),y[b>>2]=Number(f!=e),a=(b=a=>{var b=Math.abs(a);return`UTC${0<=a?"-":"+"}${String(Math.floor(b/60)).padStart(2,"0")}${String(b%60).padStart(2,"0")}`})(f),b=b(e),e<f?(af(a,w,c,17),af(b,w,d,17)):(af(a,w,d,17),af(b,w,c,17))},d:()=>Date.now(),s:()=>0x80000000,c:()=>performance.now(),o:a=>{var b=w.length;if(0x80000000<(a>>>=0))return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+0x6000000);a:{d=(Math.min(0x80000000,65536*Math.ceil(Math.max(a,d)/65536))-bx.buffer.byteLength+65535)/65536|0;try{bx.grow(d),H();var e=1;break a}catch(a){}e=void 0}if(e)return!0}return!1},E:(a,b)=>{var c,d=0,e=0;for(c of be()){var f=b+d;z[a+e>>2]=f,d+=af(c,w,f,1/0)+1,e+=4}return 0},F:(a,b)=>{var c=be();for(var d of(z[a>>2]=c.length,a=0,c))a+=ae(d)+1;return z[b>>2]=a,0},e:function(a){try{var b=aG(a);return aX(b),0}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return a.Pa}},p:function(a,b){try{var c=aG(a);return v[b]=c.tty?2:aB(c.mode)?3:40960==(61440&c.mode)?7:4,x[b+2>>1]=0,C[b+8>>3]=BigInt(0),C[b+16>>3]=BigInt(0),0}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return a.Pa}},w:function(a,b,c,d){try{a:{var e=aG(a);a=b;for(var f,g=b=0;g<c;g++){var h=z[a>>2],i=z[a+4>>2];a+=8;var j=aZ(e,v,h,i,f);if(0>j){var k=-1;break a}if(b+=j,j<i)break;void 0!==f&&(f+=j)}k=b}return z[d>>2]=k,0}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return a.Pa}},D:function(a,b,c,d){b=-0x20000000000000>b||0x20000000000000<b?NaN:Number(b);try{if(isNaN(b))return 61;var e=aG(a);return aY(e,b,c),C[d>>3]=BigInt(e.position),e.rb&&0===b&&0===c&&(e.rb=null),0}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return a.Pa}},I:function(a){try{var b=aG(a);return b.Ma?.fsync?.(b)}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return a.Pa}},t:function(a,b,c,d){try{a:{var e=aG(a);a=b;for(var f,g=b=0;g<c;g++){var h=z[a>>2],i=z[a+4>>2];a+=8;var j=a$(e,v,h,i,f);if(0>j){var k=-1;break a}if(b+=j,j<i)break;void 0!==f&&(f+=j)}k=b}return z[d>>2]=k,0}catch(a){if(void 0===a0||"ErrnoError"!==a.name)throw a;return a.Pa}},k:bc};return!async function(){function a(a){return o._sqlite3_free=(a=f=a.exports).P,o._sqlite3_value_text=a.Q,o._sqlite3_prepare_v2=a.R,o._sqlite3_step=a.S,o._sqlite3_reset=a.T,o._sqlite3_exec=a.U,o._sqlite3_finalize=a.V,o._sqlite3_column_name=a.W,o._sqlite3_column_text=a.X,o._sqlite3_column_type=a.Y,o._sqlite3_errmsg=a.Z,o._sqlite3_clear_bindings=a._,o._sqlite3_value_blob=a.$,o._sqlite3_value_bytes=a.aa,o._sqlite3_value_double=a.ba,o._sqlite3_value_int=a.ca,o._sqlite3_value_type=a.da,o._sqlite3_result_blob=a.ea,o._sqlite3_result_double=a.fa,o._sqlite3_result_error=a.ga,o._sqlite3_result_int=a.ha,o._sqlite3_result_int64=a.ia,o._sqlite3_result_null=a.ja,o._sqlite3_result_text=a.ka,o._sqlite3_aggregate_context=a.la,o._sqlite3_column_count=a.ma,o._sqlite3_data_count=a.na,o._sqlite3_column_blob=a.oa,o._sqlite3_column_bytes=a.pa,o._sqlite3_column_double=a.qa,o._sqlite3_bind_blob=a.ra,o._sqlite3_bind_double=a.sa,o._sqlite3_bind_int=a.ta,o._sqlite3_bind_text=a.ua,o._sqlite3_bind_parameter_index=a.va,o._sqlite3_sql=a.wa,o._sqlite3_normalized_sql=a.xa,o._sqlite3_changes=a.ya,o._sqlite3_close_v2=a.za,o._sqlite3_create_function_v2=a.Aa,o._sqlite3_update_hook=a.Ba,o._sqlite3_open=a.Ca,bq=o._malloc=a.Da,br=o._free=a.Ea,o._RegisterExtensionFunctions=a.Fa,bs=a.Ga,bt=a.Ha,bu=a.Ia,bv=a.Ja,bw=a.Ka,bx=a.M,by=a.O,H(),R--,o.monitorRunDependencies?.(R),0==R&&S&&(a=S,S=null,a()),f}R++,o.monitorRunDependencies?.(R);var b={a:bz};if(o.instantiateWasm)return new Promise(c=>{o.instantiateWasm(b,(b,d)=>{c(a(b,d))})});a3??=o.locateFile?o.locateFile("sql-wasm.wasm",r):r+"sql-wasm.wasm",a((await L(b)).instance)}(),!function a(){function b(){if(o.calledRun=!0,!F){if(!o.noFSInit&&!aq){var a,b;aq=!0,a??=o.stdin,b??=o.stdout,c??=o.stderr,a?a_("stdin",a):aP("/dev/tty","/dev/stdin"),b?a_("stdout",null,b):aP("/dev/tty","/dev/stdout"),c?a_("stderr",null,c):aP("/dev/tty1","/dev/stderr"),aW("/dev/stdin",0),aW("/dev/stdout",1),aW("/dev/stderr",1)}if(f.N(),ar=!1,o.onRuntimeInitialized?.(),o.postRun)for("function"==typeof o.postRun&&(o.postRun=[o.postRun]);o.postRun.length;){var c=o.postRun.shift();O.push(c)}N(O)}}if(0<R)S=a;else{if(o.preRun)for("function"==typeof o.preRun&&(o.preRun=[o.preRun]);o.preRun.length;)Q();N(P),0<R?S=a:o.setStatus?(o.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>o.setStatus(""),1),b()},1)):b()}}(),g}))};a.exports=e,a.exports.default=e},87061:(a,b,c)=>{"use strict";c.d(b,{createSqlJsAdapter:()=>k});var d=c(73024),e=c.n(d),f=c(76971),g=c.n(f),h=c(64035);let i=null;async function j(){return i||(i=await g()())}async function k(a){let b=await j(),c=e().existsSync(a)?e().readFileSync(a):null,d=new b.Database(c);d.exec(h.oG);let f=!1,g=null;function i(){let b=d.export();e().writeFileSync(a,Buffer.from(b)),f=!1}function k(){f=!0,g&&clearTimeout(g),g=setTimeout(()=>{if(g=null,f)try{i()}catch(a){console.error("[sqljs] save failed:",a)}},100)}function l(a){if(!(!a||Array.isArray(a)&&0===a.length))return a}let m=()=>{if(f)try{i()}catch{}};return process.on("beforeExit",m),process.on("SIGINT",m),process.on("SIGTERM",m),{driver:"sql.js",run:function(a,b=[]){let c=d.prepare(a);try{c.bind(l(b)),c.step();let a=d.getRowsModified(),e=d.exec("SELECT last_insert_rowid() as id")[0]?.values?.[0]?.[0]??null;return k(),{changes:a,lastInsertRowid:e}}finally{c.free()}},get:function(a,b=[]){let c=d.prepare(a);try{if(c.bind(l(b)),c.step())return c.getAsObject();return}finally{c.free()}},all:function(a,b=[]){let c=d.prepare(a);try{c.bind(l(b));let a=[];for(;c.step();)a.push(c.getAsObject());return a}finally{c.free()}},exec:function(a){d.exec(a),k()},transaction:function(a){d.exec("BEGIN");try{let b=a();return d.exec("COMMIT"),k(),b}catch(a){throw d.exec("ROLLBACK"),a}},close:function(){g&&clearTimeout(g),f&&i(),d.close()},raw:d}}}};
|
|
9
|
+
`,e={_meta:{columns:{key:"TEXT PRIMARY KEY",value:"TEXT NOT NULL"}},settings:{columns:{id:"INTEGER PRIMARY KEY CHECK (id = 1)",data:"TEXT NOT NULL"}},providerConnections:{columns:{id:"TEXT PRIMARY KEY",provider:"TEXT NOT NULL",authType:"TEXT NOT NULL",name:"TEXT",email:"TEXT",priority:"INTEGER",isActive:"INTEGER DEFAULT 1",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pc_provider ON providerConnections(provider)","CREATE INDEX IF NOT EXISTS idx_pc_provider_active ON providerConnections(provider, isActive)","CREATE INDEX IF NOT EXISTS idx_pc_priority ON providerConnections(provider, priority)"]},providerNodes:{columns:{id:"TEXT PRIMARY KEY",type:"TEXT",name:"TEXT",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pn_type ON providerNodes(type)"]},proxyPools:{columns:{id:"TEXT PRIMARY KEY",isActive:"INTEGER DEFAULT 1",testStatus:"TEXT",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pp_active ON proxyPools(isActive)","CREATE INDEX IF NOT EXISTS idx_pp_status ON proxyPools(testStatus)"]},apiKeys:{columns:{id:"TEXT PRIMARY KEY",key:"TEXT UNIQUE NOT NULL",name:"TEXT",machineId:"TEXT",isActive:"INTEGER DEFAULT 1",createdAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_ak_key ON apiKeys(key)"]},combos:{columns:{id:"TEXT PRIMARY KEY",name:"TEXT UNIQUE NOT NULL",kind:"TEXT",models:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_combo_name ON combos(name)"]},kv:{columns:{scope:"TEXT NOT NULL",key:"TEXT NOT NULL",value:"TEXT NOT NULL"},primaryKey:"PRIMARY KEY (scope, key)",indexes:["CREATE INDEX IF NOT EXISTS idx_kv_scope ON kv(scope)"]},usageHistory:{columns:{id:"INTEGER PRIMARY KEY AUTOINCREMENT",timestamp:"TEXT NOT NULL",provider:"TEXT",model:"TEXT",connectionId:"TEXT",apiKey:"TEXT",endpoint:"TEXT",promptTokens:"INTEGER DEFAULT 0",completionTokens:"INTEGER DEFAULT 0",cost:"REAL DEFAULT 0",status:"TEXT",tokens:"TEXT",meta:"TEXT"},indexes:["CREATE INDEX IF NOT EXISTS idx_uh_ts ON usageHistory(timestamp DESC)","CREATE INDEX IF NOT EXISTS idx_uh_provider ON usageHistory(provider)","CREATE INDEX IF NOT EXISTS idx_uh_model ON usageHistory(model)","CREATE INDEX IF NOT EXISTS idx_uh_conn ON usageHistory(connectionId)"]},usageDaily:{columns:{dateKey:"TEXT PRIMARY KEY",data:"TEXT NOT NULL"}},requestDetails:{columns:{id:"TEXT PRIMARY KEY",timestamp:"TEXT NOT NULL",provider:"TEXT",model:"TEXT",connectionId:"TEXT",status:"TEXT",data:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_rd_ts ON requestDetails(timestamp DESC)","CREATE INDEX IF NOT EXISTS idx_rd_provider ON requestDetails(provider)","CREATE INDEX IF NOT EXISTS idx_rd_model ON requestDetails(model)","CREATE INDEX IF NOT EXISTS idx_rd_conn ON requestDetails(connectionId)"]}};function f(a,b){let c=Object.entries(b.columns).map(([a,b])=>`${a} ${b}`);return b.primaryKey&&c.push(b.primaryKey),`CREATE TABLE IF NOT EXISTS ${a} (${c.join(", ")})`}},87061:(a,b,c)=>{c.d(b,{createSqlJsAdapter:()=>k});var d=c(73024),e=c.n(d),f=c(46293),g=c.n(f),h=c(64035);let i=null;async function j(){return i||(i=await g()())}async function k(a){let b=await j(),c=e().existsSync(a)?e().readFileSync(a):null,d=new b.Database(c);d.exec(h.oG);let f=!1,g=null;function i(){let b=d.export();e().writeFileSync(a,Buffer.from(b)),f=!1}function k(){f=!0,g&&clearTimeout(g),g=setTimeout(()=>{if(g=null,f)try{i()}catch(a){console.error("[sqljs] save failed:",a)}},100)}function l(a){if(!(!a||Array.isArray(a)&&0===a.length))return a}let m=()=>{if(f)try{i()}catch{}};return process.on("beforeExit",m),process.on("SIGINT",m),process.on("SIGTERM",m),{driver:"sql.js",run:function(a,b=[]){let c=d.prepare(a);try{c.bind(l(b)),c.step();let a=d.getRowsModified(),e=d.exec("SELECT last_insert_rowid() as id")[0]?.values?.[0]?.[0]??null;return k(),{changes:a,lastInsertRowid:e}}finally{c.free()}},get:function(a,b=[]){let c=d.prepare(a);try{if(c.bind(l(b)),c.step())return c.getAsObject();return}finally{c.free()}},all:function(a,b=[]){let c=d.prepare(a);try{c.bind(l(b));let a=[];for(;c.step();)a.push(c.getAsObject());return a}finally{c.free()}},exec:function(a){d.exec(a),k()},transaction:function(a){let b=`sp_${Math.random().toString(36).slice(2)}`;d.exec(`SAVEPOINT ${b}`);try{let c=a();return d.exec(`RELEASE ${b}`),k(),c}catch(a){try{d.exec(`ROLLBACK TO ${b}`),d.exec(`RELEASE ${b}`)}catch{}throw a}},close:function(){g&&clearTimeout(g),f&&i(),d.close()},raw:d}}}};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";exports.id=7292,exports.ids=[7292],exports.modules={37292:(a,b,c)=>{c.d(b,{createNodeSqliteAdapter:()=>e});var d=c(64035);async function e(a){let b=process.emit;process.emit=function(a,c,...d){return!("warning"===a&&c?.name==="ExperimentalWarning"&&/SQLite/i.test(c.message||""))&&b.call(process,a,c,...d)};let e=new(await Promise.resolve().then(c.t.bind(c,80099,23))).DatabaseSync(a);e.exec(d.oG);let f=new Map;function g(a){let b=f.get(a);return b||(b=e.prepare(a),f.set(a,b)),b}let h=setInterval(()=>{try{e.exec("PRAGMA wal_checkpoint(TRUNCATE)")}catch{}},6e4);function i(){try{e.exec("PRAGMA wal_checkpoint(TRUNCATE)")}catch{}try{f.clear()}catch{}try{e.close()}catch{}}"function"==typeof h.unref&&h.unref();let j=()=>i();return process.once("beforeExit",j),process.once("SIGINT",()=>{j(),process.exit(0)}),process.once("SIGTERM",()=>{j(),process.exit(0)}),{driver:"node:sqlite",run(a,b=[]){let c=g(a).run(...b);return{changes:Number(c.changes??0),lastInsertRowid:Number(c.lastInsertRowid??0)}},get:(a,b=[])=>g(a).get(...b),all:(a,b=[])=>g(a).all(...b),exec:a=>e.exec(a),transaction(a){let b=`sp_${Math.random().toString(36).slice(2)}`;e.exec(`SAVEPOINT ${b}`);try{let c=a();return e.exec(`RELEASE ${b}`),c}catch(a){try{e.exec(`ROLLBACK TO ${b}`),e.exec(`RELEASE ${b}`)}catch{}throw a}},checkpoint(){try{e.exec("PRAGMA wal_checkpoint(TRUNCATE)")}catch{}},close(){clearInterval(h),i()},raw:e}}},64035:(a,b,c)=>{c.d(b,{CG:()=>e,oG:()=>d,zE:()=>f});let d=`
|
|
2
|
+
PRAGMA journal_mode = WAL;
|
|
3
|
+
PRAGMA synchronous = NORMAL;
|
|
4
|
+
PRAGMA temp_store = MEMORY;
|
|
5
|
+
PRAGMA mmap_size = 30000000;
|
|
6
|
+
PRAGMA cache_size = -64000;
|
|
7
|
+
PRAGMA foreign_keys = ON;
|
|
8
|
+
PRAGMA busy_timeout = 5000;
|
|
9
|
+
`,e={_meta:{columns:{key:"TEXT PRIMARY KEY",value:"TEXT NOT NULL"}},settings:{columns:{id:"INTEGER PRIMARY KEY CHECK (id = 1)",data:"TEXT NOT NULL"}},providerConnections:{columns:{id:"TEXT PRIMARY KEY",provider:"TEXT NOT NULL",authType:"TEXT NOT NULL",name:"TEXT",email:"TEXT",priority:"INTEGER",isActive:"INTEGER DEFAULT 1",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pc_provider ON providerConnections(provider)","CREATE INDEX IF NOT EXISTS idx_pc_provider_active ON providerConnections(provider, isActive)","CREATE INDEX IF NOT EXISTS idx_pc_priority ON providerConnections(provider, priority)"]},providerNodes:{columns:{id:"TEXT PRIMARY KEY",type:"TEXT",name:"TEXT",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pn_type ON providerNodes(type)"]},proxyPools:{columns:{id:"TEXT PRIMARY KEY",isActive:"INTEGER DEFAULT 1",testStatus:"TEXT",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pp_active ON proxyPools(isActive)","CREATE INDEX IF NOT EXISTS idx_pp_status ON proxyPools(testStatus)"]},apiKeys:{columns:{id:"TEXT PRIMARY KEY",key:"TEXT UNIQUE NOT NULL",name:"TEXT",machineId:"TEXT",isActive:"INTEGER DEFAULT 1",createdAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_ak_key ON apiKeys(key)"]},combos:{columns:{id:"TEXT PRIMARY KEY",name:"TEXT UNIQUE NOT NULL",kind:"TEXT",models:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_combo_name ON combos(name)"]},kv:{columns:{scope:"TEXT NOT NULL",key:"TEXT NOT NULL",value:"TEXT NOT NULL"},primaryKey:"PRIMARY KEY (scope, key)",indexes:["CREATE INDEX IF NOT EXISTS idx_kv_scope ON kv(scope)"]},usageHistory:{columns:{id:"INTEGER PRIMARY KEY AUTOINCREMENT",timestamp:"TEXT NOT NULL",provider:"TEXT",model:"TEXT",connectionId:"TEXT",apiKey:"TEXT",endpoint:"TEXT",promptTokens:"INTEGER DEFAULT 0",completionTokens:"INTEGER DEFAULT 0",cost:"REAL DEFAULT 0",status:"TEXT",tokens:"TEXT",meta:"TEXT"},indexes:["CREATE INDEX IF NOT EXISTS idx_uh_ts ON usageHistory(timestamp DESC)","CREATE INDEX IF NOT EXISTS idx_uh_provider ON usageHistory(provider)","CREATE INDEX IF NOT EXISTS idx_uh_model ON usageHistory(model)","CREATE INDEX IF NOT EXISTS idx_uh_conn ON usageHistory(connectionId)"]},usageDaily:{columns:{dateKey:"TEXT PRIMARY KEY",data:"TEXT NOT NULL"}},requestDetails:{columns:{id:"TEXT PRIMARY KEY",timestamp:"TEXT NOT NULL",provider:"TEXT",model:"TEXT",connectionId:"TEXT",status:"TEXT",data:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_rd_ts ON requestDetails(timestamp DESC)","CREATE INDEX IF NOT EXISTS idx_rd_provider ON requestDetails(provider)","CREATE INDEX IF NOT EXISTS idx_rd_model ON requestDetails(model)","CREATE INDEX IF NOT EXISTS idx_rd_conn ON requestDetails(connectionId)"]}};function f(a,b){let c=Object.entries(b.columns).map(([a,b])=>`${a} ${b}`);return b.primaryKey&&c.push(b.primaryKey),`CREATE TABLE IF NOT EXISTS ${a} (${c.join(", ")})`}}};
|