@amir83nasr/10router 0.1.14 → 0.1.16
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 +4 -5
- 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 +2 -2
- 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 +1 -1
- 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 +9 -9
- 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 +9 -9
- 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 +9 -9
- 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 +9 -9
- 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 +9 -9
- package/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard.segments/_full.segment.rsc +9 -9
- 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 +4 -5
- 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 +11 -13
- 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 +6 -6
- 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/EsP8l_VAPRRfBiiJPJqQe/_buildManifest.js +1 -0
- package/.next/static/chunks/1278-77eb0511471e063a.js +1 -0
- package/.next/static/chunks/1660-c4c1cfa3cb7c9b2e.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/{page-c913b130003c1672.js → page-dd70f2cee9c910a9.js} +3 -3
- 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 +20 -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 +34 -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 +28 -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/claudeMessageBody.js +357 -0
- package/open-sse/handlers/chatCore/nonStreamingHandler.js +36 -110
- package/open-sse/handlers/chatCore/sseToJsonHandler.js +147 -4
- package/open-sse/handlers/chatCore.js +48 -12
- 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 +15 -6
- 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/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/concerns/classifier.js +70 -0
- package/open-sse/translator/concerns/thinkingUnified.js +18 -6
- package/open-sse/translator/formats/claude.js +47 -19
- package/open-sse/translator/request/claude-to-openai.js +20 -0
- package/open-sse/translator/request/openai-to-claude.js +11 -0
- 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/cli-tools/components/cards/ClaudeToolCard.tsx +12 -0
- 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/cli-tools/claude-settings/route.js +10 -0
- 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 +9 -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/chunks/1278-1bef1ffb32ea7f41.js +0 -1
- package/.next/static/chunks/1660-25564899e7912146.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/.next/static/wBARQPScPhD6SLn7WQvI9/_buildManifest.js +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/{wBARQPScPhD6SLn7WQvI9 → EsP8l_VAPRRfBiiJPJqQe}/_ssgManifest.js +0 -0
|
@@ -10,7 +10,12 @@ import {
|
|
|
10
10
|
saveUsageStats,
|
|
11
11
|
formatDoneLine,
|
|
12
12
|
} from "./requestDetail.js";
|
|
13
|
-
import { ROLE, RESPONSES_ITEM } from "../../translator/schema/index.js";
|
|
13
|
+
import { ROLE, RESPONSES_ITEM, CLAUDE_BLOCK } from "../../translator/schema/index.js";
|
|
14
|
+
import {
|
|
15
|
+
chatCompletionToClaudeMessage,
|
|
16
|
+
claudeMessageToChatCompletion,
|
|
17
|
+
parseClaudeSSEToMessage,
|
|
18
|
+
} from "./claudeMessageBody.js";
|
|
14
19
|
|
|
15
20
|
// Responses-API providers (e.g. codex) may emit SSE without content-type + use Responses output shape
|
|
16
21
|
const isResponsesProvider = (p) => PROVIDERS[p]?.format === FORMATS.OPENAI_RESPONSES;
|
|
@@ -227,10 +232,15 @@ export async function handleForcedSSEToJson({
|
|
|
227
232
|
log,
|
|
228
233
|
}) {
|
|
229
234
|
const contentType = providerResponse.headers.get("content-type") || "";
|
|
235
|
+
// Responses-API providers (codex) are known to stream without a content type;
|
|
236
|
+
// for every other provider an absent header means the body is not a stream we
|
|
237
|
+
// may consume here — returning null leaves it intact for the JSON handler.
|
|
230
238
|
const isSSE =
|
|
231
239
|
contentType.includes("text/event-stream") ||
|
|
232
240
|
(contentType === "" && isResponsesProvider(provider));
|
|
233
|
-
|
|
241
|
+
// Not an aggregated stream — the caller falls back to the JSON handler. The
|
|
242
|
+
// pending counter must stay untouched here: this handler did not serve it.
|
|
243
|
+
if (!isSSE) return null;
|
|
234
244
|
|
|
235
245
|
trackDone();
|
|
236
246
|
|
|
@@ -251,6 +261,15 @@ export async function handleForcedSSEToJson({
|
|
|
251
261
|
if (isCodexResponsesApi) {
|
|
252
262
|
try {
|
|
253
263
|
const jsonResponse = await convertResponsesStreamToJson(providerResponse.body);
|
|
264
|
+
// A `response.failed` event is the upstream's own failure signal; an empty
|
|
265
|
+
// "successful" body would hide it from the client.
|
|
266
|
+
if (jsonResponse.status === "failed") {
|
|
267
|
+
appendLog({ status: `FAILED ${HTTP_STATUS.BAD_GATEWAY}` });
|
|
268
|
+
return createErrorResult(
|
|
269
|
+
HTTP_STATUS.BAD_GATEWAY,
|
|
270
|
+
"Upstream Responses stream reported failure",
|
|
271
|
+
);
|
|
272
|
+
}
|
|
254
273
|
if (onRequestSuccess) await onRequestSuccess();
|
|
255
274
|
|
|
256
275
|
const usage = jsonResponse.usage || {};
|
|
@@ -345,7 +364,36 @@ export async function handleForcedSSEToJson({
|
|
|
345
364
|
}));
|
|
346
365
|
const hasToolCalls = toolCalls.length > 0;
|
|
347
366
|
|
|
348
|
-
if (sourceFormat === FORMATS.
|
|
367
|
+
if (sourceFormat === FORMATS.CLAUDE) {
|
|
368
|
+
// The client speaks Anthropic Messages: reuse the same conversion a
|
|
369
|
+
// chat-native upstream gets, so both forced-stream upstream dialects
|
|
370
|
+
// produce one identical Claude body.
|
|
371
|
+
finalResp = chatCompletionToClaudeMessage({
|
|
372
|
+
id: jsonResponse.id,
|
|
373
|
+
created: jsonResponse.created_at,
|
|
374
|
+
model: jsonResponse.model || model,
|
|
375
|
+
choices: [
|
|
376
|
+
{
|
|
377
|
+
index: 0,
|
|
378
|
+
message: {
|
|
379
|
+
role: ROLE.ASSISTANT,
|
|
380
|
+
content: textContent,
|
|
381
|
+
...(hasToolCalls ? { tool_calls: toolCalls } : {}),
|
|
382
|
+
},
|
|
383
|
+
finish_reason: hasToolCalls
|
|
384
|
+
? "tool_calls"
|
|
385
|
+
: jsonResponse.status === "completed" || jsonResponse.status === "done"
|
|
386
|
+
? "stop"
|
|
387
|
+
: jsonResponse.status || "stop",
|
|
388
|
+
},
|
|
389
|
+
],
|
|
390
|
+
usage: {
|
|
391
|
+
prompt_tokens: inTokens,
|
|
392
|
+
completion_tokens: outTokens,
|
|
393
|
+
...cacheDetails,
|
|
394
|
+
},
|
|
395
|
+
});
|
|
396
|
+
} else if (sourceFormat === FORMATS.ANTIGRAVITY || sourceFormat === FORMATS.GEMINI) {
|
|
349
397
|
finalResp = {
|
|
350
398
|
response: {
|
|
351
399
|
candidates: [
|
|
@@ -406,6 +454,94 @@ export async function handleForcedSSEToJson({
|
|
|
406
454
|
// Standard Chat Completions SSE path
|
|
407
455
|
try {
|
|
408
456
|
const sseText = await providerResponse.text();
|
|
457
|
+
|
|
458
|
+
// A provider that speaks Claude on the wire (opencode's `union-alpha`, any
|
|
459
|
+
// anthropic-compatible endpoint) streams Anthropic events, which the chat
|
|
460
|
+
// aggregator cannot fold — it would produce an empty message. Aggregate in
|
|
461
|
+
// the format the upstream actually used.
|
|
462
|
+
//
|
|
463
|
+
// `targetFormat` is what we asked for, not proof of what came back: some
|
|
464
|
+
// providers answer their Claude transport in OpenAI dialect. The aggregator
|
|
465
|
+
// returns null when no Anthropic event was seen, and the standard chat path
|
|
466
|
+
// below then handles the body it really is.
|
|
467
|
+
const isClaudeUpstream =
|
|
468
|
+
targetFormat === FORMATS.CLAUDE || /"type"\s*:\s*"message_start"/.test(sseText);
|
|
469
|
+
const claudeMessage = isClaudeUpstream ? parseClaudeSSEToMessage(sseText, model) : null;
|
|
470
|
+
if (claudeMessage) {
|
|
471
|
+
const message = claudeMessage;
|
|
472
|
+
if (message.error) {
|
|
473
|
+
const upstreamCode = String(message.error.code || "");
|
|
474
|
+
const status =
|
|
475
|
+
message.error.type === "invalid_request_error" ||
|
|
476
|
+
upstreamCode === "context_length_exceeded" ||
|
|
477
|
+
upstreamCode === "bad_request"
|
|
478
|
+
? HTTP_STATUS.BAD_REQUEST
|
|
479
|
+
: HTTP_STATUS.BAD_GATEWAY;
|
|
480
|
+
return createErrorResult(status, message.error.message || "Upstream SSE stream failed");
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
if (onRequestSuccess) await onRequestSuccess();
|
|
484
|
+
|
|
485
|
+
const usage = message.usage || {};
|
|
486
|
+
appendLog({ tokens: usage, status: "200 OK" });
|
|
487
|
+
saveUsageStats({
|
|
488
|
+
provider,
|
|
489
|
+
model,
|
|
490
|
+
tokens: usage,
|
|
491
|
+
connectionId,
|
|
492
|
+
apiKey,
|
|
493
|
+
endpoint: clientRawRequest?.endpoint,
|
|
494
|
+
silent: true,
|
|
495
|
+
});
|
|
496
|
+
if (log?.line)
|
|
497
|
+
log.line(
|
|
498
|
+
reqTag,
|
|
499
|
+
"DONE",
|
|
500
|
+
formatDoneLine({ usage, latency: { total: Date.now() - requestStartTime } }),
|
|
501
|
+
);
|
|
502
|
+
|
|
503
|
+
const totalLatency = Date.now() - requestStartTime;
|
|
504
|
+
const textBlocks = (message.content || []).filter((b) => b.type === CLAUDE_BLOCK.TEXT);
|
|
505
|
+
const thinkingBlocks = (message.content || []).filter(
|
|
506
|
+
(b) => b.type === CLAUDE_BLOCK.THINKING,
|
|
507
|
+
);
|
|
508
|
+
saveRequestDetail(
|
|
509
|
+
buildRequestDetail(
|
|
510
|
+
{
|
|
511
|
+
...ctx,
|
|
512
|
+
latency: { ttft: totalLatency, total: totalLatency },
|
|
513
|
+
tokens: {
|
|
514
|
+
prompt_tokens: usage.input_tokens || 0,
|
|
515
|
+
completion_tokens: usage.output_tokens || 0,
|
|
516
|
+
},
|
|
517
|
+
response: {
|
|
518
|
+
content: textBlocks.map((b) => b.text || "").join("") || null,
|
|
519
|
+
thinking: thinkingBlocks.map((b) => b.thinking || "").join("") || null,
|
|
520
|
+
finish_reason: message.stop_reason || "unknown",
|
|
521
|
+
},
|
|
522
|
+
status: "success",
|
|
523
|
+
},
|
|
524
|
+
{ endpoint: clientRawRequest?.endpoint || null },
|
|
525
|
+
),
|
|
526
|
+
).catch(() => {});
|
|
527
|
+
|
|
528
|
+
// Claude → chat conversion only when the client asked for chat; a Claude
|
|
529
|
+
// client (or any other) receives the aggregated message unchanged.
|
|
530
|
+
const finalBody =
|
|
531
|
+
sourceFormat === FORMATS.CLAUDE
|
|
532
|
+
? message
|
|
533
|
+
: sourceFormat === FORMATS.OPENAI
|
|
534
|
+
? claudeMessageToChatCompletion(message)
|
|
535
|
+
: message;
|
|
536
|
+
|
|
537
|
+
return {
|
|
538
|
+
success: true,
|
|
539
|
+
response: new Response(JSON.stringify(restoreToolNames(finalBody, toolNameMap)), {
|
|
540
|
+
headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" },
|
|
541
|
+
}),
|
|
542
|
+
};
|
|
543
|
+
}
|
|
544
|
+
|
|
409
545
|
const parsed = parseSSEToOpenAIResponse(sseText, model);
|
|
410
546
|
if (!parsed)
|
|
411
547
|
return createErrorResult(
|
|
@@ -491,10 +627,17 @@ export async function handleForcedSSEToJson({
|
|
|
491
627
|
// lost on the non-streaming return path. Inlined (not imported from
|
|
492
628
|
// nonStreamingHandler.js) to avoid a circular import: nonStreamingHandler
|
|
493
629
|
// already imports parseSSEToOpenAIResponse from this module.
|
|
630
|
+
// A Claude-format client gets an Anthropic `message`, never a raw
|
|
631
|
+
// `chat.completion`. Every non-streaming /v1/messages request lands here
|
|
632
|
+
// when the provider forces streaming (opencode, codex, zed, openai), and
|
|
633
|
+
// Claude Code reads `message.content[]` — an OpenAI body throws a TypeError
|
|
634
|
+
// inside the client, which auto mode reports as "classifier unavailable".
|
|
494
635
|
const finalBody =
|
|
495
636
|
sourceFormat === FORMATS.OPENAI_RESPONSES
|
|
496
637
|
? chatCompletionToResponses(parsed, customToolNames)
|
|
497
|
-
:
|
|
638
|
+
: sourceFormat === FORMATS.CLAUDE
|
|
639
|
+
? chatCompletionToClaudeMessage(parsed)
|
|
640
|
+
: parsed;
|
|
498
641
|
|
|
499
642
|
return {
|
|
500
643
|
success: true,
|
|
@@ -177,10 +177,24 @@ export async function handleChatCore({
|
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
+
// Client preference (what the response must look like) is independent of the
|
|
181
|
+
// transport a provider needs. `stream` below is the upstream flag; the
|
|
182
|
+
// client-facing decision is `clientWantsJson` further down.
|
|
183
|
+
const acceptHeader = clientRawRequest?.headers?.accept || "";
|
|
184
|
+
const clientPrefersJson = acceptHeader.includes("application/json");
|
|
185
|
+
const clientPrefersSSE = acceptHeader.includes("text/event-stream");
|
|
180
186
|
const clientRequestedStreaming =
|
|
181
187
|
body.stream === true || sourceFormat === FORMATS.ANTIGRAVITY || sourceFormat === FORMATS.GEMINI;
|
|
182
188
|
const providerRequiresStreaming = PROVIDERS[provider]?.forceStream === true;
|
|
183
|
-
|
|
189
|
+
// Anthropic Messages defaults to a JSON body when `stream` is omitted; OpenAI
|
|
190
|
+
// chat callers have historically been served SSE in that case here. An
|
|
191
|
+
// explicit Accept: text/event-stream still opts a Claude client into SSE.
|
|
192
|
+
const sourceDefaultsToJson = sourceFormat === FORMATS.CLAUDE && !clientPrefersSSE;
|
|
193
|
+
let stream = providerRequiresStreaming
|
|
194
|
+
? true
|
|
195
|
+
: body.stream === undefined
|
|
196
|
+
? !sourceDefaultsToJson
|
|
197
|
+
: body.stream !== false;
|
|
184
198
|
|
|
185
199
|
// Image generation models require non-streaming (Google v1internal:generateContent)
|
|
186
200
|
const modelType = getModelType(alias, model);
|
|
@@ -197,9 +211,8 @@ export async function handleChatCore({
|
|
|
197
211
|
|
|
198
212
|
// Check client Accept header preference for non-streaming requests
|
|
199
213
|
// This fixes AI SDK compatibility where clients send Accept: application/json
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
const clientPrefersSSE = acceptHeader.includes("text/event-stream");
|
|
214
|
+
// (`acceptHeader`, `clientPrefersJson` and `clientPrefersSSE` are resolved
|
|
215
|
+
// with the stream negotiation above so both decisions share one reading.)
|
|
203
216
|
if (
|
|
204
217
|
clientPrefersJson &&
|
|
205
218
|
!clientPrefersSSE &&
|
|
@@ -293,6 +306,21 @@ export async function handleChatCore({
|
|
|
293
306
|
stripContinuityFields(translatedBody);
|
|
294
307
|
}
|
|
295
308
|
|
|
309
|
+
// Reasoning depth is a model capability, so a model that cannot reason silently
|
|
310
|
+
// loses the client's effort selection inside applyThinking. Report that drop
|
|
311
|
+
// once per request: without it an ignored effort looks like a provider quirk.
|
|
312
|
+
const requestedThinking = extractThinking(body);
|
|
313
|
+
if (requestedThinking && requestedThinking.mode !== "none") {
|
|
314
|
+
const thinkingCaps = getCapabilitiesForModel(provider, stripThinkingSuffix(upstreamModel));
|
|
315
|
+
if (!thinkingCaps.reasoning) {
|
|
316
|
+
const requested = log?.fmtThink?.(requestedThinking) || requestedThinking.mode;
|
|
317
|
+
log?.warn?.(
|
|
318
|
+
"THINKING",
|
|
319
|
+
`${provider}/${model} cannot reason — requested ${requested} omitted`,
|
|
320
|
+
);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
296
324
|
// Dedupe duplicate built-in tools when equivalent MCP tools are present (Claude clients only).
|
|
297
325
|
if (clientTool === "claude" && Array.isArray(translatedBody.tools)) {
|
|
298
326
|
const { tools: deduped, stripped } = dedupeTools(translatedBody.tools);
|
|
@@ -687,9 +715,20 @@ export async function handleChatCore({
|
|
|
687
715
|
appendRequestLog({ model, provider, connectionId, ...extra }).catch(() => {});
|
|
688
716
|
const trackDone = () => trackPendingRequest(model, provider, connectionId, false);
|
|
689
717
|
|
|
690
|
-
//
|
|
691
|
-
|
|
692
|
-
|
|
718
|
+
// The client did not ask for SSE: either the provider only streams, or the
|
|
719
|
+
// request was negotiated as JSON. Aggregating the upstream stream is tried
|
|
720
|
+
// first; it declines a non-SSE body so a provider that ignored `stream` — or
|
|
721
|
+
// one that answered JSON on a forced-stream endpoint — still reaches the
|
|
722
|
+
// ordinary non-streaming handler instead of being written as an SSE response.
|
|
723
|
+
const clientWantsJson =
|
|
724
|
+
!stream ||
|
|
725
|
+
(providerRequiresStreaming && !clientRequestedStreaming && !clientPrefersSSE) ||
|
|
726
|
+
// Source-format contract: an Anthropic Messages client that did not ask to
|
|
727
|
+
// stream keeps a JSON body even if its provider forces streaming upstream.
|
|
728
|
+
(sourceFormat === FORMATS.CLAUDE && body.stream !== true && !clientPrefersSSE);
|
|
729
|
+
|
|
730
|
+
if (clientWantsJson) {
|
|
731
|
+
const forcedResult = await handleForcedSSEToJson({
|
|
693
732
|
...sharedCtx,
|
|
694
733
|
providerResponse,
|
|
695
734
|
sourceFormat,
|
|
@@ -699,14 +738,11 @@ export async function handleChatCore({
|
|
|
699
738
|
trackDone,
|
|
700
739
|
appendLog,
|
|
701
740
|
});
|
|
702
|
-
if (
|
|
741
|
+
if (forcedResult) {
|
|
703
742
|
streamController.handleComplete();
|
|
704
|
-
return
|
|
743
|
+
return forcedResult;
|
|
705
744
|
}
|
|
706
|
-
}
|
|
707
745
|
|
|
708
|
-
// True non-streaming response
|
|
709
|
-
if (!stream) {
|
|
710
746
|
const result = await handleNonStreamingResponse({
|
|
711
747
|
...sharedCtx,
|
|
712
748
|
providerResponse,
|
|
@@ -4,7 +4,6 @@ import gemini from "./gemini.js";
|
|
|
4
4
|
import codex from "./codex.js";
|
|
5
5
|
import sdwebui from "./sdwebui.js";
|
|
6
6
|
import comfyui from "./comfyui.js";
|
|
7
|
-
import huggingface from "./huggingface.js";
|
|
8
7
|
import nanobanana from "./nanobanana.js";
|
|
9
8
|
import falAi from "./falAi.js";
|
|
10
9
|
import stabilityAi from "./stabilityAi.js";
|
|
@@ -14,16 +13,13 @@ import antigravity from "./antigravity.js";
|
|
|
14
13
|
|
|
15
14
|
const ADAPTERS = {
|
|
16
15
|
openai: createOpenAIAdapter("openai"),
|
|
17
|
-
minimax: createOpenAIAdapter("minimax"),
|
|
18
16
|
openrouter: createOpenAIAdapter("openrouter"),
|
|
19
17
|
recraft: createOpenAIAdapter("recraft"),
|
|
20
|
-
"vercel-ai-gateway": createOpenAIAdapter("vercel-ai-gateway"),
|
|
21
18
|
xai: createOpenAIAdapter("xai"),
|
|
22
19
|
gemini,
|
|
23
20
|
codex,
|
|
24
21
|
sdwebui,
|
|
25
22
|
comfyui,
|
|
26
|
-
huggingface,
|
|
27
23
|
nanobanana,
|
|
28
24
|
antigravity,
|
|
29
25
|
"fal-ai": falAi,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// OpenAI-compatible adapter (used by openai,
|
|
1
|
+
// OpenAI-compatible adapter (used by openai, openrouter, recraft)
|
|
2
2
|
import { PROVIDER_MEDIA } from "../../providers/index.js";
|
|
3
3
|
|
|
4
4
|
const imageCfg = (id) => PROVIDER_MEDIA[id]?.imageConfig || {};
|
|
@@ -347,33 +347,6 @@ function buildSearxngRequest(config, params) {
|
|
|
347
347
|
};
|
|
348
348
|
}
|
|
349
349
|
|
|
350
|
-
function buildXquikRequest(config, params) {
|
|
351
|
-
const apiKey = params.token;
|
|
352
|
-
if (!apiKey) throw new Error("Xquik requires an API key");
|
|
353
|
-
|
|
354
|
-
const queryType = getProviderSetting(params, "queryType");
|
|
355
|
-
if (queryType && !["Latest", "Top"].includes(queryType)) {
|
|
356
|
-
throw new Error("Xquik queryType must be Latest or Top");
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
const qp = new URLSearchParams({
|
|
360
|
-
q: params.query,
|
|
361
|
-
limit: String(params.maxResults),
|
|
362
|
-
});
|
|
363
|
-
const cursor = getProviderSetting(params, "cursor");
|
|
364
|
-
if (cursor) qp.set("cursor", cursor);
|
|
365
|
-
if (queryType) qp.set("queryType", queryType);
|
|
366
|
-
if (params.language) qp.set("language", params.language);
|
|
367
|
-
|
|
368
|
-
return {
|
|
369
|
-
url: `${resolveBaseUrl(config, params)}?${qp}`,
|
|
370
|
-
init: {
|
|
371
|
-
method: "GET",
|
|
372
|
-
headers: { Accept: "application/json", "x-api-key": apiKey },
|
|
373
|
-
},
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
|
|
377
350
|
// ── Ollama Cloud web_search ──────────────────────────────────────────────
|
|
378
351
|
// POST https://ollama.com/api/web_search { query, max_results }
|
|
379
352
|
// Response: { results: [{ title, url, content, published_at? }] }
|
|
@@ -435,7 +408,6 @@ const BUILDERS = {
|
|
|
435
408
|
searchapi: buildSearchApiRequest,
|
|
436
409
|
youcom: buildYouComRequest,
|
|
437
410
|
searxng: buildSearxngRequest,
|
|
438
|
-
xquik: buildXquikRequest,
|
|
439
411
|
"ollama-search": buildOllamaSearchRequest,
|
|
440
412
|
glm: buildGlmSearchRequest,
|
|
441
413
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Wrap chat-completions endpoints (with built-in web search) into the unified
|
|
3
3
|
* /v1/search response format. Supports gemini, antigravity, openai, xai,
|
|
4
|
-
*
|
|
4
|
+
* perplexity.
|
|
5
5
|
*/
|
|
6
6
|
import { PROVIDER_MEDIA } from "../../providers/index.js";
|
|
7
7
|
import { ANTIGRAVITY_IDE_USER_AGENT } from "../../providers/shared.js";
|
|
@@ -253,62 +253,6 @@ const CHAT_SEARCH_CONFIG = {
|
|
|
253
253
|
},
|
|
254
254
|
},
|
|
255
255
|
|
|
256
|
-
minimax: {
|
|
257
|
-
endpoint: () => searchEndpoint("minimax"),
|
|
258
|
-
buildBody: (query, model) => ({
|
|
259
|
-
model,
|
|
260
|
-
messages: [{ role: "user", content: query }],
|
|
261
|
-
tools: [{ type: "web_search" }],
|
|
262
|
-
}),
|
|
263
|
-
buildHeaders: (token) => ({
|
|
264
|
-
"Content-Type": "application/json",
|
|
265
|
-
Authorization: `Bearer ${token}`,
|
|
266
|
-
}),
|
|
267
|
-
extractAnswer: (data) => {
|
|
268
|
-
const msg = data?.choices?.[0]?.message || {};
|
|
269
|
-
const text = msg.content || "";
|
|
270
|
-
const citations = [];
|
|
271
|
-
const direct = Array.isArray(data?.web_search_results) ? data.web_search_results : [];
|
|
272
|
-
for (const it of direct) {
|
|
273
|
-
const url = it?.url || it?.link;
|
|
274
|
-
if (url) {
|
|
275
|
-
citations.push({
|
|
276
|
-
url,
|
|
277
|
-
title: it.title || "",
|
|
278
|
-
snippet: it.snippet || it.summary || "",
|
|
279
|
-
});
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
if (!citations.length) {
|
|
283
|
-
const calls = Array.isArray(msg.tool_calls) ? msg.tool_calls : [];
|
|
284
|
-
for (const call of calls) {
|
|
285
|
-
const argStr = call?.function?.arguments;
|
|
286
|
-
if (!argStr) continue;
|
|
287
|
-
let parsed;
|
|
288
|
-
try {
|
|
289
|
-
parsed = typeof argStr === "string" ? JSON.parse(argStr) : argStr;
|
|
290
|
-
} catch {
|
|
291
|
-
continue;
|
|
292
|
-
}
|
|
293
|
-
const items = parsed?.results || parsed?.search_results || [];
|
|
294
|
-
if (Array.isArray(items)) {
|
|
295
|
-
for (const it of items) {
|
|
296
|
-
const url = it?.url || it?.link;
|
|
297
|
-
if (!url) continue;
|
|
298
|
-
citations.push({
|
|
299
|
-
url,
|
|
300
|
-
title: it.title || "",
|
|
301
|
-
snippet: it.snippet || "",
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
const tokens = data?.usage?.total_tokens || 0;
|
|
308
|
-
return { text, citations, tokens };
|
|
309
|
-
},
|
|
310
|
-
},
|
|
311
|
-
|
|
312
256
|
perplexity: {
|
|
313
257
|
endpoint: () => searchEndpoint("perplexity"),
|
|
314
258
|
buildBody: (query, model) => ({
|
|
@@ -281,54 +281,6 @@ function normalizeSearxng(data, _query, _searchType) {
|
|
|
281
281
|
return { results, totalResults: results.length };
|
|
282
282
|
}
|
|
283
283
|
|
|
284
|
-
function normalizeXquik(data, _query, _searchType) {
|
|
285
|
-
const now = new Date().toISOString();
|
|
286
|
-
const items = Array.isArray(data.tweets) ? data.tweets : [];
|
|
287
|
-
const results = items.map((item, idx) => {
|
|
288
|
-
const username = typeof item?.author?.username === "string" ? item.author.username : "";
|
|
289
|
-
const authorName = typeof item?.author?.name === "string" ? item.author.name : "";
|
|
290
|
-
const tweetId = typeof item?.id === "string" ? item.id : String(item?.id || "");
|
|
291
|
-
const url =
|
|
292
|
-
username && tweetId
|
|
293
|
-
? `https://x.com/${encodeURIComponent(username)}/status/${encodeURIComponent(tweetId)}`
|
|
294
|
-
: tweetId
|
|
295
|
-
? `https://x.com/i/web/status/${encodeURIComponent(tweetId)}`
|
|
296
|
-
: "";
|
|
297
|
-
const author = username ? `@${username}` : authorName || null;
|
|
298
|
-
const title = author ? `${author} on X` : "X post";
|
|
299
|
-
const imageUrl = Array.isArray(item?.media)
|
|
300
|
-
? item.media.find((media) => typeof media?.mediaUrl === "string")?.mediaUrl
|
|
301
|
-
: null;
|
|
302
|
-
|
|
303
|
-
return makeResult(
|
|
304
|
-
"xquik",
|
|
305
|
-
{
|
|
306
|
-
title,
|
|
307
|
-
url,
|
|
308
|
-
snippet: typeof item?.text === "string" ? item.text : "",
|
|
309
|
-
published_at: typeof item?.createdAt === "string" ? item.createdAt : null,
|
|
310
|
-
author,
|
|
311
|
-
image_url: imageUrl || null,
|
|
312
|
-
source_type: "x_post",
|
|
313
|
-
full_text: typeof item?.text === "string" ? item.text : undefined,
|
|
314
|
-
text_format: "text",
|
|
315
|
-
},
|
|
316
|
-
idx,
|
|
317
|
-
now,
|
|
318
|
-
);
|
|
319
|
-
});
|
|
320
|
-
const nextCursor =
|
|
321
|
-
typeof data.next_cursor === "string" && data.next_cursor ? data.next_cursor : null;
|
|
322
|
-
return {
|
|
323
|
-
results,
|
|
324
|
-
totalResults: null,
|
|
325
|
-
pagination: {
|
|
326
|
-
has_more: data.has_next_page === true,
|
|
327
|
-
next_cursor: nextCursor,
|
|
328
|
-
},
|
|
329
|
-
};
|
|
330
|
-
}
|
|
331
|
-
|
|
332
284
|
function normalizeOllamaSearch(data, _query, _searchType) {
|
|
333
285
|
const now = new Date().toISOString();
|
|
334
286
|
const items = Array.isArray(data?.results) ? data.results : Array.isArray(data) ? data : [];
|
|
@@ -399,7 +351,6 @@ const NORMALIZERS = {
|
|
|
399
351
|
searchapi: normalizeSearchApi,
|
|
400
352
|
youcom: normalizeYouCom,
|
|
401
353
|
searxng: normalizeSearxng,
|
|
402
|
-
xquik: normalizeXquik,
|
|
403
354
|
"ollama-search": normalizeOllamaSearch,
|
|
404
355
|
glm: normalizeGlmSearch,
|
|
405
356
|
};
|
|
@@ -159,21 +159,6 @@ async function transcribeGemini(cfg, file, model, token, formData) {
|
|
|
159
159
|
}
|
|
160
160
|
|
|
161
161
|
// HuggingFace: POST raw binary to {baseUrl}/{model_id}
|
|
162
|
-
async function transcribeHuggingFace(cfg, file, model, token) {
|
|
163
|
-
if (model.includes("..") || model.includes("//"))
|
|
164
|
-
return createErrorResult(400, "Invalid model ID");
|
|
165
|
-
const url = `${cfg.baseUrl.replace(/\/+$/, "")}/${model}`;
|
|
166
|
-
const buf = await file.arrayBuffer();
|
|
167
|
-
const res = await fetch(url, {
|
|
168
|
-
method: "POST",
|
|
169
|
-
headers: { ...buildAuthHeaders(cfg, token), "Content-Type": resolveAudioContentType(file) },
|
|
170
|
-
body: buf,
|
|
171
|
-
});
|
|
172
|
-
if (!res.ok) return upstreamError(res);
|
|
173
|
-
const data = await res.json();
|
|
174
|
-
return jsonResponse({ text: data.text || "" });
|
|
175
|
-
}
|
|
176
|
-
|
|
177
162
|
// Default: OpenAI/Groq/Whisper-compatible multipart
|
|
178
163
|
async function transcribeOpenAICompatible(cfg, file, model, token, formData) {
|
|
179
164
|
const fd = new FormData();
|
|
@@ -249,8 +234,6 @@ export async function handleSttCore({ provider, model, formData, credentials, st
|
|
|
249
234
|
return await transcribeAssemblyAI(cfg, file, model, token);
|
|
250
235
|
case "nvidia-asr":
|
|
251
236
|
return await transcribeNvidia(cfg, file, model, token);
|
|
252
|
-
case "huggingface-asr":
|
|
253
|
-
return await transcribeHuggingFace(cfg, file, model, token);
|
|
254
237
|
case "gemini-stt":
|
|
255
238
|
return await transcribeGemini(cfg, file, model, token, formData);
|
|
256
239
|
default:
|
|
@@ -74,7 +74,7 @@ export async function handleTtsCore({
|
|
|
74
74
|
return createTtsResponse(result.base64, result.format, responseFormat);
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
// Generic config-driven (hyperbolic, deepgram, nvidia,
|
|
77
|
+
// Generic config-driven (hyperbolic, deepgram, nvidia, inworld, cartesia, playht, coqui, tortoise, qwen, ...)
|
|
78
78
|
const result = await synthesizeViaConfig(provider, input.trim(), model, credentials);
|
|
79
79
|
if (result) return createTtsResponse(result.base64, result.format, responseFormat);
|
|
80
80
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// Generic config-driven TTS handlers — dispatched by ttsConfig.format.
|
|
2
2
|
// Each handler accepts { baseUrl, apiKey, text, modelId, voiceId } and returns { base64, format }.
|
|
3
3
|
import { responseToBase64, throwUpstreamError } from "./_base.js";
|
|
4
|
-
import minimaxTts from "./minimax.js";
|
|
5
4
|
|
|
6
5
|
// Hyperbolic: POST { text } → { audio: base64 }
|
|
7
6
|
async function hyperbolic({ baseUrl, apiKey, text }) {
|
|
@@ -39,37 +38,6 @@ async function nvidia({ baseUrl, apiKey, text, modelId, voiceId }) {
|
|
|
39
38
|
return responseToBase64(res, "wav");
|
|
40
39
|
}
|
|
41
40
|
|
|
42
|
-
// HuggingFace: POST {baseUrl}/{modelId} { inputs: text } → binary
|
|
43
|
-
async function huggingface({ baseUrl, apiKey, text, modelId }) {
|
|
44
|
-
if (!modelId || modelId.includes("..")) throw new Error("Invalid HuggingFace model ID");
|
|
45
|
-
const res = await fetch(`${baseUrl}/${modelId}`, {
|
|
46
|
-
method: "POST",
|
|
47
|
-
headers: { "Content-Type": "application/json", Authorization: `Bearer ${apiKey}` },
|
|
48
|
-
body: JSON.stringify({ inputs: text }),
|
|
49
|
-
});
|
|
50
|
-
if (!res.ok) await throwUpstreamError(res);
|
|
51
|
-
return responseToBase64(res, "wav");
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Fish Audio: model travels in an HTTP header, the voice is a reference_id, returns binary
|
|
55
|
-
async function fishAudio({ baseUrl, apiKey, text, modelId, voiceId }) {
|
|
56
|
-
const res = await fetch(baseUrl, {
|
|
57
|
-
method: "POST",
|
|
58
|
-
headers: {
|
|
59
|
-
"Content-Type": "application/json",
|
|
60
|
-
Authorization: `Bearer ${apiKey}`,
|
|
61
|
-
model: modelId || "s2.1-pro-free",
|
|
62
|
-
},
|
|
63
|
-
body: JSON.stringify({
|
|
64
|
-
text,
|
|
65
|
-
format: "mp3",
|
|
66
|
-
...(voiceId ? { reference_id: voiceId } : {}),
|
|
67
|
-
}),
|
|
68
|
-
});
|
|
69
|
-
if (!res.ok) await throwUpstreamError(res);
|
|
70
|
-
return responseToBase64(res, "mp3");
|
|
71
|
-
}
|
|
72
|
-
|
|
73
41
|
// Inworld: Basic auth, JSON { audioContent }
|
|
74
42
|
async function inworld({ baseUrl, apiKey, text, modelId, voiceId }) {
|
|
75
43
|
const res = await fetch(baseUrl, {
|
|
@@ -179,13 +147,10 @@ export const FORMAT_HANDLERS = {
|
|
|
179
147
|
hyperbolic,
|
|
180
148
|
deepgram,
|
|
181
149
|
"nvidia-tts": nvidia,
|
|
182
|
-
"huggingface-tts": huggingface,
|
|
183
150
|
inworld,
|
|
184
151
|
cartesia,
|
|
185
152
|
playht,
|
|
186
153
|
coqui,
|
|
187
154
|
tortoise,
|
|
188
155
|
openai: openaiCompat,
|
|
189
|
-
"minimax-tts": minimaxTts,
|
|
190
|
-
"fish-audio": fishAudio,
|
|
191
156
|
};
|