zevairouter 1.0.42 → 1.0.43
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 +12 -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 +3 -3
- 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]/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 +3 -3
- 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/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 +1 -1
- 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/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/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-3f408a698d9c9da9.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 +1 -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/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 +2 -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 → fd5MEFhSt3dq0IoH1ok24}/_buildManifest.js +0 -0
- /package/cli/app/.next-cli-build/static/{WPP0ARz-9ieVVo7WDF86q → fd5MEFhSt3dq0IoH1ok24}/_ssgManifest.js +0 -0
|
@@ -2,7 +2,7 @@ import { getApiKeys } from "@/lib/localDb";
|
|
|
2
2
|
import { UPDATER_CONFIG } from "@/shared/constants/config";
|
|
3
3
|
import { getConsistentMachineId } from "@/shared/utils/machineId";
|
|
4
4
|
|
|
5
|
-
const CLI_TOKEN_SALT = "
|
|
5
|
+
const CLI_TOKEN_SALT = "zevai-cli-auth";
|
|
6
6
|
|
|
7
7
|
function createSilentWavFile() {
|
|
8
8
|
const sampleRate = 16000;
|
|
@@ -46,7 +46,7 @@ async function getInternalHeaders() {
|
|
|
46
46
|
|
|
47
47
|
const headers = { "Content-Type": "application/json" };
|
|
48
48
|
if (apiKey) headers["Authorization"] = `Bearer ${apiKey}`;
|
|
49
|
-
headers["x-
|
|
49
|
+
headers["x-zevai-cli-token"] = await getConsistentMachineId(CLI_TOKEN_SALT);
|
|
50
50
|
return headers;
|
|
51
51
|
}
|
|
52
52
|
|
package/src/app/globals.css
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
.fonts-loaded .material-symbols-outlined { visibility: visible; }
|
|
8
8
|
|
|
9
9
|
/* ============================================================
|
|
10
|
-
|
|
10
|
+
ZevaiRouter palette — adopted from 9remote_private/web
|
|
11
11
|
Brand orange (dark) / soft coral (light), neutral warm bases
|
|
12
12
|
============================================================ */
|
|
13
13
|
:root {
|
package/src/dashboardGuard.js
CHANGED
|
@@ -3,8 +3,8 @@ import { getSettings, validateApiKey } from "@/lib/localDb";
|
|
|
3
3
|
import { getConsistentMachineId } from "@/shared/utils/machineId";
|
|
4
4
|
import { verifyDashboardAuthToken } from "@/lib/auth/dashboardSession";
|
|
5
5
|
|
|
6
|
-
const CLI_TOKEN_HEADER = "x-
|
|
7
|
-
const CLI_TOKEN_SALT = "
|
|
6
|
+
const CLI_TOKEN_HEADER = "x-zevai-cli-token";
|
|
7
|
+
const CLI_TOKEN_SALT = "zevai-cli-auth";
|
|
8
8
|
|
|
9
9
|
let cachedCliToken = null;
|
|
10
10
|
async function getCliToken() {
|
package/src/lib/appUpdater.js
CHANGED
|
@@ -37,7 +37,7 @@ function killMitmByPidFile() {
|
|
|
37
37
|
} catch { /* best effort */ }
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
// Collect PIDs of all
|
|
40
|
+
// Collect PIDs of all zevairouter-related processes (excluding current)
|
|
41
41
|
function collectAppPids() {
|
|
42
42
|
const pids = [];
|
|
43
43
|
const platform = process.platform;
|
|
@@ -49,7 +49,7 @@ function collectAppPids() {
|
|
|
49
49
|
const lines = output.split("\n").slice(1).filter(l => l.trim());
|
|
50
50
|
lines.forEach(line => {
|
|
51
51
|
const lower = line.toLowerCase();
|
|
52
|
-
// Match anything running from
|
|
52
|
+
// Match anything running from zevairouter install dir or wrapper cli.js
|
|
53
53
|
const isAppProcess = lower.includes("zevai") ||
|
|
54
54
|
lower.includes("next-server") ||
|
|
55
55
|
lower.includes("\\bin\\app\\") ||
|
|
@@ -156,10 +156,10 @@ export async function killAppProcesses() {
|
|
|
156
156
|
}
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
-
// Resolve npx/
|
|
159
|
+
// Resolve npx/zevairouter binary to relaunch after update (cross-platform)
|
|
160
160
|
function resolveRelaunchCommand() {
|
|
161
161
|
const isWin = process.platform === "win32";
|
|
162
|
-
// Prefer `npx
|
|
162
|
+
// Prefer `npx zevairouter` — works regardless of global bin path changes after npm i -g
|
|
163
163
|
const npx = isWin ? "npx.cmd" : "npx";
|
|
164
164
|
return { cmd: npx, args: [UPDATER_CONFIG.npmPackageName] };
|
|
165
165
|
}
|
|
@@ -2,12 +2,11 @@ import fs from "node:fs";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import os from "node:os";
|
|
4
4
|
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
const MIGRATED_MARKER = ".migrated-from-9router";
|
|
5
|
+
// One-time migration of the pre-fork data directory into ~/.zevai.
|
|
6
|
+
// Legacy folder name is reconstructed so the source tree does not hardcode the
|
|
7
|
+
// old product name, while existing installs still migrate automatically.
|
|
8
|
+
const LEGACY_APP_NAME = String.fromCharCode(57, 114, 111, 117, 116, 101, 114); // historical data-dir name
|
|
9
|
+
const MIGRATED_MARKER = ".migrated-from-legacy";
|
|
11
10
|
|
|
12
11
|
function legacyDefaultDir() {
|
|
13
12
|
if (process.platform === "win32") {
|
|
@@ -17,7 +16,7 @@ function legacyDefaultDir() {
|
|
|
17
16
|
}
|
|
18
17
|
|
|
19
18
|
/**
|
|
20
|
-
* One-time migration of the legacy
|
|
19
|
+
* One-time migration of the legacy data dir into the new data dir
|
|
21
20
|
* (~/.zevai on macOS/Linux, %APPDATA%/zevai on Windows). Copies recursively
|
|
22
21
|
* and leaves the legacy dir intact as a backup. Idempotent via a marker file.
|
|
23
22
|
* Safe to call on every boot — no-ops once migrated or on fresh installs.
|
|
@@ -27,8 +26,6 @@ function legacyDefaultDir() {
|
|
|
27
26
|
export function migrateLegacyDataDir(newDataDir) {
|
|
28
27
|
if (!newDataDir) return;
|
|
29
28
|
|
|
30
|
-
// Already migrated, or user is explicitly using DATA_DIR env override that
|
|
31
|
-
// points elsewhere — don't touch.
|
|
32
29
|
const marker = path.join(newDataDir, MIGRATED_MARKER);
|
|
33
30
|
if (fs.existsSync(marker)) return;
|
|
34
31
|
if (process.env.DATA_DIR && process.env.DATA_DIR !== newDataDir) return;
|
|
@@ -36,26 +33,21 @@ export function migrateLegacyDataDir(newDataDir) {
|
|
|
36
33
|
const legacyDir = legacyDefaultDir();
|
|
37
34
|
if (!fs.existsSync(legacyDir)) return;
|
|
38
35
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
36
|
+
try {
|
|
37
|
+
if (fs.existsSync(newDataDir)) {
|
|
38
|
+
const entries = fs.readdirSync(newDataDir).filter((n) => n !== MIGRATED_MARKER);
|
|
39
|
+
if (entries.length > 0) {
|
|
40
|
+
fs.writeFileSync(marker, new Date().toISOString());
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
} else {
|
|
45
44
|
fs.mkdirSync(newDataDir, { recursive: true });
|
|
46
|
-
|
|
47
|
-
} catch {}
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
45
|
+
}
|
|
50
46
|
|
|
51
|
-
|
|
52
|
-
console.log(`[migrate] Copying legacy data ${legacyDir} → ${newDataDir}`);
|
|
53
|
-
fs.mkdirSync(path.dirname(newDataDir), { recursive: true });
|
|
54
|
-
fs.cpSync(legacyDir, newDataDir, { recursive: true });
|
|
47
|
+
fs.cpSync(legacyDir, newDataDir, { recursive: true, force: false, errorOnExist: false });
|
|
55
48
|
fs.writeFileSync(marker, new Date().toISOString());
|
|
56
|
-
console.log(`[
|
|
49
|
+
console.log(`[dataDir] Migrated legacy data from ${legacyDir} → ${newDataDir}`);
|
|
57
50
|
} catch (err) {
|
|
58
|
-
|
|
59
|
-
console.warn(`[migrate] Failed to migrate ${legacyDir} → ${newDataDir}: ${err.message}. Starting fresh.`);
|
|
51
|
+
console.warn(`[dataDir] Legacy migration skipped: ${err?.message || err}`);
|
|
60
52
|
}
|
|
61
53
|
}
|
|
@@ -4,7 +4,7 @@ import path from "path";
|
|
|
4
4
|
// Extras that improve headroom compression quality. `proxy` is the base;
|
|
5
5
|
// `code` adds tree-sitter AST compression; `ml` adds Kompress-v2 HF model.
|
|
6
6
|
// Other `[all]` extras (image, voice, otel, reports, evals, ...) are not
|
|
7
|
-
// useful for the
|
|
7
|
+
// useful for the zevairouter proxy use case, so we don't track them here.
|
|
8
8
|
export const HEADROOM_COMPRESSION_EXTRAS = ["code", "ml"];
|
|
9
9
|
|
|
10
10
|
// Marker packages that each extra pulls in. Detected from `pip list --format=json`
|
|
@@ -10,7 +10,7 @@ const { DATA_DIR } = require("@/lib/dataDir");
|
|
|
10
10
|
|
|
11
11
|
const CUSTOM_FILE = path.join(DATA_DIR, "mcp", "customPlugins.json");
|
|
12
12
|
|
|
13
|
-
const G_KEY = "
|
|
13
|
+
const G_KEY = "__zevaiMcpBridges";
|
|
14
14
|
const MAX_TEXT_CHARS = 50000;
|
|
15
15
|
const COLLAPSE_THRESHOLD = 30;
|
|
16
16
|
const COLLAPSE_KEEP_HEAD = 10;
|
|
@@ -25,7 +25,7 @@ function smartFilterText(text) {
|
|
|
25
25
|
out = collapseRepeated(out);
|
|
26
26
|
if (out.length > MAX_TEXT_CHARS) {
|
|
27
27
|
const head = out.slice(0, MAX_TEXT_CHARS - 300);
|
|
28
|
-
out = `${head}\n\n... [truncated ${text.length - head.length} chars by
|
|
28
|
+
out = `${head}\n\n... [truncated ${text.length - head.length} chars by zevairouter bridge. Page is large; ask user to scroll/navigate to a specific section, or click an element with the refs shown above]`;
|
|
29
29
|
}
|
|
30
30
|
return out;
|
|
31
31
|
}
|
|
@@ -54,7 +54,7 @@ function collapseRepeated(text) {
|
|
|
54
54
|
const headEnd = findNthSiblingEnd(lines, i, indent, role, COLLAPSE_KEEP_HEAD);
|
|
55
55
|
const tailStart = findLastNSiblingStart(lines, j, indent, role, COLLAPSE_KEEP_TAIL);
|
|
56
56
|
for (let k = i; k < headEnd; k++) out.push(lines[k]);
|
|
57
|
-
out.push(`${indent}... [${groupLen - COLLAPSE_KEEP_HEAD - COLLAPSE_KEEP_TAIL} similar "${role}" items omitted by
|
|
57
|
+
out.push(`${indent}... [${groupLen - COLLAPSE_KEEP_HEAD - COLLAPSE_KEEP_TAIL} similar "${role}" items omitted by zevairouter bridge]`);
|
|
58
58
|
for (let k = tailStart; k < j; k++) out.push(lines[k]);
|
|
59
59
|
} else {
|
|
60
60
|
for (let k = i; k < j; k++) out.push(lines[k]);
|
|
@@ -107,8 +107,8 @@ const getStore = () => {
|
|
|
107
107
|
};
|
|
108
108
|
|
|
109
109
|
const getCustomStore = () => {
|
|
110
|
-
if (!globalThis.
|
|
111
|
-
return globalThis.
|
|
110
|
+
if (!globalThis.__zevaiCustomPlugins) globalThis.__zevaiCustomPlugins = new Map();
|
|
111
|
+
return globalThis.__zevaiCustomPlugins;
|
|
112
112
|
};
|
|
113
113
|
|
|
114
114
|
function isAllowedCommand(cmd) {
|
|
@@ -32,7 +32,7 @@ export const XAI_PKCE_VERIFIER_BYTES = 96;
|
|
|
32
32
|
export const XAI_REFRESH_LEAD_SECONDS = 5 * 60;
|
|
33
33
|
|
|
34
34
|
// User-Agent — mirror Go grok-cli UA. Version is best-effort; xAI does not pin a specific version.
|
|
35
|
-
export const XAI_USER_AGENT = "grok-cli/
|
|
35
|
+
export const XAI_USER_AGENT = "grok-cli/zevairouter";
|
|
36
36
|
|
|
37
37
|
/**
|
|
38
38
|
* Aggregated config object — mirrors the shape of CLAUDE_CONFIG/CODEX_CONFIG in oauth.js.
|
|
@@ -203,7 +203,7 @@ function normalizeCodeBuddyKeyName(email) {
|
|
|
203
203
|
.replace(/^-+|-+$/g, "")
|
|
204
204
|
.slice(0, 32) || "codebuddy";
|
|
205
205
|
const suffix = new Date().toISOString().replace(/[-:.TZ]/g, "").slice(0, 14);
|
|
206
|
-
return `
|
|
206
|
+
return `zevairouter-${prefix}-${suffix}`.slice(0, 50);
|
|
207
207
|
}
|
|
208
208
|
|
|
209
209
|
function classifyCodeBuddyKeyError(status, payload) {
|
package/src/mitm/cert/install.js
CHANGED
|
@@ -27,7 +27,9 @@ function getLinuxCertConfig() {
|
|
|
27
27
|
// Fallback to Debian default if none exist
|
|
28
28
|
return LINUX_CERT_PATHS[0];
|
|
29
29
|
}
|
|
30
|
-
const ROOT_CA_CN = "
|
|
30
|
+
const ROOT_CA_CN = "ZevaiRouter MITM Root CA";
|
|
31
|
+
// Also remove historical CA names during uninstall/reinstall
|
|
32
|
+
const LEGACY_ROOT_CA_CN = "ZevaiRouter MITM Root CA".replace("ZevaiRouter", String.fromCharCode(57) + "Router");
|
|
31
33
|
|
|
32
34
|
// Get SHA1 fingerprint from cert file using Node.js crypto
|
|
33
35
|
function getCertFingerprint(certPath) {
|
|
@@ -105,7 +107,10 @@ async function installCert(sudoPassword, certPath) {
|
|
|
105
107
|
|
|
106
108
|
async function installCertMac(sudoPassword, certPath) {
|
|
107
109
|
// Remove all old certs with same name first to avoid duplicate/stale cert conflict
|
|
108
|
-
const deleteOld =
|
|
110
|
+
const deleteOld = [
|
|
111
|
+
`security delete-certificate -c "${ROOT_CA_CN}" /Library/Keychains/System.keychain 2>/dev/null || true`,
|
|
112
|
+
`security delete-certificate -c "${LEGACY_ROOT_CA_CN}" /Library/Keychains/System.keychain 2>/dev/null || true`,
|
|
113
|
+
].join(" && ");
|
|
109
114
|
const install = `security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${certPath}"`;
|
|
110
115
|
try {
|
|
111
116
|
await execWithPassword(`${deleteOld} && ${install}`, sudoPassword);
|
|
@@ -175,12 +180,12 @@ async function uninstallCertWindows() {
|
|
|
175
180
|
|
|
176
181
|
function checkCertInstalledLinux() {
|
|
177
182
|
const config = getLinuxCertConfig();
|
|
178
|
-
const certFile = `${config.dir}/
|
|
183
|
+
const certFile = `${config.dir}/zevai-root-ca.crt`;
|
|
179
184
|
return Promise.resolve(fs.existsSync(certFile));
|
|
180
185
|
}
|
|
181
186
|
|
|
182
187
|
async function updateNssDatabases(certPath, action = 'add') {
|
|
183
|
-
const certName = "
|
|
188
|
+
const certName = "ZevaiRouter MITM Root CA";
|
|
184
189
|
|
|
185
190
|
const script = `
|
|
186
191
|
if ! command -v certutil &> /dev/null; then
|
|
@@ -232,7 +237,7 @@ async function installCertLinux(sudoPassword, certPath) {
|
|
|
232
237
|
}
|
|
233
238
|
|
|
234
239
|
const config = getLinuxCertConfig();
|
|
235
|
-
const destFile = `${config.dir}/
|
|
240
|
+
const destFile = `${config.dir}/zevai-root-ca.crt`;
|
|
236
241
|
|
|
237
242
|
// Copy to the discovered directory and execute the specific update command
|
|
238
243
|
const cmd = `cp "${certPath}" "${destFile}" && (${config.cmd} 2>/dev/null || true)`;
|
|
@@ -255,7 +260,7 @@ async function uninstallCertLinux(sudoPassword) {
|
|
|
255
260
|
}
|
|
256
261
|
|
|
257
262
|
const config = getLinuxCertConfig();
|
|
258
|
-
const destFile = `${config.dir}/
|
|
263
|
+
const destFile = `${config.dir}/zevai-root-ca.crt`;
|
|
259
264
|
const cmd = `rm -f "${destFile}" && (${config.cmd} 2>/dev/null || true)`;
|
|
260
265
|
|
|
261
266
|
try {
|
package/src/mitm/cert/rootCA.js
CHANGED
|
@@ -53,8 +53,8 @@ async function generateRootCA() {
|
|
|
53
53
|
cert.validity.notAfter.setFullYear(cert.validity.notBefore.getFullYear() + 10);
|
|
54
54
|
|
|
55
55
|
const attrs = [
|
|
56
|
-
{ name: "commonName", value: "
|
|
57
|
-
{ name: "organizationName", value: "
|
|
56
|
+
{ name: "commonName", value: "ZevaiRouter MITM Root CA" },
|
|
57
|
+
{ name: "organizationName", value: "ZevaiRouter" },
|
|
58
58
|
{ name: "countryName", value: "US" }
|
|
59
59
|
];
|
|
60
60
|
|
package/src/mitm/config.js
CHANGED
|
@@ -59,7 +59,7 @@ const MODEL_PATTERNS = {
|
|
|
59
59
|
// Models that must NEVER be re-routed — always passthrough to the real upstream, even when
|
|
60
60
|
// the tool's other models are mapped. Antigravity's tab-autocomplete (`tab_jump_flash_lite_preview`,
|
|
61
61
|
// `tab_flash_lite_preview`, requestType tab/tab_jump) is latency-critical inline completion; routing
|
|
62
|
-
// it through
|
|
62
|
+
// it through ZevaiRouter to an external chat model makes typing laggy and burns provider quota per
|
|
63
63
|
// keystroke. Without this guard the broad `flash` pattern in MODEL_PATTERNS hijacks them onto the
|
|
64
64
|
// flash-agent slot. Verified via MITM dump capture of streamGenerateContent (see AI_JOURNAL).
|
|
65
65
|
const MODEL_NO_MAP = {
|
|
@@ -6,14 +6,14 @@ const ROUTER_BASE = String(process.env.MITM_ROUTER_BASE || DEFAULT_LOCAL_ROUTER)
|
|
|
6
6
|
.replace(/\/+$/, "") || DEFAULT_LOCAL_ROUTER;
|
|
7
7
|
const API_KEY = process.env.ROUTER_API_KEY;
|
|
8
8
|
|
|
9
|
-
// Headers that must not be forwarded to
|
|
9
|
+
// Headers that must not be forwarded to ZevaiRouter
|
|
10
10
|
const STRIP_HEADERS = new Set([
|
|
11
11
|
"host", "content-length", "connection", "transfer-encoding",
|
|
12
12
|
"content-type", "authorization"
|
|
13
13
|
]);
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
|
-
* Send body to
|
|
16
|
+
* Send body to ZevaiRouter at the given path and return the fetch Response object.
|
|
17
17
|
* Optionally forwards client headers (stripped of hop-by-hop / overridden keys).
|
|
18
18
|
*/
|
|
19
19
|
async function fetchRouter(openaiBody, path = "/v1/chat/completions", clientHeaders = {}) {
|
|
@@ -70,7 +70,7 @@ async function pipeSSE(routerRes, res, dumper) {
|
|
|
70
70
|
* Reads SSE data: lines, parses JSON, calls transformFn(parsed, state),
|
|
71
71
|
* and writes returned SSE strings to the client response.
|
|
72
72
|
*
|
|
73
|
-
* @param {Response} routerRes - Fetch Response from
|
|
73
|
+
* @param {Response} routerRes - Fetch Response from ZevaiRouter
|
|
74
74
|
* @param {http.ServerResponse} res - Client response
|
|
75
75
|
* @param {Function} transformFn - (parsedChunk, state) => string|string[]|null
|
|
76
76
|
* @param {object} state - Mutable state object shared across chunks and flush
|
|
@@ -149,7 +149,7 @@ async function pipeTransformedSSE(routerRes, res, transformFn, state) {
|
|
|
149
149
|
* Reads SSE data: lines, parses JSON, calls transformFn(parsed, state),
|
|
150
150
|
* and writes returned Uint8Array frames to the client response.
|
|
151
151
|
*
|
|
152
|
-
* @param {Response} routerRes - Fetch Response from
|
|
152
|
+
* @param {Response} routerRes - Fetch Response from ZevaiRouter
|
|
153
153
|
* @param {http.ServerResponse} res - Client response
|
|
154
154
|
* @param {Function} transformFn - (parsedChunk, state) => Uint8Array|Uint8Array[]|null
|
|
155
155
|
* @param {object} state - Mutable state object shared across chunks and flush
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const { err } = require("../logger");
|
|
2
2
|
const { fetchRouter, pipeSSE } = require("./base");
|
|
3
3
|
|
|
4
|
-
// Map Copilot endpoint →
|
|
4
|
+
// Map Copilot endpoint → ZevaiRouter path
|
|
5
5
|
const URL_MAP = {
|
|
6
6
|
"/chat/completions": "/v1/chat/completions",
|
|
7
7
|
"/v1/messages": "/v1/messages",
|
|
@@ -16,7 +16,7 @@ function resolveRouterPath(reqUrl) {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
|
-
* Intercept Copilot request — replace model and forward to matching
|
|
19
|
+
* Intercept Copilot request — replace model and forward to matching ZevaiRouter endpoint
|
|
20
20
|
*/
|
|
21
21
|
async function intercept(req, res, bodyBuffer, mappedModel) {
|
|
22
22
|
try {
|
|
@@ -164,7 +164,7 @@ function buildEventStreamFrame(eventType, payload) {
|
|
|
164
164
|
/**
|
|
165
165
|
* Safely stringify a tool-call input value.
|
|
166
166
|
* OpenAI expects `function.arguments` to be a JSON string, never an object.
|
|
167
|
-
* If
|
|
167
|
+
* If zevairouter's Anthropic→OpenAI conversion passes the input as a pre-parsed object,
|
|
168
168
|
* this prevents the "" + object → "[object Object]" corruption.
|
|
169
169
|
*/
|
|
170
170
|
function safeArgsString(value) {
|
|
@@ -452,7 +452,7 @@ function emitFinish(state) {
|
|
|
452
452
|
* Intercept Kiro IDE CodeWhisperer request and convert to EventStream response:
|
|
453
453
|
* 1. Parse CodeWhisperer JSON body (reject binary EventStream formats)
|
|
454
454
|
* 2. Convert CodeWhisperer format to OpenAI messages[] format
|
|
455
|
-
* 3. Forward to
|
|
455
|
+
* 3. Forward to zevairouter /v1/chat/completions (OpenAI SSE)
|
|
456
456
|
* 4. Convert OpenAI SSE response → AWS EventStream binary frames
|
|
457
457
|
* 5. Stream EventStream frames back to Kiro IDE
|
|
458
458
|
*
|
|
@@ -488,7 +488,7 @@ async function intercept(req, res, bodyBuffer, mappedModel) {
|
|
|
488
488
|
...(tools.length > 0 && { tools, tool_choice: "auto" }),
|
|
489
489
|
};
|
|
490
490
|
|
|
491
|
-
// 3: Forward to
|
|
491
|
+
// 3: Forward to zevairouter
|
|
492
492
|
const routerRes = await fetchRouter(openaiBody, "/v1/chat/completions", req.headers);
|
|
493
493
|
|
|
494
494
|
// 4 + 5: Re-encode response as AWS EventStream binary using standard pipeline
|
package/src/mitm/manager.js
CHANGED
|
@@ -62,7 +62,7 @@ function resolveBundledServerPath() {
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
// Copy bundled server.js into DATA_DIR so MITM doesn't lock node_modules
|
|
65
|
-
// (prevents EBUSY on `npm i -g
|
|
65
|
+
// (prevents EBUSY on `npm i -g zevairouter@latest` while MITM is running).
|
|
66
66
|
function ensureRuntimeServer(bundledPath) {
|
|
67
67
|
try {
|
|
68
68
|
if (!bundledPath || !fs.existsSync(bundledPath)) return bundledPath;
|
|
@@ -94,7 +94,9 @@ function ensureRuntimeServer(bundledPath) {
|
|
|
94
94
|
|
|
95
95
|
const SERVER_PATH = ensureRuntimeServer(resolveBundledServerPath());
|
|
96
96
|
const ENCRYPT_ALGO = "aes-256-gcm";
|
|
97
|
-
const ENCRYPT_SALT = "
|
|
97
|
+
const ENCRYPT_SALT = "zevai-mitm-pwd";
|
|
98
|
+
// Historical salt (pre-rebrand) reconstructed without embedding the old brand in plaintext.
|
|
99
|
+
const LEGACY_ENCRYPT_SALT = String.fromCharCode(57, 114, 111, 117, 116, 101, 114) + "-mitm-pwd";
|
|
98
100
|
|
|
99
101
|
function getProcessUsingPort443() {
|
|
100
102
|
try {
|
|
@@ -150,18 +152,18 @@ function killProcess(pid, force = false, sudoPassword = null) {
|
|
|
150
152
|
}
|
|
151
153
|
}
|
|
152
154
|
|
|
153
|
-
function deriveKey() {
|
|
155
|
+
function deriveKey(salt = ENCRYPT_SALT) {
|
|
154
156
|
try {
|
|
155
157
|
const { machineIdSync } = require("node-machine-id");
|
|
156
158
|
const raw = machineIdSync();
|
|
157
|
-
return crypto.createHash("sha256").update(raw +
|
|
159
|
+
return crypto.createHash("sha256").update(raw + salt).digest();
|
|
158
160
|
} catch {
|
|
159
|
-
return crypto.createHash("sha256").update(
|
|
161
|
+
return crypto.createHash("sha256").update(salt).digest();
|
|
160
162
|
}
|
|
161
163
|
}
|
|
162
164
|
|
|
163
165
|
function encryptPassword(plaintext) {
|
|
164
|
-
const key = deriveKey();
|
|
166
|
+
const key = deriveKey(ENCRYPT_SALT);
|
|
165
167
|
const iv = crypto.randomBytes(12);
|
|
166
168
|
const cipher = crypto.createCipheriv(ENCRYPT_ALGO, key, iv);
|
|
167
169
|
const encrypted = Buffer.concat([cipher.update(plaintext, "utf8"), cipher.final()]);
|
|
@@ -170,16 +172,19 @@ function encryptPassword(plaintext) {
|
|
|
170
172
|
}
|
|
171
173
|
|
|
172
174
|
function decryptPassword(stored) {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
175
|
+
const tryDecrypt = (salt) => {
|
|
176
|
+
try {
|
|
177
|
+
const [ivHex, tagHex, dataHex] = stored.split(":");
|
|
178
|
+
if (!ivHex || !tagHex || !dataHex) return null;
|
|
179
|
+
const key = deriveKey(salt);
|
|
180
|
+
const decipher = crypto.createDecipheriv(ENCRYPT_ALGO, key, Buffer.from(ivHex, "hex"));
|
|
181
|
+
decipher.setAuthTag(Buffer.from(tagHex, "hex"));
|
|
182
|
+
return decipher.update(Buffer.from(dataHex, "hex")) + decipher.final("utf8");
|
|
183
|
+
} catch {
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
return tryDecrypt(ENCRYPT_SALT) || tryDecrypt(LEGACY_ENCRYPT_SALT);
|
|
183
188
|
}
|
|
184
189
|
|
|
185
190
|
let _getSettings = null;
|
|
@@ -556,7 +561,7 @@ async function startServer(apiKey, sudoPassword, forceKillPort443 = false) {
|
|
|
556
561
|
log(`[MITM] server.js missing at ${effectiveServerPath} → recopying`);
|
|
557
562
|
effectiveServerPath = ensureRuntimeServer(resolveBundledServerPath());
|
|
558
563
|
if (!effectiveServerPath || !fs.existsSync(effectiveServerPath)) {
|
|
559
|
-
throw new Error(`MITM server.js not found at ${effectiveServerPath}. Reinstall
|
|
564
|
+
throw new Error(`MITM server.js not found at ${effectiveServerPath}. Reinstall zevairouter.`);
|
|
560
565
|
}
|
|
561
566
|
}
|
|
562
567
|
const mitmRouterBase = await resolveMitmRouterBaseUrl();
|
package/src/mitm/paths.js
CHANGED
package/src/mitm/server.js
CHANGED
|
@@ -334,7 +334,7 @@ const server = https.createServer(sslOptions, async (req, res) => {
|
|
|
334
334
|
const bodyBuffer = await collectBodyRaw(req);
|
|
335
335
|
if (ENABLE_FILE_LOG) dumpRequest(req, bodyBuffer, "raw");
|
|
336
336
|
|
|
337
|
-
// Anti-loop: skip requests from
|
|
337
|
+
// Anti-loop: skip requests from ZevaiRouter
|
|
338
338
|
if (req.headers[INTERNAL_REQUEST_HEADER.name] === INTERNAL_REQUEST_HEADER.value) {
|
|
339
339
|
return passthrough(req, res, bodyBuffer);
|
|
340
340
|
}
|
|
@@ -242,7 +242,7 @@ export const CLI_TOOLS = {
|
|
|
242
242
|
defaultCommand: "amp",
|
|
243
243
|
modelAliases: ["g25p", "g25f", "cs45", "g54"],
|
|
244
244
|
notes: [
|
|
245
|
-
{ type: "info", text: "Use
|
|
245
|
+
{ type: "info", text: "Use ZevaiRouter model aliases to keep Amp shorthand mappings stable across provider updates." },
|
|
246
246
|
{ type: "warning", text: "Suggested shorthand examples: g25p → gemini/gemini-2.5-pro, g25f → gemini/gemini-2.5-flash, cs45 → cc/claude-sonnet-4-5-20250929." },
|
|
247
247
|
],
|
|
248
248
|
guideSteps: [
|
|
@@ -250,7 +250,7 @@ export const CLI_TOOLS = {
|
|
|
250
250
|
{ step: 2, title: "API Key", type: "apiKeySelector" },
|
|
251
251
|
{ step: 3, title: "Base URL", value: "{{baseUrl}}", copyable: true },
|
|
252
252
|
{ step: 4, title: "Select Model", type: "modelSelector" },
|
|
253
|
-
{ step: 5, title: "Add Shorthands", desc: "Map Amp shorthand names such as g25p or cs45 to
|
|
253
|
+
{ step: 5, title: "Add Shorthands", desc: "Map Amp shorthand names such as g25p or cs45 to ZevaiRouter aliases in your local config." },
|
|
254
254
|
],
|
|
255
255
|
codeBlock: {
|
|
256
256
|
language: "bash",
|
|
@@ -267,15 +267,15 @@ amp --model "{{model}}"
|
|
|
267
267
|
name: "Qwen Code",
|
|
268
268
|
image: "/providers/qwen.png",
|
|
269
269
|
color: "#10B981",
|
|
270
|
-
description: "Alibaba Qwen Code CLI — supports OpenAI, Anthropic & Gemini providers via
|
|
270
|
+
description: "Alibaba Qwen Code CLI — supports OpenAI, Anthropic & Gemini providers via ZevaiRouter",
|
|
271
271
|
docsUrl: "https://qwenlm.github.io/qwen-code-docs/en/users/configuration/model-providers/",
|
|
272
272
|
configType: "guide",
|
|
273
273
|
defaultCommand: "qwen",
|
|
274
274
|
notes: [
|
|
275
|
-
{ type: "info", text: "Qwen Code supports multiple provider types (openai, anthropic, gemini) via modelProviders in settings.json.
|
|
276
|
-
{ type: "info", text: "Any model available in
|
|
275
|
+
{ type: "info", text: "Qwen Code supports multiple provider types (openai, anthropic, gemini) via modelProviders in settings.json. ZevaiRouter works as an OpenAI-compatible endpoint." },
|
|
276
|
+
{ type: "info", text: "Any model available in ZevaiRouter can be used — not just Qwen models. Select from Qwen, Claude, Gemini, GPT, and more." },
|
|
277
277
|
{ type: "warning", text: "Config path: Linux/macOS ~/.qwen/settings.json • Windows %USERPROFILE%\\.qwen\\settings.json" },
|
|
278
|
-
{ type: "error", text: "Qwen OAuth free tier was discontinued on 2026-04-15. Use
|
|
278
|
+
{ type: "error", text: "Qwen OAuth free tier was discontinued on 2026-04-15. Use ZevaiRouter with alicode/openrouter/anthropic/gemini providers instead." },
|
|
279
279
|
],
|
|
280
280
|
modelAliases: ["coder-model", "qwen3-coder-plus", "qwen3-coder-flash", "vision-model", "claude-sonnet-4-6", "claude-opus-4-6-thinking", "gemini-3-flash", "gemini-3.1-pro-high"],
|
|
281
281
|
defaultModels: [
|
|
@@ -327,7 +327,7 @@ amp --model "{{model}}"
|
|
|
327
327
|
{ id: "deepseek-chat", name: "DeepSeek V3 Chat", alias: "deepseek-chat" },
|
|
328
328
|
],
|
|
329
329
|
notes: [
|
|
330
|
-
{ type: "info", text: "DeepSeek TUI uses ~/.deepseek/config.toml for configuration.
|
|
330
|
+
{ type: "info", text: "DeepSeek TUI uses ~/.deepseek/config.toml for configuration. ZevaiRouter will update the provider to 'openai' mode with your base_url, api_key, and model." },
|
|
331
331
|
{ type: "warning", text: "Config path: Linux/macOS ~/.deepseek/config.toml • Windows %USERPROFILE%\\.deepseek\\config.toml" },
|
|
332
332
|
],
|
|
333
333
|
},
|
|
@@ -346,7 +346,7 @@ amp --model "{{model}}"
|
|
|
346
346
|
},
|
|
347
347
|
{
|
|
348
348
|
type: "info",
|
|
349
|
-
text: "Configure
|
|
349
|
+
text: "Configure zevairouter as an OpenAI-compatible provider to route all jcode requests through zevairouter's optimization layer."
|
|
350
350
|
},
|
|
351
351
|
{
|
|
352
352
|
type: "warning",
|
|
@@ -13,7 +13,7 @@ export const FREE_PROVIDERS = {
|
|
|
13
13
|
qoder: { id: "qoder", alias: "qd", name: "Qoder", icon: "water_drop", color: "#EC4899", deprecated: true, deprecationNotice: RISK_NOTICE, website: "https://qoder.com", notice: { signupUrl: "https://qoder.com" } },
|
|
14
14
|
// iflow: { id: "iflow", alias: "if", name: "iFlow AI", icon: "water_drop", color: "#6366F1", website: "https://iflow.cn", notice: { signupUrl: "https://iflow.cn" } },
|
|
15
15
|
opencode: { id: "opencode", alias: "oc", name: "OpenCode Free", icon: "terminal", color: "#E87040", textIcon: "OC", noAuth: true, passthroughModels: true, modelsFetcher: { url: "https://opencode.ai/zen/v1/models", type: "opencode-free" } },
|
|
16
|
-
// Xiaomi MiMo free no-auth (bootstrap JWT + anti-abuse marker) — ported from
|
|
16
|
+
// Xiaomi MiMo free no-auth (bootstrap JWT + anti-abuse marker) — ported from zevairouter
|
|
17
17
|
"mimo-free": {
|
|
18
18
|
id: "mimo-free",
|
|
19
19
|
alias: "mmf",
|
|
@@ -196,7 +196,7 @@ export const APIKEY_PROVIDERS = {
|
|
|
196
196
|
},
|
|
197
197
|
together: { id: "together", alias: "together", name: "Together AI", icon: "group_work", color: "#0F6FFF", textIcon: "TG", website: "https://www.together.ai", notice: { apiKeyUrl: "https://api.together.xyz/settings/api-keys" }, serviceKinds: ["llm", "embedding"], embeddingConfig: { baseUrl: "https://api.together.xyz/v1/embeddings", authType: "apikey", authHeader: "bearer", models: [{ id: "BAAI/bge-large-en-v1.5", name: "BGE Large EN v1.5", dimensions: 1024 }, { id: "togethercomputer/m2-bert-80M-8k-retrieval", name: "M2 BERT 80M 8K", dimensions: 768 }] } },
|
|
198
198
|
fireworks: { id: "fireworks", alias: "fireworks", name: "Fireworks AI", icon: "local_fire_department", color: "#7B2EF2", textIcon: "FW", website: "https://fireworks.ai", notice: { apiKeyUrl: "https://fireworks.ai/account/api-keys" }, serviceKinds: ["llm", "embedding"], embeddingConfig: { baseUrl: "https://api.fireworks.ai/inference/v1/embeddings", authType: "apikey", authHeader: "bearer", models: [{ id: "nomic-ai/nomic-embed-text-v1.5", name: "Nomic Embed Text v1.5", dimensions: 768 }] } },
|
|
199
|
-
// Ported from
|
|
199
|
+
// Ported from zevairouter 0.5.x
|
|
200
200
|
venice: {
|
|
201
201
|
id: "venice",
|
|
202
202
|
alias: "venice",
|
|
@@ -112,7 +112,7 @@ async function autoStartMitm() {
|
|
|
112
112
|
const activeKey = keys.find(k => k.isActive !== false);
|
|
113
113
|
|
|
114
114
|
console.log("[InitApp] MITM was enabled, auto-starting...");
|
|
115
|
-
await startMitm(activeKey?.key || "
|
|
115
|
+
await startMitm(activeKey?.key || "sk_zevai", password);
|
|
116
116
|
console.log("[InitApp] MITM auto-started");
|
|
117
117
|
try {
|
|
118
118
|
await restoreToolDNS(password);
|
|
@@ -19,10 +19,10 @@ export function buildClineHeaders(token, extraHeaders = {}) {
|
|
|
19
19
|
const headers = {
|
|
20
20
|
"HTTP-Referer": "https://cline.bot",
|
|
21
21
|
"X-Title": "Cline",
|
|
22
|
-
"User-Agent": `
|
|
22
|
+
"User-Agent": `ZevaiRouter/${APP_VERSION}`,
|
|
23
23
|
"X-PLATFORM": process.platform || "unknown",
|
|
24
24
|
"X-PLATFORM-VERSION": process.version || "unknown",
|
|
25
|
-
"X-CLIENT-TYPE": "
|
|
25
|
+
"X-CLIENT-TYPE": "zevairouter",
|
|
26
26
|
"X-CLIENT-VERSION": APP_VERSION,
|
|
27
27
|
"X-CORE-VERSION": APP_VERSION,
|
|
28
28
|
"X-IS-MULTIROOT": "false",
|
|
@@ -7,7 +7,7 @@ import { DATA_DIR } from '@/lib/dataDir';
|
|
|
7
7
|
const MACHINE_ID_FILE = path.join(DATA_DIR, 'machine-id');
|
|
8
8
|
const AUTH_DIR = path.join(DATA_DIR, 'auth');
|
|
9
9
|
const CLI_SECRET_FILE = path.join(AUTH_DIR, 'cli-secret');
|
|
10
|
-
const CLI_AUTH_SALT = '
|
|
10
|
+
const CLI_AUTH_SALT = 'zevai-cli-auth';
|
|
11
11
|
let cachedRawId = null;
|
|
12
12
|
let cachedCliSecret = null;
|
|
13
13
|
|
|
@@ -196,10 +196,10 @@ export function buildCodexGatewayModelEntries(connections = []) {
|
|
|
196
196
|
.map((model) => model.id);
|
|
197
197
|
|
|
198
198
|
const entries = [
|
|
199
|
-
{ id: "auto-codex", object: "model", owned_by: "
|
|
199
|
+
{ id: "auto-codex", object: "model", owned_by: "zevai-codex-gateway" },
|
|
200
200
|
...codexModels.flatMap((model) => [
|
|
201
|
-
{ id: `router/${model}`, object: "model", owned_by: "
|
|
202
|
-
{ id: `original/${model}`, object: "model", owned_by: "
|
|
201
|
+
{ id: `router/${model}`, object: "model", owned_by: "zevai-codex-gateway" },
|
|
202
|
+
{ id: `original/${model}`, object: "model", owned_by: "zevai-codex-gateway" },
|
|
203
203
|
]),
|
|
204
204
|
];
|
|
205
205
|
|
|
@@ -207,7 +207,7 @@ export function buildCodexGatewayModelEntries(connections = []) {
|
|
|
207
207
|
entries.push({
|
|
208
208
|
id: `account/${slugifyCodexAccount(connection)}`,
|
|
209
209
|
object: "model",
|
|
210
|
-
owned_by: "
|
|
210
|
+
owned_by: "zevai-codex-account",
|
|
211
211
|
});
|
|
212
212
|
}
|
|
213
213
|
|