@amir83nasr/10router 0.1.15 → 0.1.17
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/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +6 -7
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +16 -16
- package/.next/routes-manifest.json +0 -6
- package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/combos/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page.js +2 -2
- package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/profile/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +3 -3
- package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/providers/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +2 -2
- package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/quota/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/usage/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error/page.js +2 -2
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +6 -6
- package/.next/server/app/_not-found.segments/_full.segment.rsc +6 -6
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/auth/login/route.js +1 -1
- package/.next/server/app/api/auth/logout/route.js +1 -1
- package/.next/server/app/api/auth/oidc/callback/route.js +1 -1
- package/.next/server/app/api/auth/oidc/start/route.js +1 -1
- package/.next/server/app/api/auth/oidc/test/route.js +1 -1
- package/.next/server/app/api/auth/reset-password/route.js +1 -1
- package/.next/server/app/api/auth/saml/acs/route.js +1 -1
- package/.next/server/app/api/auth/saml/metadata/route.js +2 -2
- package/.next/server/app/api/auth/saml/start/route.js +1 -1
- package/.next/server/app/api/auth/saml/test/route.js +1 -1
- package/.next/server/app/api/auth/status/route.js +2 -2
- package/.next/server/app/api/changelog/route.js +1 -1
- package/.next/server/app/api/cli-tools/all-statuses/route.js +1 -1
- package/.next/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
- package/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
- package/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
- package/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
- package/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
- package/.next/server/app/api/cli-tools/cowork-settings/route.js +1 -1
- package/.next/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
- package/.next/server/app/api/cli-tools/dsh-settings/route.js +1 -1
- package/.next/server/app/api/cli-tools/opencode-settings/route.js +1 -1
- package/.next/server/app/api/combos/[id]/route.js +1 -1
- package/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/combos/route.js +1 -1
- package/.next/server/app/api/headroom/extras/route.js +1 -1
- package/.next/server/app/api/headroom/proxy/[...path]/route.js +1 -1
- package/.next/server/app/api/headroom/restart/route.js +1 -1
- package/.next/server/app/api/headroom/start/route.js +1 -1
- package/.next/server/app/api/headroom/status/route.js +1 -1
- package/.next/server/app/api/headroom/stop/route.js +1 -1
- package/.next/server/app/api/health/route.js +1 -1
- package/.next/server/app/api/init/route.js +1 -1
- package/.next/server/app/api/keys/[id]/route.js +1 -1
- package/.next/server/app/api/keys/route.js +1 -1
- package/.next/server/app/api/locale/route.js +1 -1
- package/.next/server/app/api/mcp/[plugin]/message/route.js +1 -1
- package/.next/server/app/api/mcp/[plugin]/sse/route.js +2 -2
- package/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
- package/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
- package/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
- package/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
- package/.next/server/app/api/media-providers/tts/voices/route.js +1 -1
- package/.next/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
- package/.next/server/app/api/models/alias/route.js +1 -1
- package/.next/server/app/api/models/availability/route.js +1 -1
- package/.next/server/app/api/models/catalog-sync/route.js +1 -1
- package/.next/server/app/api/models/catalog-sync/route.js.nft.json +1 -1
- package/.next/server/app/api/models/custom/route.js +1 -1
- package/.next/server/app/api/models/custom/route.js.nft.json +1 -1
- package/.next/server/app/api/models/disabled/route.js +1 -1
- package/.next/server/app/api/models/route.js +1 -1
- package/.next/server/app/api/models/route.js.nft.json +1 -1
- package/.next/server/app/api/models/test/route.js +1 -1
- package/.next/server/app/api/models/test/route.js.nft.json +1 -1
- package/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
- package/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/.next/server/app/api/oauth/codex/bulk-import/route.js +1 -1
- package/.next/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
- package/.next/server/app/api/oauth/codex/import-token/route.js +1 -1
- package/.next/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
- package/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
- package/.next/server/app/api/oauth/cursor/import/route.js +1 -1
- package/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
- package/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
- package/.next/server/app/api/oauth/grok-cli/bulk-import/route.js +1 -1
- package/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
- package/.next/server/app/api/oauth/xiaomi-mimo/api-key/route.js +1 -1
- package/.next/server/app/api/oauth/xiaomi-mimo/auto-import/route.js +2 -2
- package/.next/server/app/api/pricing/route.js +1 -1
- package/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
- package/.next/server/app/api/provider-nodes/route.js +1 -1
- package/.next/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/.next/server/app/api/provider-nodes/validate/route.js +1 -1
- package/.next/server/app/api/providers/[id]/models/route.js +1 -1
- package/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/.next/server/app/api/providers/[id]/route.js +1 -1
- package/.next/server/app/api/providers/[id]/test/route.js +1 -1
- package/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
- package/.next/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
- package/.next/server/app/api/providers/client/route.js +1 -1
- package/.next/server/app/api/providers/client/route.js.nft.json +1 -1
- package/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
- package/.next/server/app/api/providers/route.js +1 -1
- package/.next/server/app/api/providers/route.js.nft.json +1 -1
- package/.next/server/app/api/providers/suggested-models/route.js +1 -1
- package/.next/server/app/api/providers/test-batch/route.js +1 -1
- package/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/.next/server/app/api/providers/validate/route.js +1 -1
- package/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
- package/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
- package/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js +2 -2
- package/.next/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
- package/.next/server/app/api/proxy-pools/route.js +1 -1
- package/.next/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
- package/.next/server/app/api/pxpipe/health/route.js +2 -2
- package/.next/server/app/api/pxpipe/install/route.js +1 -1
- package/.next/server/app/api/pxpipe/logs/route.js +1 -1
- package/.next/server/app/api/pxpipe/restart/route.js +1 -1
- package/.next/server/app/api/pxpipe/start/route.js +2 -2
- package/.next/server/app/api/pxpipe/stats/route.js +1 -1
- package/.next/server/app/api/pxpipe/status/route.js +1 -1
- package/.next/server/app/api/pxpipe/stop/route.js +1 -1
- package/.next/server/app/api/settings/database/route.js +1 -1
- package/.next/server/app/api/settings/proxy-test/route.js +1 -1
- package/.next/server/app/api/settings/require-login/route.js +1 -1
- package/.next/server/app/api/settings/route.js +1 -1
- package/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/.next/server/app/api/shutdown/route.js +1 -1
- package/.next/server/app/api/tags/route.js +1 -1
- package/.next/server/app/api/translator/console-logs/route.js +1 -1
- package/.next/server/app/api/translator/console-logs/route.js.nft.json +1 -1
- package/.next/server/app/api/translator/console-logs/stream/route.js +2 -2
- package/.next/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
- package/.next/server/app/api/translator/load/route.js +1 -1
- package/.next/server/app/api/translator/save/route.js +1 -1
- package/.next/server/app/api/translator/send/route.js +1 -1
- package/.next/server/app/api/translator/send/route.js.nft.json +1 -1
- package/.next/server/app/api/translator/translate/route.js +1 -1
- package/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/.next/server/app/api/tunnel/disable/route.js +1 -1
- package/.next/server/app/api/tunnel/disable/route.js.nft.json +1 -1
- package/.next/server/app/api/tunnel/enable/route.js +1 -1
- package/.next/server/app/api/tunnel/enable/route.js.nft.json +1 -1
- package/.next/server/app/api/tunnel/status/route.js +1 -1
- package/.next/server/app/api/tunnel/tailscale-check/route.js +1 -1
- package/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -1
- package/.next/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
- package/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -1
- package/.next/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
- package/.next/server/app/api/tunnel/tailscale-install/route.js +2 -2
- package/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
- package/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
- package/.next/server/app/api/usage/[connectionId]/route.js +1 -1
- package/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/.next/server/app/api/usage/chart/route.js +1 -1
- package/.next/server/app/api/usage/health/route.js +1 -1
- package/.next/server/app/api/usage/history/route.js +1 -1
- package/.next/server/app/api/usage/logs/route.js +1 -1
- package/.next/server/app/api/usage/providers/route.js +1 -1
- package/.next/server/app/api/usage/providers/route.js.nft.json +1 -1
- package/.next/server/app/api/usage/request-details/route.js +1 -1
- package/.next/server/app/api/usage/request-logs/route.js +1 -1
- package/.next/server/app/api/usage/stats/route.js +1 -1
- package/.next/server/app/api/usage/stream/route.js +2 -2
- package/.next/server/app/api/v1/api/chat/route.js +1 -1
- package/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/audio/speech/route.js +1 -1
- package/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
- package/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/audio/voices/route.js +1 -1
- package/.next/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/chat/completions/route.js +1 -1
- package/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/embeddings/route.js +1 -1
- package/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/images/generations/route.js +2 -2
- package/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
- package/.next/server/app/api/v1/messages/route.js +1 -1
- package/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/models/[...model]/route.js +1 -1
- package/.next/server/app/api/v1/models/[...model]/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/models/info/route.js +1 -1
- package/.next/server/app/api/v1/models/info/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/models/route.js +1 -1
- package/.next/server/app/api/v1/models/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/responses/compact/route.js +1 -1
- package/.next/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/responses/route.js +1 -1
- package/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/route.js +1 -1
- package/.next/server/app/api/v1/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/search/route.js +1 -1
- package/.next/server/app/api/v1/search/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/systemone/route.js +1 -1
- package/.next/server/app/api/v1/systemone/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/videos/[id]/route.js +1 -1
- package/.next/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/videos/edits/route.js +1 -1
- package/.next/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/videos/extensions/route.js +1 -1
- package/.next/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/videos/generations/route.js +1 -1
- package/.next/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/web/fetch/route.js +1 -1
- package/.next/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
- package/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
- package/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/v1beta/models/route.js +1 -1
- package/.next/server/app/api/v1beta/models/route.js.nft.json +1 -1
- package/.next/server/app/api/version/route.js +1 -1
- package/.next/server/app/api/version/shutdown/route.js +1 -1
- package/.next/server/app/api/version/update/route.js +1 -1
- package/.next/server/app/callback/page.js +1 -1
- package/.next/server/app/callback/page.js.nft.json +1 -1
- package/.next/server/app/callback/page_client-reference-manifest.js +1 -1
- package/.next/server/app/callback.html +1 -1
- package/.next/server/app/callback.rsc +6 -6
- package/.next/server/app/callback.segments/_full.segment.rsc +6 -6
- package/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/dashboard/cli-tools.html +1 -1
- package/.next/server/app/dashboard/cli-tools.rsc +8 -8
- package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +8 -8
- package/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/combos.html +1 -1
- package/.next/server/app/dashboard/combos.rsc +8 -8
- package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/combos.segments/_full.segment.rsc +8 -8
- package/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/endpoint.html +1 -1
- package/.next/server/app/dashboard/endpoint.rsc +8 -8
- package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +8 -8
- package/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/media-providers/systemone.html +1 -1
- package/.next/server/app/dashboard/media-providers/systemone.rsc +8 -8
- package/.next/server/app/dashboard/media-providers/systemone.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/systemone/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/media-providers/systemone.segments/_full.segment.rsc +8 -8
- package/.next/server/app/dashboard/media-providers/systemone.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/profile.html +1 -1
- package/.next/server/app/dashboard/profile.rsc +8 -8
- package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/profile.segments/_full.segment.rsc +8 -8
- package/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/providers/new.html +1 -1
- package/.next/server/app/dashboard/providers/new.rsc +8 -8
- package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +8 -8
- package/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/providers.html +1 -1
- package/.next/server/app/dashboard/providers.rsc +8 -8
- package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/providers.segments/_full.segment.rsc +8 -8
- package/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/proxy-pools.html +1 -1
- package/.next/server/app/dashboard/proxy-pools.rsc +8 -8
- package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +8 -8
- package/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/pxpipe.html +1 -1
- package/.next/server/app/dashboard/pxpipe.rsc +7 -7
- package/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +7 -7
- package/.next/server/app/dashboard/pxpipe.segments/_full.segment.rsc +7 -7
- package/.next/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/quota.html +2 -2
- package/.next/server/app/dashboard/quota.rsc +9 -9
- package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +9 -9
- package/.next/server/app/dashboard/quota.segments/_full.segment.rsc +9 -9
- package/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/settings/pricing/page.js +1 -1
- package/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
- package/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/.next/server/app/dashboard/settings/pricing.html +1 -1
- package/.next/server/app/dashboard/settings/pricing.rsc +6 -6
- package/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +6 -6
- package/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/dashboard/token-saver.html +1 -1
- package/.next/server/app/dashboard/token-saver.rsc +7 -7
- package/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +7 -7
- package/.next/server/app/dashboard/token-saver.segments/_full.segment.rsc +7 -7
- package/.next/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard/usage.html +2 -2
- package/.next/server/app/dashboard/usage.rsc +8 -8
- package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/usage.segments/_full.segment.rsc +8 -8
- package/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard.html +1 -1
- package/.next/server/app/dashboard.rsc +8 -8
- package/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard.segments/_full.segment.rsc +8 -8
- package/.next/server/app/dashboard.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +6 -6
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/index.segments/_full.segment.rsc +6 -6
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/landing/page.js +1 -1
- package/.next/server/app/landing/page.js.nft.json +1 -1
- package/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/.next/server/app/landing.html +1 -1
- package/.next/server/app/landing.rsc +7 -7
- package/.next/server/app/landing.segments/_full.segment.rsc +7 -7
- package/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +7 -7
- package/.next/server/app/login/page.js +1 -1
- package/.next/server/app/login/page.js.nft.json +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +1 -1
- package/.next/server/app/login.rsc +6 -6
- package/.next/server/app/login.segments/_full.segment.rsc +6 -6
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/manifest.webmanifest/route.js +1 -1
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +6 -7
- package/.next/server/chunks/1018.js +1 -0
- package/.next/server/chunks/1412.js +1 -1
- package/.next/server/chunks/1564.js +1 -1
- package/.next/server/chunks/1649.js +1 -0
- package/.next/server/chunks/1751.js +1 -0
- package/.next/server/chunks/1842.js +1 -0
- package/.next/server/chunks/2143.js +1 -1
- package/.next/server/chunks/2282.js +8 -10
- package/.next/server/chunks/{2706.js → 2338.js} +1 -1
- package/.next/server/chunks/2339.js +1 -1
- package/.next/server/chunks/2355.js +1 -0
- package/.next/server/chunks/2531.js +1 -0
- package/.next/server/chunks/2801.js +1 -1
- package/.next/server/chunks/31.js +1 -0
- package/.next/server/chunks/3671.js +1 -0
- package/.next/server/chunks/4301.js +1 -1
- package/.next/server/chunks/4364.js +1 -1
- package/.next/server/chunks/4915.js +1 -1
- package/.next/server/chunks/537.js +5 -9
- package/.next/server/chunks/6343.js +12 -12
- package/.next/server/chunks/6617.js +9 -0
- package/.next/server/chunks/6823.js +1 -1
- package/.next/server/chunks/6971.js +1 -0
- package/.next/server/chunks/7019.js +2 -2
- package/.next/server/chunks/7156.js +1 -1
- package/.next/server/chunks/7314.js +1 -0
- package/.next/server/chunks/7337.js +1 -0
- package/.next/server/chunks/7459.js +3 -3
- package/.next/server/chunks/7591.js +1 -0
- package/.next/server/chunks/7904.js +1 -0
- package/.next/server/chunks/8567.js +1 -1
- package/.next/server/chunks/8923.js +1 -1
- package/.next/server/chunks/9287.js +1 -1
- package/.next/server/chunks/9429.js +1 -1
- package/.next/server/chunks/9603.js +1 -1
- package/.next/server/instrumentation.js +1 -1
- package/.next/server/instrumentation.js.nft.json +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/alTg1qNVWmX6-0j1DLgF7/_buildManifest.js +1 -0
- package/.next/static/chunks/1278-77eb0511471e063a.js +1 -0
- package/.next/static/chunks/1660-e0fb9957b437ec4a.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-361bb54d1d354b4c.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/[id]/{page-7340dad2b87640cf.js → page-a5e128afd334522f.js} +2 -2
- package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-a41e2c8e26eb5956.js +21 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/providers/page-feb4f47de991b067.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/quota/page-f718869c90907a6a.js +1 -0
- package/.next/static/chunks/app/_global-error/page-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/oidc/callback/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/oidc/start/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/oidc/test/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/reset-password/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/saml/acs/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/saml/metadata/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/saml/start/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/saml/test/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/changelog/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/all-statuses/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/claude-settings/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/codex-settings/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/cowork-settings/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/dsh-settings/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/cli-tools/opencode-settings/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/combos/[id]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/combos/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/headroom/extras/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/headroom/proxy/[...path]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/headroom/restart/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/headroom/start/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/headroom/status/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/headroom/stop/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/health/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/init/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/keys/[id]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/keys/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/locale/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/mcp/[plugin]/message/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/mcp/[plugin]/sse/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/media-providers/tts/voices/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/models/alias/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/models/availability/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/models/catalog-sync/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/models/custom/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/models/disabled/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/models/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/models/test/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/oauth/[provider]/[action]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/oauth/codex/bulk-import/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/oauth/codex/import-token/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/oauth/cursor/auto-import/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/oauth/cursor/import/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/oauth/gitlab/pat/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/oauth/grok-cli/bulk-import/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/oauth/iflow/cookie/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/oauth/xiaomi-mimo/api-key/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/oauth/xiaomi-mimo/auto-import/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/pricing/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/provider-nodes/[id]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/provider-nodes/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/provider-nodes/validate/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/providers/[id]/models/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/providers/[id]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/providers/[id]/test/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/providers/[id]/test-models/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/providers/client/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/providers/kilo/free-models/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/providers/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/providers/suggested-models/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/providers/test-batch/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/providers/validate/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/proxy-pools/[id]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/proxy-pools/[id]/test/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/proxy-pools/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/health/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/install/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/logs/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/restart/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/start/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/stats/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/status/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/pxpipe/stop/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/settings/database/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/settings/proxy-test/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/settings/require-login/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/settings/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/shutdown/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/tags/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/translator/console-logs/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/translator/console-logs/stream/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/translator/load/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/translator/save/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/translator/send/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/translator/translate/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/tunnel/disable/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/tunnel/enable/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/tunnel/status/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/tunnel/tailscale-check/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/tunnel/tailscale-disable/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/tunnel/tailscale-enable/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/tunnel/tailscale-install/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/[connectionId]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/chart/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/health/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/history/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/logs/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/providers/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/request-details/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/request-logs/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/stats/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/usage/stream/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/api/chat/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/audio/speech/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/audio/transcriptions/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/audio/voices/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/chat/completions/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/embeddings/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/images/generations/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/messages/count_tokens/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/messages/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/models/[...model]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/models/info/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/models/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/responses/compact/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/responses/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/search/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/systemone/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/videos/[id]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/videos/edits/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/videos/extensions/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/videos/generations/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1/web/fetch/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1beta/models/[...path]/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/v1beta/models/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/version/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/version/shutdown/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/api/version/update/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/landing/{page-a76ba2642bd02bf5.js → page-1c5aa0e05b21c61a.js} +1 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/app/page-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-f46617319221a4f8.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-f46617319221a4f8.js +1 -0
- package/.next/static/css/e5f3812777d2d9e9.css +1 -0
- package/CHANGELOG.md +16 -0
- package/open-sse/AGENTS.md +1 -1
- package/open-sse/config/errorConfig.js +4 -0
- package/open-sse/config/opencodeErrors.js +59 -0
- package/open-sse/config/opencodeGo.js +35 -0
- package/open-sse/config/providerModels.js +13 -0
- package/open-sse/config/providers.js +0 -11
- package/open-sse/executors/base.js +4 -1
- package/open-sse/executors/index.js +0 -3
- package/open-sse/executors/opencode-go.js +35 -103
- package/open-sse/executors/opencode-zen.js +31 -105
- package/open-sse/executors/opencode.js +40 -106
- package/open-sse/executors/opencodeShared.js +146 -0
- package/open-sse/executors/zed.js +307 -70
- package/open-sse/handlers/chatCore.js +7 -14
- package/open-sse/handlers/embeddingProviders/index.js +0 -1
- package/open-sse/handlers/imageProviders/index.js +0 -4
- package/open-sse/handlers/imageProviders/openai.js +1 -1
- package/open-sse/handlers/search/callers.js +0 -28
- package/open-sse/handlers/search/chatSearch.js +1 -57
- package/open-sse/handlers/search/normalizers.js +0 -49
- package/open-sse/handlers/sttCore.js +0 -17
- package/open-sse/handlers/ttsCore.js +1 -1
- package/open-sse/handlers/ttsProviders/genericFormats.js +0 -35
- package/open-sse/providers/registry/index.js +14 -53
- package/open-sse/providers/registry/opencode-go.js +128 -34
- package/open-sse/providers/registry/opencode-zen.js +25 -9
- package/open-sse/providers/registry/opencode.js +5 -3
- package/open-sse/services/accountFallback.js +1 -0
- package/open-sse/services/opencodeGoProbe.js +39 -0
- package/open-sse/services/provider.js +27 -0
- package/open-sse/services/usage/glm.js +6 -12
- package/open-sse/services/usage/misc.js +1 -92
- package/open-sse/services/usage/zed.js +18 -3
- package/open-sse/services/usage.js +2 -14
- package/open-sse/shared/zedAuth.js +53 -5
- package/open-sse/translator/formats/claude.js +47 -19
- package/open-sse/utils/error.js +37 -3
- package/open-sse/utils/opencodeErrors.js +63 -0
- package/open-sse/utils/opencodeFingerprint.js +122 -23
- package/open-sse/utils/opencodeFreeUsage.js +57 -12
- package/open-sse/utils/usageTracking.js +5 -3
- package/package.json +2 -2
- package/src/app/(dashboard)/dashboard/console-log/ConsoleLogClient.tsx +10 -0
- package/src/app/(dashboard)/dashboard/providers/[id]/ModelRow.tsx +14 -0
- package/src/app/(dashboard)/dashboard/providers/[id]/OpenCodeGoConnectionCard.tsx +113 -0
- package/src/app/(dashboard)/dashboard/providers/[id]/page.tsx +11 -2
- package/src/app/(dashboard)/dashboard/providers/components/ModelsCard.tsx +14 -5
- package/src/app/(dashboard)/dashboard/providers/page.tsx +33 -45
- package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.ts +0 -33
- package/src/app/api/oauth/[provider]/[action]/route.js +2 -0
- package/src/app/api/providers/[id]/models/route.js +0 -3
- package/src/app/api/providers/[id]/test/testUtils.js +18 -103
- package/src/app/api/providers/validate/route.js +9 -37
- package/src/app/api/usage/[connectionId]/route.js +1 -1
- package/src/components/app-sidebar.tsx +1 -0
- package/src/lib/modelCatalog/sync.js +2 -4
- package/src/shared/components/EditConnectionModal.tsx +1 -1
- package/src/shared/constants/cliTools.js +1 -9
- package/src/shared/constants/models.ts +2 -0
- package/src/shared/constants/ttsProviders.ts +0 -21
- package/src/shared/utils/providerIcon.ts +0 -12
- package/src/sse/services/model.ts +2 -12
- package/.next/server/app/api/media-providers/tts/minimax/voices/route.js +0 -1
- package/.next/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +0 -1
- package/.next/server/app/api/media-providers/tts/minimax/voices/route_client-reference-manifest.js +0 -1
- package/.next/server/chunks/1011.js +0 -1
- package/.next/server/chunks/1194.js +0 -1
- package/.next/server/chunks/1289.js +0 -1
- package/.next/server/chunks/1633.js +0 -1
- package/.next/server/chunks/3425.js +0 -1
- package/.next/server/chunks/4129.js +0 -1
- package/.next/server/chunks/5496.js +0 -1
- package/.next/server/chunks/5761.js +0 -1
- package/.next/server/chunks/6056.js +0 -1
- package/.next/server/chunks/7816.js +0 -1
- package/.next/server/chunks/8940.js +0 -1
- package/.next/static/8QVpvFFKxoB53L449Kgan/_buildManifest.js +0 -1
- package/.next/static/chunks/1278-5800a984ad8ad005.js +0 -1
- package/.next/static/chunks/1660-7f2e79bde5eff607.js +0 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-58a29f3cb409597a.js +0 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-fab6f4b4cccc1a6f.js +0 -21
- package/.next/static/chunks/app/(dashboard)/dashboard/providers/page-9054f870a5e0f5c6.js +0 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/quota/page-61780f0a2b494680.js +0 -1
- package/.next/static/chunks/app/_global-error/page-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/oidc/callback/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/oidc/start/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/oidc/test/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/reset-password/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/saml/acs/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/saml/metadata/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/saml/start/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/saml/test/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/changelog/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/cli-tools/all-statuses/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/cli-tools/claude-settings/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/cli-tools/codex-settings/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/cli-tools/cowork-settings/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/cli-tools/dsh-settings/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/cli-tools/opencode-settings/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/combos/[id]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/combos/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/headroom/extras/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/headroom/proxy/[...path]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/headroom/restart/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/headroom/start/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/headroom/status/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/headroom/stop/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/health/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/init/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/keys/[id]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/keys/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/locale/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/mcp/[plugin]/message/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/mcp/[plugin]/sse/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/media-providers/tts/voices/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/models/alias/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/models/availability/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/models/catalog-sync/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/models/custom/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/models/disabled/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/models/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/models/test/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/oauth/[provider]/[action]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/oauth/codex/bulk-import/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/oauth/codex/import-token/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/oauth/cursor/auto-import/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/oauth/cursor/import/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/oauth/gitlab/pat/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/oauth/grok-cli/bulk-import/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/oauth/iflow/cookie/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/oauth/xiaomi-mimo/api-key/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/oauth/xiaomi-mimo/auto-import/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/pricing/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/provider-nodes/[id]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/provider-nodes/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/provider-nodes/validate/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/providers/[id]/models/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/providers/[id]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/providers/[id]/test/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/providers/[id]/test-models/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/providers/client/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/providers/kilo/free-models/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/providers/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/providers/suggested-models/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/providers/test-batch/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/providers/validate/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/proxy-pools/[id]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/proxy-pools/[id]/test/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/proxy-pools/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/pxpipe/health/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/pxpipe/install/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/pxpipe/logs/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/pxpipe/restart/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/pxpipe/start/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/pxpipe/stats/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/pxpipe/status/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/pxpipe/stop/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/settings/database/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/settings/proxy-test/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/settings/require-login/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/settings/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/shutdown/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/tags/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/translator/console-logs/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/translator/console-logs/stream/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/translator/load/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/translator/save/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/translator/send/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/translator/translate/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/tunnel/disable/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/tunnel/enable/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/tunnel/status/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/tunnel/tailscale-check/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/tunnel/tailscale-disable/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/tunnel/tailscale-enable/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/tunnel/tailscale-install/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/[connectionId]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/chart/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/health/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/history/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/logs/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/providers/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/request-details/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/request-logs/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/stats/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/usage/stream/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/api/chat/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/audio/speech/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/audio/transcriptions/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/audio/voices/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/chat/completions/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/embeddings/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/images/generations/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/messages/count_tokens/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/messages/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/models/[...model]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/models/info/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/models/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/responses/compact/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/responses/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/search/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/systemone/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/videos/[id]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/videos/edits/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/videos/extensions/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/videos/generations/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1/web/fetch/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1beta/models/[...path]/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/v1beta/models/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/version/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/version/shutdown/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/api/version/update/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/app/page-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-9a2a13ac6b89ba91.js +0 -1
- package/.next/static/css/efaf98e3b295f727.css +0 -1
- package/open-sse/executors/xiaomi-tokenplan.js +0 -20
- package/open-sse/handlers/imageProviders/huggingface.js +0 -23
- package/open-sse/handlers/ttsProviders/minimax.js +0 -63
- package/open-sse/providers/registry/fish-audio.js +0 -31
- package/open-sse/providers/registry/glm-cn.js +0 -39
- package/open-sse/providers/registry/groq.js +0 -62
- package/open-sse/providers/registry/huggingface.js +0 -40
- package/open-sse/providers/registry/minimax-cn.js +0 -82
- package/open-sse/providers/registry/minimax.js +0 -94
- package/open-sse/providers/registry/siliconflow.js +0 -39
- package/open-sse/providers/registry/vercel-ai-gateway.js +0 -42
- package/open-sse/providers/registry/xiaomi-tokenplan.js +0 -66
- package/open-sse/providers/registry/xquik.js +0 -31
- package/open-sse/services/usage/groq.js +0 -133
- package/open-sse/services/usage/minimax.js +0 -297
- package/public/providers/fish-audio.png +0 -0
- package/public/providers/glm-cn.png +0 -0
- package/public/providers/groq.png +0 -0
- package/public/providers/huggingface.png +0 -0
- package/public/providers/minimax-cn.png +0 -0
- package/public/providers/minimax.png +0 -0
- package/public/providers/siliconflow.png +0 -0
- package/public/providers/vercel-ai-gateway.png +0 -0
- package/public/providers/vercel.png +0 -0
- package/public/providers/xiaomi-tokenplan.png +0 -0
- package/public/providers/xquik.png +0 -0
- package/src/app/api/media-providers/tts/minimax/voices/route.js +0 -126
- /package/.next/static/{8QVpvFFKxoB53L449Kgan → alTg1qNVWmX6-0j1DLgF7}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
// Helpers shared by the OpenCode executors (free lane, Go, Zen).
|
|
2
|
+
//
|
|
3
|
+
// The three lanes speak the same Responses/Chat boundary rules; only their
|
|
4
|
+
// base URLs, session scopes and auth differ. Keeping the body-shaping rules
|
|
5
|
+
// here means a fix lands once instead of three times (and cannot drift).
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
clampResponsesCallId,
|
|
9
|
+
coerceResponsesArguments,
|
|
10
|
+
coerceResponsesOutput,
|
|
11
|
+
} from "../translator/formats/responsesApi.js";
|
|
12
|
+
|
|
13
|
+
export const MAX_TOOL_NAME_LEN = 128;
|
|
14
|
+
export const MAX_SESSION_LENGTH = 256;
|
|
15
|
+
|
|
16
|
+
export function normalizeSession(value) {
|
|
17
|
+
if (typeof value !== "string") return null;
|
|
18
|
+
const normalized = value.trim();
|
|
19
|
+
if (!normalized || normalized.length > MAX_SESSION_LENGTH) return null;
|
|
20
|
+
return normalized;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** Strip the thinking suffix "model(level)" so registry lookups hit the base id. */
|
|
24
|
+
export function baseModelId(model) {
|
|
25
|
+
return String(model || "")
|
|
26
|
+
.replace(/\([^()]+\)\s*$/, "")
|
|
27
|
+
.trim();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Normalize `body.tools` into the flat Responses shape and drop hosted/nameless
|
|
32
|
+
* tools the /responses endpoint rejects.
|
|
33
|
+
*
|
|
34
|
+
* Freeform (`type: "custom"`) tools are preserved verbatim: Codex sends
|
|
35
|
+
* `apply_patch`/`exec` with a grammar in `format` and no JSON schema, and
|
|
36
|
+
* rewriting them as function tools loses that grammar — the model then calls a
|
|
37
|
+
* parameterless function the client cannot execute, breaking the tool loop.
|
|
38
|
+
*/
|
|
39
|
+
export function normalizeResponsesTools(body) {
|
|
40
|
+
if (!Array.isArray(body.tools)) return;
|
|
41
|
+
const validNames = new Set();
|
|
42
|
+
body.tools = body.tools.filter((tool) => {
|
|
43
|
+
if (!tool || typeof tool !== "object" || Array.isArray(tool)) return false;
|
|
44
|
+
|
|
45
|
+
if (tool.type === "custom") {
|
|
46
|
+
const name =
|
|
47
|
+
typeof tool.name === "string" ? tool.name.trim().slice(0, MAX_TOOL_NAME_LEN) : "";
|
|
48
|
+
if (!name || validNames.has(name)) return false;
|
|
49
|
+
tool.name = name;
|
|
50
|
+
validNames.add(name);
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const fn =
|
|
55
|
+
tool.function && typeof tool.function === "object" && !Array.isArray(tool.function)
|
|
56
|
+
? tool.function
|
|
57
|
+
: null;
|
|
58
|
+
const rawName =
|
|
59
|
+
typeof tool.name === "string" ? tool.name : typeof fn?.name === "string" ? fn.name : "";
|
|
60
|
+
const name = rawName.trim();
|
|
61
|
+
if (!name) return false;
|
|
62
|
+
const finalName = name.slice(0, MAX_TOOL_NAME_LEN);
|
|
63
|
+
// Two long names can collapse onto the same id after truncation; upstream
|
|
64
|
+
// rejects duplicate declarations, so keep the first.
|
|
65
|
+
if (validNames.has(finalName)) return false;
|
|
66
|
+
const description =
|
|
67
|
+
typeof tool.description === "string"
|
|
68
|
+
? tool.description
|
|
69
|
+
: typeof fn?.description === "string"
|
|
70
|
+
? fn.description
|
|
71
|
+
: "";
|
|
72
|
+
let parameters =
|
|
73
|
+
tool.parameters && typeof tool.parameters === "object" && !Array.isArray(tool.parameters)
|
|
74
|
+
? tool.parameters
|
|
75
|
+
: fn?.parameters && typeof fn.parameters === "object" && !Array.isArray(fn.parameters)
|
|
76
|
+
? fn.parameters
|
|
77
|
+
: { type: "object", properties: {} };
|
|
78
|
+
// Mirror the request translator: {type:"object"} without properties is rejected
|
|
79
|
+
// by strict Responses backends, so fill in the empty properties map.
|
|
80
|
+
if (parameters.type === "object" && !parameters.properties)
|
|
81
|
+
parameters = { ...parameters, properties: {} };
|
|
82
|
+
for (const k of Object.keys(tool)) delete tool[k];
|
|
83
|
+
tool.type = "function";
|
|
84
|
+
tool.name = finalName;
|
|
85
|
+
if (description) tool.description = description;
|
|
86
|
+
tool.parameters = parameters;
|
|
87
|
+
validNames.add(finalName);
|
|
88
|
+
return true;
|
|
89
|
+
});
|
|
90
|
+
if (
|
|
91
|
+
body.tool_choice &&
|
|
92
|
+
typeof body.tool_choice === "object" &&
|
|
93
|
+
!Array.isArray(body.tool_choice)
|
|
94
|
+
) {
|
|
95
|
+
// Both {type:"function"} and {type:"custom"} name a declared tool.
|
|
96
|
+
if (body.tool_choice.type === "function" || body.tool_choice.type === "custom") {
|
|
97
|
+
const n = typeof body.tool_choice.name === "string" ? body.tool_choice.name.trim() : "";
|
|
98
|
+
if (!n || !validNames.has(n)) delete body.tool_choice;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Last line of defense for native Responses clients (sourceFormat === targetFormat
|
|
105
|
+
* skips translation): coerce items in place so malformed tool payloads 400 here
|
|
106
|
+
* with a clear shape instead of upstream as InputValidationError.
|
|
107
|
+
*/
|
|
108
|
+
export function sanitizeResponsesItems(body) {
|
|
109
|
+
if (!Array.isArray(body.input)) return;
|
|
110
|
+
body.input = body.input.filter((item) => {
|
|
111
|
+
if (!item || typeof item !== "object" || Array.isArray(item)) return true;
|
|
112
|
+
// Strip prior-turn reasoning items: OpenCode's lanes route to a pooled
|
|
113
|
+
// upstream account, where reasoning `encrypted_content` cannot be validated
|
|
114
|
+
// across rotated accounts or sessions (400 "not issued to this caller").
|
|
115
|
+
// Stateless mode (store=false) then rejects the dangling item as deleted,
|
|
116
|
+
// so dropping prior reasoning keeps multi-turn tool loops working.
|
|
117
|
+
if (item.type === "reasoning") return false;
|
|
118
|
+
delete item.encrypted_content;
|
|
119
|
+
delete item.reasoning_encrypted_content;
|
|
120
|
+
if (item.type === "function_call") {
|
|
121
|
+
if (!item.name || typeof item.name !== "string" || item.name.trim() === "") return false;
|
|
122
|
+
item.name = item.name.trim().slice(0, MAX_TOOL_NAME_LEN);
|
|
123
|
+
item.call_id = clampResponsesCallId(item.call_id);
|
|
124
|
+
item.arguments = coerceResponsesArguments(item.arguments);
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
if (item.type === "function_call_output") {
|
|
128
|
+
item.call_id = clampResponsesCallId(item.call_id);
|
|
129
|
+
item.output = coerceResponsesOutput(item.output);
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
// Freeform tool calls (custom tools above): keep them paired and named, but
|
|
133
|
+
// never mint a call_id here — a regenerated id would stop matching its output.
|
|
134
|
+
if (item.type === "custom_tool_call" || item.type === "custom_tool_call_output") {
|
|
135
|
+
if (item.type === "custom_tool_call") {
|
|
136
|
+
if (!item.name || typeof item.name !== "string" || !item.name.trim()) return false;
|
|
137
|
+
item.name = item.name.trim().slice(0, MAX_TOOL_NAME_LEN);
|
|
138
|
+
}
|
|
139
|
+
if (typeof item.call_id === "string" && item.call_id) {
|
|
140
|
+
item.call_id = clampResponsesCallId(item.call_id);
|
|
141
|
+
}
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
return true;
|
|
145
|
+
});
|
|
146
|
+
}
|
|
@@ -26,6 +26,14 @@ import { openaiResponsesToOpenAIResponse } from "../translator/response/openai-r
|
|
|
26
26
|
import { ZED_HEADERS, resolveZedModels, zedLlmFetch } from "../shared/zedAuth.js";
|
|
27
27
|
import { estimateInputTokens } from "../utils/usageTracking.js";
|
|
28
28
|
import { stripHistoryForContext } from "../services/capacityAdapter.js";
|
|
29
|
+
import {
|
|
30
|
+
stripThinkingSuffix,
|
|
31
|
+
extractThinking,
|
|
32
|
+
applyThinking,
|
|
33
|
+
} from "../translator/concerns/thinkingUnified.js";
|
|
34
|
+
import { reconcileThinkingBudget } from "../translator/formats/claude.js";
|
|
35
|
+
import { DEFAULT_MAX_TOKENS } from "../config/runtimeConfig.js";
|
|
36
|
+
import { getCapabilitiesForModel } from "../providers/capabilities.js";
|
|
29
37
|
|
|
30
38
|
// Wire values for the `provider` field of POST /completions. These are NOT
|
|
31
39
|
// display names: cloud.zed.dev matches them exactly, and an unrecognized value
|
|
@@ -55,9 +63,51 @@ function normalizeZedProvider(value, model) {
|
|
|
55
63
|
return ZED_PROVIDER.openai;
|
|
56
64
|
}
|
|
57
65
|
|
|
58
|
-
|
|
66
|
+
// The shared Claude translator copies sampling fields only — thinking intent is
|
|
67
|
+
// applied later by the translator pipeline, against the executor's target
|
|
68
|
+
// format. Zed's Claude path bypasses that pipeline, so `model(high)` and
|
|
69
|
+
// reasoning_effort used to be dropped with no error.
|
|
70
|
+
//
|
|
71
|
+
// `model` keeps the client's thinking suffix here: applyThinking parses it into
|
|
72
|
+
// the budget/level override, and the cleaned id is only used on the wire.
|
|
73
|
+
function applyZedThinking(claudeRequest, sourceBody, model, raw, log) {
|
|
74
|
+
if (!raw?.supports_thinking) {
|
|
75
|
+
const intent = extractThinking(sourceBody);
|
|
76
|
+
if (intent && intent.mode !== "none") {
|
|
77
|
+
log?.warn?.(
|
|
78
|
+
"ZED",
|
|
79
|
+
`${stripThinkingSuffix(model)} does not support thinking — requested depth omitted`,
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
return claudeRequest;
|
|
83
|
+
}
|
|
84
|
+
// No early return on a missing intent: the depth may come from the model
|
|
85
|
+
// suffix alone (`claude-sonnet-4.5(high)`) with no body field to extract.
|
|
86
|
+
applyThinking(FORMATS.CLAUDE, model, claudeRequest, "zed", extractThinking(sourceBody));
|
|
87
|
+
const ceiling =
|
|
88
|
+
Number(raw?.max_output_tokens ?? raw?.maxOutputTokens) ||
|
|
89
|
+
getCapabilitiesForModel("zed", stripThinkingSuffix(model)).maxOutput ||
|
|
90
|
+
DEFAULT_MAX_TOKENS;
|
|
91
|
+
// The shared translator clamps against provider capabilities, not Zed's live
|
|
92
|
+
// catalog, so a model whose real ceiling is lower would still 400 upstream.
|
|
93
|
+
if (claudeRequest.max_tokens) {
|
|
94
|
+
claudeRequest.max_tokens = Math.min(claudeRequest.max_tokens, ceiling);
|
|
95
|
+
}
|
|
96
|
+
return reconcileThinkingBudget(claudeRequest, ceiling);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function buildProviderRequest(
|
|
100
|
+
provider,
|
|
101
|
+
model,
|
|
102
|
+
body,
|
|
103
|
+
stream,
|
|
104
|
+
credentials,
|
|
105
|
+
raw = null,
|
|
106
|
+
{ log = null, sourceModel = model } = {},
|
|
107
|
+
) {
|
|
59
108
|
if (provider === ZED_PROVIDER.anthropic) {
|
|
60
|
-
|
|
109
|
+
const claudeRequest = openaiToClaudeRequest(model, body, true);
|
|
110
|
+
return applyZedThinking(claudeRequest, body, sourceModel, raw, log);
|
|
61
111
|
}
|
|
62
112
|
if (provider === ZED_PROVIDER.google) {
|
|
63
113
|
const geminiRequest = openaiToGeminiRequest(model, body, true);
|
|
@@ -92,16 +142,87 @@ function convertProviderEvent(provider, event, state) {
|
|
|
92
142
|
return event;
|
|
93
143
|
}
|
|
94
144
|
|
|
95
|
-
|
|
145
|
+
// A stream that ends without a terminal frame leaves non-streaming aggregation
|
|
146
|
+
// (parseSSEToOpenAIResponse) with a finish_reason-less answer and streaming
|
|
147
|
+
// clients waiting for a terminator, so close it explicitly.
|
|
148
|
+
function createFinishChunk(model) {
|
|
96
149
|
return {
|
|
97
|
-
id: `chatcmpl-zed
|
|
150
|
+
id: `chatcmpl-zed-${Date.now()}`,
|
|
98
151
|
object: "chat.completion.chunk",
|
|
99
152
|
created: Math.floor(Date.now() / 1000),
|
|
100
153
|
model,
|
|
101
|
-
choices: [{ index: 0, delta: {
|
|
154
|
+
choices: [{ index: 0, delta: {}, finish_reason: "stop" }],
|
|
102
155
|
};
|
|
103
156
|
}
|
|
104
157
|
|
|
158
|
+
function errorMessageOf(value) {
|
|
159
|
+
if (!value) return "";
|
|
160
|
+
if (typeof value === "string") return value;
|
|
161
|
+
if (typeof value !== "object") return String(value);
|
|
162
|
+
const nested = value.error && typeof value.error === "object" ? value.error.message : value.error;
|
|
163
|
+
return String(value.message || value.detail || nested || value.code || value.type || "");
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Provider error carried inside a stream frame, or null.
|
|
168
|
+
*
|
|
169
|
+
* Zed forwards the upstream body untouched, so a failure can arrive as an
|
|
170
|
+
* Anthropic `{"type":"error","error":{…}}`, an OpenAI `{"error":{…}}`, or a
|
|
171
|
+
* Responses `response.failed`. The response translators have no case for any of
|
|
172
|
+
* them: passing one through would silently drop the failure.
|
|
173
|
+
*/
|
|
174
|
+
function frameErrorOf(event) {
|
|
175
|
+
if (!event || typeof event !== "object" || Array.isArray(event)) return null;
|
|
176
|
+
if (event.type === "error") {
|
|
177
|
+
return {
|
|
178
|
+
message: errorMessageOf(event.error) || errorMessageOf(event) || "upstream error",
|
|
179
|
+
code: String(event.error?.code || event.code || "upstream_error"),
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
if (event.type === "response.failed") {
|
|
183
|
+
const failed = event.response || event;
|
|
184
|
+
return {
|
|
185
|
+
message: errorMessageOf(failed) || "upstream response failed",
|
|
186
|
+
code: String(failed.error?.code || failed.code || "response_failed"),
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
// Bare `{"error": {…}}` envelope. A normal payload always carries at least one
|
|
190
|
+
// of choices / candidates / output, so those exclude a legitimate `error: null`.
|
|
191
|
+
if (event.error && !event.choices && !event.candidates && !event.output) {
|
|
192
|
+
return {
|
|
193
|
+
message: errorMessageOf(event.error) || "upstream error",
|
|
194
|
+
code: String(event.error?.code || event.error?.type || "upstream_error"),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// HTTP status for an in-band failure, so the fallback layer reacts the way it
|
|
201
|
+
// would to the equivalent HTTP error (quota cools down, overflow is request-scoped).
|
|
202
|
+
function statusForStreamError(message, code = "") {
|
|
203
|
+
const text = `${code} ${message}`;
|
|
204
|
+
if (isContextOverflowText(text)) return 400;
|
|
205
|
+
if (/rate.?limit|quota|too many requests|tokens per (minute|day)/i.test(text)) return 429;
|
|
206
|
+
if (/overloaded|unavailable|try again/i.test(text)) return 503;
|
|
207
|
+
return 502;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// In-band error frame in the shared buildErrorBody shape. Clients aggregate
|
|
211
|
+
// delta.content into the answer and non-streaming aggregation keys off
|
|
212
|
+
// chunk.error, so a failure must travel as an error — never as assistant text.
|
|
213
|
+
function createErrorFrame(message, status, code) {
|
|
214
|
+
const type = status === 400 ? "invalid_request_error" : "upstream_error";
|
|
215
|
+
return `data: ${JSON.stringify({ error: { message, type, code, status } })}\n\n`;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
function createErrorResponse(message, status, code) {
|
|
219
|
+
const type = status === 400 ? "invalid_request_error" : "upstream_error";
|
|
220
|
+
return new Response(JSON.stringify({ error: { message, type, code, status } }), {
|
|
221
|
+
status,
|
|
222
|
+
headers: { "Content-Type": "application/json" },
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
|
|
105
226
|
function enqueueSseObject(controller, encoder, chunk) {
|
|
106
227
|
if (!chunk) return;
|
|
107
228
|
const items = Array.isArray(chunk) ? chunk : [chunk];
|
|
@@ -151,32 +272,115 @@ function isContextOverflowText(value) {
|
|
|
151
272
|
return OVERFLOW_RE.test(String(value || ""));
|
|
152
273
|
}
|
|
153
274
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
error
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
},
|
|
164
|
-
})}\n\n`;
|
|
275
|
+
function statusFailureOf(status) {
|
|
276
|
+
if (!status) return null;
|
|
277
|
+
if (status.type === "failed" || status.failed) {
|
|
278
|
+
const failed = status.failed || status;
|
|
279
|
+
const message = String(failed.message || failed.error || failed.code || "request failed");
|
|
280
|
+
const code = String(failed.code || failed.error?.code || "");
|
|
281
|
+
return { message, ...failureDetails(message, code) };
|
|
282
|
+
}
|
|
283
|
+
return null;
|
|
165
284
|
}
|
|
166
285
|
|
|
167
|
-
function
|
|
286
|
+
function failureDetails(message, code) {
|
|
287
|
+
const status = statusForStreamError(message, code);
|
|
288
|
+
if (status !== 400) return { status, code: code || "upstream_error" };
|
|
289
|
+
return {
|
|
290
|
+
status,
|
|
291
|
+
code: "context_length_exceeded",
|
|
292
|
+
message:
|
|
293
|
+
`Context window exceeded: ${message}. ` + `Shorten the conversation or use a larger model.`,
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Read up to the first real payload frame so an immediate failure can still be
|
|
299
|
+
* answered with a real HTTP status (account fallback, non-streaming clients,
|
|
300
|
+
* correct status codes) instead of an HTTP-200 stream that fails silently.
|
|
301
|
+
* `consumed` holds every byte read — the caller replays it, so nothing is lost.
|
|
302
|
+
*/
|
|
303
|
+
async function peekZedStream(reader, decoder) {
|
|
304
|
+
let consumed = "";
|
|
305
|
+
let offset = 0;
|
|
306
|
+
let upstreamDone = false;
|
|
307
|
+
|
|
308
|
+
while (true) {
|
|
309
|
+
let nl = consumed.indexOf("\n", offset);
|
|
310
|
+
if (nl === -1 && !upstreamDone) {
|
|
311
|
+
const { done, value } = await reader.read();
|
|
312
|
+
upstreamDone = done;
|
|
313
|
+
consumed += done ? decoder.decode() : decoder.decode(value, { stream: true });
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
if (offset >= consumed.length) return { failure: null, consumed, upstreamDone };
|
|
317
|
+
if (nl === -1) nl = consumed.length;
|
|
318
|
+
|
|
319
|
+
const line = consumed.slice(offset, nl).replace(/\r$/, "").trim();
|
|
320
|
+
offset = nl + 1;
|
|
321
|
+
if (!line || line.startsWith(":")) continue;
|
|
322
|
+
|
|
323
|
+
const payload = unwrapZedLine(line);
|
|
324
|
+
if (!payload) {
|
|
325
|
+
// Not a JSON frame: an HTML/text error page (proxy, gateway) rather than a
|
|
326
|
+
// provider chunk. Surface it instead of streaming garbage to the client.
|
|
327
|
+
return {
|
|
328
|
+
failure: {
|
|
329
|
+
message: `Zed returned a non-JSON stream frame: ${line.slice(0, 200)}`,
|
|
330
|
+
status: 502,
|
|
331
|
+
code: "invalid_stream_frame",
|
|
332
|
+
},
|
|
333
|
+
consumed,
|
|
334
|
+
upstreamDone,
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
if (payload.done) return { failure: null, consumed, upstreamDone };
|
|
338
|
+
if (payload.status) {
|
|
339
|
+
const failure = statusFailureOf(normalizeStatus(payload.status));
|
|
340
|
+
if (failure) return { failure, consumed, upstreamDone };
|
|
341
|
+
continue; // status-only frames (started, …) carry no payload
|
|
342
|
+
}
|
|
343
|
+
const frameError = frameErrorOf(payload.event);
|
|
344
|
+
return {
|
|
345
|
+
failure: frameError
|
|
346
|
+
? { ...frameError, ...failureDetails(frameError.message, frameError.code) }
|
|
347
|
+
: null,
|
|
348
|
+
consumed,
|
|
349
|
+
upstreamDone,
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
async function wrapZedCompletionStream(response, provider, model) {
|
|
168
355
|
if (!response.ok || !response.body) return response;
|
|
169
356
|
|
|
170
357
|
const decoder = new TextDecoder();
|
|
171
358
|
const encoder = new TextEncoder();
|
|
359
|
+
const reader = response.body.getReader();
|
|
360
|
+
|
|
361
|
+
const peek = await peekZedStream(reader, decoder);
|
|
362
|
+
if (peek.failure) {
|
|
363
|
+
await reader.cancel().catch(() => {});
|
|
364
|
+
return createErrorResponse(peek.failure.message, peek.failure.status, peek.failure.code);
|
|
365
|
+
}
|
|
366
|
+
|
|
172
367
|
const state = initProviderState(provider, model);
|
|
173
|
-
let buffer =
|
|
368
|
+
let buffer = peek.consumed;
|
|
174
369
|
let done = false;
|
|
370
|
+
let emittedFinish = false;
|
|
175
371
|
|
|
176
372
|
const finish = (controller) => {
|
|
177
373
|
if (done) return;
|
|
178
|
-
|
|
179
|
-
enqueueSseObject(controller, encoder,
|
|
374
|
+
enqueueSseObject(controller, encoder, convertProviderEvent(provider, null, state));
|
|
375
|
+
if (!emittedFinish) enqueueSseObject(controller, encoder, createFinishChunk(model));
|
|
376
|
+
controller.enqueue(encoder.encode("data: [DONE]\n\n"));
|
|
377
|
+
done = true;
|
|
378
|
+
};
|
|
379
|
+
|
|
380
|
+
const abort = (controller, failure) => {
|
|
381
|
+
controller.enqueue(
|
|
382
|
+
encoder.encode(createErrorFrame(failure.message, failure.status, failure.code)),
|
|
383
|
+
);
|
|
180
384
|
controller.enqueue(encoder.encode("data: [DONE]\n\n"));
|
|
181
385
|
done = true;
|
|
182
386
|
};
|
|
@@ -191,57 +395,76 @@ function wrapZedCompletionStream(response, provider, model) {
|
|
|
191
395
|
}
|
|
192
396
|
if (payload.status) {
|
|
193
397
|
const status = normalizeStatus(payload.status);
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
controller.enqueue(
|
|
203
|
-
encoder.encode(
|
|
204
|
-
createOverflowErrorFrame(
|
|
205
|
-
`Context window exceeded for ${model}: ${message}. ` +
|
|
206
|
-
`Shorten the conversation or use a larger model.`,
|
|
207
|
-
) + "data: [DONE]\n\n",
|
|
208
|
-
),
|
|
209
|
-
);
|
|
210
|
-
done = true;
|
|
211
|
-
} else {
|
|
212
|
-
enqueueSseObject(controller, encoder, createErrorChunk(model, message));
|
|
213
|
-
finish(controller);
|
|
214
|
-
}
|
|
215
|
-
} else if (status?.type === "stream_ended" || status === "stream_ended") {
|
|
216
|
-
finish(controller);
|
|
217
|
-
}
|
|
398
|
+
const failure = statusFailureOf(status);
|
|
399
|
+
if (failure) abort(controller, failure);
|
|
400
|
+
else if (status?.type === "stream_ended" || status === "stream_ended") finish(controller);
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
const frameError = frameErrorOf(payload.event);
|
|
404
|
+
if (frameError) {
|
|
405
|
+
abort(controller, { ...frameError, ...failureDetails(frameError.message, frameError.code) });
|
|
218
406
|
return;
|
|
219
407
|
}
|
|
220
408
|
const converted = convertProviderEvent(provider, payload.event, state);
|
|
409
|
+
for (const item of Array.isArray(converted) ? converted : [converted]) {
|
|
410
|
+
if (item?.choices?.some((choice) => choice?.finish_reason)) emittedFinish = true;
|
|
411
|
+
}
|
|
221
412
|
enqueueSseObject(controller, encoder, converted);
|
|
222
413
|
};
|
|
223
414
|
|
|
224
|
-
const transformed =
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
415
|
+
const transformed = new ReadableStream({
|
|
416
|
+
async start(controller) {
|
|
417
|
+
try {
|
|
418
|
+
while (!done) {
|
|
419
|
+
let nl;
|
|
420
|
+
while ((nl = buffer.indexOf("\n")) !== -1) {
|
|
421
|
+
const line = buffer.slice(0, nl);
|
|
422
|
+
buffer = buffer.slice(nl + 1);
|
|
423
|
+
processLine(line, controller);
|
|
424
|
+
if (done) break;
|
|
425
|
+
}
|
|
426
|
+
if (done) break;
|
|
427
|
+
const { done: upstreamDone, value } = await reader.read();
|
|
428
|
+
if (upstreamDone) {
|
|
429
|
+
buffer += decoder.decode();
|
|
430
|
+
if (buffer) {
|
|
431
|
+
processLine(buffer, controller);
|
|
432
|
+
buffer = "";
|
|
433
|
+
}
|
|
434
|
+
break;
|
|
435
|
+
}
|
|
436
|
+
buffer += decoder.decode(value, { stream: true });
|
|
233
437
|
}
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
438
|
+
} catch (error) {
|
|
439
|
+
if (!done) {
|
|
440
|
+
abort(controller, {
|
|
441
|
+
message: `Zed stream failed: ${error?.message || error}`,
|
|
442
|
+
status: 502,
|
|
443
|
+
code: "stream_failed",
|
|
444
|
+
});
|
|
240
445
|
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
446
|
+
} finally {
|
|
447
|
+
await Promise.resolve()
|
|
448
|
+
.then(() => reader.cancel())
|
|
449
|
+
.catch(() => {});
|
|
450
|
+
if (!done) {
|
|
451
|
+
try {
|
|
452
|
+
finish(controller);
|
|
453
|
+
} catch {
|
|
454
|
+
/* controller already closed */
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
try {
|
|
458
|
+
controller.close();
|
|
459
|
+
} catch {
|
|
460
|
+
/* already closed */
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
},
|
|
464
|
+
cancel(reason) {
|
|
465
|
+
return reader.cancel(reason).catch(() => {});
|
|
466
|
+
},
|
|
467
|
+
});
|
|
245
468
|
|
|
246
469
|
return new Response(transformed, {
|
|
247
470
|
status: response.status,
|
|
@@ -284,8 +507,12 @@ class ZedExecutor extends BaseExecutor {
|
|
|
284
507
|
}
|
|
285
508
|
|
|
286
509
|
async execute({ model, body, stream, credentials, signal, log, proxyOptions = null }) {
|
|
510
|
+
// chatCore forwards the client's thinking suffix (`model(high)`) so translators
|
|
511
|
+
// can read it, but the upstream model id must never carry it: it breaks the
|
|
512
|
+
// catalog lookup (and with it the context guard) and Zed rejects it.
|
|
513
|
+
const upstreamModel = stripThinkingSuffix(model);
|
|
287
514
|
const { raw, provider } = await this.resolveModel(
|
|
288
|
-
|
|
515
|
+
upstreamModel,
|
|
289
516
|
credentials,
|
|
290
517
|
signal,
|
|
291
518
|
log,
|
|
@@ -302,7 +529,7 @@ class ZedExecutor extends BaseExecutor {
|
|
|
302
529
|
if (estimateInputTokens(requestBody) > contextLimit) {
|
|
303
530
|
const trimmed = stripHistoryForContext(requestBody, contextLimit);
|
|
304
531
|
if (trimmed !== requestBody) {
|
|
305
|
-
log?.info?.("ZED", `trimmed history for ${
|
|
532
|
+
log?.info?.("ZED", `trimmed history for ${upstreamModel} to fit ${contextLimit} tokens`);
|
|
306
533
|
requestBody = trimmed;
|
|
307
534
|
}
|
|
308
535
|
}
|
|
@@ -310,7 +537,7 @@ class ZedExecutor extends BaseExecutor {
|
|
|
310
537
|
if (estimated > contextLimit) {
|
|
311
538
|
const message =
|
|
312
539
|
`Context window exceeded: ~${estimated} tokens exceeds the limit of ` +
|
|
313
|
-
`${contextLimit} tokens for ${
|
|
540
|
+
`${contextLimit} tokens for ${upstreamModel}. Shorten the conversation or use a larger model.`;
|
|
314
541
|
return {
|
|
315
542
|
response: new Response(
|
|
316
543
|
JSON.stringify({
|
|
@@ -324,17 +551,25 @@ class ZedExecutor extends BaseExecutor {
|
|
|
324
551
|
),
|
|
325
552
|
url: `${this.config?.llmBaseUrl || "https://cloud.zed.dev"}/completions`,
|
|
326
553
|
headers: { "Content-Type": "application/json", Authorization: "Bearer <zed-llm-token>" },
|
|
327
|
-
transformedBody: { model, estimatedInputTokens: estimated, contextLimit },
|
|
554
|
+
transformedBody: { model: upstreamModel, estimatedInputTokens: estimated, contextLimit },
|
|
328
555
|
};
|
|
329
556
|
}
|
|
330
557
|
}
|
|
331
|
-
const providerRequest = buildProviderRequest(
|
|
558
|
+
const providerRequest = buildProviderRequest(
|
|
559
|
+
provider,
|
|
560
|
+
upstreamModel,
|
|
561
|
+
requestBody,
|
|
562
|
+
stream,
|
|
563
|
+
credentials,
|
|
564
|
+
raw,
|
|
565
|
+
{ log, sourceModel: model },
|
|
566
|
+
);
|
|
332
567
|
const bodyRecord = requestBody;
|
|
333
568
|
const payload = {
|
|
334
569
|
thread_id: bodyRecord.thread_id || credentials?._clientSessionId,
|
|
335
570
|
prompt_id: bodyRecord.prompt_id,
|
|
336
571
|
provider,
|
|
337
|
-
model,
|
|
572
|
+
model: upstreamModel,
|
|
338
573
|
provider_request: providerRequest,
|
|
339
574
|
};
|
|
340
575
|
|
|
@@ -356,7 +591,9 @@ class ZedExecutor extends BaseExecutor {
|
|
|
356
591
|
},
|
|
357
592
|
});
|
|
358
593
|
|
|
359
|
-
const wrapped = response.ok
|
|
594
|
+
const wrapped = response.ok
|
|
595
|
+
? await wrapZedCompletionStream(response, provider, upstreamModel)
|
|
596
|
+
: response;
|
|
360
597
|
return {
|
|
361
598
|
response: wrapped,
|
|
362
599
|
url: `${this.config?.llmBaseUrl || "https://cloud.zed.dev"}/completions`,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { detectFormat, getTargetFormat,
|
|
1
|
+
import { detectFormat, getTargetFormat, resolveModelTransport } from "../services/provider.js";
|
|
2
2
|
import { translateRequest } from "../translator/index.js";
|
|
3
3
|
import {
|
|
4
4
|
applyThinking,
|
|
@@ -138,20 +138,13 @@ export async function handleChatCore({
|
|
|
138
138
|
const alias = PROVIDER_ID_TO_ALIAS[provider] || provider;
|
|
139
139
|
const modelTargetFormat = getModelTargetFormat(alias, model);
|
|
140
140
|
// Multi-endpoint providers: pick transport matching sourceFormat → zero translation.
|
|
141
|
-
//
|
|
142
|
-
//
|
|
143
|
-
// /chat/completions
|
|
144
|
-
//
|
|
141
|
+
// Guarded per model: opencode-go models differ in endpoint support, so a
|
|
142
|
+
// claude-format request must not go to /messages for kimi/glm and an OpenAI one
|
|
143
|
+
// must not go to /chat/completions for claude-haiku-5-5 (upstream answers
|
|
144
|
+
// ModelProtocolUnsupported). When the client format has no endpoint, the model's
|
|
145
|
+
// preferred declared endpoint is used and translation handles the wire change.
|
|
145
146
|
const modelSupportedFormats = getModelSupportedFormats(alias, model);
|
|
146
|
-
const
|
|
147
|
-
// Per-model guard: when a model declares supportedFormats, only use the
|
|
148
|
-
// sourceFormat-matched transport if that format is declared (opencode-go models
|
|
149
|
-
// differ — kimi/glm only do /chat/completions). Undeclared models keep the
|
|
150
|
-
// upstream default (use the transport), preserving behavior for glm/deepseek/...
|
|
151
|
-
const useTransport =
|
|
152
|
-
!modelSupportedFormats || modelSupportedFormats.includes(sourceFormat)
|
|
153
|
-
? runtimeTransport
|
|
154
|
-
: null;
|
|
147
|
+
const useTransport = resolveModelTransport(provider, sourceFormat, modelSupportedFormats);
|
|
155
148
|
// A source-format-matched endpoint keeps the request lossless. Prefer it
|
|
156
149
|
// over a model-level targetFormat, which is only the fallback for clients
|
|
157
150
|
// whose wire format has no supported transport (for example MiniMax-M3:
|