@amir83nasr/10router 0.1.0 → 0.1.3
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 -4
- package/.next/build-manifest.json +3 -3
- package/.next/next-server.js.nft.json +1 -1
- package/.next/prerender-manifest.json +4 -4
- package/.next/required-server-files.json +5 -5
- package/.next/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- 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 +2 -2
- 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 +7 -7
- package/.next/server/app/_not-found.segments/_full.segment.rsc +7 -7
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +7 -7
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/api/auth/login/route.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/oidc/callback/route.js +1 -1
- package/.next/server/app/api/auth/oidc/callback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/oidc/start/route.js +1 -1
- package/.next/server/app/api/auth/oidc/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/oidc/test/route.js +1 -1
- package/.next/server/app/api/auth/oidc/test/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/reset-password/route.js +1 -1
- package/.next/server/app/api/auth/reset-password/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/saml/acs/route.js +1 -1
- package/.next/server/app/api/auth/saml/acs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/saml/metadata/route.js +2 -2
- package/.next/server/app/api/auth/saml/metadata/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/saml/start/route.js +2 -2
- package/.next/server/app/api/auth/saml/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/saml/test/route.js +2 -2
- package/.next/server/app/api/auth/saml/test/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/changelog/route.js +1 -1
- package/.next/server/app/api/changelog/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/cli-tools/claude-settings/route.js +1 -1
- package/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/cli-tools/codex-settings/route.js +2 -2
- package/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.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-registry/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
- package/.next/server/app/api/cli-tools/cowork-mcp-tools/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/cli-tools/dsh-settings/route.js +1 -1
- package/.next/server/app/api/cli-tools/dsh-settings/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/cli-tools/opencode-settings/route.js +1 -1
- package/.next/server/app/api/cli-tools/opencode-settings/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/combos/[id]/route.js +1 -1
- package/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/combos/route.js +1 -1
- package/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/headroom/extras/route.js +1 -1
- package/.next/server/app/api/headroom/extras/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/headroom/proxy/[...path]/route.js +1 -1
- package/.next/server/app/api/headroom/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/headroom/restart/route.js +1 -1
- package/.next/server/app/api/headroom/restart/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/headroom/start/route.js +1 -1
- package/.next/server/app/api/headroom/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/headroom/status/route.js +1 -1
- package/.next/server/app/api/headroom/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/headroom/stop/route.js +1 -1
- package/.next/server/app/api/headroom/stop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/health/route.js +1 -1
- package/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/init/route.js +1 -1
- package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/keys/[id]/route.js +1 -1
- package/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/keys/route.js +1 -1
- package/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/locale/route.js +1 -1
- package/.next/server/app/api/locale/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/[plugin]/message/route.js +2 -2
- package/.next/server/app/api/mcp/[plugin]/message/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/[plugin]/sse/route.js +2 -2
- package/.next/server/app/api/mcp/[plugin]/sse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
- package/.next/server/app/api/media-providers/tts/deepgram/voices/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
- package/.next/server/app/api/media-providers/tts/inworld/voices/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
- package/.next/server/app/api/media-providers/tts/minimax/voices/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models/alias/route.js +1 -1
- package/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models/availability/route.js +1 -1
- package/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models/catalog-sync/route.js +1 -1
- package/.next/server/app/api/models/catalog-sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models/custom/route.js +1 -1
- package/.next/server/app/api/models/custom/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models/disabled/route.js +1 -1
- package/.next/server/app/api/models/disabled/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models/route.js +1 -1
- package/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models/test/route.js +1 -1
- package/.next/server/app/api/models/test/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
- package/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
- package/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/cursor/import/route.js +1 -1
- package/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
- package/.next/server/app/api/oauth/gitlab/pat/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/grok-cli/bulk-import/route.js +1 -1
- package/.next/server/app/api/oauth/grok-cli/bulk-import/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
- package/.next/server/app/api/oauth/iflow/cookie/route_client-reference-manifest.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/api-key/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/xiaomi-mimo/auto-import/route.js +2 -2
- package/.next/server/app/api/oauth/xiaomi-mimo/auto-import/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/pricing/route.js +1 -1
- package/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
- package/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/provider-nodes/route.js +1 -1
- package/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/provider-nodes/validate/route.js +1 -1
- package/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/providers/[id]/models/route.js +1 -1
- package/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/providers/[id]/route.js +1 -1
- package/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/providers/[id]/test/route.js +1 -1
- package/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/providers/client/route.js +1 -1
- package/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
- package/.next/server/app/api/providers/kilo/free-models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/providers/route.js +1 -1
- package/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/providers/suggested-models/route.js +1 -1
- package/.next/server/app/api/providers/suggested-models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/providers/test-batch/route.js +1 -1
- package/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/providers/validate/route.js +1 -1
- package/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
- package/.next/server/app/api/proxy-pools/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
- package/.next/server/app/api/proxy-pools/[id]/test/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js +1 -1
- package/.next/server/app/api/proxy-pools/cloudflare-deploy/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
- package/.next/server/app/api/proxy-pools/deno-deploy/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/proxy-pools/route.js +1 -1
- package/.next/server/app/api/proxy-pools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
- package/.next/server/app/api/proxy-pools/vercel-deploy/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/pxpipe/health/route.js +2 -2
- package/.next/server/app/api/pxpipe/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/pxpipe/install/route.js +1 -1
- package/.next/server/app/api/pxpipe/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/pxpipe/logs/route.js +1 -1
- package/.next/server/app/api/pxpipe/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/pxpipe/restart/route.js +2 -2
- package/.next/server/app/api/pxpipe/restart/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/pxpipe/start/route.js +1 -1
- package/.next/server/app/api/pxpipe/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/pxpipe/stats/route.js +2 -2
- package/.next/server/app/api/pxpipe/stats/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/pxpipe/status/route.js +1 -1
- package/.next/server/app/api/pxpipe/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/pxpipe/stop/route.js +2 -2
- package/.next/server/app/api/pxpipe/stop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/database/route.js +1 -1
- package/.next/server/app/api/settings/database/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/proxy-test/route.js +1 -1
- package/.next/server/app/api/settings/proxy-test/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/require-login/route.js +1 -1
- package/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/route.js +1 -1
- package/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/shutdown/route.js +1 -1
- package/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tags/route.js +1 -1
- package/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/translator/console-logs/route.js +1 -1
- package/.next/server/app/api/translator/console-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/translator/console-logs/stream/route.js +1 -1
- package/.next/server/app/api/translator/console-logs/stream/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/translator/load/route.js +1 -1
- package/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/translator/save/route.js +1 -1
- package/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/translator/send/route.js +1 -1
- package/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/translator/translate/route.js +1 -1
- package/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tunnel/disable/route.js +1 -1
- package/.next/server/app/api/tunnel/disable/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tunnel/enable/route.js +1 -1
- package/.next/server/app/api/tunnel/enable/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tunnel/status/route.js +1 -1
- package/.next/server/app/api/tunnel/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tunnel/tailscale-check/route.js +1 -1
- package/.next/server/app/api/tunnel/tailscale-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -1
- package/.next/server/app/api/tunnel/tailscale-disable/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -1
- package/.next/server/app/api/tunnel/tailscale-enable/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tunnel/tailscale-install/route.js +2 -2
- package/.next/server/app/api/tunnel/tailscale-install/route_client-reference-manifest.js +1 -1
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/usage/[connectionId]/route.js +1 -1
- package/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/usage/chart/route.js +1 -1
- package/.next/server/app/api/usage/chart/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/usage/history/route.js +1 -1
- package/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/usage/logs/route.js +1 -1
- package/.next/server/app/api/usage/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/usage/providers/route.js +1 -1
- package/.next/server/app/api/usage/providers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/usage/request-details/route.js +1 -1
- package/.next/server/app/api/usage/request-details/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/usage/request-logs/route.js +1 -1
- package/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/usage/stats/route.js +1 -1
- package/.next/server/app/api/usage/stats/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/usage/stream/route.js +2 -2
- package/.next/server/app/api/usage/stream/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/api/chat/route.js +1 -1
- package/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/audio/speech/route.js +1 -1
- package/.next/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
- package/.next/server/app/api/v1/audio/transcriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/audio/voices/route.js +1 -1
- package/.next/server/app/api/v1/audio/voices/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/chat/completions/route.js +1 -1
- package/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/embeddings/route.js +1 -1
- package/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/images/generations/route.js +2 -2
- package/.next/server/app/api/v1/images/generations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
- package/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/messages/route.js +1 -1
- package/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/models/[...model]/route.js +1 -1
- package/.next/server/app/api/v1/models/[...model]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/models/info/route.js +1 -1
- package/.next/server/app/api/v1/models/info/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/models/route.js +1 -1
- package/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/responses/compact/route.js +1 -1
- package/.next/server/app/api/v1/responses/compact/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/responses/route.js +1 -1
- package/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/route.js +1 -1
- package/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/search/route.js +1 -1
- package/.next/server/app/api/v1/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/systemone/route.js +1 -1
- package/.next/server/app/api/v1/systemone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/videos/[id]/route.js +1 -1
- package/.next/server/app/api/v1/videos/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/videos/edits/route.js +1 -1
- package/.next/server/app/api/v1/videos/edits/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/videos/extensions/route.js +1 -1
- package/.next/server/app/api/v1/videos/extensions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/videos/generations/route.js +1 -1
- package/.next/server/app/api/v1/videos/generations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1/web/fetch/route.js +1 -1
- package/.next/server/app/api/v1/web/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
- package/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/v1beta/models/route.js +1 -1
- package/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/version/route.js +1 -1
- package/.next/server/app/api/version/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/version/shutdown/route.js +1 -1
- package/.next/server/app/api/version/shutdown/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/version/update/route.js +1 -1
- package/.next/server/app/api/version/update/route_client-reference-manifest.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 +8 -8
- package/.next/server/app/callback.segments/_full.segment.rsc +8 -8
- package/.next/server/app/callback.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/basic-chat.html +1 -1
- package/.next/server/app/dashboard/basic-chat.rsc +9 -9
- package/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +9 -9
- package/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +9 -9
- package/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/dashboard/cli-tools.html +1 -1
- package/.next/server/app/dashboard/cli-tools.rsc +10 -10
- package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +9 -9
- package/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +10 -10
- package/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/dashboard/combos.html +1 -1
- package/.next/server/app/dashboard/combos.rsc +9 -9
- package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +9 -9
- package/.next/server/app/dashboard/combos.segments/_full.segment.rsc +9 -9
- package/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/dashboard/endpoint.html +1 -1
- package/.next/server/app/dashboard/endpoint.rsc +10 -10
- package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +9 -9
- package/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +10 -10
- package/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/dashboard/media-providers/systemone.html +1 -1
- package/.next/server/app/dashboard/media-providers/systemone.rsc +9 -9
- package/.next/server/app/dashboard/media-providers/systemone.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/systemone/__PAGE__.segment.rsc +9 -9
- package/.next/server/app/dashboard/media-providers/systemone.segments/_full.segment.rsc +9 -9
- package/.next/server/app/dashboard/media-providers/systemone.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/dashboard/profile.html +1 -1
- package/.next/server/app/dashboard/profile.rsc +9 -9
- package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +9 -9
- package/.next/server/app/dashboard/profile.segments/_full.segment.rsc +9 -9
- package/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/dashboard/providers/new.html +1 -1
- package/.next/server/app/dashboard/providers/new.rsc +9 -9
- package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +9 -9
- package/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +9 -9
- package/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/dashboard/providers.html +1 -1
- package/.next/server/app/dashboard/providers.rsc +9 -9
- package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +9 -9
- package/.next/server/app/dashboard/providers.segments/_full.segment.rsc +9 -9
- package/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/dashboard/proxy-pools.html +1 -1
- package/.next/server/app/dashboard/proxy-pools.rsc +9 -9
- package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +9 -9
- package/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +9 -9
- package/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/dashboard/pxpipe.html +1 -1
- package/.next/server/app/dashboard/pxpipe.rsc +9 -9
- package/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +9 -9
- package/.next/server/app/dashboard/pxpipe.segments/_full.segment.rsc +9 -9
- package/.next/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/dashboard/quota.html +2 -2
- package/.next/server/app/dashboard/quota.rsc +10 -10
- package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +10 -10
- package/.next/server/app/dashboard/quota.segments/_full.segment.rsc +10 -10
- package/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +3 -3
- 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 +8 -8
- package/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +8 -8
- package/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/token-saver.html +1 -1
- package/.next/server/app/dashboard/token-saver.rsc +9 -9
- package/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +9 -9
- package/.next/server/app/dashboard/token-saver.segments/_full.segment.rsc +9 -9
- package/.next/server/app/dashboard/token-saver.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/dashboard/usage.html +2 -2
- package/.next/server/app/dashboard/usage.rsc +9 -9
- package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +9 -9
- package/.next/server/app/dashboard/usage.segments/_full.segment.rsc +9 -9
- package/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/dashboard.html +1 -1
- package/.next/server/app/dashboard.rsc +10 -10
- package/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +9 -9
- package/.next/server/app/dashboard.segments/_full.segment.rsc +10 -10
- package/.next/server/app/dashboard.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +7 -7
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +7 -7
- package/.next/server/app/index.segments/_full.segment.rsc +7 -7
- package/.next/server/app/index.segments/_tree.segment.rsc +3 -3
- 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 +8 -8
- package/.next/server/app/landing.segments/_full.segment.rsc +8 -8
- package/.next/server/app/landing.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +8 -8
- 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 +8 -8
- package/.next/server/app/login.segments/_full.segment.rsc +8 -8
- package/.next/server/app/login.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/manifest.webmanifest/route.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.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 -4
- package/.next/server/chunks/1011.js +1 -1
- package/.next/server/chunks/1194.js +1 -1
- package/.next/server/chunks/1289.js +1 -0
- package/.next/server/chunks/1633.js +1 -1
- package/.next/server/chunks/1985.js +1 -1
- package/.next/server/chunks/2282.js +2 -2
- package/.next/server/chunks/2339.js +1 -1
- package/.next/server/chunks/2801.js +1 -0
- package/.next/server/chunks/3425.js +1 -1
- package/.next/server/chunks/4129.js +1 -1
- package/.next/server/chunks/5351.js +67 -0
- package/.next/server/chunks/537.js +1 -1
- package/.next/server/chunks/6056.js +1 -1
- package/.next/server/chunks/{3336.js → 7348.js} +1 -1
- package/.next/server/chunks/7459.js +9 -9
- package/.next/server/chunks/7816.js +1 -1
- package/.next/server/chunks/7963.js +5 -5
- package/.next/server/chunks/8569.js +1 -1
- package/.next/server/chunks/9429.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware.js +3 -3
- package/.next/server/next-font-manifest.js +1 -1
- package/.next/server/next-font-manifest.json +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/chunks/1278-1326946dbcc0adb5.js +1 -0
- package/.next/static/chunks/{159-17737a7c99ff1a65.js → 159-c129d43e789e7018.js} +1 -1
- package/.next/static/chunks/1699-13ee6864a8a31a96.js +67 -0
- package/.next/static/chunks/208-521a3242b62d6c07.js +1 -0
- package/.next/static/chunks/{9590-0d0b3dd0530b2b7b.js → 2836-38406d658ad8caa9.js} +1 -1
- package/.next/static/chunks/{7287-b8e377303d1c5ae8.js → 7287-8eca6570ca087e2e.js} +2 -2
- package/.next/static/chunks/app/(dashboard)/dashboard/basic-chat/page-ce1364b2b9589785.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/{page-2ff675120416e925.js → page-93cc9fc8f8ab938b.js} +2 -2
- package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-1c54f83c69f02add.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/combos/{page-55bc39e30923938a.js → page-853f4e08f4982dbe.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-0737ab5a4827fa77.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-13abc5b934c960d3.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/[id]/page-fb90d8451f40b8b3.js +10 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/page-49b3b4867d06cbe0.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/page-85118ef708c624e6.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/profile/{page-53158d30b5643b05.js → page-65b2c7989dbe2663.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-fd2615fea8932fd5.js → page-36659d3f8756c897.js} +2 -2
- package/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-1f54dc9be2c50aba.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/providers/{page-7cc2c66e63fce4ab.js → page-b9dafab69096fa76.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/{page-5e1fb41bd7b555a6.js → page-247f59d088891437.js} +2 -2
- package/.next/static/chunks/app/(dashboard)/dashboard/pxpipe/{page-1ec35dafa18e5d24.js → page-696cb5c2703ca1ec.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/quota/{page-11d5ca23d18d596e.js → page-5d2e8d9a126c2769.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/token-saver/page-bcc37fc2b4089f2f.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/usage/page-cf503287fe99e910.js +1 -0
- package/.next/static/chunks/app/(dashboard)/{layout-e1e5bead272b5c82.js → layout-667f17706a5e1896.js} +1 -1
- package/.next/static/chunks/app/_not-found/{page-d66f1e17185e98d1.js → page-fe54ae510d932bb2.js} +1 -1
- package/.next/static/chunks/app/callback/{page-f4019bfc06b9a21c.js → page-f714c2306a1e9004.js} +1 -1
- package/.next/static/chunks/app/dashboard/settings/pricing/page-86197107690a0580.js +1 -0
- package/.next/static/chunks/app/landing/page-7a83d1be493ddc8c.js +1 -0
- package/.next/static/chunks/app/layout-06e49e3bcc852dbd.js +1 -0
- package/.next/static/chunks/app/login/page-7a4c84e8310a0487.js +1 -0
- package/.next/static/chunks/main-app-2ecba5da1d59188c.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/global-error-f9ac464a7c99aea5.js +1 -0
- package/.next/static/css/{e9178fa7e53ec623.css → 5843ba28152e85f8.css} +1 -1
- package/.next/static/css/7698ede81d1862e2.css +1 -0
- package/bin/10router.mjs +73 -70
- package/bin/update-check.mjs +93 -0
- package/custom-server.js +6 -36
- package/next.config.mjs +1 -1
- package/open-sse/executors/opencode-go.js +2 -0
- package/open-sse/executors/opencode-zen.js +12 -4
- package/open-sse/executors/opencode.js +31 -8
- package/open-sse/handlers/systemoneCore.js +4 -2
- package/open-sse/providers/registry/opencode-zen.js +2 -2
- package/open-sse/providers/registry/opencode.js +3 -3
- package/open-sse/translator/request/openai-to-claude.js +4 -1
- package/package.json +5 -22
- package/src/app/(dashboard)/dashboard/console-log/ConsoleLogClient.tsx +20 -6
- package/src/app/api/providers/[id]/test/testUtils.js +1 -1
- package/src/app/api/proxy-pools/[id]/test/route.js +1 -2
- package/src/lib/consoleLogBuffer.js +2 -1
- package/src/shared/components/AddCustomEmbeddingModal.tsx +0 -14
- package/src/shared/components/ChangelogModal.tsx +0 -6
- package/src/shared/components/CursorAuthModal.tsx +0 -7
- package/src/shared/components/EditConnectionModal.tsx +0 -22
- package/src/shared/components/GitLabAuthModal.tsx +0 -8
- package/src/shared/components/Header.tsx +0 -6
- package/src/shared/components/HeaderMenu.tsx +0 -5
- package/src/shared/components/IFlowCookieModal.tsx +0 -7
- package/src/shared/components/ModelSelectModal.tsx +0 -19
- package/src/shared/components/NoAuthProxyCard.tsx +0 -5
- package/src/shared/components/OAuthModal.tsx +0 -11
- package/src/shared/components/ProviderIcon.tsx +0 -11
- package/src/shared/components/XiaomiMimoAuthModal.tsx +0 -7
- package/src/shared/utils/cn.ts +3 -4
- package/src/sse/utils/logger.ts +62 -13
- package/.next/server/chunks/1157.js +0 -1
- package/.next/server/chunks/257.js +0 -67
- package/.next/server/chunks/3533.js +0 -1
- package/.next/static/chunks/1278-d7d5375869132de1.js +0 -1
- package/.next/static/chunks/208-fcb6c54f9db5664f.js +0 -1
- package/.next/static/chunks/3153-fde052e626cc6d40.js +0 -67
- package/.next/static/chunks/6817-449f7a2452845c74.js +0 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/basic-chat/page-c074ab1b76a6c8ba.js +0 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-654e770c4dca90e8.js +0 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-aac9a9397d3f7f17.js +0 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-d60651b77028b014.js +0 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/[id]/page-3d78f5834ef97b82.js +0 -10
- package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/page-e41bf53886195393.js +0 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/page-670583d9f9c104af.js +0 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-7c9e30c4985582a6.js +0 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/token-saver/page-388b616d8c2aa3fc.js +0 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/usage/page-466f7a8f7319ad85.js +0 -1
- package/.next/static/chunks/app/dashboard/settings/pricing/page-b9ee16bd322c018e.js +0 -1
- package/.next/static/chunks/app/landing/page-a088604744d51552.js +0 -1
- package/.next/static/chunks/app/layout-56cb8d3773a70c00.js +0 -1
- package/.next/static/chunks/app/login/page-dd11fb741ed7fda4.js +0 -1
- package/.next/static/chunks/main-app-17abdf14ff64ab69.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/global-error-21486667022bd4cf.js +0 -1
- package/.next/static/css/8fbebca0759ae504.css +0 -1
- package/scripts/dev-local.mjs +0 -67
- /package/.next/static/{AiSMDHTT8m1mHG-uAmkFq → 3VUtJ57WoimjS256-MQ04}/_buildManifest.js +0 -0
- /package/.next/static/{AiSMDHTT8m1mHG-uAmkFq → 3VUtJ57WoimjS256-MQ04}/_ssgManifest.js +0 -0
package/bin/10router.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// ── 10ROUTER CLI ────────────────────────────────────────────────────
|
|
3
|
-
// Local lifecycle: start/stop/status/logs/open
|
|
4
|
-
// Stdlib
|
|
3
|
+
// Local lifecycle: start/stop/status/logs/open. No Docker.
|
|
4
|
+
// Stdlib + already-installed `chalk` (colors, NO_COLOR-aware) and `open`.
|
|
5
5
|
|
|
6
6
|
import { spawn, spawnSync } from "node:child_process";
|
|
7
7
|
import fs from "node:fs";
|
|
@@ -9,6 +9,9 @@ import os from "node:os";
|
|
|
9
9
|
import path from "node:path";
|
|
10
10
|
import { fileURLToPath } from "node:url";
|
|
11
11
|
|
|
12
|
+
import { checkUpdate } from "./update-check.mjs";
|
|
13
|
+
import chalk from "chalk";
|
|
14
|
+
|
|
12
15
|
const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
13
16
|
const DEV_PORT = "20127";
|
|
14
17
|
const PROD_PORT = "20128";
|
|
@@ -64,14 +67,17 @@ async function health(port) {
|
|
|
64
67
|
}
|
|
65
68
|
}
|
|
66
69
|
|
|
70
|
+
// ── UPDATE CHECK (npm mode only, fail-open, cached) ───────────────
|
|
71
|
+
// Logic lives in ./update-check.mjs (side-effect-free, testable).
|
|
72
|
+
|
|
67
73
|
// ── COMMANDS ────────────────────────────────────────────────────────
|
|
68
74
|
async function cmdStart(opts) {
|
|
69
|
-
// npm-installed package has a prebuilt .next —
|
|
70
|
-
const mode =
|
|
75
|
+
// npm-installed package has a prebuilt .next — always prod there.
|
|
76
|
+
const mode = IS_REPO ? "dev" : "prod";
|
|
71
77
|
const port = opts.port || (mode === "prod" ? PROD_PORT : DEV_PORT);
|
|
72
78
|
const st = readState();
|
|
73
79
|
if (st && isAlive(st.pid)) {
|
|
74
|
-
console.log(`already running (pid ${st.pid}, ${st.mode} :${st.port})`);
|
|
80
|
+
console.log(chalk.yellow(`already running (pid ${st.pid}, ${st.mode} :${st.port})`));
|
|
75
81
|
return;
|
|
76
82
|
}
|
|
77
83
|
if (st) fs.rmSync(PID_FILE, { force: true }); // stale pidfile
|
|
@@ -80,7 +86,7 @@ async function cmdStart(opts) {
|
|
|
80
86
|
let cmd, args;
|
|
81
87
|
if (mode === "prod") {
|
|
82
88
|
if (!fs.existsSync(path.join(ROOT, ".next"))) {
|
|
83
|
-
console.error("no .next build found — run `pnpm build` first");
|
|
89
|
+
console.error(chalk.red("no .next build found — run `pnpm build` first"));
|
|
84
90
|
process.exitCode = 1;
|
|
85
91
|
return;
|
|
86
92
|
}
|
|
@@ -93,7 +99,7 @@ async function cmdStart(opts) {
|
|
|
93
99
|
}
|
|
94
100
|
|
|
95
101
|
if (opts.foreground) {
|
|
96
|
-
console.log(`[${mode}] ${baseUrl(port)} (foreground, Ctrl+C to stop)`);
|
|
102
|
+
console.log(chalk.green(`[${mode}] ${baseUrl(port)} (foreground, Ctrl+C to stop)`));
|
|
97
103
|
const child = spawn(cmd, args, { cwd: ROOT, stdio: "inherit", env });
|
|
98
104
|
const stop = () => child.kill();
|
|
99
105
|
process.once("SIGINT", stop);
|
|
@@ -116,8 +122,8 @@ async function cmdStart(opts) {
|
|
|
116
122
|
PID_FILE,
|
|
117
123
|
JSON.stringify({ pid: child.pid, port: String(port), mode, startedAt: Date.now() }),
|
|
118
124
|
);
|
|
119
|
-
console.log(`started ${mode} (pid ${child.pid}) → ${baseUrl(port)}`);
|
|
120
|
-
console.log(`logs: ${LOG_FILE}`);
|
|
125
|
+
console.log(chalk.green(`started ${mode} (pid ${child.pid}) → ${baseUrl(port)}`));
|
|
126
|
+
console.log(chalk.dim(`logs: ${LOG_FILE}`));
|
|
121
127
|
}
|
|
122
128
|
|
|
123
129
|
function killTree(pid) {
|
|
@@ -139,17 +145,17 @@ function killTree(pid) {
|
|
|
139
145
|
function cmdStop() {
|
|
140
146
|
const st = readState();
|
|
141
147
|
if (!st) {
|
|
142
|
-
console.log("not running (no pidfile)");
|
|
148
|
+
console.log(chalk.yellow("not running (no pidfile)"));
|
|
143
149
|
return;
|
|
144
150
|
}
|
|
145
151
|
if (!isAlive(st.pid)) {
|
|
146
152
|
fs.rmSync(PID_FILE, { force: true });
|
|
147
|
-
console.log("stale pidfile removed — was not running");
|
|
153
|
+
console.log(chalk.yellow("stale pidfile removed — was not running"));
|
|
148
154
|
return;
|
|
149
155
|
}
|
|
150
156
|
killTree(st.pid);
|
|
151
157
|
fs.rmSync(PID_FILE, { force: true });
|
|
152
|
-
console.log(`stopped (was pid ${st.pid}, ${st.mode} :${st.port})`);
|
|
158
|
+
console.log(chalk.green(`stopped (was pid ${st.pid}, ${st.mode} :${st.port})`));
|
|
153
159
|
}
|
|
154
160
|
|
|
155
161
|
async function cmdStatus() {
|
|
@@ -158,17 +164,19 @@ async function cmdStatus() {
|
|
|
158
164
|
if (st && !alive) fs.rmSync(PID_FILE, { force: true }); // clean stale
|
|
159
165
|
const port = st?.port || process.env.PORT;
|
|
160
166
|
const ok = port ? await health(port) : false;
|
|
161
|
-
console.log(
|
|
167
|
+
console.log(
|
|
168
|
+
`running: ${alive ? chalk.green(`yes (pid ${st.pid}, ${st.mode})`) : chalk.red("no")}`,
|
|
169
|
+
);
|
|
162
170
|
console.log(
|
|
163
171
|
port
|
|
164
|
-
? `health: ${ok ? `ok ${baseUrl(port)}/api/health` : `down :${port}`}`
|
|
165
|
-
:
|
|
172
|
+
? `health: ${ok ? chalk.green(`ok ${baseUrl(port)}/api/health`) : chalk.red(`down :${port}`)}`
|
|
173
|
+
: `health: ${chalk.dim("— (nothing started, PORT unset)")}`,
|
|
166
174
|
);
|
|
167
|
-
console.log(`data: ${DATA_DIR}`);
|
|
175
|
+
console.log(`data: ${chalk.dim(DATA_DIR)}`);
|
|
168
176
|
if (!alive) process.exitCode = 1;
|
|
169
177
|
}
|
|
170
178
|
|
|
171
|
-
function cmdLogs(
|
|
179
|
+
function cmdLogs() {
|
|
172
180
|
let text;
|
|
173
181
|
try {
|
|
174
182
|
text = fs.readFileSync(LOG_FILE, "utf8");
|
|
@@ -177,9 +185,7 @@ function cmdLogs(opts) {
|
|
|
177
185
|
return;
|
|
178
186
|
}
|
|
179
187
|
const lines = text.trimEnd().split("\n");
|
|
180
|
-
|
|
181
|
-
process.stdout.write(lines.slice(-n).join("\n") + "\n");
|
|
182
|
-
if (!opts.follow) return;
|
|
188
|
+
process.stdout.write(lines.slice(-50).join("\n") + "\n");
|
|
183
189
|
// follow: poll for appended bytes (cross-platform, no `tail` dep)
|
|
184
190
|
let pos = fs.statSync(LOG_FILE).size;
|
|
185
191
|
const timer = setInterval(() => {
|
|
@@ -208,68 +214,63 @@ async function cmdOpen(opts) {
|
|
|
208
214
|
console.log(url);
|
|
209
215
|
}
|
|
210
216
|
|
|
211
|
-
function cmdDoctor() {
|
|
212
|
-
const fails = [];
|
|
213
|
-
const check = (name, ok, hint = "") => {
|
|
214
|
-
console.log(`${ok ? "ok " : "FAIL"} ${name}${ok ? "" : ` — ${hint}`}`);
|
|
215
|
-
if (!ok) fails.push(name);
|
|
216
|
-
};
|
|
217
|
-
const major = Number(process.versions.node.split(".")[0]);
|
|
218
|
-
check(`node ${process.version}`, major >= 20, "need node >= 20");
|
|
219
|
-
if (IS_REPO) {
|
|
220
|
-
const pnpm = spawnSync("pnpm", ["--version"], { encoding: "utf8" });
|
|
221
|
-
check(`pnpm ${pnpm.stdout?.trim() || "?"}`, pnpm.status === 0, "need pnpm for dev mode");
|
|
222
|
-
}
|
|
223
|
-
try {
|
|
224
|
-
fs.mkdirSync(DATA_DIR, { recursive: true });
|
|
225
|
-
fs.accessSync(DATA_DIR, fs.constants.W_OK);
|
|
226
|
-
check(`DATA_DIR ${DATA_DIR}`, true);
|
|
227
|
-
} catch {
|
|
228
|
-
check(`DATA_DIR ${DATA_DIR}`, false, "not writable");
|
|
229
|
-
}
|
|
230
|
-
check(
|
|
231
|
-
".next build (for start --prod)",
|
|
232
|
-
fs.existsSync(path.join(ROOT, ".next")),
|
|
233
|
-
"run pnpm build",
|
|
234
|
-
);
|
|
235
|
-
if (fails.length) process.exitCode = 1;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
217
|
function help() {
|
|
239
|
-
|
|
218
|
+
const H = chalk.green;
|
|
219
|
+
const C = chalk.blue;
|
|
220
|
+
console.log(`${H.bold("10router")} ${chalk.dim(`— local gateway lifecycle (DATA_DIR=${DATA_DIR})`)}
|
|
240
221
|
|
|
241
|
-
|
|
222
|
+
${H("Usage:")} 10router [OPTIONS] <COMMAND>
|
|
242
223
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
stop
|
|
246
|
-
status
|
|
247
|
-
logs
|
|
248
|
-
open
|
|
249
|
-
doctor node/pnpm/DATA_DIR/build checks
|
|
250
|
-
help | --help this text
|
|
251
|
-
--version package version
|
|
224
|
+
${H("Commands:")}
|
|
225
|
+
${C("start")} Start gateway
|
|
226
|
+
${C("stop")} Stop background gateway
|
|
227
|
+
${C("status")} Show pid, health and paths
|
|
228
|
+
${C("logs")} Tail log (follows)
|
|
229
|
+
${C("open")} Open dashboard in browser
|
|
252
230
|
|
|
253
|
-
|
|
231
|
+
${H("Options:")}
|
|
232
|
+
${C("-p, --port <N>")} Gateway port (default :${PROD_PORT})
|
|
233
|
+
${C(" --foreground")} Run in foreground (Ctrl+C to stop)
|
|
234
|
+
${C("-h, --help")} Show this help
|
|
235
|
+
${C("-V, --version")} Show package version`);
|
|
254
236
|
}
|
|
255
237
|
|
|
256
238
|
// ── ARGS ────────────────────────────────────────────────────────────
|
|
257
|
-
const
|
|
239
|
+
const _all = process.argv.slice(2);
|
|
240
|
+
// Strip --update-preview [ver] before command dispatch (dev preview only).
|
|
241
|
+
const _pv = _all.indexOf("--update-preview");
|
|
242
|
+
const _args =
|
|
243
|
+
_pv >= 0 && _all[_pv + 1] && /^[v\d]/.test(_all[_pv + 1])
|
|
244
|
+
? [..._all.slice(0, _pv), ..._all.slice(_pv + 2)]
|
|
245
|
+
: _pv >= 0
|
|
246
|
+
? [..._all.slice(0, _pv), ..._all.slice(_pv + 1)]
|
|
247
|
+
: _all;
|
|
248
|
+
const [cmd, ...rest] = _args;
|
|
258
249
|
const flag = (s, l) => rest.includes(s) || (l && rest.includes(l));
|
|
259
250
|
const val = (s, l) => {
|
|
260
251
|
const i = rest.findIndex((a) => a === s || a === l);
|
|
261
252
|
return i >= 0 ? rest[i + 1] : undefined;
|
|
262
253
|
};
|
|
263
254
|
const opts = {
|
|
264
|
-
prod: flag("--prod"),
|
|
265
|
-
dev: flag("--dev"),
|
|
266
255
|
foreground: flag("--foreground") || flag("--fg"),
|
|
267
|
-
follow: flag("-f", "--follow"),
|
|
268
256
|
port: val("--port", "-p"),
|
|
269
|
-
n: Number(val("-n", "--lines")) || undefined,
|
|
270
257
|
};
|
|
271
258
|
|
|
272
259
|
const run = async () => {
|
|
260
|
+
// Update notice: stderr only (stdout stays pipeable), fail-open, npm-only.
|
|
261
|
+
// Dev preview: `--update-preview [ver] <cmd>` shows the prod notice in-repo.
|
|
262
|
+
const previewIdx = _all.indexOf("--update-preview");
|
|
263
|
+
const previewArg = previewIdx >= 0 ? _all[previewIdx + 1] : null;
|
|
264
|
+
const previewLatest =
|
|
265
|
+
previewIdx >= 0 ? (previewArg && /^[v\d]/.test(previewArg) ? previewArg : "9.9.9") : null;
|
|
266
|
+
const notice = await checkUpdate({
|
|
267
|
+
root: ROOT,
|
|
268
|
+
dataDir: DATA_DIR,
|
|
269
|
+
isRepo: IS_REPO,
|
|
270
|
+
argv: rest,
|
|
271
|
+
previewLatest,
|
|
272
|
+
});
|
|
273
|
+
if (notice) console.error(chalk.yellow.bold(notice));
|
|
273
274
|
switch (cmd) {
|
|
274
275
|
case "start":
|
|
275
276
|
return cmdStart(opts);
|
|
@@ -278,20 +279,22 @@ const run = async () => {
|
|
|
278
279
|
case "status":
|
|
279
280
|
return cmdStatus();
|
|
280
281
|
case "logs":
|
|
281
|
-
return cmdLogs(
|
|
282
|
+
return cmdLogs();
|
|
282
283
|
case "open":
|
|
283
284
|
return cmdOpen(opts);
|
|
284
|
-
case "
|
|
285
|
-
|
|
286
|
-
case "
|
|
287
|
-
|
|
285
|
+
case "-h":
|
|
286
|
+
case "--help":
|
|
287
|
+
case "help":
|
|
288
|
+
return help();
|
|
289
|
+
case "-V":
|
|
290
|
+
case "--version": {
|
|
288
291
|
const pkg = JSON.parse(fs.readFileSync(path.join(ROOT, "package.json"), "utf8"));
|
|
289
292
|
console.log(pkg.version);
|
|
290
293
|
return;
|
|
291
294
|
}
|
|
292
295
|
default:
|
|
293
296
|
help();
|
|
294
|
-
if (cmd
|
|
297
|
+
if (cmd) process.exitCode = 1;
|
|
295
298
|
}
|
|
296
299
|
};
|
|
297
300
|
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// ── UPDATE CHECK ────────────────────────────────────────────────────
|
|
3
|
+
// Fail-open latest-version notice for npm-installed CLI. Stdlib only,
|
|
4
|
+
// side-effect-free (no top-level run) so tests can import it.
|
|
5
|
+
|
|
6
|
+
import fs from "node:fs";
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
|
|
9
|
+
export const UPDATE_TTL = 24 * 3600 * 1000;
|
|
10
|
+
|
|
11
|
+
export function cmpVer(a, b) {
|
|
12
|
+
const pa = String(a).replace(/^v/, "").split("-")[0].split(".").map(Number);
|
|
13
|
+
const pb = String(b).replace(/^v/, "").split("-")[0].split(".").map(Number);
|
|
14
|
+
for (let i = 0; i < Math.max(pa.length, pb.length); i++) {
|
|
15
|
+
const d = (pa[i] || 0) - (pb[i] || 0);
|
|
16
|
+
if (d) return d < 0 ? -1 : 1;
|
|
17
|
+
}
|
|
18
|
+
// numeric tie: prerelease < release (1.0.0-alpha < 1.0.0)
|
|
19
|
+
const preA = String(a).includes("-") ? 0 : 1;
|
|
20
|
+
const preB = String(b).includes("-") ? 0 : 1;
|
|
21
|
+
return preA === preB ? 0 : preA < preB ? -1 : 1;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export async function fetchLatest(pkgName, fetchFn = fetch) {
|
|
25
|
+
try {
|
|
26
|
+
const r = await fetchFn(`https://registry.npmjs.org/${pkgName.replace("/", "%2F")}/latest`, {
|
|
27
|
+
signal: AbortSignal.timeout(3000),
|
|
28
|
+
});
|
|
29
|
+
if (!r.ok) return null;
|
|
30
|
+
return (await r.json())?.version || null;
|
|
31
|
+
} catch {
|
|
32
|
+
return null; // offline → silent
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Returns the notice string, or null when silent. Never throws.
|
|
37
|
+
export async function checkUpdate({
|
|
38
|
+
root,
|
|
39
|
+
dataDir,
|
|
40
|
+
isRepo,
|
|
41
|
+
argv = [],
|
|
42
|
+
env = process.env,
|
|
43
|
+
fetchFn = fetch,
|
|
44
|
+
now = Date.now(),
|
|
45
|
+
previewLatest = null,
|
|
46
|
+
} = {}) {
|
|
47
|
+
try {
|
|
48
|
+
// previewLatest: dev-only escape hatch (`--update-preview X.Y.Z`) to see
|
|
49
|
+
// the prod notice without network. Still gated by the same opt-outs.
|
|
50
|
+
if (argv.includes("--no-update-check")) return null;
|
|
51
|
+
if (env.NO_UPDATE_CHECK === "1" || env.CI) return null;
|
|
52
|
+
if (!previewLatest && isRepo) return null;
|
|
53
|
+
let pkg;
|
|
54
|
+
try {
|
|
55
|
+
pkg = JSON.parse(fs.readFileSync(path.join(root, "package.json"), "utf8"));
|
|
56
|
+
} catch {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
if (!pkg?.name || !pkg?.version) return null;
|
|
60
|
+
const cacheFile = path.join(dataDir, "update-check.json");
|
|
61
|
+
let cached = null;
|
|
62
|
+
try {
|
|
63
|
+
cached = JSON.parse(fs.readFileSync(cacheFile, "utf8"));
|
|
64
|
+
} catch {
|
|
65
|
+
/* no cache */
|
|
66
|
+
}
|
|
67
|
+
let latest = previewLatest;
|
|
68
|
+
if (!latest) {
|
|
69
|
+
latest = cached?.latest && now - (cached.checkedAt || 0) < UPDATE_TTL ? cached.latest : null;
|
|
70
|
+
}
|
|
71
|
+
if (!latest) {
|
|
72
|
+
latest = await fetchLatest(pkg.name, fetchFn);
|
|
73
|
+
if (latest) {
|
|
74
|
+
try {
|
|
75
|
+
fs.mkdirSync(dataDir, { recursive: true });
|
|
76
|
+
fs.writeFileSync(cacheFile, JSON.stringify({ latest, checkedAt: now }));
|
|
77
|
+
} catch {
|
|
78
|
+
/* cache best-effort */
|
|
79
|
+
}
|
|
80
|
+
} else latest = cached?.latest || null; // stale cache beats silence
|
|
81
|
+
}
|
|
82
|
+
if (!latest || cmpVer(pkg.version, latest) >= 0) return null;
|
|
83
|
+
const ua = env.npm_config_user_agent || "";
|
|
84
|
+
const install = ua.startsWith("pnpm")
|
|
85
|
+
? `pnpm add -g ${pkg.name}@latest`
|
|
86
|
+
: `npm install -g ${pkg.name}@latest`;
|
|
87
|
+
// stop first: upgrade replaces running code — stop is idempotent when idle.
|
|
88
|
+
// ponytail: single stop+install line; split per-status messaging when needed.
|
|
89
|
+
return `\nUpdate available: ${pkg.version} → ${latest}\n 10router stop; ${install}\n`;
|
|
90
|
+
} catch {
|
|
91
|
+
return null; // fail-open: update notice never breaks the CLI
|
|
92
|
+
}
|
|
93
|
+
}
|
package/custom-server.js
CHANGED
|
@@ -2,7 +2,6 @@ const http = require("http");
|
|
|
2
2
|
const path = require("path");
|
|
3
3
|
const fs = require("fs");
|
|
4
4
|
const crypto = require("crypto");
|
|
5
|
-
const { pathToFileURL } = require("url");
|
|
6
5
|
|
|
7
6
|
const origCreate = http.createServer.bind(http);
|
|
8
7
|
|
|
@@ -13,38 +12,12 @@ const origCreate = http.createServer.bind(http);
|
|
|
13
12
|
const PEER_TOKEN = crypto.randomBytes(24).toString("hex");
|
|
14
13
|
process.env.TENROUTER_PEER_TOKEN = PEER_TOKEN;
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
// — initializeApp also starts the same scheduler when the Next app boots.
|
|
23
|
-
const modPath = path.join(__dirname, "src", "sse", "services", "backgroundTokenRefresh.js");
|
|
24
|
-
import(pathToFileURL(modPath).href)
|
|
25
|
-
.then((m) => {
|
|
26
|
-
try {
|
|
27
|
-
m.startBackgroundTokenRefresh();
|
|
28
|
-
} catch (e) {
|
|
29
|
-
console.error("[BackgroundTokenRefresh] start failed:", e && e.message ? e.message : e);
|
|
30
|
-
}
|
|
31
|
-
const stop = () => {
|
|
32
|
-
try {
|
|
33
|
-
m.stopBackgroundTokenRefresh();
|
|
34
|
-
} catch {
|
|
35
|
-
/* ignore */
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
process.once("SIGINT", stop);
|
|
39
|
-
process.once("SIGTERM", stop);
|
|
40
|
-
})
|
|
41
|
-
.catch((e) => {
|
|
42
|
-
// Expected in published CLI standalone (src/ not on disk). App bootstrap covers it.
|
|
43
|
-
if (process.env.DEBUG_BACKGROUND_TOKEN_REFRESH) {
|
|
44
|
-
console.error("[BackgroundTokenRefresh] import failed:", e && e.message ? e.message : e);
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
}
|
|
15
|
+
// NOTE: background token refresh is started by the app itself
|
|
16
|
+
// (src/shared/services/bootstrap.ts → initializeApp). This entry used to
|
|
17
|
+
// dynamic-import src/sse/services/backgroundTokenRefresh.js, but that path
|
|
18
|
+
// never resolves at runtime (only the .ts source exists on disk) — the import
|
|
19
|
+
// always failed and the bootstrap scheduler covered it. Removed so the server
|
|
20
|
+
// entry has no src/ coupling.
|
|
48
21
|
|
|
49
22
|
// Wrap Next standalone HTTP server: derive client IP from the TCP socket
|
|
50
23
|
// (unspoofable) and strip client-supplied forwarding headers so downstream
|
|
@@ -74,9 +47,6 @@ http.createServer = (...args) => {
|
|
|
74
47
|
return handler(req, res);
|
|
75
48
|
};
|
|
76
49
|
const server = origCreate(...rest, wrapped);
|
|
77
|
-
server.once("listening", () => {
|
|
78
|
-
startBackgroundTokenRefreshFromCustomServer();
|
|
79
|
-
});
|
|
80
50
|
const origEmit = server.emit;
|
|
81
51
|
// JBR 25 sends h2c upgrades that the HTTP/1.1 server would otherwise close.
|
|
82
52
|
server.emit = function (event, ...eventArgs) {
|
package/next.config.mjs
CHANGED
|
@@ -10,7 +10,7 @@ const proxyClientMaxBodySize = process.env.TENROUTER_PROXY_CLIENT_MAX_BODY_SIZE
|
|
|
10
10
|
|
|
11
11
|
/** @type {import('next').NextConfig} */
|
|
12
12
|
const nextConfig = {
|
|
13
|
-
distDir:
|
|
13
|
+
distDir: ".next",
|
|
14
14
|
output: "standalone",
|
|
15
15
|
// `open` must stay external. It derives its own directory from `import.meta.url`, and
|
|
16
16
|
// webpack replaces that with the absolute path of the BUILD machine as a string literal.
|
|
@@ -174,11 +174,13 @@ export class OpenCodeGoExecutor extends DefaultExecutor {
|
|
|
174
174
|
const prepared = credentials?.[SESSION_FIELD];
|
|
175
175
|
if (prepared) {
|
|
176
176
|
headers[SESSION_HEADER] = prepared;
|
|
177
|
+
headers["x-opencode-session-id"] = prepared;
|
|
177
178
|
return headers;
|
|
178
179
|
}
|
|
179
180
|
|
|
180
181
|
const fallback = this.prepareRequestCredentials({ credentials });
|
|
181
182
|
headers[SESSION_HEADER] = fallback[SESSION_FIELD];
|
|
183
|
+
headers["x-opencode-session-id"] = fallback[SESSION_FIELD];
|
|
182
184
|
return headers;
|
|
183
185
|
}
|
|
184
186
|
|
|
@@ -15,7 +15,7 @@ const MAX_SESSION_LENGTH = 256;
|
|
|
15
15
|
|
|
16
16
|
const RESPONSES_BASE_URL = "https://opencode.ai/zen/v1/responses";
|
|
17
17
|
const MAX_TOOL_NAME_LEN = 128;
|
|
18
|
-
const OPENCODE_UA = "opencode/1.18.
|
|
18
|
+
const OPENCODE_UA = "opencode/1.18.35";
|
|
19
19
|
export const OPENCODE_SESSION_RE = /^ses_[0-9a-f]{12}[0-9A-Za-z]{14}$/;
|
|
20
20
|
const BASE62_CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
|
21
21
|
// Free-tier fingerprint (mirrors opencode executor, PR #4132): upstream 403s
|
|
@@ -69,9 +69,15 @@ export function translateSessionId(sessionId, clientTool = "") {
|
|
|
69
69
|
.createHash("sha256")
|
|
70
70
|
.update(`opencode\0${clientTool || "generic"}\0${sessionId || ""}`)
|
|
71
71
|
.digest();
|
|
72
|
-
const
|
|
72
|
+
const current = BigInt(Date.now()) * 0x1000n + 1n;
|
|
73
|
+
const value = ~current;
|
|
74
|
+
const timeHex = Array.from({ length: 6 }, (_, index) =>
|
|
75
|
+
Number((value >> BigInt(40 - 8 * index)) & 0xffn)
|
|
76
|
+
.toString(16)
|
|
77
|
+
.padStart(2, "0"),
|
|
78
|
+
).join("");
|
|
73
79
|
let randomPart = "";
|
|
74
|
-
for (let i =
|
|
80
|
+
for (let i = 0; i < 14; i++) {
|
|
75
81
|
randomPart += BASE62_CHARS[digest[i] % 62];
|
|
76
82
|
}
|
|
77
83
|
return `ses_${timeHex}${randomPart}`;
|
|
@@ -291,15 +297,17 @@ export class OpenCodeZenExecutor extends DefaultExecutor {
|
|
|
291
297
|
const downstreamUa = lower["user-agent"] || "";
|
|
292
298
|
// Free-tier gate: spoof the official client UA.
|
|
293
299
|
headers["User-Agent"] = hasValidOpencodeVersion(downstreamUa) ? downstreamUa : OPENCODE_UA;
|
|
294
|
-
headers["x-opencode-client"] = lower["x-opencode-client"] || "
|
|
300
|
+
headers["x-opencode-client"] = lower["x-opencode-client"] || "cli";
|
|
295
301
|
const prepared = credentials?.[SESSION_FIELD];
|
|
296
302
|
if (prepared) {
|
|
297
303
|
headers[SESSION_HEADER] = prepared;
|
|
304
|
+
headers["x-opencode-session-id"] = prepared;
|
|
298
305
|
return headers;
|
|
299
306
|
}
|
|
300
307
|
|
|
301
308
|
const fallback = this.prepareRequestCredentials({ credentials });
|
|
302
309
|
headers[SESSION_HEADER] = fallback[SESSION_FIELD];
|
|
310
|
+
headers["x-opencode-session-id"] = fallback[SESSION_FIELD];
|
|
303
311
|
return headers;
|
|
304
312
|
}
|
|
305
313
|
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
// `noauth` virtual connection (Authorization: Bearer public for everyone).
|
|
27
27
|
const FREE_USAGE_BREAKER_KEY = "opencode-free";
|
|
28
28
|
|
|
29
|
-
const OPENCODE_UA = "opencode/1.18.
|
|
29
|
+
const OPENCODE_UA = "opencode/1.18.35";
|
|
30
30
|
const MAX_SESSION_LENGTH = 256;
|
|
31
31
|
const MAX_TOOL_NAME_LEN = 128;
|
|
32
32
|
const SESSION_HEADER = "x-opencode-session";
|
|
@@ -156,16 +156,33 @@ export function translateSessionId(sessionId, clientTool = "") {
|
|
|
156
156
|
if (typeof sessionId === "string" && OPENCODE_SESSION_RE.test(sessionId.trim())) {
|
|
157
157
|
return sessionId.trim();
|
|
158
158
|
}
|
|
159
|
+
const key = `translated:${clientTool || "generic"}:${sessionId || ""}`;
|
|
160
|
+
const existing = stableOpencodeSessions.get(key);
|
|
161
|
+
if (existing) {
|
|
162
|
+
existing.lastUsed = Date.now();
|
|
163
|
+
return existing.sessionId;
|
|
164
|
+
}
|
|
159
165
|
const digest = crypto
|
|
160
166
|
.createHash("sha256")
|
|
161
167
|
.update(`opencode\0${clientTool || "generic"}\0${sessionId || ""}`)
|
|
162
168
|
.digest();
|
|
163
|
-
const
|
|
169
|
+
const current = BigInt(Date.now()) * 0x1000n + 1n;
|
|
170
|
+
const value = ~current;
|
|
171
|
+
const timeHex = Array.from({ length: 6 }, (_, index) =>
|
|
172
|
+
Number((value >> BigInt(40 - 8 * index)) & 0xffn)
|
|
173
|
+
.toString(16)
|
|
174
|
+
.padStart(2, "0"),
|
|
175
|
+
).join("");
|
|
164
176
|
let randomPart = "";
|
|
165
|
-
for (let i =
|
|
177
|
+
for (let i = 0; i < 14; i++) {
|
|
166
178
|
randomPart += BASE62_CHARS[digest[i] % 62];
|
|
167
179
|
}
|
|
168
|
-
|
|
180
|
+
const sid = `ses_${timeHex}${randomPart}`;
|
|
181
|
+
if (stableOpencodeSessions.size >= MAX_STABLE_SESSIONS) {
|
|
182
|
+
stableOpencodeSessions.delete(stableOpencodeSessions.keys().next().value);
|
|
183
|
+
}
|
|
184
|
+
stableOpencodeSessions.set(key, { sessionId: sid, lastUsed: Date.now() });
|
|
185
|
+
return sid;
|
|
169
186
|
}
|
|
170
187
|
|
|
171
188
|
function normalizeSession(value) {
|
|
@@ -267,14 +284,19 @@ function lastUserText(body) {
|
|
|
267
284
|
// session plus the last user message so retries share the id.
|
|
268
285
|
export function deriveRequestId(sessionId, body) {
|
|
269
286
|
const text = lastUserText(body);
|
|
270
|
-
|
|
287
|
+
const current = BigInt(Date.now()) * 0x1000n + 1n;
|
|
288
|
+
const timeHex = Array.from({ length: 6 }, (_, index) =>
|
|
289
|
+
Number((current >> BigInt(40 - 8 * index)) & 0xffn)
|
|
290
|
+
.toString(16)
|
|
291
|
+
.padStart(2, "0"),
|
|
292
|
+
).join("");
|
|
293
|
+
if (!text) return `msg_${timeHex}${unstableRandom()}`;
|
|
271
294
|
const digest = crypto
|
|
272
295
|
.createHash("sha256")
|
|
273
296
|
.update(`opencode-req\0${sessionId || ""}\0${text}`)
|
|
274
297
|
.digest();
|
|
275
|
-
const timeHex = digest.subarray(0, 6).toString("hex");
|
|
276
298
|
let randomPart = "";
|
|
277
|
-
for (let i =
|
|
299
|
+
for (let i = 0; i < 14; i++) {
|
|
278
300
|
randomPart += BASE62_CHARS[digest[i] % 62];
|
|
279
301
|
}
|
|
280
302
|
const id = `msg_${timeHex}${randomPart}`;
|
|
@@ -606,8 +628,9 @@ export class OpenCodeExecutor extends BaseExecutor {
|
|
|
606
628
|
"Content-Type": "application/json",
|
|
607
629
|
Authorization: "Bearer public",
|
|
608
630
|
"User-Agent": isOpencodeDownstream ? downstreamUa : OPENCODE_UA,
|
|
609
|
-
"x-opencode-client": lower["x-opencode-client"] || "
|
|
631
|
+
"x-opencode-client": lower["x-opencode-client"] || "cli",
|
|
610
632
|
"x-opencode-session": session,
|
|
633
|
+
"x-opencode-session-id": session,
|
|
611
634
|
"x-opencode-request": requestId,
|
|
612
635
|
"x-opencode-project": lower["x-opencode-project"] || "global",
|
|
613
636
|
Accept: stream ? "text/event-stream" : "*/*",
|
|
@@ -30,12 +30,14 @@ export async function handleSystemoneCore({ body, modelInfo, credentials, log, o
|
|
|
30
30
|
|
|
31
31
|
// noAuth free lanes carry accessToken "public" from the credential stub.
|
|
32
32
|
const token = credentials?.apiKey || credentials?.accessToken;
|
|
33
|
+
// Zen lanes expect the official client session header on every request.
|
|
34
|
+
const session = generateSessionId();
|
|
33
35
|
const headers = {
|
|
34
36
|
"Content-Type": "application/json",
|
|
35
37
|
...(token ? { Authorization: `Bearer ${token}` } : {}),
|
|
36
38
|
...(cfg.headers || {}),
|
|
37
|
-
|
|
38
|
-
"x-opencode-session":
|
|
39
|
+
"x-opencode-session": session,
|
|
40
|
+
"x-opencode-session-id": session,
|
|
39
41
|
};
|
|
40
42
|
const requestBody = { ...body, model };
|
|
41
43
|
|
|
@@ -284,8 +284,8 @@ export default {
|
|
|
284
284
|
systemoneConfig: {
|
|
285
285
|
baseUrl: "https://opencode.ai/zen/v1/systemone",
|
|
286
286
|
headers: {
|
|
287
|
-
"x-opencode-client": "
|
|
288
|
-
"User-Agent": "opencode/1.18.
|
|
287
|
+
"x-opencode-client": "cli",
|
|
288
|
+
"User-Agent": "opencode/1.18.35",
|
|
289
289
|
},
|
|
290
290
|
},
|
|
291
291
|
modelsFetcher: { url: "https://opencode.ai/zen/v1/models", type: "opencode-free" },
|
|
@@ -15,7 +15,7 @@ export default {
|
|
|
15
15
|
transport: {
|
|
16
16
|
baseUrl: "https://opencode.ai",
|
|
17
17
|
headers: {
|
|
18
|
-
"x-opencode-client": "
|
|
18
|
+
"x-opencode-client": "cli",
|
|
19
19
|
},
|
|
20
20
|
forceStream: true,
|
|
21
21
|
noAuth: true,
|
|
@@ -45,8 +45,8 @@ export default {
|
|
|
45
45
|
systemoneConfig: {
|
|
46
46
|
baseUrl: "https://opencode.ai/zen/v1/systemone",
|
|
47
47
|
headers: {
|
|
48
|
-
"x-opencode-client": "
|
|
49
|
-
"User-Agent": "opencode/1.18.
|
|
48
|
+
"x-opencode-client": "cli",
|
|
49
|
+
"User-Agent": "opencode/1.18.35",
|
|
50
50
|
},
|
|
51
51
|
},
|
|
52
52
|
modelsFetcher: { url: "https://opencode.ai/zen/v1/models", type: "opencode-free" },
|
|
@@ -224,6 +224,9 @@ function getContentBlocksFromMessage(msg, toolNameMap = new Map()) {
|
|
|
224
224
|
type: CLAUDE_BLOCK.TOOL_RESULT,
|
|
225
225
|
tool_use_id: msg.tool_call_id,
|
|
226
226
|
content: msg.content,
|
|
227
|
+
// Zed's strict parser requires is_error on every tool_result (Anthropic
|
|
228
|
+
// treats it as optional, default false) — always emit the boolean.
|
|
229
|
+
is_error: msg.is_error === true,
|
|
227
230
|
});
|
|
228
231
|
} else if (msg.role === ROLE.USER) {
|
|
229
232
|
if (typeof msg.content === "string") {
|
|
@@ -239,7 +242,7 @@ function getContentBlocksFromMessage(msg, toolNameMap = new Map()) {
|
|
|
239
242
|
type: CLAUDE_BLOCK.TOOL_RESULT,
|
|
240
243
|
tool_use_id: part.tool_use_id,
|
|
241
244
|
content: part.content,
|
|
242
|
-
|
|
245
|
+
is_error: part.is_error === true,
|
|
243
246
|
});
|
|
244
247
|
} else if (part.type === OPENAI_BLOCK.IMAGE_URL) {
|
|
245
248
|
const url = part.image_url.url;
|