@jheavenknows/bluerouter 1.0.81 → 1.0.82
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 +2 -14
- package/app/.next-cli-build/build-manifest.json +2 -2
- package/app/.next-cli-build/prerender-manifest.json +0 -48
- package/app/.next-cli-build/routes-manifest.json +0 -82
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +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 +2 -2
- 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 +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
- 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 +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +3 -3
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +2 -2
- 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 +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +3 -3
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error/page.js +2 -2
- package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_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 +2 -2
- package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/app/.next-cli-build/server/app/_not-found.rsc +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 +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 +3 -3
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js +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 +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +1 -1
- 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-registry/route.js.nft.json +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-mcp-tools/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/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 +2 -2
- 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 +2 -2
- 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/health/route.js +1 -1
- package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/init/route.js +1 -1
- package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/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/locale/route.js +1 -1
- package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js +5 -5
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/availability/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/disabled/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js +2 -2
- 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/auto-import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pricing/route.js +1 -1
- package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-health/route.js +1 -1
- package/app/.next-cli-build/server/app/api/provider-health/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js +2 -2
- package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
- package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/route.js +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
- package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/require-login/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/route.js +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/shutdown/route.js +1 -1
- package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tags/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +2 -2
- package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/load/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/save/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/disable/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/enable/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/status/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/chart/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/stream/route.js +2 -2
- package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/restart/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/restart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/callback/page.js +2 -2
- package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/callback.html +1 -1
- package/app/.next-cli-build/server/app/callback.rsc +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 +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 +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 +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 +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/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 +2 -2
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +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.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 +4 -4
- package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/favicon.ico/route.js +1 -1
- package/app/.next-cli-build/server/app/favicon.ico/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/index.html +1 -1
- package/app/.next-cli-build/server/app/index.rsc +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.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/landing.html +1 -1
- package/app/.next-cli-build/server/app/landing.rsc +4 -4
- package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
- 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 +1 -1
- package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login/page.js +2 -2
- package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/login.html +1 -1
- package/app/.next-cli-build/server/app/login.rsc +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/manifest.webmanifest/route.js +2 -2
- package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/page.js +2 -2
- package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app-paths-manifest.json +2 -14
- package/app/.next-cli-build/server/chunks/{5199.js → 1850.js} +1 -1
- package/app/.next-cli-build/server/chunks/3104.js +1 -1
- package/app/.next-cli-build/server/chunks/3110.js +1 -1
- package/app/.next-cli-build/server/chunks/318.js +1 -1
- package/app/.next-cli-build/server/chunks/4177.js +1 -0
- package/app/.next-cli-build/server/chunks/4632.js +1 -1
- package/app/.next-cli-build/server/chunks/4746.js +1 -1
- package/app/.next-cli-build/server/chunks/4884.js +1 -1
- package/app/.next-cli-build/server/chunks/6108.js +1 -1
- package/app/.next-cli-build/server/chunks/6604.js +1 -1
- package/app/.next-cli-build/server/chunks/7130.js +1 -1
- package/app/.next-cli-build/server/chunks/7153.js +1 -1
- package/app/.next-cli-build/server/chunks/8491.js +2 -2
- package/app/.next-cli-build/server/chunks/8520.js +1 -1
- package/app/.next-cli-build/server/chunks/918.js +1 -1
- package/app/.next-cli-build/server/chunks/9489.js +2 -1
- package/app/.next-cli-build/server/functions-config-manifest.json +1 -9
- 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/static/R24qfjQevGqknodafpTPA/_buildManifest.js +1 -0
- package/app/.next-cli-build/static/chunks/{1321-9521c58a649385d0.js → 1321-ec91d8042c9c4ec5.js} +1 -1
- package/app/.next-cli-build/static/chunks/{5497-89fc67cbff3f0984.js → 5497-31de2efdeddd7fc5.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/_global-error/page-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/ldap/test/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/ldap/users/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/login/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/logout/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/callback/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/start/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/test/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/status/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/autostart/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/prompt-log-db/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/root-ca/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-settings/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/copilot-settings/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-settings/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/hermes-settings/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/openclaw-settings/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/opencode-settings/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/combos/[id]/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/combos/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/[id]/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/health/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/init/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/keys/[id]/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/keys/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/locale/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/message/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/sse/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/deepgram/voices/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/inworld/voices/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/minimax/voices/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/voices/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/alias/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/availability/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/custom/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/disabled/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/test/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/[provider]/[action]/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/codex/import-token/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/auto-import/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/import/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/gitlab/pat/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/iflow/cookie/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/auto-import/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-authorize/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-exchange/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pricing/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/provider-health/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/[id]/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/validate/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/models/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test-models/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/client/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/kilo/free-models/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/suggested-models/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/test-batch/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/validate/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/test/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/deno-deploy/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/vercel-deploy/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/database/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/proxy-test/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/require-login/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/shutdown/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tags/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/stream/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/load/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/save/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/send/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/translate/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/disable/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/enable/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/status/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-check/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-disable/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-enable/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-install/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-login/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-start-daemon/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/chart/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/history/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/providers/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/request-details/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/request-logs/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/stats/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/stream/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/api/chat/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/speech/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/transcriptions/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/voices/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/chat/completions/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/embeddings/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/images/generations/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/messages/count_tokens/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/messages/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/models/[kind]/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/models/info/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/models/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/responses/compact/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/responses/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/search/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/web/fetch/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1beta/models/[...path]/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1beta/models/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/version/restart/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/version/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/version/shutdown/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/version/update/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/manifest.webmanifest/route-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/app/page-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/app-error-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/forbidden-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/not-found-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/unauthorized-06c52ffae3497d9a.js +1 -0
- package/app/.next-cli-build/static/css/9fe572f5db18fa52.css +1 -0
- package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-1.0.81-to-1.0.82-1.0.82-20260609-074214/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/package.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/ollama-nodes/page.js +0 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/ollama-nodes/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/ollama-nodes/page_client-reference-manifest.js +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/virtual-combos/page.js +0 -16
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/virtual-combos/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/virtual-combos/page_client-reference-manifest.js +0 -1
- package/app/.next-cli-build/server/app/api/ollama-model-memory/route.js +0 -1
- package/app/.next-cli-build/server/app/api/ollama-model-memory/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/ollama-model-memory/route_client-reference-manifest.js +0 -1
- package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/install/route.js +0 -816
- package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/install/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/install/route_client-reference-manifest.js +0 -1
- package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/reservations/route.js +0 -1
- package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/reservations/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/reservations/route_client-reference-manifest.js +0 -1
- package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/route.js +0 -1
- package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/route_client-reference-manifest.js +0 -1
- package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/status/route.js +0 -1
- package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/status/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/status/route_client-reference-manifest.js +0 -1
- package/app/.next-cli-build/server/app/api/ollama-nodes/route.js +0 -1
- package/app/.next-cli-build/server/app/api/ollama-nodes/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/ollama-nodes/route_client-reference-manifest.js +0 -1
- package/app/.next-cli-build/server/app/api/ollama-routing-targets/route.js +0 -1
- package/app/.next-cli-build/server/app/api/ollama-routing-targets/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/ollama-routing-targets/route_client-reference-manifest.js +0 -1
- package/app/.next-cli-build/server/app/api/virtual-combos/[id]/route.js +0 -1
- package/app/.next-cli-build/server/app/api/virtual-combos/[id]/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/virtual-combos/[id]/route_client-reference-manifest.js +0 -1
- package/app/.next-cli-build/server/app/api/virtual-combos/preview/route.js +0 -1
- package/app/.next-cli-build/server/app/api/virtual-combos/preview/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/virtual-combos/preview/route_client-reference-manifest.js +0 -1
- package/app/.next-cli-build/server/app/api/virtual-combos/route.js +0 -1
- package/app/.next-cli-build/server/app/api/virtual-combos/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/virtual-combos/route_client-reference-manifest.js +0 -1
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.html +0 -1
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.meta +0 -17
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.rsc +0 -25
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/!KGRhc2hib2FyZCk/dashboard/ollama-nodes/__PAGE__.segment.rsc +0 -9
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/!KGRhc2hib2FyZCk/dashboard/ollama-nodes.segment.rsc +0 -5
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +0 -5
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/!KGRhc2hib2FyZCk.segment.rsc +0 -6
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/_full.segment.rsc +0 -25
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/_head.segment.rsc +0 -6
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/_index.segment.rsc +0 -8
- package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/_tree.segment.rsc +0 -4
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.html +0 -1
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.meta +0 -17
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.rsc +0 -25
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/!KGRhc2hib2FyZCk/dashboard/virtual-combos/__PAGE__.segment.rsc +0 -9
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/!KGRhc2hib2FyZCk/dashboard/virtual-combos.segment.rsc +0 -5
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +0 -5
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/!KGRhc2hib2FyZCk.segment.rsc +0 -6
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/_full.segment.rsc +0 -25
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/_head.segment.rsc +0 -6
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/_index.segment.rsc +0 -8
- package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/_tree.segment.rsc +0 -4
- package/app/.next-cli-build/server/chunks/1807.js +0 -2
- package/app/.next-cli-build/server/chunks/2549.js +0 -1
- package/app/.next-cli-build/server/chunks/6774.js +0 -1
- package/app/.next-cli-build/server/chunks/8910.js +0 -1
- package/app/.next-cli-build/server/chunks/9253.js +0 -1
- package/app/.next-cli-build/static/Fu-s3enszk1Ac17I7xxhf/_buildManifest.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/ollama-nodes/page-c771cf90148ecc62.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/virtual-combos/page-79d93a5bfc4e1475.js +0 -15
- package/app/.next-cli-build/static/chunks/app/_global-error/page-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/ldap/test/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/ldap/users/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/login/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/logout/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/callback/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/start/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/oidc/test/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/status/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/autostart/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/prompt-log-db/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/root-ca/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-settings/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/copilot-settings/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-settings/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/hermes-settings/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/openclaw-settings/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/opencode-settings/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/combos/[id]/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/combos/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/[id]/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/health/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/init/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/keys/[id]/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/keys/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/locale/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/message/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/sse/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/deepgram/voices/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/inworld/voices/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/minimax/voices/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/voices/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/alias/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/availability/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/custom/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/disabled/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/test/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/[provider]/[action]/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/codex/import-token/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/auto-import/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/import/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/gitlab/pat/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/iflow/cookie/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/auto-import/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-authorize/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-exchange/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/ollama-model-memory/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/ollama-nodes/[id]/install/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/ollama-nodes/[id]/reservations/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/ollama-nodes/[id]/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/ollama-nodes/[id]/status/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/ollama-nodes/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/ollama-routing-targets/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pricing/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/provider-health/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/[id]/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/validate/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/models/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test-models/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/client/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/kilo/free-models/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/suggested-models/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/test-batch/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/validate/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/test/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/deno-deploy/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/proxy-pools/vercel-deploy/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/database/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/proxy-test/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/require-login/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/shutdown/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tags/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/stream/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/load/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/save/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/send/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/translate/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/disable/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/enable/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/status/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-check/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-disable/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-enable/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-install/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-login/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-start-daemon/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/chart/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/history/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/providers/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/request-details/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/request-logs/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/stats/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/stream/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/api/chat/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/speech/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/transcriptions/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/voices/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/chat/completions/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/embeddings/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/images/generations/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/messages/count_tokens/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/messages/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/models/[kind]/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/models/info/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/models/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/responses/compact/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/responses/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/search/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/web/fetch/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1beta/models/[...path]/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1beta/models/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/version/restart/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/version/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/version/shutdown/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/version/update/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/virtual-combos/[id]/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/virtual-combos/preview/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/virtual-combos/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/manifest.webmanifest/route-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/page-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/app-error-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/forbidden-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/not-found-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/unauthorized-092c69469068a0c3.js +0 -1
- package/app/.next-cli-build/static/css/e1d3ab81dc0fcb09.css +0 -1
- /package/app/.next-cli-build/static/{Fu-s3enszk1Ac17I7xxhf → R24qfjQevGqknodafpTPA}/_ssgManifest.js +0 -0
|
@@ -1,816 +0,0 @@
|
|
|
1
|
-
(()=>{var a={};a.id=9902,a.ids=[9902],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},21820:a=>{"use strict";a.exports=require("os")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},33873:a=>{"use strict";a.exports=require("path")},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},55511:a=>{"use strict";a.exports=require("crypto")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},78335:()=>{},79646:a=>{"use strict";a.exports=require("child_process")},79748:a=>{"use strict";a.exports=require("fs/promises")},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},86762:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>J,patchFetch:()=>I,routeModule:()=>E,serverHooks:()=>H,workAsyncStorage:()=>F,workUnitAsyncStorage:()=>G});var d={};c.r(d),c.d(d,{POST:()=>D,dynamic:()=>C,runtime:()=>B});var e=c(19225),f=c(84006),g=c(8317),h=c(99373),i=c(34775),j=c(24235),k=c(261),l=c(54365),m=c(90771),n=c(73461),o=c(67798),p=c(92280),q=c(62018),r=c(45696),s=c(47929),t=c(86439),u=c(37527),v=c(23211),w=c(6774),x=c(79646);function y(a){return`'${String(a??"").replace(/'/g,"'\"'\"'")}'`}function z(a,b,{input:c="",timeoutMs:d=12e4}={}){return new Promise(e=>{let f=(0,x.spawn)(a,b,{stdio:["pipe","pipe","pipe"]}),g="",h="",i=!1,j=setTimeout(()=>{i||f.kill("SIGKILL")},d);f.stdout.on("data",a=>{g+=a.toString()}),f.stderr.on("data",a=>{h+=a.toString()}),f.on("close",a=>{i=!0,clearTimeout(j),e({ok:0===a,code:a,stdout:g,stderr:h})}),c&&f.stdin.write(c),f.stdin.end()})}async function A(a,b={}){let c=a.sshUser||"root",d=Number(a.sshPort||22),e=`${c}@${a.host}`,f=function(a,b={}){let c="/opt/bluerouter-ollama-agent",d=(a.ollamaPorts||[11434]).join(","),e=String.raw`#!/usr/bin/env python3
|
|
2
|
-
import json
|
|
3
|
-
import os
|
|
4
|
-
import re
|
|
5
|
-
import socket
|
|
6
|
-
import subprocess
|
|
7
|
-
import urllib.request
|
|
8
|
-
from datetime import datetime, timezone
|
|
9
|
-
from http.server import BaseHTTPRequestHandler, HTTPServer
|
|
10
|
-
|
|
11
|
-
PORT = int(os.environ.get("AGENT_PORT", "19999"))
|
|
12
|
-
OLLAMA_HOST = os.environ.get("OLLAMA_HOST", "127.0.0.1")
|
|
13
|
-
OLLAMA_PORTS = [p.strip() for p in os.environ.get("OLLAMA_PORTS", "11434").split(",") if p.strip()]
|
|
14
|
-
AGENT_TOKEN = os.environ.get("AGENT_TOKEN", "")
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
def run_cmd(cmd, timeout=4):
|
|
18
|
-
try:
|
|
19
|
-
return subprocess.check_output(cmd, stderr=subprocess.STDOUT, timeout=timeout, text=True).strip()
|
|
20
|
-
except Exception:
|
|
21
|
-
return None
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
def run_json(cmd, timeout=6):
|
|
25
|
-
out = run_cmd(cmd, timeout=timeout)
|
|
26
|
-
if not out:
|
|
27
|
-
return None
|
|
28
|
-
try:
|
|
29
|
-
return json.loads(out)
|
|
30
|
-
except Exception:
|
|
31
|
-
return None
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
def http_json(url, timeout=3):
|
|
35
|
-
try:
|
|
36
|
-
with urllib.request.urlopen(url, timeout=timeout) as r:
|
|
37
|
-
return json.loads(r.read().decode("utf-8"))
|
|
38
|
-
except Exception:
|
|
39
|
-
return None
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
def read_file(path):
|
|
43
|
-
try:
|
|
44
|
-
with open(path, "rb") as f:
|
|
45
|
-
return f.read()
|
|
46
|
-
except Exception:
|
|
47
|
-
return b""
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
def read_text(path):
|
|
51
|
-
try:
|
|
52
|
-
with open(path, "r", encoding="utf-8", errors="ignore") as f:
|
|
53
|
-
return f.read()
|
|
54
|
-
except Exception:
|
|
55
|
-
return ""
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
def read_cmdline(pid):
|
|
59
|
-
raw = read_file(f"/proc/{pid}/cmdline")
|
|
60
|
-
if not raw:
|
|
61
|
-
return ""
|
|
62
|
-
return raw.replace(b"\x00", b" ").decode("utf-8", errors="ignore").strip()
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
def read_environ(pid):
|
|
66
|
-
raw = read_file(f"/proc/{pid}/environ")
|
|
67
|
-
env = {}
|
|
68
|
-
if not raw:
|
|
69
|
-
return env
|
|
70
|
-
for item in raw.split(b"\x00"):
|
|
71
|
-
if not item or b"=" not in item:
|
|
72
|
-
continue
|
|
73
|
-
k, v = item.split(b"=", 1)
|
|
74
|
-
env[k.decode("utf-8", errors="ignore")] = v.decode("utf-8", errors="ignore")
|
|
75
|
-
return env
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
def parse_systemd_environment(text):
|
|
79
|
-
# systemctl show -p Environment usually returns: Environment=A=1 B=two C=/x/y
|
|
80
|
-
env = {}
|
|
81
|
-
if not text:
|
|
82
|
-
return env
|
|
83
|
-
if text.startswith("Environment="):
|
|
84
|
-
text = text[len("Environment="):]
|
|
85
|
-
for part in re.findall(r'(?:[^\s"\']+|"[^"]*"|\'[^\']*\')+', text):
|
|
86
|
-
item = part.strip().strip('"').strip("'")
|
|
87
|
-
if "=" not in item:
|
|
88
|
-
continue
|
|
89
|
-
k, v = item.split("=", 1)
|
|
90
|
-
if k:
|
|
91
|
-
env[k] = v
|
|
92
|
-
return env
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
def get_service_from_cgroup(pid):
|
|
96
|
-
text = read_text(f"/proc/{pid}/cgroup")
|
|
97
|
-
m = re.search(r'/system\.slice/([^/]+\.service)', text)
|
|
98
|
-
if m:
|
|
99
|
-
return m.group(1)
|
|
100
|
-
# user services may appear under user.slice/user-1000.slice/.../app.slice/name.service
|
|
101
|
-
m = re.search(r'/([^/]+\.service)(?:$|/)', text)
|
|
102
|
-
if m:
|
|
103
|
-
return m.group(1)
|
|
104
|
-
return None
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
def get_systemd_env(service):
|
|
108
|
-
if not service:
|
|
109
|
-
return {}
|
|
110
|
-
out = run_cmd(["systemctl", "show", service, "-p", "Environment"], timeout=3)
|
|
111
|
-
return parse_systemd_environment(out or "")
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
def get_gpu_status():
|
|
115
|
-
out = run_cmd([
|
|
116
|
-
"nvidia-smi",
|
|
117
|
-
"--query-gpu=index,uuid,name,memory.total,memory.used,memory.free,utilization.gpu,temperature.gpu",
|
|
118
|
-
"--format=csv,noheader,nounits"
|
|
119
|
-
])
|
|
120
|
-
if not out:
|
|
121
|
-
return []
|
|
122
|
-
gpus = []
|
|
123
|
-
for line in out.splitlines():
|
|
124
|
-
parts = [x.strip() for x in line.split(",")]
|
|
125
|
-
if len(parts) < 8:
|
|
126
|
-
continue
|
|
127
|
-
try:
|
|
128
|
-
idx, uuid, name, total, used, free, util, temp = parts[:8]
|
|
129
|
-
total = int(float(total)); used = int(float(used)); free = int(float(free))
|
|
130
|
-
gpus.append({
|
|
131
|
-
"index": int(float(idx)),
|
|
132
|
-
"uuid": uuid,
|
|
133
|
-
"name": name,
|
|
134
|
-
"vramTotalMb": total,
|
|
135
|
-
"vramUsedMb": used,
|
|
136
|
-
"vramFreeMb": free,
|
|
137
|
-
"vramUsedPercent": round((used / total) * 100, 2) if total else None,
|
|
138
|
-
"gpuUsagePercent": int(float(util)),
|
|
139
|
-
"temperatureC": int(float(temp))
|
|
140
|
-
})
|
|
141
|
-
except Exception:
|
|
142
|
-
pass
|
|
143
|
-
return gpus
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
def get_ram_status():
|
|
147
|
-
out = run_cmd(["free", "-m"])
|
|
148
|
-
if not out:
|
|
149
|
-
return None
|
|
150
|
-
for line in out.splitlines():
|
|
151
|
-
if line.lower().startswith("mem:"):
|
|
152
|
-
p = line.split()
|
|
153
|
-
total = int(p[1]); used = int(p[2]); free = int(p[3])
|
|
154
|
-
avail = int(p[6]) if len(p) > 6 else free
|
|
155
|
-
return {
|
|
156
|
-
"totalMb": total,
|
|
157
|
-
"usedMb": used,
|
|
158
|
-
"freeMb": free,
|
|
159
|
-
"availableMb": avail,
|
|
160
|
-
"usedPercent": round((used / total) * 100, 2) if total else None
|
|
161
|
-
}
|
|
162
|
-
return None
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
def get_cpu_status():
|
|
166
|
-
load = os.getloadavg()
|
|
167
|
-
cores = os.cpu_count() or 1
|
|
168
|
-
return {
|
|
169
|
-
"cores": cores,
|
|
170
|
-
"load1": load[0],
|
|
171
|
-
"load5": load[1],
|
|
172
|
-
"load15": load[2],
|
|
173
|
-
"load1PercentOfCores": round((load[0] / cores) * 100, 2)
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
def get_gpu_processes(gpus):
|
|
178
|
-
uuid_to_index = {g.get("uuid"): g.get("index") for g in gpus if g.get("uuid")}
|
|
179
|
-
out = run_cmd([
|
|
180
|
-
"nvidia-smi",
|
|
181
|
-
"--query-compute-apps=gpu_uuid,pid,process_name,used_memory",
|
|
182
|
-
"--format=csv,noheader,nounits"
|
|
183
|
-
])
|
|
184
|
-
processes = []
|
|
185
|
-
if out:
|
|
186
|
-
for line in out.splitlines():
|
|
187
|
-
parts = [x.strip() for x in line.split(",")]
|
|
188
|
-
if len(parts) < 4:
|
|
189
|
-
continue
|
|
190
|
-
gpu_uuid, pid, process_name, used_memory = parts[:4]
|
|
191
|
-
try:
|
|
192
|
-
pid_n = int(float(pid))
|
|
193
|
-
used_n = int(float(str(used_memory).replace("MiB", "").strip()))
|
|
194
|
-
except Exception:
|
|
195
|
-
continue
|
|
196
|
-
processes.append({
|
|
197
|
-
"gpuUuid": gpu_uuid,
|
|
198
|
-
"gpuIndex": uuid_to_index.get(gpu_uuid),
|
|
199
|
-
"pid": pid_n,
|
|
200
|
-
"processName": process_name,
|
|
201
|
-
"usedMemoryMb": used_n
|
|
202
|
-
})
|
|
203
|
-
return processes
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
def compact_model(item):
|
|
207
|
-
if not isinstance(item, dict):
|
|
208
|
-
return None
|
|
209
|
-
return {
|
|
210
|
-
"name": item.get("name") or item.get("model"),
|
|
211
|
-
"model": item.get("model") or item.get("name"),
|
|
212
|
-
"digest": item.get("digest"),
|
|
213
|
-
"size": item.get("size"),
|
|
214
|
-
"size_vram": item.get("size_vram"),
|
|
215
|
-
"expires_at": item.get("expires_at"),
|
|
216
|
-
"context_length": item.get("context_length"),
|
|
217
|
-
"details": item.get("details") or {}
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
def find_listener_pid_by_ss(port):
|
|
222
|
-
candidates = []
|
|
223
|
-
commands = [
|
|
224
|
-
["ss", "-H", "-ltnp", "sport", "=", f":{port}"],
|
|
225
|
-
["ss", "-H", "-ltnp"],
|
|
226
|
-
]
|
|
227
|
-
for cmd in commands:
|
|
228
|
-
out = run_cmd(cmd, timeout=3)
|
|
229
|
-
if not out:
|
|
230
|
-
continue
|
|
231
|
-
for line in out.splitlines():
|
|
232
|
-
if f":{port}" not in line:
|
|
233
|
-
continue
|
|
234
|
-
for pid in re.findall(r'pid=([0-9]+)', line):
|
|
235
|
-
candidates.append({"pid": int(pid), "source": "ss", "line": line})
|
|
236
|
-
return candidates
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
def find_listener_pid_by_lsof(port):
|
|
240
|
-
candidates = []
|
|
241
|
-
out = run_cmd(["lsof", "-nP", f"-iTCP:{port}", "-sTCP:LISTEN"], timeout=4)
|
|
242
|
-
if not out:
|
|
243
|
-
return candidates
|
|
244
|
-
for line in out.splitlines()[1:]:
|
|
245
|
-
parts = line.split()
|
|
246
|
-
if len(parts) >= 2 and parts[1].isdigit():
|
|
247
|
-
candidates.append({"pid": int(parts[1]), "source": "lsof", "line": line})
|
|
248
|
-
return candidates
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
def find_listener_pid_by_fuser(port):
|
|
252
|
-
candidates = []
|
|
253
|
-
out = run_cmd(["fuser", "-n", "tcp", str(port)], timeout=4)
|
|
254
|
-
if not out:
|
|
255
|
-
return candidates
|
|
256
|
-
for pid in re.findall(r'\b[0-9]+\b', out):
|
|
257
|
-
candidates.append({"pid": int(pid), "source": "fuser", "line": out})
|
|
258
|
-
return candidates
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
def tcp_port_hex(port):
|
|
262
|
-
return f"{int(port):04X}"
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
def listener_inodes_for_port(port):
|
|
266
|
-
inodes = set()
|
|
267
|
-
want = tcp_port_hex(port)
|
|
268
|
-
for path in ["/proc/net/tcp", "/proc/net/tcp6"]:
|
|
269
|
-
text = read_text(path)
|
|
270
|
-
for line in text.splitlines()[1:]:
|
|
271
|
-
cols = line.split()
|
|
272
|
-
if len(cols) < 10:
|
|
273
|
-
continue
|
|
274
|
-
local = cols[1]
|
|
275
|
-
state = cols[3]
|
|
276
|
-
inode = cols[9]
|
|
277
|
-
if state != "0A":
|
|
278
|
-
continue
|
|
279
|
-
if local.split(":")[-1].upper() == want:
|
|
280
|
-
inodes.add(inode)
|
|
281
|
-
return inodes
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
def find_listener_pid_by_proc(port):
|
|
285
|
-
candidates = []
|
|
286
|
-
inodes = listener_inodes_for_port(port)
|
|
287
|
-
if not inodes:
|
|
288
|
-
return candidates
|
|
289
|
-
proc_root = "/proc"
|
|
290
|
-
for pid in os.listdir(proc_root):
|
|
291
|
-
if not pid.isdigit():
|
|
292
|
-
continue
|
|
293
|
-
fd_dir = os.path.join(proc_root, pid, "fd")
|
|
294
|
-
try:
|
|
295
|
-
fds = os.listdir(fd_dir)
|
|
296
|
-
except Exception:
|
|
297
|
-
continue
|
|
298
|
-
for fd in fds:
|
|
299
|
-
try:
|
|
300
|
-
target = os.readlink(os.path.join(fd_dir, fd))
|
|
301
|
-
except Exception:
|
|
302
|
-
continue
|
|
303
|
-
m = re.match(r'socket:\[([0-9]+)\]', target)
|
|
304
|
-
if m and m.group(1) in inodes:
|
|
305
|
-
candidates.append({"pid": int(pid), "source": "proc-net", "line": f"inode={m.group(1)} fd={fd}"})
|
|
306
|
-
break
|
|
307
|
-
return candidates
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
def find_listener_pid(port):
|
|
311
|
-
all_candidates = []
|
|
312
|
-
for fn in [find_listener_pid_by_ss, find_listener_pid_by_lsof, find_listener_pid_by_fuser, find_listener_pid_by_proc]:
|
|
313
|
-
try:
|
|
314
|
-
all_candidates.extend(fn(port))
|
|
315
|
-
except Exception:
|
|
316
|
-
pass
|
|
317
|
-
seen = set()
|
|
318
|
-
unique = []
|
|
319
|
-
for c in all_candidates:
|
|
320
|
-
pid = c.get("pid")
|
|
321
|
-
if not pid or pid in seen:
|
|
322
|
-
continue
|
|
323
|
-
seen.add(pid)
|
|
324
|
-
unique.append(c)
|
|
325
|
-
if not unique:
|
|
326
|
-
return None, None, []
|
|
327
|
-
chosen = unique[0]
|
|
328
|
-
return chosen.get("pid"), chosen.get("source"), unique
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
def process_tree_pids(root_pid):
|
|
332
|
-
try:
|
|
333
|
-
root_pid = int(root_pid)
|
|
334
|
-
except Exception:
|
|
335
|
-
return []
|
|
336
|
-
out = run_cmd(["ps", "-eo", "pid=,ppid=,cmd="], timeout=4)
|
|
337
|
-
children = {}
|
|
338
|
-
if out:
|
|
339
|
-
for line in out.splitlines():
|
|
340
|
-
parts = line.strip().split(None, 2)
|
|
341
|
-
if len(parts) < 2:
|
|
342
|
-
continue
|
|
343
|
-
try:
|
|
344
|
-
pid = int(parts[0]); ppid = int(parts[1])
|
|
345
|
-
except Exception:
|
|
346
|
-
continue
|
|
347
|
-
children.setdefault(ppid, []).append(pid)
|
|
348
|
-
result = []
|
|
349
|
-
stack = [root_pid]
|
|
350
|
-
seen = set()
|
|
351
|
-
while stack:
|
|
352
|
-
pid = stack.pop()
|
|
353
|
-
if pid in seen:
|
|
354
|
-
continue
|
|
355
|
-
seen.add(pid)
|
|
356
|
-
result.append(pid)
|
|
357
|
-
stack.extend(children.get(pid, []))
|
|
358
|
-
return result
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
def docker_ps_rows():
|
|
362
|
-
out = run_cmd(["docker", "ps", "--format", "{{.ID}}\t{{.Names}}\t{{.Ports}}"], timeout=5)
|
|
363
|
-
rows = []
|
|
364
|
-
if not out:
|
|
365
|
-
return rows
|
|
366
|
-
for line in out.splitlines():
|
|
367
|
-
parts = line.split("\t")
|
|
368
|
-
if len(parts) >= 3:
|
|
369
|
-
rows.append({"id": parts[0], "name": parts[1], "ports": parts[2]})
|
|
370
|
-
return rows
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
def docker_inspect(cid):
|
|
374
|
-
data = run_json(["docker", "inspect", cid], timeout=6)
|
|
375
|
-
if isinstance(data, list) and data:
|
|
376
|
-
return data[0]
|
|
377
|
-
return None
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
def find_docker_container_for_port(port, docker_proxy_info=None):
|
|
381
|
-
# Prefer Docker's authoritative NetworkSettings.Ports mapping.
|
|
382
|
-
for row in docker_ps_rows():
|
|
383
|
-
info = docker_inspect(row["id"])
|
|
384
|
-
if not info:
|
|
385
|
-
continue
|
|
386
|
-
ports = (((info.get("NetworkSettings") or {}).get("Ports")) or {})
|
|
387
|
-
for container_port, host_bindings in ports.items():
|
|
388
|
-
if not str(container_port).startswith(str(port)) and not str(container_port).startswith(str((docker_proxy_info or {}).get("containerPort", ""))):
|
|
389
|
-
pass
|
|
390
|
-
for binding in host_bindings or []:
|
|
391
|
-
if str(binding.get("HostPort")) == str(port):
|
|
392
|
-
return row, info
|
|
393
|
-
# Fallback: match container IP parsed from docker-proxy command.
|
|
394
|
-
container_ip = (docker_proxy_info or {}).get("containerIp")
|
|
395
|
-
if container_ip:
|
|
396
|
-
networks = ((info.get("NetworkSettings") or {}).get("Networks")) or {}
|
|
397
|
-
for net in networks.values():
|
|
398
|
-
if net.get("IPAddress") == container_ip:
|
|
399
|
-
return row, info
|
|
400
|
-
# Fallback: match docker ps formatted Ports text.
|
|
401
|
-
if f":{port}->" in row.get("ports", "") or f"0.0.0.0:{port}" in row.get("ports", "") or f"[::]:{port}" in row.get("ports", ""):
|
|
402
|
-
return row, info
|
|
403
|
-
return None, None
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
def parse_docker_proxy_cmd(cmdline):
|
|
407
|
-
if "docker-proxy" not in (cmdline or ""):
|
|
408
|
-
return None
|
|
409
|
-
tokens = cmdline.split()
|
|
410
|
-
out = {"kind": "docker-proxy"}
|
|
411
|
-
for i, token in enumerate(tokens):
|
|
412
|
-
if token in ["-host-port", "--host-port"] and i + 1 < len(tokens):
|
|
413
|
-
out["hostPort"] = tokens[i + 1]
|
|
414
|
-
elif token in ["-container-port", "--container-port"] and i + 1 < len(tokens):
|
|
415
|
-
out["containerPort"] = tokens[i + 1]
|
|
416
|
-
elif token in ["-container-ip", "--container-ip"] and i + 1 < len(tokens):
|
|
417
|
-
out["containerIp"] = tokens[i + 1]
|
|
418
|
-
return out
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
def docker_env_and_meta(port, pid, cmdline):
|
|
422
|
-
proxy = parse_docker_proxy_cmd(cmdline)
|
|
423
|
-
if not proxy:
|
|
424
|
-
return None
|
|
425
|
-
row, info = find_docker_container_for_port(port, proxy)
|
|
426
|
-
if not info:
|
|
427
|
-
return {
|
|
428
|
-
"runtimeType": "docker-proxy",
|
|
429
|
-
"dockerProxy": proxy,
|
|
430
|
-
"containerFound": False,
|
|
431
|
-
"env": {},
|
|
432
|
-
"source": "docker-proxy-no-container"
|
|
433
|
-
}
|
|
434
|
-
env_list = ((info.get("Config") or {}).get("Env")) or []
|
|
435
|
-
env = {}
|
|
436
|
-
for item in env_list:
|
|
437
|
-
if "=" in item:
|
|
438
|
-
k, v = item.split("=", 1)
|
|
439
|
-
env[k] = v
|
|
440
|
-
host_config = info.get("HostConfig") or {}
|
|
441
|
-
state = info.get("State") or {}
|
|
442
|
-
labels = (info.get("Config") or {}).get("Labels") or {}
|
|
443
|
-
networks = ((info.get("NetworkSettings") or {}).get("Networks")) or {}
|
|
444
|
-
ips = []
|
|
445
|
-
for net_name, net in networks.items():
|
|
446
|
-
if net.get("IPAddress"):
|
|
447
|
-
ips.append({"network": net_name, "ip": net.get("IPAddress")})
|
|
448
|
-
return {
|
|
449
|
-
"runtimeType": "docker",
|
|
450
|
-
"dockerProxy": proxy,
|
|
451
|
-
"containerFound": True,
|
|
452
|
-
"containerId": (info.get("Id") or row.get("id"))[:12],
|
|
453
|
-
"containerName": (info.get("Name") or row.get("name") or "").lstrip("/"),
|
|
454
|
-
"containerImage": (info.get("Config") or {}).get("Image"),
|
|
455
|
-
"containerPid": state.get("Pid"),
|
|
456
|
-
"containerIps": ips,
|
|
457
|
-
"dockerPorts": row.get("ports"),
|
|
458
|
-
"dockerNetworkMode": host_config.get("NetworkMode"),
|
|
459
|
-
"dockerDeviceRequests": host_config.get("DeviceRequests") or [],
|
|
460
|
-
"dockerLabels": labels,
|
|
461
|
-
"env": env,
|
|
462
|
-
"source": "docker-inspect"
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
def parse_visible_devices(value, gpus, source):
|
|
467
|
-
if value is None:
|
|
468
|
-
return None
|
|
469
|
-
raw = str(value).strip()
|
|
470
|
-
lower = raw.lower()
|
|
471
|
-
if raw == "":
|
|
472
|
-
return None
|
|
473
|
-
if lower in ["none", "void", "no", "false", "-1"]:
|
|
474
|
-
return {"indices": [], "mode": "disabled", "source": source, "raw": raw}
|
|
475
|
-
if lower == "all":
|
|
476
|
-
return {"indices": [g["index"] for g in gpus], "mode": "all-visible", "source": source, "raw": raw}
|
|
477
|
-
uuid_to_index = {str(g.get("uuid")): g.get("index") for g in gpus if g.get("uuid")}
|
|
478
|
-
indices = []
|
|
479
|
-
unknown = []
|
|
480
|
-
for item in re.split(r'[,;\s]+', raw):
|
|
481
|
-
if not item:
|
|
482
|
-
continue
|
|
483
|
-
if item.isdigit():
|
|
484
|
-
indices.append(int(item))
|
|
485
|
-
elif item in uuid_to_index:
|
|
486
|
-
indices.append(uuid_to_index[item])
|
|
487
|
-
elif item.startswith("GPU-") and item in uuid_to_index:
|
|
488
|
-
indices.append(uuid_to_index[item])
|
|
489
|
-
elif item.startswith("MIG-"):
|
|
490
|
-
unknown.append(item)
|
|
491
|
-
else:
|
|
492
|
-
unknown.append(item)
|
|
493
|
-
return {
|
|
494
|
-
"indices": sorted(list(set(indices))),
|
|
495
|
-
"mode": "specific" if indices else "unknown",
|
|
496
|
-
"source": source,
|
|
497
|
-
"raw": raw,
|
|
498
|
-
"unknownDevices": unknown
|
|
499
|
-
}
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
def parse_device_requests(device_requests, gpus):
|
|
503
|
-
if not device_requests:
|
|
504
|
-
return None
|
|
505
|
-
ids = []
|
|
506
|
-
all_gpu = False
|
|
507
|
-
for req in device_requests:
|
|
508
|
-
count = req.get("Count")
|
|
509
|
-
caps = req.get("Capabilities") or []
|
|
510
|
-
driver = req.get("Driver")
|
|
511
|
-
req_ids = req.get("DeviceIDs") or []
|
|
512
|
-
if driver == "nvidia" or any("gpu" in str(x).lower() for cap in caps for x in cap):
|
|
513
|
-
if count == -1 and not req_ids:
|
|
514
|
-
all_gpu = True
|
|
515
|
-
ids.extend(req_ids)
|
|
516
|
-
if all_gpu:
|
|
517
|
-
return {"indices": [g["index"] for g in gpus], "mode": "all-visible", "source": "docker-device-requests:all", "raw": "all"}
|
|
518
|
-
if ids:
|
|
519
|
-
return parse_visible_devices(",".join(ids), gpus, "docker-device-requests")
|
|
520
|
-
return None
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
def configured_gpu_from_env(runtime_type, env, gpus, docker_meta=None):
|
|
524
|
-
# Prefer NVIDIA_VISIBLE_DEVICES in Docker, CUDA_VISIBLE_DEVICES for direct/systemd.
|
|
525
|
-
candidates = []
|
|
526
|
-
if runtime_type == "docker":
|
|
527
|
-
candidates = [
|
|
528
|
-
("NVIDIA_VISIBLE_DEVICES", env.get("NVIDIA_VISIBLE_DEVICES")),
|
|
529
|
-
("CUDA_VISIBLE_DEVICES", env.get("CUDA_VISIBLE_DEVICES")),
|
|
530
|
-
]
|
|
531
|
-
req = parse_device_requests((docker_meta or {}).get("dockerDeviceRequests"), gpus)
|
|
532
|
-
if req:
|
|
533
|
-
return req
|
|
534
|
-
else:
|
|
535
|
-
candidates = [
|
|
536
|
-
("CUDA_VISIBLE_DEVICES", env.get("CUDA_VISIBLE_DEVICES")),
|
|
537
|
-
("NVIDIA_VISIBLE_DEVICES", env.get("NVIDIA_VISIBLE_DEVICES")),
|
|
538
|
-
("HIP_VISIBLE_DEVICES", env.get("HIP_VISIBLE_DEVICES")),
|
|
539
|
-
("ROCR_VISIBLE_DEVICES", env.get("ROCR_VISIBLE_DEVICES")),
|
|
540
|
-
]
|
|
541
|
-
for key, value in candidates:
|
|
542
|
-
parsed = parse_visible_devices(value, gpus, f"{runtime_type}-env:{key}")
|
|
543
|
-
if parsed:
|
|
544
|
-
return parsed
|
|
545
|
-
if runtime_type in ["systemd", "direct"]:
|
|
546
|
-
return {"indices": [g["index"] for g in gpus], "mode": "all-visible", "source": "all-visible-no-env", "raw": None}
|
|
547
|
-
if runtime_type == "docker":
|
|
548
|
-
# For Docker, lack of NVIDIA_VISIBLE_DEVICES is less conclusive.
|
|
549
|
-
return {"indices": [], "mode": "unknown", "source": "docker-no-visible-devices-env", "raw": None}
|
|
550
|
-
return {"indices": [], "mode": "unknown", "source": "no-gpu-config", "raw": None}
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
def process_metadata(port, pid, gpus):
|
|
554
|
-
if not pid:
|
|
555
|
-
return {"runtimeType": "unknown", "env": {}, "configured": configured_gpu_from_env("unknown", {}, gpus)}
|
|
556
|
-
cmdline = read_cmdline(pid)
|
|
557
|
-
service = get_service_from_cgroup(pid)
|
|
558
|
-
runtime_type = "systemd" if service else "direct"
|
|
559
|
-
docker_meta = docker_env_and_meta(port, pid, cmdline)
|
|
560
|
-
if docker_meta:
|
|
561
|
-
runtime_type = docker_meta.get("runtimeType") or "docker"
|
|
562
|
-
env = docker_meta.get("env") or {}
|
|
563
|
-
configured = configured_gpu_from_env("docker", env, gpus, docker_meta)
|
|
564
|
-
return {
|
|
565
|
-
"runtimeType": runtime_type,
|
|
566
|
-
"processCmdline": cmdline,
|
|
567
|
-
"serviceName": service,
|
|
568
|
-
"env": env,
|
|
569
|
-
"configured": configured,
|
|
570
|
-
**{k: v for k, v in docker_meta.items() if k not in ["env"]}
|
|
571
|
-
}
|
|
572
|
-
env = {}
|
|
573
|
-
env.update(get_systemd_env(service))
|
|
574
|
-
env.update(read_environ(pid))
|
|
575
|
-
configured = configured_gpu_from_env("systemd" if service else "direct", env, gpus)
|
|
576
|
-
return {
|
|
577
|
-
"runtimeType": runtime_type,
|
|
578
|
-
"processCmdline": cmdline,
|
|
579
|
-
"serviceName": service,
|
|
580
|
-
"env": {k: v for k, v in env.items() if re.search(r'OLLAMA|CUDA|NVIDIA|HIP|ROCR|GPU', k, re.I)},
|
|
581
|
-
"configured": configured,
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
def gpu_processes_for_pids(gpu_processes, pids):
|
|
586
|
-
pid_set = set(int(x) for x in pids if x)
|
|
587
|
-
return [p for p in gpu_processes if int(p.get("pid") or -1) in pid_set]
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
def infer_gpu_from_ps(ps_models, gpus, configured):
|
|
591
|
-
size_bytes = sum(int(m.get("size_vram") or 0) for m in ps_models or [])
|
|
592
|
-
size_mb = int(size_bytes / (1024 * 1024)) if size_bytes else 0
|
|
593
|
-
if size_mb <= 0:
|
|
594
|
-
return [], 0, None
|
|
595
|
-
configured_indices = configured.get("indices") or [] if configured else []
|
|
596
|
-
if configured_indices:
|
|
597
|
-
return configured_indices, size_mb, "ollama-ps-configured-gpu-inferred"
|
|
598
|
-
if len(gpus) == 1:
|
|
599
|
-
return [gpus[0]["index"]], size_mb, "ollama-ps-single-gpu-inferred"
|
|
600
|
-
# Conservative multi-GPU inference: only infer if one GPU's used memory is close enough.
|
|
601
|
-
candidates = []
|
|
602
|
-
for gpu in gpus:
|
|
603
|
-
used = int(gpu.get("vramUsedMb") or 0)
|
|
604
|
-
if used >= max(512, int(size_mb * 0.45)):
|
|
605
|
-
candidates.append(gpu)
|
|
606
|
-
if len(candidates) == 1:
|
|
607
|
-
return [candidates[0]["index"]], size_mb, "ollama-ps-single-used-gpu-inferred"
|
|
608
|
-
return [], 0, None
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
def get_ollama_instance(port, gpus, gpu_processes):
|
|
612
|
-
base = f"http://{OLLAMA_HOST}:{port}"
|
|
613
|
-
tags = http_json(f"{base}/api/tags")
|
|
614
|
-
ps = http_json(f"{base}/api/ps")
|
|
615
|
-
|
|
616
|
-
model_details = []
|
|
617
|
-
models = []
|
|
618
|
-
if tags and isinstance(tags.get("models"), list):
|
|
619
|
-
for m in tags["models"]:
|
|
620
|
-
cm = compact_model(m)
|
|
621
|
-
if cm and cm.get("name"):
|
|
622
|
-
model_details.append(cm)
|
|
623
|
-
models.append(cm["name"])
|
|
624
|
-
|
|
625
|
-
ps_models = []
|
|
626
|
-
loaded_models = []
|
|
627
|
-
if ps and isinstance(ps.get("models"), list):
|
|
628
|
-
for m in ps["models"]:
|
|
629
|
-
cm = compact_model(m)
|
|
630
|
-
if cm and cm.get("name"):
|
|
631
|
-
ps_models.append(cm)
|
|
632
|
-
loaded_models.append(cm["name"])
|
|
633
|
-
|
|
634
|
-
pid, pid_source, pid_candidates = find_listener_pid(port)
|
|
635
|
-
meta = process_metadata(port, pid, gpus)
|
|
636
|
-
pid_tree = process_tree_pids(pid) if pid else []
|
|
637
|
-
# Docker containers may expose a container init PID whose children hold GPU handles.
|
|
638
|
-
container_pid = meta.get("containerPid")
|
|
639
|
-
if container_pid:
|
|
640
|
-
pid_tree = sorted(list(set(pid_tree + process_tree_pids(container_pid))))
|
|
641
|
-
matched_gpu_processes = gpu_processes_for_pids(gpu_processes, pid_tree)
|
|
642
|
-
runtime_indices = sorted(list(set([p.get("gpuIndex") for p in matched_gpu_processes if p.get("gpuIndex") is not None])))
|
|
643
|
-
runtime_used = sum(int(p.get("usedMemoryMb") or 0) for p in matched_gpu_processes)
|
|
644
|
-
runtime_source = "port-pid-nvidia-smi" if runtime_indices else None
|
|
645
|
-
ps_indices, ps_used, ps_source = infer_gpu_from_ps(ps_models, gpus, meta.get("configured") or {})
|
|
646
|
-
|
|
647
|
-
configured = meta.get("configured") or {}
|
|
648
|
-
effective_indices = []
|
|
649
|
-
effective_source = None
|
|
650
|
-
if configured.get("indices"):
|
|
651
|
-
effective_indices = configured.get("indices")
|
|
652
|
-
effective_source = configured.get("source")
|
|
653
|
-
elif runtime_indices:
|
|
654
|
-
effective_indices = runtime_indices
|
|
655
|
-
effective_source = runtime_source
|
|
656
|
-
elif ps_indices:
|
|
657
|
-
effective_indices = ps_indices
|
|
658
|
-
effective_source = ps_source
|
|
659
|
-
|
|
660
|
-
detected_indices = runtime_indices or ps_indices
|
|
661
|
-
detected_used = runtime_used if runtime_indices else ps_used
|
|
662
|
-
detected_source = runtime_source or ps_source or ("port-pid-no-gpu" if pid else None)
|
|
663
|
-
|
|
664
|
-
return {
|
|
665
|
-
"id": f"ollama-{port}",
|
|
666
|
-
"port": int(port),
|
|
667
|
-
"baseUrl": base,
|
|
668
|
-
"alive": tags is not None,
|
|
669
|
-
"models": models,
|
|
670
|
-
"modelDetails": model_details,
|
|
671
|
-
"loadedModels": loaded_models,
|
|
672
|
-
"psModels": ps_models,
|
|
673
|
-
"loadedDigests": sorted(list(set([m.get("digest") for m in ps_models if m.get("digest")]))),
|
|
674
|
-
"pid": pid,
|
|
675
|
-
"pidDetectionSource": pid_source,
|
|
676
|
-
"pidCandidates": pid_candidates,
|
|
677
|
-
"pidTree": pid_tree,
|
|
678
|
-
"runtimeType": meta.get("runtimeType"),
|
|
679
|
-
"serviceName": meta.get("serviceName"),
|
|
680
|
-
"processCmdline": meta.get("processCmdline"),
|
|
681
|
-
"processEnv": meta.get("env"),
|
|
682
|
-
"containerId": meta.get("containerId"),
|
|
683
|
-
"containerName": meta.get("containerName"),
|
|
684
|
-
"containerImage": meta.get("containerImage"),
|
|
685
|
-
"containerPid": meta.get("containerPid"),
|
|
686
|
-
"containerIps": meta.get("containerIps"),
|
|
687
|
-
"dockerNetworkMode": meta.get("dockerNetworkMode"),
|
|
688
|
-
"dockerPorts": meta.get("dockerPorts"),
|
|
689
|
-
"dockerDeviceRequests": meta.get("dockerDeviceRequests"),
|
|
690
|
-
"dockerLabels": meta.get("dockerLabels"),
|
|
691
|
-
"dockerProxy": meta.get("dockerProxy"),
|
|
692
|
-
"configuredGpuIndices": configured.get("indices") or [],
|
|
693
|
-
"configuredGpuMode": configured.get("mode"),
|
|
694
|
-
"configuredGpuSource": configured.get("source"),
|
|
695
|
-
"configuredGpuRaw": configured.get("raw"),
|
|
696
|
-
"configuredGpuUnknownDevices": configured.get("unknownDevices") or [],
|
|
697
|
-
"runtimeGpuIndices": runtime_indices,
|
|
698
|
-
"runtimeGpuVramUsedMb": runtime_used,
|
|
699
|
-
"runtimeGpuProcesses": matched_gpu_processes,
|
|
700
|
-
"detectedGpuIndices": detected_indices,
|
|
701
|
-
"detectedGpuVramUsedMb": detected_used,
|
|
702
|
-
"detectedGpuProcesses": matched_gpu_processes,
|
|
703
|
-
"detectedGpuBindingSource": detected_source,
|
|
704
|
-
"effectiveGpuIndices": effective_indices,
|
|
705
|
-
"effectiveGpuSource": effective_source,
|
|
706
|
-
}
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
def build_status():
|
|
710
|
-
hostname = run_cmd(["hostname"]) or "unknown"
|
|
711
|
-
gpus = get_gpu_status()
|
|
712
|
-
gpu_processes = get_gpu_processes(gpus)
|
|
713
|
-
ram = get_ram_status()
|
|
714
|
-
cpu = get_cpu_status()
|
|
715
|
-
instances = [get_ollama_instance(p, gpus, gpu_processes) for p in OLLAMA_PORTS]
|
|
716
|
-
tags = ["ollama", "lan"]
|
|
717
|
-
if gpus:
|
|
718
|
-
tags += ["gpu", "nvidia"]
|
|
719
|
-
for gpu in gpus:
|
|
720
|
-
tags.append(f"gpu:{gpu.get('index')}:{str(gpu.get('name','')).lower().replace(' ','-')}")
|
|
721
|
-
else:
|
|
722
|
-
tags.append("cpu")
|
|
723
|
-
for inst in instances:
|
|
724
|
-
for model in inst.get("models", []):
|
|
725
|
-
tags.append(f"model_support:{model}")
|
|
726
|
-
best_gpu = max(gpus, key=lambda x: x.get("vramFreeMb", 0)) if gpus else None
|
|
727
|
-
return {
|
|
728
|
-
"ok": True,
|
|
729
|
-
"hostname": hostname,
|
|
730
|
-
"provider": "ollama",
|
|
731
|
-
"instances": instances,
|
|
732
|
-
"hardware": {"cpu": cpu, "ram": ram, "gpus": gpus, "gpuProcesses": gpu_processes},
|
|
733
|
-
"score": {
|
|
734
|
-
"gpuFreeVramMb": best_gpu.get("vramFreeMb") if best_gpu else 0,
|
|
735
|
-
"gpuUsagePercent": best_gpu.get("gpuUsagePercent") if best_gpu else None,
|
|
736
|
-
"ramAvailableMb": ram.get("availableMb") if ram else None
|
|
737
|
-
},
|
|
738
|
-
"tags": sorted(set(tags)),
|
|
739
|
-
"updatedAt": datetime.now(timezone.utc).isoformat()
|
|
740
|
-
}
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
class Handler(BaseHTTPRequestHandler):
|
|
744
|
-
def _send(self, code, payload):
|
|
745
|
-
body = json.dumps(payload, ensure_ascii=False).encode("utf-8")
|
|
746
|
-
self.send_response(code)
|
|
747
|
-
self.send_header("Content-Type", "application/json; charset=utf-8")
|
|
748
|
-
self.send_header("Content-Length", str(len(body)))
|
|
749
|
-
self.end_headers()
|
|
750
|
-
self.wfile.write(body)
|
|
751
|
-
|
|
752
|
-
def _authorized(self):
|
|
753
|
-
return (not AGENT_TOKEN) or self.headers.get("Authorization", "") == f"Bearer {AGENT_TOKEN}"
|
|
754
|
-
|
|
755
|
-
def do_GET(self):
|
|
756
|
-
if self.path not in ["/status", "/health"]:
|
|
757
|
-
self._send(404, {"ok": False, "error": "not_found"})
|
|
758
|
-
return
|
|
759
|
-
if not self._authorized():
|
|
760
|
-
self._send(401, {"ok": False, "error": "unauthorized"})
|
|
761
|
-
return
|
|
762
|
-
if self.path == "/health":
|
|
763
|
-
self._send(200, {"ok": True})
|
|
764
|
-
return
|
|
765
|
-
try:
|
|
766
|
-
self._send(200, build_status())
|
|
767
|
-
except Exception as e:
|
|
768
|
-
self._send(500, {"ok": False, "error": str(e)})
|
|
769
|
-
|
|
770
|
-
def log_message(self, fmt, *args):
|
|
771
|
-
return
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
if __name__ == "__main__":
|
|
775
|
-
print(f"BlueRouter Ollama Agent listening on 0.0.0.0:{PORT}; ports={OLLAMA_PORTS}")
|
|
776
|
-
HTTPServer(("0.0.0.0", PORT), Handler).serve_forever()
|
|
777
|
-
`,f=String(b.ufwAllowFrom??a.ufwAllowFrom??"").trim(),g=Number(a.agentPort||19999),h=String(b.ollamaHost||"127.0.0.1"),i=String(a.agentToken||"");return`#!/usr/bin/env bash
|
|
778
|
-
set -euo pipefail
|
|
779
|
-
AGENT_DIR=${y(c)}
|
|
780
|
-
mkdir -p "$AGENT_DIR"
|
|
781
|
-
cat > "$AGENT_DIR/agent.py" <<'PY_AGENT'
|
|
782
|
-
${e}
|
|
783
|
-
PY_AGENT
|
|
784
|
-
chmod +x "$AGENT_DIR/agent.py"
|
|
785
|
-
cat > /etc/systemd/system/bluerouter-ollama-agent.service <<'SERVICE'
|
|
786
|
-
[Unit]
|
|
787
|
-
Description=BlueRouter Ollama Hardware Status Agent
|
|
788
|
-
After=network.target docker.service ollama.service
|
|
789
|
-
|
|
790
|
-
[Service]
|
|
791
|
-
Type=simple
|
|
792
|
-
WorkingDirectory=${c}
|
|
793
|
-
Environment="AGENT_PORT=${g}"
|
|
794
|
-
Environment="OLLAMA_HOST=${h}"
|
|
795
|
-
Environment="OLLAMA_PORTS=${d}"
|
|
796
|
-
Environment="AGENT_TOKEN=${i}"
|
|
797
|
-
ExecStart=/usr/bin/python3 ${c}/agent.py
|
|
798
|
-
Restart=always
|
|
799
|
-
RestartSec=3
|
|
800
|
-
|
|
801
|
-
[Install]
|
|
802
|
-
WantedBy=multi-user.target
|
|
803
|
-
SERVICE
|
|
804
|
-
systemctl daemon-reload
|
|
805
|
-
systemctl enable bluerouter-ollama-agent
|
|
806
|
-
systemctl restart bluerouter-ollama-agent
|
|
807
|
-
if command -v ufw >/dev/null 2>&1 && [ -n ${y(f)} ]; then
|
|
808
|
-
ufw allow from ${y(f)} to any port ${g} proto tcp || true
|
|
809
|
-
fi
|
|
810
|
-
systemctl status bluerouter-ollama-agent --no-pager || true
|
|
811
|
-
echo "Installed BlueRouter Ollama Agent"
|
|
812
|
-
echo "Agent port: ${g}"
|
|
813
|
-
echo "Ollama host: ${h}"
|
|
814
|
-
echo "Ollama ports: ${d}"
|
|
815
|
-
`}(a,b),g=!0===a.useSudo&&"root"!==c,h=b.sudoPassword||b.sshPassword||"",i=g?`${h}
|
|
816
|
-
${f}`:f,j=["-p",String(d),"-o","StrictHostKeyChecking=no",e,g?"sudo -S -p '' bash -s":"bash -s"];return b.sshPassword?z("sshpass",["-p",b.sshPassword,"ssh",...j],{input:i}):z("ssh",j,{input:i})}let B="nodejs",C="force-dynamic";async function D(a,b){let{id:c}=await b.params,d=await (0,w.Vs)(c);if(!d)return v.NextResponse.json({error:"not_found"},{status:404});let e=await a.json().catch(()=>({}));try{let a=await A(d,{sshPassword:e.sshPassword||"",sudoPassword:e.sudoPassword||"",ufwAllowFrom:e.ufwAllowFrom,ollamaHost:e.ollamaHost||"127.0.0.1"});if(await (0,w.YT)(d.id,{lastInstallAt:new Date().toISOString(),lastInstallOk:a.ok,lastInstallLog:[a.stdout,a.stderr].filter(Boolean).join("\n").slice(-12e3)}),!a.ok)return v.NextResponse.json({ok:!1,error:"Remote install failed",result:a},{status:500});return v.NextResponse.json({ok:!0,result:a})}catch(a){return v.NextResponse.json({ok:!1,error:a.message||"Remote install failed"},{status:500})}}let E=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/ollama-nodes/[id]/install/route",pathname:"/api/ollama-nodes/[id]/install",filename:"route",bundlePath:"app/api/ollama-nodes/[id]/install/route"},distDir:".next-cli-build",relativeProjectDir:"",resolvedPagePath:"D:\\bluerouter\\src\\app\\api\\ollama-nodes\\[id]\\install\\route.js",nextConfigOutput:"standalone",userland:d,...{}}),{workAsyncStorage:F,workUnitAsyncStorage:G,serverHooks:H}=E;function I(){return(0,g.patchFetch)({workAsyncStorage:F,workUnitAsyncStorage:G})}async function J(a,b,c){c.requestMeta&&(0,h.setRequestMeta)(a,c.requestMeta),E.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let d="/api/ollama-nodes/[id]/install/route";"/index"===d&&(d="/");let e=await E.prepare(a,b,{srcPage:d,multiZoneDraftMode:!1});if(!e)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:g,deploymentId:v,params:w,nextConfig:x,parsedUrl:y,isDraftMode:z,prerenderManifest:A,routerServerContext:B,isOnDemandRevalidate:C,revalidateOnlyGenerated:D,resolvedPathname:F,clientReferenceManifest:G,serverActionsManifest:H}=e,I=(0,k.normalizeAppPath)(d),J=!!(A.dynamicRoutes[I]||A.routes[F]),K=async()=>((null==B?void 0:B.render404)?await B.render404(a,b,y,!1):b.end("This page could not be found"),null);if(J&&!z){let a=!!A.routes[F],b=A.dynamicRoutes[I];if(b&&!1===b.fallback&&!a){if(x.adapterPath)return await K();throw new t.NoFallbackError}}let L=null;!J||E.isDev||z||(L="/index"===(L=F)?"/":L);let M=!0===E.isDev||!J,N=J&&!M;H&&G&&(0,j.setManifestsSingleton)({page:d,clientReferenceManifest:G,serverActionsManifest:H});let O=a.method||"GET",P=(0,i.getTracer)(),Q=P.getActiveScopeSpan(),R=!!(null==B?void 0:B.isWrappedByNextServer),S=!!(0,h.getRequestMeta)(a,"minimalMode"),T=(0,h.getRequestMeta)(a,"incrementalCache")||await E.getIncrementalCache(a,x,A,S);null==T||T.resetRequestCache(),globalThis.__incrementalCache=T;let U={params:w,previewProps:A.preview,renderOpts:{experimental:{authInterrupts:!!x.experimental.authInterrupts},cacheComponents:!!x.cacheComponents,supportsDynamicResponse:M,incrementalCache:T,cacheLifeProfiles:x.cacheLife,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d,e)=>E.onRequestError(a,b,d,e,B)},sharedContext:{buildId:g,deploymentId:v}},V=new l.NodeNextRequest(a),W=new l.NodeNextResponse(b),X=m.NextRequestAdapter.fromNodeNextRequest(V,(0,m.signalFromNodeResponse)(b));try{let e,g=async a=>E.handle(X,U).finally(()=>{if(!a)return;a.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let c=P.getRootSpanAttributes();if(!c)return;if(c.get("next.span_type")!==n.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${c.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let f=c.get("next.route");if(f){let b=`${O} ${f}`;a.setAttributes({"next.route":f,"http.route":f,"next.span_name":b}),a.updateName(b),e&&e!==a&&(e.setAttribute("http.route",f),e.updateName(b))}else a.updateName(`${O} ${d}`)}),h=async e=>{var h,i;let j=async({previousCacheEntry:f})=>{try{if(!S&&C&&D&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let d=await g(e);a.fetchMetrics=U.renderOpts.fetchMetrics;let h=U.renderOpts.pendingWaitUntil;h&&c.waitUntil&&(c.waitUntil(h),h=void 0);let i=U.renderOpts.collectedTags;if(!J)return await (0,p.I)(V,W,d,U.renderOpts.pendingWaitUntil),null;{let a=await d.blob(),b=(0,q.toNodeOutgoingHttpHeaders)(d.headers);i&&(b[s.NEXT_CACHE_TAGS_HEADER]=i),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==U.renderOpts.collectedRevalidate&&!(U.renderOpts.collectedRevalidate>=s.INFINITE_CACHE)&&U.renderOpts.collectedRevalidate,e=void 0===U.renderOpts.collectedExpire||U.renderOpts.collectedExpire>=s.INFINITE_CACHE?void 0:U.renderOpts.collectedExpire;return{value:{kind:u.CachedRouteKind.APP_ROUTE,status:d.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:e}}}}catch(b){throw(null==f?void 0:f.isStale)&&await E.onRequestError(a,b,{routerKind:"App Router",routePath:d,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:N,isOnDemandRevalidate:C})},!1,B),b}},k=await E.handleResponse({req:a,nextConfig:x,cacheKey:L,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:D,responseGenerator:j,waitUntil:c.waitUntil,isMinimalMode:S});if(!J)return null;if((null==k||null==(h=k.value)?void 0:h.kind)!==u.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==k||null==(i=k.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});S||b.setHeader("x-nextjs-cache",C?"REVALIDATED":k.isMiss?"MISS":k.isStale?"STALE":"HIT"),z&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let l=(0,q.fromNodeOutgoingHttpHeaders)(k.value.headers);return S&&J||l.delete(s.NEXT_CACHE_TAGS_HEADER),!k.cacheControl||b.getHeader("Cache-Control")||l.get("Cache-Control")||l.set("Cache-Control",(0,r.getCacheControlHeader)(k.cacheControl)),await (0,p.I)(V,W,new Response(k.value.body,{headers:l,status:k.value.status||200})),null};R&&Q?await h(Q):(e=P.getActiveScopeSpan(),await P.withPropagatedContext(a.headers,()=>P.trace(n.BaseServerSpan.handleRequest,{spanName:`${O} ${d}`,kind:i.SpanKind.SERVER,attributes:{"http.method":O,"http.target":a.url}},h),void 0,!R))}catch(b){if(b instanceof t.NoFallbackError||await E.onRequestError(a,b,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:N,isOnDemandRevalidate:C})},!1,B),J)throw b;return await (0,p.I)(V,W,new Response(null,{status:500})),null}}},96487:()=>{}};var b=require("../../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[4741,1813,6774],()=>b(b.s=86762));module.exports=c})();
|