@jheavenknows/bluerouter 1.0.26 → 1.0.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/LICENSE +1 -1
- package/README.md +3 -3
- package/app/.next-cli-build/BUILD_ID +1 -1
- package/app/.next-cli-build/app-path-routes-manifest.json +2 -2
- package/app/.next-cli-build/build-manifest.json +2 -2
- package/app/.next-cli-build/prerender-manifest.json +3 -3
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +3 -3
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/virtual-combos/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/app/.next-cli-build/server/app/_not-found.rsc +4 -4
- package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/login/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +5 -5
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +3 -3
- package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +3 -3
- package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/restart/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/virtual-combos/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/virtual-combos/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/callback.html +1 -1
- package/app/.next-cli-build/server/app/callback.rsc +4 -4
- package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/provider-health.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/provider-health.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/quota.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/!KGRhc2hib2FyZCk/dashboard/virtual-combos/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/!KGRhc2hib2FyZCk/dashboard/virtual-combos.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard.html +1 -1
- package/app/.next-cli-build/server/app/dashboard.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/favicon.ico/route.js +1 -1
- package/app/.next-cli-build/server/app/favicon.ico.body +0 -0
- package/app/.next-cli-build/server/app/index.html +1 -1
- package/app/.next-cli-build/server/app/index.rsc +4 -4
- package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing/page.js +1 -1
- package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/landing.html +1 -1
- package/app/.next-cli-build/server/app/landing.rsc +5 -5
- package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/login.html +1 -1
- package/app/.next-cli-build/server/app/login.rsc +4 -4
- package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/manifest.webmanifest/route.js +1 -1
- package/app/.next-cli-build/server/app/manifest.webmanifest.body +1 -1
- package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app-paths-manifest.json +2 -2
- package/app/.next-cli-build/server/chunks/3110.js +2 -2
- package/app/.next-cli-build/server/chunks/4746.js +1 -1
- package/app/.next-cli-build/server/chunks/476.js +2 -2
- package/app/.next-cli-build/server/chunks/6182.js +3 -3
- package/app/.next-cli-build/server/chunks/6567.js +8 -8
- package/app/.next-cli-build/server/chunks/7153.js +1 -1
- package/app/.next-cli-build/server/chunks/9447.js +1 -1
- package/app/.next-cli-build/server/chunks/9526.js +1 -1
- package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/app/.next-cli-build/server/middleware.js +3 -3
- package/app/.next-cli-build/server/pages/404.html +1 -1
- package/app/.next-cli-build/server/pages/500.html +1 -1
- package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
- package/app/.next-cli-build/static/chunks/{1321-932e605b6d47063d.js → 1321-053e3b830b2ec1bf.js} +1 -1
- package/app/.next-cli-build/static/chunks/4404-63455b79e318b1c7.js +53 -0
- package/app/.next-cli-build/static/chunks/5497-90dfe11dd01a459e.js +7 -0
- package/app/.next-cli-build/static/chunks/{5907-b4c71b034a42cd8c.js → 5907-46d07be8a58ce080.js} +2 -2
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/page-d8b42a4e1ae60f65.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/skills/page-84e359aafb683d81.js +1 -0
- package/app/.next-cli-build/static/chunks/app/landing/page-70884f02f4f66d0e.js +1 -0
- package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-1.0.26-to-1.0.27-1.0.27-20260526-112743/data.sqlite +0 -0
- package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-1.0.27-to-1.0.28-1.0.28-20260526-112925/data.sqlite +0 -0
- package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-shm +0 -0
- package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-wal +0 -0
- package/app/package.json +1 -1
- package/app/public/i18n/literals/ar.json +3 -3
- package/app/public/i18n/literals/bn.json +3 -3
- package/app/public/i18n/literals/cs.json +3 -3
- package/app/public/i18n/literals/da.json +3 -3
- package/app/public/i18n/literals/de.json +3 -3
- package/app/public/i18n/literals/el.json +3 -3
- package/app/public/i18n/literals/es.json +3 -3
- package/app/public/i18n/literals/fi.json +3 -3
- package/app/public/i18n/literals/fr.json +3 -3
- package/app/public/i18n/literals/he.json +3 -3
- package/app/public/i18n/literals/hi.json +3 -3
- package/app/public/i18n/literals/hu.json +3 -3
- package/app/public/i18n/literals/id.json +3 -3
- package/app/public/i18n/literals/it.json +3 -3
- package/app/public/i18n/literals/ja.json +3 -3
- package/app/public/i18n/literals/ko.json +3 -3
- package/app/public/i18n/literals/nl.json +3 -3
- package/app/public/i18n/literals/no.json +3 -3
- package/app/public/i18n/literals/pl.json +3 -3
- package/app/public/i18n/literals/pt-BR.json +3 -3
- package/app/public/i18n/literals/pt-PT.json +3 -3
- package/app/public/i18n/literals/ro.json +3 -3
- package/app/public/i18n/literals/ru.json +3 -3
- package/app/public/i18n/literals/sv.json +3 -3
- package/app/public/i18n/literals/th.json +3 -3
- package/app/public/i18n/literals/tl.json +3 -3
- package/app/public/i18n/literals/tr.json +3 -3
- package/app/public/i18n/literals/uk.json +3 -3
- package/app/public/i18n/literals/ur.json +3 -3
- package/app/public/i18n/literals/vi.json +3 -3
- package/app/public/i18n/literals/zh-CN.json +12 -12
- package/app/public/i18n/literals/zh-TW.json +3 -3
- package/app/src/mitm/server.js +2 -2
- package/cli.js +4 -4
- package/package.json +2 -2
- package/src/cli/api/client.js +1 -1
- package/src/cli/menus/cliTools.js +14 -14
- package/src/cli/terminalUI.js +2 -2
- package/src/cli/tray/autostart.js +2 -2
- package/src/cli/tray/tray.js +3 -3
- package/src/cli/tray/tray.ps1 +1 -1
- package/app/.next-cli-build/static/chunks/4404-3bd3186f4ee612a1.js +0 -53
- package/app/.next-cli-build/static/chunks/5497-886bdd124c9e47a3.js +0 -7
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/page-93016427d63637f4.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/skills/page-d00a05320aab3650.js +0 -1
- package/app/.next-cli-build/static/chunks/app/landing/page-743f3f6975e53a9a.js +0 -1
- /package/app/.next-cli-build/static/{QxXip6ZNmTsndS1LuvETC → 0bNk4v4Wo1zifmOozrtGi}/_buildManifest.js +0 -0
- /package/app/.next-cli-build/static/{QxXip6ZNmTsndS1LuvETC → 0bNk4v4Wo1zifmOozrtGi}/_ssgManifest.js +0 -0
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
"Manage your AI provider connections": "管理您的 AI 提供者連接",
|
|
109
109
|
"Model combos with fallback": "具有備用的模型組合",
|
|
110
110
|
"Monitor your API usage, token consumption, and request logs": "監控您的 API 使用、令牌消耗和請求日誌",
|
|
111
|
-
"Intercept CLI tool traffic and route through
|
|
111
|
+
"Intercept CLI tool traffic and route through Bluerouter": "攔截 CLI 工具流量並通過 Bluerouter 路由",
|
|
112
112
|
"Configure CLI tools": "配置 CLI 工具",
|
|
113
113
|
"API endpoint configuration": "API 端點配置",
|
|
114
114
|
"Manage your preferences": "管理您的首選項",
|
|
@@ -172,9 +172,9 @@
|
|
|
172
172
|
"Cert": "證書",
|
|
173
173
|
"Server": "服務器",
|
|
174
174
|
"Purpose:": "目的:",
|
|
175
|
-
"Use Antigravity IDE & GitHub Copilot → with ANY provider/model from
|
|
175
|
+
"Use Antigravity IDE & GitHub Copilot → with ANY provider/model from Bluerouter": "使用 Antigravity IDE 和 GitHub Copilot → 與 Bluerouter 中的任何提供者/模型一起",
|
|
176
176
|
"How it works:": "工作原理:",
|
|
177
|
-
"Antigravity/Copilot IDE request → DNS redirect to localhost:443 → AI Traffic Proxy intercepts →
|
|
177
|
+
"Antigravity/Copilot IDE request → DNS redirect to localhost:443 → AI Traffic Proxy intercepts → Bluerouter → response to Antigravity/Copilot": "Antigravity/Copilot IDE 請求 → DNS 重定向到 localhost:443 → MITM 代理攔截 → Bluerouter → 响應到 Antigravity/Copilot",
|
|
178
178
|
"No API keys — create one in Keys page": "沒有 API 金鑰 — 在金鑰頁面中創建一個",
|
|
179
179
|
"sk_bluerouter (default)": "sk_bluerouter(默認)",
|
|
180
180
|
"Server started": "服務器已啟動",
|
package/app/src/mitm/server.js
CHANGED
|
@@ -23,7 +23,7 @@ Private-Lines: `+u+`\r
|
|
|
23
23
|
`,s+=c;var S=xa("putty-private-key-file-mac-key",t),T=xe.util.createBuffer();Cr(T,r),Cr(T,n),Cr(T,a),T.putInt32(i.length()),T.putBuffer(i),T.putInt32(l.length()),T.putBuffer(l);var B=xe.hmac.create();return B.start("sha1",S),B.update(T.bytes()),s+=`\r
|
|
24
24
|
Private-MAC: `+B.digest().toHex()+`\r
|
|
25
25
|
`,s};Sa.publicKeyToOpenSSH=function(e,t){var a="ssh-rsa";t=t||"";var r=xe.util.createBuffer();return Cr(r,a),St(r,e.e),St(r,e.n),a+" "+xe.util.encode64(r.bytes())+" "+t};Sa.privateKeyToOpenSSH=function(e,t){return t?xe.pki.encryptRsaPrivateKey(e,t,{legacy:!0,algorithm:"aes128"}):xe.pki.privateKeyToPem(e)};Sa.getPublicKeyFingerprint=function(e,t){t=t||{};var a=t.md||xe.md.md5.create(),r="ssh-rsa",n=xe.util.createBuffer();Cr(n,r),St(n,e.e),St(n,e.n),a.start(),a.update(n.getBytes());var s=a.digest();if(t.encoding==="hex"){var i=s.toHex();return t.delimiter?i.match(/.{2}/g).join(t.delimiter):i}else{if(t.encoding==="binary")return s.getBytes();if(t.encoding)throw new Error('Unknown encoding "'+t.encoding+'".')}return s};function St(e,t){var a=t.toString(16);a[0]>="8"&&(a="00"+a);var r=xe.util.hexToBytes(a);e.putInt32(r.length),e.putBytes(r)}function Cr(e,t){e.putInt32(t.length),e.putString(t)}function xa(){for(var e=xe.md.sha1.create(),t=arguments.length,a=0;a<t;++a)e.update(arguments[a]);return e.digest()}});var So=K(($h,xo)=>{xo.exports=$();Lt();Ks();ft();Qr();br();no();or();uo();ho();yo();sn();aa();Yt();Za();ln();mo();fn();tn();za();ca();nt();ja();Eo();vn();ae()});var Bo=K((jh,Io)=>{var Mt=require("path"),j=require("fs"),ge=So(),{execFileSync:On}=require("child_process"),{MITM_DIR:qt}=nr(),Re=Mt.join(qt,"rootCA.key"),Te=Mt.join(qt,"rootCA.crt"),Tt=Mt.join(qt,"rootCA.csr"),Dn=Mt.join(qt,"rootCA.csr.cnf"),Xe=Mt.join(qt,"rootCA.pending.key"),Un=Mt.join(qt,"backup");function Kr(){j.existsSync(qt)||j.mkdirSync(qt,{recursive:!0})}function Fr(e,t){let a=String(e||"").trim();if(!a)throw new Error(`${t} is empty`);return`${a}
|
|
26
|
-
`}function Vn(e){return ge.md.sha256.create().update(ge.pki.publicKeyToPem(e),"utf8").digest().toHex()}function bf(e){if(!e?.n||!e?.e)throw new Error("Only RSA private keys are supported for MITM Root CA");return ge.pki.setRsaPublicKey(e.n,e.e)}function Fn(e){let t=e.getExtension("basicConstraints"),a=e.getExtension("keyUsage");return!!t?.cA&&(!a||a.keyCertSign===!0)}function To(e,t){let a=Vn(e.publicKey),r=Vn(bf(t));if(a!==r)throw new Error("Certificate public key does not match private key")}function Ta(){Kr();let e=j.existsSync(Re),t=j.existsSync(Te);if(!e&&!t)return null;j.mkdirSync(Un,{recursive:!0});let a=new Date().toISOString().replace(/[:.]/g,"-"),r={key:Mt.join(Un,`rootCA.${a}.key`),cert:Mt.join(Un,`rootCA.${a}.crt`)};return e&&j.copyFileSync(Re,r.key),t&&j.copyFileSync(Te,r.cert),r}function Kn(e,t="Certificate"){try{return ge.pki.certificateFromPem(Fr(e,t))}catch(a){throw new Error(`${t} is not a valid PEM certificate: ${a.message}`)}}function Ao(e,t="Private key"){try{return ge.pki.privateKeyFromPem(Fr(e,t))}catch(a){throw new Error(`${t} is not a valid PEM private key: ${a.message}`)}}function Mn(e){try{let t=ge.pki.certificateFromPem(j.readFileSync(e,"utf8")),a=new Date(Date.now()+720*60*60*1e3);return t.validity.notAfter<a}catch{return!0}}function qn(){let e=j.existsSync(Te),t=j.existsSync(Re),a=j.existsSync(Tt),r=j.existsSync(Xe),n={certExists:e,keyExists:t,csrExists:a,pendingKeyExists:r,certPath:Te,keyPath:Re,csrPath:Tt,pendingKeyPath:Xe};if(!e)return n;try{let s=Kn(j.readFileSync(Te,"utf8")),i=s.subject.attributes.map(u=>`${u.shortName||u.name}=${u.value}`).join(", "),o=s.issuer.attributes.map(u=>`${u.shortName||u.name}=${u.value}`).join(", ");n.subject=i,n.issuer=o,n.serialNumber=s.serialNumber,n.notBefore=s.validity.notBefore.toISOString(),n.notAfter=s.validity.notAfter.toISOString(),n.expiredOrExpiringSoon=Mn(Te),n.isCa=Fn(s),n.isSelfSigned=i===o,n.fingerprint=Vn(s.publicKey)}catch(s){n.error=s.message}return n}async function _f(){let e=j.existsSync(Re)&&j.existsSync(Te);if(e&&!Mn(Te))return console.log("\u2705 Root CA already exists"),{key:Re,cert:Te};if(e){console.log("\u{1F510} Root CA expired or expiring soon \u2014 regenerating...");try{j.unlinkSync(Re)}catch{}try{j.unlinkSync(Te)}catch{}}Kr(),console.log("\u{1F510} Generating Root CA certificate...");let t=ge.pki.rsa.generateKeyPair(2048),a=ge.pki.createCertificate();a.publicKey=t.publicKey,a.serialNumber="01",a.validity.notBefore=new Date,a.validity.notAfter=new Date,a.validity.notAfter.setFullYear(a.validity.notBefore.getFullYear()+10);let r=[{name:"commonName",value:"Blue Router Gateway Root CA"},{name:"organizationName",value:"Blue Router Gateway"},{name:"countryName",value:"VN"}];a.setSubject(r),a.setIssuer(r),a.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,cRLSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),a.sign(t.privateKey,ge.md.sha256.create());let n=ge.pki.privateKeyToPem(t.privateKey),s=ge.pki.certificateToPem(a);return j.writeFileSync(Re,n,{mode:384}),j.writeFileSync(Te,s),console.log("\u2705 Root CA generated successfully"),{key:Re,cert:Te}}function Nf({certPem:e,keyPem:t}){Kr();let a=Fr(e,"Certificate"),r=Fr(t,"Private key"),n=Kn(a),s=Ao(r);if(To(n,s),!Fn(n))throw new Error("Certificate must be a CA certificate with basicConstraints CA:true and keyCertSign usage");if(n.validity.notAfter<new Date)throw new Error("Certificate is already expired");let i=Ta();j.writeFileSync(Re,r,{mode:384}),j.writeFileSync(Te,a);try{j.unlinkSync(Tt)}catch{}try{j.unlinkSync(Xe)}catch{}return{key:Re,cert:Te,backup:i,info:qn()}}function Pn(e,t){return String(e||t||"").replace(/[\r\n]+/g," ").replace(/[\\]/g,"\\\\").trim()||String(t||"")}function wf(){try{return On("openssl",["version"],{stdio:"ignore"}),!0}catch{return!1}}function Rf({commonName:e,organizationName:t,countryName:a}={}){let r=Pn(e,"Fujinet
|
|
26
|
+
`}function Vn(e){return ge.md.sha256.create().update(ge.pki.publicKeyToPem(e),"utf8").digest().toHex()}function bf(e){if(!e?.n||!e?.e)throw new Error("Only RSA private keys are supported for MITM Root CA");return ge.pki.setRsaPublicKey(e.n,e.e)}function Fn(e){let t=e.getExtension("basicConstraints"),a=e.getExtension("keyUsage");return!!t?.cA&&(!a||a.keyCertSign===!0)}function To(e,t){let a=Vn(e.publicKey),r=Vn(bf(t));if(a!==r)throw new Error("Certificate public key does not match private key")}function Ta(){Kr();let e=j.existsSync(Re),t=j.existsSync(Te);if(!e&&!t)return null;j.mkdirSync(Un,{recursive:!0});let a=new Date().toISOString().replace(/[:.]/g,"-"),r={key:Mt.join(Un,`rootCA.${a}.key`),cert:Mt.join(Un,`rootCA.${a}.crt`)};return e&&j.copyFileSync(Re,r.key),t&&j.copyFileSync(Te,r.cert),r}function Kn(e,t="Certificate"){try{return ge.pki.certificateFromPem(Fr(e,t))}catch(a){throw new Error(`${t} is not a valid PEM certificate: ${a.message}`)}}function Ao(e,t="Private key"){try{return ge.pki.privateKeyFromPem(Fr(e,t))}catch(a){throw new Error(`${t} is not a valid PEM private key: ${a.message}`)}}function Mn(e){try{let t=ge.pki.certificateFromPem(j.readFileSync(e,"utf8")),a=new Date(Date.now()+720*60*60*1e3);return t.validity.notAfter<a}catch{return!0}}function qn(){let e=j.existsSync(Te),t=j.existsSync(Re),a=j.existsSync(Tt),r=j.existsSync(Xe),n={certExists:e,keyExists:t,csrExists:a,pendingKeyExists:r,certPath:Te,keyPath:Re,csrPath:Tt,pendingKeyPath:Xe};if(!e)return n;try{let s=Kn(j.readFileSync(Te,"utf8")),i=s.subject.attributes.map(u=>`${u.shortName||u.name}=${u.value}`).join(", "),o=s.issuer.attributes.map(u=>`${u.shortName||u.name}=${u.value}`).join(", ");n.subject=i,n.issuer=o,n.serialNumber=s.serialNumber,n.notBefore=s.validity.notBefore.toISOString(),n.notAfter=s.validity.notAfter.toISOString(),n.expiredOrExpiringSoon=Mn(Te),n.isCa=Fn(s),n.isSelfSigned=i===o,n.fingerprint=Vn(s.publicKey)}catch(s){n.error=s.message}return n}async function _f(){let e=j.existsSync(Re)&&j.existsSync(Te);if(e&&!Mn(Te))return console.log("\u2705 Root CA already exists"),{key:Re,cert:Te};if(e){console.log("\u{1F510} Root CA expired or expiring soon \u2014 regenerating...");try{j.unlinkSync(Re)}catch{}try{j.unlinkSync(Te)}catch{}}Kr(),console.log("\u{1F510} Generating Root CA certificate...");let t=ge.pki.rsa.generateKeyPair(2048),a=ge.pki.createCertificate();a.publicKey=t.publicKey,a.serialNumber="01",a.validity.notBefore=new Date,a.validity.notAfter=new Date,a.validity.notAfter.setFullYear(a.validity.notBefore.getFullYear()+10);let r=[{name:"commonName",value:"Blue Router Gateway Root CA"},{name:"organizationName",value:"Blue Router Gateway"},{name:"countryName",value:"VN"}];a.setSubject(r),a.setIssuer(r),a.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,cRLSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),a.sign(t.privateKey,ge.md.sha256.create());let n=ge.pki.privateKeyToPem(t.privateKey),s=ge.pki.certificateToPem(a);return j.writeFileSync(Re,n,{mode:384}),j.writeFileSync(Te,s),console.log("\u2705 Root CA generated successfully"),{key:Re,cert:Te}}function Nf({certPem:e,keyPem:t}){Kr();let a=Fr(e,"Certificate"),r=Fr(t,"Private key"),n=Kn(a),s=Ao(r);if(To(n,s),!Fn(n))throw new Error("Certificate must be a CA certificate with basicConstraints CA:true and keyCertSign usage");if(n.validity.notAfter<new Date)throw new Error("Certificate is already expired");let i=Ta();j.writeFileSync(Re,r,{mode:384}),j.writeFileSync(Te,a);try{j.unlinkSync(Tt)}catch{}try{j.unlinkSync(Xe)}catch{}return{key:Re,cert:Te,backup:i,info:qn()}}function Pn(e,t){return String(e||t||"").replace(/[\r\n]+/g," ").replace(/[\\]/g,"\\\\").trim()||String(t||"")}function wf(){try{return On("openssl",["version"],{stdio:"ignore"}),!0}catch{return!1}}function Rf({commonName:e,organizationName:t,countryName:a}={}){let r=Pn(e,"Fujinet Bluerouter MITM CA"),n=Pn(t,"Fujinet"),i=`[ req ]
|
|
27
27
|
default_bits = 4096
|
|
28
28
|
prompt = no
|
|
29
29
|
distinguished_name = dn
|
|
@@ -39,7 +39,7 @@ CN = ${r}
|
|
|
39
39
|
basicConstraints = critical, CA:true, pathlen:0
|
|
40
40
|
keyUsage = critical, keyCertSign, cRLSign
|
|
41
41
|
subjectKeyIdentifier = hash
|
|
42
|
-
`,o=Ta();j.writeFileSync(Dn,i,"utf8");try{On("openssl",["genrsa","-out",Xe,"4096"],{stdio:["ignore","pipe","pipe"]}),On("openssl",["req","-new","-key",Xe,"-out",Tt,"-config",Dn],{stdio:["ignore","pipe","pipe"]});try{j.chmodSync(Xe,384)}catch{}return{csr:Tt,pendingKey:Xe,config:Dn,backup:o}}catch(u){try{j.unlinkSync(Xe)}catch{}try{j.unlinkSync(Tt)}catch{}let l=u?.stderr?String(u.stderr).trim():"";throw new Error(`OpenSSL CSR generation failed${l?`: ${l}`:""}`)}}function Lf({commonName:e,organizationName:t,countryName:a}={}){if(Kr(),wf())return Rf({commonName:e,organizationName:t,countryName:a});let r=[{name:"commonName",value:String(e||"Fujinet
|
|
42
|
+
`,o=Ta();j.writeFileSync(Dn,i,"utf8");try{On("openssl",["genrsa","-out",Xe,"4096"],{stdio:["ignore","pipe","pipe"]}),On("openssl",["req","-new","-key",Xe,"-out",Tt,"-config",Dn],{stdio:["ignore","pipe","pipe"]});try{j.chmodSync(Xe,384)}catch{}return{csr:Tt,pendingKey:Xe,config:Dn,backup:o}}catch(u){try{j.unlinkSync(Xe)}catch{}try{j.unlinkSync(Tt)}catch{}let l=u?.stderr?String(u.stderr).trim():"";throw new Error(`OpenSSL CSR generation failed${l?`: ${l}`:""}`)}}function Lf({commonName:e,organizationName:t,countryName:a}={}){if(Kr(),wf())return Rf({commonName:e,organizationName:t,countryName:a});let r=[{name:"commonName",value:String(e||"Fujinet Bluerouter MITM CA").trim()||"Fujinet Bluerouter MITM CA"},{name:"organizationName",value:String(t||"Fujinet").trim()||"Fujinet"},{name:"organizationalUnitName",value:"AI Gateway"}],n=String(a||"VN").trim().slice(0,2).toUpperCase();n&&r.push({name:"countryName",value:n});let s=ge.pki.rsa.generateKeyPair(4096),i=ge.pki.createCertificationRequest();if(i.publicKey=s.publicKey,i.setSubject(r),i.sign(s.privateKey,ge.md.sha256.create()),!i.verify())throw new Error("Generated CSR failed verification");let o=Ta(),u=ge.pki.certificationRequestToPem(i),l=ge.pki.privateKeyToPem(s.privateKey);return j.writeFileSync(Xe,l,{mode:384}),j.writeFileSync(Tt,u),{csr:Tt,pendingKey:Xe,backup:o}}function kf({certPem:e}){if(Kr(),!j.existsSync(Xe))throw new Error("No pending CSR private key found. Generate a CSR first.");let t=Fr(e,"Signed certificate"),a=Kn(t,"Signed certificate"),r=Ao(j.readFileSync(Xe,"utf8"),"Pending private key");if(To(a,r),!Fn(a))throw new Error("Signed certificate must be a CA certificate with CA:true and keyCertSign usage");if(a.validity.notAfter<new Date)throw new Error("Signed certificate is already expired");let n=Ta();j.copyFileSync(Xe,Re);try{j.chmodSync(Re,384)}catch{}j.writeFileSync(Te,t);try{j.unlinkSync(Tt)}catch{}try{j.unlinkSync(Xe)}catch{}return{key:Re,cert:Te,backup:n,info:qn()}}function Df(){if(!j.existsSync(Re)||!j.existsSync(Te))throw new Error("Root CA not found. Generate it first.");let e=j.readFileSync(Re,"utf8"),t=j.readFileSync(Te,"utf8");return{key:ge.pki.privateKeyFromPem(e),cert:ge.pki.certificateFromPem(t)}}function Uf(e,t){let a=ge.pki.rsa.generateKeyPair(2048),r=ge.pki.createCertificate();return r.publicKey=a.publicKey,r.serialNumber=Math.floor(Math.random()*1e6).toString(),r.validity.notBefore=new Date,r.validity.notAfter=new Date,r.validity.notAfter.setFullYear(r.validity.notBefore.getFullYear()+1),r.setSubject([{name:"commonName",value:e}]),r.setIssuer(t.cert.subject.attributes),r.setExtensions([{name:"basicConstraints",cA:!1},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"subjectAltName",altNames:[{type:2,value:e},{type:2,value:`*.${e}`}]}]),r.sign(t.key,ge.md.sha256.create()),{key:ge.pki.privateKeyToPem(a.privateKey),cert:ge.pki.certificateToPem(r)}}Io.exports={generateRootCA:_f,importRootCAPair:Nf,generateRootCACsr:Lf,importSignedRootCACert:kf,loadRootCA:Df,generateLeafCert:Uf,isCertExpired:Mn,readRootCAInfo:qn,ROOT_CA_CERT_PATH:Te,ROOT_CA_KEY_PATH:Re,ROOT_CA_CSR_PATH:Tt,ROOT_CA_PENDING_KEY_PATH:Xe}});var _o=K((Jh,bo)=>{var Yh=require("path"),Wh=require("fs"),{MITM_DIR:Xh}=nr(),{generateRootCA:Pf,loadRootCA:Of,generateLeafCert:Vf}=Bo();async function Ff(){return await Pf()}function Kf(e){try{let t=Of(),a=Vf(e,t);return{key:a.key,cert:a.cert}}catch(t){return console.error(`Failed to generate cert for ${e}:`,t.message),null}}bo.exports={generateCert:Ff,getCertForDomain:Kf}});var Lo=K((Zh,Ro)=>{var No=require("fs"),Mf=require("path"),{DATA_DIR:qf}=nr(),wo=Mf.join(qf,"mitm","aliases.json");function Hf(){try{return No.existsSync(wo)?JSON.parse(No.readFileSync(wo,"utf-8")):null}catch{return null}}function Gf(e){return Hf()?.[e]||null}Ro.exports={getMitmAlias:Gf}});var Aa=K((rp,Uo)=>{var{log:ep,err:tp}=$t(),ko="http://localhost:20128",zf=String(process.env.MITM_ROUTER_BASE||ko).trim().replace(/\/+$/,"")||ko,Do=process.env.ROUTER_API_KEY,Qf=new Set(["host","content-length","connection","transfer-encoding","content-type","authorization"]);async function $f(e,t="/v1/chat/completions",a={}){let r={};for(let[s,i]of Object.entries(a))Qf.has(s.toLowerCase())||(r[s]=i);return await fetch(`${zf}${t}`,{method:"POST",headers:{...r,"Content-Type":"application/json",...Do&&{Authorization:`Bearer ${Do}`}},body:JSON.stringify(e)})}async function jf(e,t,a){let r=e.headers.get("content-type")||"application/json",n=e.status||200,s={"Content-Type":r,"Cache-Control":"no-cache",Connection:"keep-alive"};if(r.includes("text/event-stream")&&(s["X-Accel-Buffering"]="no"),t.writeHead(n,s),a&&a.writeHeader(e.status,Object.fromEntries(e.headers)),!e.body){let u=await e.text().catch(()=>"");a&&(a.writeChunk(u),a.end()),t.end(u);return}let i=e.body.getReader(),o=new TextDecoder;for(;;){let{done:u,value:l}=await i.read();if(u){a&&a.end(),t.end();break}a&&a.writeChunk(l),t.write(o.decode(l,{stream:!0}))}}Uo.exports={fetchRouter:$f,pipeSSE:jf}});var Oo=K((ap,Po)=>{var{err:Yf,createResponseDumper:Wf}=$t(),{IS_DEV:Xf}=Sr(),{fetchRouter:Jf,pipeSSE:Zf}=Aa();async function ed(e,t,a,r){let n=Xf?Wf(e,"intercept-antigravity"):null,s=e.url.includes(":streamGenerateContent");try{let i=JSON.parse(a.toString());i.model&&(i.model=r);let o=await Jf(i,"/v1/chat/completions",e.headers);await Zf(o,t,n)}catch(i){Yf(`[antigravity] ${i.message}`),n&&(n.writeChunk(`
|
|
43
43
|
[ERROR] ${i.message}
|
|
44
44
|
`),n.end()),s?(t.headersSent||t.writeHead(200,{"Content-Type":"text/event-stream"}),t.end(`data: ${JSON.stringify({error:{message:i.message}})}\r
|
|
45
45
|
\r
|
package/cli.js
CHANGED
|
@@ -196,7 +196,7 @@ for i in $(seq 1 "\${MAX_WAIT_SECONDS}"); do
|
|
|
196
196
|
done
|
|
197
197
|
|
|
198
198
|
if [[ "\${ready}" != "1" ]]; then
|
|
199
|
-
log "
|
|
199
|
+
log "Bluerouter API is not ready; skip MITM autostart"
|
|
200
200
|
exit 0
|
|
201
201
|
fi
|
|
202
202
|
|
|
@@ -492,7 +492,7 @@ function writeSystemdService({
|
|
|
492
492
|
.join("\n");
|
|
493
493
|
|
|
494
494
|
const unit = `[Unit]
|
|
495
|
-
Description=
|
|
495
|
+
Description=Bluerouter
|
|
496
496
|
After=network.target
|
|
497
497
|
|
|
498
498
|
[Service]
|
|
@@ -1319,7 +1319,7 @@ function startServer(latestVersion) {
|
|
|
1319
1319
|
process.on("SIGHUP", () => {});
|
|
1320
1320
|
|
|
1321
1321
|
console.log(`\n⏳ Switching to tray mode... (icon already visible in menu bar)`);
|
|
1322
|
-
console.log(`🔔
|
|
1322
|
+
console.log(`🔔 Bluerouter is running in tray (PID: ${process.pid})`);
|
|
1323
1323
|
console.log(` Server: http://${displayHost}:${port}`);
|
|
1324
1324
|
console.log(`\n💡 You can close this terminal. Right-click tray icon to quit.\n`);
|
|
1325
1325
|
|
|
@@ -1338,7 +1338,7 @@ function startServer(latestVersion) {
|
|
|
1338
1338
|
});
|
|
1339
1339
|
bgProcess.unref();
|
|
1340
1340
|
|
|
1341
|
-
console.log(`🔔
|
|
1341
|
+
console.log(`🔔 Bluerouter is now running in background (PID: ${bgProcess.pid})`);
|
|
1342
1342
|
console.log(` Server: http://${displayHost}:${port}`);
|
|
1343
1343
|
console.log(`\n💡 You can close this terminal. Right-click tray icon to quit.\n`);
|
|
1344
1344
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jheavenknows/bluerouter",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.0.28",
|
|
4
|
+
"description": "Bluerouter CLI - Start and manage Bluerouter server",
|
|
5
5
|
"bin": {
|
|
6
6
|
"bluerouter": "./cli.js"
|
|
7
7
|
},
|
package/src/cli/api/client.js
CHANGED
|
@@ -364,7 +364,7 @@ async function deleteCombo(id) {
|
|
|
364
364
|
/**
|
|
365
365
|
* Get CLI tool settings
|
|
366
366
|
* @param {string} tool - Tool name: claude | codex | droid | openclaw
|
|
367
|
-
* @returns {Promise<Object>} { success, data: { installed,
|
|
367
|
+
* @returns {Promise<Object>} { success, data: { installed, hasBluerouter, ... } }
|
|
368
368
|
*/
|
|
369
369
|
async function getCliToolSettings(tool) {
|
|
370
370
|
return makeRequest("GET", `/api/cli-tools/${tool}-settings`);
|
|
@@ -179,10 +179,10 @@ async function buildCodexHeader() {
|
|
|
179
179
|
const result = await api.getCliToolSettings("codex");
|
|
180
180
|
if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
|
|
181
181
|
|
|
182
|
-
const { installed,
|
|
182
|
+
const { installed, hasBluerouter, config } = result.data;
|
|
183
183
|
if (!installed) return `Status: ${COLORS.red}✗ Codex CLI not installed${COLORS.reset}`;
|
|
184
184
|
|
|
185
|
-
if (!
|
|
185
|
+
if (!hasBluerouter) {
|
|
186
186
|
return [
|
|
187
187
|
`Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
|
|
188
188
|
`${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
|
|
@@ -267,18 +267,18 @@ async function buildDroidHeader() {
|
|
|
267
267
|
const result = await api.getCliToolSettings("droid");
|
|
268
268
|
if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
|
|
269
269
|
|
|
270
|
-
const { installed,
|
|
270
|
+
const { installed, hasBluerouter, settings } = result.data;
|
|
271
271
|
if (!installed) return `Status: ${COLORS.red}✗ Factory Droid not installed${COLORS.reset}`;
|
|
272
272
|
|
|
273
|
-
if (!
|
|
273
|
+
if (!hasBluerouter) {
|
|
274
274
|
return [
|
|
275
275
|
`Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
|
|
276
276
|
`${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
|
|
277
277
|
].join("\n");
|
|
278
278
|
}
|
|
279
279
|
|
|
280
|
-
// Extract
|
|
281
|
-
const custom = settings?.customModels?.find(m => m.id === "custom:
|
|
280
|
+
// Extract Bluerouter custom model config
|
|
281
|
+
const custom = settings?.customModels?.find(m => m.id === "custom:Bluerouter-0");
|
|
282
282
|
const lines = [`Status: ${COLORS.green}✓ Configured${COLORS.reset}`];
|
|
283
283
|
if (custom?.baseUrl) lines.push(`Endpoint: ${COLORS.cyan}${custom.baseUrl}${COLORS.reset}`);
|
|
284
284
|
if (custom?.model) lines.push(`Model: ${COLORS.dim}${custom.model}${COLORS.reset}`);
|
|
@@ -350,17 +350,17 @@ async function buildOpenClawHeader() {
|
|
|
350
350
|
const result = await api.getCliToolSettings("openclaw");
|
|
351
351
|
if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
|
|
352
352
|
|
|
353
|
-
const { installed,
|
|
353
|
+
const { installed, hasBluerouter, settings } = result.data;
|
|
354
354
|
if (!installed) return `Status: ${COLORS.red}✗ Open Claw not installed${COLORS.reset}`;
|
|
355
355
|
|
|
356
|
-
if (!
|
|
356
|
+
if (!hasBluerouter) {
|
|
357
357
|
return [
|
|
358
358
|
`Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
|
|
359
359
|
`${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
|
|
360
360
|
].join("\n");
|
|
361
361
|
}
|
|
362
362
|
|
|
363
|
-
// Extract
|
|
363
|
+
// Extract Bluerouter provider config
|
|
364
364
|
const provider = settings?.models?.providers?.["bluerouter"];
|
|
365
365
|
const primary = settings?.agents?.defaults?.model?.primary || "";
|
|
366
366
|
const model = primary.startsWith("bluerouter/") ? primary.replace("bluerouter/", "") : (provider?.models?.[0]?.id || "");
|
|
@@ -431,10 +431,10 @@ async function buildOpenCodeHeader() {
|
|
|
431
431
|
const result = await api.getCliToolSettings("opencode");
|
|
432
432
|
if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
|
|
433
433
|
|
|
434
|
-
const { installed,
|
|
434
|
+
const { installed, hasBluerouter, opencode } = result.data;
|
|
435
435
|
if (!installed) return `Status: ${COLORS.red}✗ OpenCode CLI not installed${COLORS.reset}`;
|
|
436
436
|
|
|
437
|
-
if (!
|
|
437
|
+
if (!hasBluerouter) {
|
|
438
438
|
return [
|
|
439
439
|
`Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
|
|
440
440
|
`${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
|
|
@@ -519,10 +519,10 @@ async function buildHermesHeader() {
|
|
|
519
519
|
const result = await api.getCliToolSettings("hermes");
|
|
520
520
|
if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
|
|
521
521
|
|
|
522
|
-
const { installed,
|
|
522
|
+
const { installed, hasBluerouter, settings } = result.data;
|
|
523
523
|
if (!installed) return `Status: ${COLORS.red}✗ Hermes Agent not installed${COLORS.reset}`;
|
|
524
524
|
|
|
525
|
-
if (!
|
|
525
|
+
if (!hasBluerouter) {
|
|
526
526
|
return [
|
|
527
527
|
`Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
|
|
528
528
|
`${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
|
|
@@ -585,7 +585,7 @@ async function showCliToolsMenu(port, breadcrumb = []) {
|
|
|
585
585
|
await showMenuWithBack({
|
|
586
586
|
title: "🔧 CLI Tools",
|
|
587
587
|
breadcrumb,
|
|
588
|
-
headerContent: `Configure CLI tools to use
|
|
588
|
+
headerContent: `Configure CLI tools to use Bluerouter\nEndpoint: ${endpoint}`,
|
|
589
589
|
items: [
|
|
590
590
|
{
|
|
591
591
|
label: "Claude Code",
|
package/src/cli/terminalUI.js
CHANGED
|
@@ -67,14 +67,14 @@ async function startTerminalUI(port) {
|
|
|
67
67
|
// Configure API client
|
|
68
68
|
api.configure({ port });
|
|
69
69
|
|
|
70
|
-
const basePath = ["
|
|
70
|
+
const basePath = ["Bluerouter"];
|
|
71
71
|
|
|
72
72
|
// Prime header cache before first render
|
|
73
73
|
await refreshHeaderBg(port);
|
|
74
74
|
|
|
75
75
|
// Main menu
|
|
76
76
|
await showMenuWithBack({
|
|
77
|
-
title: "📡
|
|
77
|
+
title: "📡 Bluerouter Terminal UI",
|
|
78
78
|
breadcrumb: basePath,
|
|
79
79
|
headerContent: () => getHeader(port),
|
|
80
80
|
items: [
|
|
@@ -280,8 +280,8 @@ function enableLinux(cliPath) {
|
|
|
280
280
|
|
|
281
281
|
const desktopContent = `[Desktop Entry]
|
|
282
282
|
Type=Application
|
|
283
|
-
Name=
|
|
284
|
-
Comment=
|
|
283
|
+
Name=Bluerouter
|
|
284
|
+
Comment=Bluerouter API Proxy
|
|
285
285
|
Exec=${nodePath} ${routerScript} --tray --skip-update
|
|
286
286
|
Hidden=false
|
|
287
287
|
NoDisplay=false
|
package/src/cli/tray/tray.js
CHANGED
|
@@ -58,7 +58,7 @@ function initTray(options) {
|
|
|
58
58
|
*/
|
|
59
59
|
function buildMenuItems(port, autostartEnabled) {
|
|
60
60
|
return [
|
|
61
|
-
{ title: `
|
|
61
|
+
{ title: `Bluerouter (Port ${port})`, tooltip: "Server is running", enabled: false },
|
|
62
62
|
{ title: "Open Dashboard", tooltip: "Open in browser", enabled: true },
|
|
63
63
|
{
|
|
64
64
|
title: autostartEnabled ? "✓ Auto-start Enabled" : "Enable Auto-start",
|
|
@@ -121,7 +121,7 @@ function initWindowsTray(options) {
|
|
|
121
121
|
|
|
122
122
|
trayInstance = initWinTray({
|
|
123
123
|
iconPath,
|
|
124
|
-
tooltip: `
|
|
124
|
+
tooltip: `Bluerouter - Port ${port}`,
|
|
125
125
|
items,
|
|
126
126
|
onClick: (index) => {
|
|
127
127
|
handleClick(index, options, (newEnabled) => {
|
|
@@ -204,7 +204,7 @@ function initUnixTray(options) {
|
|
|
204
204
|
// because template mode only uses the alpha channel.
|
|
205
205
|
isTemplateIcon: false,
|
|
206
206
|
title: "",
|
|
207
|
-
tooltip: `
|
|
207
|
+
tooltip: `Bluerouter - Port ${port}`,
|
|
208
208
|
items
|
|
209
209
|
};
|
|
210
210
|
|
package/src/cli/tray/tray.ps1
CHANGED