@jheavenknows/bluerouter 1.0.51 → 1.0.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/.next-cli-build/BUILD_ID +1 -1
- package/app/.next-cli-build/app-path-routes-manifest.json +5 -5
- 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/required-server-files.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/ollama-nodes/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/ollama-nodes/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.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.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.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/virtual-combos/page.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.js +1 -1
- package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/app/.next-cli-build/server/app/_not-found.rsc +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 +4 -4
- 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 +2 -2
- package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/login/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/status/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +4 -4
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js +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.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +3 -3
- package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/route.js +1 -1
- package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/route.js +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 +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/availability/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/disabled/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/ollama-model-memory/route.js +1 -1
- package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/install/route.js +170 -46
- package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/status/route.js +1 -1
- package/app/.next-cli-build/server/app/api/ollama-nodes/route.js +1 -1
- package/app/.next-cli-build/server/app/api/ollama-routing-targets/route.js +1 -1
- package/app/.next-cli-build/server/app/api/pricing/route.js +1 -1
- package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/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 +1 -1
- package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js +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/deno-deploy/route.js +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/route.js +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/require-login/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/route.js +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 +1 -1
- package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/disable/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/enable/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/status/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js +2 -2
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/chart/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/stream/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/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 +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 +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.js +1 -1
- package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/callback.html +1 -1
- package/app/.next-cli-build/server/app/callback.rsc +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 +4 -4
- package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +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 +4 -4
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +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 +7 -7
- 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 +4 -4
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/combos.html +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 +4 -4
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +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 +8 -8
- 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 +4 -4
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +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 +4 -4
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.rsc +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 +4 -4
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/!KGRhc2hib2FyZCk/dashboard/ollama-nodes/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/!KGRhc2hib2FyZCk/dashboard/ollama-nodes.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.rsc +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 +4 -4
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.rsc +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 +4 -4
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/provider-health.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/provider-health.rsc +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 +4 -4
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +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 +4 -4
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers.html +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 +4 -4
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +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 +4 -4
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/quota.html +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 +4 -4
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_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 +4 -4
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +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 +4 -4
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.rsc +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 +4 -4
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.rsc +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 +4 -4
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
- 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 +4 -4
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard.html +1 -1
- package/app/.next-cli-build/server/app/dashboard.rsc +7 -7
- 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 +7 -7
- 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 +4 -4
- package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
- 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 +4 -4
- package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/landing/page.js +2 -2
- 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 +4 -4
- package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +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.js +1 -1
- package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/login.html +1 -1
- package/app/.next-cli-build/server/app/login.rsc +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 +4 -4
- package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/page.js +1 -1
- package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app-paths-manifest.json +5 -5
- package/app/.next-cli-build/server/chunks/2769.js +1 -1
- package/app/.next-cli-build/server/chunks/3110.js +1 -1
- package/app/.next-cli-build/server/chunks/4746.js +1 -1
- package/app/.next-cli-build/server/chunks/7153.js +1 -1
- package/app/.next-cli-build/server/chunks/7197.js +1 -1
- package/app/.next-cli-build/server/chunks/7774.js +8 -8
- package/app/.next-cli-build/server/chunks/7965.js +1 -1
- package/app/.next-cli-build/server/chunks/8491.js +1 -1
- package/app/.next-cli-build/server/chunks/8520.js +1 -1
- package/app/.next-cli-build/server/chunks/8895.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 +1 -1
- package/app/.next-cli-build/server/pages/404.html +1 -1
- package/app/.next-cli-build/server/pages/500.html +1 -1
- package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
- package/app/.next-cli-build/static/chunks/{1321-8d63c226121155a8.js → 1321-5ef553cf7914ae11.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/landing/{page-70884f02f4f66d0e.js → page-7d550a4fdc74c753.js} +1 -1
- package/app/.next-cli-build/static/css/{b301b62b8274cce1.css → 0f03023a765dc337.css} +1 -1
- package/app/.next-cli-build/static/media/material-symbols-outlined.50fdf095.woff2 +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/cli/.build-home/AppData/Roaming/bluerouter/jwt-secret +1 -1
- package/app/cli/.build-home/AppData/Roaming/bluerouter/machine-id +1 -1
- package/app/cli/.build-home/AppData/Roaming/nextjs-nodejs/Config/config.json +3 -3
- package/app/package.json +4 -4
- package/app/public/favicon.svg +58 -58
- package/app/public/i18n/literals/ar.json +194 -194
- package/app/public/i18n/literals/bn.json +194 -194
- package/app/public/i18n/literals/cs.json +194 -194
- package/app/public/i18n/literals/da.json +194 -194
- package/app/public/i18n/literals/de.json +194 -194
- package/app/public/i18n/literals/el.json +194 -194
- package/app/public/i18n/literals/es.json +194 -194
- package/app/public/i18n/literals/fi.json +194 -194
- package/app/public/i18n/literals/fr.json +194 -194
- package/app/public/i18n/literals/he.json +194 -194
- package/app/public/i18n/literals/hi.json +194 -194
- package/app/public/i18n/literals/hu.json +194 -194
- package/app/public/i18n/literals/id.json +194 -194
- package/app/public/i18n/literals/it.json +194 -194
- package/app/public/i18n/literals/ja.json +194 -194
- package/app/public/i18n/literals/ko.json +194 -194
- package/app/public/i18n/literals/nl.json +194 -194
- package/app/public/i18n/literals/no.json +194 -194
- package/app/public/i18n/literals/pl.json +194 -194
- package/app/public/i18n/literals/pt-BR.json +194 -194
- package/app/public/i18n/literals/pt-PT.json +194 -194
- package/app/public/i18n/literals/ro.json +194 -194
- package/app/public/i18n/literals/ru.json +194 -194
- package/app/public/i18n/literals/sv.json +194 -194
- package/app/public/i18n/literals/th.json +194 -194
- package/app/public/i18n/literals/tl.json +194 -194
- package/app/public/i18n/literals/tr.json +194 -194
- package/app/public/i18n/literals/uk.json +194 -194
- package/app/public/i18n/literals/ur.json +194 -194
- package/app/public/i18n/literals/vi.json +194 -194
- package/app/public/i18n/literals/zh-CN.json +768 -768
- package/app/public/i18n/literals/zh-TW.json +194 -194
- package/app/server.js +1 -1
- package/app/src/lib/updater/updater.js +235 -235
- package/hooks/postinstall.js +22 -22
- package/hooks/sqliteRuntime.js +139 -139
- package/hooks/trayRuntime.js +107 -107
- package/package.json +3 -1
- package/src/cli/api/client.js +547 -547
- package/src/cli/menus/cliTools.js +618 -618
- package/src/cli/menus/providers.js +10 -10
- package/src/cli/menus/settings.js +207 -207
- package/src/cli/terminalUI.js +121 -121
- package/src/cli/tray/autostart.js +306 -306
- package/src/cli/tray/tray.js +322 -322
- package/app/.next-cli-build/static/media/material-symbols-outlined.acf6198a.woff2 +0 -0
- package/app/cli/.build-home/AppData/Roaming/9router/db/backups/upgrade-1.0.18-to-1.0.19-1.0.19-20260526-095516/data.sqlite +0 -0
- package/app/cli/.build-home/AppData/Roaming/9router/db/backups/upgrade-1.0.19-to-1.0.20-1.0.20-20260526-095953/data.sqlite +0 -0
- package/app/cli/.build-home/AppData/Roaming/9router/db/backups/upgrade-1.0.20-to-1.0.21-1.0.21-20260526-100915/data.sqlite +0 -0
- package/app/cli/.build-home/AppData/Roaming/9router/db/backups/upgrade-1.0.21-to-1.0.22-1.0.22-20260526-102212/data.sqlite +0 -0
- package/app/cli/.build-home/AppData/Roaming/9router/db/data.sqlite +0 -0
- package/app/cli/.build-home/AppData/Roaming/9router/db/data.sqlite-shm +0 -0
- package/app/cli/.build-home/AppData/Roaming/9router/db/data.sqlite-wal +0 -0
- package/app/cli/.build-home/AppData/Roaming/9router/jwt-secret +0 -1
- package/app/cli/.build-home/AppData/Roaming/9router/machine-id +0 -1
- package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-1.0.46-to-1.0.47-1.0.47-20260526-224538/data.sqlite +0 -0
- package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-1.0.47-to-1.0.48-1.0.48-20260526-232153/data.sqlite +0 -0
- package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-1.0.48-to-1.0.49-1.0.49-20260526-233719/data.sqlite +0 -0
- package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-1.0.49-to-1.0.50-1.0.50-20260526-234400/data.sqlite +0 -0
- package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-1.0.50-to-1.0.51-1.0.51-20260526-235526/data.sqlite +0 -0
- /package/app/.next-cli-build/static/{JCrst1bYxD23RuorShv5s → QSbdGxh8toy2LcHGBDqR0}/_buildManifest.js +0 -0
- /package/app/.next-cli-build/static/{JCrst1bYxD23RuorShv5s → QSbdGxh8toy2LcHGBDqR0}/_ssgManifest.js +0 -0
- /package/app/cli/.build-home/AppData/Roaming/{9router/db/backups/upgrade-1.0.17-to-1.0.18-1.0.18-20260526-095022 → bluerouter/db/backups/upgrade-1.0.52-to-1.0.53-1.0.53-20260527-171653}/data.sqlite +0 -0
|
@@ -1,306 +1,306 @@
|
|
|
1
|
-
const fs = require("fs");
|
|
2
|
-
const path = require("path");
|
|
3
|
-
const os = require("os");
|
|
4
|
-
const { execSync } = require("child_process");
|
|
5
|
-
|
|
6
|
-
const APP_NAME = "bluerouter";
|
|
7
|
-
const APP_LABEL = "com.bluerouter.autostart";
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Resolve the absolute path to this package's cli.js.
|
|
11
|
-
*
|
|
12
|
-
* Order of preference:
|
|
13
|
-
* 1. Explicit `cliPath` argument — cleanest, used when called from running
|
|
14
|
-
* cli.js with `__filename`.
|
|
15
|
-
* 2. `process.argv[1]` if it's our cli.js — true when bluerouter is currently
|
|
16
|
-
* running and the tray menu fires this code path.
|
|
17
|
-
* 3. Compute relative to this file's own location. autostart.js lives at
|
|
18
|
-
* `<pkg>/src/cli/tray/autostart.js`, so cli.js is three levels up.
|
|
19
|
-
* This works for any global install layout (nvm, Volta, asdf, Homebrew,
|
|
20
|
-
* /usr/local, etc.) without depending on `npm bin -g` (removed in npm 9)
|
|
21
|
-
* or a hardcoded `/usr/local/...` path.
|
|
22
|
-
*
|
|
23
|
-
* Returns null if no candidate exists — callers should not write an autostart
|
|
24
|
-
* entry pointing at a non-existent script.
|
|
25
|
-
*/
|
|
26
|
-
function getCliJsPath(cliPath) {
|
|
27
|
-
if (cliPath) {
|
|
28
|
-
const resolved = path.resolve(cliPath);
|
|
29
|
-
if (fs.existsSync(resolved)) return resolved;
|
|
30
|
-
}
|
|
31
|
-
if (process.argv[1]) {
|
|
32
|
-
const resolved = path.resolve(process.argv[1]);
|
|
33
|
-
if (path.basename(resolved) === "cli.js" && fs.existsSync(resolved)) {
|
|
34
|
-
return resolved;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
const computed = path.resolve(__dirname, "..", "..", "..", "cli.js");
|
|
38
|
-
if (fs.existsSync(computed)) return computed;
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Enable auto startup on OS boot
|
|
44
|
-
* @param {string} cliPath - Optional path to cli.js (defaults to auto-detect)
|
|
45
|
-
* @returns {boolean} success
|
|
46
|
-
*/
|
|
47
|
-
function enableAutoStart(cliPath) {
|
|
48
|
-
const platform = process.platform;
|
|
49
|
-
|
|
50
|
-
if (!["darwin", "win32", "linux"].includes(platform)) return false;
|
|
51
|
-
if (platform === "linux" && !process.env.DISPLAY) return false;
|
|
52
|
-
|
|
53
|
-
try {
|
|
54
|
-
if (platform === "darwin") return enableMacOS(cliPath);
|
|
55
|
-
if (platform === "win32") return enableWindows(cliPath);
|
|
56
|
-
if (platform === "linux") return enableLinux(cliPath);
|
|
57
|
-
} catch (err) {
|
|
58
|
-
// Silent fail — autostart is optional
|
|
59
|
-
}
|
|
60
|
-
return false;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Disable auto startup
|
|
65
|
-
* @returns {boolean} success
|
|
66
|
-
*/
|
|
67
|
-
function disableAutoStart() {
|
|
68
|
-
const platform = process.platform;
|
|
69
|
-
try {
|
|
70
|
-
if (platform === "darwin") return disableMacOS();
|
|
71
|
-
if (platform === "win32") return disableWindows();
|
|
72
|
-
if (platform === "linux") return disableLinux();
|
|
73
|
-
} catch (err) {}
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Check if autostart is enabled.
|
|
79
|
-
*
|
|
80
|
-
* On macOS, both the plist file and the launchd registration must be present —
|
|
81
|
-
* otherwise the tray menu would lie about the state (showing "✓ Enabled" even
|
|
82
|
-
* when launchd has the agent in a failed state or hasn't loaded it).
|
|
83
|
-
*/
|
|
84
|
-
function isAutoStartEnabled() {
|
|
85
|
-
const platform = process.platform;
|
|
86
|
-
|
|
87
|
-
try {
|
|
88
|
-
if (platform === "darwin") {
|
|
89
|
-
const plistPath = path.join(os.homedir(), "Library", "LaunchAgents", `${APP_LABEL}.plist`);
|
|
90
|
-
if (!fs.existsSync(plistPath)) return false;
|
|
91
|
-
try {
|
|
92
|
-
execSync(`launchctl list ${APP_LABEL}`, {
|
|
93
|
-
stdio: ["ignore", "ignore", "ignore"],
|
|
94
|
-
timeout: 3000
|
|
95
|
-
});
|
|
96
|
-
return true;
|
|
97
|
-
} catch (e) {
|
|
98
|
-
return false;
|
|
99
|
-
}
|
|
100
|
-
} else if (platform === "win32") {
|
|
101
|
-
const startupPath = path.join(process.env.APPDATA || "", "Microsoft", "Windows", "Start Menu", "Programs", "Startup", `${APP_NAME}.vbs`);
|
|
102
|
-
return fs.existsSync(startupPath);
|
|
103
|
-
} else if (platform === "linux") {
|
|
104
|
-
const desktopPath = path.join(os.homedir(), ".config", "autostart", `${APP_NAME}.desktop`);
|
|
105
|
-
return fs.existsSync(desktopPath);
|
|
106
|
-
}
|
|
107
|
-
} catch (e) {}
|
|
108
|
-
return false;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// ============ macOS ============
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Returns true when the current Node process IS the running instance that
|
|
115
|
-
* launchd is managing under our agent label.
|
|
116
|
-
*
|
|
117
|
-
* `launchctl unload <plist>` (and `load`) for an Aqua user-domain agent sends
|
|
118
|
-
* SIGTERM to the running process. When the running bluerouter cli.js was itself
|
|
119
|
-
* spawned by the autostart launchd agent (i.e. user enabled autostart at
|
|
120
|
-
* some point, then rebooted, then clicked the tray icon's "Disable
|
|
121
|
-
* Auto-start" menu item), an unload would kill the very process executing
|
|
122
|
-
* the click handler — and the tray icon would disappear instead of the menu
|
|
123
|
-
* label flipping back to "Enable Auto-start". This helper lets the enable
|
|
124
|
-
* and disable paths sidestep that by skipping launchctl when we'd otherwise
|
|
125
|
-
* be killing ourselves.
|
|
126
|
-
*/
|
|
127
|
-
function isAgentSelfMacOS() {
|
|
128
|
-
try {
|
|
129
|
-
const output = execSync(`launchctl list ${APP_LABEL}`, {
|
|
130
|
-
encoding: "utf8",
|
|
131
|
-
stdio: ["ignore", "pipe", "ignore"],
|
|
132
|
-
timeout: 3000
|
|
133
|
-
});
|
|
134
|
-
const match = output.match(/"PID"\s*=\s*(\d+)/);
|
|
135
|
-
return !!(match && parseInt(match[1], 10) === process.pid);
|
|
136
|
-
} catch (e) {
|
|
137
|
-
return false;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
function enableMacOS(cliPath) {
|
|
142
|
-
const launchAgentsDir = path.join(os.homedir(), "Library", "LaunchAgents");
|
|
143
|
-
const plistPath = path.join(launchAgentsDir, `${APP_LABEL}.plist`);
|
|
144
|
-
|
|
145
|
-
if (!fs.existsSync(launchAgentsDir)) {
|
|
146
|
-
fs.mkdirSync(launchAgentsDir, { recursive: true });
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
const nodePath = process.execPath;
|
|
150
|
-
const routerScript = getCliJsPath(cliPath);
|
|
151
|
-
// Don't write a broken plist that references a non-existent script.
|
|
152
|
-
if (!routerScript) return false;
|
|
153
|
-
|
|
154
|
-
// Invoke node + cli.js directly with absolute paths — no shell wrapper.
|
|
155
|
-
// The previous design ran `zsh -l -c "..."` so a login shell would source
|
|
156
|
-
// nvm/.zshrc and set PATH; that's fragile (nvm.sh sourcing varies by user,
|
|
157
|
-
// some setups don't put node on PATH from a non-interactive login shell).
|
|
158
|
-
// EnvironmentVariables.PATH explicitly includes node's bin dir so child
|
|
159
|
-
// processes spawned by cli.js (npm install at runtime, etc.) resolve.
|
|
160
|
-
const launchPath = `${path.dirname(nodePath)}:/usr/local/bin:/usr/bin:/bin`;
|
|
161
|
-
|
|
162
|
-
const plistContent = `<?xml version="1.0" encoding="UTF-8"?>
|
|
163
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
164
|
-
<plist version="1.0">
|
|
165
|
-
<dict>
|
|
166
|
-
<key>Label</key>
|
|
167
|
-
<string>${APP_LABEL}</string>
|
|
168
|
-
<key>ProgramArguments</key>
|
|
169
|
-
<array>
|
|
170
|
-
<string>${nodePath}</string>
|
|
171
|
-
<string>${routerScript}</string>
|
|
172
|
-
<string>--tray</string>
|
|
173
|
-
<string>--skip-update</string>
|
|
174
|
-
</array>
|
|
175
|
-
<key>EnvironmentVariables</key>
|
|
176
|
-
<dict>
|
|
177
|
-
<key>PATH</key>
|
|
178
|
-
<string>${launchPath}</string>
|
|
179
|
-
</dict>
|
|
180
|
-
<key>RunAtLoad</key>
|
|
181
|
-
<true/>
|
|
182
|
-
<key>KeepAlive</key>
|
|
183
|
-
<false/>
|
|
184
|
-
<key>StandardOutPath</key>
|
|
185
|
-
<string>/tmp/bluerouter.log</string>
|
|
186
|
-
<key>StandardErrorPath</key>
|
|
187
|
-
<string>/tmp/bluerouter.error.log</string>
|
|
188
|
-
</dict>
|
|
189
|
-
</plist>`;
|
|
190
|
-
|
|
191
|
-
fs.writeFileSync(plistPath, plistContent);
|
|
192
|
-
|
|
193
|
-
// If we're the running agent already, launchctl unload/load would send
|
|
194
|
-
// ourselves SIGTERM. Skip it — the plist file is updated on disk and
|
|
195
|
-
// launchd will pick it up at next login. isAutoStartEnabled() will still
|
|
196
|
-
// return true because launchctl already has the agent loaded.
|
|
197
|
-
if (isAgentSelfMacOS()) {
|
|
198
|
-
return true;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
// Register with launchd in the current session. Without this, the agent
|
|
202
|
-
// only takes effect on the next user login and the user has no signal that
|
|
203
|
-
// anything actually happened. `unload` first defends against re-enable
|
|
204
|
-
// replacing an existing plist.
|
|
205
|
-
try {
|
|
206
|
-
execSync(`launchctl unload "${plistPath}"`, { stdio: "ignore" });
|
|
207
|
-
} catch (e) {}
|
|
208
|
-
try {
|
|
209
|
-
execSync(`launchctl load -w "${plistPath}"`, { stdio: "ignore" });
|
|
210
|
-
} catch (e) {
|
|
211
|
-
// Even if load fails, the plist is on disk and will be picked up at next
|
|
212
|
-
// login; report success based on the file write.
|
|
213
|
-
}
|
|
214
|
-
return true;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
function disableMacOS() {
|
|
218
|
-
const plistPath = path.join(os.homedir(), "Library", "LaunchAgents", `${APP_LABEL}.plist`);
|
|
219
|
-
|
|
220
|
-
// Don't kill ourselves: when the current process is the running agent,
|
|
221
|
-
// `launchctl unload` would send SIGTERM and the user clicking
|
|
222
|
-
// "Disable Auto-start" from the tray menu would lose their tray icon
|
|
223
|
-
// instead of just flipping the menu label. Skip the unload — removing the
|
|
224
|
-
// plist file is enough to prevent the agent from starting on next login.
|
|
225
|
-
if (!isAgentSelfMacOS()) {
|
|
226
|
-
try {
|
|
227
|
-
execSync(`launchctl unload "${plistPath}"`, { stdio: "ignore" });
|
|
228
|
-
} catch (e) {}
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
if (fs.existsSync(plistPath)) {
|
|
232
|
-
fs.unlinkSync(plistPath);
|
|
233
|
-
}
|
|
234
|
-
return true;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
// ============ Windows ============
|
|
238
|
-
|
|
239
|
-
function enableWindows(cliPath) {
|
|
240
|
-
const startupDir = path.join(process.env.APPDATA || "", "Microsoft", "Windows", "Start Menu", "Programs", "Startup");
|
|
241
|
-
const vbsPath = path.join(startupDir, `${APP_NAME}.vbs`);
|
|
242
|
-
|
|
243
|
-
if (!fs.existsSync(startupDir)) return false;
|
|
244
|
-
|
|
245
|
-
const nodePath = process.execPath;
|
|
246
|
-
const routerScript = getCliJsPath(cliPath);
|
|
247
|
-
if (!routerScript) return false;
|
|
248
|
-
|
|
249
|
-
// Run node + cli.js directly, hidden window. Avoids the fragile
|
|
250
|
-
// `bluerouter.cmd` lookup that depended on the npm prefix path.
|
|
251
|
-
const vbsContent = `Set WshShell = CreateObject("WScript.Shell")
|
|
252
|
-
WshShell.Run """${nodePath}"" ""${routerScript}"" --tray --skip-update", 0, False
|
|
253
|
-
`;
|
|
254
|
-
fs.writeFileSync(vbsPath, vbsContent);
|
|
255
|
-
return true;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
function disableWindows() {
|
|
259
|
-
const vbsPath = path.join(process.env.APPDATA || "", "Microsoft", "Windows", "Start Menu", "Programs", "Startup", `${APP_NAME}.vbs`);
|
|
260
|
-
if (fs.existsSync(vbsPath)) {
|
|
261
|
-
fs.unlinkSync(vbsPath);
|
|
262
|
-
}
|
|
263
|
-
return true;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
// ============ Linux ============
|
|
267
|
-
|
|
268
|
-
function enableLinux(cliPath) {
|
|
269
|
-
const autostartDir = path.join(os.homedir(), ".config", "autostart");
|
|
270
|
-
const desktopPath = path.join(autostartDir, `${APP_NAME}.desktop`);
|
|
271
|
-
|
|
272
|
-
if (!fs.existsSync(autostartDir)) {
|
|
273
|
-
try { fs.mkdirSync(autostartDir, { recursive: true }); }
|
|
274
|
-
catch (e) { return false; }
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
const nodePath = process.execPath;
|
|
278
|
-
const routerScript = getCliJsPath(cliPath);
|
|
279
|
-
if (!routerScript) return false;
|
|
280
|
-
|
|
281
|
-
const desktopContent = `[Desktop Entry]
|
|
282
|
-
Type=Application
|
|
283
|
-
Name=Bluerouter
|
|
284
|
-
Comment=Bluerouter API Proxy
|
|
285
|
-
Exec=${nodePath} ${routerScript} --tray --skip-update
|
|
286
|
-
Hidden=false
|
|
287
|
-
NoDisplay=false
|
|
288
|
-
X-GNOME-Autostart-enabled=true
|
|
289
|
-
`;
|
|
290
|
-
fs.writeFileSync(desktopPath, desktopContent);
|
|
291
|
-
return true;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
function disableLinux() {
|
|
295
|
-
const desktopPath = path.join(os.homedir(), ".config", "autostart", `${APP_NAME}.desktop`);
|
|
296
|
-
if (fs.existsSync(desktopPath)) {
|
|
297
|
-
fs.unlinkSync(desktopPath);
|
|
298
|
-
}
|
|
299
|
-
return true;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
module.exports = {
|
|
303
|
-
enableAutoStart,
|
|
304
|
-
disableAutoStart,
|
|
305
|
-
isAutoStartEnabled
|
|
306
|
-
};
|
|
1
|
+
const fs = require("fs");
|
|
2
|
+
const path = require("path");
|
|
3
|
+
const os = require("os");
|
|
4
|
+
const { execSync } = require("child_process");
|
|
5
|
+
|
|
6
|
+
const APP_NAME = "bluerouter";
|
|
7
|
+
const APP_LABEL = "com.bluerouter.autostart";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Resolve the absolute path to this package's cli.js.
|
|
11
|
+
*
|
|
12
|
+
* Order of preference:
|
|
13
|
+
* 1. Explicit `cliPath` argument — cleanest, used when called from running
|
|
14
|
+
* cli.js with `__filename`.
|
|
15
|
+
* 2. `process.argv[1]` if it's our cli.js — true when bluerouter is currently
|
|
16
|
+
* running and the tray menu fires this code path.
|
|
17
|
+
* 3. Compute relative to this file's own location. autostart.js lives at
|
|
18
|
+
* `<pkg>/src/cli/tray/autostart.js`, so cli.js is three levels up.
|
|
19
|
+
* This works for any global install layout (nvm, Volta, asdf, Homebrew,
|
|
20
|
+
* /usr/local, etc.) without depending on `npm bin -g` (removed in npm 9)
|
|
21
|
+
* or a hardcoded `/usr/local/...` path.
|
|
22
|
+
*
|
|
23
|
+
* Returns null if no candidate exists — callers should not write an autostart
|
|
24
|
+
* entry pointing at a non-existent script.
|
|
25
|
+
*/
|
|
26
|
+
function getCliJsPath(cliPath) {
|
|
27
|
+
if (cliPath) {
|
|
28
|
+
const resolved = path.resolve(cliPath);
|
|
29
|
+
if (fs.existsSync(resolved)) return resolved;
|
|
30
|
+
}
|
|
31
|
+
if (process.argv[1]) {
|
|
32
|
+
const resolved = path.resolve(process.argv[1]);
|
|
33
|
+
if (path.basename(resolved) === "cli.js" && fs.existsSync(resolved)) {
|
|
34
|
+
return resolved;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const computed = path.resolve(__dirname, "..", "..", "..", "cli.js");
|
|
38
|
+
if (fs.existsSync(computed)) return computed;
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Enable auto startup on OS boot
|
|
44
|
+
* @param {string} cliPath - Optional path to cli.js (defaults to auto-detect)
|
|
45
|
+
* @returns {boolean} success
|
|
46
|
+
*/
|
|
47
|
+
function enableAutoStart(cliPath) {
|
|
48
|
+
const platform = process.platform;
|
|
49
|
+
|
|
50
|
+
if (!["darwin", "win32", "linux"].includes(platform)) return false;
|
|
51
|
+
if (platform === "linux" && !process.env.DISPLAY) return false;
|
|
52
|
+
|
|
53
|
+
try {
|
|
54
|
+
if (platform === "darwin") return enableMacOS(cliPath);
|
|
55
|
+
if (platform === "win32") return enableWindows(cliPath);
|
|
56
|
+
if (platform === "linux") return enableLinux(cliPath);
|
|
57
|
+
} catch (err) {
|
|
58
|
+
// Silent fail — autostart is optional
|
|
59
|
+
}
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Disable auto startup
|
|
65
|
+
* @returns {boolean} success
|
|
66
|
+
*/
|
|
67
|
+
function disableAutoStart() {
|
|
68
|
+
const platform = process.platform;
|
|
69
|
+
try {
|
|
70
|
+
if (platform === "darwin") return disableMacOS();
|
|
71
|
+
if (platform === "win32") return disableWindows();
|
|
72
|
+
if (platform === "linux") return disableLinux();
|
|
73
|
+
} catch (err) {}
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Check if autostart is enabled.
|
|
79
|
+
*
|
|
80
|
+
* On macOS, both the plist file and the launchd registration must be present —
|
|
81
|
+
* otherwise the tray menu would lie about the state (showing "✓ Enabled" even
|
|
82
|
+
* when launchd has the agent in a failed state or hasn't loaded it).
|
|
83
|
+
*/
|
|
84
|
+
function isAutoStartEnabled() {
|
|
85
|
+
const platform = process.platform;
|
|
86
|
+
|
|
87
|
+
try {
|
|
88
|
+
if (platform === "darwin") {
|
|
89
|
+
const plistPath = path.join(os.homedir(), "Library", "LaunchAgents", `${APP_LABEL}.plist`);
|
|
90
|
+
if (!fs.existsSync(plistPath)) return false;
|
|
91
|
+
try {
|
|
92
|
+
execSync(`launchctl list ${APP_LABEL}`, {
|
|
93
|
+
stdio: ["ignore", "ignore", "ignore"],
|
|
94
|
+
timeout: 3000
|
|
95
|
+
});
|
|
96
|
+
return true;
|
|
97
|
+
} catch (e) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
} else if (platform === "win32") {
|
|
101
|
+
const startupPath = path.join(process.env.APPDATA || "", "Microsoft", "Windows", "Start Menu", "Programs", "Startup", `${APP_NAME}.vbs`);
|
|
102
|
+
return fs.existsSync(startupPath);
|
|
103
|
+
} else if (platform === "linux") {
|
|
104
|
+
const desktopPath = path.join(os.homedir(), ".config", "autostart", `${APP_NAME}.desktop`);
|
|
105
|
+
return fs.existsSync(desktopPath);
|
|
106
|
+
}
|
|
107
|
+
} catch (e) {}
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// ============ macOS ============
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Returns true when the current Node process IS the running instance that
|
|
115
|
+
* launchd is managing under our agent label.
|
|
116
|
+
*
|
|
117
|
+
* `launchctl unload <plist>` (and `load`) for an Aqua user-domain agent sends
|
|
118
|
+
* SIGTERM to the running process. When the running bluerouter cli.js was itself
|
|
119
|
+
* spawned by the autostart launchd agent (i.e. user enabled autostart at
|
|
120
|
+
* some point, then rebooted, then clicked the tray icon's "Disable
|
|
121
|
+
* Auto-start" menu item), an unload would kill the very process executing
|
|
122
|
+
* the click handler — and the tray icon would disappear instead of the menu
|
|
123
|
+
* label flipping back to "Enable Auto-start". This helper lets the enable
|
|
124
|
+
* and disable paths sidestep that by skipping launchctl when we'd otherwise
|
|
125
|
+
* be killing ourselves.
|
|
126
|
+
*/
|
|
127
|
+
function isAgentSelfMacOS() {
|
|
128
|
+
try {
|
|
129
|
+
const output = execSync(`launchctl list ${APP_LABEL}`, {
|
|
130
|
+
encoding: "utf8",
|
|
131
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
132
|
+
timeout: 3000
|
|
133
|
+
});
|
|
134
|
+
const match = output.match(/"PID"\s*=\s*(\d+)/);
|
|
135
|
+
return !!(match && parseInt(match[1], 10) === process.pid);
|
|
136
|
+
} catch (e) {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function enableMacOS(cliPath) {
|
|
142
|
+
const launchAgentsDir = path.join(os.homedir(), "Library", "LaunchAgents");
|
|
143
|
+
const plistPath = path.join(launchAgentsDir, `${APP_LABEL}.plist`);
|
|
144
|
+
|
|
145
|
+
if (!fs.existsSync(launchAgentsDir)) {
|
|
146
|
+
fs.mkdirSync(launchAgentsDir, { recursive: true });
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const nodePath = process.execPath;
|
|
150
|
+
const routerScript = getCliJsPath(cliPath);
|
|
151
|
+
// Don't write a broken plist that references a non-existent script.
|
|
152
|
+
if (!routerScript) return false;
|
|
153
|
+
|
|
154
|
+
// Invoke node + cli.js directly with absolute paths — no shell wrapper.
|
|
155
|
+
// The previous design ran `zsh -l -c "..."` so a login shell would source
|
|
156
|
+
// nvm/.zshrc and set PATH; that's fragile (nvm.sh sourcing varies by user,
|
|
157
|
+
// some setups don't put node on PATH from a non-interactive login shell).
|
|
158
|
+
// EnvironmentVariables.PATH explicitly includes node's bin dir so child
|
|
159
|
+
// processes spawned by cli.js (npm install at runtime, etc.) resolve.
|
|
160
|
+
const launchPath = `${path.dirname(nodePath)}:/usr/local/bin:/usr/bin:/bin`;
|
|
161
|
+
|
|
162
|
+
const plistContent = `<?xml version="1.0" encoding="UTF-8"?>
|
|
163
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
164
|
+
<plist version="1.0">
|
|
165
|
+
<dict>
|
|
166
|
+
<key>Label</key>
|
|
167
|
+
<string>${APP_LABEL}</string>
|
|
168
|
+
<key>ProgramArguments</key>
|
|
169
|
+
<array>
|
|
170
|
+
<string>${nodePath}</string>
|
|
171
|
+
<string>${routerScript}</string>
|
|
172
|
+
<string>--tray</string>
|
|
173
|
+
<string>--skip-update</string>
|
|
174
|
+
</array>
|
|
175
|
+
<key>EnvironmentVariables</key>
|
|
176
|
+
<dict>
|
|
177
|
+
<key>PATH</key>
|
|
178
|
+
<string>${launchPath}</string>
|
|
179
|
+
</dict>
|
|
180
|
+
<key>RunAtLoad</key>
|
|
181
|
+
<true/>
|
|
182
|
+
<key>KeepAlive</key>
|
|
183
|
+
<false/>
|
|
184
|
+
<key>StandardOutPath</key>
|
|
185
|
+
<string>/tmp/bluerouter.log</string>
|
|
186
|
+
<key>StandardErrorPath</key>
|
|
187
|
+
<string>/tmp/bluerouter.error.log</string>
|
|
188
|
+
</dict>
|
|
189
|
+
</plist>`;
|
|
190
|
+
|
|
191
|
+
fs.writeFileSync(plistPath, plistContent);
|
|
192
|
+
|
|
193
|
+
// If we're the running agent already, launchctl unload/load would send
|
|
194
|
+
// ourselves SIGTERM. Skip it — the plist file is updated on disk and
|
|
195
|
+
// launchd will pick it up at next login. isAutoStartEnabled() will still
|
|
196
|
+
// return true because launchctl already has the agent loaded.
|
|
197
|
+
if (isAgentSelfMacOS()) {
|
|
198
|
+
return true;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// Register with launchd in the current session. Without this, the agent
|
|
202
|
+
// only takes effect on the next user login and the user has no signal that
|
|
203
|
+
// anything actually happened. `unload` first defends against re-enable
|
|
204
|
+
// replacing an existing plist.
|
|
205
|
+
try {
|
|
206
|
+
execSync(`launchctl unload "${plistPath}"`, { stdio: "ignore" });
|
|
207
|
+
} catch (e) {}
|
|
208
|
+
try {
|
|
209
|
+
execSync(`launchctl load -w "${plistPath}"`, { stdio: "ignore" });
|
|
210
|
+
} catch (e) {
|
|
211
|
+
// Even if load fails, the plist is on disk and will be picked up at next
|
|
212
|
+
// login; report success based on the file write.
|
|
213
|
+
}
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function disableMacOS() {
|
|
218
|
+
const plistPath = path.join(os.homedir(), "Library", "LaunchAgents", `${APP_LABEL}.plist`);
|
|
219
|
+
|
|
220
|
+
// Don't kill ourselves: when the current process is the running agent,
|
|
221
|
+
// `launchctl unload` would send SIGTERM and the user clicking
|
|
222
|
+
// "Disable Auto-start" from the tray menu would lose their tray icon
|
|
223
|
+
// instead of just flipping the menu label. Skip the unload — removing the
|
|
224
|
+
// plist file is enough to prevent the agent from starting on next login.
|
|
225
|
+
if (!isAgentSelfMacOS()) {
|
|
226
|
+
try {
|
|
227
|
+
execSync(`launchctl unload "${plistPath}"`, { stdio: "ignore" });
|
|
228
|
+
} catch (e) {}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
if (fs.existsSync(plistPath)) {
|
|
232
|
+
fs.unlinkSync(plistPath);
|
|
233
|
+
}
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// ============ Windows ============
|
|
238
|
+
|
|
239
|
+
function enableWindows(cliPath) {
|
|
240
|
+
const startupDir = path.join(process.env.APPDATA || "", "Microsoft", "Windows", "Start Menu", "Programs", "Startup");
|
|
241
|
+
const vbsPath = path.join(startupDir, `${APP_NAME}.vbs`);
|
|
242
|
+
|
|
243
|
+
if (!fs.existsSync(startupDir)) return false;
|
|
244
|
+
|
|
245
|
+
const nodePath = process.execPath;
|
|
246
|
+
const routerScript = getCliJsPath(cliPath);
|
|
247
|
+
if (!routerScript) return false;
|
|
248
|
+
|
|
249
|
+
// Run node + cli.js directly, hidden window. Avoids the fragile
|
|
250
|
+
// `bluerouter.cmd` lookup that depended on the npm prefix path.
|
|
251
|
+
const vbsContent = `Set WshShell = CreateObject("WScript.Shell")
|
|
252
|
+
WshShell.Run """${nodePath}"" ""${routerScript}"" --tray --skip-update", 0, False
|
|
253
|
+
`;
|
|
254
|
+
fs.writeFileSync(vbsPath, vbsContent);
|
|
255
|
+
return true;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
function disableWindows() {
|
|
259
|
+
const vbsPath = path.join(process.env.APPDATA || "", "Microsoft", "Windows", "Start Menu", "Programs", "Startup", `${APP_NAME}.vbs`);
|
|
260
|
+
if (fs.existsSync(vbsPath)) {
|
|
261
|
+
fs.unlinkSync(vbsPath);
|
|
262
|
+
}
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// ============ Linux ============
|
|
267
|
+
|
|
268
|
+
function enableLinux(cliPath) {
|
|
269
|
+
const autostartDir = path.join(os.homedir(), ".config", "autostart");
|
|
270
|
+
const desktopPath = path.join(autostartDir, `${APP_NAME}.desktop`);
|
|
271
|
+
|
|
272
|
+
if (!fs.existsSync(autostartDir)) {
|
|
273
|
+
try { fs.mkdirSync(autostartDir, { recursive: true }); }
|
|
274
|
+
catch (e) { return false; }
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
const nodePath = process.execPath;
|
|
278
|
+
const routerScript = getCliJsPath(cliPath);
|
|
279
|
+
if (!routerScript) return false;
|
|
280
|
+
|
|
281
|
+
const desktopContent = `[Desktop Entry]
|
|
282
|
+
Type=Application
|
|
283
|
+
Name=Bluerouter
|
|
284
|
+
Comment=Bluerouter API Proxy
|
|
285
|
+
Exec=${nodePath} ${routerScript} --tray --skip-update
|
|
286
|
+
Hidden=false
|
|
287
|
+
NoDisplay=false
|
|
288
|
+
X-GNOME-Autostart-enabled=true
|
|
289
|
+
`;
|
|
290
|
+
fs.writeFileSync(desktopPath, desktopContent);
|
|
291
|
+
return true;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
function disableLinux() {
|
|
295
|
+
const desktopPath = path.join(os.homedir(), ".config", "autostart", `${APP_NAME}.desktop`);
|
|
296
|
+
if (fs.existsSync(desktopPath)) {
|
|
297
|
+
fs.unlinkSync(desktopPath);
|
|
298
|
+
}
|
|
299
|
+
return true;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
module.exports = {
|
|
303
|
+
enableAutoStart,
|
|
304
|
+
disableAutoStart,
|
|
305
|
+
isAutoStartEnabled
|
|
306
|
+
};
|