@ltgiang/9router 0.5.40 → 0.5.42
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/app/.next-cli-build/BUILD_ID +1 -1
- package/app/.next-cli-build/app-path-routes-manifest.json +11 -11
- package/app/.next-cli-build/build-manifest.json +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/app/.next-cli-build/server/app/_not-found.rsc +4 -4
- package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/reset-password/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/reorder/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/order/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/connections/disabled/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/pool/pull/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/pool/push/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/pool/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/callback.html +1 -1
- package/app/.next-cli-build/server/app/callback.rsc +4 -4
- package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/quota.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard.html +1 -1
- package/app/.next-cli-build/server/app/dashboard.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/index.html +1 -1
- package/app/.next-cli-build/server/app/index.rsc +4 -4
- package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/landing.html +1 -1
- package/app/.next-cli-build/server/app/landing.rsc +4 -4
- package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/login.html +1 -1
- package/app/.next-cli-build/server/app/login.rsc +5 -5
- package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app-paths-manifest.json +11 -11
- package/app/.next-cli-build/server/chunks/238.js +1 -1
- package/app/.next-cli-build/server/chunks/4746.js +1 -1
- package/app/.next-cli-build/server/chunks/4827.js +1 -1
- package/app/.next-cli-build/server/chunks/8238.js +1 -1
- package/app/.next-cli-build/server/chunks/8668.js +1 -1
- package/app/.next-cli-build/server/chunks/8914.js +1 -1
- package/app/.next-cli-build/server/chunks/920.js +1 -1
- package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/app/.next-cli-build/server/pages/404.html +1 -1
- package/app/.next-cli-build/server/pages/500.html +1 -1
- package/app/.next-cli-build/static/chunks/{1321-77a781a4734d750d.js → 1321-9f3b382645ad801b.js} +1 -1
- package/app/cli/.build-home/.9router/db/backups/{upgrade-0.5.36-to-0.5.37-0.5.37-20260706-105502 → upgrade-0.5.39-to-0.5.40-0.5.40-20260706-123611}/data.sqlite +0 -0
- package/app/cli/.build-home/.9router/db/backups/{upgrade-0.5.35-to-0.5.36-0.5.36-20260706-103333 → upgrade-0.5.40-to-0.5.41-0.5.41-20260706-124919}/data.sqlite +0 -0
- package/app/cli/.build-home/.9router/db/data.sqlite +0 -0
- package/app/package.json +1 -1
- package/package.json +1 -1
- /package/app/.next-cli-build/static/{fvkWnl9nj2X35t45qcYtG → aypJ4bU-vTIpFp6cWGWWW}/_buildManifest.js +0 -0
- /package/app/.next-cli-build/static/{fvkWnl9nj2X35t45qcYtG → aypJ4bU-vTIpFp6cWGWWW}/_ssgManifest.js +0 -0
|
@@ -38,4 +38,4 @@ Continues conversation transfered from ${e} to ${f}.
|
|
|
38
38
|
The context above contains a concise summary of prior work.
|
|
39
39
|
Continue seamlessly from where the session left off.`}(b,c,d,e);if(Object.prototype.hasOwnProperty.call(a,"input")||Object.prototype.hasOwnProperty.call(a,"instructions")){let b="string"==typeof a.instructions&&a.instructions.trim().length>0?a.instructions:"",c={...a,instructions:b?`${f}
|
|
40
40
|
|
|
41
|
-
${b}`:f};if(Array.isArray(c.messages)&&0===c.messages.length){let{messages:a,...b}=c;return b}return c}let g=Array.isArray(a.messages)?[...a.messages]:[];return{...a,messages:[{role:"system",content:f},...g]}}(w,a,R,`Model routing: ${a} → ${R}`,D(l.sessionId,b.name)))}{let a=w,b=ce(a.max_tokens),c=cf(R,a.max_tokens,{enabled:$});null!==b&&null!==c&&(a.max_tokens=c,c!==b&&h.info("COMBO",`Reasoning model ${R}: adjusted max_tokens ${b} -> ${c}`))}let A=await _(w,R,{...ad,effectiveComboStrategy:I,failoverBeforeRetry:U.failoverBeforeRetry});if(A.ok){let e=A.headers?.get("X-OmniRoute-Selected-Connection-Id")||A.headers?.get("x-omniroute-selected-connection-id")||L.connectionId||"",g=await cs(A,S,h,U.responseValidation);if(!g.valid){if(h.warn("COMBO",`Model ${R} returned 200 but failed quality check: ${g.reason}`),t(b.name,R,{success:!1,latencyMs:Date.now()-r,fallbackCount:s,strategy:I,target:bR(L)}),u++,o=`Upstream response failed quality validation: ${g.reason}`,q||(q=502),f>0&&s++,aa&&Z){let a=(0,X.Sy)(i);a.enabled&&a.errorCodes.includes(502)&&(0,d.E$)(aa,L.connectionId||"",Z,"quality_failure",502,a.baseCooldownMs,ac,{exactCooldownMs:a.useExponentialBackoff?0:a.baseCooldownMs,maxCooldownMs:a.maxCooldownMs})}return(0,a$.I)("combo.target.failed",{comboName:b.name,targetIndex:f,provider:aa,model:R,error:`Quality: ${g.reason}`,latencyMs:Date.now()-r}),null}if(aa&&Z){let a=(0,d.lB)(aa,e,Z);a.cleared?h.info("COMBO",`Model ${R} fully recovered — lockout cleared`):a.newFailureCount>0&&h.debug("COMBO",`Model ${R} decayed to failureCount=${a.newFailureCount}`)}let j=Date.now()-r;if((0,a$.I)("combo.target.succeeded",{comboName:b.name,targetIndex:f,provider:aa,model:R,latencyMs:j}),h.info("COMBO",`Model ${R} succeeded (${j}ms, ${s} fallbacks)`),t(b.name,R,{success:!0,latencyMs:j,fallbackCount:s,strategy:I,target:bR(L)}),u++,aa&&"unknown"!==aa&&cc(aa,e||void 0),"weighted"===I&&aD>1){let a=aI(L);a&&cn(b.name,a,aD)}if(a_("request.completed",{combo:b.name,provider:aa,model:R,account:"string"==typeof L.label&&L.label.trim().length>0?L.label.trim():"",accountId:e??"",latencyMs:j,fallbackCount:s}),b.context_cache_protection&&Q&&!a?.[M]&&F(Q,b.name,R,aa,L.connectionId??void 0),P.enabled&&l?.sessionId&&!a?.[M]){let c=E(l.sessionId,b.name);if(F(l.sessionId,b.name,R,aa,L.connectionId??void 0),c&&c!==R){let d=Array.isArray(a?.messages)&&a.messages.length>0?a.messages:Array.isArray(a?.input)?a.input:[];!function(a){var b,c;if("generate"!==function(a){if(!a.universalConfig.enabled||!a.previousModel||a.previousModel===a.currentModel)return"skip";if(a.sessionId){let b=D(a.sessionId,a.comboName);if(b&&b.summary)return"inject"}return"generate"}({sessionId:a.sessionId,comboName:a.comboName,previousModel:a.prevModel,currentModel:a.currModel,universalConfig:a.universalConfig})||!a.sessionId)return;let d=(b=a.sessionId,c=a.comboName,`${b}::${c}`);if(J.has(d))return;J.add(d);let e=60*(a.universalConfig.ttlMinutes||300)*1e3;setImmediate(()=>{W({sessionId:a.sessionId,comboName:a.comboName,messages:a.messages,prevModel:a.prevModel||"unknown",currModel:a.currModel,handoffModel:a.universalConfig.handoffModel||a.currModel,ttlMs:e,maxMessages:a.universalConfig.maxMessagesForSummary,providerAllowlist:a.universalConfig.providerAllowlist,handleSingleModel:a.handleSingleModel}).catch(a=>{console.warn("[universal-handoff] Generation failed:",a?.message||a)}).finally(()=>{J.delete(d)})})}({sessionId:l.sessionId,comboName:b.name,messages:d,prevModel:c,currModel:R,universalConfig:P,handleSingleModel:_})}F(l.sessionId,b.name,R,aa,L.connectionId??void 0)}if("context-relay"===I&&l?.sessionId&&K&&K.handoffProviders.includes(aa)&&"codex"===aa){let c=(0,bx.bb)(l.sessionId);if(c){let d=await (0,Y.GF)(c).catch(()=>null);if(d){let e=[d.windows?.session?.resetAt,d.windows?.weekly?.resetAt,d.resetAt].filter(a=>"string"==typeof a&&a.length>0).sort((a,b)=>a.localeCompare(b)),f=Array.isArray(a?.messages)&&a.messages.length>0?a.messages:Array.isArray(a?.input)?a.input:[];!function(a){var b,c;if(!a.sessionId||!a.connectionId)return;let d=N(a.config);if(0===d.handoffProviders.length||a.percentUsed<d.handoffThreshold||a.percentUsed>=.95)return;a.sessionId,a.comboName;let e=(b=a.sessionId,c=a.comboName,`${b}::${c}`);J.has(e)||(J.add(e),setImmediate(()=>{V({...a,sessionId:a.sessionId,connectionId:a.connectionId,config:d}).catch(a=>{console.warn("[context-relay] Handoff generation failed:",a?.message||a)}).finally(()=>{J.delete(e)})}))}({sessionId:l.sessionId,comboName:b.name,connectionId:c,percentUsed:d.percentUsed,messages:f,model:R,expiresAt:e[0]||null,config:K,handleSingleModel:_})}}}if(aS.messageHash&&L.connectionId&&bD(aS.messageHash,L.connectionId),aa){let a=e||void 0;(async()=>{try{let{setLKGP:d}=await Promise.resolve().then(c.bind(c,89718));await Promise.all([d(b.name,L.executionKey,aa,a),d(b.name,b.id||b.name,aa,a)])}catch(a){h.warn("COMBO","Failed to record Last Known Good Provider. This is non-fatal.",{err:a})}})()}return{ok:!0,response:g.clonedResponse??A}}let G=A.statusText||"",H=null,ab=null;try{let a=A.clone();try{let b=await a.text();if(b){G=b.substring(0,500),H=JSON.parse(b);let a=H?.error;G="object"==typeof a&&a?.message||("string"==typeof a?a:null)||H?.message||G,ab=H?.retryAfter||null}}catch{}}catch{}if(ab&&(!p||new Date(ab)<new Date(p))&&(p=ab),"string"!=typeof G)try{G=JSON.stringify(G)}catch{G=String(G)}let ae=(502===A.status||504===A.status)&&bP(H),af=429===A.status&&bQ(H);if(499===A.status)return h.info("COMBO",`Client disconnected (499) during ${R} — stopping combo loop`),t(b.name,R,{success:!1,latencyMs:Date.now()-r,fallbackCount:s,strategy:I,target:bR(L)}),u++,{ok:!1,response:A};let ag=H?.error,ah=ag&&"object"==typeof ag?{code:void 0!==ag.code&&null!==ag.code?String(ag.code):void 0,type:void 0!==ag.type&&null!==ag.type?String(ag.type):void 0}:void 0,ai=(0,d.hk)(A.status,G,0,null,aa,A.headers,ac,ah),{cooldownMs:aj}=ai,ak=A.headers?.get("X-OmniRoute-Selected-Connection-Id")||A.headers?.get("x-omniroute-selected-connection-id")||void 0,al=ak?{...L,connectionId:ak}:L,am=cA(al,{result:A,fallbackResult:ai,errorText:G,rawModel:Z,isTokenLimitBreach:af,allAccountsRateLimited:!1,sets:{exhaustedProviders:j,exhaustedConnections:k,transientRateLimitedProviders:n},log:h,tag:"COMBO",exhaustedLogLevel:"info",structuredError:ah});if(400===A.status&&ai.shouldFallback&&(y=G,!(/\bcontext.*(?:length_exceeded|too long|overflow|exceeded|window|limit)\b/i.test(y)||/exceeds.*context/i.test(y)||/your input exceeds/i.test(y)))&&(z=G,!(/\bmax_tokens\b.*(?:illegal|must|range|invalid)/i.test(z)||/\bparameter is illegal\b/i.test(z)||/\bis illegal.*range\b/i.test(z)))&&(G.toLowerCase().includes("context")||G.toLowerCase().includes("prompt")||G.toLowerCase().includes("token")||G.toLowerCase().includes("malformed")||G.toLowerCase().includes("invalid")||G.toLowerCase().includes("bad request")))return h.warn("COMBO",`400 Bad Request with body-specific error detected on ${R} — skipping fallback to other targets to prevent infinite loop`),t(b.name,R,{success:!1,latencyMs:Date.now()-r,fallbackCount:s,strategy:I,target:bR(L)}),u++,o=G||String(A.status),q||(q=A.status),f>0&&s++,h.warn("COMBO",`Model ${R} failed with body-specific error, stopping combo`),{ok:!1,response:A};let an=aJ[f+1],ao="string"==typeof an?.provider&&an.provider===aa;!(C={isStreamReadinessFailure:ae,status:A.status,sameProviderNext:ao,skipProviderBreaker:ai.skipProviderBreaker}).isStreamReadinessFailure&&(0,d.v6)(C.status)&&!C.sameProviderNext&&!C.skipProviderBreaker&&(0,d.p8)(aa,h,al.connectionId,ac);let ap=!ae&&!af&&[408,429,500,502,503,504].includes(A.status);if(g<at&&ap&&!am){let a=!1;if(aa&&Z&&0===g){let b=(0,X.Sy)(i);b.enabled&&b.errorCodes.includes(A.status)&&((0,d.E$)(aa,al.connectionId||"",Z,(0,d.M$)(A.status),A.status,b.baseCooldownMs,ac,{exactCooldownMs:(0,d.pX)(aj,b),maxCooldownMs:b.maxCooldownMs}),a=!0)}if(a)return h.info("COMBO",`Skipping retry for ${R} — model lockout active`),f>0&&s++,null;continue}if(t(b.name,R,{success:!1,latencyMs:Date.now()-r,fallbackCount:s,strategy:I,target:bR(L)}),u++,o=G||String(A.status),q||(q=A.status),f>0&&s++,aa&&Z){let a=(0,X.Sy)(i);a.enabled&&a.errorCodes.includes(A.status)&&(0,d.E$)(aa,al.connectionId||"",Z,(0,d.M$)(A.status),A.status,a.baseCooldownMs,ac,{exactCooldownMs:(0,d.pX)(aj,a),maxCooldownMs:a.maxCooldownMs})}h.warn("COMBO",`Model ${R} failed, trying next`,{status:A.status}),O.providerCooldown.enabled&&aa&&"unknown"!==aa&&ca(aa,al.connectionId??void 0,O);let aq=av>0&&aj>0&&aj<=5e3?Math.min(aj,av):0;if([502,503,504].includes(A.status)&&aq>0&&(h.debug?.("COMBO",`Waiting ${aq}ms before fallback to next model`),await new Promise(a=>{let b=setTimeout(a,aq);m?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),m?.aborted))return h.info("COMBO","Client disconnected during fallback wait — aborting"),{ok:!1,response:(0,e.yj)(499,"Client disconnected")};break}return null};for(let a=0;a<aJ.length&&!z;a++){let b=new AbortController;A.set(a,b);let c=()=>b.abort();m?.addEventListener("abort",c);let d=(async()=>{try{let b=await C(a);if(b&&!z)if(b.ok)for(let[c,d]of(z=!0,w(b.response),A.entries()))c!==a&&d.abort();else b.response&&(z=!0,w(b.response))}finally{m?.removeEventListener("abort",c)}})().catch(b=>{(h.error??h.warn)("COMBO",`Speculative task error for target ${a}`,b)});if(y.add(d),d.finally(()=>y.delete(d)),B&&U.hedging&&a+1<aJ.length){let a=bN(U.hedgeDelayMs,500),b=new Promise(b=>{setTimeout(b,a)});await Promise.race([d,x,b])}else await Promise.race([d,x])}if(!z&&y.size>0&&await Promise.race([x,Promise.all([...y])]),z)return await x;let G=Date.now()-r;if(0===u&&t(b.name,null,{success:!1,latencyMs:G,fallbackCount:s,strategy:I}),f<aw)continue;if(!q)return a_("request.failed",{combo:b.name,reason:"ALL_ACCOUNTS_INACTIVE",latencyMs:G,fallbackCount:s}),new Response(JSON.stringify({error:{message:"Service temporarily unavailable: all upstream accounts are inactive",type:"service_unavailable",code:"ALL_ACCOUNTS_INACTIVE"}}),{status:503,headers:{"Content-Type":"application/json"}});let H=q,L=o||"All combo models unavailable";if(p){if(a5&&429===H){let a=function(a){let{targets:b,earliestRetryAfter:c,attempt:d,budgetLeftMs:e,settings:f,lookupLock:g,computeWaitMs:h}=a;if(!f.enabled)return{wait:!1,waitMs:0,reason:null};let i=null;for(let a of b){let b="string"==typeof a.provider?a.provider:"";if(!b)continue;let c=g(b,"string"==typeof a.connectionId?a.connectionId:"");if(!c)continue;let d="number"==typeof c.remainingMs&&Number.isFinite(c.remainingMs)?c.remainingMs:0;d<=0||(!i||d<i.remainingMs)&&(i={reason:c.reason,remainingMs:d})}if(!i)return{wait:!1,waitMs:0,reason:null};let j=h(c),k="number"==typeof j&&Number.isFinite(j)&&j>0?j:0,l=Math.max(i.remainingMs,k)+50;return{...function(a){var b;let{reason:c,attempt:d,budgetLeftMs:e,settings:f}=a,g="number"==typeof(b=a.waitMs)&&Number.isFinite(b)&&b>0?b:0;return{wait:!0===f.enabled&&!("string"!=typeof c||0===c.length||ct.has(c))&&cu.has(c)&&g>0&&g<=f.maxWaitMs&&d<f.maxAttempts&&e>=g,waitMs:g}}({reason:i.reason,waitMs:l,attempt:d,budgetLeftMs:e,settings:f}),reason:"string"==typeof i.reason?i.reason:null}}({targets:aJ,earliestRetryAfter:p,attempt:a7,budgetLeftMs:a8,settings:O.comboCooldownWait,lookupLock:(a,b)=>{let c=(0,af.parseModel)(aJ[0]?.modelStr??"").model||"";return(0,d.ls)(a,b,c)},computeWaitMs:a=>cv(a).waitMs});if(a.wait){if(h.info("COMBO",`Quota-share cooldown wait: ${L} — waiting ${Math.ceil(a.waitMs/1e3)}s (reason=${a.reason??"?"}) then retrying (attempt ${a7+1}/${O.comboCooldownWait.maxAttempts})`),!await cw(a.waitMs,m))return h.info("COMBO","Quota-share cooldown wait aborted by client disconnect"),(0,e.yj)(499,"Request aborted");return a7+=1,a8=Math.max(0,a8-a.waitMs),ba()}}let a=(0,d.Qo)(cr(p));return h.warn("COMBO",`All models failed | ${L} (${a})`),(0,e.wO)(H,L,p,a)}return h.warn("COMBO",`All models failed | ${L}`),new Response(JSON.stringify({error:{message:L}}),{status:H,headers:{"Content-Type":"application/json"}})}return(0,e.yj)(503,"Combo routing completed without an upstream response")},bb=null,bc=aJ[0]?.connectionId;if(a9&&bc){let a=await bS(bc);bb=await bU(aJ[0],a,{queueTimeoutMs:U.queueTimeoutMs??3e4,maxQueueSize:B(U)},h)}try{return await ba()}finally{bb?.();for(let a of a3)aV.delete(a)}}async function dW({body:a,combo:b,handleSingleModel:f,isModelAvailable:g,log:h,settings:i,allCombos:j,signal:k}){var l;let m,n=i?C(b,i):{...x,...b.config||{}},o=(l=n.concurrencyPerModel??3,m=new Map,async a=>{var b;if(!a)return l;let c=m.get(a);return void 0===c&&(c=await bS(a),m.set(a,c)),"number"==typeof(b=c)&&Number.isFinite(b)&&b>0?Math.floor(b):l}),p=n.queueTimeoutMs??3e4,q=B(n),r=n.maxRetries??1,s=bN(n.retryDelayMs,2e3),u=bN(n.fallbackDelayMs,0),v=!1!==n.reasoningTokenBufferEnabled,w=i?(0,ai.xv)(i):(0,ai.xv)(null),y=c3(await cK(b),j?Array.isArray(j)?await cL(j):{...j,combos:await cL(j.combos||[])}:j,bM(n.maxComboDepth)),z=c2(b$(await aY(y,a,h),n.evalRouting,h),a,h,"Context-aware round-robin fallback"),A=z.length;if(0===A)return bO("Round-robin combo has no executable targets");c9(b,n,a,c6(b,n,j),f,g,"round-robin",h);let D=n.stickyRoundRobinLimit,E=cj(null!=D?D:i?.stickyRoundRobinLimit),F=E>1;if(F){let a=ch.get(b.name);if(a){let c=z.find(b=>b.executionKey===a.executionKey);if(c){let a=(0,af.parseModel)(c.modelStr).model||c.modelStr;(!c.provider||"OPEN"!==(0,ae.qF)(c.provider).getStatus().state)&&!(w.providerCooldown.enabled&&c.provider&&"unknown"!==c.provider&&cb(c.provider,c.connectionId??void 0,w))&&!(c.provider&&a&&(0,d.qw)(c.provider,c.connectionId||"",a))&&(!g||await g(c.modelStr,c))||(h.info("COMBO-RR",`Clearing stale sticky target ${c.modelStr} — unavailable`),ch.delete(b.name))}}}if(!cg.has(b.name)&&!ch.has(b.name)&&cg.size>=500){let a=cg.keys().next().value;void 0!==a&&(cg.delete(a),ch.delete(a))}cg.has(b.name)||cg.set(b.name,0);let{startIndex:G,counter:H}=ck(b.name,z,E);F||cg.set(b.name,H+1);let I=await bE(z,a?.messages),J=G;if(I.stuck){let a=z.findIndex(a=>a.connectionId===I.targets[0]?.connectionId);a>=0&&(J=a)}let K=a?.stream===!0,L=Date.now(),M=null,N=null,O=null,P=0,Q=0,R=0,S=new Set,T=new Set,U=new Set;for(let i=0;i<A;i++){let j,l=z[(J+i)%A],m=l.modelStr,x=l.provider,y=await (0,d.LN)(x),B=`combo:${b.name}:${l.executionKey}`,C=x&&"unknown"!==x&&U.has(x)?{...l,allowRateLimitedConnection:!0}:l;if(g&&!await g(m,C)){h.debug?.("COMBO-RR",`Skipping ${m} — no credentials available or model excluded`),i>0&&Q++;continue}if(w.providerCooldown.enabled&&x&&"unknown"!==x&&cb(x,l.connectionId,w)){h.info("COMBO-RR",`Skipping ${m} — provider ${x} in global cooldown`),i>0&&Q++;continue}let D=bL(l,S,T);if(D){h.info("COMBO-RR",D),i>0&&Q++;continue}let G=await o(l.connectionId);try{j=await ad(B,{maxConcurrency:G,timeoutMs:p,maxQueueSize:q})}catch(b){let a=ak(b)&&"string"==typeof b.code?b.code:null;if("SEMAPHORE_TIMEOUT"===a||"SEMAPHORE_QUEUE_FULL"===a){h.warn("COMBO-RR",`Semaphore ${"SEMAPHORE_QUEUE_FULL"===a?"queue full":"timeout"} for ${m}, trying next model`),i>0&&Q++;continue}throw b}try{for(let g=0;g<=r;g++){if(++P>30)return h.warn("COMBO-RR","Maximum combo attempts (30) exceeded. Terminating loop to prevent runaway requests."),(0,e.yj)(503,"Maximum combo retry limit reached");g>0&&(h.info("COMBO-RR",`Retrying ${m} in ${s}ms (attempt ${g+1}/${r+1})`),await new Promise(a=>setTimeout(a,s))),h.info("COMBO-RR",`[RR #${H}] → ${m}${i>0?` (fallback +${i})`:""}${g>0?` (retry ${g})`:""}`);let j=a;{let b=ce(a.max_tokens),c=cf(m,a.max_tokens,{enabled:v});null!==b&&null!==c&&c!==b&&(j={...a,max_tokens:c},h.info("COMBO-RR",`Reasoning model ${m}: adjusted max_tokens ${b} -> ${c}`))}let o=await f(j,m,{...C,effectiveComboStrategy:"round-robin",failoverBeforeRetry:n.failoverBeforeRetry});if(o.ok){let a=await cs(o,K,h,n.responseValidation);if(!a.valid){h.warn("COMBO-RR",`${m} returned 200 but failed quality check: ${a.reason}`),t(b.name,m,{success:!1,latencyMs:Date.now()-L,fallbackCount:Q,strategy:"round-robin",target:bR(l)}),R++,M=`Upstream response failed quality validation: ${a.reason}`,N||(N=502),i>0&&Q++;break}let e=Date.now()-L;h.info("COMBO-RR",`${m} succeeded (${e}ms, ${Q} fallbacks)`),t(b.name,m,{success:!0,latencyMs:e,fallbackCount:Q,strategy:"round-robin",target:bR(l)}),R++;let f=o.headers?.get("X-OmniRoute-Selected-Connection-Id")||o.headers?.get("x-omniroute-selected-connection-id")||l.connectionId||"",g=(0,af.parseModel)(m).model||m;if(x&&g){let a=(0,d.lB)(x,f,g);a.cleared?h.info("COMBO-RR",`Model ${m} fully recovered — lockout cleared`):a.newFailureCount>0&&h.debug?.("COMBO-RR",`Model ${m} decayed to failureCount=${a.newFailureCount}`)}if(x&&"unknown"!==x&&cc(x,f||void 0),F&&cl(b.name,l,E,z),I.messageHash){let a=f||l.connectionId;a&&bD(I.messageHash,a)}if(x){let a=f||void 0;(async()=>{try{let{setLKGP:d}=await Promise.resolve().then(c.bind(c,89718));await Promise.all([d(b.name,l.executionKey,x,a),d(b.name,b.id||b.name,x,a)])}catch(a){h.warn("COMBO-RR","Failed to record Last Known Good Provider. This is non-fatal.",{err:a})}})()}return a.clonedResponse??o}let p=o.statusText||"",q=null,A=null;try{let a=o.clone();try{let b=await a.text();if(b){p=b.substring(0,500),A=JSON.parse(b);let a=A?.error;p="object"==typeof a&&a?.message||("string"==typeof a?a:null)||A?.message||p,q=A?.retryAfter||null}}catch{}}catch{}if(499===o.status)return h.info("COMBO-RR",`Client disconnected (499) during ${m} — stopping combo loop`),t(b.name,m,{success:!1,latencyMs:Date.now()-L,fallbackCount:Q,strategy:"round-robin",target:bR(l)}),R++,o;if(q&&(!O||new Date(q)<new Date(O))&&(O=q),"string"!=typeof p)try{p=JSON.stringify(p)}catch{p=String(p)}let D=(502===o.status||504===o.status)&&bP(A),G=429===o.status&&bQ(A),J=A?.error,V=J&&"object"==typeof J?{code:void 0!==J.code&&null!==J.code?String(J.code):void 0,type:void 0!==J.type&&null!==J.type?String(J.type):void 0}:void 0,W=(0,d.hk)(o.status,p,0,null,x,o.headers,y,V),{cooldownMs:X}=W,Y=o.headers?.get("X-OmniRoute-Selected-Connection-Id")||o.headers?.get("x-omniroute-selected-connection-id")||void 0,Z=Y?{...l,connectionId:Y}:l,$=function(a,b,c){return 503===a&&!!b?.includes("application/json")&&bK.some(a=>a.test(c))}(o.status,o.headers?.get("content-type")??null,p),aa=cA(Z,{result:o,fallbackResult:W,errorText:p,rawModel:(0,af.parseModel)(m).model||m,isTokenLimitBreach:G,allAccountsRateLimited:$,sets:{exhaustedProviders:S,exhaustedConnections:T,transientRateLimitedProviders:U},log:h,tag:"COMBO-RR",exhaustedLogLevel:"debug",structuredError:V});!D&&!G&&bJ.includes(o.status)&&X>0&&(!function(a,b){let c=_(a);c.rateLimitedUntil=Date.now()+b,setTimeout(()=>{c.rateLimitedUntil&&Date.now()>=c.rateLimitedUntil&&(c.rateLimitedUntil=null,ab(a))},b+50)}(B,X),h.warn("COMBO-RR",`${m} error ${o.status}, cooldown ${X}ms`)),$&&h.info("COMBO-RR",`All accounts rate-limited for ${m}, falling back to next model`);let ac=!D&&!G&&[408,429,500,502,503,504].includes(o.status);if(g<r&&ac&&!aa)continue;t(b.name,m,{success:!1,latencyMs:Date.now()-L,fallbackCount:Q,strategy:"round-robin",target:bR(l)}),R++,M=p||String(o.status),N||(N=o.status),i>0&&Q++,h.warn("COMBO-RR",`${m} failed, trying next model`,{status:o.status}),w.providerCooldown.enabled&&x&&"unknown"!==x&&ca(x,Z.connectionId??void 0,w);let ad=u>0&&X>0&&X<=5e3?Math.min(X,u):0;if([502,503,504].includes(o.status)&&ad>0&&(h.debug?.("COMBO-RR",`Waiting ${ad}ms before fallback to next model`),await new Promise(a=>{let b=setTimeout(a,ad);k?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),k?.aborted))return h.info("COMBO-RR","Client disconnected during fallback wait — aborting"),(0,e.yj)(499,"Client disconnected");break}}finally{j()}}let V=Date.now()-L;if(0===R&&t(b.name,null,{success:!1,latencyMs:V,fallbackCount:Q,strategy:"round-robin"}),!N)return new Response(JSON.stringify({error:{message:"Service temporarily unavailable: all upstream accounts are inactive",type:"service_unavailable",code:"ALL_ACCOUNTS_INACTIVE"}}),{status:503,headers:{"Content-Type":"application/json"}});let W=N,X=M||"All round-robin combo models unavailable";if(O){let a=(0,d.Qo)(cr(O));return h.warn("COMBO-RR",`All models failed | ${X} (${a})`),(0,e.wO)(W,X,O,a)}return h.warn("COMBO-RR",`All models failed | ${X}`),new Response(JSON.stringify({error:{message:X}}),{status:W,headers:{"Content-Type":"application/json"}})}let dX=new Map;function dY(a){a?dX.delete(a):dX.clear()}}};
|
|
41
|
+
${b}`:f};if(Array.isArray(c.messages)&&0===c.messages.length){let{messages:a,...b}=c;return b}return c}let g=Array.isArray(a.messages)?[...a.messages]:[];return{...a,messages:[{role:"system",content:f},...g]}}(w,a,R,`Model routing: ${a} → ${R}`,D(l.sessionId,b.name)))}{let a=w,b=ce(a.max_tokens),c=cf(R,a.max_tokens,{enabled:$});null!==b&&null!==c&&(a.max_tokens=c,c!==b&&h.info("COMBO",`Reasoning model ${R}: adjusted max_tokens ${b} -> ${c}`))}let A=await _(w,R,{...ad,effectiveComboStrategy:I,failoverBeforeRetry:U.failoverBeforeRetry});if(A.ok){let e=A.headers?.get("X-OmniRoute-Selected-Connection-Id")||A.headers?.get("x-omniroute-selected-connection-id")||L.connectionId||"",g=await cs(A,S,h,U.responseValidation);if(!g.valid){if(h.warn("COMBO",`Model ${R} returned 200 but failed quality check: ${g.reason}`),t(b.name,R,{success:!1,latencyMs:Date.now()-r,fallbackCount:s,strategy:I,target:bR(L)}),u++,o=`Upstream response failed quality validation: ${g.reason}`,q||(q=502),f>0&&s++,aa&&Z){let a=(0,X.Sy)(i);a.enabled&&a.errorCodes.includes(502)&&(0,d.E$)(aa,L.connectionId||"",Z,"quality_failure",502,a.baseCooldownMs,ac,{exactCooldownMs:a.useExponentialBackoff?0:a.baseCooldownMs,maxCooldownMs:a.maxCooldownMs})}return(0,a$.I)("combo.target.failed",{comboName:b.name,targetIndex:f,provider:aa,model:R,error:`Quality: ${g.reason}`,latencyMs:Date.now()-r}),null}if(aa&&Z){let a=(0,d.lB)(aa,e,Z);a.cleared?h.info("COMBO",`Model ${R} fully recovered — lockout cleared`):a.newFailureCount>0&&h.debug("COMBO",`Model ${R} decayed to failureCount=${a.newFailureCount}`)}let j=Date.now()-r;if((0,a$.I)("combo.target.succeeded",{comboName:b.name,targetIndex:f,provider:aa,model:R,latencyMs:j}),h.info("COMBO",`Model ${R} succeeded (${j}ms, ${s} fallbacks)`),t(b.name,R,{success:!0,latencyMs:j,fallbackCount:s,strategy:I,target:bR(L)}),u++,aa&&"unknown"!==aa&&cc(aa,e||void 0),"weighted"===I&&aD>1){let a=aI(L);a&&cn(b.name,a,aD)}if(a_("request.completed",{combo:b.name,provider:aa,model:R,account:"string"==typeof L.label&&L.label.trim().length>0?L.label.trim():"",accountId:e??"",latencyMs:j,fallbackCount:s}),b.context_cache_protection&&Q&&!a?.[M]&&F(Q,b.name,R,aa,L.connectionId??void 0),P.enabled&&l?.sessionId&&!a?.[M]){let c=E(l.sessionId,b.name);if(F(l.sessionId,b.name,R,aa,L.connectionId??void 0),c&&c!==R){let d=Array.isArray(a?.messages)&&a.messages.length>0?a.messages:Array.isArray(a?.input)?a.input:[];!function(a){var b,c;if("generate"!==function(a){if(!a.universalConfig.enabled||!a.previousModel||a.previousModel===a.currentModel)return"skip";if(a.sessionId){let b=D(a.sessionId,a.comboName);if(b&&b.summary)return"inject"}return"generate"}({sessionId:a.sessionId,comboName:a.comboName,previousModel:a.prevModel,currentModel:a.currModel,universalConfig:a.universalConfig})||!a.sessionId)return;let d=(b=a.sessionId,c=a.comboName,`${b}::${c}`);if(J.has(d))return;J.add(d);let e=60*(a.universalConfig.ttlMinutes||300)*1e3;setImmediate(()=>{W({sessionId:a.sessionId,comboName:a.comboName,messages:a.messages,prevModel:a.prevModel||"unknown",currModel:a.currModel,handoffModel:a.universalConfig.handoffModel||a.currModel,ttlMs:e,maxMessages:a.universalConfig.maxMessagesForSummary,providerAllowlist:a.universalConfig.providerAllowlist,handleSingleModel:a.handleSingleModel}).catch(a=>{console.warn("[universal-handoff] Generation failed:",a?.message||a)}).finally(()=>{J.delete(d)})})}({sessionId:l.sessionId,comboName:b.name,messages:d,prevModel:c,currModel:R,universalConfig:P,handleSingleModel:_})}F(l.sessionId,b.name,R,aa,L.connectionId??void 0)}if("context-relay"===I&&l?.sessionId&&K&&K.handoffProviders.includes(aa)&&"codex"===aa){let c=(0,bx.bb)(l.sessionId);if(c){let d=await (0,Y.GF)(c).catch(()=>null);if(d){let e=[d.windows?.session?.resetAt,d.windows?.weekly?.resetAt,d.resetAt].filter(a=>"string"==typeof a&&a.length>0).sort((a,b)=>a.localeCompare(b)),f=Array.isArray(a?.messages)&&a.messages.length>0?a.messages:Array.isArray(a?.input)?a.input:[];!function(a){var b,c;if(!a.sessionId||!a.connectionId)return;let d=N(a.config);if(0===d.handoffProviders.length||a.percentUsed<d.handoffThreshold||a.percentUsed>=.95)return;a.sessionId,a.comboName;let e=(b=a.sessionId,c=a.comboName,`${b}::${c}`);J.has(e)||(J.add(e),setImmediate(()=>{V({...a,sessionId:a.sessionId,connectionId:a.connectionId,config:d}).catch(a=>{console.warn("[context-relay] Handoff generation failed:",a?.message||a)}).finally(()=>{J.delete(e)})}))}({sessionId:l.sessionId,comboName:b.name,connectionId:c,percentUsed:d.percentUsed,messages:f,model:R,expiresAt:e[0]||null,config:K,handleSingleModel:_})}}}if(aS.messageHash&&L.connectionId&&bD(aS.messageHash,L.connectionId),aa){let a=e||void 0;(async()=>{try{let{setLKGP:d}=await Promise.resolve().then(c.bind(c,89718));await Promise.all([d(b.name,L.executionKey,aa,a),d(b.name,b.id||b.name,aa,a)])}catch(a){h.warn("COMBO","Failed to record Last Known Good Provider. This is non-fatal.",{err:a})}})()}return{ok:!0,response:g.clonedResponse??A}}let G=A.statusText||"",H=null,ab=null;try{let a=A.clone();try{let b=await a.text();if(b){G=b.substring(0,500),H=JSON.parse(b);let a=H?.error;G="object"==typeof a&&a?.message||("string"==typeof a?a:null)||H?.message||G,ab=H?.retryAfter||null}}catch{}}catch{}if(ab&&(!p||new Date(ab)<new Date(p))&&(p=ab),"string"!=typeof G)try{G=JSON.stringify(G)}catch{G=String(G)}let ae=(502===A.status||504===A.status)&&bP(H),af=429===A.status&&bQ(H);if(499===A.status)return h.info("COMBO",`Client disconnected (499) during ${R} — stopping combo loop`),t(b.name,R,{success:!1,latencyMs:Date.now()-r,fallbackCount:s,strategy:I,target:bR(L)}),u++,{ok:!1,response:A};let ag=H?.error,ah=ag&&"object"==typeof ag?{code:void 0!==ag.code&&null!==ag.code?String(ag.code):void 0,type:void 0!==ag.type&&null!==ag.type?String(ag.type):void 0}:void 0,ai=(0,d.hk)(A.status,G,0,null,aa,A.headers,ac,ah),{cooldownMs:aj}=ai,ak=A.headers?.get("X-OmniRoute-Selected-Connection-Id")||A.headers?.get("x-omniroute-selected-connection-id")||void 0,al=ak?{...L,connectionId:ak}:L,am=cA(al,{result:A,fallbackResult:ai,errorText:G,rawModel:Z,isTokenLimitBreach:af,allAccountsRateLimited:!1,sets:{exhaustedProviders:j,exhaustedConnections:k,transientRateLimitedProviders:n},log:h,tag:"COMBO",exhaustedLogLevel:"info",structuredError:ah});if(400===A.status&&ai.shouldFallback&&(y=G,!(/\bcontext.*(?:length_exceeded|too long|overflow|exceeded|window|limit)\b/i.test(y)||/exceeds.*context/i.test(y)||/your input exceeds/i.test(y)))&&(z=G,!(/\bmax_tokens\b.*(?:illegal|must|range|invalid)/i.test(z)||/\bparameter is illegal\b/i.test(z)||/\bis illegal.*range\b/i.test(z)))&&(G.toLowerCase().includes("context")||G.toLowerCase().includes("prompt")||G.toLowerCase().includes("token")||G.toLowerCase().includes("malformed")||G.toLowerCase().includes("invalid")||G.toLowerCase().includes("bad request")))return h.warn("COMBO",`400 Bad Request with body-specific error detected on ${R} — skipping fallback to other targets to prevent infinite loop`),t(b.name,R,{success:!1,latencyMs:Date.now()-r,fallbackCount:s,strategy:I,target:bR(L)}),u++,o=G||String(A.status),q||(q=A.status),f>0&&s++,h.warn("COMBO",`Model ${R} failed with body-specific error, stopping combo`),{ok:!1,response:A};let an=aJ[f+1],ao="string"==typeof an?.provider&&an.provider===aa;!(C={isStreamReadinessFailure:ae,status:A.status,sameProviderNext:ao,skipProviderBreaker:ai.skipProviderBreaker}).isStreamReadinessFailure&&(0,d.v6)(C.status)&&!C.sameProviderNext&&!C.skipProviderBreaker&&(0,d.p8)(aa,h,al.connectionId,ac);let ap=!ae&&!af&&[408,429,500,502,503,504].includes(A.status);if(g<at&&ap&&!am){let a=!1;if(aa&&Z&&0===g){let b=(0,X.Sy)(i);b.enabled&&b.errorCodes.includes(A.status)&&((0,d.E$)(aa,al.connectionId||"",Z,(0,d.M$)(A.status),A.status,b.baseCooldownMs,ac,{exactCooldownMs:(0,d.pX)(aj,b),maxCooldownMs:b.maxCooldownMs}),a=!0)}if(a)return h.info("COMBO",`Skipping retry for ${R} — model lockout active`),f>0&&s++,null;continue}if(t(b.name,R,{success:!1,latencyMs:Date.now()-r,fallbackCount:s,strategy:I,target:bR(L)}),u++,o=G||String(A.status),q||(q=A.status),f>0&&s++,aa&&Z){let a=(0,X.Sy)(i);a.enabled&&a.errorCodes.includes(A.status)&&(0,d.E$)(aa,al.connectionId||"",Z,(0,d.M$)(A.status),A.status,a.baseCooldownMs,ac,{exactCooldownMs:(0,d.pX)(aj,a),maxCooldownMs:a.maxCooldownMs})}h.warn("COMBO",`Model ${R} failed, trying next`,{status:A.status}),O.providerCooldown.enabled&&aa&&"unknown"!==aa&&ca(aa,al.connectionId??void 0,O);let aq=av>0&&aj>0&&aj<=5e3?Math.min(aj,av):0;if([502,503,504].includes(A.status)&&aq>0&&(h.debug?.("COMBO",`Waiting ${aq}ms before fallback to next model`),await new Promise(a=>{let b=setTimeout(a,aq);m?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),m?.aborted))return h.info("COMBO","Client disconnected during fallback wait — aborting"),{ok:!1,response:(0,e.yj)(499,"Client disconnected")};break}return null};for(let a=0;a<aJ.length&&!z;a++){let b=new AbortController;A.set(a,b);let c=()=>b.abort();m?.addEventListener("abort",c);let d=(async()=>{try{let b=await C(a);if(b&&!z)if(b.ok)for(let[c,d]of(z=!0,w(b.response),A.entries()))c!==a&&d.abort();else b.response&&(z=!0,w(b.response))}finally{m?.removeEventListener("abort",c)}})().catch(b=>{let c=h.error??h.warn,d=b instanceof Error?b.message:String(b);c("COMBO",`Speculative task error for target ${a}`,d)});if(y.add(d),d.finally(()=>y.delete(d)),B&&U.hedging&&a+1<aJ.length){let a=bN(U.hedgeDelayMs,500),b=new Promise(b=>{setTimeout(b,a)});await Promise.race([d,x,b])}else await Promise.race([d,x])}if(!z&&y.size>0&&await Promise.race([x,Promise.all([...y])]),z)return await x;let G=Date.now()-r;if(0===u&&t(b.name,null,{success:!1,latencyMs:G,fallbackCount:s,strategy:I}),f<aw)continue;if(!q)return a_("request.failed",{combo:b.name,reason:"ALL_ACCOUNTS_INACTIVE",latencyMs:G,fallbackCount:s}),new Response(JSON.stringify({error:{message:"Service temporarily unavailable: all upstream accounts are inactive",type:"service_unavailable",code:"ALL_ACCOUNTS_INACTIVE"}}),{status:503,headers:{"Content-Type":"application/json"}});let H=q,L=o||"All combo models unavailable";if(p){if(a5&&429===H){let a=function(a){let{targets:b,earliestRetryAfter:c,attempt:d,budgetLeftMs:e,settings:f,lookupLock:g,computeWaitMs:h}=a;if(!f.enabled)return{wait:!1,waitMs:0,reason:null};let i=null;for(let a of b){let b="string"==typeof a.provider?a.provider:"";if(!b)continue;let c=g(b,"string"==typeof a.connectionId?a.connectionId:"");if(!c)continue;let d="number"==typeof c.remainingMs&&Number.isFinite(c.remainingMs)?c.remainingMs:0;d<=0||(!i||d<i.remainingMs)&&(i={reason:c.reason,remainingMs:d})}if(!i)return{wait:!1,waitMs:0,reason:null};let j=h(c),k="number"==typeof j&&Number.isFinite(j)&&j>0?j:0,l=Math.max(i.remainingMs,k)+50;return{...function(a){var b;let{reason:c,attempt:d,budgetLeftMs:e,settings:f}=a,g="number"==typeof(b=a.waitMs)&&Number.isFinite(b)&&b>0?b:0;return{wait:!0===f.enabled&&!("string"!=typeof c||0===c.length||ct.has(c))&&cu.has(c)&&g>0&&g<=f.maxWaitMs&&d<f.maxAttempts&&e>=g,waitMs:g}}({reason:i.reason,waitMs:l,attempt:d,budgetLeftMs:e,settings:f}),reason:"string"==typeof i.reason?i.reason:null}}({targets:aJ,earliestRetryAfter:p,attempt:a7,budgetLeftMs:a8,settings:O.comboCooldownWait,lookupLock:(a,b)=>{let c=(0,af.parseModel)(aJ[0]?.modelStr??"").model||"";return(0,d.ls)(a,b,c)},computeWaitMs:a=>cv(a).waitMs});if(a.wait){if(h.info("COMBO",`Quota-share cooldown wait: ${L} — waiting ${Math.ceil(a.waitMs/1e3)}s (reason=${a.reason??"?"}) then retrying (attempt ${a7+1}/${O.comboCooldownWait.maxAttempts})`),!await cw(a.waitMs,m))return h.info("COMBO","Quota-share cooldown wait aborted by client disconnect"),(0,e.yj)(499,"Request aborted");return a7+=1,a8=Math.max(0,a8-a.waitMs),ba()}}let a=(0,d.Qo)(cr(p));return h.warn("COMBO",`All models failed | ${L} (${a})`),(0,e.wO)(H,L,p,a)}return h.warn("COMBO",`All models failed | ${L}`),new Response(JSON.stringify({error:{message:L}}),{status:H,headers:{"Content-Type":"application/json"}})}return(0,e.yj)(503,"Combo routing completed without an upstream response")},bb=null,bc=aJ[0]?.connectionId;if(a9&&bc){let a=await bS(bc);bb=await bU(aJ[0],a,{queueTimeoutMs:U.queueTimeoutMs??3e4,maxQueueSize:B(U)},h)}try{return await ba()}finally{bb?.();for(let a of a3)aV.delete(a)}}async function dW({body:a,combo:b,handleSingleModel:f,isModelAvailable:g,log:h,settings:i,allCombos:j,signal:k}){var l;let m,n=i?C(b,i):{...x,...b.config||{}},o=(l=n.concurrencyPerModel??3,m=new Map,async a=>{var b;if(!a)return l;let c=m.get(a);return void 0===c&&(c=await bS(a),m.set(a,c)),"number"==typeof(b=c)&&Number.isFinite(b)&&b>0?Math.floor(b):l}),p=n.queueTimeoutMs??3e4,q=B(n),r=n.maxRetries??1,s=bN(n.retryDelayMs,2e3),u=bN(n.fallbackDelayMs,0),v=!1!==n.reasoningTokenBufferEnabled,w=i?(0,ai.xv)(i):(0,ai.xv)(null),y=c3(await cK(b),j?Array.isArray(j)?await cL(j):{...j,combos:await cL(j.combos||[])}:j,bM(n.maxComboDepth)),z=c2(b$(await aY(y,a,h),n.evalRouting,h),a,h,"Context-aware round-robin fallback"),A=z.length;if(0===A)return bO("Round-robin combo has no executable targets");c9(b,n,a,c6(b,n,j),f,g,"round-robin",h);let D=n.stickyRoundRobinLimit,E=cj(null!=D?D:i?.stickyRoundRobinLimit),F=E>1;if(F){let a=ch.get(b.name);if(a){let c=z.find(b=>b.executionKey===a.executionKey);if(c){let a=(0,af.parseModel)(c.modelStr).model||c.modelStr;(!c.provider||"OPEN"!==(0,ae.qF)(c.provider).getStatus().state)&&!(w.providerCooldown.enabled&&c.provider&&"unknown"!==c.provider&&cb(c.provider,c.connectionId??void 0,w))&&!(c.provider&&a&&(0,d.qw)(c.provider,c.connectionId||"",a))&&(!g||await g(c.modelStr,c))||(h.info("COMBO-RR",`Clearing stale sticky target ${c.modelStr} — unavailable`),ch.delete(b.name))}}}if(!cg.has(b.name)&&!ch.has(b.name)&&cg.size>=500){let a=cg.keys().next().value;void 0!==a&&(cg.delete(a),ch.delete(a))}cg.has(b.name)||cg.set(b.name,0);let{startIndex:G,counter:H}=ck(b.name,z,E);F||cg.set(b.name,H+1);let I=await bE(z,a?.messages),J=G;if(I.stuck){let a=z.findIndex(a=>a.connectionId===I.targets[0]?.connectionId);a>=0&&(J=a)}let K=a?.stream===!0,L=Date.now(),M=null,N=null,O=null,P=0,Q=0,R=0,S=new Set,T=new Set,U=new Set;for(let i=0;i<A;i++){let j,l=z[(J+i)%A],m=l.modelStr,x=l.provider,y=await (0,d.LN)(x),B=`combo:${b.name}:${l.executionKey}`,C=x&&"unknown"!==x&&U.has(x)?{...l,allowRateLimitedConnection:!0}:l;if(g&&!await g(m,C)){h.debug?.("COMBO-RR",`Skipping ${m} — no credentials available or model excluded`),i>0&&Q++;continue}if(w.providerCooldown.enabled&&x&&"unknown"!==x&&cb(x,l.connectionId,w)){h.info("COMBO-RR",`Skipping ${m} — provider ${x} in global cooldown`),i>0&&Q++;continue}let D=bL(l,S,T);if(D){h.info("COMBO-RR",D),i>0&&Q++;continue}let G=await o(l.connectionId);try{j=await ad(B,{maxConcurrency:G,timeoutMs:p,maxQueueSize:q})}catch(b){let a=ak(b)&&"string"==typeof b.code?b.code:null;if("SEMAPHORE_TIMEOUT"===a||"SEMAPHORE_QUEUE_FULL"===a){h.warn("COMBO-RR",`Semaphore ${"SEMAPHORE_QUEUE_FULL"===a?"queue full":"timeout"} for ${m}, trying next model`),i>0&&Q++;continue}throw b}try{for(let g=0;g<=r;g++){if(++P>30)return h.warn("COMBO-RR","Maximum combo attempts (30) exceeded. Terminating loop to prevent runaway requests."),(0,e.yj)(503,"Maximum combo retry limit reached");g>0&&(h.info("COMBO-RR",`Retrying ${m} in ${s}ms (attempt ${g+1}/${r+1})`),await new Promise(a=>setTimeout(a,s))),h.info("COMBO-RR",`[RR #${H}] → ${m}${i>0?` (fallback +${i})`:""}${g>0?` (retry ${g})`:""}`);let j=a;{let b=ce(a.max_tokens),c=cf(m,a.max_tokens,{enabled:v});null!==b&&null!==c&&c!==b&&(j={...a,max_tokens:c},h.info("COMBO-RR",`Reasoning model ${m}: adjusted max_tokens ${b} -> ${c}`))}let o=await f(j,m,{...C,effectiveComboStrategy:"round-robin",failoverBeforeRetry:n.failoverBeforeRetry});if(o.ok){let a=await cs(o,K,h,n.responseValidation);if(!a.valid){h.warn("COMBO-RR",`${m} returned 200 but failed quality check: ${a.reason}`),t(b.name,m,{success:!1,latencyMs:Date.now()-L,fallbackCount:Q,strategy:"round-robin",target:bR(l)}),R++,M=`Upstream response failed quality validation: ${a.reason}`,N||(N=502),i>0&&Q++;break}let e=Date.now()-L;h.info("COMBO-RR",`${m} succeeded (${e}ms, ${Q} fallbacks)`),t(b.name,m,{success:!0,latencyMs:e,fallbackCount:Q,strategy:"round-robin",target:bR(l)}),R++;let f=o.headers?.get("X-OmniRoute-Selected-Connection-Id")||o.headers?.get("x-omniroute-selected-connection-id")||l.connectionId||"",g=(0,af.parseModel)(m).model||m;if(x&&g){let a=(0,d.lB)(x,f,g);a.cleared?h.info("COMBO-RR",`Model ${m} fully recovered — lockout cleared`):a.newFailureCount>0&&h.debug?.("COMBO-RR",`Model ${m} decayed to failureCount=${a.newFailureCount}`)}if(x&&"unknown"!==x&&cc(x,f||void 0),F&&cl(b.name,l,E,z),I.messageHash){let a=f||l.connectionId;a&&bD(I.messageHash,a)}if(x){let a=f||void 0;(async()=>{try{let{setLKGP:d}=await Promise.resolve().then(c.bind(c,89718));await Promise.all([d(b.name,l.executionKey,x,a),d(b.name,b.id||b.name,x,a)])}catch(a){h.warn("COMBO-RR","Failed to record Last Known Good Provider. This is non-fatal.",{err:a})}})()}return a.clonedResponse??o}let p=o.statusText||"",q=null,A=null;try{let a=o.clone();try{let b=await a.text();if(b){p=b.substring(0,500),A=JSON.parse(b);let a=A?.error;p="object"==typeof a&&a?.message||("string"==typeof a?a:null)||A?.message||p,q=A?.retryAfter||null}}catch{}}catch{}if(499===o.status)return h.info("COMBO-RR",`Client disconnected (499) during ${m} — stopping combo loop`),t(b.name,m,{success:!1,latencyMs:Date.now()-L,fallbackCount:Q,strategy:"round-robin",target:bR(l)}),R++,o;if(q&&(!O||new Date(q)<new Date(O))&&(O=q),"string"!=typeof p)try{p=JSON.stringify(p)}catch{p=String(p)}let D=(502===o.status||504===o.status)&&bP(A),G=429===o.status&&bQ(A),J=A?.error,V=J&&"object"==typeof J?{code:void 0!==J.code&&null!==J.code?String(J.code):void 0,type:void 0!==J.type&&null!==J.type?String(J.type):void 0}:void 0,W=(0,d.hk)(o.status,p,0,null,x,o.headers,y,V),{cooldownMs:X}=W,Y=o.headers?.get("X-OmniRoute-Selected-Connection-Id")||o.headers?.get("x-omniroute-selected-connection-id")||void 0,Z=Y?{...l,connectionId:Y}:l,$=function(a,b,c){return 503===a&&!!b?.includes("application/json")&&bK.some(a=>a.test(c))}(o.status,o.headers?.get("content-type")??null,p),aa=cA(Z,{result:o,fallbackResult:W,errorText:p,rawModel:(0,af.parseModel)(m).model||m,isTokenLimitBreach:G,allAccountsRateLimited:$,sets:{exhaustedProviders:S,exhaustedConnections:T,transientRateLimitedProviders:U},log:h,tag:"COMBO-RR",exhaustedLogLevel:"debug",structuredError:V});!D&&!G&&bJ.includes(o.status)&&X>0&&(!function(a,b){let c=_(a);c.rateLimitedUntil=Date.now()+b,setTimeout(()=>{c.rateLimitedUntil&&Date.now()>=c.rateLimitedUntil&&(c.rateLimitedUntil=null,ab(a))},b+50)}(B,X),h.warn("COMBO-RR",`${m} error ${o.status}, cooldown ${X}ms`)),$&&h.info("COMBO-RR",`All accounts rate-limited for ${m}, falling back to next model`);let ac=!D&&!G&&[408,429,500,502,503,504].includes(o.status);if(g<r&&ac&&!aa)continue;t(b.name,m,{success:!1,latencyMs:Date.now()-L,fallbackCount:Q,strategy:"round-robin",target:bR(l)}),R++,M=p||String(o.status),N||(N=o.status),i>0&&Q++,h.warn("COMBO-RR",`${m} failed, trying next model`,{status:o.status}),w.providerCooldown.enabled&&x&&"unknown"!==x&&ca(x,Z.connectionId??void 0,w);let ad=u>0&&X>0&&X<=5e3?Math.min(X,u):0;if([502,503,504].includes(o.status)&&ad>0&&(h.debug?.("COMBO-RR",`Waiting ${ad}ms before fallback to next model`),await new Promise(a=>{let b=setTimeout(a,ad);k?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),k?.aborted))return h.info("COMBO-RR","Client disconnected during fallback wait — aborting"),(0,e.yj)(499,"Client disconnected");break}}finally{j()}}let V=Date.now()-L;if(0===R&&t(b.name,null,{success:!1,latencyMs:V,fallbackCount:Q,strategy:"round-robin"}),!N)return new Response(JSON.stringify({error:{message:"Service temporarily unavailable: all upstream accounts are inactive",type:"service_unavailable",code:"ALL_ACCOUNTS_INACTIVE"}}),{status:503,headers:{"Content-Type":"application/json"}});let W=N,X=M||"All round-robin combo models unavailable";if(O){let a=(0,d.Qo)(cr(O));return h.warn("COMBO-RR",`All models failed | ${X} (${a})`),(0,e.wO)(W,X,O,a)}return h.warn("COMBO-RR",`All models failed | ${X}`),new Response(JSON.stringify({error:{message:X}}),{status:W,headers:{"Content-Type":"application/json"}})}let dX=new Map;function dY(a){a?dX.delete(a):dX.clear()}}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/
|
|
1
|
+
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/aypJ4bU-vTIpFp6cWGWWW/_buildManifest.js","static/aypJ4bU-vTIpFp6cWGWWW/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-f482ccef6733ebcc.js","static/chunks/4bd1b696-e356ca5ba0218e27.js","static/chunks/3794-e569667691edc8f7.js","static/chunks/main-app-3057ce86fdd7f7ab.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/88fb3376e840da30.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/d9dab4414d935cbc.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-f482ccef6733ebcc.js"/><script src="/_next/static/chunks/4bd1b696-e356ca5ba0218e27.js" async=""></script><script src="/_next/static/chunks/3794-e569667691edc8f7.js" async=""></script><script src="/_next/static/chunks/main-app-3057ce86fdd7f7ab.js" async=""></script><script src="/_next/static/chunks/1a258343-5938f676ed376386.js" async=""></script><script src="/_next/static/chunks/817-a5c62c148ab3b81c.js" async=""></script><script src="/_next/static/chunks/5280-a3ec0a6d1e958fd1.js" async=""></script><script src="/_next/static/chunks/1321-
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/88fb3376e840da30.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/d9dab4414d935cbc.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-f482ccef6733ebcc.js"/><script src="/_next/static/chunks/4bd1b696-e356ca5ba0218e27.js" async=""></script><script src="/_next/static/chunks/3794-e569667691edc8f7.js" async=""></script><script src="/_next/static/chunks/main-app-3057ce86fdd7f7ab.js" async=""></script><script src="/_next/static/chunks/1a258343-5938f676ed376386.js" async=""></script><script src="/_next/static/chunks/817-a5c62c148ab3b81c.js" async=""></script><script src="/_next/static/chunks/5280-a3ec0a6d1e958fd1.js" async=""></script><script src="/_next/static/chunks/1321-9f3b382645ad801b.js" async=""></script><script src="/_next/static/chunks/705-979ff3eb195b9023.js" async=""></script><script src="/_next/static/chunks/5497-98a294643e6a188f.js" async=""></script><script src="/_next/static/chunks/app/(dashboard)/layout-5089b3eb0da6a50c.js" async=""></script><script src="/_next/static/chunks/2599-f9168512ac1ac377.js" async=""></script><script src="/_next/static/chunks/app/layout-d16c91f6323660b9.js" async=""></script><link rel="preload" href="https://www.googletagmanager.com/gtag/js?id=G-LC959F603F" as="script"/><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><meta name="theme-color" content="#0a0a0a"/><title>9Router - AI Infrastructure Management</title><meta name="description" content="One endpoint for all your AI providers. Manage keys, monitor usage, and scale effortlessly."/><link rel="manifest" href="/manifest.webmanifest"/><link rel="icon" href="/favicon.ico?603d046c9a6fdfbb" type="image/x-icon" sizes="16x16"/><link rel="icon" href="/favicon.svg"/><script>if(document.fonts&&document.fonts.ready){document.fonts.ready.then(function(){document.documentElement.classList.add('fonts-loaded')})}else{document.documentElement.classList.add('fonts-loaded')}</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_f367f3 font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-f482ccef6733ebcc.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[21110,[\"3862\",\"static/chunks/1a258343-5938f676ed376386.js\",\"817\",\"static/chunks/817-a5c62c148ab3b81c.js\",\"5280\",\"static/chunks/5280-a3ec0a6d1e958fd1.js\",\"1321\",\"static/chunks/1321-9f3b382645ad801b.js\",\"705\",\"static/chunks/705-979ff3eb195b9023.js\",\"5497\",\"static/chunks/5497-98a294643e6a188f.js\",\"9305\",\"static/chunks/app/(dashboard)/layout-5089b3eb0da6a50c.js\"],\"ThemeProvider\"]\n3:I[94635,[\"817\",\"static/chunks/817-a5c62c148ab3b81c.js\",\"2599\",\"static/chunks/2599-f9168512ac1ac377.js\",\"1321\",\"static/chunks/1321-9f3b382645ad801b.js\",\"7177\",\"static/chunks/app/layout-d16c91f6323660b9.js\"],\"RuntimeI18nProvider\"]\n4:I[57121,[],\"\"]\n5:I[74581,[],\"\"]\n6:I[30565,[\"817\",\"static/chunks/817-a5c62c148ab3b81c.js\",\"2599\",\"static/chunks/2599-f9168512ac1ac377.js\",\"1321\",\"static/chunks/1321-9f3b382645ad801b.js\",\"7177\",\"static/chunks/app/layout-d16c91f6323660b9.js\"],\"GoogleAnalytics\"]\n7:I[90484,[],\"OutletBoundary\"]\n8:\"$Sreact.suspense\"\nb:I[90484,[],\"ViewportBoundary\"]\nd:I[90484,[],\"MetadataBoundary\"]\nf:I[27123,[],\"default\",1]\n:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/88fb3376e840da30.css\",\"style\"]\n:HL[\"/_next/static/css/d9dab4414d935cbc.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/88fb3376e840da30.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/d9dab4414d935cbc.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"if(document.fonts\u0026\u0026document.fonts.ready){document.fonts.ready.then(function(){document.documentElement.classList.add('fonts-loaded')})}else{document.documentElement.classList.add('fonts-loaded')}\"}}]}],[\"$\",\"body\",null,{\"className\":\"__variable_f367f3 font-sans antialiased\",\"children\":[[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}],[\"$\",\"$L6\",null,{\"gaId\":\"G-LC959F603F\"}]]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@9\"}]}]]}],{},null,false,null]},null,false,\"$@a\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Le\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"aypJ4bU-vTIpFp6cWGWWW\"}\n"])</script><script>self.__next_f.push([1,"10:[]\na:\"$W10\"\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#0a0a0a\"}]]\n"])</script><script>self.__next_f.push([1,"11:I[86869,[],\"IconMark\"]\n9:null\ne:[[\"$\",\"title\",\"0\",{\"children\":\"9Router - AI Infrastructure Management\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"One endpoint for all your AI providers. Manage keys, monitor usage, and scale effortlessly.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"manifest\",\"href\":\"/manifest.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?603d046c9a6fdfbb\",\"type\":\"image/x-icon\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\"}],[\"$\",\"$L11\",\"5\",{}]]\n"])</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-f482ccef6733ebcc.js"/><script src="/_next/static/chunks/4bd1b696-e356ca5ba0218e27.js" async=""></script><script src="/_next/static/chunks/3794-e569667691edc8f7.js" async=""></script><script src="/_next/static/chunks/main-app-3057ce86fdd7f7ab.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-f482ccef6733ebcc.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57121,[],\"\"]\n3:I[74581,[],\"\"]\n4:I[90484,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[90484,[],\"ViewportBoundary\"]\na:I[90484,[],\"MetadataBoundary\"]\nc:I[27123,[],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"
|
|
1
|
+
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-f482ccef6733ebcc.js"/><script src="/_next/static/chunks/4bd1b696-e356ca5ba0218e27.js" async=""></script><script src="/_next/static/chunks/3794-e569667691edc8f7.js" async=""></script><script src="/_next/static/chunks/main-app-3057ce86fdd7f7ab.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-f482ccef6733ebcc.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57121,[],\"\"]\n3:I[74581,[],\"\"]\n4:I[90484,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[90484,[],\"ViewportBoundary\"]\na:I[90484,[],\"MetadataBoundary\"]\nc:I[27123,[],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"aypJ4bU-vTIpFp6cWGWWW\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[]\n"])</script></body></html>
|