zevairouter 1.1.46 → 1.1.48
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/CHANGELOG.md +24 -0
- package/cli/app/.next-cli-build/BUILD_ID +1 -1
- package/cli/app/.next-cli-build/app-path-routes-manifest.json +15 -15
- package/cli/app/.next-cli-build/build-manifest.json +2 -2
- package/cli/app/.next-cli-build/prerender-manifest.json +3 -3
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/pricing/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/saml/acs/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/saml/metadata/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/saml/start/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/saml/test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cache/stats/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/changelog/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +5 -5
- package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +3 -3
- package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/omp-settings/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/cli-tools/omp-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/openbot-settings/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/cli-tools/openbot-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/context/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/context/bulk/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/context/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/dashboard/chat/completions/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/dashboard/chat/completions/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/dashboard/cli-tools/keys/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/dashboard/media/[operation]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/dashboard/media/[operation]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/dashboard/media/videos/[id]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/dashboard/media/videos/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/enable/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/health/ready/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/health/ready/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/init/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/metrics/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-token/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/quota-cookie/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-token/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/quota-cookie/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-token/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/auto-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/bulk-delete/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/cloudflare-ai/discover-models/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/cloudflare-ai/discover-models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/codebuddy/discover-models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/flow/import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/flow/login/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/flow/login/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/kiro/discover-models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/kiro/models/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/kiro/models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/opencode/discover-models/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/opencode/discover-models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/suggested-models/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -51
- package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/logs/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/settings/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/auth/setup/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/auth/status/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/auth/unlock/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/input/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/resize/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/stream/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/session/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/aggregate/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/aggregate/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/quota-stream/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/quota-stream/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/routing-stream/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/videos/[id]/content/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/videos/edits/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/videos/generations/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/callback.html +1 -1
- package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/playground.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/playground.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings/pricing/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/skills.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/index.html +1 -1
- package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/landing.html +1 -1
- package/cli/app/.next-cli-build/server/app/landing.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/login.html +1 -1
- package/cli/app/.next-cli-build/server/app/login.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/provider-icons/[provider]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/skills/[skill]/SKILL.md/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app-paths-manifest.json +15 -15
- package/cli/app/.next-cli-build/server/chunks/1131.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/1350.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/2568.js +1 -0
- package/cli/app/.next-cli-build/server/chunks/2897.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/415.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4827.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4897.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/5019.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/5024.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/5330.js +37 -9
- package/cli/app/.next-cli-build/server/chunks/5949.js +7 -7
- package/cli/app/.next-cli-build/server/chunks/6928.js +1 -0
- package/cli/app/.next-cli-build/server/chunks/7319.js +41 -41
- package/cli/app/.next-cli-build/server/chunks/7502.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/7568.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/{7634.js → 7574.js} +2 -2
- package/cli/app/.next-cli-build/server/chunks/8306.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/8895.js +7 -7
- package/cli/app/.next-cli-build/server/chunks/891.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/8985.js +26 -0
- package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/pages/404.html +1 -1
- package/cli/app/.next-cli-build/server/pages/500.html +1 -1
- package/cli/app/.next-cli-build/server/preview-props.json +3 -3
- package/cli/app/.next-cli-build/server/server-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/server-reference-manifest.json +1 -1
- package/cli/app/.next-cli-build/static/chunks/620-f70c473fe962e22d.js +1 -0
- package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/{page-4bd92dec9d25dff3.js → page-7c06c366dcec369c.js} +1 -1
- package/cli/app/.next-cli-build/static/css/{b45d78e41f951e9a.css → d11572d8f7baa8f2.css} +1 -1
- package/cli/app/CHANGELOG.md +24 -0
- package/cli/app/cli/hooks/bunRuntime.js +86 -0
- package/cli/app/cli/hooks/safeGlobalInstall.js +24 -1
- package/cli/app/cli/hooks/startupRuntime.js +4 -0
- package/cli/app/package.json +3 -3
- package/cli/app/src/lib/updater/updater.js +4 -1
- package/cli/app/src/mitm/server.js +41 -37
- package/cli/cli.js +19 -9
- package/cli/hooks/bunRuntime.js +86 -0
- package/cli/hooks/safeGlobalInstall.js +24 -1
- package/cli/hooks/startupRuntime.js +4 -0
- package/cli/package.json +2 -2
- package/package.json +3 -3
- package/cli/app/.next-cli-build/server/chunks/2051.js +0 -1
- package/cli/app/.next-cli-build/server/chunks/3184.js +0 -26
- package/cli/app/.next-cli-build/server/chunks/4586.js +0 -29
- package/cli/app/.next-cli-build/server/chunks/5932.js +0 -1
- package/cli/app/.next-cli-build/static/chunks/620-db14acf5ab1f9090.js +0 -1
- /package/cli/app/.next-cli-build/static/{49WrfprfANWLHDX8M34oV → XB-ecVrVkgIL5G31K14wJ}/_buildManifest.js +0 -0
- /package/cli/app/.next-cli-build/static/{49WrfprfANWLHDX8M34oV → XB-ecVrVkgIL5G31K14wJ}/_ssgManifest.js +0 -0
package/cli/cli.js
CHANGED
|
@@ -1837,6 +1837,7 @@ async function showInterfaceMenu(latestVersion) {
|
|
|
1837
1837
|
|
|
1838
1838
|
const MAX_RESTARTS = 2;
|
|
1839
1839
|
const RESTART_RESET_MS = 30000; // Reset counter if alive > 30s
|
|
1840
|
+
const GRACEFUL_SHUTDOWN_MS = 4000; // Time for the server to flush usage rows and close the DB
|
|
1840
1841
|
|
|
1841
1842
|
function startServer(latestVersion) {
|
|
1842
1843
|
const displayHost = host === DEFAULT_HOST ? "localhost" : host;
|
|
@@ -1962,7 +1963,7 @@ function startServer(latestVersion) {
|
|
|
1962
1963
|
|
|
1963
1964
|
// Cleanup function - force kill server process
|
|
1964
1965
|
let isCleaningUp = false;
|
|
1965
|
-
function cleanup() {
|
|
1966
|
+
function cleanup({ graceful = false } = {}) {
|
|
1966
1967
|
if (isCleaningUp) return;
|
|
1967
1968
|
isCleaningUp = true;
|
|
1968
1969
|
try {
|
|
@@ -1979,11 +1980,20 @@ function startServer(latestVersion) {
|
|
|
1979
1980
|
clearInterval(serverLogMaintenance);
|
|
1980
1981
|
serverLogMaintenance = null;
|
|
1981
1982
|
}
|
|
1982
|
-
//
|
|
1983
|
+
// On a signal, give the server a few seconds to flush buffered usage
|
|
1984
|
+
// rows and checkpoint the DB before forcing it down.
|
|
1983
1985
|
if (server.pid) {
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1986
|
+
const forceKill = () => {
|
|
1987
|
+
try { process.kill(server.pid, "SIGKILL"); } catch {}
|
|
1988
|
+
if (serverDetached) {
|
|
1989
|
+
try { process.kill(-server.pid, "SIGKILL"); } catch {}
|
|
1990
|
+
}
|
|
1991
|
+
};
|
|
1992
|
+
if (graceful && server.exitCode === null && server.signalCode === null) {
|
|
1993
|
+
try { process.kill(server.pid, "SIGTERM"); } catch {}
|
|
1994
|
+
setTimeout(forceKill, GRACEFUL_SHUTDOWN_MS).unref?.();
|
|
1995
|
+
} else {
|
|
1996
|
+
forceKill();
|
|
1987
1997
|
}
|
|
1988
1998
|
}
|
|
1989
1999
|
} catch (e) { }
|
|
@@ -2001,14 +2011,14 @@ function startServer(latestVersion) {
|
|
|
2001
2011
|
if (isShuttingDown) return;
|
|
2002
2012
|
isShuttingDown = true;
|
|
2003
2013
|
console.log("\nExiting...");
|
|
2004
|
-
cleanup();
|
|
2005
|
-
setTimeout(() => process.exit(0), 100);
|
|
2014
|
+
cleanup({ graceful: true });
|
|
2015
|
+
setTimeout(() => process.exit(0), GRACEFUL_SHUTDOWN_MS + 100).unref?.();
|
|
2006
2016
|
});
|
|
2007
2017
|
process.on("SIGTERM", () => {
|
|
2008
2018
|
if (isShuttingDown) return;
|
|
2009
2019
|
isShuttingDown = true;
|
|
2010
|
-
cleanup();
|
|
2011
|
-
setTimeout(() => process.exit(0), 100);
|
|
2020
|
+
cleanup({ graceful: true });
|
|
2021
|
+
setTimeout(() => process.exit(0), GRACEFUL_SHUTDOWN_MS + 100).unref?.();
|
|
2012
2022
|
});
|
|
2013
2023
|
// VPS/nohup: ignore SIGHUP so disconnecting SSH does not kill next-server.
|
|
2014
2024
|
// (Tray mode already no-ops SIGHUP below.)
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// Bun powers OpenCode Free (open-sse/utils/bunFetch.js). install.sh installs it
|
|
2
|
+
// globally, but `npm i -g zevairouter`, `zevai update` and the dashboard updater
|
|
3
|
+
// never did, so those installs lost OpenCode Free. This heals the gap by
|
|
4
|
+
// installing the `bun` npm package into the user runtime dir on demand.
|
|
5
|
+
const fs = require("fs");
|
|
6
|
+
const os = require("os");
|
|
7
|
+
const path = require("path");
|
|
8
|
+
const { spawn } = require("child_process");
|
|
9
|
+
const { getRuntimeDir, getRuntimeNodeModules } = require("./sqliteRuntime");
|
|
10
|
+
|
|
11
|
+
const BUN_VERSION = "^1.3.0";
|
|
12
|
+
|
|
13
|
+
function runtimeBunCandidates() {
|
|
14
|
+
const nm = getRuntimeNodeModules();
|
|
15
|
+
const exe = process.platform === "win32" ? "bun.exe" : "bun";
|
|
16
|
+
return [
|
|
17
|
+
path.join(nm, "bun", "bin", "bun.exe"),
|
|
18
|
+
path.join(nm, ".bin", exe),
|
|
19
|
+
];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function systemBunCandidates() {
|
|
23
|
+
const home = os.homedir();
|
|
24
|
+
const exe = process.platform === "win32" ? "bun.exe" : "bun";
|
|
25
|
+
const list = [
|
|
26
|
+
path.join(home, ".bun", "bin", exe),
|
|
27
|
+
path.join(path.dirname(process.execPath), exe),
|
|
28
|
+
];
|
|
29
|
+
if (process.platform !== "win32") {
|
|
30
|
+
list.push(path.join(home, ".local", "bin", exe), "/opt/homebrew/bin/bun", "/usr/local/bin/bun", "/usr/bin/bun");
|
|
31
|
+
}
|
|
32
|
+
for (const dir of String(process.env.PATH || "").split(path.delimiter)) {
|
|
33
|
+
if (dir) list.push(path.join(dir, exe));
|
|
34
|
+
}
|
|
35
|
+
return list;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function findBun() {
|
|
39
|
+
if (process.env.ZEVAI_BUN_BIN?.trim()) return process.env.ZEVAI_BUN_BIN.trim();
|
|
40
|
+
for (const candidate of [...systemBunCandidates(), ...runtimeBunCandidates()]) {
|
|
41
|
+
try {
|
|
42
|
+
if (fs.statSync(candidate).isFile()) return candidate;
|
|
43
|
+
} catch {}
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Start a detached background install of Bun when none is available. Never
|
|
50
|
+
* blocks startup; a lock file stops concurrent or repeated attempts.
|
|
51
|
+
*/
|
|
52
|
+
function ensureBunRuntimeInBackground({ spawnImpl = spawn, findBunImpl = findBun } = {}) {
|
|
53
|
+
if (process.env.ZEVAI_SKIP_BUN_INSTALL === "1") return { skipped: "disabled" };
|
|
54
|
+
const existing = findBunImpl();
|
|
55
|
+
if (existing) return { ok: true, path: existing };
|
|
56
|
+
|
|
57
|
+
const runtimeDir = getRuntimeDir();
|
|
58
|
+
try { fs.mkdirSync(runtimeDir, { recursive: true }); } catch {}
|
|
59
|
+
const lock = path.join(runtimeDir, ".bun-install.lock");
|
|
60
|
+
try {
|
|
61
|
+
const age = Date.now() - fs.statSync(lock).mtimeMs;
|
|
62
|
+
if (age < 10 * 60 * 1000) return { pending: true };
|
|
63
|
+
} catch {}
|
|
64
|
+
try { fs.writeFileSync(lock, String(process.pid)); } catch {}
|
|
65
|
+
|
|
66
|
+
const npm = process.platform === "win32" ? "npm.cmd" : "npm";
|
|
67
|
+
const child = spawnImpl(npm, [
|
|
68
|
+
"install", `bun@${BUN_VERSION}`, "--save", "--no-audit", "--no-fund", "--loglevel=error",
|
|
69
|
+
], {
|
|
70
|
+
cwd: runtimeDir,
|
|
71
|
+
detached: true,
|
|
72
|
+
stdio: "ignore",
|
|
73
|
+
windowsHide: true,
|
|
74
|
+
shell: process.platform === "win32",
|
|
75
|
+
});
|
|
76
|
+
child.on?.("exit", () => { try { fs.rmSync(lock, { force: true }); } catch {} });
|
|
77
|
+
child.on?.("error", () => { try { fs.rmSync(lock, { force: true }); } catch {} });
|
|
78
|
+
child.unref?.();
|
|
79
|
+
return { started: true };
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
module.exports = {
|
|
83
|
+
findBun,
|
|
84
|
+
runtimeBunCandidates,
|
|
85
|
+
ensureBunRuntimeInBackground,
|
|
86
|
+
};
|
|
@@ -204,11 +204,33 @@ function pathEntryExists(target, fsApi = fs) {
|
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
206
|
|
|
207
|
+
const ROLLBACK_PREFIX = "zevai-install-rollback-";
|
|
208
|
+
const STALE_ROLLBACK_MS = 24 * 60 * 60 * 1000;
|
|
209
|
+
|
|
210
|
+
// A crash or kill between snapshot and cleanup leaves a full package copy in
|
|
211
|
+
// the temp dir. Sweep copies older than a day before taking a new one.
|
|
212
|
+
function sweepStaleInstallRollbacks({ tmpDir = os.tmpdir(), now = Date.now(), fsApi = fs } = {}) {
|
|
213
|
+
let removed = 0;
|
|
214
|
+
let entries = [];
|
|
215
|
+
try { entries = fsApi.readdirSync(tmpDir); } catch { return removed; }
|
|
216
|
+
for (const name of entries) {
|
|
217
|
+
if (!name.startsWith(ROLLBACK_PREFIX)) continue;
|
|
218
|
+
const target = path.join(tmpDir, name);
|
|
219
|
+
try {
|
|
220
|
+
if (now - fsApi.statSync(target).mtimeMs < STALE_ROLLBACK_MS) continue;
|
|
221
|
+
fsApi.rmSync(target, { recursive: true, force: true });
|
|
222
|
+
removed++;
|
|
223
|
+
} catch {}
|
|
224
|
+
}
|
|
225
|
+
return removed;
|
|
226
|
+
}
|
|
227
|
+
|
|
207
228
|
function createInstallRollback(globalRoot, globalBin) {
|
|
208
229
|
const packageDir = path.join(globalRoot, APP_NAME);
|
|
209
230
|
if (!fs.existsSync(path.join(packageDir, "package.json"))) return null;
|
|
231
|
+
sweepStaleInstallRollbacks();
|
|
210
232
|
|
|
211
|
-
const backupRoot = fs.mkdtempSync(path.join(os.tmpdir(),
|
|
233
|
+
const backupRoot = fs.mkdtempSync(path.join(os.tmpdir(), ROLLBACK_PREFIX));
|
|
212
234
|
const packageBackup = path.join(backupRoot, APP_NAME);
|
|
213
235
|
const binBackup = path.join(backupRoot, "bin");
|
|
214
236
|
try {
|
|
@@ -612,6 +634,7 @@ if (require.main === module) {
|
|
|
612
634
|
|
|
613
635
|
module.exports = {
|
|
614
636
|
cleanupInstallRollback,
|
|
637
|
+
sweepStaleInstallRollbacks,
|
|
615
638
|
createInstallRollback,
|
|
616
639
|
safeInstallGlobal,
|
|
617
640
|
printDoctor,
|
|
@@ -9,6 +9,7 @@ function prepareStartupRuntime({
|
|
|
9
9
|
modules = builtinModules,
|
|
10
10
|
loadSqliteRuntime = () => require("./sqliteRuntime"),
|
|
11
11
|
loadTrayRuntime = () => require("./trayRuntime"),
|
|
12
|
+
loadBunRuntime = () => require("./bunRuntime"),
|
|
12
13
|
} = {}) {
|
|
13
14
|
const sqliteRuntime = loadSqliteRuntime();
|
|
14
15
|
|
|
@@ -22,6 +23,9 @@ function prepareStartupRuntime({
|
|
|
22
23
|
try { loadTrayRuntime().ensureTrayRuntime({ silent: true }); } catch {}
|
|
23
24
|
}
|
|
24
25
|
|
|
26
|
+
// OpenCode Free needs Bun; heal installs that skipped install.sh.
|
|
27
|
+
try { loadBunRuntime().ensureBunRuntimeInBackground(); } catch {}
|
|
28
|
+
|
|
25
29
|
return { buildEnvWithRuntime: sqliteRuntime.buildEnvWithRuntime };
|
|
26
30
|
}
|
|
27
31
|
|
package/cli/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zevairouter-cli",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.48",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "ZevaiRouter CLI - Start and manage ZevaiRouter server",
|
|
6
6
|
"bin": {
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"enquirer": "^2.4.1",
|
|
24
|
-
"node-forge": "^1.
|
|
24
|
+
"node-forge": "^1.4.2",
|
|
25
25
|
"node-machine-id": "^1.1.12",
|
|
26
26
|
"react": "19.2.4",
|
|
27
27
|
"react-dom": "19.2.4"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zevairouter",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.48",
|
|
4
4
|
"description": "Self-hosted AI router: many providers, one OpenAI-compatible /v1 endpoint and dashboard",
|
|
5
5
|
"bin": {
|
|
6
6
|
"zevai": "cli/cli.js"
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
"material-symbols": "^0.45.1",
|
|
91
91
|
"minimatch": "file:vendor/minimatch3-secure",
|
|
92
92
|
"monaco-editor": "^0.55.1",
|
|
93
|
-
"node-forge": "^1.
|
|
93
|
+
"node-forge": "^1.4.2",
|
|
94
94
|
"open": "^11.0.0",
|
|
95
95
|
"ora": "^9.1.0",
|
|
96
96
|
"postcss": "^8.5.10",
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
"typescript": "6.0.3",
|
|
105
105
|
"undici": "^8.10.0",
|
|
106
106
|
"uuid": "^14.0.1",
|
|
107
|
-
"vitest": "4.1.
|
|
107
|
+
"vitest": "4.1.12",
|
|
108
108
|
"zustand": "^5.0.10"
|
|
109
109
|
},
|
|
110
110
|
"engines": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";exports.id=2051,exports.ids=[2051],exports.modules={52007:(a,b,c)=>{c.d(b,{av:()=>o,gK:()=>m});var d=c(55511),e=c(39609);let f="https://llm.kimchi.dev",g=new Set([429,500,502,503,504]),h=new Map,i=new Map;function j(a){return(("string"==typeof a?a.trim():"")||f).replace(/\/+$/,"")}function k(a){return a?.accessToken||a?.apiKey||a?.providerSpecificData?.apiKey||null}function l(a){if(!a||"object"!=typeof a)return null;let b=a.slug||a.id||a.model||a.name;if("string"!=typeof b||""===b.trim())return null;let c=Array.isArray(a.input_modalities)?a.input_modalities.filter(a=>"text"===a||"image"===a):[],d=a.limits&&"object"==typeof a.limits?a.limits:{},e=Number(d.context_window||a.contextLength||a.context_length)||void 0,f=Number(d.max_output_tokens||a.maxOutputTokens||a.max_output_tokens)||void 0,g="string"==typeof a.provider?a.provider:"",h=!0===a.reasoning,i=Array.isArray(c)&&c.includes("image")?"imageToText":"llm",j={...a,id:b.trim(),name:String(a.display_name||a.displayName||a.name||b).trim(),provider:g,upstreamProvider:g,reasoning:h,inputModalities:c,kind:i,type:i,capabilities:{vision:c.includes("image"),reasoning:h,...e?{contextWindow:e}:{},...f?{maxOutput:f}:{},...g?{upstreamProvider:g}:{}},...e?{contextLength:e}:{},...f?{maxOutputTokens:f}:{}};return"anthropic"===g&&(j.compat={supportsReasoningEffort:!1,cacheControlFormat:"anthropic"}),j}function m(a){if("string"!=typeof a||""===a.trim())return null;let b=a.includes("/")?a.split("/").pop():a;return i.get(b)||i.get(b.toLowerCase())||null}async function n(a,b,c={}){let d=`${j(b)}/v1/models/metadata?include_in_cli=true`,f=new AbortController,h=setTimeout(()=>f.abort(Error("Kimchi models fetch timeout")),2e4),i=c.signal?AbortSignal.any([c.signal,f.signal]):f.signal;try{let b=await (0,e.proxyAwareFetch)(d,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${a}`,"User-Agent":"kimchi/0.1.40"},cache:"no-store",signal:i},c.proxyOptions||null);if(!b.ok){let a=Error(`Kimchi models ${b.status}: ${b.statusText}`);throw a.status=b.status,a.retryable=g.has(b.status),a}let f=await b.json();return Array.isArray(f?.models)?f.models:[]}finally{clearTimeout(h)}}async function o(a,b={}){let c,e,g,m=k(a);if(!m)return null;let p=a?.providerSpecificData?.kimchiEndpoint||b.endpoint||f,q=(g=(e=a?.providerSpecificData||{}).userId||e.username||a?.refreshToken||k(a)||"anonymous",(0,d.createHash)("sha256").update(`kimchi:${j(p)}:${g}`).digest("hex")),r=Date.now();if(!b.forceRefresh){let a=h.get(q);if(a&&a.expiresAt>r)return a}try{c=await n(m,p,b)}catch(a){return b.log?.warn?.("KIMCHI_MODELS",a.message),null}let s=c.map(l).filter(Boolean);if(0===s.length)return null;for(let a of s||[])a?.id&&(i.set(a.id,a),i.set(a.id.toLowerCase(),a));let t={expiresAt:Date.now()+3e5,models:s,rawModels:c};return h.set(q,t),t}},55456:(a,b,c)=>{c.d(b,{CP:()=>r,Xh:()=>l,Y8:()=>q,tM:()=>n,yI:()=>o});var d=c(47293),e=c(74075),f=c.n(e);let g="1"===process.env.CURSOR_PROTOBUF_DEBUG,h=(a,...b)=>g&&console.log(`[PROTOBUF:${a}]`,...b);new TextDecoder;let i="1.1.3",j=new Set([1,2,3,9,10,11,27,1,25]);function k(a){let b=[];for(;a>=128;)b.push(127&a|128),a>>>=7;return b.push(127&a),new Uint8Array(b)}function l(a,b,c){let d=k(a<<3|b);if(0===b)return m(d,k(c));if(2===b){let a="string"==typeof c?new TextEncoder().encode(c):c instanceof Uint8Array?c:Buffer.isBuffer(c)?new Uint8Array(c):new Uint8Array(0);return m(d,k(a.length),a)}return new Uint8Array(0)}function m(...a){let b=new Uint8Array(a.reduce((a,b)=>a+b.length,0)),c=0;for(let d of a)b.set(d,c),c+=d.length;return b}function n(a,b=!1){let c=a,d=0;b&&(c=new Uint8Array(f().gzipSync(Buffer.from(a))),d=1);let e=new Uint8Array(5+c.length);return e[0]=d,e[1]=c.length>>24&255,e[2]=c.length>>16&255,e[3]=c.length>>8&255,e[4]=255&c.length,e.set(c,5),e}function o(a,b,c=[],e=null,f=!1){h("BODY",`Generating: ${a.length} msgs, model=${b}, tools=${c.length}, reasoning=${e||"none"}, forceAgentMode=${f}`);let g=function(a,b,c=[],e=null,f=!1){return l(1,2,function(a,b,c=[],e=null,f=!1){let g,i=c?.length>0,j=i||f,n=[],o=[],p=[];for(let b=0;b<a.length;b++){let c=a[b],d=Array.isArray(c?.tool_calls)&&c.tool_calls.length>0,e=Array.isArray(c?.tool_results)&&c.tool_results.length>0;if(c?.role==="assistant"&&d&&e){h("ENCODE",`normalizing mixed assistant tool payload at msg[${b}] (calls=${c.tool_calls.length}, results=${c.tool_results.length})`),p.push({...c,tool_results:[]});let d=a[b+1],e=d?.role==="assistant"&&Array.isArray(d?.tool_results)&&d.tool_results.length>0,f=new Set(c.tool_results.map(a=>a?.tool_call_id).filter(a=>"string"==typeof a)),g=new Set((d?.tool_results||[]).map(a=>a?.tool_call_id).filter(a=>"string"==typeof a)),i=f.size>0&&f.size===g.size;if(i){for(let a of f)if(!g.has(a)){i=!1;break}}e&&i||p.push({role:"assistant",content:"",tool_results:c.tool_results});continue}p.push(c)}for(let a=0;a<p.length;a++){let b=p[a],c="user"===b.role?1:2,e=(0,d.A)(),f=a===p.length-1;n.push({content:b.content,role:c,messageId:e,isLast:f,hasTools:i,toolResults:b.tool_results||[]}),o.push({messageId:e,role:c})}let q=0;return"medium"===e?q=1:"high"===e&&(q=2),m(...n.map(a=>l(1,2,function(a,b,c,d=!1,e=!1,f=[],g=null){let h=f.length>0;return m(l(1,2,a),l(2,0,b),l(13,2,c),...g?[l(32,2,g)]:[],...h?f.map(a=>l(18,2,function(a){var b;let c,d,e=function(a){let b="string"==typeof a&&a.length>0?a:"tool";if(b.startsWith("mcp__")){let a=b.slice(5),c=a.indexOf("__");if(c>=0){let b=a.slice(0,c)||"custom",d=a.slice(c+2)||"tool";return`mcp_${b}_${d}`}return`mcp_custom_${a||"tool"}`}return b.startsWith("mcp_")?b:`mcp_custom_${b}`}(a.tool_name||a.name||""),f=a.raw_args||"{}",g=a.result_content||a.result||"",{toolCallId:h,modelCallId:i}=(b=a.tool_call_id||"",c="\nmc_",(d=b.indexOf(c))>=0?{toolCallId:b.slice(0,d),modelCallId:b.slice(d+c.length)}:{toolCallId:b,modelCallId:null}),j=a.tool_index||a.index||1,{serverName:k,selectedTool:n}=function(a){if("string"!=typeof a||!a.startsWith("mcp_"))return{serverName:"custom",selectedTool:a||"tool"};let b=a.slice(4),c=b.indexOf("_");return c<0?{serverName:"custom",selectedTool:b||"tool"}:{serverName:b.slice(0,c)||"custom",selectedTool:b.slice(c+1)||"tool"}}(e);return m(l(1,2,h),l(2,2,e),l(3,0,j>0?j:1),...i?[l(12,2,i)]:[],l(5,2,f),l(8,2,function(a,b,c,d,e=1){return m(l(1,0,19),l(28,2,m(l(1,2,c),l(2,2,d))),l(35,2,a),...b?[l(48,2,b)]:[],l(49,0,e>0?e:1))}(h,i,n,g,j)),l(11,2,function(a,b,c,d,e,f,g=1){let h;return m(l(1,0,19),l(27,2,(h=m(l(1,2,c),l(3,2,e),l(4,2,d)),l(1,2,h))),l(3,2,a),l(9,2,b),l(10,2,e),l(48,0,g>0?g:1),...f?[l(49,2,f)]:[])}(h,e,n,k,f,i,j)))}(a))):[],l(29,0,+!!e),l(47,0,e?2:1),...d&&e?[l(51,2,k(1))]:[])}(a.content,a.role,a.messageId,a.isLast,a.hasTools,a.toolResults))),l(2,0,1),l(3,2,new Uint8Array(0)),l(4,0,1),l(5,2,m(l(1,2,b),l(4,2,new Uint8Array(0)))),l(8,2,""),l(13,0,1),l(15,2,(g=m(l(1,2,new Uint8Array(0)),l(2,2,new Uint8Array(0))),m(l(1,2,"cursor\\aisettings"),l(3,2,new Uint8Array(0)),l(6,2,g),l(8,0,1),l(9,0,1)))),l(19,0,1),l(23,2,(0,d.A)()),l(26,2,m(l(1,2,process.platform||"linux"),l(2,2,process.arch||"x64"),l(3,2,process.version||"v20.0.0"),l(4,2,process.cwd?.()||"/"),l(5,2,new Date().toISOString()))),l(27,0,+!!j),...j?[l(29,2,k(1))]:[],...o.map(a=>l(30,2,function(a,b,c=null){return m(l(1,2,a),...c?[l(2,2,c)]:[],l(3,0,b))}(a.messageId,a.role))),...c?.length>0?c.map(a=>{let b,c,d;return l(34,2,(b=a.function?.name||a.name||"",c=a.function?.description||a.description||"",d=a.function?.parameters||a.input_schema||{},m(...b?[l(1,2,b)]:[],...c?[l(2,2,c)]:[],...Object.keys(d).length>0?[l(3,2,JSON.stringify(d))]:[],l(4,2,"custom"))))}):[],l(35,0,0),l(38,0,0),l(46,0,j?2:1),l(47,2,""),l(48,0,+!j),l(49,0,q),l(51,0,0),l(53,0,1),l(54,2,j?"Agent":"Ask"))}(a,b,c,e,f))}(a,b,c,e,f),i=n(g,!1);return h("BODY",`Protobuf=${g.length}B, Framed=${i.length}B`),i}function p(a,b){let c=0,d=0,e=b;for(;e<a.length;){let b=a[e];if(c|=(127&b)<<d,e++,!(128&b))break;d+=7}return[c,e]}function q(a){let b=new Map,c=0;for(;c<a.length;){let[d,e,f,g]=function(a,b){let c;if(b>=a.length)return[null,null,null,b];let[d,e]=p(a,b),f=7&d,g=e;if(0===f)[c,g]=p(a,g);else if(2===f){let[b,d]=p(a,g);c=a.slice(d,d+b),g=d+b}else 1===f?(c=a.slice(g,g+8),g+=8):5===f?(c=a.slice(g,g+4),g+=4):c=null;return[d>>3,f,c,g]}(a,c);if(null===d)break;b.has(d)||b.set(d,[]),b.get(d).push({wireType:e,value:f}),c=g}return b}function r(a){try{let b=q(a);for(let a of b.keys())j.has(a)||h("SCHEMA",`Unknown response field #${a} detected. Schema v${i} may be outdated.`);if(b.has(1)){let a=function(a){let b=q(a),c="",d="",e="",f=!1;if(b.has(3)&&(c=new TextDecoder().decode(b.get(3)[0].value).split("\n")[0]),b.has(9)&&(d=new TextDecoder().decode(b.get(9)[0].value)),b.has(11)&&(f=0!==b.get(11)[0].value),b.has(27))try{let a=q(b.get(27)[0].value);if(a.has(1)){let b=q(a.get(1)[0].value);b.has(1)&&(d=new TextDecoder().decode(b.get(1)[0].value)),b.has(3)&&(e=new TextDecoder().decode(b.get(3)[0].value))}}catch(a){h("EXTRACT",`MCP parse error: ${a.message}`)}return(!e&&b.has(10)&&(e=new TextDecoder().decode(b.get(10)[0].value)),c&&d)?{id:c,type:"function",function:{name:d,arguments:e||"{}"},isLast:f}:null}(b.get(1)[0].value);if(a)return h("EXTRACT",`Tool call: ${a.function.name}`),{text:null,error:null,toolCall:a,thinking:null}}if(b.has(2)){let{text:a,thinking:c}=function(a){let b=q(a),c=null,d=null;if(b.has(1)&&(c=new TextDecoder().decode(b.get(1)[0].value)),b.has(25))try{let a=q(b.get(25)[0].value);a.has(1)&&(d=new TextDecoder().decode(a.get(1)[0].value))}catch(a){h("EXTRACT",`Thinking parse error: ${a.message}`)}return{text:c,thinking:d}}(b.get(2)[0].value);if(a||c)return{text:a,error:null,toolCall:null,thinking:c}}return{text:null,error:null,toolCall:null,thinking:null}}catch(b){return h("EXTRACT",`Decode failed (schema v${i}): ${b.message}`),{text:null,error:null,toolCall:null,thinking:null,raw:Buffer.from(a).toString("base64"),decodeError:b.message}}}},81756:(a,b,c)=>{c.d(b,{JA:()=>h});var d=c(55511),e=c.n(d),f=c(85081);function g(a,b=""){return e().createHash("sha256").update(a+b).digest("hex")}function h(a,b=null,c=!0){let d=a.includes("::")?a.split("::")[1]:a,i=b||g(d,"machineId"),j=(0,f.Ay)(d,f.Ay.DNS),k=g(d),l=function(a){let b=Math.floor(Date.now()/1e6),c=new Uint8Array([b>>40&255,b>>32&255,b>>24&255,b>>16&255,b>>8&255,255&b]),d=165;for(let a=0;a<c.length;a++)c[a]=(c[a]^d)+a%256&255,d=c[a];let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",f="";for(let a=0;a<c.length;a+=3){let b=c[a],d=a+1<c.length?c[a+1]:0,g=a+2<c.length?c[a+2]:0;f+=e[b>>2],f+=e[(3&b)<<4|d>>4],a+1<c.length&&(f+=e[(15&d)<<2|g>>6]),a+2<c.length&&(f+=e[63&g])}return`${f}${a}`}(i),m="linux";"u">typeof process&&("win32"===process.platform?m="windows":"darwin"===process.platform&&(m="macos"));let n="x64";return"u">typeof process&&"arm64"===process.arch&&(n="aarch64"),{authorization:`Bearer ${d}`,"connect-accept-encoding":"gzip","connect-protocol-version":"1","content-type":"application/connect+proto","user-agent":"connect-es/1.6.1","x-amzn-trace-id":`Root=${e().randomUUID()}`,"x-client-key":k,"x-cursor-checksum":l,"x-cursor-client-version":"3.12.17","x-cursor-client-type":"ide","x-cursor-client-os":m,"x-cursor-client-arch":n,"x-cursor-client-device-type":"desktop","x-cursor-config-version":e().randomUUID(),"x-cursor-timezone":Intl.DateTimeFormat().resolvedOptions().timeZone||"UTC","x-ghost-mode":c?"true":"false","x-request-id":e().randomUUID(),"x-session-id":j}}}};
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";exports.id=3184,exports.ids=[3184],exports.modules={59657:(a,b,c)=>{c.d(b,{Jb:()=>i,aI:()=>f,jd:()=>h});var d=c(41004),e=c(92306);async function f(a){try{await a.body?.cancel()}catch{}}function g(a){let b=!1;return c=>{if(b||"function"!=typeof a)return!1;b=!0;try{Promise.resolve(a(c)).catch(a=>{console.error("[Stream] Transport failure callback failed:",a?.message||a)})}catch(a){console.error("[Stream] Transport failure callback failed:",a?.message||a)}return!0}}function h({onDisconnect:a,onError:b,log:c,provider:d,model:f,reqTag:g="",signal:i}={}){let j=new AbortController,k=Date.now(),l=!1,m=null,n=()=>j.abort(i.reason),o=()=>i?.removeEventListener("abort",n);i?.aborted?n():i?.addEventListener("abort",n,{once:!0});let p=(a,b,e=!1)=>{let h=Date.now()-k;e&&c?.errorLine?c.errorLine(g,a,`${b} \xb7 ${d}/${f} \xb7 ${h}ms`):c?.line?c.line(g,a,`${b} \xb7 ${d}/${f} \xb7 ${h}ms`):console.log(`[${new Date().toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"})}] ${a} ${d}/${f} \xb7 ${b} \xb7 ${h}ms`)};return{signal:j.signal,cleanup:o,startTime:k,isConnected:()=>!l,handleDisconnect:(b="client_closed")=>{l||(l=!0,o(),p("⚡",`DISCONNECT: ${b}`),(0,e.s)("CTRL",`${d}/${f} | disconnect=${b} | dur=${Date.now()-k}ms`),m=setTimeout(()=>{j.abort()},500),a?.({reason:b,duration:Date.now()-k}))},handleComplete:()=>{!l&&(l=!0,o(),m&&(clearTimeout(m),m=null))},handleError:a=>{if(!l){if(l=!0,o(),m&&(clearTimeout(m),m=null),"AbortError"===a.name)return void p("⚡","ABORTED");p("✗",`ERROR: ${a.message}${a.stack?`
|
|
2
|
-
${a.stack}`:""}`,!0),b?.(a)}},abort:()=>j.abort()}}function i(a,b,c,f=null,h=null,j=null,k=null,l=null,m=null){let n=null,o=null,p=0,q=0,r=Date.now(),s=r,t=!1,u=null,v="function"==typeof m?.progress?.subscribe,w="STREAM",x=j?.firstEventTimeoutMs||j?.firstChunkTimeoutMs||d.Z1,y=j?.progressIdleTimeoutMs||j?.stallTimeoutMs||d.xM,z=j?.absoluteTimeoutMs||d.MB,A=Number.isFinite(j?.absoluteStartedAtMs)?j.absoluteStartedAtMs:r,B=Math.max(1,z-Math.max(0,r-A)),C=g(h),D=()=>{n&&(clearTimeout(n),n=null),o&&(clearTimeout(o),o=null)},E=()=>{D(),u?.(),u=null},F=(a,b)=>{if(c.signal?.aborted)return void(0,e.s)(w,`${a} timer ignored after request abort`);let d="first_event"===a,g="absolute"===a;(0,e.s)(w,`TIMEOUT phase=${a} budget=${b}ms | chunks=${p} | bytes=${q} | sinceProgress=${Date.now()-s}ms`);let h=Error(g?"provider stream exceeded the absolute deadline":d?"provider stream did not produce a valid event in time":"provider stream progress stalled");h.name="TimeoutError",h.code=g?"STREAM_ABSOLUTE_TIMEOUT":d?"STREAM_FIRST_CHUNK_TIMEOUT":"STREAM_STALL_TIMEOUT",h.phase=a,h.timeoutMs=b,f?.setFailure?.(h),C(h),D(),c.handleError?.(h),c.abort?.()},G=()=>{if(n&&(clearTimeout(n),n=null),c.signal?.aborted||!c.isConnected())return;let a=t?"progress_idle":"first_event",b=t?y:x;n=setTimeout(()=>{n=null,F(a,b)},b)},H=(a=Date.now())=>{let b=Number.isFinite(a)?a:Date.now(),c=Math.max(0,b-s);try{k?.(t?"progress_idle":"first_event",c)}catch{}t=!0,s=b,G()},I={signal:c.signal,startTime:c.startTime,isConnected:()=>c.isConnected(),handleComplete:()=>{(0,e.s)(w,`complete | chunks=${p} | bytes=${q} | dur=${Date.now()-r}ms`),E(),c.handleComplete()},handleError:a=>{(0,e.s)(w,`error: ${a?.message} | chunks=${p} | bytes=${q} | dur=${Date.now()-r}ms`),E(),c.handleError(a)},handleDisconnect:a=>{(0,e.s)(w,`disconnect: ${a} | chunks=${p} | bytes=${q} | dur=${Date.now()-r}ms`),E(),c.handleDisconnect(a)},abort:()=>{E(),c.abort()}};G(),o=setTimeout(()=>{o=null,F("absolute",z)},B),v&&(u=m.progress.subscribe(a=>{a?.type==="attempt_started"?(t=!1,s=Number.isFinite(a.atMs)?a.atMs:Date.now(),G(),((a=Date.now())=>{o&&clearTimeout(o),o=setTimeout(()=>{o=null,F("absolute",z)},Math.max(1,z-Math.max(0,Date.now()-a)))})(s)):a?.type==="validated_event"&&H(a.atMs)})),(0,e.s)(w,`pipe start | firstEventTimeout=${x}ms | progressIdleTimeout=${y}ms | absoluteTimeout=${z}ms`);let J=new TransformStream({transform(a,b){p++;let c=a?.byteLength||a?.length||0;q+=c;let d=Date.now()-s;e.T&&(p<=5||p%20==0||d>5e3)&&(0,e.s)(w,`chunk #${p} | size=${c}B | gap=${d}ms | total=${q}B`),b.enqueue(a)},flush(){(0,e.s)(w,`upstream EOF | chunks=${p} | bytes=${q} | dur=${Date.now()-r}ms`)}});return function(a,b,c=null,d=null,e=null,f=null){let h=a.readable.getReader(),i=a.writable.getWriter(),j=!1,k=g(d),l="function"==typeof c?c:c?.build?.bind(c),m="object"==typeof c?c?.observe?.bind(c):null,n=f?.heartbeat?.bytes,o=Number(f?.heartbeat?.intervalMs),p=null,q=null,r=!1,s=!1,t=()=>{p&&(clearInterval(p),p=null)},u=()=>{t(),q?.(),q=null},v=a=>{if(!j&&l){j=!0;try{let b=l();b&&a.enqueue(b)}catch{}}},w=async a=>{if(!s&&!r){s=!0;try{for(;!r&&a.desiredSize>0;){if(!b.isConnected()){r=!0,u(),await Promise.allSettled([h.cancel("stream_disconnected"),i.abort("stream_disconnected")]),v(a),a.close();return}let{done:c,value:d}=await h.read();if(r)return;if(c){r=!0,u(),b.handleComplete(),a.close();return}try{m?.(d)}catch{}if(a.enqueue(d),e?.(d)){r=!0,u(),v(a),b.handleComplete(),await Promise.allSettled([h.cancel("protocol_terminal"),i.abort("protocol_terminal")]),a.close();return}}}catch(l){if(r)return;r=!0,u();let d=b.isConnected(),e=b.signal?.aborted===!0;d&&!e&&k(l),d&&!e&&c?.setFailure?.(l),b.handleError(l),h.cancel().catch(()=>{}),i.abort().catch(()=>{});let f=l?.message||"",g=l?.code||l?.cause?.code||"",j="AbortError"===l.name||f.includes("aborted")||f.includes("socket hang up")||f.includes("ECONNRESET")||f.includes("ETIMEDOUT")||f.includes("EPIPE")||"ECONNRESET"===g||"ETIMEDOUT"===g||"EPIPE"===g||"UND_ERR_SOCKET"===g;try{!d||j||c?(v(a),a.close()):a.error(l)}catch{}}finally{s=!1}}};return new ReadableStream({start(a){n?.byteLength>0&&Number.isFinite(o)&&!(o<=0)&&(a.enqueue(n),p=setInterval(()=>{if(!r&&b.isConnected()&&!(a.desiredSize<=0))try{a.enqueue(n)}catch{t()}},o),q=f?.progress?.subscribe?.(c=>{if(c?.type==="attempt_started"&&!r&&b.isConnected()&&!(a.desiredSize<=0))try{a.enqueue(n)}catch{u()}}))},pull:a=>w(a),async cancel(a){r||(r=!0,u(),b.handleDisconnect(a||"cancelled"),await Promise.allSettled([h.cancel(a),i.abort(a)]))}})}({readable:a.body.pipeThrough(J).pipeThrough(b).pipeThrough(new TransformStream({transform(a,b){(a?.byteLength||a?.length||0)>0&&(v||H(),l?.()),b.enqueue(a)}})),writable:{getWriter:()=>({abort:()=>Promise.resolve()})}},I,f,C,b.isProtocolTerminalChunk?.bind(b),m)}},74957:(a,b,c)=>{c.d(b,{Hv:()=>j});var d=c(58500),e=c(41004),f=c(93943),g=c(39609),h=c(59657),i=c(92306);class j{constructor(a,b){this.provider=a,this.config=b,this.noAuth=b?.noAuth||!1}getProvider(){return this.provider}getBaseUrls(){return this.config.baseUrls||(this.config.baseUrl?[this.config.baseUrl]:[])}getFallbackCount(){return this.getBaseUrls().length||1}buildUrl(a,b,c=0,d=null){if(this.provider?.startsWith?.("openai-compatible-")){let a=(d?.providerSpecificData?.baseUrl||"https://api.openai.com/v1").replace(/\/$/,""),b=this.provider.includes("responses")?"/responses":"/chat/completions";return`${a}${b}`}if(this.provider?.startsWith?.("anthropic-compatible-")){let a=(d?.providerSpecificData?.baseUrl||"https://api.anthropic.com/v1").replace(/\/$/,"");return`${a}/messages`}let e=this.getBaseUrls();return e[c]||e[0]||this.config.baseUrl}buildHeaders(a,b=!0){let c={"Content-Type":"application/json",...this.config.headers};return this.provider?.startsWith?.("anthropic-compatible-")?(a.apiKey?c["x-api-key"]=a.apiKey:a.accessToken&&(c.Authorization=`Bearer ${a.accessToken}`),c["anthropic-version"]||(c["anthropic-version"]="2023-06-01")):a.accessToken?c.Authorization=`Bearer ${a.accessToken}`:a.apiKey&&(c.Authorization=`Bearer ${a.apiKey}`),b&&(c.Accept="text/event-stream"),c}transformRequest(a,b,c,d){return b}prepareRequestBody(a,b){return JSON.stringify(a)}fetchUpstream(a,b,c){return(0,g.proxyAwareFetch)(a,b,c)}shouldRetry(a,b){return a===e.gx.RATE_LIMITED&&b+1<this.getFallbackCount()}async refreshCredentials(a,b,c=null){return null}canRefreshCredentials(a){return this.refreshCredentials!==j.prototype.refreshCredentials&&!!a?.refreshToken}needsRefresh(a){return(0,f.fp)(this.provider,a)}parseError(a,b){return{status:a.status,message:b||`HTTP ${a.status}`}}async execute({model:a,body:b,stream:c,credentials:f,sourceFormat:g=null,targetFormat:j=null,requestFormat:k=null,runtimeTransport:l=null,signal:m,log:n,proxyOptions:o=null,connectTimeoutMs:p=null}){let q={model:a,sourceFormat:g,targetFormat:j,requestFormat:k,runtimeTransport:l},r=this.getFallbackCount(),s=null,t=0,u={},v={...e.cI,...this.config.retry},w=async(a,b,c,f=null)=>{let{attempts:g,delayMs:i}=(0,e.DR)(v[b]);return!(g<=0)&&!(u[a]>=g)&&(u[a]++,n?.debug?.("RETRY",`${c} retry ${u[a]}/${g} after ${i/1e3}s`),f&&await (0,h.aI)(f),await (0,d.setTimeout)(i,void 0,{signal:m}),!0)};for(let d=0;d<r;d++){let g=this.buildUrl(a,c,d,f,q),j=this.transformRequest(a,b,c,f,q),k=this.buildHeaders(f,c,q);u[d]||(u[d]=0);let l=new AbortController,v=p||this.config?.timeoutMs||e.pH,x=setTimeout(()=>l.abort(Error("fetch connect timeout")),v),y=m?AbortSignal.any([m,l.signal]):l.signal;try{let a=this.prepareRequestBody(j,k),b="string"==typeof a?a.length:a?.byteLength??a?.length??"?",c=Date.now();(0,i.s)("FETCH",`${this.provider.toUpperCase()} → ${g} | body=${b}B | connectTimeout=${v}ms`);let f=await this.fetchUpstream(g,{method:"POST",headers:k,body:a,signal:y},o);clearTimeout(x);let p=f.headers?.get?.("content-type")||"",q=f.headers?.get?.("content-length")||"?";if((0,i.s)("FETCH",`${this.provider.toUpperCase()} ← ${f.status} | ttft=${Date.now()-c}ms | ct=${p} | cl=${q}`),await w(d,f.status,`status ${f.status}`,f)){d--;continue}if(this.shouldRetry(f.status,d)){n?.debug?.("RETRY",`${f.status} on ${g}, trying fallback ${d+1}`),t=f.status,await (0,h.aI)(f);continue}return{response:function(a,b,c,d){if(!a.body||!b)return a;let e=a.body.getReader();return new Response(new ReadableStream({async pull(a){let f;if(d?.aborted)throw d.reason;try{let g=new Promise((a,d)=>{f=setTimeout(()=>{let a=Error("response body timeout");d(a),queueMicrotask(()=>{c.abort(a),e.cancel(a).catch(()=>{})})},b)}),{done:h,value:i}=await Promise.race([e.read(),g]);if(d?.aborted)throw d.reason;h?a.close():a.enqueue(i)}catch(b){a.error(b)}finally{clearTimeout(f)}},cancel:a=>e.cancel(a)}),a)}(f,this.config?.responseTimeoutMs||e.xM,l,m),url:g,headers:k,transformedBody:j}}catch(b){clearTimeout(x),s=b;let a=l.signal.aborted&&"AbortError"===b.name;if((0,i.s)("FETCH",`${this.provider.toUpperCase()} ✖ ${b.name}: ${b.message}${a?" (connect timeout)":""}`),"AbortError"===b.name&&!a)throw b;if(await w(d,e.gx.BAD_GATEWAY,`network "${b.message}"`)){d--;continue}if(d+1<r){n?.debug?.("RETRY",`Error on ${g}, trying fallback ${d+1}`);continue}throw b}}throw s||Error(`All ${r} URLs failed with status ${t}`)}}},86724:(a,b,c)=>{c.d(b,{Z:()=>h});let d={deepseek:{scope:"all"},minimax:{scope:"all"},"minimax-cn":{scope:"all"}},e=[{match:a=>/^kimi-/i.test(a||""),scope:"toolCalls"},{match:a=>/deepseek/i.test(a||""),scope:"all"}],f="deepseek-v4-pro",g={[`${f}-max`]:{thinkingType:"enabled",reasoningEffort:"max"},[`${f}-none`]:{thinkingType:"disabled",reasoningEffort:null}};function h({provider:a,model:b,body:c}){let i=d[a],j=e.find(a=>a.match(b));var k=function({provider:a,model:b,body:c}){let d=g[b];if("deepseek"!==a||!d||!c)return c;let e={...c,model:f,extra_body:{...c.extra_body||{},thinking:{...c.extra_body?.thinking||{},type:d.thinkingType}}};return d.reasoningEffort?e.reasoning_effort=d.reasoningEffort:delete e.reasoning_effort,e}({provider:a,model:b,body:c}),l=i||j;if(!l||!k?.messages)return k;let m=k.messages.map(a=>!function(a,b){if(a?.role!=="assistant")return!1;let c=a.reasoning_content;return("string"!=typeof c||!(c.length>0))&&("toolCalls"!==b||Array.isArray(a.tool_calls)&&a.tool_calls.length>0)}(a,l.scope)?a:{...a,reasoning_content:" "});return{...k,messages:m}}},92306:(a,b,c)=>{function d(a,b){}c.d(b,{T:()=>e,s:()=>d});let e=!1},93184:(a,b,c)=>{c.d(b,{j:()=>A});var d=c(77598),e=c.n(d),f=c(74957),g=c(35024),h=c(86724),i=c(31421),j=c(73024),k=c.n(j),l=c(48161),m=c.n(l),n=c(76760),o=c.n(n);let p=`
|
|
3
|
-
const input = JSON.parse(await Bun.stdin.text());
|
|
4
|
-
const out = Bun.stdout.writer();
|
|
5
|
-
try {
|
|
6
|
-
const res = await fetch(input.url, {
|
|
7
|
-
method: input.method,
|
|
8
|
-
headers: input.headers,
|
|
9
|
-
body: input.body ?? undefined,
|
|
10
|
-
proxy: input.proxy ?? undefined,
|
|
11
|
-
});
|
|
12
|
-
out.write(JSON.stringify({ status: res.status, statusText: res.statusText, headers: [...res.headers.entries()] }) + "\\n");
|
|
13
|
-
await out.flush();
|
|
14
|
-
if (res.body) {
|
|
15
|
-
for await (const chunk of res.body) {
|
|
16
|
-
out.write(chunk);
|
|
17
|
-
await out.flush();
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
} catch (error) {
|
|
21
|
-
out.write(JSON.stringify({ error: String(error?.message || error) }) + "\\n");
|
|
22
|
-
}
|
|
23
|
-
await out.end();
|
|
24
|
-
`,q=new Set(["content-encoding","content-length","transfer-encoding"]);function r(a){let b=a?.reason;if(b instanceof Error&&"AbortError"===b.name)return b;let c=Error(b instanceof Error?b.message:"Request aborted");return c.name="AbortError",c}var s=c(39609),t=c(36942);let u=new Set,v=0,w=0;function x(a){let b=Date.now();b!==v&&(v=b,w=0),w++;let c=4096n*BigInt(b)+BigInt(w),d=a?~c:c;return(a?"ses_":"msg_")+Array.from({length:6},(a,b)=>Number(d>>BigInt(40-8*b)&255n).toString(16).padStart(2,"0")).join("")+Array.from(e().getRandomValues(new Uint8Array(14)),a=>"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"[a%62]).join("")}let y={type:"function",function:{name:"read",description:"Read a file or directory from the local filesystem.",parameters:{type:"object",properties:{filePath:{type:"string",description:"The absolute path to the file or directory to read"}},required:["filePath"]}}},z="<env>\n Working directory: /workspace\n Is directory a git repo: no\n Platform: linux\n</env>";class A extends f.Hv{constructor(){super("opencode",g.xq.opencode)}transformRequest(a,b){let c={...b};return Array.isArray(c.messages)&&c.messages.some(a=>a&&"name"in a)&&(c.messages=c.messages.map(a=>{if(!a||!("name"in a))return a;let{name:b,...c}=a;return c})),Array.isArray(c.tools)&&0!==c.tools.length?c.tools.some(a=>a?.function?.name==="read")||(c.tools=[...c.tools,y]):(c.tools=[y],c.tool_choice||(c.tool_choice="none")),Array.isArray(c.messages)&&(c.messages=function(a){if(a.some(a=>a?.role==="system"&&"string"==typeof a.content&&a.content.includes("<env>")))return a;let b=a[0];return b?.role==="system"&&"string"==typeof b.content?[{...b,content:`${b.content}
|
|
25
|
-
|
|
26
|
-
${z}`},...a.slice(1)]:[{role:"system",content:z},...a]}(c.messages)),c.stream=!0,(0,h.Z)({provider:this.provider,model:a,body:c})}buildUrl(a){let b="https://opencode.ai";return u.has(a)?`${b}/zen/v1/messages`:`${b}/zen/v1/chat/completions`}buildHeaders(a,b=!0){let c=x(!0),d=x(!1);return{"Content-Type":"application/json",Authorization:"Bearer public","User-Agent":t.B,"x-opencode-client":"cli","x-opencode-session":c,"x-opencode-session-id":c,"x-opencode-request":d,Accept:"*/*"}}fetchUpstream(a,b,c){return function(a,{method:b="GET",headers:c={},body:d=null,signal:e=null}={},{proxyUrl:f=null}={}){if(e?.aborted)return Promise.reject(r(e));let g=function(){let a=process.env.ZEVAI_BUN_BIN?.trim();if(a)return a;let b="win32"===process.platform,c=m().homedir(),d=b?"bun.exe":"bun";for(let a of b?[o().join(c,".bun","bin",d),o().join(o().dirname(process.execPath),d)]:[o().join(c,".bun","bin",d),o().join(o().dirname(process.execPath),d),o().join(c,".local","bin",d),"/opt/homebrew/bin/bun","/usr/local/bin/bun","/usr/bin/bun"])if(k().existsSync(a))return a;return d}(),h=JSON.stringify({url:String(a),method:b,headers:c instanceof Headers?Object.fromEntries(c.entries()):c,body:null==d?null:"string"==typeof d?d:d instanceof Uint8Array?Buffer.from(d).toString("utf8"):String(d),proxy:f||null});return new Promise((a,c)=>{let d=(0,i.spawn)(g,["-e",p],{stdio:["pipe","pipe","pipe"]}),f=!1,j=Buffer.alloc(0),k=null,l="",m=a=>{if(f){if(k){try{k.error(a)}catch{}k=null}}else f=!0,c(a)},n=()=>{d.killed||d.kill("SIGKILL"),m(r(e))};e?.addEventListener("abort",n,{once:!0});let o=()=>e?.removeEventListener("abort",n),s=new ReadableStream({start(a){k=a},pull(){d.stdout.resume()},cancel(){k=null,o(),d.killed||d.kill("SIGKILL")}},{highWaterMark:16}),t=a=>{k&&0!==a.length&&(k.enqueue(new Uint8Array(a)),null!==k.desiredSize&&k.desiredSize<=0&&d.stdout.pause())};d.stdout.on("data",c=>{if(f)return void t(c);let d=(j=Buffer.concat([j,c])).indexOf(10);if(-1===d)return;let e=j.subarray(0,d).toString("utf8"),g=j.subarray(d+1);j=Buffer.alloc(0),((c,d)=>{let e;try{e=JSON.parse(c)}catch{m(Error(`Bun fetch returned an invalid header: ${c.slice(0,200)}`));return}if(e.error)return m(Error(`Bun fetch failed: ${e.error}`));let g=new Headers;for(let[a,b]of e.headers||[])q.has(a.toLowerCase())||g.append(a,b);f=!0,a(new Response(![101,204,205,304].includes(e.status)&&"HEAD"!==b?s:null,{status:e.status,statusText:e.statusText||"",headers:g})),t(d)})(e,g)}),d.stderr.on("data",a=>{l=(l+a.toString("utf8")).slice(-2048)}),d.on("error",a=>{o(),m(Error("ENOENT"===a.code?`Bun runtime not found (${g}). Install Bun from https://bun.sh or set ZEVAI_BUN_BIN to its path.`:`Bun fetch could not start: ${a.message}`))}),d.on("close",a=>{(o(),f)?k&&(0===a?k.close():k.error(Error(`Bun fetch exited with code ${a} mid-response${l?`: ${l.trim()}`:""}`)),k=null):m(Error(`Bun fetch exited with code ${a} before responding${l?`: ${l.trim()}`:""}`))}),d.stdin.on("error",()=>{}),d.stdin.end(h)})}(a,b,{proxyUrl:(0,s.ip)(a,c)})}}},93943:(a,b,c)=>{c.d(b,{Dz:()=>g,Vq:()=>j,fp:()=>h});var d=c(8590);let e=new Map;function f(a){if(null==a||""===a)return null;if("number"==typeof a)return a<1e12?1e3*a:a;let b=new Date(a).getTime();return Number.isFinite(b)?b:null}function g(a){return f(a?.expiresAt??a?.tokenExpiresAt)}function h(a,b,c=Date.now()){if(!b||"codex"===a&&b.providerSpecificData?.codexRefreshBlockedAt)return!1;let e=g(b);return!!(null!==e&&e-c<(0,d.Og)(a)||"codex"===a&&b.refreshToken&&function(a,b=Date.now()){let c=f(a?.lastRefreshAt??a?.lastRefresh??a?.providerSpecificData?.lastRefreshAt);return!c||b-c>=6912e5}(b,c))}async function i(a,b,c){let d,f=(d=b?.connectionId||b?.id||b?.email||b?.name||b?.refreshToken?.slice?.(-16)||"default",`${a}:${d}`),g=e.get(f);if(g)return g;let h=Promise.resolve().then(c).finally(()=>{e.delete(f)});return e.set(f,h),h}async function j(a,b,c){return b?i(a,b,async()=>{if("codex"===a&&b.providerSpecificData?.codexRefreshBlockedAt)throw(0,d.R_)({error:"unrecoverable_refresh_error",code:b.providerSpecificData.codexRefreshErrorCode||"invalid_refresh_token"});let e=await (0,d.$B)(a,b,c);if((0,d.jT)(e))throw(0,d.R_)(e);return function(a,b,c,e=Date.now()){var f,g;if(!c)return null;if((0,d.jT)(c))return c;let h={},i=new Date(e).toISOString();c.accessToken&&(h.accessToken=c.accessToken),c.apiKey&&(h.apiKey=c.apiKey),c.token&&(h.token=c.token);let j=c.refreshToken??b?.refreshToken;j&&(h.refreshToken=j);let k=c.idToken??b?.idToken;return k&&(h.idToken=k),c.expiresIn?(h.expiresIn=c.expiresIn,h.expiresAt=function(a,b=Date.now()){return a?new Date(b+1e3*a).toISOString():null}(c.expiresIn,e)):c.expiresAt&&(h.expiresAt=c.expiresAt),c.projectId&&(h.projectId=c.projectId),c.providerSpecificData&&(f=b?.providerSpecificData,h.providerSpecificData=(g=c.providerSpecificData)&&"object"==typeof g?{...f||{},...g}:f),c.copilotToken&&(h.copilotToken=c.copilotToken),c.copilotTokenExpiresAt&&(h.copilotTokenExpiresAt=c.copilotTokenExpiresAt),("codex"===a||h.accessToken||h.apiKey||h.token||h.refreshToken||h.copilotToken)&&(h.lastRefreshAt=c.lastRefreshAt||i),h}(a,b,e)}):null}}};
|