zevairouter 1.0.42 → 1.0.44
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 +18 -7
- package/README.md +1 -1
- package/cli/LICENSE +1 -1
- package/cli/README.md +28 -28
- 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_client-reference-manifest.js +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 +3 -3
- 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 +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_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_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/cli-tools/all-statuses/route.js +5 -5
- package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js +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/copilot-settings/route.js +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-tools/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -2
- 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/kilo-settings/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +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/headroom/restart/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/start/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/keys/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/models/route.js +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/oauth/antigravity/bulk-import/[jobId]/cancel/route.js +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]/route.js +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/route.js +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/providers/[id]/models/route.js +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/client/route.js +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/validate/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/settings/proxy-test/route.js +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/stream/route.js +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/transcriptions/route.js +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/images/generations/route.js +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/shutdown/route.js +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/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/pxpipe.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.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_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/token-saver.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.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_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_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/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/1939.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/2722.js +16 -16
- 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 +1 -1
- package/cli/app/.next-cli-build/server/chunks/3159.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/318.js +2 -2
- package/cli/app/.next-cli-build/server/chunks/4746.js +3 -3
- 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/7276.js +2 -2
- package/cli/app/.next-cli-build/server/chunks/8242.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/8255.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/8450.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/891.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/915.js +7 -7
- package/cli/app/.next-cli-build/server/chunks/9489.js +1 -1
- package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/middleware.js +2 -2
- 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-89d6a896f3dae03e.js → 1321-a179ec9bacf35359.js} +1 -1
- package/cli/app/.next-cli-build/static/chunks/6069-f8381e3d2db222bb.js +54 -0
- package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/page-c8d0727b97defe81.js +1 -0
- package/cli/app/package.json +1 -1
- package/cli/app/public/i18n/literals/ar.json +4 -4
- package/cli/app/public/i18n/literals/bn.json +4 -4
- package/cli/app/public/i18n/literals/cs.json +4 -4
- package/cli/app/public/i18n/literals/da.json +4 -4
- package/cli/app/public/i18n/literals/de.json +4 -4
- package/cli/app/public/i18n/literals/el.json +4 -4
- package/cli/app/public/i18n/literals/es.json +4 -4
- package/cli/app/public/i18n/literals/fi.json +4 -4
- package/cli/app/public/i18n/literals/fr.json +4 -4
- package/cli/app/public/i18n/literals/he.json +4 -4
- package/cli/app/public/i18n/literals/hi.json +4 -4
- package/cli/app/public/i18n/literals/hu.json +4 -4
- package/cli/app/public/i18n/literals/id.json +4 -4
- package/cli/app/public/i18n/literals/it.json +4 -4
- package/cli/app/public/i18n/literals/ja.json +4 -4
- package/cli/app/public/i18n/literals/ko.json +4 -4
- package/cli/app/public/i18n/literals/nl.json +4 -4
- package/cli/app/public/i18n/literals/no.json +4 -4
- package/cli/app/public/i18n/literals/pl.json +4 -4
- package/cli/app/public/i18n/literals/pt-BR.json +4 -4
- package/cli/app/public/i18n/literals/pt-PT.json +4 -4
- package/cli/app/public/i18n/literals/ro.json +4 -4
- package/cli/app/public/i18n/literals/ru.json +4 -4
- package/cli/app/public/i18n/literals/sv.json +4 -4
- package/cli/app/public/i18n/literals/th.json +4 -4
- package/cli/app/public/i18n/literals/tl.json +4 -4
- package/cli/app/public/i18n/literals/tr.json +4 -4
- package/cli/app/public/i18n/literals/uk.json +4 -4
- package/cli/app/public/i18n/literals/ur.json +4 -4
- package/cli/app/public/i18n/literals/vi.json +4 -4
- package/cli/app/public/i18n/literals/zh-CN.json +15 -15
- package/cli/app/public/i18n/literals/zh-TW.json +4 -4
- package/cli/app/src/mitm/server.js +2 -2
- package/cli/cli.js +9 -9
- package/cli/package.json +1 -1
- package/cli/src/cli/api/client.js +3 -3
- package/cli/src/cli/menus/cliTools.js +18 -15
- package/cli/src/cli/menus/settings.js +1 -1
- package/cli/src/cli/tray/autostart.js +6 -6
- package/cli/src/cli/tray/tray.js +2 -2
- package/cli/src/cli/tray/tray.ps1 +1 -1
- package/open-sse/config/appConstants.js +1 -1
- package/open-sse/config/kiroConstants.js +5 -5
- package/open-sse/config/providerModels.js +1 -1
- package/open-sse/executors/codebuddy-cn.js +1 -1
- package/open-sse/executors/commandcode.js +1 -1
- package/open-sse/rtk/headroom.js +1 -1
- package/open-sse/services/antigravityObfuscation.js +1 -1
- package/open-sse/services/kiroModels.js +4 -4
- package/open-sse/services/usage.js +310 -1
- package/open-sse/translator/request/openai-to-kiro.js +1 -1
- package/open-sse/translator/response/commandcode-to-openai.js +1 -1
- package/open-sse/utils/sessionManager.js +2 -2
- package/open-sse/utils/thinkingSuffix.js +1 -1
- package/package.json +1 -1
- package/public/i18n/literals/ar.json +4 -4
- package/public/i18n/literals/bn.json +4 -4
- package/public/i18n/literals/cs.json +4 -4
- package/public/i18n/literals/da.json +4 -4
- package/public/i18n/literals/de.json +4 -4
- package/public/i18n/literals/el.json +4 -4
- package/public/i18n/literals/es.json +4 -4
- package/public/i18n/literals/fi.json +4 -4
- package/public/i18n/literals/fr.json +4 -4
- package/public/i18n/literals/he.json +4 -4
- package/public/i18n/literals/hi.json +4 -4
- package/public/i18n/literals/hu.json +4 -4
- package/public/i18n/literals/id.json +4 -4
- package/public/i18n/literals/it.json +4 -4
- package/public/i18n/literals/ja.json +4 -4
- package/public/i18n/literals/ko.json +4 -4
- package/public/i18n/literals/nl.json +4 -4
- package/public/i18n/literals/no.json +4 -4
- package/public/i18n/literals/pl.json +4 -4
- package/public/i18n/literals/pt-BR.json +4 -4
- package/public/i18n/literals/pt-PT.json +4 -4
- package/public/i18n/literals/ro.json +4 -4
- package/public/i18n/literals/ru.json +4 -4
- package/public/i18n/literals/sv.json +4 -4
- package/public/i18n/literals/th.json +4 -4
- package/public/i18n/literals/tl.json +4 -4
- package/public/i18n/literals/tr.json +4 -4
- package/public/i18n/literals/uk.json +4 -4
- package/public/i18n/literals/ur.json +4 -4
- package/public/i18n/literals/vi.json +4 -4
- package/public/i18n/literals/zh-CN.json +15 -15
- package/public/i18n/literals/zh-TW.json +4 -4
- package/src/app/(dashboard)/dashboard/cli-tools/components/AntigravityToolCard.js +2 -2
- package/src/app/(dashboard)/dashboard/cli-tools/components/ApiKeySelect.js +1 -1
- package/src/app/(dashboard)/dashboard/cli-tools/components/BaseUrlSelect.js +1 -1
- package/src/app/(dashboard)/dashboard/cli-tools/components/ClaudeToolCard.js +5 -5
- package/src/app/(dashboard)/dashboard/cli-tools/components/ClineToolCard.js +4 -4
- package/src/app/(dashboard)/dashboard/cli-tools/components/CodexToolCard.js +8 -8
- package/src/app/(dashboard)/dashboard/cli-tools/components/CopilotToolCard.js +7 -7
- package/src/app/(dashboard)/dashboard/cli-tools/components/CoworkToolCard.js +4 -4
- package/src/app/(dashboard)/dashboard/cli-tools/components/DeepSeekTuiToolCard.js +4 -4
- package/src/app/(dashboard)/dashboard/cli-tools/components/DefaultToolCard.js +1 -1
- package/src/app/(dashboard)/dashboard/cli-tools/components/DroidToolCard.js +16 -11
- package/src/app/(dashboard)/dashboard/cli-tools/components/EndpointPresetControl.js +1 -1
- package/src/app/(dashboard)/dashboard/cli-tools/components/HermesToolCard.js +3 -3
- package/src/app/(dashboard)/dashboard/cli-tools/components/JcodeToolCard.js +16 -16
- package/src/app/(dashboard)/dashboard/cli-tools/components/KiloToolCard.js +4 -4
- package/src/app/(dashboard)/dashboard/cli-tools/components/MitmServerCard.js +2 -2
- package/src/app/(dashboard)/dashboard/cli-tools/components/OpenClawToolCard.js +11 -11
- package/src/app/(dashboard)/dashboard/cli-tools/components/OpenCodeToolCard.js +18 -13
- package/src/app/(dashboard)/dashboard/cli-tools/components/ToolSummaryCard.js +1 -1
- package/src/app/api/cli-tools/antigravity-mitm/route.js +2 -2
- package/src/app/api/cli-tools/claude-settings/route.js +2 -2
- package/src/app/api/cli-tools/cline-settings/route.js +4 -4
- package/src/app/api/cli-tools/codex-settings/route.js +16 -16
- package/src/app/api/cli-tools/copilot-settings/route.js +19 -14
- package/src/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
- package/src/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
- package/src/app/api/cli-tools/cowork-settings/route.js +4 -4
- package/src/app/api/cli-tools/deepseek-tui-settings/route.js +7 -7
- package/src/app/api/cli-tools/droid-settings/route.js +12 -12
- package/src/app/api/cli-tools/hermes-settings/route.js +4 -4
- package/src/app/api/cli-tools/jcode-settings/route.js +13 -13
- package/src/app/api/cli-tools/kilo-settings/route.js +7 -7
- package/src/app/api/cli-tools/openclaw-settings/route.js +26 -26
- package/src/app/api/cli-tools/opencode-settings/route.js +27 -27
- package/src/app/api/headroom/restart/route.js +1 -1
- package/src/app/api/headroom/start/route.js +1 -1
- package/src/app/api/models/test/ping.js +2 -2
- package/src/app/api/providers/[id]/models/route.js +38 -0
- package/src/app/api/v1/models/route.js +20 -0
- package/src/app/globals.css +1 -1
- package/src/dashboardGuard.js +2 -2
- package/src/lib/appUpdater.js +4 -4
- package/src/lib/db/dataDirMigration.js +18 -26
- package/src/lib/headroom/detect.js +1 -1
- package/src/lib/mcp/stdioSseBridge.js +5 -5
- package/src/lib/network/proxyTest.js +1 -1
- package/src/lib/oauth/constants/xai.js +1 -1
- package/src/lib/oauth/services/codebuddyBulkImportManager.js +1 -1
- package/src/mitm/cert/install.js +11 -6
- package/src/mitm/cert/rootCA.js +2 -2
- package/src/mitm/config.js +1 -1
- package/src/mitm/handlers/base.js +4 -4
- package/src/mitm/handlers/copilot.js +2 -2
- package/src/mitm/handlers/kiro.js +3 -3
- package/src/mitm/manager.js +22 -17
- package/src/mitm/paths.js +1 -1
- package/src/mitm/server.js +1 -1
- package/src/shared/constants/cliTools.js +8 -8
- package/src/shared/constants/providers.js +10 -2
- package/src/shared/services/initializeApp.js +1 -1
- package/src/shared/utils/clineAuth.js +2 -2
- package/src/shared/utils/machineId.js +1 -1
- package/src/sse/services/codexGateway.js +4 -4
- package/cli/app/.next-cli-build/static/chunks/6069-3a19c2e23280b9f4.js +0 -54
- package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/page-95c0533e8dd61515.js +0 -1
- /package/cli/app/.next-cli-build/static/{WPP0ARz-9ieVVo7WDF86q → bAJp2tRybHzjTO6gr0kf_}/_buildManifest.js +0 -0
- /package/cli/app/.next-cli-build/static/{WPP0ARz-9ieVVo7WDF86q → bAJp2tRybHzjTO6gr0kf_}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
const api = require("../api/client");
|
|
2
|
+
const LEGACY_BRAND = String.fromCharCode(57) + "Router";
|
|
3
|
+
const LEGACY_BRAND_LC = LEGACY_BRAND.toLowerCase();
|
|
2
4
|
const { pause, confirm } = require("../utils/input");
|
|
3
5
|
const { showStatus } = require("../utils/display");
|
|
4
6
|
const { selectModelFromList } = require("../utils/modelSelector");
|
|
@@ -179,10 +181,10 @@ async function buildCodexHeader() {
|
|
|
179
181
|
const result = await api.getCliToolSettings("codex");
|
|
180
182
|
if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
|
|
181
183
|
|
|
182
|
-
const { installed,
|
|
184
|
+
const { installed, hasZevai, config } = result.data;
|
|
183
185
|
if (!installed) return `Status: ${COLORS.red}✗ Codex CLI not installed${COLORS.reset}`;
|
|
184
186
|
|
|
185
|
-
if (!
|
|
187
|
+
if (!hasZevai) {
|
|
186
188
|
return [
|
|
187
189
|
`Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
|
|
188
190
|
`${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
|
|
@@ -267,18 +269,18 @@ async function buildDroidHeader() {
|
|
|
267
269
|
const result = await api.getCliToolSettings("droid");
|
|
268
270
|
if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
|
|
269
271
|
|
|
270
|
-
const { installed,
|
|
272
|
+
const { installed, hasZevai, settings } = result.data;
|
|
271
273
|
if (!installed) return `Status: ${COLORS.red}✗ Factory Droid not installed${COLORS.reset}`;
|
|
272
274
|
|
|
273
|
-
if (!
|
|
275
|
+
if (!hasZevai) {
|
|
274
276
|
return [
|
|
275
277
|
`Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
|
|
276
278
|
`${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
|
|
277
279
|
].join("\n");
|
|
278
280
|
}
|
|
279
281
|
|
|
280
|
-
// Extract
|
|
281
|
-
const custom = settings?.customModels?.find(m => m.id === "custom:
|
|
282
|
+
// Extract ZevaiRouter custom model config
|
|
283
|
+
const custom = settings?.customModels?.find(m => (m.id === "custom:Zevai-0" || m.id === `custom:${LEGACY_BRAND}-0`));
|
|
282
284
|
const lines = [`Status: ${COLORS.green}✓ Configured${COLORS.reset}`];
|
|
283
285
|
if (custom?.baseUrl) lines.push(`Endpoint: ${COLORS.cyan}${custom.baseUrl}${COLORS.reset}`);
|
|
284
286
|
if (custom?.model) lines.push(`Model: ${COLORS.dim}${custom.model}${COLORS.reset}`);
|
|
@@ -350,20 +352,21 @@ async function buildOpenClawHeader() {
|
|
|
350
352
|
const result = await api.getCliToolSettings("openclaw");
|
|
351
353
|
if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
|
|
352
354
|
|
|
353
|
-
const { installed,
|
|
355
|
+
const { installed, hasZevai, settings } = result.data;
|
|
354
356
|
if (!installed) return `Status: ${COLORS.red}✗ Open Claw not installed${COLORS.reset}`;
|
|
355
357
|
|
|
356
|
-
if (!
|
|
358
|
+
if (!hasZevai) {
|
|
357
359
|
return [
|
|
358
360
|
`Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
|
|
359
361
|
`${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
|
|
360
362
|
].join("\n");
|
|
361
363
|
}
|
|
362
364
|
|
|
363
|
-
// Extract
|
|
364
|
-
const
|
|
365
|
+
// Extract ZevaiRouter provider config
|
|
366
|
+
const _providers = settings?.models?.providers || {};
|
|
367
|
+
const provider = _providers["zevai"] || _providers[LEGACY_BRAND_LC];
|
|
365
368
|
const primary = settings?.agents?.defaults?.model?.primary || "";
|
|
366
|
-
const model = primary.startsWith("
|
|
369
|
+
const model = (primary.startsWith("zevai/") || primary.startsWith(LEGACY_BRAND_LC + "/")) ? primary.replace(new RegExp("^zevai/|^" + LEGACY_BRAND_LC + "/"), "") : (provider?.models?.[0]?.id || "");
|
|
367
370
|
const lines = [`Status: ${COLORS.green}✓ Configured${COLORS.reset}`];
|
|
368
371
|
if (provider?.baseUrl) lines.push(`Endpoint: ${COLORS.cyan}${provider.baseUrl}${COLORS.reset}`);
|
|
369
372
|
if (model) lines.push(`Model: ${COLORS.dim}${model}${COLORS.reset}`);
|
|
@@ -431,10 +434,10 @@ async function buildOpenCodeHeader() {
|
|
|
431
434
|
const result = await api.getCliToolSettings("opencode");
|
|
432
435
|
if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
|
|
433
436
|
|
|
434
|
-
const { installed,
|
|
437
|
+
const { installed, hasZevai, opencode } = result.data;
|
|
435
438
|
if (!installed) return `Status: ${COLORS.red}✗ OpenCode CLI not installed${COLORS.reset}`;
|
|
436
439
|
|
|
437
|
-
if (!
|
|
440
|
+
if (!hasZevai) {
|
|
438
441
|
return [
|
|
439
442
|
`Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
|
|
440
443
|
`${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
|
|
@@ -519,10 +522,10 @@ async function buildHermesHeader() {
|
|
|
519
522
|
const result = await api.getCliToolSettings("hermes");
|
|
520
523
|
if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
|
|
521
524
|
|
|
522
|
-
const { installed,
|
|
525
|
+
const { installed, hasZevai, settings } = result.data;
|
|
523
526
|
if (!installed) return `Status: ${COLORS.red}✗ Hermes Agent not installed${COLORS.reset}`;
|
|
524
527
|
|
|
525
|
-
if (!
|
|
528
|
+
if (!hasZevai) {
|
|
526
529
|
return [
|
|
527
530
|
`Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
|
|
528
531
|
`${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
|
|
@@ -100,7 +100,7 @@ async function showSettingsMenu(breadcrumb = []) {
|
|
|
100
100
|
|
|
101
101
|
/**
|
|
102
102
|
* Reset authMode to "password" via API. Used when OIDC is misconfigured
|
|
103
|
-
* and user is locked out of dashboard. CLI bypasses auth via x-
|
|
103
|
+
* and user is locked out of dashboard. CLI bypasses auth via x-zevai-cli-token.
|
|
104
104
|
*/
|
|
105
105
|
async function resetAuthMode() {
|
|
106
106
|
const ok = await confirm("Reset auth mode to PASSWORD (disable OIDC)?");
|
|
@@ -4,7 +4,7 @@ const os = require("os");
|
|
|
4
4
|
const { execSync } = require("child_process");
|
|
5
5
|
|
|
6
6
|
const APP_NAME = "zevai";
|
|
7
|
-
const APP_LABEL = "com.
|
|
7
|
+
const APP_LABEL = "com.zevairouter.autostart";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Resolve the absolute path to this package's cli.js.
|
|
@@ -12,7 +12,7 @@ const APP_LABEL = "com.9router.autostart";
|
|
|
12
12
|
* Order of preference:
|
|
13
13
|
* 1. Explicit `cliPath` argument — cleanest, used when called from running
|
|
14
14
|
* cli.js with `__filename`.
|
|
15
|
-
* 2. `process.argv[1]` if it's our cli.js — true when
|
|
15
|
+
* 2. `process.argv[1]` if it's our cli.js — true when zevairouter is currently
|
|
16
16
|
* running and the tray menu fires this code path.
|
|
17
17
|
* 3. Compute relative to this file's own location. autostart.js lives at
|
|
18
18
|
* `<pkg>/src/cli/tray/autostart.js`, so cli.js is three levels up.
|
|
@@ -115,7 +115,7 @@ function isAutoStartEnabled() {
|
|
|
115
115
|
* launchd is managing under our agent label.
|
|
116
116
|
*
|
|
117
117
|
* `launchctl unload <plist>` (and `load`) for an Aqua user-domain agent sends
|
|
118
|
-
* SIGTERM to the running process. When the running
|
|
118
|
+
* SIGTERM to the running process. When the running zevairouter cli.js was itself
|
|
119
119
|
* spawned by the autostart launchd agent (i.e. user enabled autostart at
|
|
120
120
|
* some point, then rebooted, then clicked the tray icon's "Disable
|
|
121
121
|
* Auto-start" menu item), an unload would kill the very process executing
|
|
@@ -182,9 +182,9 @@ function enableMacOS(cliPath) {
|
|
|
182
182
|
<key>KeepAlive</key>
|
|
183
183
|
<false/>
|
|
184
184
|
<key>StandardOutPath</key>
|
|
185
|
-
<string>/tmp/
|
|
185
|
+
<string>/tmp/zevairouter.log</string>
|
|
186
186
|
<key>StandardErrorPath</key>
|
|
187
|
-
<string>/tmp/
|
|
187
|
+
<string>/tmp/zevairouter.error.log</string>
|
|
188
188
|
</dict>
|
|
189
189
|
</plist>`;
|
|
190
190
|
|
|
@@ -247,7 +247,7 @@ function enableWindows(cliPath) {
|
|
|
247
247
|
if (!routerScript) return false;
|
|
248
248
|
|
|
249
249
|
// Run node + cli.js directly, hidden window. Avoids the fragile
|
|
250
|
-
// `
|
|
250
|
+
// `zevairouter.cmd` lookup that depended on the npm prefix path.
|
|
251
251
|
const vbsContent = `Set WshShell = CreateObject("WScript.Shell")
|
|
252
252
|
WshShell.Run """${nodePath}"" ""${routerScript}"" --tray --skip-update", 0, False
|
|
253
253
|
`;
|
package/cli/src/cli/tray/tray.js
CHANGED
|
@@ -230,7 +230,7 @@ function initUnixTray(options) {
|
|
|
230
230
|
// failures (binary crash, EACCES, etc.) so users can see why the icon
|
|
231
231
|
// didn't appear instead of getting a misleading "running in tray" log.
|
|
232
232
|
trayInstance.ready().catch((err) => {
|
|
233
|
-
process.stderr.write(`[
|
|
233
|
+
process.stderr.write(`[zevairouter] tray failed to start: ${err && err.message ? err.message : err}\n`);
|
|
234
234
|
});
|
|
235
235
|
} else {
|
|
236
236
|
trayInstance.onReady(() => {});
|
|
@@ -239,7 +239,7 @@ function initUnixTray(options) {
|
|
|
239
239
|
|
|
240
240
|
return trayInstance;
|
|
241
241
|
} catch (err) {
|
|
242
|
-
process.stderr.write(`[
|
|
242
|
+
process.stderr.write(`[zevairouter] tray init error: ${err.message}\n`);
|
|
243
243
|
return null;
|
|
244
244
|
}
|
|
245
245
|
}
|
|
@@ -222,7 +222,7 @@ export const OAUTH_ENDPOINTS = {
|
|
|
222
222
|
// Generate Kimi OAuth custom headers
|
|
223
223
|
export function buildKimiHeaders() {
|
|
224
224
|
return {
|
|
225
|
-
"X-Msh-Platform": "
|
|
225
|
+
"X-Msh-Platform": "zevairouter",
|
|
226
226
|
"X-Msh-Version": "2.1.2",
|
|
227
227
|
"X-Msh-Device-Model": typeof process !== "undefined" ? `${process.platform} ${process.arch}` : "unknown",
|
|
228
228
|
"X-Msh-Device-Id": `kimi-${Date.now()}`
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Mirrors the behaviour of `internal/translator/kiro/common/constants.go` and
|
|
5
5
|
* `internal/translator/kiro/claude/kiro_claude_request.go` from the
|
|
6
|
-
* CLIProxyAPIPlus reference implementation, scoped down to what
|
|
6
|
+
* CLIProxyAPIPlus reference implementation, scoped down to what zevairouter needs:
|
|
7
7
|
*
|
|
8
8
|
* - `-agentic` model suffix detection + chunked-write system prompt
|
|
9
9
|
* - reasoning / thinking trigger detection (Anthropic-Beta header,
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* - the `<thinking_mode>enabled</thinking_mode>` system-prompt injection
|
|
12
12
|
* that turns Kiro reasoning on
|
|
13
13
|
*
|
|
14
|
-
* Kiro upstream does not advertise `-agentic` model IDs; they are a
|
|
14
|
+
* Kiro upstream does not advertise `-agentic` model IDs; they are a zevairouter
|
|
15
15
|
* fiction. The suffix is stripped before the request leaves this process.
|
|
16
16
|
*/
|
|
17
17
|
|
|
@@ -176,7 +176,7 @@ export function shouldExposeKiroReasoning(body) {
|
|
|
176
176
|
}
|
|
177
177
|
|
|
178
178
|
/**
|
|
179
|
-
* Detect whether a model id refers to a
|
|
179
|
+
* Detect whether a model id refers to a zevairouter synthetic agentic variant.
|
|
180
180
|
* Agentic variants share the same upstream model as the base; the only
|
|
181
181
|
* difference is the chunked-write system prompt this module injects.
|
|
182
182
|
*
|
|
@@ -199,7 +199,7 @@ export function stripAgenticSuffix(model) {
|
|
|
199
199
|
}
|
|
200
200
|
|
|
201
201
|
/**
|
|
202
|
-
* Detect whether a model id is a
|
|
202
|
+
* Detect whether a model id is a zevairouter synthetic thinking variant
|
|
203
203
|
* (e.g. `claude-sonnet-4.5-thinking`). Same upstream model as the base; the
|
|
204
204
|
* only difference is `<thinking_mode>enabled</thinking_mode>` injection.
|
|
205
205
|
*
|
|
@@ -226,7 +226,7 @@ export function stripThinkingSuffix(model) {
|
|
|
226
226
|
}
|
|
227
227
|
|
|
228
228
|
/**
|
|
229
|
-
* Resolve a
|
|
229
|
+
* Resolve a zevairouter model id to the real upstream Kiro model id, plus flags
|
|
230
230
|
* describing which behaviours the suffixes implied.
|
|
231
231
|
*
|
|
232
232
|
* resolveKiroModel("claude-sonnet-4.5-thinking-agentic")
|
|
@@ -584,7 +584,7 @@ export const PROVIDER_MODELS = {
|
|
|
584
584
|
{ id: "accounts/fireworks/models/qwen3-235b-a22b", name: "Qwen3 235B" },
|
|
585
585
|
{ id: "nomic-ai/nomic-embed-text-v1.5", name: "Nomic Embed Text v1.5", type: "embedding" },
|
|
586
586
|
],
|
|
587
|
-
// Wave-1 ports from
|
|
587
|
+
// Wave-1 ports from zevairouter (keys = provider alias used by getModelsByProviderId)
|
|
588
588
|
mmf: [
|
|
589
589
|
{ id: "mimo-auto", name: "MiMo Auto" },
|
|
590
590
|
],
|
|
@@ -7,7 +7,7 @@ import { DefaultExecutor } from "./default.js";
|
|
|
7
7
|
* attaches reasoning_summary when the client asked for reasoning_effort
|
|
8
8
|
* (forcing reasoning on plain requests trips content filters).
|
|
9
9
|
*
|
|
10
|
-
* Ported from
|
|
10
|
+
* Ported from zevairouter executors/codebuddy-cn.js.
|
|
11
11
|
*/
|
|
12
12
|
export class CodeBuddyCnExecutor extends DefaultExecutor {
|
|
13
13
|
constructor() {
|
|
@@ -12,7 +12,7 @@ import { convertCommandCodeToOpenAI } from "../translator/response/commandcode-t
|
|
|
12
12
|
* Upstream returns AI SDK v5 NDJSON (one JSON event per line, no `data:` prefix).
|
|
13
13
|
* We translate each event to an OpenAI chat.completion.chunk and emit it as SSE so
|
|
14
14
|
* both the streaming and non-streaming (forced SSE → JSON) downstream handlers in
|
|
15
|
-
*
|
|
15
|
+
* zevairouter can consume it without further format translation.
|
|
16
16
|
*/
|
|
17
17
|
export class CommandCodeExecutor extends BaseExecutor {
|
|
18
18
|
constructor() {
|
package/open-sse/rtk/headroom.js
CHANGED
|
@@ -230,7 +230,7 @@ async function callCompress(url, messages, model, timeoutMs, compressUserMessage
|
|
|
230
230
|
|
|
231
231
|
// Compress request body via Headroom proxy. Fail-open: returns null on any error.
|
|
232
232
|
// /v1/compress only understands OpenAI shape, so Claude bodies are translated
|
|
233
|
-
// to OpenAI, compressed, then translated back using
|
|
233
|
+
// to OpenAI, compressed, then translated back using ZevaiRouter's own translators.
|
|
234
234
|
export async function compressWithHeadroom(body, { enabled, url, model, format, compressUserMessages, timeoutMs = DEFAULT_TIMEOUT_MS, diagnostics = null } = {}) {
|
|
235
235
|
if (!enabled) {
|
|
236
236
|
setDiagnostic(diagnostics, "disabled");
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Calls AWS CodeWhisperer's `ListAvailableModels` endpoint to get the live
|
|
5
5
|
* catalog for an authenticated Kiro account, then expands each upstream model
|
|
6
|
-
* into
|
|
6
|
+
* into zevairouter-shaped variants:
|
|
7
7
|
*
|
|
8
8
|
* {upstream} - base model
|
|
9
9
|
* {upstream}-thinking - same model, thinking on at request time
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* {upstream}-thinking-agentic - both
|
|
12
12
|
*
|
|
13
13
|
* The `-thinking` and `-agentic` suffixes do not exist on the Kiro upstream
|
|
14
|
-
* API. They are
|
|
14
|
+
* API. They are zevairouter fictions and the `openai-to-kiro` translator strips
|
|
15
15
|
* them before the request leaves this process.
|
|
16
16
|
*
|
|
17
17
|
* The runtime UA is built to match what Kiro IDE itself sends, because the
|
|
@@ -93,7 +93,7 @@ function buildKiroFingerprintHeaders(credentials) {
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
/**
|
|
96
|
-
* Build the synthetic
|
|
96
|
+
* Build the synthetic zevairouter variant set for a single upstream Kiro model.
|
|
97
97
|
*
|
|
98
98
|
* Returns objects shaped for `PROVIDER_MODELS` (`{ id, name }`) so they can
|
|
99
99
|
* be slotted directly into the existing model registry.
|
|
@@ -218,7 +218,7 @@ function cacheKey(credentials) {
|
|
|
218
218
|
|
|
219
219
|
/**
|
|
220
220
|
* Resolve the live Kiro model catalog for a credential and expand each entry
|
|
221
|
-
* into
|
|
221
|
+
* into zevairouter variants (`-thinking`, `-agentic`, `-thinking-agentic`).
|
|
222
222
|
*
|
|
223
223
|
* On any error (network, 4xx, 5xx), returns `null` so callers can fall back
|
|
224
224
|
* to the static catalog without taking down the dashboard or `/v1/models`.
|
|
@@ -131,6 +131,15 @@ export async function getUsageForProvider(connection, proxyOptions = null) {
|
|
|
131
131
|
return await getMiniMaxUsage(apiKey, provider, proxyOptions);
|
|
132
132
|
case "grok-cli":
|
|
133
133
|
return await getGrokCliUsage(accessToken, providerSpecificData, proxyOptions);
|
|
134
|
+
case "xai":
|
|
135
|
+
return await getXaiUsage(accessToken || apiKey, providerSpecificData, proxyOptions);
|
|
136
|
+
case "cline":
|
|
137
|
+
case "clinepass":
|
|
138
|
+
return await getClineUsage(accessToken || apiKey, provider, proxyOptions);
|
|
139
|
+
case "kimchi":
|
|
140
|
+
return await getKimchiUsage(accessToken || apiKey, providerSpecificData, proxyOptions);
|
|
141
|
+
case "cursor":
|
|
142
|
+
return await getCursorUsage(accessToken, providerSpecificData);
|
|
134
143
|
default:
|
|
135
144
|
return { message: `Usage API not implemented for ${provider}` };
|
|
136
145
|
}
|
|
@@ -346,7 +355,7 @@ function parseCodeBuddyUsage(payload) {
|
|
|
346
355
|
}
|
|
347
356
|
|
|
348
357
|
// Split refill packs (monthly cycle resets) vs one-shot bonus packs so the UI
|
|
349
|
-
// does not imply bonus credits replenish every month (ported from
|
|
358
|
+
// does not imply bonus credits replenish every month (ported from zevairouter).
|
|
350
359
|
const REFILL_GAP_MS = 2 * 24 * 60 * 60 * 1000;
|
|
351
360
|
const cycleEndMs = (acc) => {
|
|
352
361
|
const r = parseResetTime(acc.CycleEndTime);
|
|
@@ -1976,3 +1985,303 @@ export async function getGrokCliUsage(accessToken, providerSpecificData = null,
|
|
|
1976
1985
|
return { message: `Grok CLI usage error: ${error.message}` };
|
|
1977
1986
|
}
|
|
1978
1987
|
}
|
|
1988
|
+
|
|
1989
|
+
// ─── Shared: dig credit-like fields from arbitrary JSON ─────────────────────
|
|
1990
|
+
|
|
1991
|
+
function digCreditFields(obj, depth = 0, path = "") {
|
|
1992
|
+
if (!obj || typeof obj !== "object" || depth > 4) return null;
|
|
1993
|
+
const candidates = [];
|
|
1994
|
+
const keys = Object.entries(obj);
|
|
1995
|
+
for (const [k, v] of keys) {
|
|
1996
|
+
const lk = k.toLowerCase();
|
|
1997
|
+
if (v && typeof v === "object" && !Array.isArray(v)) {
|
|
1998
|
+
const nested = digCreditFields(v, depth + 1, path ? `${path}.${k}` : k);
|
|
1999
|
+
if (nested) candidates.push(nested);
|
|
2000
|
+
continue;
|
|
2001
|
+
}
|
|
2002
|
+
if (typeof v !== "number" && typeof v !== "string") continue;
|
|
2003
|
+
const n = toFiniteNumber(v, NaN);
|
|
2004
|
+
if (!Number.isFinite(n)) continue;
|
|
2005
|
+
if (/(remaining|balance|credit|quota|limit|allowance|cap|used|spent|consumed)/i.test(lk)) {
|
|
2006
|
+
candidates.push({ key: path ? `${path}.${k}` : k, name: k, value: n, kind: lk });
|
|
2007
|
+
}
|
|
2008
|
+
}
|
|
2009
|
+
if (!candidates.length) return null;
|
|
2010
|
+
// Prefer explicit remaining/balance pairs
|
|
2011
|
+
return candidates;
|
|
2012
|
+
}
|
|
2013
|
+
|
|
2014
|
+
function buildQuotaFromCreditFields(fields) {
|
|
2015
|
+
if (!fields?.length) return null;
|
|
2016
|
+
const by = (re) => fields.find((f) => re.test(f.kind) || re.test(f.name));
|
|
2017
|
+
const remaining = by(/remaining|balance|credit(?!s_used)/i);
|
|
2018
|
+
const total = by(/limit|cap|allowance|total|quota(?!_used)/i);
|
|
2019
|
+
const used = by(/used|spent|consumed/i);
|
|
2020
|
+
if (total && Number(total.value) > 0) {
|
|
2021
|
+
const u = used
|
|
2022
|
+
? Math.max(0, Number(used.value))
|
|
2023
|
+
: remaining
|
|
2024
|
+
? Math.max(0, Number(total.value) - Number(remaining.value))
|
|
2025
|
+
: 0;
|
|
2026
|
+
const rem = Math.max(0, Number(total.value) - u);
|
|
2027
|
+
return {
|
|
2028
|
+
used: u,
|
|
2029
|
+
total: Number(total.value),
|
|
2030
|
+
remainingPercentage: (rem / Number(total.value)) * 100,
|
|
2031
|
+
resetAt: null,
|
|
2032
|
+
unlimited: false,
|
|
2033
|
+
};
|
|
2034
|
+
}
|
|
2035
|
+
if (remaining && Number(remaining.value) >= 0) {
|
|
2036
|
+
const bal = Number(remaining.value);
|
|
2037
|
+
return {
|
|
2038
|
+
used: 0,
|
|
2039
|
+
total: bal > 0 ? bal : 1,
|
|
2040
|
+
remainingPercentage: bal > 0 ? 100 : 0,
|
|
2041
|
+
resetAt: null,
|
|
2042
|
+
unlimited: false,
|
|
2043
|
+
};
|
|
2044
|
+
}
|
|
2045
|
+
return null;
|
|
2046
|
+
}
|
|
2047
|
+
|
|
2048
|
+
// ─── Cline / ClinePass ──────────────────────────────────────────────────────
|
|
2049
|
+
|
|
2050
|
+
export async function getClineUsage(accessToken, provider = "cline", proxyOptions = null) {
|
|
2051
|
+
if (!accessToken) return { message: "Cline access token not available." };
|
|
2052
|
+
try {
|
|
2053
|
+
// Dynamic import avoids circular deps with package.json in browser bundles
|
|
2054
|
+
const { buildClineHeaders } = await import("../../src/shared/utils/clineAuth.js");
|
|
2055
|
+
const headers = buildClineHeaders(accessToken, { Accept: "application/json" });
|
|
2056
|
+
const res = await proxyAwareFetch("https://api.cline.bot/api/v1/users/me", {
|
|
2057
|
+
method: "GET",
|
|
2058
|
+
headers,
|
|
2059
|
+
}, proxyOptions);
|
|
2060
|
+
|
|
2061
|
+
if (res.status === 401 || res.status === 403) {
|
|
2062
|
+
return { message: "Cline authentication expired. Please re-authorize." };
|
|
2063
|
+
}
|
|
2064
|
+
if (!res.ok) {
|
|
2065
|
+
return { message: `Cline user API error (${res.status})` };
|
|
2066
|
+
}
|
|
2067
|
+
|
|
2068
|
+
const data = await res.json().catch(() => null);
|
|
2069
|
+
if (!data || typeof data !== "object") {
|
|
2070
|
+
return { message: "Cline user response was not JSON." };
|
|
2071
|
+
}
|
|
2072
|
+
|
|
2073
|
+
// Cline wraps payload in { data: {...} } sometimes
|
|
2074
|
+
const user = data.data && typeof data.data === "object" ? data.data : data;
|
|
2075
|
+
const email = user.email || user.user?.email || null;
|
|
2076
|
+
const plan =
|
|
2077
|
+
user.plan ||
|
|
2078
|
+
user.subscription?.plan ||
|
|
2079
|
+
user.subscription?.name ||
|
|
2080
|
+
user.organization?.plan ||
|
|
2081
|
+
user.organizations?.[0]?.plan ||
|
|
2082
|
+
(provider === "clinepass" ? "ClinePass" : "Cline") ;
|
|
2083
|
+
|
|
2084
|
+
const fields = digCreditFields(user) || [];
|
|
2085
|
+
const quota = buildQuotaFromCreditFields(fields);
|
|
2086
|
+
const quotas = {};
|
|
2087
|
+
if (quota) quotas.Credits = quota;
|
|
2088
|
+
|
|
2089
|
+
// Organization seats / orgs count as informational quota rows when no credits
|
|
2090
|
+
const orgs = user.organizations || user.organization;
|
|
2091
|
+
if (!Object.keys(quotas).length && orgs) {
|
|
2092
|
+
quotas.Account = {
|
|
2093
|
+
used: 0,
|
|
2094
|
+
total: 0,
|
|
2095
|
+
remainingPercentage: 100,
|
|
2096
|
+
resetAt: null,
|
|
2097
|
+
unlimited: true,
|
|
2098
|
+
};
|
|
2099
|
+
}
|
|
2100
|
+
|
|
2101
|
+
if (!Object.keys(quotas).length) {
|
|
2102
|
+
return {
|
|
2103
|
+
plan: typeof plan === "string" ? plan : "Cline",
|
|
2104
|
+
email,
|
|
2105
|
+
message: "Cline connected. No credit allotment was returned by the account API.",
|
|
2106
|
+
quotas: {},
|
|
2107
|
+
};
|
|
2108
|
+
}
|
|
2109
|
+
|
|
2110
|
+
return {
|
|
2111
|
+
plan: typeof plan === "string" ? plan : "Cline",
|
|
2112
|
+
email,
|
|
2113
|
+
quotas,
|
|
2114
|
+
};
|
|
2115
|
+
} catch (error) {
|
|
2116
|
+
return { message: `Cline usage error: ${error.message}` };
|
|
2117
|
+
}
|
|
2118
|
+
}
|
|
2119
|
+
|
|
2120
|
+
// ─── Kimchi ─────────────────────────────────────────────────────────────────
|
|
2121
|
+
|
|
2122
|
+
export async function getKimchiUsage(accessToken, providerSpecificData = null, proxyOptions = null) {
|
|
2123
|
+
if (!accessToken) return { message: "Kimchi access token not available." };
|
|
2124
|
+
try {
|
|
2125
|
+
const url = "https://app.kimchi.dev/api/v1/me";
|
|
2126
|
+
const res = await proxyAwareFetch(url, {
|
|
2127
|
+
method: "GET",
|
|
2128
|
+
headers: {
|
|
2129
|
+
Accept: "application/json",
|
|
2130
|
+
Authorization: `Bearer ${accessToken}`,
|
|
2131
|
+
"User-Agent": "kimchi/0.1.50",
|
|
2132
|
+
},
|
|
2133
|
+
}, proxyOptions);
|
|
2134
|
+
|
|
2135
|
+
if (res.status === 401 || res.status === 403) {
|
|
2136
|
+
return { message: "Kimchi authentication expired. Please re-authorize." };
|
|
2137
|
+
}
|
|
2138
|
+
if (!res.ok) {
|
|
2139
|
+
return { message: `Kimchi user API error (${res.status})` };
|
|
2140
|
+
}
|
|
2141
|
+
|
|
2142
|
+
const user = await res.json().catch(() => null);
|
|
2143
|
+
if (!user || typeof user !== "object") {
|
|
2144
|
+
return { message: "Kimchi user response was not JSON." };
|
|
2145
|
+
}
|
|
2146
|
+
|
|
2147
|
+
const email = user.email || providerSpecificData?.username || null;
|
|
2148
|
+
const plan = user.plan || user.tier || user.subscription?.name || "Kimchi";
|
|
2149
|
+
const fields = digCreditFields(user) || [];
|
|
2150
|
+
const quota = buildQuotaFromCreditFields(fields);
|
|
2151
|
+
const quotas = {};
|
|
2152
|
+
if (quota) quotas.Credits = quota;
|
|
2153
|
+
else {
|
|
2154
|
+
quotas.Account = {
|
|
2155
|
+
used: 0,
|
|
2156
|
+
total: 0,
|
|
2157
|
+
remainingPercentage: 100,
|
|
2158
|
+
resetAt: null,
|
|
2159
|
+
unlimited: true,
|
|
2160
|
+
};
|
|
2161
|
+
}
|
|
2162
|
+
|
|
2163
|
+
return {
|
|
2164
|
+
plan: typeof plan === "string" ? plan : "Kimchi",
|
|
2165
|
+
email,
|
|
2166
|
+
quotas,
|
|
2167
|
+
};
|
|
2168
|
+
} catch (error) {
|
|
2169
|
+
return { message: `Kimchi usage error: ${error.message}` };
|
|
2170
|
+
}
|
|
2171
|
+
}
|
|
2172
|
+
|
|
2173
|
+
// ─── xAI (API key or OAuth → api.x.ai) ──────────────────────────────────────
|
|
2174
|
+
|
|
2175
|
+
export async function getXaiUsage(token, providerSpecificData = null, proxyOptions = null) {
|
|
2176
|
+
if (!token) return { message: "xAI token not available." };
|
|
2177
|
+
try {
|
|
2178
|
+
const headers = {
|
|
2179
|
+
Authorization: `Bearer ${token}`,
|
|
2180
|
+
Accept: "application/json",
|
|
2181
|
+
};
|
|
2182
|
+
|
|
2183
|
+
// Prefer management-style key probe when available; fall back to models list.
|
|
2184
|
+
const probes = [
|
|
2185
|
+
"https://api.x.ai/v1/api-key",
|
|
2186
|
+
"https://api.x.ai/v1/models",
|
|
2187
|
+
];
|
|
2188
|
+
|
|
2189
|
+
let lastStatus = 0;
|
|
2190
|
+
let body = null;
|
|
2191
|
+
let okUrl = null;
|
|
2192
|
+
for (const url of probes) {
|
|
2193
|
+
const res = await proxyAwareFetch(url, { method: "GET", headers }, proxyOptions);
|
|
2194
|
+
lastStatus = res.status;
|
|
2195
|
+
if (res.status === 401 || res.status === 403) {
|
|
2196
|
+
return { message: "xAI authentication expired. Please re-authorize or update the API key." };
|
|
2197
|
+
}
|
|
2198
|
+
if (res.ok) {
|
|
2199
|
+
body = await res.json().catch(() => null);
|
|
2200
|
+
okUrl = url;
|
|
2201
|
+
break;
|
|
2202
|
+
}
|
|
2203
|
+
}
|
|
2204
|
+
|
|
2205
|
+
if (!body) {
|
|
2206
|
+
return { message: `xAI API error (${lastStatus || "unknown"})` };
|
|
2207
|
+
}
|
|
2208
|
+
|
|
2209
|
+
const fields = digCreditFields(body) || [];
|
|
2210
|
+
const quota = buildQuotaFromCreditFields(fields);
|
|
2211
|
+
const quotas = {};
|
|
2212
|
+
if (quota) {
|
|
2213
|
+
quotas.Credits = quota;
|
|
2214
|
+
} else {
|
|
2215
|
+
// Connected / healthy without numeric allotment
|
|
2216
|
+
const modelCount = Array.isArray(body?.data) ? body.data.length : 0;
|
|
2217
|
+
quotas.API = {
|
|
2218
|
+
used: 0,
|
|
2219
|
+
total: 0,
|
|
2220
|
+
remainingPercentage: 100,
|
|
2221
|
+
resetAt: null,
|
|
2222
|
+
unlimited: true,
|
|
2223
|
+
};
|
|
2224
|
+
if (modelCount > 0) {
|
|
2225
|
+
// informational only via plan string
|
|
2226
|
+
}
|
|
2227
|
+
}
|
|
2228
|
+
|
|
2229
|
+
const email = providerSpecificData?.email || null;
|
|
2230
|
+
const plan =
|
|
2231
|
+
body.name ||
|
|
2232
|
+
body.api_key_name ||
|
|
2233
|
+
body.team?.name ||
|
|
2234
|
+
(okUrl?.includes("api-key") ? "xAI API Key" : "xAI");
|
|
2235
|
+
|
|
2236
|
+
return {
|
|
2237
|
+
plan: typeof plan === "string" ? plan : "xAI",
|
|
2238
|
+
email,
|
|
2239
|
+
quotas,
|
|
2240
|
+
};
|
|
2241
|
+
} catch (error) {
|
|
2242
|
+
return { message: `xAI usage error: ${error.message}` };
|
|
2243
|
+
}
|
|
2244
|
+
}
|
|
2245
|
+
|
|
2246
|
+
// ─── Cursor (session token — no public quota API) ───────────────────────────
|
|
2247
|
+
|
|
2248
|
+
export async function getCursorUsage(accessToken, providerSpecificData = null) {
|
|
2249
|
+
if (!accessToken) return { message: "Cursor access token not available." };
|
|
2250
|
+
|
|
2251
|
+
// Cursor uses a long-lived session JWT; there is no stable public quota endpoint.
|
|
2252
|
+
// Surface connection health + any plan hints from stored providerSpecificData / JWT claims.
|
|
2253
|
+
let plan = providerSpecificData?.plan || providerSpecificData?.membershipType || "Cursor";
|
|
2254
|
+
let email = providerSpecificData?.email || null;
|
|
2255
|
+
|
|
2256
|
+
try {
|
|
2257
|
+
const parts = String(accessToken).split(".");
|
|
2258
|
+
if (parts.length === 3) {
|
|
2259
|
+
const b64 = parts[1].replace(/-/g, "+").replace(/_/g, "/");
|
|
2260
|
+
const padded = b64 + "=".repeat((4 - (b64.length % 4)) % 4);
|
|
2261
|
+
const payload = JSON.parse(Buffer.from(padded, "base64").toString("utf8"));
|
|
2262
|
+
email = email || payload.email || payload.preferred_username || null;
|
|
2263
|
+
plan =
|
|
2264
|
+
payload.plan ||
|
|
2265
|
+
payload.subscription ||
|
|
2266
|
+
payload.membershipType ||
|
|
2267
|
+
payload.tier ||
|
|
2268
|
+
plan;
|
|
2269
|
+
}
|
|
2270
|
+
} catch {
|
|
2271
|
+
/* ignore JWT decode errors */
|
|
2272
|
+
}
|
|
2273
|
+
|
|
2274
|
+
return {
|
|
2275
|
+
plan: typeof plan === "string" ? plan : "Cursor",
|
|
2276
|
+
email,
|
|
2277
|
+
quotas: {
|
|
2278
|
+
Session: {
|
|
2279
|
+
used: 0,
|
|
2280
|
+
total: 0,
|
|
2281
|
+
remainingPercentage: 100,
|
|
2282
|
+
resetAt: null,
|
|
2283
|
+
unlimited: true,
|
|
2284
|
+
},
|
|
2285
|
+
},
|
|
2286
|
+
};
|
|
2287
|
+
}
|
|
@@ -531,7 +531,7 @@ function convertMessages(messages, tools, model) {
|
|
|
531
531
|
/**
|
|
532
532
|
* Build Kiro payload from OpenAI format
|
|
533
533
|
*
|
|
534
|
-
* Two
|
|
534
|
+
* Two zevairouter-specific behaviours implemented here:
|
|
535
535
|
*
|
|
536
536
|
* 1. `-agentic` model suffix. Synthetic variant — same upstream model, but we
|
|
537
537
|
* inject a chunked-write system prompt to keep large file writes under
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* {"type":"finish",...}
|
|
14
14
|
*
|
|
15
15
|
* Each upstream "event" arrives as one JSON object per line — we receive it as a string chunk
|
|
16
|
-
* already split per line by the upstream SSE/JSON-line reader in
|
|
16
|
+
* already split per line by the upstream SSE/JSON-line reader in zevairouter.
|
|
17
17
|
*/
|
|
18
18
|
import { register } from "../index.js";
|
|
19
19
|
import { FORMATS } from "../formats.js";
|