zevairouter 1.0.37 → 1.0.39
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 +16 -0
- package/cli/app/.next-cli-build/BUILD_ID +1 -1
- package/cli/app/.next-cli-build/app-path-routes-manifest.json +5 -5
- package/cli/app/.next-cli-build/build-manifest.json +2 -2
- 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/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.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/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/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/_global-error.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.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/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- 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/status/route.js.nft.json +1 -1
- 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.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.nft.json +1 -1
- 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.nft.json +1 -1
- 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.nft.json +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.nft.json +1 -1
- 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.nft.json +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.nft.json +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/openclaw-settings/route.js.nft.json +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/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]/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/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 +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/autoclaw/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/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 +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/iflow/cookie/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/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/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.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +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/kilo/free-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.nft.json +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.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/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.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/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.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.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/providers/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/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.nft.json +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/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.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 +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 +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/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +1 -1
- 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 +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
- 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 +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
- 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 +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
- 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 +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
- 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 +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
- 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/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- 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/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
- 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 +1 -1
- 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/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
- 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/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
- 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 +4 -4
- package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
- 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-paths-manifest.json +5 -5
- package/cli/app/.next-cli-build/server/chunks/2409.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/2777.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/3104.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/3110.js +2 -2
- package/cli/app/.next-cli-build/server/chunks/318.js +7 -14
- package/cli/app/.next-cli-build/server/chunks/412.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4161.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4177.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4404.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/5024.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/5681.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/6896.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/7153.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/8255.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/8335.js +10 -0
- package/cli/app/.next-cli-build/server/chunks/8590.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/891.js +1 -1
- 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/static/chunks/1321-53a57ac6c933faea.js +1 -0
- package/cli/app/.next-cli-build/static/chunks/5497-2a485830a005737d.js +7 -0
- package/cli/app/package.json +3 -3
- package/cli/app/public/providers/clinepass.png +0 -0
- package/cli/app/public/providers/grok-cli.png +0 -0
- package/cli/app/public/providers/kimchi.png +0 -0
- package/cli/app/public/providers/kimchi.svg +4 -0
- package/cli/app/public/providers/perplexity-agent.png +0 -0
- package/cli/package.json +1 -1
- package/open-sse/config/appConstants.js +2 -0
- package/open-sse/config/providerModels.js +49 -0
- package/open-sse/config/providers.js +55 -0
- package/open-sse/executors/default.js +2 -1
- package/open-sse/executors/grok-cli.js +397 -0
- package/open-sse/executors/index.js +7 -0
- package/open-sse/executors/kimchi.js +123 -0
- package/open-sse/services/kimchiModels.js +176 -0
- package/open-sse/services/tokenRefresh.js +2 -0
- package/open-sse/services/usage.js +174 -0
- package/open-sse/utils/sessionManager.js +149 -0
- package/package.json +3 -3
- package/public/providers/clinepass.png +0 -0
- package/public/providers/grok-cli.png +0 -0
- package/public/providers/kimchi.png +0 -0
- package/public/providers/kimchi.svg +4 -0
- package/public/providers/perplexity-agent.png +0 -0
- package/src/app/api/oauth/[provider]/[action]/route.js +4 -4
- package/src/app/api/providers/[id]/models/route.js +20 -0
- package/src/app/api/providers/[id]/test/testUtils.js +33 -3
- package/src/app/api/v1/models/route.js +10 -1
- package/src/lib/network/connectionProxy.js +27 -0
- package/src/lib/oauth/constants/oauth.js +33 -0
- package/src/lib/oauth/providers.js +243 -0
- package/src/shared/components/NoAuthProxyCard.js +56 -8
- package/src/shared/components/OAuthModal.js +24 -7
- package/src/shared/constants/providers.js +82 -0
- package/src/sse/services/auth.js +11 -4
- package/cli/app/.next-cli-build/server/chunks/3188.js +0 -10
- package/cli/app/.next-cli-build/static/chunks/1321-1c8d1bf3bb5f6953.js +0 -1
- package/cli/app/.next-cli-build/static/chunks/5497-f496fb3861cb944d.js +0 -7
- /package/cli/app/.next-cli-build/static/{Jh26f1tVQgrKUbeB6pi5A → 9lvqG1bZ9y7Wzit-RVeNQ}/_buildManifest.js +0 -0
- /package/cli/app/.next-cli-build/static/{Jh26f1tVQgrKUbeB6pi5A → 9lvqG1bZ9y7Wzit-RVeNQ}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { DefaultExecutor } from "./default.js";
|
|
2
|
+
import { getCachedKimchiModelMetadata } from "../services/kimchiModels.js";
|
|
3
|
+
|
|
4
|
+
const TOP_LEVEL_OPENAI_GATEWAY_DROPS = [
|
|
5
|
+
"anthropic_version",
|
|
6
|
+
"anthropic_beta",
|
|
7
|
+
"client_metadata",
|
|
8
|
+
"mcp_servers",
|
|
9
|
+
"stop_sequences",
|
|
10
|
+
"thinking",
|
|
11
|
+
"top_k",
|
|
12
|
+
];
|
|
13
|
+
|
|
14
|
+
function systemToText(system) {
|
|
15
|
+
if (typeof system === "string") return system;
|
|
16
|
+
if (Array.isArray(system)) {
|
|
17
|
+
return system
|
|
18
|
+
.map((part) => {
|
|
19
|
+
if (typeof part === "string") return part;
|
|
20
|
+
if (typeof part?.text === "string") return part.text;
|
|
21
|
+
return "";
|
|
22
|
+
})
|
|
23
|
+
.filter(Boolean)
|
|
24
|
+
.join("\n");
|
|
25
|
+
}
|
|
26
|
+
return "";
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function mergeTopLevelSystem(body) {
|
|
30
|
+
if (!body?.system || !Array.isArray(body.messages)) return;
|
|
31
|
+
const text = systemToText(body.system).trim();
|
|
32
|
+
if (!text) return;
|
|
33
|
+
|
|
34
|
+
const existing = body.messages.find((msg) => msg?.role === "system");
|
|
35
|
+
if (!existing) {
|
|
36
|
+
body.messages.unshift({ role: "system", content: text });
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (typeof existing.content === "string") {
|
|
41
|
+
existing.content = `${text}\n\n${existing.content}`;
|
|
42
|
+
} else if (Array.isArray(existing.content)) {
|
|
43
|
+
existing.content.unshift({ type: "text", text });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function stripMessageArtifacts(body) {
|
|
48
|
+
if (!Array.isArray(body?.messages)) return;
|
|
49
|
+
for (const msg of body.messages) {
|
|
50
|
+
if (!msg || typeof msg !== "object") continue;
|
|
51
|
+
delete msg.cache_control;
|
|
52
|
+
if (!Array.isArray(msg.content)) continue;
|
|
53
|
+
msg.content = msg.content.map((part) => {
|
|
54
|
+
if (!part || typeof part !== "object") return part;
|
|
55
|
+
const { cache_control, signature, ...clean } = part;
|
|
56
|
+
return clean;
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function stripToolArtifacts(body) {
|
|
62
|
+
if (!Array.isArray(body?.tools)) return;
|
|
63
|
+
body.tools = body.tools.map((tool) => {
|
|
64
|
+
if (!tool || typeof tool !== "object") return tool;
|
|
65
|
+
const { cache_control, ...clean } = tool;
|
|
66
|
+
return clean;
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Strip `reasoning_content` echoed by clients on assistant messages — but
|
|
71
|
+
// only when it's a real thinking block. `DefaultExecutor.transformRequest`
|
|
72
|
+
// runs `injectReasoningContent` first and may inject a 1-char placeholder
|
|
73
|
+
// (" ") for upstream validation; the placeholder is small (no token cost
|
|
74
|
+
// worth stripping) and stripping it would re-trigger upstream to complain
|
|
75
|
+
// about missing reasoning on the next turn. Threshold matches the
|
|
76
|
+
// placeholder length with a safety margin.
|
|
77
|
+
const REASONING_PLACEHOLDER_MAX_LEN = 8;
|
|
78
|
+
|
|
79
|
+
export function stripReasoningContent(body) {
|
|
80
|
+
if (!Array.isArray(body?.messages)) return;
|
|
81
|
+
for (const msg of body.messages) {
|
|
82
|
+
if (msg && msg.role === "assistant" && typeof msg.reasoning_content === "string"
|
|
83
|
+
&& msg.reasoning_content.length > REASONING_PLACEHOLDER_MAX_LEN) {
|
|
84
|
+
delete msg.reasoning_content;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function isAnthropicBackedKimchiModel(model) {
|
|
90
|
+
const meta = getCachedKimchiModelMetadata(model);
|
|
91
|
+
if (meta?.provider === "anthropic" || meta?.upstreamProvider === "anthropic") return true;
|
|
92
|
+
return /(^|[-_/])(?:claude|anthropic)(?:[-_/]|$)/i.test(String(model || ""));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export class KimchiExecutor extends DefaultExecutor {
|
|
96
|
+
constructor() {
|
|
97
|
+
super("kimchi");
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
transformRequest(model, body, stream, credentials) {
|
|
101
|
+
const transformed = super.transformRequest(model, body, stream, credentials);
|
|
102
|
+
if (!transformed || typeof transformed !== "object") return transformed;
|
|
103
|
+
|
|
104
|
+
mergeTopLevelSystem(transformed);
|
|
105
|
+
for (const key of TOP_LEVEL_OPENAI_GATEWAY_DROPS) {
|
|
106
|
+
if (transformed[key] !== undefined) delete transformed[key];
|
|
107
|
+
}
|
|
108
|
+
delete transformed.system;
|
|
109
|
+
|
|
110
|
+
if (isAnthropicBackedKimchiModel(model)) {
|
|
111
|
+
delete transformed.reasoning_effort;
|
|
112
|
+
delete transformed.reasoning;
|
|
113
|
+
delete transformed.thinking;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
stripMessageArtifacts(transformed);
|
|
117
|
+
stripToolArtifacts(transformed);
|
|
118
|
+
stripReasoningContent(transformed);
|
|
119
|
+
return transformed;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export default KimchiExecutor;
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { createHash } from "crypto";
|
|
2
|
+
|
|
3
|
+
import { proxyAwareFetch } from "../utils/proxyFetch.js";
|
|
4
|
+
|
|
5
|
+
export const KIMCHI_API = "https://llm.kimchi.dev";
|
|
6
|
+
export const KIMCHI_USER_AGENT = "kimchi/0.1.40";
|
|
7
|
+
|
|
8
|
+
const FETCH_TIMEOUT_MS = 20_000;
|
|
9
|
+
const CACHE_TTL_MS = 5 * 60 * 1000;
|
|
10
|
+
const RETRYABLE_STATUSES = new Set([429, 500, 502, 503, 504]);
|
|
11
|
+
|
|
12
|
+
/** @type {Map<string, { expiresAt: number, models: object[], rawModels: object[] }>} */
|
|
13
|
+
const catalogCache = new Map();
|
|
14
|
+
/** @type {Map<string, object>} */
|
|
15
|
+
const metadataByModelId = new Map();
|
|
16
|
+
|
|
17
|
+
function normalizeKimchiEndpoint(endpoint) {
|
|
18
|
+
const raw = typeof endpoint === "string" ? endpoint.trim() : "";
|
|
19
|
+
return (raw || KIMCHI_API).replace(/\/+$/, "");
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function buildKimchiModelsUrl(endpoint) {
|
|
23
|
+
return `${normalizeKimchiEndpoint(endpoint)}/v1/models/metadata?include_in_cli=true`;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function readToken(credentials) {
|
|
27
|
+
return (
|
|
28
|
+
credentials?.accessToken
|
|
29
|
+
|| credentials?.apiKey
|
|
30
|
+
|| credentials?.providerSpecificData?.apiKey
|
|
31
|
+
|| null
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function cacheKey(credentials, endpoint) {
|
|
36
|
+
const psd = credentials?.providerSpecificData || {};
|
|
37
|
+
const seed = psd.userId || psd.username || credentials?.refreshToken || readToken(credentials) || "anonymous";
|
|
38
|
+
return createHash("sha256")
|
|
39
|
+
.update(`kimchi:${normalizeKimchiEndpoint(endpoint)}:${seed}`)
|
|
40
|
+
.digest("hex");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function toModelKind(inputModalities) {
|
|
44
|
+
return Array.isArray(inputModalities) && inputModalities.includes("image")
|
|
45
|
+
? "imageToText"
|
|
46
|
+
: "llm";
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function normalizeKimchiModel(item) {
|
|
50
|
+
if (!item || typeof item !== "object") return null;
|
|
51
|
+
const id = item.slug || item.id || item.model || item.name;
|
|
52
|
+
if (typeof id !== "string" || id.trim() === "") return null;
|
|
53
|
+
|
|
54
|
+
const inputModalities = Array.isArray(item.input_modalities)
|
|
55
|
+
? item.input_modalities.filter((value) => value === "text" || value === "image")
|
|
56
|
+
: [];
|
|
57
|
+
const limits = item.limits && typeof item.limits === "object" ? item.limits : {};
|
|
58
|
+
const contextLength = Number(limits.context_window || item.contextLength || item.context_length) || undefined;
|
|
59
|
+
const maxOutputTokens = Number(limits.max_output_tokens || item.maxOutputTokens || item.max_output_tokens) || undefined;
|
|
60
|
+
const upstreamProvider = typeof item.provider === "string" ? item.provider : "";
|
|
61
|
+
const reasoning = item.reasoning === true;
|
|
62
|
+
const kind = toModelKind(inputModalities);
|
|
63
|
+
|
|
64
|
+
const model = {
|
|
65
|
+
...item,
|
|
66
|
+
id: id.trim(),
|
|
67
|
+
name: String(item.display_name || item.displayName || item.name || id).trim(),
|
|
68
|
+
provider: upstreamProvider,
|
|
69
|
+
upstreamProvider,
|
|
70
|
+
reasoning,
|
|
71
|
+
inputModalities,
|
|
72
|
+
kind,
|
|
73
|
+
type: kind,
|
|
74
|
+
capabilities: {
|
|
75
|
+
vision: inputModalities.includes("image"),
|
|
76
|
+
reasoning,
|
|
77
|
+
...(contextLength ? { contextWindow: contextLength } : {}),
|
|
78
|
+
...(maxOutputTokens ? { maxOutput: maxOutputTokens } : {}),
|
|
79
|
+
...(upstreamProvider ? { upstreamProvider } : {}),
|
|
80
|
+
},
|
|
81
|
+
...(contextLength ? { contextLength } : {}),
|
|
82
|
+
...(maxOutputTokens ? { maxOutputTokens } : {}),
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
if (upstreamProvider === "anthropic") {
|
|
86
|
+
model.compat = { supportsReasoningEffort: false, cacheControlFormat: "anthropic" };
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return model;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function rememberModels(models) {
|
|
93
|
+
for (const model of models || []) {
|
|
94
|
+
if (!model?.id) continue;
|
|
95
|
+
metadataByModelId.set(model.id, model);
|
|
96
|
+
metadataByModelId.set(model.id.toLowerCase(), model);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function getCachedKimchiModelMetadata(modelId) {
|
|
101
|
+
if (typeof modelId !== "string" || modelId.trim() === "") return null;
|
|
102
|
+
const raw = modelId.includes("/") ? modelId.split("/").pop() : modelId;
|
|
103
|
+
return metadataByModelId.get(raw) || metadataByModelId.get(raw.toLowerCase()) || null;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
async function fetchKimchiCatalogRaw(token, endpoint, options = {}) {
|
|
107
|
+
const url = buildKimchiModelsUrl(endpoint);
|
|
108
|
+
const controller = new AbortController();
|
|
109
|
+
const timeout = setTimeout(() => controller.abort(new Error("Kimchi models fetch timeout")), FETCH_TIMEOUT_MS);
|
|
110
|
+
const signal = options.signal
|
|
111
|
+
? AbortSignal.any([options.signal, controller.signal])
|
|
112
|
+
: controller.signal;
|
|
113
|
+
|
|
114
|
+
try {
|
|
115
|
+
const response = await proxyAwareFetch(url, {
|
|
116
|
+
method: "GET",
|
|
117
|
+
headers: {
|
|
118
|
+
"Accept": "application/json",
|
|
119
|
+
"Authorization": `Bearer ${token}`,
|
|
120
|
+
"User-Agent": KIMCHI_USER_AGENT,
|
|
121
|
+
},
|
|
122
|
+
cache: "no-store",
|
|
123
|
+
signal,
|
|
124
|
+
}, options.proxyOptions || null);
|
|
125
|
+
|
|
126
|
+
if (!response.ok) {
|
|
127
|
+
const error = new Error(`Kimchi models ${response.status}: ${response.statusText}`);
|
|
128
|
+
error.status = response.status;
|
|
129
|
+
error.retryable = RETRYABLE_STATUSES.has(response.status);
|
|
130
|
+
throw error;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const data = await response.json();
|
|
134
|
+
return Array.isArray(data?.models) ? data.models : [];
|
|
135
|
+
} finally {
|
|
136
|
+
clearTimeout(timeout);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export async function resolveKimchiModels(credentials, options = {}) {
|
|
141
|
+
const token = readToken(credentials);
|
|
142
|
+
if (!token) return null;
|
|
143
|
+
|
|
144
|
+
const endpoint = credentials?.providerSpecificData?.kimchiEndpoint || options.endpoint || KIMCHI_API;
|
|
145
|
+
const key = cacheKey(credentials, endpoint);
|
|
146
|
+
const now = Date.now();
|
|
147
|
+
if (!options.forceRefresh) {
|
|
148
|
+
const cached = catalogCache.get(key);
|
|
149
|
+
if (cached && cached.expiresAt > now) return cached;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
let rawModels;
|
|
153
|
+
try {
|
|
154
|
+
rawModels = await fetchKimchiCatalogRaw(token, endpoint, options);
|
|
155
|
+
} catch (error) {
|
|
156
|
+
options.log?.warn?.("KIMCHI_MODELS", error.message);
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const models = rawModels.map(normalizeKimchiModel).filter(Boolean);
|
|
161
|
+
if (models.length === 0) return null;
|
|
162
|
+
|
|
163
|
+
rememberModels(models);
|
|
164
|
+
const entry = {
|
|
165
|
+
expiresAt: Date.now() + CACHE_TTL_MS,
|
|
166
|
+
models,
|
|
167
|
+
rawModels,
|
|
168
|
+
};
|
|
169
|
+
catalogCache.set(key, entry);
|
|
170
|
+
return entry;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
export function clearKimchiCatalog() {
|
|
174
|
+
catalogCache.clear();
|
|
175
|
+
metadataByModelId.clear();
|
|
176
|
+
}
|
|
@@ -705,6 +705,7 @@ async function _getAccessTokenInternal(provider, credentials, log) {
|
|
|
705
705
|
);
|
|
706
706
|
|
|
707
707
|
case "xai":
|
|
708
|
+
case "grok-cli":
|
|
708
709
|
return await refreshXaiToken(credentials.refreshToken, log);
|
|
709
710
|
|
|
710
711
|
case "vertex":
|
|
@@ -756,6 +757,7 @@ export async function refreshTokenByProvider(provider, credentials, log) {
|
|
|
756
757
|
log
|
|
757
758
|
);
|
|
758
759
|
case "xai":
|
|
760
|
+
case "grok-cli":
|
|
759
761
|
return refreshXaiToken(credentials.refreshToken, log);
|
|
760
762
|
case "vertex":
|
|
761
763
|
case "vertex-partner": {
|
|
@@ -129,6 +129,8 @@ export async function getUsageForProvider(connection, proxyOptions = null) {
|
|
|
129
129
|
case "minimax":
|
|
130
130
|
case "minimax-cn":
|
|
131
131
|
return await getMiniMaxUsage(apiKey, provider, proxyOptions);
|
|
132
|
+
case "grok-cli":
|
|
133
|
+
return await getGrokCliUsage(accessToken, providerSpecificData, proxyOptions);
|
|
132
134
|
default:
|
|
133
135
|
return { message: `Usage API not implemented for ${provider}` };
|
|
134
136
|
}
|
|
@@ -1802,3 +1804,175 @@ async function getAutoclawUsage(accessToken, proxyOptions = null, connection = n
|
|
|
1802
1804
|
return { message: `AutoClaw connected. Unable to fetch balance: ${error.message}` };
|
|
1803
1805
|
}
|
|
1804
1806
|
}
|
|
1807
|
+
|
|
1808
|
+
// ─── Grok CLI / Grok Build usage (cli-chat-proxy.grok.com) ─────────────────
|
|
1809
|
+
|
|
1810
|
+
function unwrapGrokCliVal(value, fallback = 0) {
|
|
1811
|
+
if (value == null) return fallback;
|
|
1812
|
+
if (typeof value === "object" && !Array.isArray(value) && "val" in value) {
|
|
1813
|
+
return toFiniteNumber(value.val, fallback);
|
|
1814
|
+
}
|
|
1815
|
+
return toFiniteNumber(value, fallback);
|
|
1816
|
+
}
|
|
1817
|
+
|
|
1818
|
+
function buildGrokCliUsageHeaders(accessToken, providerSpecificData = {}) {
|
|
1819
|
+
const psd = providerSpecificData || {};
|
|
1820
|
+
const headers = {
|
|
1821
|
+
Authorization: `Bearer ${accessToken}`,
|
|
1822
|
+
Accept: "application/json",
|
|
1823
|
+
"User-Agent": "grok-pager/0.2.93 grok-shell/0.2.93 (linux; x86_64)",
|
|
1824
|
+
"x-xai-token-auth": "xai-grok-cli",
|
|
1825
|
+
"x-grok-client-identifier": "grok-pager",
|
|
1826
|
+
"x-grok-client-version": "0.2.93",
|
|
1827
|
+
};
|
|
1828
|
+
const email = psd.email;
|
|
1829
|
+
const userId = psd.userId || psd.principalId;
|
|
1830
|
+
if (email) headers["x-email"] = email;
|
|
1831
|
+
if (userId) headers["x-userid"] = userId;
|
|
1832
|
+
return headers;
|
|
1833
|
+
}
|
|
1834
|
+
|
|
1835
|
+
function resolveGrokCliPlan(user, config) {
|
|
1836
|
+
const tier = typeof user?.subscriptionTier === "string" ? user.subscriptionTier.trim() : "";
|
|
1837
|
+
if (tier) {
|
|
1838
|
+
return tier
|
|
1839
|
+
.replace(/[_-]+/g, " ")
|
|
1840
|
+
.replace(/\b\w/g, (c) => c.toUpperCase());
|
|
1841
|
+
}
|
|
1842
|
+
if (user?.hasGrokCodeAccess === true) return "Grok Code";
|
|
1843
|
+
if (config?.isUnifiedBillingUser === true) return "Grok Build";
|
|
1844
|
+
return "Grok Build";
|
|
1845
|
+
}
|
|
1846
|
+
|
|
1847
|
+
function makeGrokCliQuota({ used, total, resetAt, unlimited = false }) {
|
|
1848
|
+
const safeTotal = Math.max(0, toFiniteNumber(total, 0));
|
|
1849
|
+
const safeUsed = Math.max(0, toFiniteNumber(used, 0));
|
|
1850
|
+
if (unlimited || safeTotal === 0) {
|
|
1851
|
+
return {
|
|
1852
|
+
used: safeUsed,
|
|
1853
|
+
total: 0,
|
|
1854
|
+
remainingPercentage: unlimited ? 100 : 0,
|
|
1855
|
+
resetAt: resetAt || null,
|
|
1856
|
+
unlimited: true,
|
|
1857
|
+
};
|
|
1858
|
+
}
|
|
1859
|
+
const remaining = Math.max(0, safeTotal - safeUsed);
|
|
1860
|
+
const remainingPercentage = (remaining / safeTotal) * 100;
|
|
1861
|
+
return {
|
|
1862
|
+
used: safeUsed,
|
|
1863
|
+
total: safeTotal,
|
|
1864
|
+
remainingPercentage,
|
|
1865
|
+
resetAt: resetAt || null,
|
|
1866
|
+
unlimited: false,
|
|
1867
|
+
};
|
|
1868
|
+
}
|
|
1869
|
+
|
|
1870
|
+
export function parseGrokCliBilling(billing, user = null) {
|
|
1871
|
+
const root = billing && typeof billing === "object" ? billing : {};
|
|
1872
|
+
const config =
|
|
1873
|
+
root.config && typeof root.config === "object" && !Array.isArray(root.config)
|
|
1874
|
+
? root.config
|
|
1875
|
+
: root;
|
|
1876
|
+
|
|
1877
|
+
const periodEnd =
|
|
1878
|
+
parseResetTime(config.billingPeriodEnd) ||
|
|
1879
|
+
parseResetTime(config.currentPeriod?.end) ||
|
|
1880
|
+
parseResetTime(root.billingPeriodEnd) ||
|
|
1881
|
+
null;
|
|
1882
|
+
|
|
1883
|
+
const quotas = {};
|
|
1884
|
+
|
|
1885
|
+
const onDemandCap = unwrapGrokCliVal(config.onDemandCap ?? root.onDemandCap, NaN);
|
|
1886
|
+
const onDemandUsed = unwrapGrokCliVal(config.onDemandUsed ?? root.onDemandUsed, NaN);
|
|
1887
|
+
if (Number.isFinite(onDemandCap) && onDemandCap > 0) {
|
|
1888
|
+
const used = Number.isFinite(onDemandUsed) ? Math.max(0, onDemandUsed) : 0;
|
|
1889
|
+
quotas["On-demand"] = makeGrokCliQuota({
|
|
1890
|
+
used,
|
|
1891
|
+
total: onDemandCap,
|
|
1892
|
+
resetAt: periodEnd,
|
|
1893
|
+
});
|
|
1894
|
+
} else if (Number.isFinite(onDemandCap) && onDemandCap === 0 && Number.isFinite(onDemandUsed)) {
|
|
1895
|
+
quotas["On-demand"] = {
|
|
1896
|
+
used: 1,
|
|
1897
|
+
total: 1,
|
|
1898
|
+
remainingPercentage: 0,
|
|
1899
|
+
resetAt: periodEnd,
|
|
1900
|
+
unlimited: false,
|
|
1901
|
+
};
|
|
1902
|
+
}
|
|
1903
|
+
|
|
1904
|
+
const prepaid = unwrapGrokCliVal(config.prepaidBalance ?? root.prepaidBalance, NaN);
|
|
1905
|
+
if (Number.isFinite(prepaid) && prepaid > 0) {
|
|
1906
|
+
quotas["Prepaid"] = {
|
|
1907
|
+
used: 0,
|
|
1908
|
+
total: prepaid,
|
|
1909
|
+
remainingPercentage: 100,
|
|
1910
|
+
resetAt: null,
|
|
1911
|
+
unlimited: false,
|
|
1912
|
+
};
|
|
1913
|
+
}
|
|
1914
|
+
|
|
1915
|
+
return {
|
|
1916
|
+
plan: resolveGrokCliPlan(user, config),
|
|
1917
|
+
quotas,
|
|
1918
|
+
periodEnd,
|
|
1919
|
+
};
|
|
1920
|
+
}
|
|
1921
|
+
|
|
1922
|
+
/**
|
|
1923
|
+
* Grok CLI / Grok Build usage from cli-chat-proxy billing + user endpoints.
|
|
1924
|
+
*/
|
|
1925
|
+
export async function getGrokCliUsage(accessToken, providerSpecificData = null, proxyOptions = null) {
|
|
1926
|
+
if (!accessToken) {
|
|
1927
|
+
return { message: "Grok CLI access token not available." };
|
|
1928
|
+
}
|
|
1929
|
+
|
|
1930
|
+
const headers = buildGrokCliUsageHeaders(accessToken, providerSpecificData);
|
|
1931
|
+
const BILLING_URL = "https://cli-chat-proxy.grok.com/v1/billing?format=credits";
|
|
1932
|
+
const USER_URL = "https://cli-chat-proxy.grok.com/v1/user?include=subscription";
|
|
1933
|
+
|
|
1934
|
+
try {
|
|
1935
|
+
const [billingRes, userRes] = await Promise.all([
|
|
1936
|
+
proxyAwareFetch(BILLING_URL, { method: "GET", headers }, proxyOptions),
|
|
1937
|
+
proxyAwareFetch(USER_URL, { method: "GET", headers }, proxyOptions).catch(() => null),
|
|
1938
|
+
]);
|
|
1939
|
+
|
|
1940
|
+
if (billingRes.status === 401 || billingRes.status === 403) {
|
|
1941
|
+
return { message: "Grok CLI authentication expired. Please re-authorize." };
|
|
1942
|
+
}
|
|
1943
|
+
|
|
1944
|
+
if (!billingRes.ok) {
|
|
1945
|
+
const errText = await billingRes.text().catch(() => "");
|
|
1946
|
+
const trimmed = errText ? `: ${errText.slice(0, 200)}` : "";
|
|
1947
|
+
return { message: `Grok CLI billing API error (${billingRes.status})${trimmed}` };
|
|
1948
|
+
}
|
|
1949
|
+
|
|
1950
|
+
const billing = await billingRes.json().catch(() => null);
|
|
1951
|
+
if (!billing || typeof billing !== "object") {
|
|
1952
|
+
return { message: "Grok CLI billing response was not JSON." };
|
|
1953
|
+
}
|
|
1954
|
+
|
|
1955
|
+
let user = null;
|
|
1956
|
+
if (userRes?.ok) {
|
|
1957
|
+
user = await userRes.json().catch(() => null);
|
|
1958
|
+
}
|
|
1959
|
+
|
|
1960
|
+
const parsed = parseGrokCliBilling(billing, user);
|
|
1961
|
+
|
|
1962
|
+
if (!parsed.quotas || Object.keys(parsed.quotas).length === 0) {
|
|
1963
|
+
return {
|
|
1964
|
+
plan: parsed.plan,
|
|
1965
|
+
message:
|
|
1966
|
+
"Grok Build connected, but no credit allotment was returned. Free promo may be exhausted — upgrade at https://grok.com/supergrok or add credits at https://grok.com/?_s=usage.",
|
|
1967
|
+
quotas: {},
|
|
1968
|
+
};
|
|
1969
|
+
}
|
|
1970
|
+
|
|
1971
|
+
return {
|
|
1972
|
+
plan: parsed.plan,
|
|
1973
|
+
quotas: parsed.quotas,
|
|
1974
|
+
};
|
|
1975
|
+
} catch (error) {
|
|
1976
|
+
return { message: `Grok CLI usage error: ${error.message}` };
|
|
1977
|
+
}
|
|
1978
|
+
}
|
|
@@ -79,4 +79,153 @@ export function generateBinaryStyleId() {
|
|
|
79
79
|
*/
|
|
80
80
|
export function clearSessionStore() {
|
|
81
81
|
runtimeSessionStore.clear();
|
|
82
|
+
assistantSessionStore.clear();
|
|
82
83
|
}
|
|
84
|
+
|
|
85
|
+
// Conversation-stable session store: Key = hash(scope+assistant text), Value = { sessionId, lastUsed }
|
|
86
|
+
const assistantSessionStore = new Map();
|
|
87
|
+
const ASSISTANT_MIN_LEN = 50;
|
|
88
|
+
const ASSISTANT_CAP_LEN = 50;
|
|
89
|
+
const MAX_ASSISTANT_SESSIONS = 5000;
|
|
90
|
+
|
|
91
|
+
// Client headers/body fields that carry an upstream session id (priority order)
|
|
92
|
+
const SESSION_HEADER_KEYS = ["x-session-id", "session-id", "session_id", "x-amp-thread-id", "x-client-request-id"];
|
|
93
|
+
const CLAUDE_CODE_SESSION_RE = /_session_([a-f0-9-]+)$/;
|
|
94
|
+
|
|
95
|
+
function sha16(text) {
|
|
96
|
+
return crypto.createHash("sha256").update(text).digest("hex").slice(0, 16);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Normalize a session id candidate (trim, length cap)
|
|
100
|
+
function normalizeSessionId(value) {
|
|
101
|
+
if (typeof value !== "string") return null;
|
|
102
|
+
const v = value.trim();
|
|
103
|
+
if (!v || v.length > 256) return null;
|
|
104
|
+
return v;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Extract Claude Code session id from metadata.user_id (_session_{uuid} | JSON {session_id})
|
|
108
|
+
function extractClaudeCodeSession(userId) {
|
|
109
|
+
if (typeof userId !== "string" || !userId) return null;
|
|
110
|
+
const m = userId.match(CLAUDE_CODE_SESSION_RE);
|
|
111
|
+
if (m) return m[1];
|
|
112
|
+
if (userId[0] === "{") {
|
|
113
|
+
try { return normalizeSessionId(JSON.parse(userId)?.session_id); } catch { /* noop */ }
|
|
114
|
+
}
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Lowercase-key lookup for raw client headers
|
|
119
|
+
function headerValue(headers, key) {
|
|
120
|
+
if (!headers || typeof headers !== "object") return null;
|
|
121
|
+
return normalizeSessionId(headers[key] ?? headers[key.toLowerCase()]);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Read client-provided session id from headers/body (no generation)
|
|
125
|
+
// Antigravity envelope carries session in request.sessionId; requestId embeds conversation uuid
|
|
126
|
+
const ANTIGRAVITY_CONV_RE = /^[a-z]+\/([0-9a-f-]{36})\//i;
|
|
127
|
+
function extractAntigravitySession(body) {
|
|
128
|
+
const sid = body?.request?.sessionId;
|
|
129
|
+
if (sid != null && sid !== "") return normalizeSessionId(String(sid));
|
|
130
|
+
const m = typeof body?.requestId === "string" ? body.requestId.match(ANTIGRAVITY_CONV_RE) : null;
|
|
131
|
+
return m ? normalizeSessionId(m[1]) : null;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function extractClientSessionId(headers, body) {
|
|
135
|
+
const claude = extractClaudeCodeSession(body?.metadata?.user_id);
|
|
136
|
+
if (claude) return `claude:${claude}`;
|
|
137
|
+
const antigravity = extractAntigravitySession(body);
|
|
138
|
+
if (antigravity) return `antigravity:${antigravity}`;
|
|
139
|
+
for (const key of SESSION_HEADER_KEYS) {
|
|
140
|
+
const v = headerValue(headers, key);
|
|
141
|
+
if (v) return v;
|
|
142
|
+
}
|
|
143
|
+
const fromBody =
|
|
144
|
+
normalizeSessionId(body?.prompt_cache_key) ||
|
|
145
|
+
normalizeSessionId(body?.session_id) ||
|
|
146
|
+
normalizeSessionId(body?.conversation_id) ||
|
|
147
|
+
normalizeSessionId(body?.metadata?.user_id);
|
|
148
|
+
return fromBody || null;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Accumulate assistant text from OpenAI/Responses-style input/messages (cap-limited)
|
|
152
|
+
function accumulateAssistantText(body) {
|
|
153
|
+
const items = Array.isArray(body?.input) ? body.input
|
|
154
|
+
: Array.isArray(body?.messages) ? body.messages : null;
|
|
155
|
+
if (!items) return "";
|
|
156
|
+
let text = "";
|
|
157
|
+
for (const item of items) {
|
|
158
|
+
if (item?.role !== "assistant") continue;
|
|
159
|
+
if (typeof item.content === "string") text += item.content;
|
|
160
|
+
else if (Array.isArray(item.content)) {
|
|
161
|
+
for (const c of item.content) text += c?.text || c?.output || "";
|
|
162
|
+
}
|
|
163
|
+
if (text.length >= ASSISTANT_CAP_LEN) break;
|
|
164
|
+
}
|
|
165
|
+
return text;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Stable session id keyed on accumulated assistant text (avoids collision on identical first user prompt)
|
|
169
|
+
function assistantTextSessionId(scope, body) {
|
|
170
|
+
const text = accumulateAssistantText(body);
|
|
171
|
+
if (text.length < ASSISTANT_MIN_LEN) return null;
|
|
172
|
+
const hash = sha16(`${scope}:${text.slice(0, ASSISTANT_CAP_LEN)}`);
|
|
173
|
+
const existing = assistantSessionStore.get(hash);
|
|
174
|
+
if (existing) {
|
|
175
|
+
existing.lastUsed = Date.now();
|
|
176
|
+
return existing.sessionId;
|
|
177
|
+
}
|
|
178
|
+
if (assistantSessionStore.size >= MAX_ASSISTANT_SESSIONS) {
|
|
179
|
+
assistantSessionStore.delete(assistantSessionStore.keys().next().value);
|
|
180
|
+
}
|
|
181
|
+
const sessionId = generateBinaryStyleId();
|
|
182
|
+
assistantSessionStore.set(hash, { sessionId, lastUsed: Date.now() });
|
|
183
|
+
return sessionId;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Resolve a conversation-stable session id (generalizes Codex resolveCacheSessionId).
|
|
188
|
+
* Priority: client session → accumulated-assistant-text hash → workspaceId → per-connection.
|
|
189
|
+
*
|
|
190
|
+
* @param {object} opts
|
|
191
|
+
* @param {object} [opts.headers] - Raw client request headers (lowercase keys)
|
|
192
|
+
* @param {object} [opts.body] - Parsed request body
|
|
193
|
+
* @param {string} [opts.connectionId] - Connection identifier (fallback scope)
|
|
194
|
+
* @param {string} [opts.workspaceId] - Provider workspace id (account-wide fallback)
|
|
195
|
+
* @param {string} [opts.scope] - Provider scope to isolate cache keys across providers
|
|
196
|
+
* @returns {string} A stable session id
|
|
197
|
+
*/
|
|
198
|
+
export function resolveSessionId({ headers, body, connectionId, workspaceId, scope = "" } = {}) {
|
|
199
|
+
const client = extractClientSessionId(headers, body);
|
|
200
|
+
if (client) return client;
|
|
201
|
+
const fromAssistant = assistantTextSessionId(`${scope}:${connectionId || ""}`, body);
|
|
202
|
+
if (fromAssistant) return fromAssistant;
|
|
203
|
+
const ws = normalizeSessionId(workspaceId);
|
|
204
|
+
if (ws) return ws;
|
|
205
|
+
return deriveSessionId(connectionId);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Capture session id from request body + credentials (envelope still intact here)
|
|
209
|
+
export function captureSessionId(body, credentials, connectionId, scope = "") {
|
|
210
|
+
return resolveSessionId({ headers: credentials?.rawHeaders, body, connectionId, scope });
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Convert any session id to Antigravity numeric format "-<int64>" (matches real AG / CLIProxyAPI).
|
|
214
|
+
// Already-numeric ids (native AG sessionId) pass through unchanged.
|
|
215
|
+
export function toNumericSessionId(sessionId) {
|
|
216
|
+
const v = normalizeSessionId(sessionId);
|
|
217
|
+
if (!v) return null;
|
|
218
|
+
if (/^-?\d+$/.test(v)) return v;
|
|
219
|
+
const h = crypto.createHash("sha256").update(v).digest();
|
|
220
|
+
const n = h.readBigUInt64BE(0) & 0x7fffffffffffffffn;
|
|
221
|
+
return `-${n.toString()}`;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// Cleanup expired assistant-session entries
|
|
225
|
+
const assistantCleanup = setInterval(() => {
|
|
226
|
+
const now = Date.now();
|
|
227
|
+
for (const [key, entry] of assistantSessionStore) {
|
|
228
|
+
if (now - entry.lastUsed > MEMORY_CONFIG.sessionTtlMs) assistantSessionStore.delete(key);
|
|
229
|
+
}
|
|
230
|
+
}, MEMORY_CONFIG.sessionCleanupIntervalMs);
|
|
231
|
+
if (assistantCleanup.unref) assistantCleanup.unref();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zevairouter",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.39",
|
|
4
4
|
"description": "ZevaiRouter - AI Router with provider automation, multi-account workflows, and quota tracking",
|
|
5
5
|
"bin": {
|
|
6
6
|
"zevai": "./cli/cli.js"
|
|
@@ -70,8 +70,8 @@
|
|
|
70
70
|
"camoufox-js": "^0.11.0",
|
|
71
71
|
"playwright": "^1.54.2"
|
|
72
72
|
},
|
|
73
|
-
"comment_better_sqlite3": "kept in optionalDependencies so npm install doesn't fail on systems without build tools
|
|
74
|
-
"comment_camoufox_js": "optional stealth-Firefox engine for bulk-import; runtime auto-installs to user data dir if user picks Camoufox in the modal but the package is missing
|
|
73
|
+
"comment_better_sqlite3": "kept in optionalDependencies so npm install doesn't fail on systems without build tools — sql.js is used as fallback at runtime",
|
|
74
|
+
"comment_camoufox_js": "optional stealth-Firefox engine for bulk-import; runtime auto-installs to user data dir if user picks Camoufox in the modal but the package is missing — Chromium remains the default and works without this dep",
|
|
75
75
|
"devDependencies": {
|
|
76
76
|
"@tailwindcss/postcss": "^4.1.18",
|
|
77
77
|
"esbuild": "^0.28.1",
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="104" height="104" viewBox="0 0 104 104">
|
|
2
|
+
<circle cx="52" cy="52" r="52" fill="#FF521D"/>
|
|
3
|
+
<path d="M68.4459 24.9438C69.8639 24.1762 71.6471 23.7178 73.4821 24.2163C73.8278 24.2966 74.1339 24.3916 74.4362 24.5024L75.9186 25.0464L75.5104 26.5727C75.3469 27.1827 75.202 27.723 75.0387 28.3325L74.6442 29.8042L73.1354 29.5972C73.0242 29.5819 72.9246 29.5753 72.8082 29.5747C72.2474 29.5865 71.7542 29.8645 71.2662 30.6772C70.8883 31.307 70.5939 32.1486 70.3815 33.1079C74.871 36.0331 77.8444 41.0994 77.8444 46.8638C77.8443 49.5292 77.2072 52.0505 76.0758 54.2798C71.5108 64.3996 54.1783 84.8815 23.4655 79.0083C21.8797 78.7048 20.9918 77.4165 20.902 76.1245C20.8141 74.8561 21.479 73.487 22.8981 72.8813C31.0698 69.394 35.5884 65.7091 38.5983 61.2329C41.6553 56.6866 43.2606 51.1907 45.3287 43.7251C46.7942 36.1645 53.4462 30.4547 61.4362 30.4546L61.8834 30.4604C62.4398 30.4755 62.9894 30.519 63.5309 30.5884C63.9515 29.7288 64.4424 28.8863 65.0211 28.0659L65.1745 27.8423C65.9623 26.731 67.1108 25.6667 68.4459 24.9438Z" fill="#18181A"/>
|
|
4
|
+
</svg>
|
|
Binary file
|