@amir83nasr/10router 0.1.11 → 0.1.14
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 +5 -6
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +22 -50
- 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_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_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_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_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_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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/page.js +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_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_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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +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_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_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_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_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_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 +2 -2
- package/.next/server/app/api/auth/saml/test/route.js +1 -1
- package/.next/server/app/api/auth/status/route.js +1 -1
- 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/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 +2 -2
- package/.next/server/app/api/cli-tools/cowork-settings/route.js +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/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 +1 -1
- 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/inworld/voices/route.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/voices/route.js +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/custom/route.js +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/test/route.js +1 -1
- package/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
- package/.next/server/app/api/oauth/codex/bulk-import/route.js +1 -1
- package/.next/server/app/api/oauth/codex/import-token/route.js +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/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/validate/route.js +1 -1
- package/.next/server/app/api/providers/[id]/models/route.js +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-models/route.js +1 -1
- package/.next/server/app/api/providers/client/route.js +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/suggested-models/route.js +1 -1
- package/.next/server/app/api/providers/test-batch/route.js +1 -1
- package/.next/server/app/api/providers/validate/route.js +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 +1 -1
- 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/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/stream/route.js +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/translate/route.js +1 -1
- package/.next/server/app/api/tunnel/disable/route.js +1 -1
- package/.next/server/app/api/tunnel/enable/route.js +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-enable/route.js +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]/route.js +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/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/audio/speech/route.js +1 -1
- package/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
- package/.next/server/app/api/v1/audio/voices/route.js +1 -1
- package/.next/server/app/api/v1/chat/completions/route.js +1 -1
- package/.next/server/app/api/v1/embeddings/route.js +1 -1
- package/.next/server/app/api/v1/images/generations/route.js +2 -2
- 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/models/[...model]/route.js +1 -1
- package/.next/server/app/api/v1/models/info/route.js +1 -1
- package/.next/server/app/api/v1/models/route.js +1 -1
- package/.next/server/app/api/v1/responses/compact/route.js +1 -1
- package/.next/server/app/api/v1/responses/route.js +1 -1
- package/.next/server/app/api/v1/route.js +1 -1
- package/.next/server/app/api/v1/search/route.js +1 -1
- package/.next/server/app/api/v1/systemone/route.js +1 -1
- package/.next/server/app/api/v1/videos/[id]/route.js +1 -1
- package/.next/server/app/api/v1/videos/edits/route.js +1 -1
- package/.next/server/app/api/v1/videos/extensions/route.js +1 -1
- package/.next/server/app/api/v1/videos/generations/route.js +1 -1
- package/.next/server/app/api/v1/web/fetch/route.js +1 -1
- package/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
- package/.next/server/app/api/v1beta/models/route.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/callback.html +1 -1
- package/.next/server/app/callback.rsc +7 -7
- package/.next/server/app/callback.segments/_full.segment.rsc +7 -7
- package/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +7 -7
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/dashboard/settings/pricing.html +1 -1
- package/.next/server/app/dashboard/settings/pricing.rsc +7 -7
- package/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +7 -7
- 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 +7 -7
- package/.next/server/app/dashboard/token-saver.html +1 -1
- package/.next/server/app/dashboard/token-saver.rsc +8 -8
- package/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/dashboard/token-saver.segments/_full.segment.rsc +8 -8
- 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_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_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 +2 -2
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +5 -6
- package/.next/server/chunks/1011.js +1 -1
- package/.next/server/chunks/1194.js +1 -1
- package/.next/server/chunks/1289.js +1 -1
- package/.next/server/chunks/1633.js +1 -1
- package/.next/server/chunks/2282.js +7 -7
- package/.next/server/chunks/2339.js +1 -1
- package/.next/server/chunks/2706.js +1 -1
- package/.next/server/chunks/2801.js +1 -1
- package/.next/server/chunks/3425.js +1 -1
- package/.next/server/chunks/4129.js +1 -1
- package/.next/server/chunks/6056.js +1 -1
- package/.next/server/chunks/7816.js +1 -1
- package/.next/server/chunks/9429.js +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/prefetch-hints.json +0 -24
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/1278-1bef1ffb32ea7f41.js +1 -0
- package/.next/static/chunks/1660-25564899e7912146.js +1 -0
- package/.next/static/chunks/{1699-13ee6864a8a31a96.js → 1699-49be310981e2759e.js} +2 -2
- package/.next/static/chunks/{3577-cd98d40e3099e1b0.js → 3577-1f02993330d7fba7.js} +1 -1
- package/.next/static/chunks/5148-7d67073becfaf162.js +1 -0
- package/.next/static/chunks/{5862-f98c2f3d480b80d2.js → 5862-6f3a3a6d4c00100d.js} +1 -1
- package/.next/static/chunks/6428-5a5f71440049a4e6.js +1 -0
- package/.next/static/chunks/7128-78b41798c1177008.js +1 -0
- package/.next/static/chunks/7835-06b436358f3395f6.js +1 -0
- package/.next/static/chunks/9150-32b4247b1af5e206.js +1 -0
- package/.next/static/chunks/{9ce8c186-3c7d7dbc5d428052.js → 9ce8c186-6cd204e9c27ecee1.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/{page-e8bceccb95695755.js → page-c913b130003c1672.js} +3 -3
- package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/{page-adee408d9de02423.js → page-3bab0c661f222ea3.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/combos/{page-d4c1e29e8d038f09.js → page-76cc2c386af12738.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-58a29f3cb409597a.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-d5f693c646ae044b.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/[id]/{page-b751d9603cb82e62.js → page-7340dad2b87640cf.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/{page-49b3b4867d06cbe0.js → page-32e3e07a8f54ec11.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/page-a7f59da8c0db5cf1.js +1 -0
- package/.next/static/chunks/app/(dashboard)/dashboard/profile/{page-65b2c7989dbe2663.js → page-7123127fd841cfa5.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-d5d480e209fdc55a.js → page-fab6f4b4cccc1a6f.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/providers/new/{page-9b68243ab9555702.js → page-819e98f53bf2f4f7.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/providers/{page-2396571281d02804.js → page-9054f870a5e0f5c6.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/{page-cfd6bcb7e55d7d18.js → page-3e4657b108582404.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/quota/{page-fef6edb7aafd8bd0.js → page-61780f0a2b494680.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/token-saver/{page-bcc37fc2b4089f2f.js → page-4e366abb76514be7.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/usage/{page-697f46461825d7fc.js → page-2d71fa2936b16f45.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/{layout-5039502fc12707c9.js → layout-91f41c68685ed739.js} +1 -1
- package/.next/static/chunks/app/callback/page-8b6862b2e58a129e.js +1 -0
- package/.next/static/chunks/app/dashboard/settings/pricing/page-c1dfa7608ff710d1.js +1 -0
- package/.next/static/chunks/app/landing/page-a76ba2642bd02bf5.js +1 -0
- package/.next/static/chunks/app/layout-cc98f6c7473b86a3.js +1 -0
- package/.next/static/css/efaf98e3b295f727.css +1 -0
- package/.next/static/wBARQPScPhD6SLn7WQvI9/_buildManifest.js +1 -0
- package/CHANGELOG.md +19 -0
- package/open-sse/providers/registry/opencode-go.js +4 -0
- package/open-sse/providers/registry/opencode-zen.js +4 -0
- package/open-sse/providers/registry/opencode.js +3 -0
- package/open-sse/translator/concerns/thinkingUnified.js +16 -1
- package/open-sse/translator/concerns/toolCall.js +2 -1
- package/open-sse/translator/formats/openai.js +10 -2
- package/open-sse/translator/request/claude-to-openai.js +9 -5
- package/open-sse/translator/response/openai-to-claude.js +66 -32
- package/open-sse/translator/schema/defaults.js +6 -0
- package/open-sse/translator/schema/index.js +1 -1
- package/package.json +1 -1
- package/src/app/(dashboard)/dashboard/cli-tools/components/cards/ClaudeToolCard.tsx +10 -0
- package/src/app/api/cli-tools/claude-settings/route.js +10 -0
- package/src/app/globals.css +21 -1
- package/src/shared/components/layouts/DashboardLayout.tsx +2 -8
- package/src/shared/constants/cliTools.js +5 -0
- package/.next/server/app/(dashboard)/dashboard/basic-chat/page.js +0 -1
- package/.next/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +0 -1
- package/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +0 -1
- package/.next/server/app/dashboard/basic-chat.html +0 -1
- package/.next/server/app/dashboard/basic-chat.meta +0 -36
- package/.next/server/app/dashboard/basic-chat.rsc +0 -26
- package/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +0 -31
- package/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +0 -26
- package/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +0 -6
- package/.next/static/Xxof6vr5MvX0-6oReU23d/_buildManifest.js +0 -1
- package/.next/static/chunks/1278-f11c7d84c52342fc.js +0 -1
- package/.next/static/chunks/1471-10f225f62f7469cc.js +0 -1
- package/.next/static/chunks/159-ec207a220d7d5c16.js +0 -1
- package/.next/static/chunks/5113-5c4f5181388aab72.js +0 -1
- package/.next/static/chunks/5778-9d97ce04f2ac118c.js +0 -1
- package/.next/static/chunks/6920-e2b533c1eafa9521.js +0 -1
- package/.next/static/chunks/7835-c1ef8f5cdaaad483.js +0 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/basic-chat/page-ce1364b2b9589785.js +0 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-3cc58622294c8c8a.js +0 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-67516b120adbc4d7.js +0 -1
- package/.next/static/chunks/app/(dashboard)/dashboard/page-315c9f52c472a700.js +0 -1
- package/.next/static/chunks/app/callback/page-f714c2306a1e9004.js +0 -1
- package/.next/static/chunks/app/dashboard/settings/pricing/page-86197107690a0580.js +0 -1
- package/.next/static/chunks/app/landing/page-7a83d1be493ddc8c.js +0 -1
- package/.next/static/chunks/app/layout-dc929483cad9f77f.js +0 -1
- package/.next/static/css/c66cbd684164cacf.css +0 -1
- package/src/app/(dashboard)/dashboard/basic-chat/BasicChatPageClient.tsx +0 -1140
- package/src/app/(dashboard)/dashboard/basic-chat/page.tsx +0 -5
- /package/.next/static/{Xxof6vr5MvX0-6oReU23d → wBARQPScPhD6SLn7WQvI9}/_ssgManifest.js +0 -0
|
@@ -31,6 +31,9 @@ export default {
|
|
|
31
31
|
format: "openai",
|
|
32
32
|
baseUrl: "https://opencode.ai/inference/openai/v1/chat/completions",
|
|
33
33
|
auth: { combined: true, header: "Authorization", scheme: "bearer" },
|
|
34
|
+
// OpenAI dialect only: the gateway rejects `thinking`/`enable_thinking`
|
|
35
|
+
// (400 unknown field "thinking"), so normalize reasoning to reasoning_effort.
|
|
36
|
+
thinkingFormat: "openai",
|
|
34
37
|
},
|
|
35
38
|
{
|
|
36
39
|
format: "claude",
|
|
@@ -41,6 +44,7 @@ export default {
|
|
|
41
44
|
format: "openai-responses",
|
|
42
45
|
baseUrl: "https://opencode.ai/inference/openai/v1/responses",
|
|
43
46
|
auth: { combined: true, header: "Authorization", scheme: "bearer" },
|
|
47
|
+
thinkingFormat: "openai",
|
|
44
48
|
},
|
|
45
49
|
],
|
|
46
50
|
// supportedFormats follow the per-model API families (chat completions /
|
|
@@ -19,6 +19,9 @@ export default {
|
|
|
19
19
|
},
|
|
20
20
|
forceStream: true,
|
|
21
21
|
noAuth: true,
|
|
22
|
+
// OpenAI dialect only: the gateway rejects `thinking`/`enable_thinking`
|
|
23
|
+
// (400 unknown field "thinking"), so normalize reasoning to reasoning_effort.
|
|
24
|
+
thinkingFormat: "openai",
|
|
22
25
|
quirks: {
|
|
23
26
|
forceAutoToolChoiceModels: [
|
|
24
27
|
"muse-spark-1.2-contributor-free",
|
|
@@ -124,9 +124,24 @@ const NATIVE_ONLY_FORMATS = new Set([
|
|
|
124
124
|
"kiro",
|
|
125
125
|
]); // "kiro" legacy (provider removed)
|
|
126
126
|
|
|
127
|
+
// Provider/transport-level wire override. Multi-endpoint providers declare one
|
|
128
|
+
// entry per endpoint format, so prefer the entry matching targetFormat; fall back
|
|
129
|
+
// to the provider's default transport. The override describes an OpenAI-dialect
|
|
130
|
+
// endpoint, so it only applies on OpenAI-family wires — a Claude/Gemini endpoint
|
|
131
|
+
// keeps deriving its native thinking shape from the capabilities below.
|
|
132
|
+
function providerThinkingFormat(provider, targetFormat) {
|
|
133
|
+
if (targetFormat !== "openai" && targetFormat !== "openai-responses") return null;
|
|
134
|
+
const cfg = provider ? PROVIDERS[provider] : null;
|
|
135
|
+
if (!cfg) return null;
|
|
136
|
+
const entry = Array.isArray(cfg.transports)
|
|
137
|
+
? cfg.transports.find((t) => (t.format || "openai") === targetFormat) || cfg
|
|
138
|
+
: cfg;
|
|
139
|
+
return entry.thinkingFormat || null;
|
|
140
|
+
}
|
|
141
|
+
|
|
127
142
|
function resolveFormat(targetFormat, model, provider) {
|
|
128
143
|
if (targetFormat === "commandcode") return "commandcode";
|
|
129
|
-
const providerFmt = provider
|
|
144
|
+
const providerFmt = providerThinkingFormat(provider, targetFormat);
|
|
130
145
|
if (providerFmt) return providerFmt;
|
|
131
146
|
const caps = getCapabilitiesForModel(provider, model);
|
|
132
147
|
const isOpenAIWire = targetFormat === "openai" || targetFormat === "openai-responses";
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Tool call helper functions for translator
|
|
2
2
|
|
|
3
3
|
import { FORMATS } from "../formats.js";
|
|
4
|
+
import { EMPTY_TOOL_RESULT } from "../schema/index.js";
|
|
4
5
|
|
|
5
6
|
// Anthropic tool_use.id must match: ^[a-zA-Z0-9_-]+$
|
|
6
7
|
const TOOL_ID_PATTERN = /^[a-zA-Z0-9_-]+$/;
|
|
@@ -147,7 +148,7 @@ export function fixMissingToolResponses(body) {
|
|
|
147
148
|
newMessages.push({
|
|
148
149
|
role: "tool",
|
|
149
150
|
tool_call_id: id,
|
|
150
|
-
content:
|
|
151
|
+
content: EMPTY_TOOL_RESULT,
|
|
151
152
|
});
|
|
152
153
|
}
|
|
153
154
|
}
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
CLAUDE_BLOCK,
|
|
6
6
|
VALID_OPENAI_CONTENT_TYPES,
|
|
7
7
|
VALID_OPENAI_MESSAGE_TYPES,
|
|
8
|
+
EMPTY_TOOL_RESULT,
|
|
8
9
|
} from "../schema/index.js";
|
|
9
10
|
|
|
10
11
|
// Re-export valid-type lists (moved to schema/blocks.js) to keep existing importers working.
|
|
@@ -26,8 +27,15 @@ export function filterToOpenAIFormat(body, opts = {}) {
|
|
|
26
27
|
// Normalize developer role to system (many providers don't support developer)
|
|
27
28
|
if (msg.role === ROLE.DEVELOPER) msg = { ...msg, role: ROLE.SYSTEM };
|
|
28
29
|
|
|
29
|
-
// Keep tool messages as-is (OpenAI format)
|
|
30
|
-
|
|
30
|
+
// Keep tool messages as-is (OpenAI format) — but an empty one is a 400 on
|
|
31
|
+
// several OpenAI-dialect upstreams ("Message content must contain text").
|
|
32
|
+
if (msg.role === ROLE.TOOL) {
|
|
33
|
+
const empty =
|
|
34
|
+
msg.content === "" ||
|
|
35
|
+
msg.content == null ||
|
|
36
|
+
(Array.isArray(msg.content) && msg.content.length === 0);
|
|
37
|
+
return empty ? { ...msg, content: EMPTY_TOOL_RESULT } : msg;
|
|
38
|
+
}
|
|
31
39
|
|
|
32
40
|
// Keep assistant messages with tool_calls as-is
|
|
33
41
|
if (msg.role === ROLE.ASSISTANT && msg.tool_calls) return msg;
|
|
@@ -2,7 +2,7 @@ import { register } from "../index.js";
|
|
|
2
2
|
import { FORMATS } from "../formats.js";
|
|
3
3
|
import { adjustMaxTokens } from "../formats/maxTokens.js";
|
|
4
4
|
import { encodeDataUri } from "../concerns/image.js";
|
|
5
|
-
import { ROLE, OPENAI_BLOCK, CLAUDE_BLOCK } from "../schema/index.js";
|
|
5
|
+
import { ROLE, OPENAI_BLOCK, CLAUDE_BLOCK, EMPTY_TOOL_RESULT } from "../schema/index.js";
|
|
6
6
|
import { collapseTextParts } from "../concerns/message.js";
|
|
7
7
|
|
|
8
8
|
function stripAnthropicBillingHeader(text) {
|
|
@@ -62,7 +62,7 @@ export function claudeToOpenAIRequest(model, body, stream) {
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
// Fix missing tool responses - OpenAI requires every tool_call to have a response.
|
|
65
|
-
// Local variant: scans contiguous tool replies + inserts
|
|
65
|
+
// Local variant: scans contiguous tool replies + inserts EMPTY_TOOL_RESULT
|
|
66
66
|
// (distinct from the global immediate-next check in concerns/toolCall, runs on the openai leg).
|
|
67
67
|
fixMissingToolResponsesOpenAI(result.messages);
|
|
68
68
|
|
|
@@ -123,7 +123,7 @@ function fixMissingToolResponsesOpenAI(messages) {
|
|
|
123
123
|
const missingResponses = missingIds.map((id) => ({
|
|
124
124
|
role: ROLE.TOOL,
|
|
125
125
|
tool_call_id: id,
|
|
126
|
-
content:
|
|
126
|
+
content: EMPTY_TOOL_RESULT,
|
|
127
127
|
}));
|
|
128
128
|
messages.splice(insertPosition, 0, ...missingResponses);
|
|
129
129
|
i = insertPosition + missingResponses.length - 1;
|
|
@@ -216,7 +216,9 @@ function convertClaudeMessage(msg) {
|
|
|
216
216
|
const textOnly = block.content.filter((c) => c?.type === CLAUDE_BLOCK.TEXT);
|
|
217
217
|
resultContent =
|
|
218
218
|
textOnly.map((c) => c.text).join("\n") ||
|
|
219
|
-
(resultImages.length
|
|
219
|
+
(resultImages.length || block.content.length === 0
|
|
220
|
+
? ""
|
|
221
|
+
: JSON.stringify(block.content));
|
|
220
222
|
} else if (block.content) {
|
|
221
223
|
resultContent = JSON.stringify(block.content);
|
|
222
224
|
}
|
|
@@ -224,7 +226,9 @@ function convertClaudeMessage(msg) {
|
|
|
224
226
|
toolResults.push({
|
|
225
227
|
role: ROLE.TOOL,
|
|
226
228
|
tool_call_id: block.tool_use_id,
|
|
227
|
-
content
|
|
229
|
+
// Empty content is a 400 on several OpenAI-dialect upstreams
|
|
230
|
+
// ("Message content must contain text"); keep a placeholder.
|
|
231
|
+
content: resultContent || EMPTY_TOOL_RESULT,
|
|
228
232
|
});
|
|
229
233
|
// The OpenAI tool role is text-only, so a screenshot or any other image a
|
|
230
234
|
// tool returned would otherwise vanish. Hand it to the model in the user
|
|
@@ -70,9 +70,73 @@ function stopTextBlock(state, results) {
|
|
|
70
70
|
state.textBlockStarted = false;
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
+
// Buffered tool args parse as JSON → safe to hand the client a tool_use finish.
|
|
74
|
+
function bufferedArgsComplete(state) {
|
|
75
|
+
for (const [idx] of state.toolCalls) {
|
|
76
|
+
const buffered = state.toolArgBuffers?.get(idx);
|
|
77
|
+
if (!buffered) continue;
|
|
78
|
+
try {
|
|
79
|
+
JSON.parse(buffered);
|
|
80
|
+
} catch {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Close every open block, flush tool args, then message_delta + message_stop.
|
|
88
|
+
// Shared by the finish_reason path and the end-of-stream flush so a stream that
|
|
89
|
+
// dies without a finish chunk still terminates instead of truncating the turn.
|
|
90
|
+
function emitMessageFinish(state, results, reason) {
|
|
91
|
+
if (state.claudeFinishEmitted) return;
|
|
92
|
+
state.claudeFinishEmitted = true;
|
|
93
|
+
|
|
94
|
+
stopThinkingBlock(state, results);
|
|
95
|
+
stopTextBlock(state, results);
|
|
96
|
+
|
|
97
|
+
for (const [idx, toolInfo] of state.toolCalls) {
|
|
98
|
+
// Emit buffered + sanitized args as single delta before stop
|
|
99
|
+
const buffered = state.toolArgBuffers?.get(idx);
|
|
100
|
+
if (buffered) {
|
|
101
|
+
const sanitized = sanitizeToolArgs(toolInfo.name, buffered);
|
|
102
|
+
results.push({
|
|
103
|
+
type: "content_block_delta",
|
|
104
|
+
index: toolInfo.blockIndex,
|
|
105
|
+
delta: { type: "input_json_delta", partial_json: sanitized },
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
results.push({
|
|
109
|
+
type: "content_block_stop",
|
|
110
|
+
index: toolInfo.blockIndex,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Mark finish for later usage injection in stream.js
|
|
115
|
+
state.finishReason = reason;
|
|
116
|
+
|
|
117
|
+
// Use tracked usage (will be estimated in stream.js if not valid)
|
|
118
|
+
const finalUsage = state.usage || { input_tokens: 0, output_tokens: 0 };
|
|
119
|
+
results.push({
|
|
120
|
+
type: "message_delta",
|
|
121
|
+
delta: { stop_reason: convertFinishReason(reason) },
|
|
122
|
+
usage: finalUsage,
|
|
123
|
+
});
|
|
124
|
+
results.push({ type: "message_stop" });
|
|
125
|
+
}
|
|
126
|
+
|
|
73
127
|
// Convert OpenAI stream chunk to Claude format
|
|
74
128
|
export function openaiToClaudeResponse(chunk, state) {
|
|
75
|
-
|
|
129
|
+
// End-of-stream flush (stream.js calls the translator with chunk=null): the
|
|
130
|
+
// upstream can close right after a tool-call delta without ever sending
|
|
131
|
+
// finish_reason, which used to leave the client with an unterminated message.
|
|
132
|
+
if (!chunk) {
|
|
133
|
+
if (!state.messageStartSent || state.claudeFinishEmitted) return null;
|
|
134
|
+
const results = [];
|
|
135
|
+
const reason = state.toolCalls.size > 0 && bufferedArgsComplete(state) ? "tool_calls" : "stop";
|
|
136
|
+
emitMessageFinish(state, results, reason);
|
|
137
|
+
return results;
|
|
138
|
+
}
|
|
139
|
+
if (!chunk.choices?.[0]) return null;
|
|
76
140
|
|
|
77
141
|
const results = [];
|
|
78
142
|
const choice = chunk.choices[0];
|
|
@@ -234,37 +298,7 @@ export function openaiToClaudeResponse(chunk, state) {
|
|
|
234
298
|
|
|
235
299
|
// Finish
|
|
236
300
|
if (choice.finish_reason) {
|
|
237
|
-
|
|
238
|
-
stopTextBlock(state, results);
|
|
239
|
-
|
|
240
|
-
for (const [idx, toolInfo] of state.toolCalls) {
|
|
241
|
-
// Emit buffered + sanitized args as single delta before stop
|
|
242
|
-
const buffered = state.toolArgBuffers?.get(idx);
|
|
243
|
-
if (buffered) {
|
|
244
|
-
const sanitized = sanitizeToolArgs(toolInfo.name, buffered);
|
|
245
|
-
results.push({
|
|
246
|
-
type: "content_block_delta",
|
|
247
|
-
index: toolInfo.blockIndex,
|
|
248
|
-
delta: { type: "input_json_delta", partial_json: sanitized },
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
results.push({
|
|
252
|
-
type: "content_block_stop",
|
|
253
|
-
index: toolInfo.blockIndex,
|
|
254
|
-
});
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
// Mark finish for later usage injection in stream.js
|
|
258
|
-
state.finishReason = choice.finish_reason;
|
|
259
|
-
|
|
260
|
-
// Use tracked usage (will be estimated in stream.js if not valid)
|
|
261
|
-
const finalUsage = state.usage || { input_tokens: 0, output_tokens: 0 };
|
|
262
|
-
results.push({
|
|
263
|
-
type: "message_delta",
|
|
264
|
-
delta: { stop_reason: convertFinishReason(choice.finish_reason) },
|
|
265
|
-
usage: finalUsage,
|
|
266
|
-
});
|
|
267
|
-
results.push({ type: "message_stop" });
|
|
301
|
+
emitMessageFinish(state, results, choice.finish_reason);
|
|
268
302
|
}
|
|
269
303
|
|
|
270
304
|
return results.length > 0 ? results : null;
|
|
@@ -5,3 +5,9 @@ export const MODEL_FALLBACK = "unknown";
|
|
|
5
5
|
|
|
6
6
|
// Default image mime when source omits it (base64 blobs without a declared type).
|
|
7
7
|
export const DEFAULT_IMAGE_MIME = "image/png";
|
|
8
|
+
|
|
9
|
+
// Placeholder for a tool result with no text (image-only, empty array, or a
|
|
10
|
+
// missing response). OpenAI-dialect wires reject `role:"tool"` with empty
|
|
11
|
+
// content. Deliberately not JSON-shaped: a leading "[" reads as a raw-JSON
|
|
12
|
+
// stringification bug to callers inspecting the bridge.
|
|
13
|
+
export const EMPTY_TOOL_RESULT = "(no output)";
|
|
@@ -8,4 +8,4 @@ export {
|
|
|
8
8
|
VALID_OPENAI_MESSAGE_TYPES,
|
|
9
9
|
} from "./blocks.js";
|
|
10
10
|
export { OPENAI_FINISH, CLAUDE_STOP, GEMINI_FINISH } from "./finishReasons.js";
|
|
11
|
-
export { MODEL_FALLBACK, DEFAULT_IMAGE_MIME } from "./defaults.js";
|
|
11
|
+
export { MODEL_FALLBACK, DEFAULT_IMAGE_MIME, EMPTY_TOOL_RESULT } from "./defaults.js";
|
package/package.json
CHANGED
|
@@ -245,6 +245,11 @@ export default function ClaudeToolCard({
|
|
|
245
245
|
if (autoCompactWindow) {
|
|
246
246
|
env.CLAUDE_CODE_AUTO_COMPACT_WINDOW = autoCompactWindow;
|
|
247
247
|
}
|
|
248
|
+
if (tool.envVars?.todoTools) {
|
|
249
|
+
// Claude Code hides TodoWrite behind an Anthropic-model allowlist; routed
|
|
250
|
+
// model ids never match, so the escape-hatch flag must ride along.
|
|
251
|
+
env[tool.envVars.todoTools] = "1";
|
|
252
|
+
}
|
|
248
253
|
const res = await fetch("/api/cli-tools/claude-settings", {
|
|
249
254
|
method: "POST",
|
|
250
255
|
headers: { "Content-Type": "application/json" },
|
|
@@ -321,6 +326,11 @@ export default function ClaudeToolCard({
|
|
|
321
326
|
if (autoCompactWindow) {
|
|
322
327
|
env.CLAUDE_CODE_AUTO_COMPACT_WINDOW = autoCompactWindow;
|
|
323
328
|
}
|
|
329
|
+
if (tool.envVars?.todoTools) {
|
|
330
|
+
// Claude Code hides TodoWrite behind an Anthropic-model allowlist; routed
|
|
331
|
+
// model ids never match, so the escape-hatch flag must ride along.
|
|
332
|
+
env[tool.envVars.todoTools] = "1";
|
|
333
|
+
}
|
|
324
334
|
|
|
325
335
|
return [
|
|
326
336
|
{
|
|
@@ -7,6 +7,7 @@ import fs from "fs/promises";
|
|
|
7
7
|
import path from "path";
|
|
8
8
|
import os from "os";
|
|
9
9
|
import { DEFAULT_PLUGINS } from "@/shared/constants/coworkPlugins";
|
|
10
|
+
import { CLI_TOOLS } from "@/shared/constants/cliTools.js";
|
|
10
11
|
import { isContainer, hostHome, hasHostHome } from "@/lib/isContainer";
|
|
11
12
|
|
|
12
13
|
const execAsync = promisify(exec);
|
|
@@ -182,6 +183,14 @@ export async function POST(request) {
|
|
|
182
183
|
delete newSettings.env.CLAUDE_CODE_AUTO_COMPACT_WINDOW;
|
|
183
184
|
}
|
|
184
185
|
|
|
186
|
+
// CLAUDE_CODE_ENABLE_TODO_TOOLS — Claude Code only offers TodoWrite/TodoRead
|
|
187
|
+
// when the model id is one of Anthropic's own (internal allowlist). Every
|
|
188
|
+
// model routed through this gateway is a custom id, so without the flag the
|
|
189
|
+
// task list never appears and Claude plans without visible progress. Set it
|
|
190
|
+
// alongside the routed model rather than leaving it to the user.
|
|
191
|
+
const todoToolsKey = CLI_TOOLS.claude.envVars.todoTools;
|
|
192
|
+
if (todoToolsKey) newSettings.env[todoToolsKey] = "1";
|
|
193
|
+
|
|
185
194
|
// Write new settings
|
|
186
195
|
await fs.writeFile(settingsPath, JSON.stringify(newSettings, null, 2));
|
|
187
196
|
|
|
@@ -209,6 +218,7 @@ const RESET_ENV_KEYS = [
|
|
|
209
218
|
"ANTHROPIC_DEFAULT_HAIKU_MODEL",
|
|
210
219
|
"API_TIMEOUT_MS",
|
|
211
220
|
"CLAUDE_CODE_AUTO_COMPACT_WINDOW",
|
|
221
|
+
"CLAUDE_CODE_ENABLE_TODO_TOOLS",
|
|
212
222
|
];
|
|
213
223
|
|
|
214
224
|
// DELETE - Reset settings (remove env fields)
|
package/src/app/globals.css
CHANGED
|
@@ -300,7 +300,7 @@
|
|
|
300
300
|
}
|
|
301
301
|
|
|
302
302
|
/* ── MARKDOWN BODY ─────────────────────────────────────── */
|
|
303
|
-
/* Changelog modal
|
|
303
|
+
/* Changelog modal body. */
|
|
304
304
|
.changelog-body h1 {
|
|
305
305
|
font-size: 1.4rem;
|
|
306
306
|
font-weight: 700;
|
|
@@ -330,6 +330,11 @@
|
|
|
330
330
|
padding-left: 1.5rem;
|
|
331
331
|
margin: 0.5rem 0;
|
|
332
332
|
}
|
|
333
|
+
.changelog-body ol {
|
|
334
|
+
list-style: decimal;
|
|
335
|
+
padding-left: 1.5rem;
|
|
336
|
+
margin: 0.5rem 0;
|
|
337
|
+
}
|
|
333
338
|
.changelog-body li {
|
|
334
339
|
margin: 0.25rem 0;
|
|
335
340
|
line-height: 1.6;
|
|
@@ -345,6 +350,21 @@
|
|
|
345
350
|
font-size: 0.875em;
|
|
346
351
|
font-family: ui-monospace, monospace;
|
|
347
352
|
}
|
|
353
|
+
.changelog-body pre {
|
|
354
|
+
background: var(--muted);
|
|
355
|
+
border: 1px solid var(--border);
|
|
356
|
+
border-radius: 10px;
|
|
357
|
+
padding: 0.75rem 1rem;
|
|
358
|
+
margin: 0.75rem 0;
|
|
359
|
+
overflow-x: auto;
|
|
360
|
+
}
|
|
361
|
+
.changelog-body pre code {
|
|
362
|
+
background: none;
|
|
363
|
+
padding: 0;
|
|
364
|
+
border-radius: 0;
|
|
365
|
+
font-size: 0.85em;
|
|
366
|
+
line-height: 1.55;
|
|
367
|
+
}
|
|
348
368
|
.changelog-body a {
|
|
349
369
|
color: var(--primary);
|
|
350
370
|
text-decoration: underline;
|
|
@@ -80,14 +80,8 @@ function DashboardShell({ children }: { children: ReactNode }) {
|
|
|
80
80
|
{/* Main content */}
|
|
81
81
|
<SidebarInset className="flex flex-col h-full min-w-0 relative transition-colors duration-300 isolate">
|
|
82
82
|
<Header key={pathname} onMenuClick={toggleSidebar} />
|
|
83
|
-
<div
|
|
84
|
-
className=
|
|
85
|
-
>
|
|
86
|
-
<div
|
|
87
|
-
className={`${pathname === "/dashboard/basic-chat" ? "flex-1 w-full h-full flex flex-col" : "max-w-7xl mx-auto"}`}
|
|
88
|
-
>
|
|
89
|
-
{children}
|
|
90
|
-
</div>
|
|
83
|
+
<div className="dashboard-grid-bg flex-1 overflow-y-auto p-6 lg:p-10">
|
|
84
|
+
<div className="max-w-7xl mx-auto">{children}</div>
|
|
91
85
|
</div>
|
|
92
86
|
</SidebarInset>
|
|
93
87
|
</>
|
|
@@ -14,6 +14,11 @@ export const CLI_TOOLS = {
|
|
|
14
14
|
sonnetModel: "ANTHROPIC_DEFAULT_SONNET_MODEL",
|
|
15
15
|
fableModel: "ANTHROPIC_DEFAULT_FABLE_MODEL",
|
|
16
16
|
haikuModel: "ANTHROPIC_DEFAULT_HAIKU_MODEL",
|
|
17
|
+
// Claude Code only exposes TodoWrite/TodoRead when the model id is one of
|
|
18
|
+
// Anthropic's own (an internal allowlist in the CLI); routed models such
|
|
19
|
+
// as `oc/...` or a combo name never match, so the task list disappears.
|
|
20
|
+
// This flag is the CLI's documented escape hatch for that gate.
|
|
21
|
+
todoTools: "CLAUDE_CODE_ENABLE_TODO_TOOLS",
|
|
17
22
|
},
|
|
18
23
|
modelAliases: ["default", "sonnet", "opus", "fable", "haiku", "opusplan"],
|
|
19
24
|
settingsFile: "~/.claude/settings.json",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(()=>{var a={};a.id=4465,a.ids=[4465],a.modules={643:a=>{"use strict";a.exports=require("node:perf_hooks")},1708:a=>{"use strict";a.exports=require("node:process")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},4573:a=>{"use strict";a.exports=require("node:buffer")},5583:(a,b,c)=>{"use strict";c.r(b),c.d(b,{__next_app__:()=>w,handler:()=>y,routeModule:()=>x});var d=c(26720),e=c(29966),f=c(36243),g=c(70310),h={};for(let a in g)0>["default","__next_app__","routeModule","handler"].indexOf(a)&&(h[a]=()=>g[a]);c.d(b,h);let i=(0,d.p)(()=>Promise.resolve().then(c.bind(c,79452))),j=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,67694,23))),k=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,2808,23))),l=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,8329,23))),m=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,41580,23))),n=(0,d.p)(()=>Promise.resolve().then(c.bind(c,11089))),o=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,67694,23))),p=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,2808,23))),q=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,8329,23))),r=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,41580,23))),s=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,67694,23))),t=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,67694,23))),u={children:["",{children:["(dashboard)",{children:["dashboard",{children:["basic-chat",{children:["__PAGE__",{},{page:[(0,d.p)(()=>Promise.resolve().then(c.bind(c,67919))),"/home/runner/work/10Router/10Router/src/app/(dashboard)/dashboard/basic-chat/page.tsx"]}]},{"global-error":[t,"next/dist/client/components/builtin/global-error.js"]},[]]},{"global-error":[s,"next/dist/client/components/builtin/global-error.js"]},[]]},{layout:[n,"/home/runner/work/10Router/10Router/src/app/(dashboard)/layout.tsx"],"global-error":[o,"next/dist/client/components/builtin/global-error.js"],"not-found":[p,"next/dist/client/components/builtin/not-found.js"],forbidden:[q,"next/dist/client/components/builtin/forbidden.js"],unauthorized:[r,"next/dist/client/components/builtin/unauthorized.js"],metadata:{icon:[],apple:[],openGraph:[],twitter:[],manifest:"/manifest.webmanifest"}},[]]},{layout:[i,"/home/runner/work/10Router/10Router/src/app/layout.tsx"],"global-error":[j,"next/dist/client/components/builtin/global-error.js"],"not-found":[k,"next/dist/client/components/builtin/not-found.js"],forbidden:[l,"next/dist/client/components/builtin/forbidden.js"],unauthorized:[m,"next/dist/client/components/builtin/unauthorized.js"],metadata:{icon:[],apple:[],openGraph:[],twitter:[],manifest:"/manifest.webmanifest"}},[]]}.children,v=(0,e.H)({tree:u,page:"/(dashboard)/dashboard/basic-chat/page",pathname:"/dashboard/basic-chat",require:c,loadChunk:()=>Promise.resolve(),interopDefault:f.T}),w=v.__next_app__,x=v.routeModule,y=v.handler},7066:a=>{"use strict";a.exports=require("node:tty")},8128:a=>{"use strict";a.exports=require("next/dist/server/runtime-reacts.external.js")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},13527:(a,b,c)=>{Promise.resolve().then(c.bind(c,88330))},14985:a=>{"use strict";a.exports=require("dns")},16698:a=>{"use strict";a.exports=require("node:async_hooks")},19103:(a,b,c)=>{Promise.resolve().then(c.bind(c,64620))},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},21820:a=>{"use strict";a.exports=require("os")},27910:a=>{"use strict";a.exports=require("stream")},28354:a=>{"use strict";a.exports=require("util")},29021:a=>{"use strict";a.exports=require("fs")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},32467:a=>{"use strict";a.exports=require("node:http2")},33873:a=>{"use strict";a.exports=require("path")},34589:a=>{"use strict";a.exports=require("node:assert")},37067:a=>{"use strict";a.exports=require("node:http")},37540:a=>{"use strict";a.exports=require("node:console")},38522:a=>{"use strict";a.exports=require("node:zlib")},40610:a=>{"use strict";a.exports=require("node:dns")},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},41692:a=>{"use strict";a.exports=require("node:tls")},41792:a=>{"use strict";a.exports=require("node:querystring")},46060:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external.js")},46293:a=>{"use strict";a.exports=require("sql.js")},48161:a=>{"use strict";a.exports=require("node:os")},51455:a=>{"use strict";a.exports=require("node:fs/promises")},53053:a=>{"use strict";a.exports=require("node:diagnostics_channel")},55511:a=>{"use strict";a.exports=require("crypto")},55591:a=>{"use strict";a.exports=require("https")},57075:a=>{"use strict";a.exports=require("node:stream")},57975:a=>{"use strict";a.exports=require("node:util")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},64620:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/10Router/10Router/src/app/(dashboard)/dashboard/basic-chat/BasicChatPageClient.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/10Router/10Router/src/app/(dashboard)/dashboard/basic-chat/BasicChatPageClient.tsx","default")},67919:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>f});var d=c(25966),e=c(64620);function f(){return(0,d.jsx)(e.default,{})}},71553:a=>{"use strict";a.exports=require("node:dns/promises")},71622:a=>{"use strict";a.exports=import("open")},73024:a=>{"use strict";a.exports=require("node:fs")},73136:a=>{"use strict";a.exports=require("node:url")},73429:a=>{"use strict";a.exports=require("node:util/types")},73496:a=>{"use strict";a.exports=require("http2")},74075:a=>{"use strict";a.exports=require("zlib")},75919:a=>{"use strict";a.exports=require("node:worker_threads")},76760:a=>{"use strict";a.exports=require("node:path")},77030:a=>{"use strict";a.exports=require("node:net")},77598:a=>{"use strict";a.exports=require("node:crypto")},78474:a=>{"use strict";a.exports=require("node:events")},79551:a=>{"use strict";a.exports=require("url")},79646:a=>{"use strict";a.exports=require("child_process")},79868:a=>{"use strict";a.exports=require("node:sqlite")},81630:a=>{"use strict";a.exports=require("http")},81787:a=>{"use strict";a.exports=require("bun:sqlite")},87997:a=>{"use strict";a.exports=require("node:timers")},88330:(a,b,c)=>{"use strict";c.d(b,{default:()=>m});var d=c(86240),e=c(28907),f=c(70433),g=c(29184),h=c(63265);function i(){return globalThis.crypto?.randomUUID?globalThis.crypto.randomUUID():`chat_${Date.now()}_${Math.random().toString(16).slice(2)}`}function j(a){if("string"==typeof a)return a;if(null==a)return"";if(Array.isArray(a))return a.map(j).filter(Boolean).join(" ");if("object"==typeof a){if("string"==typeof a.message)return a.message;if("string"==typeof a.error)return a.error;try{return JSON.stringify(a)}catch{}}return String(a)}function k(a=""){let b=j(a).replace(/\s+/g," ").trim();return b?b.length>52?`${b.slice(0,52).trimEnd()}…`:b:"New chat"}async function l(a){return await new Promise((b,c)=>{let d=new FileReader;d.onload=()=>b(String(d.result||"")),d.onerror=()=>c(d.error||Error("Failed to read file")),d.readAsDataURL(a)})}function m(){let[a,b]=(0,f.useState)([]),[c,m]=(0,f.useState)(!0),[n,o]=(0,f.useState)(""),[p,q]=(0,f.useState)(()=>[]),[r,s]=(0,f.useState)(()=>""),[t,u]=(0,f.useState)(()=>""),[v,w]=(0,f.useState)(""),[x,y]=(0,f.useState)(()=>""),[z,A]=(0,f.useState)([]),[B,C]=(0,f.useState)(!1),[D,E]=(0,f.useState)(""),[F,G]=(0,f.useState)(""),[H,I]=(0,f.useState)(!1),[J,K]=(0,f.useState)(!1),[L,M]=(0,f.useState)(!1),N=(0,f.useRef)(null),O=(0,f.useRef)(null);(0,f.useRef)(!1);let P=(0,f.useRef)(null),Q=(0,f.useRef)(null),R=(0,f.useMemo)(()=>{let b=new Map;for(let c of a)for(let a of c.models)b.set(a.id,{...a,providerId:c.providerId,providerName:c.providerName});return b},[a]),S=(0,f.useMemo)(()=>a.find(a=>a.providerId===t)||a[0]||null,[a,t]),T=(0,f.useMemo)(()=>{if(v&&R.has(v))return R.get(v);if(r){let a=p.find(a=>a.id===r);if(a?.modelId&&R.has(a.modelId))return R.get(a.modelId)}return S?.models?.[0]||null},[v,R,S,p,r]),U=(0,f.useMemo)(()=>p.find(a=>a.id===r)||null,[p,r]),V=U?.messages||[],W=(0,f.useMemo)(()=>[...p].sort((a,b)=>new Date(b.updatedAt).getTime()-new Date(a.updatedAt).getTime()),[p]),X=!B&&!!T&&(x.trim().length>0||z.length>0),Y=(a,b)=>{q(c=>c.map(c=>c.id===a?b({...c,messages:Array.isArray(c.messages)?c.messages.map(a=>({...a})):[]}):c))},Z=a=>a?{id:i(),title:"New chat",providerId:a.providerId,providerName:a.providerName,modelId:a.id,modelName:a.name,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),messages:[]}:null,$=async a=>{let b=Array.from(a.target.files||[]);if(0===b.length)return;let c=b.filter(a=>a.type.startsWith("image/"));if(0===c.length){a.target.value="";return}let d=await Promise.all(c.map(async a=>({id:i(),name:a.name,type:a.type,size:a.size,dataUrl:await l(a)})));A(a=>[...a,...d]),a.target.value=""},_=async()=>{let a=T||S?.models?.[0]||null;if(!a)return;let b=x.trim();if(!b&&0===z.length)return;let c=r,d=p.find(a=>a.id===c);if(!d){if(!(d=Z(a)))return;c=d.id,q(a=>[d,...a]),s(c)}let e={id:i(),role:"user",content:b,attachments:z.map(a=>({id:a.id,name:a.name,type:a.type,dataUrl:a.dataUrl})),createdAt:new Date().toISOString()},f=i(),g={id:f,role:"assistant",content:"",createdAt:new Date().toISOString(),status:"streaming"},h=[...d.messages||[],e,g];q(d=>d.map(d=>d.id===c?{...d,providerId:a.providerId,providerName:a.providerName,modelId:a.id,modelName:a.name,messages:h,updatedAt:new Date().toISOString(),title:"New chat"===d.title?k(b):d.title}:d)),y(""),A([]),C(!0),E(f),G(""),O.current?.abort(),O.current=new AbortController;let l=h.filter(a=>"assistant"!==a.role||a.id!==f).map(a=>({role:a.role,content:"user"===a.role?function(a){let b=j(a.content).trim(),c=Array.isArray(a.attachments)?a.attachments:[];if(0===c.length)return b;let d=[];for(let a of(b&&d.push({type:"text",text:b}),c))a?.dataUrl&&d.push({type:"image_url",image_url:{url:a.dataUrl}});return d.length>0?d:b}(a):a.content}));try{var m;let d,e=await fetch("/api/dashboard/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream"},body:JSON.stringify({model:a.requestModel||a.id,messages:l,stream:!0}),signal:O.current.signal});if(!e.ok){let a=await e.json().catch(()=>({}));throw Error(j(a.error||a.message||`Request failed (${e.status})`))}let g=e.body?.getReader();if(!g){let a=await e.json().catch(()=>({})),b=j(a?.choices?.[0]?.message?.content||a?.output_text||a?.error||a?.message||"");Y(c,a=>({...a,messages:a.messages.map(a=>a.id===f?{...a,content:b,status:"done"}:a),updatedAt:new Date().toISOString()}));return}let h=new TextDecoder,i="",n="";for(;;){let{value:a,done:b}=await g.read();if(b)break;let d=(i+=h.decode(a,{stream:!0})).split(/\r?\n/);for(let a of(i=d.pop()||"",d)){let b=a.trim();if(!b.startsWith("data:"))continue;let d=b.slice(5).trim();if(d&&"[DONE]"!==d)try{let a=JSON.parse(d),b=function(a){if(!a||"object"!=typeof a)return"";let b=a.choices?.[0];return[(b?.delta||{}).content,b?.message?.content,a.output_text,a.text].map(j).filter(Boolean)[0]||""}(a);if(!b)continue;n+=b,G(n),Y(c,a=>({...a,messages:a.messages.map(a=>a.id===f?{...a,content:n,status:"streaming"}:a),updatedAt:new Date().toISOString()}))}catch{}}}Y(c,a=>({...a,messages:a.messages.map(a=>a.id===f?{...a,content:n||a.content,status:"done"}:a),updatedAt:new Date().toISOString()})),m=c,d=k(b),Y(m,a=>({...a,title:"New chat"===a.title?d:a.title,updatedAt:new Date().toISOString()}))}catch(a){if("AbortError"!==a.name){let b=j(a?.message||a);Y(c,a=>({...a,messages:a.messages.map(a=>a.id===f?{...a,content:a.content||`Error: ${b}`,status:"error"}:a),updatedAt:new Date().toISOString()})),o(b||"Failed to send message.")}}finally{C(!1),E(""),G(""),O.current=null}},aa=T?`${T.name}`:"Select model",ab=T?T.requestModel:"Choose from connected providers";return(0,d.jsx)("div",{className:"relative flex-1 flex flex-col h-full min-h-0 min-w-0 bg-[#212121] text-white overflow-hidden",children:(0,d.jsxs)("div",{className:"relative mx-auto flex flex-1 h-full min-h-0 w-full max-w-4xl flex-col",children:[(0,d.jsxs)("div",{className:"flex shrink-0 items-center justify-between gap-3 px-4 py-3 lg:px-6",children:[(0,d.jsxs)("div",{ref:P,className:"relative",children:[(0,d.jsx)("button",{type:"button",onClick:()=>K(a=>!a),className:"flex items-center gap-3 rounded-2xl border border-white/10 bg-white/5 px-4 py-3 text-left transition hover:bg-white/8",children:(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"text-sm font-semibold text-white",children:aa}),(0,d.jsx)(e.default,{name:"expand_more",className:"text-[18px] text-white/70"})]}),(0,d.jsx)("p",{className:"truncate text-xs text-white/55",children:ab})]})}),J?(0,d.jsxs)("div",{className:"absolute left-0 top-[calc(100%+10px)] z-30 w-[min(520px,calc(100vw-2rem))] overflow-hidden rounded-[20px] border border-white/10 bg-[#262626] shadow-2xl shadow-black/50",children:[(0,d.jsxs)("div",{className:"border-b border-white/10 px-4 py-3",children:[(0,d.jsx)("p",{className:"text-xs uppercase tracking-[0.22em] text-white/45",children:"Models"}),(0,d.jsx)("p",{className:"text-sm text-white/75",children:"Only from connected providers"})]}),(0,d.jsx)("div",{className:"max-h-[60vh] overflow-y-auto p-2",children:a.map(a=>(0,d.jsxs)("div",{className:"mb-2 rounded-[16px] border border-white/10 bg-black/20 p-2",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between px-2 py-2",children:[(0,d.jsx)("p",{className:"text-sm font-semibold text-white",children:a.providerName}),(0,d.jsx)(g.E,{children:a.models.length})]}),(0,d.jsx)("div",{className:"grid gap-2 sm:grid-cols-2",children:a.models.map(a=>{let b=a.id===v;return(0,d.jsx)("button",{type:"button",onClick:()=>(a=>{let b=R.get(a);if(!b)return;let c=p.find(a=>a.id===r);if(c&&c.messages.length>0){let a=Z(b);if(!a)return;q(b=>[a,...b]),s(a.id)}else if(c)q(a=>a.map(a=>a.id===c.id?{...a,providerId:b.providerId,providerName:b.providerName,modelId:b.id,modelName:b.name}:a)),s(c.id);else{let a=Z(b);if(!a)return;q(b=>[a,...b]),s(a.id)}u(b.providerId),w(b.id),K(!1)})(a.id),className:`rounded-[14px] border px-3 py-3 text-left transition ${b?"border-blue-400/40 bg-blue-500/15":"border-white/10 bg-white/5 hover:bg-white/8"}`,children:(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsx)("p",{className:"truncate text-sm font-medium text-white",children:a.name}),(0,d.jsx)("p",{className:"truncate text-[11px] text-white/45",children:a.requestModel})]}),b?(0,d.jsx)(e.default,{name:"check_circle",className:"text-[18px] text-blue-300"}):null]})},a.id)})})]},a.providerId))})]}):null]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("button",{type:"button",onClick:()=>M(a=>!a),className:"rounded-2xl border border-white/10 bg-white/5 px-4 py-3 text-sm text-white/80 transition hover:bg-white/8",children:"History"}),(0,d.jsxs)(h.$,{variant:"ghost",size:"sm",onClick:()=>{if(!r)return;let a=p.filter(a=>a.id!==r),b=a[0]||null;q(a),b?(s(b.id),u(b.providerId),w(b.modelId)):(s(""),u(""),w(""))},disabled:!r||0===p.length,children:[(0,d.jsx)(e.default,{name:"delete"}),"Clear"]})]})]}),L?(0,d.jsxs)("div",{ref:Q,className:"absolute right-4 top-[72px] z-20 w-[min(360px,calc(100vw-2rem))] rounded-[20px] border border-white/10 bg-[#262626] p-2 shadow-2xl shadow-black/50 lg:right-6",children:[(0,d.jsx)("div",{className:"px-3 py-2",children:(0,d.jsx)("p",{className:"text-xs uppercase tracking-[0.22em] text-white/45",children:"Recent chats"})}),(0,d.jsx)("div",{className:"max-h-[48vh] space-y-2 overflow-y-auto p-1",children:0===W.length?(0,d.jsx)("div",{className:"rounded-[16px] border border-dashed border-white/10 bg-white/5 p-4 text-sm text-white/55",children:"No conversations yet."}):W.map(a=>{let b=a.id===r,c=[...a.messages||[]].reverse().find(a=>"user"===a.role)||a.messages?.[0];return(0,d.jsx)("button",{type:"button",onClick:()=>{var b;let c;return b=a.id,void((c=p.find(a=>a.id===b))&&(s(b),u(c.providerId||t),w(c.modelId||v),M(!1)))},className:`w-full rounded-[16px] border px-3 py-3 text-left transition ${b?"border-blue-400/40 bg-blue-500/15":"border-white/10 bg-white/5 hover:bg-white/8"}`,children:(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)("p",{className:"truncate text-sm font-medium text-white",children:a.title}),(0,d.jsx)("p",{className:"mt-1 truncate text-xs text-white/50",children:j(c?.content)||"Empty chat"})]}),(0,d.jsx)("span",{className:"text-[10px] text-white/40 shrink-0",children:function(a){if(!a)return"Now";let b=new Date(a).getTime();if(Number.isNaN(b))return"Now";let c=Math.max(1,Math.round((Date.now()-b)/6e4));if(c<60)return`${c}m`;let d=Math.round(c/60);return d<24?`${d}h`:`${Math.round(d/24)}d`}(a.updatedAt)})]})},a.id)})})]}):null,n?(0,d.jsx)("div",{className:"mt-4 rounded-[18px] border border-rose-500/20 bg-rose-500/10 px-4 py-3 text-rose-100",children:(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)(e.default,{name:"error",className:"text-[20px]"}),(0,d.jsx)("p",{className:"text-sm leading-6",children:n})]})}):null,(0,d.jsxs)("div",{className:"flex flex-1 flex-col min-h-0",children:[(0,d.jsxs)("div",{className:"flex-1 overflow-y-auto py-4",children:[0===V.length?(0,d.jsx)("div",{className:"flex min-h-[50vh] items-center justify-center px-4 text-center",children:(0,d.jsxs)("div",{className:"max-w-xl space-y-4",children:[(0,d.jsx)("div",{className:"mx-auto flex size-16 items-center justify-center rounded-[20px] border border-white/10 bg-white/5 text-white/80",children:(0,d.jsx)(e.default,{name:"chat",className:"text-[30px]"})}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)("h2",{className:"text-2xl font-semibold text-white",children:"Start a conversation"}),(0,d.jsx)("p",{className:"text-sm leading-6 text-white/60",children:"Simple chat interface to interact with any AI model from connected providers. Select a model and start chatting!"})]})]})}):null,(0,d.jsx)("div",{className:"mx-auto flex w-full max-w-3xl flex-col gap-4 px-4",children:V.map(a=>{let b="user"===a.role,c="assistant"===a.role,e=c&&a.id===D&&"streaming"===a.status,f=j(a.content)||(c?F:"");return(0,d.jsx)("div",{className:`flex w-full ${b?"justify-end":"justify-start"} mb-6`,children:(0,d.jsxs)("div",{className:`max-w-[min(88%,42rem)] ${b?"rounded-3xl bg-[#2f2f2f] px-5 py-3.5 text-white":"text-white/90"}`,children:[(0,d.jsx)("div",{className:"mb-1 flex items-center justify-between gap-3",children:(0,d.jsx)("span",{className:"text-xs font-semibold",children:b?"You":T?.name||"Assistant"})}),a.attachments?.length?(0,d.jsx)("div",{className:"mb-3 grid grid-cols-2 gap-2 sm:grid-cols-3 mt-2",children:a.attachments.map(a=>(0,d.jsx)("a",{href:a.dataUrl,target:"_blank",rel:"noreferrer",className:"overflow-hidden rounded-[18px] border border-white/10 bg-black/20",children:(0,d.jsx)("img",{src:a.dataUrl,alt:a.name,className:"h-28 w-full object-cover",loading:"lazy",decoding:"async"})},a.id))}):null,(0,d.jsxs)("div",{className:"whitespace-pre-wrap break-words text-[15px] leading-7",children:[f,c&&e&&!F?(0,d.jsx)("span",{className:"inline-block animate-pulse",children:"▋"}):null]})]})},a.id)})})]}),(0,d.jsxs)("div",{className:"shrink-0 pt-2",children:[z.length>0?(0,d.jsx)("div",{className:"mx-auto mb-3 flex w-full max-w-3xl flex-wrap gap-2 px-4",children:z.map(a=>(0,d.jsxs)("div",{className:"flex items-center gap-2 rounded-full border border-white/10 bg-white/5 px-3 py-2",children:[(0,d.jsx)("span",{className:"text-xs text-white/80 max-w-[12rem] truncate",children:a.name}),(0,d.jsx)("button",{type:"button",onClick:()=>{var b;return b=a.id,void A(a=>a.filter(a=>a.id!==b))},className:"text-white/55 hover:text-white","aria-label":"Remove attachment",children:(0,d.jsx)(e.default,{name:"close",className:"text-[18px]"})})]},a.id))}):null,(0,d.jsx)("div",{className:"mx-auto w-full max-w-3xl px-4 pb-2",children:(0,d.jsxs)("div",{className:"rounded-[26px] bg-[#2f2f2f] px-3 pt-3 pb-2 shadow-[0_0_15px_rgba(0,0,0,0.10)] ring-1 ring-white/5",children:[(0,d.jsx)("textarea",{value:x,onChange:a=>y(a.target.value),onKeyDown:a=>{"Enter"===a.key&&!a.shiftKey&&(a.preventDefault(),X&&_())},placeholder:"Message AI",rows:1,className:"w-full resize-none bg-transparent px-2 text-[15px] leading-6 text-white outline-none placeholder:text-white/40 max-h-[25vh] overflow-y-auto"}),(0,d.jsxs)("div",{className:"mt-2 flex items-center justify-between gap-3",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("button",{type:"button",onClick:()=>N.current?.click(),disabled:!T||c,className:"p-2 text-white/50 hover:text-white transition rounded-full hover:bg-white/5",children:(0,d.jsx)(e.default,{name:"attach_file",className:"text-[20px]"})}),(0,d.jsx)("input",{ref:N,type:"file",accept:"image/*",multiple:!0,className:"hidden",onChange:$}),(0,d.jsx)("span",{className:"text-xs font-medium text-white/30 truncate max-w-[120px]",children:T?T.name:"No model"})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[B?(0,d.jsx)("button",{type:"button",onClick:()=>{O.current?.abort()},className:"p-2 text-white bg-white/10 hover:bg-white/20 transition rounded-full h-8 w-8 flex items-center justify-center",children:(0,d.jsx)(e.default,{name:"stop",className:"text-[16px]"})}):null,(0,d.jsx)("button",{onClick:_,disabled:!X,className:`h-8 w-8 rounded-full flex items-center justify-center transition ${X?"bg-white text-black hover:opacity-90":"bg-white/10 text-white/30 cursor-not-allowed"}`,children:(0,d.jsx)(e.default,{name:"arrow_upward",className:"text-[16px]"})})]})]})]})})]}),(0,d.jsx)("p",{className:"mx-auto mt-2 max-w-3xl px-4 pb-4 text-center text-[11px] text-white/30",children:"Model list is filtered from connected providers."})]})]})})}c(95137),c(86177)},91645:a=>{"use strict";a.exports=require("net")},94735:a=>{"use strict";a.exports=require("events")}};var b=require("../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[1316,1238,7963,8569,7257,6009,9817,7535,7816,7156,2339,6461,4301,1289,9018,2801],()=>b(b.s=5583));module.exports=c})();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":1,"files":["../../../../../../node_modules/.pnpm/@swc+helpers@0.5.23/node_modules/@swc/helpers/_/_interop_require_default/package.json","../../../../../../node_modules/.pnpm/@swc+helpers@0.5.23/node_modules/@swc/helpers/cjs/_interop_require_default.cjs","../../../../../../node_modules/.pnpm/@swc+helpers@0.5.23/node_modules/@swc/helpers/esm/_interop_require_default.js","../../../../../../node_modules/.pnpm/@swc+helpers@0.5.23/node_modules/@swc/helpers/package.json","../../../../../../node_modules/.pnpm/bundle-name@4.1.0/node_modules/bundle-name/index.js","../../../../../../node_modules/.pnpm/bundle-name@4.1.0/node_modules/bundle-name/package.json","../../../../../../node_modules/.pnpm/bundle-name@4.1.0/node_modules/run-applescript","../../../../../../node_modules/.pnpm/default-browser-id@5.0.1/node_modules/default-browser-id/index.js","../../../../../../node_modules/.pnpm/default-browser-id@5.0.1/node_modules/default-browser-id/package.json","../../../../../../node_modules/.pnpm/default-browser@5.5.1/node_modules/bundle-name","../../../../../../node_modules/.pnpm/default-browser@5.5.1/node_modules/default-browser-id","../../../../../../node_modules/.pnpm/default-browser@5.5.1/node_modules/default-browser/index.js","../../../../../../node_modules/.pnpm/default-browser@5.5.1/node_modules/default-browser/package.json","../../../../../../node_modules/.pnpm/default-browser@5.5.1/node_modules/default-browser/windows.js","../../../../../../node_modules/.pnpm/define-lazy-prop@3.0.0/node_modules/define-lazy-prop/index.js","../../../../../../node_modules/.pnpm/define-lazy-prop@3.0.0/node_modules/define-lazy-prop/package.json","../../../../../../node_modules/.pnpm/is-docker@3.0.0/node_modules/is-docker/index.js","../../../../../../node_modules/.pnpm/is-docker@3.0.0/node_modules/is-docker/package.json","../../../../../../node_modules/.pnpm/is-in-ssh@1.0.0/node_modules/is-in-ssh/index.js","../../../../../../node_modules/.pnpm/is-in-ssh@1.0.0/node_modules/is-in-ssh/package.json","../../../../../../node_modules/.pnpm/is-inside-container@1.0.0/node_modules/is-docker","../../../../../../node_modules/.pnpm/is-inside-container@1.0.0/node_modules/is-inside-container/index.js","../../../../../../node_modules/.pnpm/is-inside-container@1.0.0/node_modules/is-inside-container/package.json","../../../../../../node_modules/.pnpm/is-wsl@3.1.1/node_modules/is-inside-container","../../../../../../node_modules/.pnpm/is-wsl@3.1.1/node_modules/is-wsl/index.js","../../../../../../node_modules/.pnpm/is-wsl@3.1.1/node_modules/is-wsl/package.json","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@swc/helpers","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/adapter/setup-node-env.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/hooks-server-context.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/static-generation-bailout.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/lib/console.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/source-map/package.json","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/source-map/source-map.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/stacktrace-parser/package.json","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/ws/index.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/ws/package.json","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/client-and-server-references.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/constants.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/framework/boundary-constants.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/interop-default.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/is-error.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/picocolors.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/scheduler.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/semver-noop.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/action-async-storage.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/async-local-storage.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/blocking-route-messages.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/cache-signal.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/console-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/console-async-storage.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/dynamic-access-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/dynamic-access-async-storage.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/dynamic-rendering.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/staged-rendering.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/sync-io-messages.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/work-async-storage.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/browser-logs/file-logger.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dynamic-rendering-utils.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/lru-cache.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/parse-stack.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/source-maps.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/trace/constants.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/trace/tracer.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/load-manifest.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-baseline.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/console-dim.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/console-exit.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/console-file.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/date.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/error-inspect.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/io-utils.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/node-crypto.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/random.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/web-crypto.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-polyfill-crypto.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/patch-error-inspect.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/require-hook.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/response-cache/types.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/runtime-reacts.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/deep-freeze.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/instant-messages.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/invariant-error.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/is-plain-object.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/is-thenable.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/no-fallback-error.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/promise-with-resolvers.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/server-reference-info.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/package.json","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react","../../../../../../node_modules/.pnpm/open@11.0.4/node_modules/default-browser","../../../../../../node_modules/.pnpm/open@11.0.4/node_modules/define-lazy-prop","../../../../../../node_modules/.pnpm/open@11.0.4/node_modules/is-in-ssh","../../../../../../node_modules/.pnpm/open@11.0.4/node_modules/is-inside-container","../../../../../../node_modules/.pnpm/open@11.0.4/node_modules/open/index.js","../../../../../../node_modules/.pnpm/open@11.0.4/node_modules/open/package.json","../../../../../../node_modules/.pnpm/open@11.0.4/node_modules/open/xdg-open","../../../../../../node_modules/.pnpm/open@11.0.4/node_modules/powershell-utils","../../../../../../node_modules/.pnpm/open@11.0.4/node_modules/wsl-utils","../../../../../../node_modules/.pnpm/powershell-utils@0.1.0/node_modules/powershell-utils/index.js","../../../../../../node_modules/.pnpm/powershell-utils@0.1.0/node_modules/powershell-utils/package.json","../../../../../../node_modules/.pnpm/powershell-utils@0.2.1/node_modules/powershell-utils/index.js","../../../../../../node_modules/.pnpm/powershell-utils@0.2.1/node_modules/powershell-utils/package.json","../../../../../../node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react.development.js","../../../../../../node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react.production.js","../../../../../../node_modules/.pnpm/react@19.2.4/node_modules/react/index.js","../../../../../../node_modules/.pnpm/react@19.2.4/node_modules/react/package.json","../../../../../../node_modules/.pnpm/run-applescript@7.1.0/node_modules/run-applescript/index.js","../../../../../../node_modules/.pnpm/run-applescript@7.1.0/node_modules/run-applescript/package.json","../../../../../../node_modules/.pnpm/sql.js@1.14.2/node_modules/sql.js/dist/sql-wasm.js","../../../../../../node_modules/.pnpm/sql.js@1.14.2/node_modules/sql.js/package.json","../../../../../../node_modules/.pnpm/wsl-utils@1.0.0/node_modules/is-wsl","../../../../../../node_modules/.pnpm/wsl-utils@1.0.0/node_modules/powershell-utils","../../../../../../node_modules/.pnpm/wsl-utils@1.0.0/node_modules/wsl-utils/index.js","../../../../../../node_modules/.pnpm/wsl-utils@1.0.0/node_modules/wsl-utils/package.json","../../../../../../node_modules/.pnpm/wsl-utils@1.0.0/node_modules/wsl-utils/utilities.js","../../../../../../node_modules/next","../../../../../../node_modules/open","../../../../../../node_modules/sql.js","../../../../../../package.json","../../../../../package.json","../../../../chunks/1011.js","../../../../chunks/1126.js","../../../../chunks/1238.js","../../../../chunks/1273.js","../../../../chunks/1289.js","../../../../chunks/1316.js","../../../../chunks/2076.js","../../../../chunks/2143.js","../../../../chunks/2151.js","../../../../chunks/2225.js","../../../../chunks/2282.js","../../../../chunks/2339.js","../../../../chunks/2706.js","../../../../chunks/2801.js","../../../../chunks/3023.js","../../../../chunks/3250.js","../../../../chunks/4139.js","../../../../chunks/4301.js","../../../../chunks/4364.js","../../../../chunks/4464.js","../../../../chunks/4915.js","../../../../chunks/537.js","../../../../chunks/5761.js","../../../../chunks/6009.js","../../../../chunks/6343.js","../../../../chunks/6461.js","../../../../chunks/6823.js","../../../../chunks/7156.js","../../../../chunks/7257.js","../../../../chunks/7268.js","../../../../chunks/7459.js","../../../../chunks/7504.js","../../../../chunks/7535.js","../../../../chunks/7816.js","../../../../chunks/7963.js","../../../../chunks/8569.js","../../../../chunks/881.js","../../../../chunks/8923.js","../../../../chunks/8940.js","../../../../chunks/9018.js","../../../../chunks/9250.js","../../../../chunks/9614.js","../../../../chunks/9792.js","../../../../chunks/9817.js","../../../../webpack-runtime.js","page_client-reference-manifest.js"]}
|