omniroute 3.7.2 → 3.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/.next/BUILD_ID +1 -1
- package/app/.next/app-path-routes-manifest.json +15 -15
- package/app/.next/build-manifest.json +3 -3
- package/app/.next/prerender-manifest.json +3 -3
- package/app/.next/react-loadable-manifest.json +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/audit/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/batch/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cache/media/page.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cache/media/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cache/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/logs/page.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/memory/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/search-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +1 -1
- package/app/.next/server/app/_global-error.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/acp/agents/route.js.nft.json +1 -1
- package/app/.next/server/app/api/auth/login/route.js.nft.json +1 -1
- package/app/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/app/.next/server/app/api/batches/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cache/entries/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cache/reasoning/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cache/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cache/stats/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/backups/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/backups/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/cline-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/codex-profiles/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/codex-profiles/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/codex-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/droid-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/keys/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/openclaw/auto-order/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/qwen-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/qwen-settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/status/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/status/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cloud/auth/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cloud/credentials/update/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cloud/model/resolve/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cloud/models/alias/route.js.nft.json +1 -1
- package/app/.next/server/app/api/combos/[id]/route.js +1 -1
- package/app/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/combos/builder/options/route.js.nft.json +1 -1
- package/app/.next/server/app/api/combos/metrics/route.js.nft.json +1 -1
- package/app/.next/server/app/api/combos/reorder/route.js.nft.json +1 -1
- package/app/.next/server/app/api/combos/route.js +1 -1
- package/app/.next/server/app/api/combos/route.js.nft.json +1 -1
- package/app/.next/server/app/api/combos/test/route.js +1 -1
- package/app/.next/server/app/api/combos/test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/compliance/audit-log/route.js.nft.json +1 -1
- package/app/.next/server/app/api/db-backups/export/route.js.nft.json +1 -1
- package/app/.next/server/app/api/db-backups/exportAll/route.js.nft.json +1 -1
- package/app/.next/server/app/api/db-backups/import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/db-backups/route.js.nft.json +1 -1
- package/app/.next/server/app/api/evals/[suiteId]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/evals/route.js.nft.json +1 -1
- package/app/.next/server/app/api/evals/scorecard/route.js.nft.json +1 -1
- package/app/.next/server/app/api/evals/suites/[suiteId]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/evals/suites/route.js.nft.json +1 -1
- package/app/.next/server/app/api/fallback/chains/route.js.nft.json +1 -1
- package/app/.next/server/app/api/files/[id]/content/route.js.nft.json +1 -1
- package/app/.next/server/app/api/files/route.js.nft.json +1 -1
- package/app/.next/server/app/api/init/route.js.nft.json +1 -1
- package/app/.next/server/app/api/internal/codex-responses-ws/route.js.nft.json +1 -1
- package/app/.next/server/app/api/keys/[id]/reveal/route.js.nft.json +1 -1
- package/app/.next/server/app/api/keys/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/keys/route.js.nft.json +1 -1
- package/app/.next/server/app/api/logs/active/route.js.nft.json +1 -1
- package/app/.next/server/app/api/logs/console/route.js.nft.json +1 -1
- package/app/.next/server/app/api/logs/detail/route.js.nft.json +1 -1
- package/app/.next/server/app/api/logs/export/route.js.nft.json +1 -1
- package/app/.next/server/app/api/mcp/sse/route.js.nft.json +1 -1
- package/app/.next/server/app/api/mcp/status/route.js.nft.json +1 -1
- package/app/.next/server/app/api/mcp/stream/route.js.nft.json +1 -1
- package/app/.next/server/app/api/memory/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/memory/health/route.js.nft.json +1 -1
- package/app/.next/server/app/api/memory/route.js.nft.json +1 -1
- package/app/.next/server/app/api/model-combo-mappings/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/model-combo-mappings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/alias/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/catalog/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/openrouter-catalog/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/monitoring/health/route.js +1 -1
- package/app/.next/server/app/api/monitoring/health/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
- package/app/.next/server/app/api/openapi/try/route.js.nft.json +1 -1
- package/app/.next/server/app/api/policies/route.js.nft.json +1 -1
- package/app/.next/server/app/api/pricing/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/pricing/route.js.nft.json +1 -1
- package/app/.next/server/app/api/pricing/sync/route.js.nft.json +1 -1
- package/app/.next/server/app/api/provider-metrics/route.js.nft.json +1 -1
- package/app/.next/server/app/api/provider-models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/app/.next/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/codex-auth/apply-local/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/codex-auth/export/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/refresh/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/sync-models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/client/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
- package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/zed/import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/rate-limits/route.js.nft.json +1 -1
- package/app/.next/server/app/api/resilience/reset/route.js.nft.json +1 -1
- package/app/.next/server/app/api/resilience/route.js.nft.json +1 -1
- package/app/.next/server/app/api/restart/route.js.nft.json +1 -1
- package/app/.next/server/app/api/search/providers/route.js.nft.json +1 -1
- package/app/.next/server/app/api/search/stats/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/auto-disable-accounts/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/background-degradation/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/cache-config/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/cache-metrics/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/combo-defaults/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/export-json/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/favicon/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/import-json/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/ip-filter/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/lkgp-cache/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/memory/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/model-aliases/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/models-dev/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/payload-rules/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/proxies/assignments/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/proxies/bulk-assign/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/proxies/health/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/proxies/migrate/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/proxies/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/proxy/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/proxy/test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/purge-logs/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/require-login/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/system-prompt/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/task-routing/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/thinking-budget/route.js.nft.json +1 -1
- package/app/.next/server/app/api/shutdown/route.js.nft.json +1 -1
- package/app/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/skills/executions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/skills/install/route.js.nft.json +1 -1
- package/app/.next/server/app/api/skills/marketplace/install/route.js.nft.json +1 -1
- package/app/.next/server/app/api/skills/marketplace/route.js.nft.json +1 -1
- package/app/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/app/.next/server/app/api/skills/skillssh/install/route.js.nft.json +1 -1
- package/app/.next/server/app/api/skills/skillssh/route.js.nft.json +1 -1
- package/app/.next/server/app/api/storage/health/route.js.nft.json +1 -1
- package/app/.next/server/app/api/sync/bundle/route.js.nft.json +1 -1
- package/app/.next/server/app/api/sync/cloud/route.js.nft.json +1 -1
- package/app/.next/server/app/api/sync/initialize/route.js.nft.json +1 -1
- package/app/.next/server/app/api/sync/tokens/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/sync/tokens/route.js.nft.json +1 -1
- package/app/.next/server/app/api/synced-available-models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/system/env/repair/route.js.nft.json +1 -1
- package/app/.next/server/app/api/system/version/route.js +1 -1
- package/app/.next/server/app/api/system/version/route.js.nft.json +1 -1
- package/app/.next/server/app/api/token-health/route.js.nft.json +1 -1
- package/app/.next/server/app/api/translator/save/route.js.nft.json +1 -1
- package/app/.next/server/app/api/translator/send/route.js.nft.json +1 -1
- package/app/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnels/cloudflared/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnels/tailscale/check/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnels/tailscale/disable/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnels/tailscale/enable/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnels/tailscale/install/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnels/tailscale/login/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnels/tailscale/route.js.nft.json +1 -1
- package/app/.next/server/app/api/tunnels/tailscale/start-daemon/route.js.nft.json +1 -1
- package/app/.next/server/app/api/upstream-proxy/[providerId]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/analytics/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/budget/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/call-logs/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/call-logs/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/combo-health/route.js +1 -1
- package/app/.next/server/app/api/usage/combo-health/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/history/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/logs/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/provider-limits/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/proxy-logs/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/quota/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/utilization/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/accounts/[id]/limits/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/batches/[id]/cancel/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/batches/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/batches/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/completions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/db/health/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/files/[id]/content/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/files/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/files/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/images/edits/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/issues/report/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/management/proxies/assignments/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/management/proxies/bulk-assign/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/management/proxies/health/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/management/proxies/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/moderations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/music/generations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/limits/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/quotas/check/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/registered-keys/[id]/revoke/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/registered-keys/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/registered-keys/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/rerank/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/responses/[...path]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/search/analytics/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/search/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/ws/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1beta/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/version-manager/check-update/route.js +1 -1
- package/app/.next/server/app/api/version-manager/check-update/route.js.nft.json +1 -1
- package/app/.next/server/app/api/version-manager/install/route.js +1 -1
- package/app/.next/server/app/api/version-manager/install/route.js.nft.json +1 -1
- package/app/.next/server/app/api/version-manager/restart/route.js +1 -1
- package/app/.next/server/app/api/version-manager/restart/route.js.nft.json +1 -1
- package/app/.next/server/app/api/version-manager/start/route.js +1 -1
- package/app/.next/server/app/api/version-manager/start/route.js.nft.json +1 -1
- package/app/.next/server/app/api/version-manager/status/route.js +1 -1
- package/app/.next/server/app/api/version-manager/status/route.js.nft.json +1 -1
- package/app/.next/server/app/api/version-manager/stop/route.js +1 -1
- package/app/.next/server/app/api/version-manager/stop/route.js.nft.json +1 -1
- package/app/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/webhooks/[id]/test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/webhooks/route.js.nft.json +1 -1
- package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/docs/page.js +1 -1
- package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app-paths-manifest.json +15 -15
- package/app/.next/server/chunks/12767.js +1 -1
- package/app/.next/server/chunks/19849.js +1 -1
- package/app/.next/server/chunks/20236.js +1 -1
- package/app/.next/server/chunks/36040.js +4 -4
- package/app/.next/server/chunks/3832.js +1 -1
- package/app/.next/server/chunks/39548.js +1 -1
- package/app/.next/server/chunks/39859.js +1 -1
- package/app/.next/server/chunks/44088.js +1 -1
- package/app/.next/server/chunks/45415.js +1 -1
- package/app/.next/server/chunks/55672.js +1 -0
- package/app/.next/server/chunks/59092.js +2 -2
- package/app/.next/server/chunks/66094.js +1 -1
- package/app/.next/server/chunks/69105.js +1 -1
- package/app/.next/server/chunks/75225.js +1 -1
- package/app/.next/server/chunks/77044.js +1 -1
- package/app/.next/server/chunks/83648.js +1 -1
- package/app/.next/server/chunks/93831.js +4 -4
- package/app/.next/server/chunks/9679.js +3 -3
- package/app/.next/server/chunks/99168.js +2 -2
- package/app/.next/server/middleware-build-manifest.js +1 -1
- package/app/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/app/.next/server/middleware.js +2 -2
- package/app/.next/server/pages/500.html +1 -1
- package/app/.next/server/server-reference-manifest.js +1 -1
- package/app/.next/server/server-reference-manifest.json +1 -1
- package/app/.next/static/chunks/{1999-fefe90c60eaa3b23.js → 1999-8cf58c233346f980.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cache/media/page-ad8091c5b7536b7a.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/logs/page-ccc65d29bbb19d51.js +1 -0
- package/app/.next/static/chunks/app/{layout-3e3b043f9b52bb80.js → layout-fbebdd84c4996160.js} +1 -1
- package/app/.next/static/chunks/{webpack-117eac5998a94c69.js → webpack-ea5983ad4b51e934.js} +1 -1
- package/app/.next/static/css/7caa8a6802c65def.css +1 -0
- package/app/docs/openapi.yaml +1 -1
- package/app/open-sse/mcp-server/server.js +15 -1
- package/app/package.json +1 -1
- package/package.json +1 -1
- package/app/.next/server/chunks/80812.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cache/media/page-f0289617f824bbf2.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/logs/page-f24fde8a3f731108.js +0 -1
- package/app/.next/static/css/8d36e4e21725013b.css +0 -1
- /package/app/.next/static/{yvJ6rPtn4eb7sOBUCBGrF → qmeYzerLcoUXZ06JXgit3}/_buildManifest.js +0 -0
- /package/app/.next/static/{yvJ6rPtn4eb7sOBUCBGrF → qmeYzerLcoUXZ06JXgit3}/_ssgManifest.js +0 -0
|
@@ -61,7 +61,7 @@ data: ${JSON.stringify({tokens_generated:f,elapsed_ms:Date.now()-g,done:!0})}
|
|
|
61
61
|
[...truncated ${a.length-65536} chars...]
|
|
62
62
|
${c}`}if("object"!=typeof a)return a;if(b>=6)return"[MaxDepth]";if(Array.isArray(a)){let c=(a.length>24?a.slice(-24):a).map(a=>av(a,b+1));return a.length>24?[{_omniroute_truncated_array:!0,originalLength:a.length,retainedTailItems:24},...c]:c}let c={},d=Object.entries(a);for(let[a,e]of d.slice(0,80))c[a]=av(e,b+1);return d.length>80&&(c._omniroute_truncated_keys=d.length-80),c}function aw(a){try{return JSON.stringify(a).length<=262144}catch{return!1}}function ax(a){if(!a||"object"!=typeof a)return"";let b=a?.choices?.[0]?.message?.content;if("string"==typeof b)return au(b.trim());if(Array.isArray(a?.content)){let b=a.content.filter(a=>a?.type==="text"&&"string"==typeof a?.text).map(a=>String(a.text).trim()).filter(Boolean).join("\n");if(b)return au(b)}return"string"==typeof a?.output_text?au(a.output_text.trim()):""}function ay(a){if(!a||"object"!=typeof a)return"";let b=Array.isArray(a.messages)?a.messages:null;if(b&&b.length>0)for(let a=b.length-1;a>=0;a-=1){let c=b[a];if(c?.role==="user"){if("string"==typeof c.content&&c.content.trim().length>0)return au(c.content.trim());if(Array.isArray(c.content)){let a=c.content.map(a=>"string"==typeof a?.text||a?.type==="input_text"&&"string"==typeof a?.text?a.text.trim():"").filter(Boolean).join("\n").trim();if(a)return au(a)}}}let c=Array.isArray(a.input)?a.input:null;if(c&&c.length>0){for(let a=c.length-1;a>=0;a-=1){let b=c[a],d="string"==typeof b?.role?b.role.trim().toLowerCase():"",e="string"==typeof b?.type?b.type.trim().toLowerCase():"";if((!d||"user"===d)&&(!e||"message"===e)){if("string"==typeof b?.content&&b.content.trim())return au(b.content.trim());if(Array.isArray(b?.content)){let a=b.content.map(a=>"string"==typeof a?.text||a?.type==="input_text"&&"string"==typeof a?.text?a.text.trim():"").filter(Boolean).join("\n").trim();if(a)return au(a)}}}let a=[],b=0;for(let d=c.length-1;d>=0&&b<65536;d-=1){let e=c[d],f=(()=>{let a="string"==typeof e?.role?e.role.trim().toLowerCase():"",b="string"==typeof e?.type?e.type.trim().toLowerCase():"";return a&&"user"!==a||b&&"message"!==b?"":"string"==typeof e?.content?e.content.trim():Array.isArray(e?.content)?e.content.map(a=>"string"==typeof a?.text||a?.type==="input_text"&&"string"==typeof a?.text?a.text.trim():"").filter(Boolean).join("\n").trim():""})();f&&(a.unshift(f),b+=f.length+1)}let d=a.join("\n").trim();if(d)return au(d)}return""}async function az({provider:a,connectionId:b,providerSpecificData:c,log:d}){if(b&&(0,as.U1)(a,c))try{await (0,ar.wJ)(b)}catch(b){let a=b instanceof Error?b.message:String(b);d?.debug?.("CLAUDE_USAGE",`Failed to sync Claude extra-usage state: ${a}`)}}function aA(a,b){let c=b&&b._toolNameMap instanceof Map?b._toolNameMap:null;if(!c?.size)return a;if(!a?.size)return c;let d=new Map(a);for(let[a,b]of c.entries())d.set(a,b);return d}function aB(a,b){if(!a||"object"!=typeof a)return null;let c=b.toLowerCase();for(let[b,d]of Object.entries(a))if(b.toLowerCase()===c&&"string"==typeof d&&d.trim())return d.trim();return null}function aC({provider:a,model:b,connectionId:c,credentials:d}){let e=function(a,b){if("string"==typeof a&&a.trim().length>0)return a;for(let a of[b?.connectionId,b?.id,b?.email,b?.name,b?.displayName])if("string"==typeof a&&a.trim().length>0)return a.trim();return null}(c,d);return e&&a?(0,W.fy)({provider:a,accountKey:e}):null}function aD(a){return"number"==typeof a&&Number.isFinite(a)&&a>0?a:0}function aE(a){if(!a||"object"!=typeof a)return null;let b=a.prompt_tokens_details&&"object"==typeof a.prompt_tokens_details?a.prompt_tokens_details:void 0,c="cache_read_input_tokens"in a||"cached_tokens"in a||"cache_creation_input_tokens"in a||!!b&&("cached_tokens"in b||"cache_creation_tokens"in b),d=aD(a.cache_read_input_tokens??a.cached_tokens??b?.cached_tokens),e=aD(a.cache_creation_input_tokens??b?.cache_creation_tokens);return c?{cacheReadTokens:d,cacheCreationTokens:e}:null}function aF(a,b){if(!b||"object"!=typeof b)return a;let c=Object.fromEntries(Object.entries(b).filter(([,a])=>null!=a));if(0===Object.keys(c).length)return a;if(!a||"object"!=typeof a||Array.isArray(a))return{_omniroute:c,_payload:a??null};let d=a._omniroute&&"object"==typeof a._omniroute&&!Array.isArray(a._omniroute)?a._omniroute:{};return{...a,_omniroute:{...d,...c}}}[h,k,v,x,z,A,E,G,H,Z,ak,am,an,ar]=at.then?(await at)():at;let aK=new Map,aL=null,aM=0;async function aG(){let a=Date.now();return aL&&a-aM<1e4?aL:(aM=a,aL=(async()=>{let{getCombos:a}=await Promise.resolve().then(c.bind(c,33364));return a()})())}async function aH(a){let b=aK.get(a);if(b&&Date.now()-b.ts<1e4)return b;let c=await (0,G.Azi)(a).catch(()=>null),d=c?{mode:c.mode,enabled:c.enabled,ts:Date.now()}:{mode:"native",enabled:!1,ts:Date.now()};return aK.set(a,d),d}function aI(a,b){let c={};if(a instanceof Headers)a.forEach((a,b)=>{c[b]=a});else if(a&&"object"==typeof a)for(let[b,d]of Object.entries(a))"string"==typeof d&&(c[b]=d);let d="string"==typeof b?b.trim():"";return!d||c["user-agent"]||c["User-Agent"]||(c["user-agent"]=d,c["User-Agent"]=d),Object.keys(c).length>0?c:null}async function aJ({body:a,modelInfo:b,credentials:d,log:ar,onCredentialsRefreshed:as,onRequestSuccess:at,onStreamFailure:au,onDisconnect:aK,clientRawRequest:aL,connectionId:aM,apiKeyInfo:aN=null,userAgent:aO,comboName:aP,comboStrategy:aQ=null,isCombo:aR=!1,comboStepId:aS=null,comboExecutionKey:aT=null,disableEmergencyFallback:aU=!1}){let aV,aW,aX,aY,aZ,a$,a_,{provider:a0,model:a1,extendedContext:a2}=b,a3="string"==typeof a?.model&&a.model.trim().length>0?a.model:a1,a4=Date.now(),a5=(a,b)=>{(0,A.sZ)({provider:a0||"unknown",model:a1||"unknown",tokens:{input:0,output:0,cacheRead:0,cacheCreation:0,reasoning:0},status:String(a),success:!1,latencyMs:Date.now()-a4,timeToFirstTokenMs:0,errorCode:b||String(a),timestamp:new Date().toISOString(),connectionId:aM||void 0,apiKeyId:aN?.id||void 0,apiKeyName:aN?.name||void 0}).catch(()=>{})},a6=async(a,b=0)=>{if("codex"===a0&&aM&&a)try{let c=(0,P.H5)(a);if(!c)return;let e=d?.providerSpecificData&&"object"==typeof d.providerSpecificData?d.providerSpecificData:{},f=(0,P.t6)(a1||a3||""),g={usage5h:c.usage5h,limit5h:c.limit5h,resetAt5h:c.resetAt5h,usage7d:c.usage7d,limit7d:c.limit7d,resetAt7d:c.resetAt7d,scope:f,updatedAt:new Date().toISOString()},h={...e,codexQuotaState:g};if(429===b){let{cooldownMs:a,window:b}=(0,P.kn)(c);if(a>0){let c=new Date(Date.now()+a).toISOString();h.codexScopeRateLimitedUntil={...e&&"object"==typeof e&&e.codexScopeRateLimitedUntil&&"object"==typeof e.codexScopeRateLimitedUntil?e.codexScopeRateLimitedUntil:{},[f]:c},h.codexExhaustedWindow=b,ar?.debug?.("CODEX",`Quota exhaustion on ${b} window, cooldown until ${c}`)}aM&&(0,Q.tg)(aM)}await (0,u.rj)(aM,{providerSpecificData:h}),d.providerSpecificData=h}catch(b){let a=b instanceof Error?b.message:String(b);ar?.debug?.("CODEX",`Failed to persist codex quota state: ${a}`)}},a7=(0,Z.xp)(aL?.headers),a8=(0,Z.ic)(a7);if(a8){ar?.debug?.("IDEMPOTENCY",`Hit for key=${a7?.slice(0,12)}...`);let a=a8.response&&"object"==typeof a8.response?a8.response.usage:void 0,b=a?await (0,D.yN)(a0,a1,a):0;return{success:!0,response:new Response(JSON.stringify(a8.response),{status:a8.status,headers:{"Content-Type":"application/json","X-OmniRoute-Idempotent":"true",...(0,E.lG)({provider:a0,model:a1,cacheHit:!1,latencyMs:Date.now()-a4,usage:a,costUsd:b})}})}}await (0,V.rh)(),aM&&d&&!d.connectionId&&(d.connectionId=aM);let a9=String(aL?.endpoint||""),ba=(0,e.a4)(a,a9),bb=/\/responses(?=\/|$)/i.test(a9)||/^responses(?=\/|$)/i.test(a9),bc=function({provider:a,sourceFormat:b,endpointPath:c}){if("codex"!==a||b!==g.h.OPENAI_RESPONSES)return!1;let d=String(c||"");for(;d.endsWith("/");)d=d.slice(0,-1);return d.split("/").includes("responses")}({provider:a0,sourceFormat:ba,endpointPath:a9}),bd=aO?.toLowerCase().includes("droid")||aO?.toLowerCase().includes("codex-cli"),be=ba!==g.h.OPENAI_RESPONSES||bb||bd?ba:g.h.OPENAI,bf=(0,z.c)(a,a1,aO);if(bf)return bf;let bg=(0,ac.T4)().enabled?(0,ac.ur)(a,aL?.headers):null;if(bg){let b=(0,ac.M4)(a1);if(b!==a1){let c=a1;ar?.info?.("BACKGROUND",`Background task redirect (${bg}): ${c} → ${b}`),a1=b,a&&"object"==typeof a&&(a.model=a1),(0,x.yI)({action:"routing.background_task_redirect",actor:aN?.name||"system",target:aM||a0||"chat",details:{original_model:c,redirected_to:b,reason:bg}})}}let bh=(0,p.kV)(a1),bi=bh!==a1?bh:a1;bh!==a1&&ar?.info?.("ALIAS",`Model alias applied: ${a1} → ${bh}`);let bj=n.PROVIDER_ID_TO_ALIAS[a0]||a0,bk=(0,n.ux)(bj,bh)||(0,e.jJ)(a0,d?.providerSpecificData),{body:bl,fallback:bm}=(0,ae.CS)(a,{provider:a0,sourceFormat:ba,targetFormat:bk,nativeCodexPassthrough:bc});bm.enabled&&(a=bl,ar?.info?.("TOOLS",`Converted ${bm.convertedToolCount} web_search tool(s) to OmniRoute fallback for ${a0}`));let bn=aN?.noLog===!0,bo=!bn&&await (0,v.N3)(),bp=bo&&(0,w.LY)(),bq=(0,ag.KZ)(),br=(aL?.headers&&"function"==typeof aL.headers.get?aL.headers.get("x-omniroute-session-id"):aB(aL?.headers??null,"x-omniroute-session-id"))||bq,bs=({status:b,tokens:c,responseBody:d,error:e,providerRequest:f,providerResponse:g,clientResponse:h,claudeCacheMeta:i,claudeCacheUsageMeta:j,cacheSource:k})=>{let l=(0,y.QM)(g,h,d);l.length>0&&(0,x.yI)({action:"provider.warning",actor:"system",target:[a0,aM].filter(Boolean).join(":")||a0||a1,resourceType:"provider_warning",status:"warning",requestId:bq,details:{provider:a0,model:a1,connectionId:aM,httpStatus:b,warnings:l}});let m=(0,ag.KZ)(),n=bo?bA?.getPipelinePayloads?.():null;n&&(void 0!==g&&(n.providerResponse=g),void 0!==h&&(n.clientResponse=h),e&&(n.error={..."object"==typeof n.error&&n.error?n.error:{},message:e})),(0,A.gK)({id:m,method:"POST",path:aL?.endpoint||"/v1/chat/completions",status:b,model:a1,requestedModel:a3,provider:a0,connectionId:aM,duration:Date.now()-a4,tokens:c||{},requestBody:av(aF(a??void 0,{claudePromptCache:i})),responseBody:av(aF(d??void 0,{claudePromptCache:i?{applied:i.applied,totalBreakpoints:i.totalBreakpoints,anthropicBeta:i.anthropicBeta}:null,claudePromptCacheUsage:j})),error:e||null,sourceFormat:ba,targetFormat:bk,comboName:aP,comboStepId:aS,comboExecutionKey:aT,cacheSource:"semantic"===k?"semantic":"upstream",apiKeyId:aN?.id||null,apiKeyName:aN?.name||null,noLog:bn,pipelinePayloads:n}).catch(()=>{})},bt=d?.providerSpecificData&&"object"==typeof d.providerSpecificData&&"string"==typeof d.providerSpecificData.customUserAgent?d.providerSpecificData.customUserAgent.trim():"",bu=a=>{let b,c=a===bi?{...(0,G.$nx)(a0||"",a1||"",ba),...(0,G.$nx)(a0||"",bh||"",ba)}:(b=(0,p.kV)(a),{...(0,G.$nx)(a0||"",a||"",ba),...(0,G.$nx)(a0||"",b||"",ba)});return bt&&(c["User-Agent"]=bt,"user-agent"in c&&(c["user-agent"]=bt)),c},bv=aL?.headers&&"function"==typeof aL.headers.get?aL.headers.get("accept")||aL.headers.get("Accept"):(aL?.headers||{}).accept||(aL?.headers||{}).Accept,bw=(0,af.nV)(a);if(a&&"object"==typeof a){let b=a;void 0!==bw&&(b.stream=bw),delete b.non_stream,delete b.disable_stream,delete b.disable_streaming,delete b.streaming}let bx=(0,af.ZA)(a?.stream,bv),by=await (0,M.getCachedSettings)();(0,aq.setGeminiThoughtSignatureMode)(by.antigravitySignatureCacheMode);let bz=!1!==by.semanticCacheEnabled,bA=await (0,m.q)(ba,bk,a1,{enabled:bo,captureStreamChunks:bp});if(aL&&bA.logClientRawRequest(aL.endpoint,aL.body,aL.headers),ar?.debug?.("FORMAT",`${ba} → ${bk} | stream=${bx}`),bz&&(0,Y.Ke)(a,aL?.headers)){let b=(0,Y.gR)(a1,a.messages??a.input,a.temperature,a.top_p),c=(0,Y.Cb)(b);if(c){ar?.debug?.("CACHE",`Semantic cache HIT for ${a1} (stream=${bx})`),bA.logConvertedResponse(c);let a=(0,S.M)(c,a0)||c?.usage,b=a?await (0,D.yN)(a0,a1,a):0;return bs({status:200,tokens:c?.usage,responseBody:c,providerRequest:null,providerResponse:null,clientResponse:c,cacheSource:"semantic"}),{success:!0,response:new Response(JSON.stringify(c),{headers:{"Content-Type":"application/json",[ao.I.cache]:"HIT",...(0,E.lG)({provider:a0,model:a1,cacheHit:!0,latencyMs:Date.now()-a4,usage:a,costUsd:b})}})}}}ba===g.h.OPENAI_RESPONSES||bk===g.h.OPENAI_RESPONSES?void 0===a.max_output_tokens&&(void 0!==a.max_completion_tokens?(a.max_output_tokens=a.max_completion_tokens,delete a.max_completion_tokens):void 0!==a.max_tokens&&(a.max_output_tokens=a.max_tokens,delete a.max_tokens)):void 0!==a.max_output_tokens&&(void 0===a.max_tokens&&(a.max_tokens=a.max_output_tokens),delete a.max_output_tokens),Array.isArray(a.messages)&&(a.messages=a.messages.map(a=>{if(""===a.name){let{name:b,...c}=a;return c}return a})),Array.isArray(a.input)&&(a.input=a.input.map(a=>{if(""===a.name){let{name:b,...c}=a;return c}return a})),Array.isArray(a.tools)&&(a.tools=a.tools.filter(a=>{let b="string"==typeof a.type?a.type:"";if(b&&"function"!==b&&!a.function&&void 0===a.name)return!0;let c=a.function,d=c?.name??a.name;return d&&String(d).trim().length>0}),a.tools=a.tools.map(a=>(0,O.U)(a)));let bB=(aV=aN?.id,"string"==typeof aV&&aV.trim().length>0?aV:null),bC=bB?await (0,al.pm)().catch(()=>al.wH):null;if(bB&&bC&&(0,aj.YX)(a,{enabled:bC.enabled&&bC.maxTokens>0}))try{let b=await (0,ak.G)(bB,(0,al.Ty)(bC));b.length>0&&(a=(0,aj.Xo)(a,b,a0),ar?.debug?.("MEMORY",`Injected ${b.length} memories for key=${bB}`))}catch(a){ar?.debug?.("MEMORY",`Memory injection skipped: ${a instanceof Error?a.message:String(a)}`)}if(bB&&bC?.skillsEnabled){let b=Array.isArray(a.tools)?a.tools:[],c=(0,am.Uk)({provider:function(a){switch(a){case g.h.CLAUDE:return"anthropic";case g.h.GEMINI:return"google";default:return"openai"}}(ba),existingTools:b,apiKeyId:bB,model:"string"==typeof bi?bi:void 0,sourceFormat:ba,targetFormat:bk,backgroundReason:bg,messages:Array.isArray(a.messages)?a.messages:Array.isArray(a.input)?a.input:void 0});c.length>b.length&&(a={...a,tools:c},ar?.debug?.("SKILLS",`Injected ${c.length-b.length} skills`))}let bD=a?.messages||a?.input||a?.contents||a?.request?.contents||[];if(a&&Array.isArray(bD)&&bD.length>0){let b=(0,ab.bP)(JSON.stringify(bD)),d=(0,ab.xb)(a0,bi);if(aR&&aP){ar?.info?.("CONTEXT",`Attempting to resolve combo limits for comboName=${aP}`);try{let{getComboByName:a}=await Promise.resolve().then(c.bind(c,33364)),{parseModel:b}=await Promise.resolve().then(c.bind(c,99939)),{resolveComboTargets:e}=await Promise.resolve().then(c.bind(c,59092)),f=await a(aP);if(!f&&aP.startsWith("combo/")&&(f=await a(aP.substring(6))),f){let a=await aG(),c=e(f,a).map(a=>{let c=b(a.modelStr);return(0,ab.xb)(c.provider,c.model)});c.length>0&&(d=Math.min(...c),ar?.info?.("CONTEXT",`Combo min limit: ${d}`))}}catch(a){ar?.warn?.("CONTEXT","Failed to resolve combo limits for compression: "+a)}}let e=0;Array.isArray(a.tools)&&(e=(0,ab.bP)(JSON.stringify(a.tools)));let f=Math.max(1,Math.floor((Math.max(1,d)-e)*.7));if(ar?.debug?.("CONTEXT",`Checking compression: ${b} tokens vs ${f} threshold (${d} limit, ${e} reserved)`),b>f){ar?.info?.("CONTEXT",`Proactive compression triggered: ${b} tokens > ${f} threshold (${d} limit)`);let c=(0,ab.qc)(a,{provider:a0,model:bi,maxTokens:f,reserveTokens:0});if(c.compressed){a=c.body;let b=c.stats,d=b&&"layers"in b&&Array.isArray(b.layers)?` (layers: ${b.layers.map(a=>a.name).join(", ")})`:"";ar?.info?.("CONTEXT",`Context compressed: ${b.original} → ${b.final} tokens${d}`),(0,x.yI)({action:"context.proactive_compression",actor:aN?.name||"system",target:aM||a0||"chat",details:{provider:a0,model:bi,original_tokens:b.original,final_tokens:b.final,layers:"layers"in b?b.layers:void 0}})}else ar?.debug?.("CONTEXT","Compression not applied: context already fits within target")}}else ar?.debug?.("CONTEXT",`Skipping compression check: body=${!!a}, hasMessages=${Array.isArray(bD)}`);let bE=a,bF=ba===g.h.CLAUDE&&bk===g.h.CLAUDE,bG=(0,ap.Xv)(a0),bH=bx||bG,bI=null,bJ=(0,o.T)(a0||"",a1||"");if(Array.isArray(bE?.messages)&&bJ.length>0){let a=(0,o.k)(bE.messages,bJ);a.removedParts>0&&(bE={...bE,messages:a.messages},ar?.warn?.("CONTENT",`Stripped ${a.removedParts} incompatible content part(s) for ${a0}/${a1}`))}let bK=await (0,I.$)().catch(()=>"auto"),bL=(0,L.jH)({userAgent:aO,isCombo:aR,comboStrategy:aQ,targetProvider:a0,targetFormat:bk,settings:{alwaysPreserveClientCache:bK}});bL&&ar?.debug?.("CACHE",`Preserving client cache_control (client=${aO?.substring(0,20)}, combo=${aR}, strategy=${aQ}, provider=${a0})`);let bM=(a,b)=>{let c=b?.preserveToolResultBlocks===!0;if(!Array.isArray(a.messages))return;let d=a.messages;for(let a of d)Array.isArray(a.content)&&(a.content=a.content.filter(a=>"text"!==a.type||"string"==typeof a.text&&a.text.length>0));for(let a of d)"user"===a.role&&Array.isArray(a.content)&&(a.content=a.content.flatMap(a=>{if("text"===a.type||"image_url"===a.type||"image"===a.type||"file_url"===a.type||"file"===a.type||"document"===a.type){let b=a.file_url??a.file??a.document;if(("file"===a.type||"document"===a.type)&&!b?.url&&!b?.data){let b=a.file?.content??a.file?.text??a.content??a.text,c=a.file?.name??a.name??"attachment";if("string"==typeof b&&b.length>0)return[{type:"text",text:`[${c}]
|
|
63
63
|
${b}`}]}return[a]}if("tool_result"===a.type){if(c)return[a];let b=a.tool_use_id??a.id??"unknown",d=a.content??a.text??a.output??"",e="string"==typeof d?d:Array.isArray(d)?d.filter(a=>"text"===a.type).map(a=>a.text).join("\n"):JSON.stringify(d);return e.length>0?[{type:"text",text:`[Tool Result: ${b}]
|
|
64
|
-
${e}`}]:[]}return ar?.debug?.("CONTENT",`Dropped unsupported content part type="${a.type}"`),[]}))};try{if(bc)bE={...a,_nativeCodexPassthrough:!0},ar?.debug?.("FORMAT","native codex passthrough enabled");else if(bG){let b={...a};if(ba!==g.h.OPENAI){let c=(0,G.QT7)(a0||"",a1||"",ba),e=(0,G.e87)(a0||"",a1||"",ba);b=(0,f.GH)(ba,g.h.OPENAI,a1,{...a},bx,d,a0,bA,{normalizeToolCallId:c,preserveDeveloperRole:e,preserveCacheControl:bL})}bI=(0,ap.L)(aL?.headers),bE=(0,ap.$Y)({sourceBody:a,normalizedBody:b,claudeBody:ba===g.h.CLAUDE?a:null,model:a1,stream:bH,sessionId:bI,cwd:process.cwd(),now:new Date,preserveCacheControl:bL}),ar?.debug?.("FORMAT","claude-code-compatible bridge enabled")}else if(bF)(bE={...a})._disableToolPrefix=!0,bM(bE,{preserveToolResultBlocks:!0}),ar?.debug?.("FORMAT",`claude passthrough (preserveCache=${bL})`);else{if(bE={...a},bk===g.h.CLAUDE&&(bE._disableToolPrefix=!0,bM(bE)),a0?.startsWith("openai-compatible-")&&Array.isArray(bE.tools)){let a=bE.tools.length;bE.tools=bE.tools.filter(a=>!a.type||"function"===a.type||!!a.function||!!a.name).map(a=>!a.type||"function"===a.type||a.function?a:{type:"function",function:{name:a.name,...void 0!==a.description?{description:a.description}:{},...void 0!==a.parameters||void 0!==a.input_schema?{parameters:a.parameters??a.input_schema??{}}:{},...void 0!==a.strict?{strict:a.strict}:{}}});let b=a-bE.tools.length;b>0&&ar?.debug?.("TOOLS",`Dropped ${b} unconvertible tool(s) for openai-compatible provider`)}let b=(0,G.QT7)(a0||"",a1||"",ba),c=(0,G.e87)(a0||"",a1||"",ba);bE=(0,f.GH)(ba,bk,a1,bE,bx,d,a0,bA,{normalizeToolCallId:b,preserveDeveloperRole:c,preserveCacheControl:bL})}}catch(e){let a=Number(e?.statusCode),b=Number.isInteger(a)&&a>=400&&a<=599?a:s.gx.SERVER_ERROR,c=e?.message||"Invalid request",d="string"==typeof e?.errorType?e.errorType:null;if(ar?.warn?.("TRANSLATE",`Request translation failed: ${c}`),d)return{success:!1,status:b,error:c,response:new Response(JSON.stringify({error:{message:c,type:d,code:d}}),{status:b,headers:{"Content-Type":"application/json"}})};return(0,r.A1)(b,c)}let bN=bE._toolNameMap,bO=bF?function(a){if(!a||!Array.isArray(a.tools))return null;let b=new Map;for(let c of a.tools){let a=c?.type==="function"&&c.function&&"object"==typeof c.function?c.function:c,d="string"==typeof a?.name?a.name.trim():"";d&&b.set(`${F.Zj}${d}`,d)}return b.size>0?b:null}(a):null,bP=bN instanceof Map&&bN.size>0?bN:bO;delete bE._toolNameMap,delete bE._disableToolPrefix;let bQ=bi;bQ.startsWith(`${a0}/`)?bQ=bQ.slice(a0.length+1):bj&&bQ.startsWith(`${bj}/`)&&(bQ=bQ.slice(bj.length+1)),bE.model=bQ;let bR=(0,q.Gk)(a0,a1);if(bR.length>0){let a=[];for(let b of bR)Object.hasOwn(bE,b)&&(a.push(b),delete bE[b]);a.length>0&&ar?.warn?.("PARAMS",`Stripped unsupported params for ${a1}: ${a.join(", ")}`)}let bS=s.Aj[a0];if(bS)for(let a of["max_tokens","max_completion_tokens"])"number"==typeof bE[a]&&bE[a]>bS&&(ar?.debug?.("PARAMS",`Capping ${a} from ${bE[a]} to ${bS} for ${a0}`),bE[a]=bS);let bT=async a=>{let b=await aH(a);if(!b.enabled||"native"===b.mode)return(0,H.SB)(a);if("cliproxyapi"===b.mode)return ar?.info?.("UPSTREAM_PROXY",`${a} routed through CLIProxyAPI (passthrough)`),(0,H.SB)("cliproxyapi");let c=(0,H.SB)(a),d=(0,H.SB)("cliproxyapi"),e=Object.create(c);return e.execute=async b=>{let e,f;try{e=await c.execute(b)}catch(e){let c=e instanceof Error?e.message:String(e);ar?.info?.("UPSTREAM_PROXY",`${a} native error (${c}), retrying via CLIProxyAPI`);try{return await d.execute(b)}catch(c){let b=c instanceof Error?c.message:String(c);throw ar?.error?.("UPSTREAM_PROXY",`${a} CLIProxyAPI fallback also failed: ${b}`),c}}if(!((f=e.response.status)>=500||429===f||0===f))return e;ar?.info?.("UPSTREAM_PROXY",`${a} native failed (${e.response.status}), retrying via CLIProxyAPI`);try{return await d.execute(b)}catch(c){let b=c instanceof Error?c.message:String(c);throw ar?.error?.("UPSTREAM_PROXY",`${a} CLIProxyAPI fallback also failed: ${b}`),c}},e},bU=await bT(a0),bV=()=>{let a=bc?{...d,requestEndpointPath:a9}:d;return bI?{...a,providerSpecificData:{...a?.providerSpecificData||{},ccSessionId:bI}}:a},bW=(0,j.jd)({onDisconnect:aK,log:ar,provider:a0,model:a1}),bX={...bE,model:`${a0}/${a1}`,stream:bx},bY=(0,aa.Gp)(bX),bZ=bY?(0,aa.nC)(bX):null,b$=async(a=bi,b=!1)=>{let e=async()=>{let b=bV(),e=function(a){var b=a?.maxConcurrent;if("number"==typeof b&&Number.isFinite(b))return b;if("string"==typeof b&&b.trim().length>0){let a=Number(b);return Number.isFinite(a)?a:null}return null}(b),f=aC({provider:a0,model:a,connectionId:aM,credentials:b}),i=bE.model===a?bE:{...bE,model:a},j="string"==typeof i.model&&i.model.length>0?i.model:a,k=(0,K.wu)({provider:a0,targetFormat:bk}),l=await (0,K.IQ)(i,j,k);if(i=l.payload,l.applied.length>0){let a=l.applied.map(a=>{if("filter"===a.type)return`${a.type}:${a.path}`;let b=JSON.stringify(a.value),c="string"==typeof b&&b.length>80?`${b.slice(0,77)}...`:b;return`${a.type}:${a.path}=${c}`}).join(", ");ar?.debug?.("PAYLOAD_RULES",`Applied ${l.applied.length} rule(s) for ${j} (${k.join(", ")}): ${a}`)}let m="string"==typeof i.user&&i.user.trim().length>0;if("qwen"!==a0||d?.apiKey||"string"!=typeof d?.accessToken||!(d.accessToken.trim().length>0)||m||(i={...i,user:"omniroute-qwen-oauth"},ar?.debug?.("QWEN","Injected fallback user for OAuth request")),bk===g.h.OPENAI&&(0,L.R6)(a0)&&!i.prompt_cache_key&&Array.isArray(i.messages)&&!["nvidia","codex","xai"].includes(a0)){let{generatePromptCacheKey:a}=await c.e(30121).then(c.bind(c,30121)),b=a(i.messages);b&&(i={...i,prompt_cache_key:b})}let n=f&&null!=e?await (0,W.XC)(f,{maxConcurrency:e}):()=>{};try{let c=await (0,V.YO)(a0,aM,a,async()=>{let c=0,d="qwen"===a0?3:1;for(;c<d;){let e=await bU.execute({model:a,body:i,stream:bH,credentials:b,signal:bW.signal,log:ar,extendedContext:a2,upstreamExtraHeaders:bu(a),clientHeaders:aI(aL?.headers,aO),onCredentialsRefreshed:as});if("qwen"===a0&&429===e.response.status&&c<d-1&&(await e.response.clone().text().catch(()=>"")).toLowerCase().includes("exceeded your current quota")){let a=1500*(c+1);ar?.warn?.("QWEN_RETRY",`Quota 429 hit. Retrying in ${a}ms...`),await new Promise(b=>setTimeout(b,a)),c++;continue}if(bx){let a=e.response.body;if(!a)return n(),e;return{...e,response:new Response(function(a,b){let c=a.getReader(),d=!1,e=()=>{d||(d=!0,b())};return new ReadableStream({async pull(a){try{let{done:b,value:d}=await c.read();if(b){e(),a.close();return}a.enqueue(d)}catch(b){e(),a.error(b)}},async cancel(a){try{await c.cancel(a)}finally{e()}}})}(a,n),{status:e.response.status,statusText:e.response.statusText,headers:e.response.headers})}}return e}});if(bx)return c;let d=c.response.status,e=c.response.statusText,f=Array.from(c.response.headers.entries()),g=await (0,h.sh)(c.response.text());return n(),{...c,response:new Response(g,{status:d,statusText:e,headers:f}),_dedupSnapshot:{status:d,statusText:e,headers:f,payload:g}}}catch(a){throw n(),a}};if(b&&bY&&bZ){var f;let a,b=await (0,aa.bu)(bZ,e);return b.wasDeduplicated&&ar?.debug?.("DEDUP",`Joined in-flight request hash=${bZ}`),(a=(f=b.result)&&"object"==typeof f?f._dedupSnapshot:void 0)?{...f,response:new Response(a.payload,{status:a.status,statusText:a.statusText,headers:a.headers})}:f}return e()};(0,A.uw)(a1,a0,aM,!0,{clientEndpoint:aL?.endpoint||"/v1/chat/completions",clientRequest:aL?.body??a});let b_=new Set([bi]),b0=bi;(0,A.E5)({model:a1,provider:a0,connectionId:aM,status:"PENDING"}).catch(()=>{});let b1=bE.messages?.length||bE.contents?.length||bE.request?.contents?.length||0;ar?.debug?.("REQUEST",`${a0.toUpperCase()} | ${a1} | ${b1} msgs`);let b2=null;try{let a=await b$(bi,!0);aW=a.response,aX=a.url,aY=a.headers,aZ=a.transformedBody,b2=function(a,b,c){if(a!==g.h.CLAUDE||!b||"object"!=typeof b)return null;let d=(a,b={})=>({type:a&&"string"==typeof a.type&&a.type.trim()?a.type.trim():"ephemeral",ttl:a&&"string"==typeof a.ttl&&a.ttl.trim()?a.ttl.trim():null,...b}),e=Array.isArray(b.system)?b.system.flatMap((a,b)=>{if(!a||"object"!=typeof a||("string"==typeof a.text&&a.text.trim().length>0?a.text.trim():"").startsWith("x-anthropic-billing-header:"))return[];let c=a.cache_control&&"object"==typeof a.cache_control?a.cache_control:null;return c?[d(c,{index:b})]:[]}):[],f=Array.isArray(b.tools)?b.tools.flatMap((a,b)=>{if(!a||"object"!=typeof a)return[];let c=a.cache_control&&"object"==typeof a.cache_control?a.cache_control:null,e="string"==typeof a.name&&a.name.trim()?a.name.trim():null;return c?[d(c,{index:b,name:e})]:[]}):[],h=Array.isArray(b.messages)?b.messages.flatMap((a,b)=>{if(!a||"object"!=typeof a||!Array.isArray(a.content))return[];let c="string"==typeof a.role&&a.role.trim()?a.role.trim():"unknown";return a.content.flatMap((a,e)=>{if(!a||"object"!=typeof a)return[];let f=a.cache_control&&"object"==typeof a.cache_control?a.cache_control:null;return f?[d(f,{messageIndex:b,contentIndex:e,role:c,blockType:"string"==typeof a.type&&a.type.trim()?a.type.trim():"unknown"})]:[]})}):[],i=e.length+f.length+h.length,j=aB(c,"Anthropic-Beta");return 0!==i||j?{applied:i>0,totalBreakpoints:i,anthropicBeta:j,systemBreakpoints:e,toolBreakpoints:f,messageBreakpoints:h}:null}(bk,aZ,aY),bA.logTargetRequest(aX,aY,aZ),(0,A.mw)(a1,a0,aM,{providerRequest:aZ,providerUrl:aX}),(0,V.Kr)(a0,aM,aW.headers,aW.status,a1)}catch(c){if((0,A.uw)(a1,a0,aM,!1),c&&"object"==typeof c&&"SEMAPHORE_TIMEOUT"===c.code){if((0,A.E5)({model:a1,provider:a0,connectionId:aM,status:`FAILED ${c.code}`}).catch(()=>{}),aR)throw c;let a=c.message||"Semaphore timeout";return bs({status:s.gx.RATE_LIMITED,error:a,providerRequest:aZ||bE,clientResponse:(0,r.xJ)(s.gx.RATE_LIMITED,a),claudeCacheMeta:b2,cacheSource:"upstream"}),a5(s.gx.RATE_LIMITED,c.code),(0,r.A1)(s.gx.RATE_LIMITED,a)}let a="AbortError"===c.name?499:"TimeoutError"===c.name||"BodyTimeoutError"===c.name?s.gx.GATEWAY_TIMEOUT:s.gx.BAD_GATEWAY,b="AbortError"===c.name?"Request aborted":(0,r.lR)(c,a0,a1,a);if((0,A.E5)({model:a1,provider:a0,connectionId:aM,status:`FAILED ${a}`}).catch(()=>{}),bs({status:a,error:b,providerRequest:aZ||bE,clientResponse:(0,r.xJ)(a,b),claudeCacheMeta:b2,cacheSource:"upstream"}),"AbortError"===c.name)return bW.handleError(c),(0,r.A1)(499,"Request aborted");return a5(a,c instanceof Error&&c.name?c.name:"upstream_error"),console.log(`${h.lm.red}[ERROR] ${b}${h.lm.reset}`),(0,r.A1)(a,b)}let b3=!1,b4=aW.status,b5="",b6=null,b7=null;if("qwen"===a0&&aW.status===s.gx.BAD_REQUEST){let a=await (0,r.zL)(aW,a0);b4=a.statusCode,b5=a.message,b6=a.retryAfterMs,b7=a.responseBody,b3=!0}let b8="qwen"===a0&&b4===s.gx.BAD_REQUEST&&b5&&b5.toLowerCase().includes("session has expired");if((aW.status===s.gx.UNAUTHORIZED||aW.status===s.gx.FORBIDDEN||b8)&&1){let a=await (0,l.qZ)(()=>bU.refreshCredentials(d,ar),3,ar,a0);if(a?.accessToken||a?.copilotToken){ar?.info?.("TOKEN",`${a0.toUpperCase()} | refreshed`),Object.assign(d,a),as&&a&&await as(a);try{let a=String(bE.model||bi),b=await bU.execute({model:a,body:bE,stream:bH,credentials:bV(),signal:bW.signal,log:ar,extendedContext:a2,upstreamExtraHeaders:bu(a),clientHeaders:aI(aL?.headers,aO),onCredentialsRefreshed:as});b.response.ok?(aW=b.response,aX=b.url,aY=b.headers,aZ=b.transformedBody,bA.logTargetRequest(aX,aY,aZ),(0,A.mw)(a1,a0,aM,{providerRequest:aZ,providerUrl:aX})):aW=b.response,b3=!1}catch{ar?.warn?.("TOKEN",`${a0.toUpperCase()} | retry after refresh failed`)}}else ar?.warn?.("TOKEN",`${a0.toUpperCase()} | refresh failed`)}if(await a6(aW.headers,aW.status),!aW.ok){(0,A.uw)(a1,a0,aM,!1);let a=aW.status,b="",c=null;if(b3)a=b4,b=b5,c=b6;else{let d=await (0,r.zL)(aW,a0);a=d.statusCode,b=d.message,c=d.retryAfterMs,b7=d.responseBody}let e=(0,t.Gm)(a,b,a0);if(aM&&e)try{if(e===t.hr.FORBIDDEN)await (0,u.rj)(aM,{isActive:!1,testStatus:"banned",lastErrorType:e,lastError:b,errorCode:a}),console.warn(`[provider] Node ${aM} banned (${a}) — disabling permanently`);else if(e===t.hr.ACCOUNT_DEACTIVATED)await (0,u.rj)(aM,{isActive:!1,testStatus:"deactivated",lastErrorType:e,lastError:b,errorCode:a}),console.warn(`[provider] Node ${aM} account deactivated (${a}) — disabling permanently`);else if(e===t.hr.QUOTA_EXHAUSTED){let f=c||s.Bm.rateLimit,g=aC({provider:a0,model:b0,connectionId:aM,credentials:d});g&&(0,W.wl)(g,f),(0,X.CY)(a0,aM,a1,"quota_exhausted",f)?console.warn(`[provider] Node ${aM} model-only quota exhausted (${a}) for ${a1} - ${Math.ceil(f/1e3)}s (connection stays active)`):(await (0,u.rj)(aM,{testStatus:"credits_exhausted",lastErrorType:e,lastError:b,errorCode:a}),console.warn(`[provider] Node ${aM} exhausted quota (${a})`))}else e===t.hr.ACCOUNT_DEACTIVATED?(await (0,u.rj)(aM,{isActive:!1,testStatus:"expired",lastErrorType:e,lastError:b,errorCode:a}),console.warn(`[provider] Node ${aM} account deactivated (${a}) — marked expired`)):e===t.hr.UNAUTHORIZED?await (0,u.rj)(aM,{lastErrorType:e,lastError:b,errorCode:a}):e===t.hr.OAUTH_INVALID_TOKEN?(await (0,u.rj)(aM,{lastErrorType:e,lastError:b,errorCode:a}),console.warn(`[provider] Node ${aM} OAuth token invalid (${a}) — token refresh available`)):e===t.hr.PROJECT_ROUTE_ERROR&&(await (0,u.rj)(aM,{lastErrorType:e,lastError:b,errorCode:a}),console.warn(`[provider] Node ${aM} project routing error (${a}) — not banning`))}catch{}(0,A.E5)({model:a1,provider:a0,connectionId:aM,status:`FAILED ${a}`}).catch(()=>{});let f=(0,r.lR)(Error(b),a0,a1,a);if(console.log(`${h.lm.red}[ERROR] ${f}${h.lm.reset}`),c&&"antigravity"===a0){let a=Math.ceil(c/1e3);ar?.debug?.("RETRY",`Antigravity quota reset in ${a}s (${c}ms)`)}if(bA.logError(Error(b),aZ||bE),bA.logProviderResponse(aW.status,aW.statusText,aW.headers,b7),(0,V.Kr)(a0,aM,aW.headers,a,a1),aM&&null!=b7&&(0,V.ph)(a0,aM,b7,a,a1),(0,_.I2)(a,b)){let b=(0,_.ec)(b0,b_);if(!b)return bs({status:a,error:f,providerRequest:aZ||bE,providerResponse:b7,clientResponse:(0,r.xJ)(a,f),cacheSource:"upstream"}),a5(a,"model_unavailable"),(0,r.A1)(a,f,c);b_.add(b),b0=b,bE.model=b,ar?.info?.("MODEL_FALLBACK",`${a1} unavailable (${a}) → trying ${b}`);try{let d=await b$(b,!1);if(!d.response.ok)return bs({status:a,error:f,providerRequest:aZ||bE,providerResponse:b7,clientResponse:(0,r.xJ)(a,f),cacheSource:"upstream"}),a5(a,"model_unavailable"),(0,r.A1)(a,f,c);aW=d.response,aX=d.url,aY=d.headers,aZ=d.transformedBody,bA.logTargetRequest(aX,aY,aZ),ar?.info?.("MODEL_FALLBACK",`Serving ${b} as fallback for ${a1}`)}catch{return bs({status:a,error:f,providerRequest:aZ||bE,providerResponse:b7,clientResponse:(0,r.xJ)(a,f),cacheSource:"upstream"}),a5(a,"model_unavailable"),(0,r.A1)(a,f,c)}}else if((0,_.A$)(a,b)){let b=(0,_.mu)(b0).filter(a=>a!==b0&&!b_.has(a)),d=(0,_.BO)(b0,b)??(0,_.ec)(b0,b_);if(!d)return bs({status:a,error:f,providerRequest:aZ||bE,providerResponse:b7,clientResponse:(0,r.xJ)(a,f),cacheSource:"upstream"}),a5(a,"context_overflow"),(0,r.A1)(a,f,c);b_.add(d),b0=d,bE.model=d,ar?.info?.("CONTEXT_OVERFLOW_FALLBACK",`${a1} context overflow → trying ${d}`);try{let b=await b$(d,!1);if(!b.response.ok)return bs({status:a,error:f,providerRequest:aZ||bE,providerResponse:b7,clientResponse:(0,r.xJ)(a,f),cacheSource:"upstream"}),a5(a,"context_overflow"),(0,r.A1)(a,f,c);aW=b.response,aX=b.url,aY=b.headers,aZ=b.transformedBody,bA.logTargetRequest(aX,aY,aZ),ar?.info?.("CONTEXT_OVERFLOW_FALLBACK",`Serving ${d} as fallback for ${a1}`)}catch{return bs({status:a,error:f,providerRequest:aZ||bE,providerResponse:b7,clientResponse:(0,r.xJ)(a,f),cacheSource:"upstream"}),a5(a,"context_overflow"),(0,r.A1)(a,f,c)}}else{bs({status:a,error:f,providerRequest:aZ||bE,providerResponse:b7,clientResponse:(0,r.xJ)(a,f),cacheSource:"upstream"}),a5(a,`upstream_${a}`);let e=Array.isArray(bE.tools)&&bE.tools.length>0,g=!1;if(!aU&&!bx){let c=(0,ad.fU)(a,b,e,ad.sr);if((0,ad.Z4)(c)){ar?.info?.("EMERGENCY_FALLBACK",c.reason);try{let a=a0,b=(0,H.SB)(c.provider),e=await b.execute({model:c.model,body:{...bE,model:c.model,max_tokens:Math.min("number"==typeof bE.max_tokens?bE.max_tokens:c.maxOutputTokens,c.maxOutputTokens),max_completion_tokens:Math.min("number"==typeof bE.max_completion_tokens?bE.max_completion_tokens:"number"==typeof bE.max_tokens?bE.max_tokens:c.maxOutputTokens,c.maxOutputTokens)},stream:!1,credentials:d,signal:bW.signal,log:ar,extendedContext:a2});e.response.ok?(a0=c.provider,a1=c.model,bE.model=c.model,aW=e.response,aX=e.url,aY=e.headers,aZ=e.transformedBody,bA.logTargetRequest(aX,aY,aZ),ar?.info?.("EMERGENCY_FALLBACK",`Serving ${c.provider}/${c.model} as budget fallback for ${a}/${a3}`),g=!0):ar?.warn?.("EMERGENCY_FALLBACK",`Emergency fallback also failed (${e.response.status})`)}catch(b){let a=b instanceof Error?b.message:String(b);ar?.warn?.("EMERGENCY_FALLBACK",`Emergency fallback error: ${a}`)}}}if(!g)return(0,r.A1)(a,f,c)}}if(!bx){let b;(0,A.uw)(a1,a0,aM,!1);let c=(aW.headers.get("content-type")||"").toLowerCase(),e=bk,i=await (0,h.sh)(aW.text()),j=(0,ah.xm)(i),l=c.includes("text/event-stream")||c.includes("application/x-ndjson")||/(^|\n)\s*(event|data):/m.test(i);if(l){let a=function(a,b){if(b.includes("application/x-ndjson")){let b;return b=String(a||"").split(/\r?\n/).map(a=>a.trim()).filter(a=>a.length>0),0===b.length?a:`${b.map(a=>`data: ${a}
|
|
64
|
+
${e}`}]:[]}return ar?.debug?.("CONTENT",`Dropped unsupported content part type="${a.type}"`),[]}))};try{if(bc)bE={...a,_nativeCodexPassthrough:!0},ar?.debug?.("FORMAT","native codex passthrough enabled");else if(bG){let b={...a};if(ba!==g.h.OPENAI){let c=(0,G.QT7)(a0||"",a1||"",ba),e=(0,G.e87)(a0||"",a1||"",ba);b=(0,f.GH)(ba,g.h.OPENAI,a1,{...a},bx,d,a0,bA,{normalizeToolCallId:c,preserveDeveloperRole:e,preserveCacheControl:bL})}bI=(0,ap.L)(aL?.headers),bE=(0,ap.$Y)({sourceBody:a,normalizedBody:b,claudeBody:ba===g.h.CLAUDE?a:null,model:a1,stream:bH,sessionId:bI,cwd:process.cwd(),now:new Date,preserveCacheControl:bL}),ar?.debug?.("FORMAT","claude-code-compatible bridge enabled")}else if(bF){if((bE={...a})._disableToolPrefix=!0,bM(bE,{preserveToolResultBlocks:!0}),ar?.debug?.("FORMAT",`claude passthrough (preserveCache=${bL})`),"claude"!==a0&&bE.output_config&&"object"==typeof bE.output_config){let a=bE.output_config;delete a.format,0===Object.keys(a).length&&delete bE.output_config}}else{if(bE={...a},bk===g.h.CLAUDE&&(bE._disableToolPrefix=!0,bM(bE)),a0?.startsWith("openai-compatible-")&&Array.isArray(bE.tools)){let a=bE.tools.length;bE.tools=bE.tools.filter(a=>!a.type||"function"===a.type||!!a.function||!!a.name).map(a=>!a.type||"function"===a.type||a.function?a:{type:"function",function:{name:a.name,...void 0!==a.description?{description:a.description}:{},...void 0!==a.parameters||void 0!==a.input_schema?{parameters:a.parameters??a.input_schema??{}}:{},...void 0!==a.strict?{strict:a.strict}:{}}});let b=a-bE.tools.length;b>0&&ar?.debug?.("TOOLS",`Dropped ${b} unconvertible tool(s) for openai-compatible provider`)}let b=(0,G.QT7)(a0||"",a1||"",ba),c=(0,G.e87)(a0||"",a1||"",ba);bE=(0,f.GH)(ba,bk,a1,bE,bx,d,a0,bA,{normalizeToolCallId:b,preserveDeveloperRole:c,preserveCacheControl:bL})}}catch(e){let a=Number(e?.statusCode),b=Number.isInteger(a)&&a>=400&&a<=599?a:s.gx.SERVER_ERROR,c=e?.message||"Invalid request",d="string"==typeof e?.errorType?e.errorType:null;if(ar?.warn?.("TRANSLATE",`Request translation failed: ${c}`),d)return{success:!1,status:b,error:c,response:new Response(JSON.stringify({error:{message:c,type:d,code:d}}),{status:b,headers:{"Content-Type":"application/json"}})};return(0,r.A1)(b,c)}let bN=bE._toolNameMap,bO=bF?function(a){if(!a||!Array.isArray(a.tools))return null;let b=new Map;for(let c of a.tools){let a=c?.type==="function"&&c.function&&"object"==typeof c.function?c.function:c,d="string"==typeof a?.name?a.name.trim():"";d&&b.set(`${F.Zj}${d}`,d)}return b.size>0?b:null}(a):null,bP=bN instanceof Map&&bN.size>0?bN:bO;delete bE._toolNameMap,delete bE._disableToolPrefix;let bQ=bi;bQ.startsWith(`${a0}/`)?bQ=bQ.slice(a0.length+1):bj&&bQ.startsWith(`${bj}/`)&&(bQ=bQ.slice(bj.length+1)),bE.model=bQ;let bR=(0,q.Gk)(a0,a1);if(bR.length>0){let a=[];for(let b of bR)Object.hasOwn(bE,b)&&(a.push(b),delete bE[b]);a.length>0&&ar?.warn?.("PARAMS",`Stripped unsupported params for ${a1}: ${a.join(", ")}`)}let bS=s.Aj[a0];if(bS)for(let a of["max_tokens","max_completion_tokens"])"number"==typeof bE[a]&&bE[a]>bS&&(ar?.debug?.("PARAMS",`Capping ${a} from ${bE[a]} to ${bS} for ${a0}`),bE[a]=bS);let bT=async a=>{let b=await aH(a);if(!b.enabled||"native"===b.mode)return(0,H.SB)(a);if("cliproxyapi"===b.mode)return ar?.info?.("UPSTREAM_PROXY",`${a} routed through CLIProxyAPI (passthrough)`),(0,H.SB)("cliproxyapi");let c=(0,H.SB)(a),d=(0,H.SB)("cliproxyapi"),e=Object.create(c);return e.execute=async b=>{let e,f;try{e=await c.execute(b)}catch(e){let c=e instanceof Error?e.message:String(e);ar?.info?.("UPSTREAM_PROXY",`${a} native error (${c}), retrying via CLIProxyAPI`);try{return await d.execute(b)}catch(c){let b=c instanceof Error?c.message:String(c);throw ar?.error?.("UPSTREAM_PROXY",`${a} CLIProxyAPI fallback also failed: ${b}`),c}}if(!((f=e.response.status)>=500||429===f||0===f))return e;ar?.info?.("UPSTREAM_PROXY",`${a} native failed (${e.response.status}), retrying via CLIProxyAPI`);try{return await d.execute(b)}catch(c){let b=c instanceof Error?c.message:String(c);throw ar?.error?.("UPSTREAM_PROXY",`${a} CLIProxyAPI fallback also failed: ${b}`),c}},e},bU=await bT(a0),bV=()=>{let a=bc?{...d,requestEndpointPath:a9}:d;return bI?{...a,providerSpecificData:{...a?.providerSpecificData||{},ccSessionId:bI}}:a},bW=(0,j.jd)({onDisconnect:aK,log:ar,provider:a0,model:a1}),bX={...bE,model:`${a0}/${a1}`,stream:bx},bY=(0,aa.Gp)(bX),bZ=bY?(0,aa.nC)(bX):null,b$=async(a=bi,b=!1)=>{let e=async()=>{let b=bV(),e=function(a){var b=a?.maxConcurrent;if("number"==typeof b&&Number.isFinite(b))return b;if("string"==typeof b&&b.trim().length>0){let a=Number(b);return Number.isFinite(a)?a:null}return null}(b),f=aC({provider:a0,model:a,connectionId:aM,credentials:b}),i=bE.model===a?bE:{...bE,model:a},j="string"==typeof i.model&&i.model.length>0?i.model:a,k=(0,K.wu)({provider:a0,targetFormat:bk}),l=await (0,K.IQ)(i,j,k);if(i=l.payload,l.applied.length>0){let a=l.applied.map(a=>{if("filter"===a.type)return`${a.type}:${a.path}`;let b=JSON.stringify(a.value),c="string"==typeof b&&b.length>80?`${b.slice(0,77)}...`:b;return`${a.type}:${a.path}=${c}`}).join(", ");ar?.debug?.("PAYLOAD_RULES",`Applied ${l.applied.length} rule(s) for ${j} (${k.join(", ")}): ${a}`)}let m="string"==typeof i.user&&i.user.trim().length>0;if("qwen"!==a0||d?.apiKey||"string"!=typeof d?.accessToken||!(d.accessToken.trim().length>0)||m||(i={...i,user:"omniroute-qwen-oauth"},ar?.debug?.("QWEN","Injected fallback user for OAuth request")),bk===g.h.OPENAI&&(0,L.R6)(a0)&&!i.prompt_cache_key&&Array.isArray(i.messages)&&!["nvidia","codex","xai"].includes(a0)){let{generatePromptCacheKey:a}=await c.e(30121).then(c.bind(c,30121)),b=a(i.messages);b&&(i={...i,prompt_cache_key:b})}let n=f&&null!=e?await (0,W.XC)(f,{maxConcurrency:e}):()=>{};try{let c=await (0,V.YO)(a0,aM,a,async()=>{let c=0,d="qwen"===a0?3:1;for(;c<d;){let e=await bU.execute({model:a,body:i,stream:bH,credentials:b,signal:bW.signal,log:ar,extendedContext:a2,upstreamExtraHeaders:bu(a),clientHeaders:aI(aL?.headers,aO),onCredentialsRefreshed:as});if("qwen"===a0&&429===e.response.status&&c<d-1&&(await e.response.clone().text().catch(()=>"")).toLowerCase().includes("exceeded your current quota")){let a=1500*(c+1);ar?.warn?.("QWEN_RETRY",`Quota 429 hit. Retrying in ${a}ms...`),await new Promise(b=>setTimeout(b,a)),c++;continue}if(bx){let a=e.response.body;if(!a)return n(),e;return{...e,response:new Response(function(a,b){let c=a.getReader(),d=!1,e=()=>{d||(d=!0,b())};return new ReadableStream({async pull(a){try{let{done:b,value:d}=await c.read();if(b){e(),a.close();return}a.enqueue(d)}catch(b){e(),a.error(b)}},async cancel(a){try{await c.cancel(a)}finally{e()}}})}(a,n),{status:e.response.status,statusText:e.response.statusText,headers:e.response.headers})}}return e}});if(bx)return c;let d=c.response.status,e=c.response.statusText,f=Array.from(c.response.headers.entries()),g=await (0,h.sh)(c.response.text());return n(),{...c,response:new Response(g,{status:d,statusText:e,headers:f}),_dedupSnapshot:{status:d,statusText:e,headers:f,payload:g}}}catch(a){throw n(),a}};if(b&&bY&&bZ){var f;let a,b=await (0,aa.bu)(bZ,e);return b.wasDeduplicated&&ar?.debug?.("DEDUP",`Joined in-flight request hash=${bZ}`),(a=(f=b.result)&&"object"==typeof f?f._dedupSnapshot:void 0)?{...f,response:new Response(a.payload,{status:a.status,statusText:a.statusText,headers:a.headers})}:f}return e()};(0,A.uw)(a1,a0,aM,!0,{clientEndpoint:aL?.endpoint||"/v1/chat/completions",clientRequest:aL?.body??a});let b_=new Set([bi]),b0=bi;(0,A.E5)({model:a1,provider:a0,connectionId:aM,status:"PENDING"}).catch(()=>{});let b1=bE.messages?.length||bE.contents?.length||bE.request?.contents?.length||0;ar?.debug?.("REQUEST",`${a0.toUpperCase()} | ${a1} | ${b1} msgs`);let b2=null;try{let a=await b$(bi,!0);aW=a.response,aX=a.url,aY=a.headers,aZ=a.transformedBody,b2=function(a,b,c){if(a!==g.h.CLAUDE||!b||"object"!=typeof b)return null;let d=(a,b={})=>({type:a&&"string"==typeof a.type&&a.type.trim()?a.type.trim():"ephemeral",ttl:a&&"string"==typeof a.ttl&&a.ttl.trim()?a.ttl.trim():null,...b}),e=Array.isArray(b.system)?b.system.flatMap((a,b)=>{if(!a||"object"!=typeof a||("string"==typeof a.text&&a.text.trim().length>0?a.text.trim():"").startsWith("x-anthropic-billing-header:"))return[];let c=a.cache_control&&"object"==typeof a.cache_control?a.cache_control:null;return c?[d(c,{index:b})]:[]}):[],f=Array.isArray(b.tools)?b.tools.flatMap((a,b)=>{if(!a||"object"!=typeof a)return[];let c=a.cache_control&&"object"==typeof a.cache_control?a.cache_control:null,e="string"==typeof a.name&&a.name.trim()?a.name.trim():null;return c?[d(c,{index:b,name:e})]:[]}):[],h=Array.isArray(b.messages)?b.messages.flatMap((a,b)=>{if(!a||"object"!=typeof a||!Array.isArray(a.content))return[];let c="string"==typeof a.role&&a.role.trim()?a.role.trim():"unknown";return a.content.flatMap((a,e)=>{if(!a||"object"!=typeof a)return[];let f=a.cache_control&&"object"==typeof a.cache_control?a.cache_control:null;return f?[d(f,{messageIndex:b,contentIndex:e,role:c,blockType:"string"==typeof a.type&&a.type.trim()?a.type.trim():"unknown"})]:[]})}):[],i=e.length+f.length+h.length,j=aB(c,"Anthropic-Beta");return 0!==i||j?{applied:i>0,totalBreakpoints:i,anthropicBeta:j,systemBreakpoints:e,toolBreakpoints:f,messageBreakpoints:h}:null}(bk,aZ,aY),bA.logTargetRequest(aX,aY,aZ),(0,A.mw)(a1,a0,aM,{providerRequest:aZ,providerUrl:aX}),(0,V.Kr)(a0,aM,aW.headers,aW.status,a1)}catch(c){if((0,A.uw)(a1,a0,aM,!1),c&&"object"==typeof c&&"SEMAPHORE_TIMEOUT"===c.code){if((0,A.E5)({model:a1,provider:a0,connectionId:aM,status:`FAILED ${c.code}`}).catch(()=>{}),aR)throw c;let a=c.message||"Semaphore timeout";return bs({status:s.gx.RATE_LIMITED,error:a,providerRequest:aZ||bE,clientResponse:(0,r.xJ)(s.gx.RATE_LIMITED,a),claudeCacheMeta:b2,cacheSource:"upstream"}),a5(s.gx.RATE_LIMITED,c.code),(0,r.A1)(s.gx.RATE_LIMITED,a)}let a="AbortError"===c.name?499:"TimeoutError"===c.name||"BodyTimeoutError"===c.name?s.gx.GATEWAY_TIMEOUT:s.gx.BAD_GATEWAY,b="AbortError"===c.name?"Request aborted":(0,r.lR)(c,a0,a1,a);if((0,A.E5)({model:a1,provider:a0,connectionId:aM,status:`FAILED ${a}`}).catch(()=>{}),bs({status:a,error:b,providerRequest:aZ||bE,clientResponse:(0,r.xJ)(a,b),claudeCacheMeta:b2,cacheSource:"upstream"}),"AbortError"===c.name)return bW.handleError(c),(0,r.A1)(499,"Request aborted");return a5(a,c instanceof Error&&c.name?c.name:"upstream_error"),console.log(`${h.lm.red}[ERROR] ${b}${h.lm.reset}`),(0,r.A1)(a,b)}let b3=!1,b4=aW.status,b5="",b6=null,b7=null;if("qwen"===a0&&aW.status===s.gx.BAD_REQUEST){let a=await (0,r.zL)(aW,a0);b4=a.statusCode,b5=a.message,b6=a.retryAfterMs,b7=a.responseBody,b3=!0}let b8="qwen"===a0&&b4===s.gx.BAD_REQUEST&&b5&&b5.toLowerCase().includes("session has expired");if((aW.status===s.gx.UNAUTHORIZED||aW.status===s.gx.FORBIDDEN||b8)&&1){let a=await (0,l.qZ)(()=>bU.refreshCredentials(d,ar),3,ar,a0);if(a?.accessToken||a?.copilotToken){ar?.info?.("TOKEN",`${a0.toUpperCase()} | refreshed`),Object.assign(d,a),as&&a&&await as(a);try{let a=String(bE.model||bi),b=await bU.execute({model:a,body:bE,stream:bH,credentials:bV(),signal:bW.signal,log:ar,extendedContext:a2,upstreamExtraHeaders:bu(a),clientHeaders:aI(aL?.headers,aO),onCredentialsRefreshed:as});b.response.ok?(aW=b.response,aX=b.url,aY=b.headers,aZ=b.transformedBody,bA.logTargetRequest(aX,aY,aZ),(0,A.mw)(a1,a0,aM,{providerRequest:aZ,providerUrl:aX})):aW=b.response,b3=!1}catch{ar?.warn?.("TOKEN",`${a0.toUpperCase()} | retry after refresh failed`)}}else ar?.warn?.("TOKEN",`${a0.toUpperCase()} | refresh failed`)}if(await a6(aW.headers,aW.status),!aW.ok){(0,A.uw)(a1,a0,aM,!1);let a=aW.status,b="",c=null;if(b3)a=b4,b=b5,c=b6;else{let d=await (0,r.zL)(aW,a0);a=d.statusCode,b=d.message,c=d.retryAfterMs,b7=d.responseBody}let e=(0,t.Gm)(a,b,a0);if(aM&&e)try{if(e===t.hr.FORBIDDEN)await (0,u.rj)(aM,{isActive:!1,testStatus:"banned",lastErrorType:e,lastError:b,errorCode:a}),console.warn(`[provider] Node ${aM} banned (${a}) — disabling permanently`);else if(e===t.hr.ACCOUNT_DEACTIVATED)await (0,u.rj)(aM,{isActive:!1,testStatus:"deactivated",lastErrorType:e,lastError:b,errorCode:a}),console.warn(`[provider] Node ${aM} account deactivated (${a}) — disabling permanently`);else if(e===t.hr.QUOTA_EXHAUSTED){let f=c||s.Bm.rateLimit,g=aC({provider:a0,model:b0,connectionId:aM,credentials:d});g&&(0,W.wl)(g,f),(0,X.CY)(a0,aM,a1,"quota_exhausted",f)?console.warn(`[provider] Node ${aM} model-only quota exhausted (${a}) for ${a1} - ${Math.ceil(f/1e3)}s (connection stays active)`):(await (0,u.rj)(aM,{testStatus:"credits_exhausted",lastErrorType:e,lastError:b,errorCode:a}),console.warn(`[provider] Node ${aM} exhausted quota (${a})`))}else e===t.hr.ACCOUNT_DEACTIVATED?(await (0,u.rj)(aM,{isActive:!1,testStatus:"expired",lastErrorType:e,lastError:b,errorCode:a}),console.warn(`[provider] Node ${aM} account deactivated (${a}) — marked expired`)):e===t.hr.UNAUTHORIZED?await (0,u.rj)(aM,{lastErrorType:e,lastError:b,errorCode:a}):e===t.hr.OAUTH_INVALID_TOKEN?(await (0,u.rj)(aM,{lastErrorType:e,lastError:b,errorCode:a}),console.warn(`[provider] Node ${aM} OAuth token invalid (${a}) — token refresh available`)):e===t.hr.PROJECT_ROUTE_ERROR&&(await (0,u.rj)(aM,{lastErrorType:e,lastError:b,errorCode:a}),console.warn(`[provider] Node ${aM} project routing error (${a}) — not banning`))}catch{}(0,A.E5)({model:a1,provider:a0,connectionId:aM,status:`FAILED ${a}`}).catch(()=>{});let f=(0,r.lR)(Error(b),a0,a1,a);if(console.log(`${h.lm.red}[ERROR] ${f}${h.lm.reset}`),c&&"antigravity"===a0){let a=Math.ceil(c/1e3);ar?.debug?.("RETRY",`Antigravity quota reset in ${a}s (${c}ms)`)}if(bA.logError(Error(b),aZ||bE),bA.logProviderResponse(aW.status,aW.statusText,aW.headers,b7),(0,V.Kr)(a0,aM,aW.headers,a,a1),aM&&null!=b7&&(0,V.ph)(a0,aM,b7,a,a1),(0,_.I2)(a,b)){let b=(0,_.ec)(b0,b_);if(!b)return bs({status:a,error:f,providerRequest:aZ||bE,providerResponse:b7,clientResponse:(0,r.xJ)(a,f),cacheSource:"upstream"}),a5(a,"model_unavailable"),(0,r.A1)(a,f,c);b_.add(b),b0=b,bE.model=b,ar?.info?.("MODEL_FALLBACK",`${a1} unavailable (${a}) → trying ${b}`);try{let d=await b$(b,!1);if(!d.response.ok)return bs({status:a,error:f,providerRequest:aZ||bE,providerResponse:b7,clientResponse:(0,r.xJ)(a,f),cacheSource:"upstream"}),a5(a,"model_unavailable"),(0,r.A1)(a,f,c);aW=d.response,aX=d.url,aY=d.headers,aZ=d.transformedBody,bA.logTargetRequest(aX,aY,aZ),ar?.info?.("MODEL_FALLBACK",`Serving ${b} as fallback for ${a1}`)}catch{return bs({status:a,error:f,providerRequest:aZ||bE,providerResponse:b7,clientResponse:(0,r.xJ)(a,f),cacheSource:"upstream"}),a5(a,"model_unavailable"),(0,r.A1)(a,f,c)}}else if((0,_.A$)(a,b)){let b=(0,_.mu)(b0).filter(a=>a!==b0&&!b_.has(a)),d=(0,_.BO)(b0,b)??(0,_.ec)(b0,b_);if(!d)return bs({status:a,error:f,providerRequest:aZ||bE,providerResponse:b7,clientResponse:(0,r.xJ)(a,f),cacheSource:"upstream"}),a5(a,"context_overflow"),(0,r.A1)(a,f,c);b_.add(d),b0=d,bE.model=d,ar?.info?.("CONTEXT_OVERFLOW_FALLBACK",`${a1} context overflow → trying ${d}`);try{let b=await b$(d,!1);if(!b.response.ok)return bs({status:a,error:f,providerRequest:aZ||bE,providerResponse:b7,clientResponse:(0,r.xJ)(a,f),cacheSource:"upstream"}),a5(a,"context_overflow"),(0,r.A1)(a,f,c);aW=b.response,aX=b.url,aY=b.headers,aZ=b.transformedBody,bA.logTargetRequest(aX,aY,aZ),ar?.info?.("CONTEXT_OVERFLOW_FALLBACK",`Serving ${d} as fallback for ${a1}`)}catch{return bs({status:a,error:f,providerRequest:aZ||bE,providerResponse:b7,clientResponse:(0,r.xJ)(a,f),cacheSource:"upstream"}),a5(a,"context_overflow"),(0,r.A1)(a,f,c)}}else{bs({status:a,error:f,providerRequest:aZ||bE,providerResponse:b7,clientResponse:(0,r.xJ)(a,f),cacheSource:"upstream"}),a5(a,`upstream_${a}`);let e=Array.isArray(bE.tools)&&bE.tools.length>0,g=!1;if(!aU&&!bx){let c=(0,ad.fU)(a,b,e,ad.sr);if((0,ad.Z4)(c)){ar?.info?.("EMERGENCY_FALLBACK",c.reason);try{let a=a0,b=(0,H.SB)(c.provider),e=await b.execute({model:c.model,body:{...bE,model:c.model,max_tokens:Math.min("number"==typeof bE.max_tokens?bE.max_tokens:c.maxOutputTokens,c.maxOutputTokens),max_completion_tokens:Math.min("number"==typeof bE.max_completion_tokens?bE.max_completion_tokens:"number"==typeof bE.max_tokens?bE.max_tokens:c.maxOutputTokens,c.maxOutputTokens)},stream:!1,credentials:d,signal:bW.signal,log:ar,extendedContext:a2});e.response.ok?(a0=c.provider,a1=c.model,bE.model=c.model,aW=e.response,aX=e.url,aY=e.headers,aZ=e.transformedBody,bA.logTargetRequest(aX,aY,aZ),ar?.info?.("EMERGENCY_FALLBACK",`Serving ${c.provider}/${c.model} as budget fallback for ${a}/${a3}`),g=!0):ar?.warn?.("EMERGENCY_FALLBACK",`Emergency fallback also failed (${e.response.status})`)}catch(b){let a=b instanceof Error?b.message:String(b);ar?.warn?.("EMERGENCY_FALLBACK",`Emergency fallback error: ${a}`)}}}if(!g)return(0,r.A1)(a,f,c)}}if(!bx){let b;(0,A.uw)(a1,a0,aM,!1);let c=(aW.headers.get("content-type")||"").toLowerCase(),e=bk,i=await (0,h.sh)(aW.text()),j=(0,ah.xm)(i),l=c.includes("text/event-stream")||c.includes("application/x-ndjson")||/(^|\n)\s*(event|data):/m.test(i);if(l){let a=function(a,b){if(b.includes("application/x-ndjson")){let b;return b=String(a||"").split(/\r?\n/).map(a=>a.trim()).filter(a=>a.length>0),0===b.length?a:`${b.map(a=>`data: ${a}
|
|
65
65
|
`).join("\n")}
|
|
66
66
|
`}return a}(i,c),d=c.includes("application/x-ndjson")?"NDJSON":"SSE";ar?.warn?.("STREAM",`Unexpected ${d} response for non-streaming request — buffering`);let f=function(a,b,c){let d=[],e=new Set,f=a=>{!a||e.has(a)||(e.add(a),d.push(a))};for(let e of(f(b),f(g.h.OPENAI_RESPONSES),f(g.h.CLAUDE),f(g.h.OPENAI),d)){let b=e===g.h.OPENAI_RESPONSES?(0,T.Bw)(a,c):e===g.h.CLAUDE?(0,T.H3)(a,c):(0,T.Fe)(a,c);if(b&&"object"==typeof b)return{body:b,format:e}}return null}(a,bk,a1);if(!f){(0,A.E5)({model:a1,provider:a0,connectionId:aM,status:`FAILED ${s.gx.BAD_GATEWAY}`}).catch(()=>{});let a="Invalid SSE response for non-streaming request";return bs({status:s.gx.BAD_GATEWAY,error:a,providerRequest:aZ||bE,providerResponse:j,clientResponse:(0,r.xJ)(s.gx.BAD_GATEWAY,a),cacheSource:"upstream"}),a5(s.gx.BAD_GATEWAY,"invalid_sse_payload"),(0,r.A1)(s.gx.BAD_GATEWAY,a)}b=f.body,e=f.format}else try{b=i?JSON.parse(i):{}}catch{(0,A.E5)({model:a1,provider:a0,connectionId:aM,status:`FAILED ${s.gx.BAD_GATEWAY}`}).catch(()=>{});let a="Invalid JSON response from provider";return bs({status:s.gx.BAD_GATEWAY,error:a,providerRequest:aZ||bE,providerResponse:j,clientResponse:(0,r.xJ)(s.gx.BAD_GATEWAY,a),cacheSource:"upstream"}),a5(s.gx.BAD_GATEWAY,"invalid_json_payload"),(0,r.A1)(s.gx.BAD_GATEWAY,a)}if((0,t.Oc)(b)){(0,A.E5)({model:a1,provider:a0,connectionId:aM,status:`FAILED ${s.gx.BAD_GATEWAY}`}).catch(()=>{});let a="Provider returned empty content";bs({status:s.gx.BAD_GATEWAY,error:a,providerRequest:aZ||bE,providerResponse:j,clientResponse:(0,r.xJ)(s.gx.BAD_GATEWAY,a),cacheSource:"upstream"}),a5(s.gx.BAD_GATEWAY,"empty_content");let c=(0,_.ec)(b0,b_);if(!c)return(0,r.A1)(s.gx.BAD_GATEWAY,a);b_.add(c),b0=c,bE.model=c,ar?.info?.("EMPTY_CONTENT_FALLBACK",`${a1} returned empty content → trying ${c}`);try{let d=await b$(c,!1);if(!d.response.ok)return(0,r.A1)(s.gx.BAD_GATEWAY,a);{let e=await (0,h.sh)(d.response.text());try{b=e?JSON.parse(e):{},aX=d.url,aY=d.headers,aZ=d.transformedBody,bA.logTargetRequest(aX,aY,aZ),ar?.info?.("EMPTY_CONTENT_FALLBACK",`Serving ${c} as fallback for ${a1}`)}catch{return(0,r.A1)(s.gx.BAD_GATEWAY,a)}}}catch{return(0,r.A1)(s.gx.BAD_GATEWAY,a)}}let m=aA(bP,aZ??null);ba===g.h.CLAUDE&&bk===g.h.CLAUDE&&(b=function(a,b){if(!b||!Array.isArray(a?.content))return a;let c=!1,d=a.content.map(a=>{if(a?.type!=="tool_use"||"string"!=typeof a?.name)return a;let d=b.get(a.name)??a.name;return d===a.name?a:(c=!0,{...a,name:d})});return c?{...a,content:d}:a}(b,m)),bA.logProviderResponse(aW.status,aW.statusText,aW.headers,l?{_streamed:!0,_format:"sse-json",summary:b}:b),at&&await at(),await az({provider:a0,connectionId:aM,providerSpecificData:d?.providerSpecificData,log:ar});let n=(0,S.M)(b,a0);(0,A.E5)({model:a1,provider:a0,connectionId:aM,tokens:n,status:"200 OK"}).catch(()=>{});let o=aE(n);if(n&&"object"==typeof n){let a=`[${new Date().toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit"})}] 📊 [USAGE] ${a0.toUpperCase()} | ${(0,B.Hx)(n)}${aM?` | account=${aM.slice(0,8)}...`:""}`;console.log(`${h.lm.green}${a}${h.lm.reset}`),n.prompt_tokens,aD(n.cache_read_input_tokens??n.cached_tokens??n.prompt_tokens_details?.cached_tokens),aD(n.cache_creation_input_tokens??n.prompt_tokens_details?.cache_creation_tokens),(0,A.sZ)({provider:a0||"unknown",model:a1||"unknown",tokens:n,status:"200",success:!0,latencyMs:Date.now()-a4,timeToFirstTokenMs:Date.now()-a4,errorCode:null,timestamp:new Date().toISOString(),connectionId:aM||void 0,apiKeyId:aN?.id||void 0,apiKeyName:aN?.name||void 0}).catch(a=>{console.error("Failed to save usage stats:",a.message)})}let p=(0,f.nZ)(e,be)?(0,R.l)(b,e,be,m):b,q=p;if("claude"!==ba||bx||"string"!=typeof p?.choices?.[0]?.message?.content||(p.choices[0].message.content=(0,af.yN)(p.choices[0].message.content)),p?.choices)for(let a of p.choices)a.message?.tool_calls&&a.message.tool_calls.length>0&&"tool_calls"!==a.finish_reason&&(a.finish_reason="tool_calls");try{let a=p?.choices?.[0],b=a?.message;(0,N.W)(b,a0,a1)}catch{}if(be===g.h.OPENAI_RESPONSES?p=(0,U.Xp)(p):be===g.h.OPENAI&&(p=(0,U.LG)(p)),p?.usage){let a=(0,k.O9)(p.usage);p.usage=(0,k.WL)(a,be)}else{let b=JSON.stringify(p?.choices?.[0]?.message?.content||"").length;if(b>0){let c=(0,k.OF)(a,b,be);p.usage=(0,k.WL)(c,be)}}if(bB&&bC?.enabled&&bC.maxTokens>0){let b=ay(a);b&&(0,ai.B)(b,bB,br);let c=ax(q);c&&(0,ai.B)(c,bB,br)}let u=!!bB&&bC?.skillsEnabled===!0,v=bm.toolName?[bm.toolName]:[];(u||v.length>0)&&(p=await (0,an.dK)(p,function(a){switch(a){case g.h.CLAUDE:return"claude";case g.h.GEMINI:return"gemini";default:return"openai"}}(ba),{apiKeyId:bB||"local",sessionId:br,requestId:bq,builtinToolNames:v,customSkillExecutionEnabled:u}));let w={apiKeyInfo:aN,disabledGuardrails:(0,J.DP)({apiKeyInfo:aN??null,body:a,headers:aL?.headers??null}),endpoint:aL?.endpoint||null,headers:aL?.headers??null,log:ar,method:"POST",model:a1,provider:a0,sourceFormat:e,stream:!1,targetFormat:be},x=await J.lS.runPostCallHooks(p,w);p=x.response;let y=(n&&"object"==typeof n?n:null)||(p?.usage&&"object"==typeof p.usage?p.usage:null),z=y?await (0,D.yN)(a0,a1,y):0;if(x.blocked){let a=x.message||"Response blocked by guardrail";return bs({status:s.gx.BAD_REQUEST,tokens:n,responseBody:b,providerRequest:aZ||bE,providerResponse:l?{_streamed:!0,_format:"sse-json",summary:b}:b,clientResponse:(0,r.xJ)(s.gx.BAD_REQUEST,a),claudeCacheMeta:b2,claudeCacheUsageMeta:o,cacheSource:"upstream"}),aN?.id&&z>0&&(0,C.n5)(aN.id,z),ar?.warn?.("GUARDRAIL",`Response blocked by ${x.guardrail||"guardrail"}: ${a}`),(0,r.A1)(s.gx.BAD_REQUEST,a)}if(bz&&(0,Y.FD)(a,aL?.headers)&&aw(p)){let b=(0,Y.gR)(a1,a.messages??a.input,a.temperature,a.top_p),c=n?.prompt_tokens+n?.completion_tokens||0;(0,Y.yv)(b,a1,p,c),ar?.debug?.("CACHE",`Stored response for ${a1} (${c} tokens)`)}return(0,Z.tm)(a7,p,200),bA.logConvertedResponse(p),bs({status:200,tokens:n,responseBody:b,providerRequest:aZ||bE,providerResponse:l?{_streamed:!0,_format:"sse-json",summary:b}:b,clientResponse:p,claudeCacheMeta:b2,claudeCacheUsageMeta:o,cacheSource:"upstream"}),aN?.id&&z>0&&(0,C.n5)(aN.id,z),{success:!0,response:new Response(JSON.stringify(p),{headers:{"Content-Type":"application/json",[ao.I.cache]:"MISS",...(0,E.lG)({provider:a0,model:a1,cacheHit:!1,latencyMs:Date.now()-a4,usage:y,costUsd:z})}})}}let b9=await (0,i.X)(aW,{timeoutMs:s.TH,provider:a0,model:a1,log:ar});if(!1===b9.ok){let{response:a,reason:b}=b9;return a.status,(0,A.uw)(a1,a0,aM,!1),(0,A.E5)({model:a1,provider:a0,connectionId:aM,status:`FAILED ${a.status}`}).catch(()=>{}),bs({status:a.status,error:b,providerRequest:aZ||bE,clientResponse:(0,r.xJ)(a.status,b),claudeCacheMeta:b2,cacheSource:"upstream"}),a5(a.status,"stream_readiness_timeout"),{success:!1,status:a.status,error:b,errorType:"stream_readiness_timeout",response:a}}aW=b9.response,at&&await at();let ca={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive",[ao.I.cache]:"MISS",...(0,E.lG)({provider:a0,model:a1,cacheHit:!1,latencyMs:0,usage:null,costUsd:0})},cb=aA(bP,aZ??null),cc=({status:b,usage:c,responseBody:e,providerPayload:f,clientPayload:g,ttft:h})=>{let i=aE(c);if(200===b&&az({provider:a0,connectionId:aM,providerSpecificData:d?.providerSpecificData,log:ar}),200===b&&e)try{let a=e.choices,b=a?.[0]?.message;(0,N.W)(b,a0,a1)}catch{}if(c&&"object"==typeof c&&(c.prompt_tokens,aD(c.cache_read_input_tokens??c.cached_tokens??c.prompt_tokens_details?.cached_tokens),aD(c.cache_creation_input_tokens??c.prompt_tokens_details?.cache_creation_tokens),(0,A.sZ)({provider:a0||"unknown",model:a1||"unknown",tokens:c,status:String(b||200),success:200===b,latencyMs:Date.now()-a4,timeToFirstTokenMs:h,errorCode:null,timestamp:new Date().toISOString(),connectionId:aM||void 0,apiKeyId:aN?.id||void 0,apiKeyName:aN?.name||void 0}).catch(a=>{console.error("Failed to save usage stats:",a.message)})),bs({status:b||200,tokens:c||{},responseBody:e??void 0,providerRequest:aZ||bE,providerResponse:f,clientResponse:g??e??void 0,claudeCacheMeta:b2,claudeCacheUsageMeta:i,cacheSource:"upstream"}),aN?.id&&c&&(0,D.yN)(a0,a1,c).then(a=>{a>0&&(0,C.n5)(aN.id,a)}).catch(()=>{}),bB&&bC?.enabled&&bC.maxTokens>0&&200===b){let b=ay(a);b&&(0,ai.B)(b,bB,br);let c=ax(e??null);c&&(0,ai.B)(c,bB,br)}if(bz&&200===b&&e&&(0,Y.FD)(a,aL?.headers))try{let b={...e};if(delete b._streamed,!aw(b))return;let d=(0,Y.gR)(a1,a.messages??a.input,a.temperature,a.top_p),f=(Number(c?.prompt_tokens??0)||0)+(Number(c?.completion_tokens??0)||0);(0,Y.yv)(d,a1,b,f),ar?.debug?.("CACHE",`Stored streaming response for ${a1} (${f} tokens)`)}catch{}},cd=a=>{a5(a.status||s.gx.BAD_GATEWAY,a.code||a.type);try{au?.(a)}catch{}};if(bk!==g.h.OPENAI_RESPONSES||be!==g.h.OPENAI||bb||bd?(0,f.nZ)(bk,be)?(ar?.debug?.("STREAM",`Translation mode: ${bk} → ${be}`),a$=(0,h.i5)(bk,be,a0,bA,cb,a1,aM,a,cc,aN,cd)):(ar?.debug?.("STREAM","Standard passthrough mode"),a$=(0,h.l2)(a0,bA,cb,a1,aM,a,cc,aN,cd)):(ar?.debug?.("STREAM","Responses translation mode: openai-responses → openai"),a$=(0,h.i5)("openai-responses","openai",a0,bA,cb,a1,aM,a,cc,aN,cd)),(0,$.Z)(aL?.headers)){let a=(0,$.Y)({signal:bW.signal});a_=(0,j.Jb)(aW,a$,bW).pipeThrough(a),ca[ao.I.progress]="enabled"}else a_=(0,j.Jb)(aW,a$,bW);return{success:!0,response:new Response(a_,{headers:ca})}}d()}catch(a){d(a)}})},69829:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{FB:()=>m,k0:()=>l});var e=c(55511),f=c(33364),g=a([f]);function h(a){return a&&"object"==typeof a&&!Array.isArray(a)?a:{}}function i(a,b){return[...a].sort((a,c)=>{for(let d of b){let b=a[d],e=c[d];if("number"==typeof b||"number"==typeof e){let a="number"==typeof b?b:Number.MAX_SAFE_INTEGER,c="number"==typeof e?e:Number.MAX_SAFE_INTEGER;if(a!==c)return a-c;continue}let f="string"==typeof b?String(b):"",g="string"==typeof e?String(e):"",h=f.localeCompare(g,void 0,{numeric:!0});if(0!==h)return h}return 0})}function j(a,b){return Object.fromEntries(b.filter(b=>void 0!==a[b]).map(b=>[b,a[b]]))}async function k(){let[a,b,c,d,e,g]=await Promise.all([(0,f.getSettings)(),(0,f.getProviderConnections)(),(0,f.FhY)(),(0,f.OMz)(),(0,f.getCombos)(),(0,f.PXR)()]);return{settings:function(a){let{password:b,requireLogin:c,cloudEnabled:d,...e}=h(a);return e}(a),providerConnections:i(b.map(a=>{let b;return b=h(a),j(b,["id","provider","authType","name","displayName","email","priority","globalPriority","defaultModel","isActive","accessToken","refreshToken","expiresAt","expiresIn","tokenType","scope","idToken","projectId","apiKey","providerSpecificData","group"])}),["provider","name","id"]),providerNodes:i(c.map(a=>{let b;return b=h(a),j(b,["id","type","name","prefix","apiType","baseUrl","chatPath","modelsPath"])}),["type","name","id"]),modelAliases:h(d),combos:i(e.map(a=>(function(a){let{createdAt:b,updatedAt:c,...d}=h(a);return d})(a)),["sortOrder","name","id"]),apiKeys:i(g.map(a=>{let b;return b=h(a),j(b,["id","name","key","machineId","allowedModels","allowedConnections","noLog","autoResolve","isActive","accessSchedule","maxRequestsPerDay","maxRequestsPerMinute","maxSessions"])}),["name","id"])}}async function l(){let a=await k();return{version:(0,e.createHash)("sha256").update(JSON.stringify(function a(b){return Array.isArray(b)?b.map(b=>a(b)):b&&"object"==typeof b?Object.fromEntries(Object.keys(b).sort((a,b)=>a.localeCompare(b)).map(c=>[c,a(b[c])])):b}(a))).digest("hex"),bundle:a}}function m(a){return{providers:a.providerConnections,providerNodes:a.providerNodes,modelAliases:a.modelAliases,combos:a.combos,apiKeys:a.apiKeys,settings:a.settings}}f=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},70063:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{U:()=>m});var e=c(21020),f=c(59975),g=c(27976),h=c(32881),i=c(51263),j=c(12636),k=a([e,i]);[e,i]=k.then?(await k)():k;class n extends Error{constructor(a,b){super(a),this.statusCode=b}}async function l(a){let b=await (0,e.c1)(a).catch(()=>null);if(b)return b;let c=h.Zx[a];return c?(0,e.c1)(c).catch(()=>null):null}async function m(a){var b;let c,d,e,k;if("string"!=typeof a.query||0===a.query.trim().length)throw new n("Missing required field: query",400);if(a.query.trim().length>500)throw new n("Query must be 500 characters or fewer",400);if(a.search_type&&"web"!==a.search_type&&"news"!==a.search_type)throw new n(`Unsupported search_type: ${String(a.search_type)}`,400);let m=a.log||g,o=a.search_type||"web";if(a.provider){let b=(0,h.GZ)(a.provider);if(!b)throw new n(`Unknown search provider: ${a.provider}`,400);if(!(0,h.Ne)(b,o))throw new n(`Search provider ${a.provider} does not support search_type: ${o}`,400)}let p=(0,h.oL)(a.provider,o);if(!p)throw new n(a.provider?`Unknown search provider: ${a.provider}`:`No search providers available. Add an API key for a search provider (${(0,h.QF)().map(a=>a.id).join(", ")}) in the dashboard.`,400);let q=null,r=null;if(a.provider){if((q=await l(p.id))||"none"!==p.authType||"string"!=typeof a.provider_options?.baseUrl||!(a.provider_options.baseUrl.trim().length>0)||(q={providerSpecificData:{baseUrl:a.provider_options.baseUrl.trim()}}),!q)throw new n("none"===p.authType?`Search provider ${p.id} is not configured. Set its base URL in the dashboard or pass provider_options.baseUrl.`:`No credentials configured for search provider: ${p.id}. Add an API key for "${p.id}" in the dashboard.`,400)}else{if(!(q=await l(p.id)))for(let a of Object.values(h.c3).filter(a=>(0,h.Ne)(a,o)).sort((a,b)=>a.costPerQuery-b.costPerQuery).map(a=>a.id)){if(a===p.id)continue;let b=(0,h.GZ)(a),c=await l(a);if(b&&c){p=b,q=c;break}}if(!q)throw new n(`No credentials configured for any search provider. Add an API key for a search provider (${Object.keys(h.c3).join(", ")}) in the dashboard.`,400);for(let a of Object.values(h.c3).filter(a=>(0,h.Ne)(a,o)).sort((a,b)=>a.costPerQuery-b.costPerQuery).map(a=>a.id).filter(a=>a!==p.id)){let b=await l(a);if(b){c=a,r=b;break}}}let s=(b=p,d="number"==typeof a.max_results?a.max_results:"string"==typeof a.max_results?Number(a.max_results):NaN,e="number"==typeof a.limit?a.limit:"string"==typeof a.limit?Number(a.limit):NaN,k=Number.isFinite(d)?d:Number.isFinite(e)?e:b.defaultMaxResults,Math.min(Math.max(1,k),b.maxMaxResults)),t=(0,j.xn)(a.query.trim(),p.id,o,s,a.country,a.language,{filters:a.filters,offset:a.offset,time_range:a.time_range}),u=p.cacheTTLMs??j.Ot,{data:v,cached:w}=await (0,j.fn)(t,u,async()=>{let b=await (0,i.R)({query:a.query.trim(),provider:p.id,maxResults:s,searchType:o,country:a.country,language:a.language,timeRange:a.time_range,offset:a.offset,domainFilter:function(a){if(!a)return;let b=[];return a.include_domains?.length&&b.push(...a.include_domains),a.exclude_domains?.length&&b.push(...a.exclude_domains.map(a=>`-${a}`)),b.length>0?b:void 0}(a.filters),contentOptions:a.content,strictFilters:a.strict_filters,providerOptions:a.provider_options,credentials:q,alternateProvider:c,alternateCredentials:r,log:m});if(!b.success||!b.data)throw new n(b.error||"Search failed",b.status||502);return b.data});if(!w&&a.apiKeyId&&"local"!==a.apiKeyId&&v.usage?.search_cost_usd>0)try{(0,f.n5)(a.apiKeyId,v.usage.search_cost_usd)}catch(a){m.warn("SEARCH",`Cost recording failed: ${a?.message||String(a)}`)}return{data:v,cached:w}}d()}catch(a){d(a)}})},73299:(a,b,c)=>{c.d(b,{M4:()=>l,T4:()=>h,getDefaultDegradationMap:()=>m,getDefaultDetectionPatterns:()=>n,ns:()=>i,setBackgroundDegradationConfig:()=>g,ur:()=>k});let d=["generate a title","generate title","create a title","create a short","summarize this","summarize the","write a brief","write a summary","one-line summary","one line summary","short description","brief description","conversation title","chat title","name this conversation","name this chat","title for this","suggest a title","label this"],e={"claude-opus-4-6":"gemini-3-flash","claude-opus-4-6-thinking":"gemini-3-flash","claude-opus-4-5-20251101":"gemini-3-flash","claude-sonnet-4-5-20250929":"gemini-3-flash","claude-sonnet-4-20250514":"gemini-3-flash","claude-sonnet-4":"gemini-3-flash","gemini-3.1-pro":"gemini-3-flash","gemini-3.1-pro-high":"gemini-3-flash","gemini-3-pro-preview":"gemini-3-flash-preview","gemini-2.5-pro":"gemini-3-flash","gpt-4o":"gpt-4o-mini","gpt-5":"gpt-5-mini","gpt-5.1":"gpt-5-mini","gpt-5.1-codex":"gpt-5.1-codex-mini"},f={enabled:!1,degradationMap:{...e},detectionPatterns:[...d],stats:{detected:0,tokensSaved:0}};function g(a){f={...f,...a,stats:f.stats}}function h(){return{...f,degradationMap:{...f.degradationMap},detectionPatterns:[...f.detectionPatterns],stats:{...f.stats}}}function i(){f.stats={detected:0,tokensSaved:0}}function j(a,b){if(!a)return"";let c=a[b]??a[b.toLowerCase()]??a[b.toUpperCase()];return"string"==typeof c?c.trim():""}function k(a,b=null){var c;if(!a||"object"!=typeof a)return null;if(b){let a=[j(b,"x-task-type"),j(b,"x-request-priority"),j(b,"x-initiator")].find(Boolean);if(a&&"background"===a.toLowerCase())return"header_background"}let d=function(a){if("number"==typeof a&&Number.isFinite(a))return a;if("string"==typeof a&&a.trim().length>0){let b=Number(a);return Number.isFinite(b)?b:null}return null}(a.max_tokens??a.max_completion_tokens??a.max_output_tokens);if(null!==d&&d>0&&d<50)return"low_max_tokens";let e=Array.isArray(c=a.messages??a.input??[])?c:[];if(!Array.isArray(e)||0===e.length)return null;let g=e.find(a=>"system"===a.role||"developer"===a.role);if(!g)return null;let h="string"==typeof g.content?g.content.toLowerCase():"";return h&&f.detectionPatterns.some(a=>h.includes(a.toLowerCase()))&&!(e.filter(a=>"user"===a.role).length>3)?"system_prompt_pattern":null}function l(a){if(!a)return a;let b=f.degradationMap[a];return b?(f.stats.detected++,b):a}function m(){return{...e}}function n(){return[...d]}},74362:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{G6:()=>y,Hc:()=>z,MS:()=>A,Od:()=>x,an:()=>w,nv:()=>u,xH:()=>v});var e=c(13961),f=c(21020),g=c(27976),h=c(9686),i=c(32113),j=c(23969),k=c(69590),l=c(71861),m=c(60293),n=c(94046),o=c(33364),p=c(12620),q=c(34493),r=c(26510),s=c(74163),t=a([e,f,h,k,o]);async function u(a,b,c=""){let d=await (0,e.mA)(a);if(!d.provider){if("ambiguous_model"===d.errorType){let b=d.errorMessage||`Ambiguous model '${a}'. Use provider/model prefix (ex: gh/${a} or cc/${a}).`;return g.warn("CHAT",b,{model:a,candidates:d.candidateAliases||d.candidateProviders||[]}),{error:(0,l.yj)(m.gx.BAD_REQUEST,b)}}return g.warn("CHAT","Invalid model format",{model:a}),{error:(0,l.yj)(m.gx.BAD_REQUEST,"Invalid model format")}}let{provider:f,model:h,extendedContext:k}=d,n=(0,i.a4)(b,c),o=j.PROVIDER_ID_TO_ALIAS[f]||f,p=(0,j.ux)(o,h)||(0,i.jJ)(f);"responses"===d.apiFormat&&(p="openai-responses",g.info("ROUTING","Custom model apiFormat=responses → targetFormat=openai-responses"));let q=k&&"claude"===o?" [1m]":"";return a!==`${f}/${h}`?g.info("ROUTING",`${a} → ${f}/${h}${q}`):g.info("ROUTING",`Provider: ${f}, Model: ${h}${q}`),{provider:f,model:h,sourceFormat:n,targetFormat:p,extendedContext:k}}async function v(a,b,c={}){let d=c.bypassReason||"pipeline override",e=c.providerProfile??await (0,s.LN)(a),f=(0,p.getCircuitBreaker)(a,{failureThreshold:e.failureThreshold??e.circuitBreakerThreshold,resetTimeout:e.resetTimeoutMs??e.circuitBreakerReset,onStateChange:(a,b,c)=>g.info("CIRCUIT",`${a}: ${b} → ${c}`)});if(c.ignoreCircuitBreaker&&!f.canExecute())g.info("CIRCUIT",`Bypassing OPEN circuit breaker for ${a} (${d})`);else if(!f.canExecute()){let b=f.getRetryAfterMs(),c=Math.max(Math.ceil(b/1e3),1);return g.warn("CIRCUIT",`Circuit breaker OPEN for ${a}, rejecting request`),(0,l.Mt)(a,c)}return null}async function w({bypassCircuitBreaker:a,breaker:b,body:c,provider:d,model:e,refreshedCredentials:i,proxyInfo:j,log:o,clientRawRequest:q,credentials:r,apiKeyInfo:s,userAgent:t,comboName:u,comboStrategy:v,isCombo:x,comboStepId:y,comboExecutionKey:z,extendedContext:A,providerProfile:B}){try{let g=()=>(0,n.jf)(j?.proxy||null,()=>(0,k.wk)({body:{...c,model:`${d}/${e}`},modelInfo:{provider:d,model:e,extendedContext:A},credentials:i,log:o,clientRawRequest:q,connectionId:r.connectionId,apiKeyInfo:s,userAgent:t,comboName:u,comboStrategy:v,isCombo:x,comboStepId:y,comboExecutionKey:z,onCredentialsRefreshed:async a=>{await (0,h.vN)(r.connectionId,{accessToken:a.accessToken,refreshToken:a.refreshToken,expiresIn:a.expiresIn,expiresAt:a.expiresAt,providerSpecificData:a.providerSpecificData,apiKey:a.apiKey,testStatus:"active"})},onRequestSuccess:async()=>{await (0,f.Pt)(r.connectionId,r)},onStreamFailure:async a=>{r.connectionId&&await (0,f.vk)(r.connectionId,Number(a?.status||m.gx.BAD_GATEWAY),String(a?.message||a?.code||"stream failure"),d,e,B)}}));if(a){if(!j?.proxy&&(0,n.Wk)()){let a=await (0,n.qT)(g);return{result:a.result,tlsFingerprintUsed:a.tlsFingerprintUsed}}return{result:await g(),tlsFingerprintUsed:!1}}if(!j?.proxy&&(0,n.Wk)()){let a=await b.execute(async()=>(0,n.qT)(g));return{result:a.result,tlsFingerprintUsed:a.tlsFingerprintUsed}}return{result:await b.execute(g),tlsFingerprintUsed:!1}}catch(a){if(a instanceof p.ez)return g.warn("CIRCUIT",`${d} circuit open during retry: ${a.message}`),{result:{success:!1,response:(0,l.Mt)(d,Math.ceil(a.retryAfterMs/1e3)),status:m.gx.SERVICE_UNAVAILABLE},tlsFingerprintUsed:!1};if(a?.code==="PROXY_UNREACHABLE"||/proxy unreachable/i.test(a?.message||"")){let b=a?.message||"Proxy unreachable";return g.warn("PROXY",b),{result:{success:!1,response:(0,l.wO)(m.gx.SERVICE_UNAVAILABLE,b,2),status:m.gx.SERVICE_UNAVAILABLE,error:b},tlsFingerprintUsed:!1}}throw a}}function x(a,b,c,d,e,f){if(a?.allRateLimited){let b=e||a.lastError||"Unavailable",h=f||Number(a.lastErrorCode)||m.gx.SERVICE_UNAVAILABLE,i="string"==typeof a.cooldownModel&&a.cooldownModel.trim().length>0?a.cooldownModel.trim():d;return"model"===a.cooldownScope&&Number(h)===m.gx.RATE_LIMITED?(g.warn("CHAT",`[${c}/${i}] all credentials cooling down${a.retryAfterHuman?` (${a.retryAfterHuman})`:""}`),(0,l.q8)({model:i,retryAfter:a.retryAfter})):(g.warn("CHAT",`[${c}/${d}] ${b} (${a.retryAfterHuman})`),(0,l.wO)(h,`[${c}/${d}] ${b}`,a.retryAfter,a.retryAfterHuman))}return e&&f?(g.warn("CHAT","Preserving last upstream error after credential exhaustion",{provider:c,model:d,lastStatus:f}),(0,l.yj)(f,e)):b?(g.warn("CHAT","No more accounts available",{provider:c}),(0,l.yj)(f||m.gx.SERVICE_UNAVAILABLE,e||"All accounts unavailable")):(g.error("AUTH",`No credentials for provider: ${c}`),(0,l.yj)(m.gx.BAD_REQUEST,`No credentials for provider: ${c}`))}async function y(a){try{return await (0,o.YDv)(a)}catch(a){return g.debug("PROXY",`Failed to resolve proxy: ${a.message}`),null}}function z({result:a,proxyInfo:b,proxyLatency:c,provider:d,model:e,sourceFormat:f,targetFormat:g,credentials:h,comboName:i,clientRawRequest:j,tlsFingerprintUsed:k=!1}){try{let f=j?.headers?.["x-forwarded-for"]||j?.headers?.["x-real-ip"]||j?.headers?.["cf-connecting-ip"]||null,g=f?f.split(",")[0].trim():null;(0,q.pq)({status:a.success?"success":408===a.status||504===a.status?"timeout":"error",proxy:b?.proxy||null,level:b?.level||"direct",levelId:b?.levelId||null,provider:d,targetUrl:`${d}/${e}`,publicIp:g,latencyMs:c,error:a.success?null:a.error||null,connectionId:h.connectionId,comboId:i||null,account:h.connectionId?.slice(0,8)||null,tlsFingerprint:k})}catch{}try{(0,r.MR)({provider:d,model:e,sourceFormat:f,targetFormat:g,status:a.success?"success":"error",statusCode:a.success?200:a.status||500,latency:c,endpoint:j?.endpoint||"/v1/chat/completions",connectionId:h.connectionId||null,comboName:i||null})}catch{}}function A(a,b){if(!a||!b)return a;try{return a.headers.set("X-OmniRoute-Session-Id",b),a}catch{let c=new Response(a.body,{status:a.status,statusText:a.statusText,headers:a.headers});return c.headers.set("X-OmniRoute-Session-Id",b),c}}[e,f,h,k,o]=t.then?(await t)():t,d()}catch(a){d(a)}})},77458:(a,b,c)=>{c.d(b,{IV:()=>g,Jh:()=>h,V7:()=>f});let d=[{name:"system_override",pattern:/\b(ignore|disregard|forget)\s+(all\s+)?(previous|prior|above|earlier)\s+(instructions?|prompts?|rules?|context)/i,severity:"high"},{name:"role_hijack",pattern:/\b(you\s+are\s+now|act\s+as\s+if|pretend\s+(to\s+be|you\s+are)|from\s+now\s+on\s+you\s+are)\b/i,severity:"medium"},{name:"system_prompt_leak",pattern:/\b(reveal|show|display|print|output|repeat)\s+(your\s+)?(system\s+prompt|instructions?|initial\s+prompt|hidden\s+prompt)/i,severity:"high"},{name:"delimiter_injection",pattern:/(\[SYSTEM\]|\[INST\]|<<SYS>>|<\|im_start\|>|<\|system\|>|<\|user\|>)/i,severity:"high"},{name:"jailbreak_dan",pattern:/\b(DAN|do\s+anything\s+now|jailbreak|developer\s+mode|enable\s+developer)\b/i,severity:"medium"},{name:"encoding_evasion",pattern:/\b(base64\s+decode|rot13|hex\s+decode|unicode\s+escape)\b.*\b(instruction|prompt|command)\b/i,severity:"medium"}],e=[{name:"email",pattern:/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g,replacement:"[EMAIL_REDACTED]"},{name:"cpf",pattern:/\b\d{3}\.\d{3}\.\d{3}-\d{2}\b/g,replacement:"[CPF_REDACTED]"},{name:"cnpj",pattern:/\b\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2}\b/g,replacement:"[CNPJ_REDACTED]"},{name:"credit_card",pattern:/\b(?:\d{4}[-\s]?){3}\d{4}\b/g,replacement:"[CARD_REDACTED]"},{name:"phone_br",pattern:/\b\(?\d{2}\)?\s?\d{4,5}-?\d{4}\b/g,replacement:"[PHONE_REDACTED]"},{name:"ssn_us",pattern:/\b\d{3}-\d{2}-\d{4}\b/g,replacement:"[SSN_REDACTED]"}];function f(a){let b=[];for(let c of a.messages||a.input||[])if("string"==typeof c)b.push(c);else if("string"==typeof c.content)b.push(c.content);else if(Array.isArray(c.content))for(let a of c.content)"string"==typeof a?b.push(a):a.text&&b.push(a.text);if("string"==typeof a.system)b.push(a.system);else if(Array.isArray(a.system))for(let c of a.system)"string"==typeof c?b.push(c):c.text&&b.push(c.text);return b}function g(a,b=!1){let c=[],d=a;for(let f of e){let e=a.match(f.pattern);e&&e.length>0&&(c.push({type:f.name,count:e.length}),b&&(d=d.replace(f.pattern,f.replacement)))}return{text:d,detections:c}}function h(a,b=console){let c={enabled:"false"!==process.env.INPUT_SANITIZER_ENABLED,mode:process.env.INPUT_SANITIZER_MODE||"warn",piiRedaction:"true"===process.env.PII_REDACTION_ENABLED},e={blocked:!1,modified:!1,detections:[],piiDetections:[],sanitizedBody:null};if(!c.enabled)return e;let i=f(a).join("\n"),j=function(a){let b=[];for(let c of d){let d=a.match(c.pattern);d&&b.push({pattern:c.name,severity:c.severity,match:d[0].slice(0,50)})}return b}(i);if(j.length>0){e.detections=j;let a=j.filter(a=>"high"===a.severity),d=a.length>0?"warn":"info";if(b[d]&&b[d](`[SANITIZER] Prompt injection detected: ${j.map(a=>a.pattern).join(", ")}`),"block"===c.mode&&a.length>0)return e.blocked=!0,e}if(c.piiRedaction){let d=g(i,"redact"===c.mode);e.piiDetections=d.detections,d.detections.length>0&&(b.warn?.(`[SANITIZER] PII detected: ${d.detections.map(a=>`${a.type}(${a.count})`).join(", ")}`),"redact"===c.mode&&(e.sanitizedBody=function(a){let b=JSON.parse(JSON.stringify(a));for(let a of b.messages||b.input||[])if("string"==typeof a.content)a.content=g(a.content,!0).text;else if(Array.isArray(a.content))for(let b of a.content)if("string"==typeof b){let c=a.content.indexOf(b);a.content[c]=g(b,!0).text}else b.text&&(b.text=g(b.text,!0).text);return"string"==typeof b.system&&(b.system=g(b.system,!0).text),b}(a),e.modified=!0))}return e}},79335:(a,b,c)=>{c.a(a,async(a,d)=>{try{let k;c.d(b,{ic:()=>h,ne:()=>j,tm:()=>i,xp:()=>g});var e=c(33364),f=a([e]);e=(f.then?(await f)():f)[0];let l=new Map;function g(a){if(!a)return null;let b="function"==typeof a.get?b=>a.get(b):b=>a[b];return b("idempotency-key")||b("x-request-id")||null}function h(a){if(!a)return null;let b=l.get(a);return b?Date.now()>=b.expiresAt?(l.delete(a),null):{response:b.response,status:b.status}:null}function i(a,b,c,d=5e3){a&&(!k&&(k=setInterval(()=>{let a=Date.now();for(let[b,c]of l)a>=c.expiresAt&&l.delete(b)},3e4)).unref&&k.unref(),l.set(a,{response:b,status:c,expiresAt:Date.now()+d}))}async function j(){let a=5e3;try{let b=await (0,e.getSettings)();"number"==typeof b.idempotencyWindowMs&&b.idempotencyWindowMs>0&&(a=b.idempotencyWindowMs)}catch{}return{activeKeys:l.size,windowMs:a}}d()}catch(a){d(a)}})},79490:(a,b,c)=>{c.d(b,{QC:()=>j});var d=c(30675),e=c(29210);let f=new Map,g=setInterval(()=>{let a=Date.now();for(let[b,c]of f)a-c.fetchedAt>3e5&&f.delete(b)},3e5);function h(a){if("number"==typeof a&&Number.isFinite(a))return a;if("string"==typeof a){let b=parseFloat(a);if(Number.isFinite(b))return b}return null}async function i(a,b){let c,d=f.get(a);if(d&&Date.now()-d.fetchedAt<6e4)return d.quota;let e="string"==typeof(c=b?.apiKey)&&c.trim().length>0?c.trim():null;if(!e)return null;try{let b=await fetch("https://crof.ai/usage_api/",{method:"GET",headers:{Authorization:`Bearer ${e}`,Accept:"application/json"},signal:AbortSignal.timeout(8e3)});if(!b.ok)return(401===b.status||403===b.status)&&f.delete(a),null;let c=await b.json(),d=function(a){let b=a&&"object"==typeof a&&!Array.isArray(a)?a:{};if(0===Object.keys(b).length)return null;let c=b.usable_requests,d=null==c?null:h(c),e=h(b.credits)??0,f=0;return f=null!==d?d>0?0:1:e>0?0:1,{used:0,total:d??0,percentUsed:f,resetAt:null,usableRequests:d,credits:e}}(c);if(!d)return null;return f.set(a,{quota:d,fetchedAt:Date.now()}),d}catch{return null}}function j(){(0,d.Zd)("crof",i),(0,e.br)("crof",i)}"object"==typeof g&&"unref"in g&&g.unref?.()},82162:(a,b,c)=>{c.d(b,{G3:()=>h,detectTaskType:()=>l,g4:()=>g,kf:()=>i,oC:()=>m,qk:()=>j});let d={coding:{patterns:["write code","write a function","implement","debug","fix this","fix the","refactor","unit test","write test","write a script","code review","complete this function","add a feature","javascript","typescript","python","sql query","api endpoint"],userPatterns:["```","def ","function ","class ","import ","const ","let ","var ","SELECT ","INSERT ","<html","<div"]},creative:{patterns:["write a story","write a poem","write a song","creative writing","write a blog","write an article","write a script","write an essay","imagine","roleplay","brainstorm","creative"]},analysis:{patterns:["analyze","analyse","analysis","compare","evaluate","assess","explain","reasoning","pros and cons","advantages and disadvantages","what are the implications","in-depth","comprehensive"]},vision:{patterns:["look at this image","in this image","what do you see","describe this image","analyze this image","read this screenshot"],userPatterns:["image_url","data:image"]},summarization:{patterns:["summarize","summary","tldr","tl;dr","brief overview","key points","main points","what did","highlights from"]},background:{patterns:["generate a title","generate title","create a title","name this","short description","brief description","one-line summary","conversation title"]},chat:{patterns:[]}},e={coding:"deepseek/deepseek-chat",creative:"",analysis:"gemini/gemini-2.5-pro",vision:"openai/gpt-4o",summarization:"gemini/gemini-2.5-flash",background:"gemini/gemini-2.5-flash-lite",chat:""},f={enabled:!1,taskModelMap:{...e},detectionEnabled:!0,stats:{detected:0,routed:0}};function g(a){f={...f,...a,stats:f.stats}}function h(){return{...f,taskModelMap:{...f.taskModelMap},stats:{...f.stats}}}function i(){f.stats={detected:0,routed:0}}function j(){return{...e}}function k(a){return"string"==typeof a?a.toLowerCase():Array.isArray(a)?a.map(a=>"string"==typeof a?a.toLowerCase():a?.text?.toLowerCase()||"").join(" "):""}function l(a){if(!a||"object"!=typeof a)return"chat";let b=Array.isArray(a.messages)?a.messages:Array.isArray(a.input)?a.input:[];if(0===b.length)return"chat";if(function(a){for(let b of a)if(Array.isArray(b.content)){for(let a of b.content)if(a?.type==="image_url"||a?.type==="image")return!0}return!1}(b))return"vision";let c=b.find(a=>"system"===a.role||"developer"===a.role),e=c?k(c.content):"",f=[...b].reverse().find(a=>"user"===a.role),g=f?k(f.content):"";for(let a of["background","coding","vision","summarization","analysis","creative"]){let{patterns:b,userPatterns:c}=d[a];if(b.some(a=>e.includes(a.toLowerCase()))||b.some(a=>g.includes(a.toLowerCase()))||c?.some(a=>g.includes(a.toLowerCase())))return a}return"chat"}function m(a,b){if(!f.enabled||!f.detectionEnabled)return{model:a,taskType:"chat",wasRouted:!1};let c=l(b);f.stats.detected++;let d=f.taskModelMap[c];return d&&""!==d?(f.stats.routed++,{model:d,taskType:c,wasRouted:!0}):{model:a,taskType:c,wasRouted:!1}}},82795:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{c:()=>k});var e=c(32113),f=c(66921),g=c(55120),h=c(60293),i=c(20783),j=a([i]);function k(a,b,c=""){if(!("string"==typeof c?c:"").includes("claude-cli")||!a.messages?.length)return null;let d=a.messages,j=a=>"string"==typeof a?a:Array.isArray(a)?a.filter(a=>"text"===a.type).map(a=>a.text).join(" "):"",n=!1,o=d[d.length-1];if(o?.role==="assistant"&&o.content?.[0]?.text==="{"&&(n=!0),!n){let a=j(d[0]?.content);"Warmup"===a&&(n=!0)}if(!n&&1===d.length&&d[0]?.role==="user"){let a=j(d[0]?.content);"count"===a&&(n=!0)}if(!n&&h.C8?.length){let a=d.filter(a=>"user"===a.role).map(a=>j(a.content)).join(" ");h.C8.some(b=>a.includes(b))&&(n=!0)}if(!n)return null;let p=(0,e.Tz)(a);return!1!==a.stream?function(a,b){let c=l(b),d=(0,f.Ws)(a);d.model=b;let e=m(c),h=[];for(let b of e){let c=(0,f.Y8)(g.h.OPENAI,a,b,d);if(c?.length>0)for(let b of c)h.push((0,i.v8)(b,a))}let j=(0,f.Y8)(g.h.OPENAI,a,null,d);if(j?.length>0)for(let b of j)h.push((0,i.v8)(b,a));return h.push("data: [DONE]\n\n"),{success:!0,response:new Response(h.join(""),{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}}(p,b):function(a,b){let c=l(b);if(a===g.h.OPENAI)return{success:!0,response:new Response(JSON.stringify(c),{headers:{"Content-Type":"application/json"}})};let d=(0,f.Ws)(a);d.model=b;let e=m(c),h=[];for(let b of e){let c=(0,f.Y8)(g.h.OPENAI,a,b,d);c?.length>0&&h.push(...c)}let i=(0,f.Y8)(g.h.OPENAI,a,null,d);i?.length>0&&h.push(...i);let j=function(a,b){if(!a||0===a.length)return l("unknown");let c=a[a.length-1];if(b===g.h.CLAUDE&&a.find(a=>"message_stop"===a.type)){a.find(a=>"content_block_delta"===a.type);let b=a.find(a=>"message_delta"===a.type),d=a.find(a=>"message_start"===a.type);d?.message&&(c=d.message,b?.usage&&(c.usage=b.usage))}return c}(h,a);return{success:!0,response:new Response(JSON.stringify(j),{headers:{"Content-Type":"application/json"}})}}(p,b)}function l(a){let b=`chatcmpl-${Date.now()}`,c=Math.floor(Date.now()/1e3);return{id:b,object:"chat.completion",created:c,model:a,choices:[{index:0,message:{role:"assistant",content:"CLI Command Execution: Clear Terminal"},finish_reason:"stop"}],usage:{prompt_tokens:1,completion_tokens:1,total_tokens:2}}}function m(a){let{id:b,created:c,model:d,choices:e}=a,f=e[0].message.content;return[{id:b,object:"chat.completion.chunk",created:c,model:d,choices:[{index:0,delta:{role:"assistant",content:f},finish_reason:null}]},{id:b,object:"chat.completion.chunk",created:c,model:d,choices:[{index:0,delta:{},finish_reason:"stop"}],usage:a.usage}]}i=(j.then?(await j)():j)[0],d()}catch(a){d(a)}})},83002:(a,b,c)=>{c.d(b,{CS:()=>j,Jl:()=>e});var d=c(55120);let e="omniroute_web_search",f=new Set(["web_search","web_search_preview"]),g={low:5,medium:8,high:10};function h(a){return a&&"object"==typeof a&&!Array.isArray(a)?a:{}}function i(a){let b=h(a),c="string"==typeof b.type?b.type:"";return f.has(c)&&!b.function}function j(a,b){var c,j;let k,l,m,n,o=Array.isArray(a.tools)?a.tools:null;if(!o||0===o.length)return{body:a,fallback:{enabled:!1,toolName:null,convertedToolCount:0}};let p=o.filter(i);if(0===p.length||function({targetFormat:a,nativeCodexPassthrough:b}){return!!b||a===d.h.GEMINI}(b))return{body:a,fallback:{enabled:!1,toolName:null,convertedToolCount:0}};let q=new Set,r=o.filter(a=>{if(i(a))return!1;let b=h(a),c=h(b.function),d="string"==typeof c.name?c.name:"string"==typeof b.name?b.name:"";return d.trim().length>0&&q.add(d.trim()),!0});q.has(e)||r.unshift({type:"function",function:{name:e,description:(k=!1!==(j=c=h(p[0])).external_web_access,l=g["string"==typeof j.search_context_size?j.search_context_size.trim().toLowerCase():""]||g.medium,`Search the ${k?"public web":"configured search index"} for recent, factual information and return cited results. Use this when the answer depends on current events, external documents, or fresh facts. If max_results is omitted, prefer about ${l} results.`),parameters:{type:"object",additionalProperties:!1,properties:{query:{type:"string",description:"The web search query to execute."},search_type:{type:"string",enum:["web","news"],description:"Use 'news' for recent headlines or reporting; otherwise use 'web'."},max_results:{type:"integer",minimum:1,maximum:20,default:g["string"==typeof c.search_context_size?c.search_context_size.trim().toLowerCase():""]||g.medium,description:"Maximum number of results to retrieve."},country:{type:"string",description:"Optional 2-letter country code for localization, e.g. US or BR."},language:{type:"string",description:"Optional language code such as en or pt-BR."},time_range:{type:"string",enum:["any","day","week","month","year"],description:"Optional recency filter."},filters:{type:"object",additionalProperties:!1,properties:{include_domains:{type:"array",items:{type:"string"},description:"Optional list of domains to include."},exclude_domains:{type:"array",items:{type:"string"},description:"Optional list of domains to exclude."}}}},required:["query"]}}});let s={...a,tools:r};return n="string"==typeof(m=h(a.tool_choice)).type?m.type:"",f.has(n)&&(s.tool_choice={type:"function",function:{name:e}}),{body:s,fallback:{enabled:!0,toolName:e,convertedToolCount:p.length}}}},85040:(a,b,c)=>{function d(a){if(!a)return"Unknown Account";let b="string"==typeof a.name&&a.name.trim()||"string"==typeof a.displayName&&a.displayName.trim()||"string"==typeof a.email&&a.email.trim();return b||("string"==typeof a.id&&a.id?`Account #${a.id.slice(0,6)}`:"Unknown Account")}function e(a,b){if(b?.name?.trim())return b.name.trim();if(b?.prefix?.trim())return b.prefix.trim();if(!a)return"Unknown Provider";let c=a.match(/^(openai|anthropic)-compatible-(?:chat|responses)-[0-9a-f-]{10,}$/i);return c?`Compatible (${c[1]})`:/^anthropic-compatible-cc-[0-9a-f-]{10,}$/i.test(a)?"CC Compatible":a}c.d(b,{B:()=>d,x:()=>e})},85276:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{PH:()=>w,SF:()=>z,dr:()=>x,f9:()=>B,wJ:()=>A,wt:()=>C});var e=c(33364),f=c(44963),g=c(82742),h=c(1213),i=c(53048),j=c(8959),k=c(37544),l=c(86181),m=c(94046),n=a([e,f,g,j,k]);[e,f,g,j,k]=n.then?(await n)():n;let D=new Set(["glm","glmt","minimax","minimax-cn","crof"]),E="provider_limits_auto_sync_last_run";function o(a){return null!==a&&"object"==typeof a&&!Array.isArray(a)}function p(a,b,c=new Date().toISOString()){return{quotas:o(a.quotas)?a.quotas:null,plan:a.plan??null,message:"string"==typeof a.message?a.message:null,fetchedAt:c,source:b}}function q(a){return!!a&&!!a.provider&&!!j.wb.includes(a.provider)&&("oauth"===a.authType||"apikey"===a.authType&&D.has(a.provider))}function r(a,b){return Object.assign(a,{status:b})}async function s(){try{let a=await (0,i.D1)();if(!a)return;await (0,f.AF)(a)}catch(a){console.error("[ProviderLimits] Error syncing refreshed credentials to cloud:",a)}}async function t(a){let b=(0,k.SB)(a.provider),c={accessToken:a.accessToken,refreshToken:a.refreshToken,expiresAt:a.tokenExpiresAt||a.expiresAt||null,providerSpecificData:a.providerSpecificData,copilotToken:a.providerSpecificData?.copilotToken,copilotTokenExpiresAt:a.providerSpecificData?.copilotTokenExpiresAt};if(!b.needsRefresh(c))return{connection:a,refreshed:!1};let d=await b.refreshCredentials(c,console);if(!d){if("github"===a.provider&&a.accessToken)return{connection:a,refreshed:!1};throw r(Error("Failed to refresh credentials. Please re-authorize the connection."),401)}let f={updatedAt:new Date().toISOString()};if(d.accessToken&&(f.accessToken=d.accessToken),d.refreshToken&&(f.refreshToken=d.refreshToken),d.expiresIn){let a=new Date(Date.now()+1e3*d.expiresIn).toISOString();f.expiresAt=a,f.tokenExpiresAt=a}else d.expiresAt&&(f.expiresAt=d.expiresAt,f.tokenExpiresAt=d.expiresAt);return(d.copilotToken||d.copilotTokenExpiresAt)&&(f.providerSpecificData={...a.providerSpecificData||{},copilotToken:d.copilotToken,copilotTokenExpiresAt:d.copilotTokenExpiresAt}),await (0,e.rjy)(a.id,f),{connection:{...a,...f,providerSpecificData:f.providerSpecificData||a.providerSpecificData},refreshed:!0}}async function u(a,b){let c="string"==typeof b.message?b.message.toLowerCase():"";if((c.includes("token expired")||c.includes("access denied")||c.includes("re-authenticate")||c.includes("unauthorized"))&&"expired"!==a.testStatus)try{await (0,e.rjy)(a.id,{testStatus:"expired",lastErrorType:"token_expired",lastErrorAt:new Date().toISOString()})}catch(a){console.error("[ProviderLimits] Failed to sync expired status to DB:",a)}}async function v(a,b){let c=(0,h.pI)(a,b);return c?(await (0,e.rjy)(a.id,c),{...a,...c}):a}function w(){let a=Number.parseInt(process.env.PROVIDER_LIMITS_SYNC_INTERVAL_MINUTES??"",10);return Number.isFinite(a)&&a>0?a:70}async function x(){try{let a=(await (0,e.getSettings)())[E];return"string"==typeof a&&a.trim()?a:null}catch{return null}}async function y(a){await (0,e.Xx7)({[E]:a})}function z(){return(0,e.hX7)()}async function A(a){var b;let c,d=await (0,e.McZ)(a);if(!d)throw r(Error("Connection not found"),404);if(!q(d))throw r(Error("Usage not available for this connection"),400);if("oauth"!==d.authType){let b=await (0,l.m)(d);return o(b.quotas)&&(0,g.fr)(a,d.provider,b.quotas),await u(d,b),{connection:d=await v(d,b),usage:b}}let f=await (0,e.YDv)(a),h=async a=>(0,m.jf)(a,async()=>{let a=d,b=await t(a);a=b.connection,b.refreshed&&await s();let c=await (0,l.m)(a);return d=a,{usage:c}}),i=f?.proxy||null;try{c=await h(i)}catch(d){let b=d?.message==="fetch failed"||d?.code==="PROXY_UNREACHABLE"||d?.code==="UND_ERR_CONNECT_TIMEOUT"||d?.cause?.code==="ECONNREFUSED";if(i&&b)console.warn(`[ProviderLimits] Proxy fetch threw for ${a}, retrying without proxy:`,d?.message),c=await h(null);else throw d}return i&&(b=c.usage?.message,"string"==typeof b&&(b.includes("fetch failed")||b.includes("ECONNREFUSED")||b.includes("ETIMEDOUT")||b.includes("Proxy unreachable")||b.includes("UND_ERR_CONNECT_TIMEOUT")))&&(console.warn(`[ProviderLimits] Proxy usage returned network error for ${a}, retrying without proxy:`,c.usage.message),c=await h(null)),o(c.usage.quotas)&&(0,g.fr)(a,d.provider,c.usage.quotas),await u(d,c.usage),{connection:d=await v(d,c.usage),usage:c.usage}}async function B(a,b="manual"){let{connection:c,usage:d}=await A(a),f=p(d,b);return(0,e.QBr)(a,f),{connection:c,usage:d,cache:f}}async function C(a={}){let{source:b="manual",concurrency:c=5}=a,d=(await (0,e.getProviderConnections)({isActive:!0})).filter(q),f=[],g={},h={};for(let a=0;a<d.length;a+=c){let e=d.slice(a,a+c);(await Promise.allSettled(e.map(async a=>{let{usage:c}=await A(a.id),d=p(c,b);return{connectionId:a.id,cache:d}}))).forEach((a,b)=>{let c=e[b]?.id;if(!c)return;if("fulfilled"===a.status){f.push({connectionId:a.value.connectionId,entry:a.value.cache}),g[a.value.connectionId]=a.value.cache;return}let d=a.reason;h[c]=d?.message||"Failed to refresh provider limits"})}return f.length>0&&(0,e.cRz)(f),"scheduled"===b&&await y(new Date().toISOString()),{total:d.length,succeeded:f.length,failed:d.length-f.length,caches:g,errors:h}}d()}catch(a){d(a)}})},87567:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{B:()=>m});var e=c(77044),f=c(67600),g=c(85040),h=c(18620),i=a([f]);function j(a){return a&&"object"==typeof a&&!Array.isArray(a)?a:{}}function k(a){if("number"==typeof a&&Number.isFinite(a))return a;if("string"==typeof a&&a.trim().length>0){let b=Number(a);return Number.isFinite(b)?b:0}return 0}function l(a){return"string"==typeof a?a:""}async function m(){let a=(0,e.sm)().prepare("SELECT * FROM usage_history ORDER BY timestamp ASC").all(),{getProviderConnections:b}=await Promise.all([c.e(56197),c.e(22073),c.e(33364),c.e(36009)]).then(c.bind(c,33364)),d=[];try{let a=await b();d=Array.isArray(a)?a:[]}catch{}let i={};for(let a of d){let b=j(a),c=l(b.id);c&&(i[c]=l(b.name)||l(b.email)||c)}let m=(0,f._w)(),n={totalRequests:a.length,totalPromptTokens:0,totalCompletionTokens:0,totalCost:0,byProvider:{},byModel:{},byAccount:{},byApiKey:{},last10Minutes:[],pending:m,activeRequests:[]};for(let[a,b]of Object.entries(m.byAccount))for(let[c,d]of Object.entries(b))if(d>0){let b=i[a]||(0,g.B)({id:a}),e=c.match(/^(.*) \((.*)\)$/);n.activeRequests.push({model:e?e[1]:c,provider:e?e[2]:"unknown",account:b,count:d})}let o=new Date,p=new Date(6e4*Math.floor(o.getTime()/6e4)),q={};for(let a=0;a<10;a++){let b=new Date(p.getTime()-(9-a)*6e4).getTime();q[b]={requests:0,promptTokens:0,completionTokens:0,cost:0},n.last10Minutes.push(q[b])}let r=new Date(p.getTime()-54e4);for(let b of a){let a=j(b),c=l(a.provider)||"unknown",d=l(a.model)||"unknown",e=l(a.timestamp)||new Date(0).toISOString(),f=l(a.connection_id)||null,m=l(a.api_key_id)||null,p=l(a.api_key_name)||null,s=k(a.tokens_input),t=k(a.tokens_output),u=new Date(e),v={input:k(a.tokens_input),output:k(a.tokens_output),cacheRead:k(a.tokens_cache_read),cacheCreation:k(a.tokens_cache_creation),reasoning:k(a.tokens_reasoning)},w=await (0,h.yN)(c,d,v);if(n.totalPromptTokens+=s,n.totalCompletionTokens+=t,n.totalCost+=w,u>=r&&u<=o){let a=6e4*Math.floor(u.getTime()/6e4);q[a]&&(q[a].requests++,q[a].promptTokens+=s,q[a].completionTokens+=t,q[a].cost+=w)}n.byProvider[c]||(n.byProvider[c]={requests:0,promptTokens:0,completionTokens:0,cost:0}),n.byProvider[c].requests++,n.byProvider[c].promptTokens+=s,n.byProvider[c].completionTokens+=t,n.byProvider[c].cost+=w;let x=c?`${d} (${c})`:d;if(n.byModel[x]||(n.byModel[x]={requests:0,promptTokens:0,completionTokens:0,cost:0,rawModel:d,provider:c,lastUsed:e}),n.byModel[x].requests++,n.byModel[x].promptTokens+=s,n.byModel[x].completionTokens+=t,n.byModel[x].cost+=w,new Date(e)>new Date(n.byModel[x].lastUsed||e)&&(n.byModel[x].lastUsed=e),f){let a=i[f]||(0,g.B)({id:f}),b=`${d} (${c} - ${a})`;n.byAccount[b]||(n.byAccount[b]={requests:0,promptTokens:0,completionTokens:0,cost:0,rawModel:d,provider:c,connectionId:f,accountName:a,lastUsed:e}),n.byAccount[b].requests++,n.byAccount[b].promptTokens+=s,n.byAccount[b].completionTokens+=t,n.byAccount[b].cost+=w,new Date(e)>new Date(n.byAccount[b].lastUsed||e)&&(n.byAccount[b].lastUsed=e)}if(m||p){let a=p||m||"unknown",b=m||null,c=b?`${a} (${b})`:a;n.byApiKey[c]||(n.byApiKey[c]={requests:0,promptTokens:0,completionTokens:0,cost:0,apiKeyId:b,apiKeyName:a,lastUsed:e}),n.byApiKey[c].requests++,n.byApiKey[c].promptTokens+=s,n.byApiKey[c].completionTokens+=t,n.byApiKey[c].cost+=w,new Date(e)>new Date(n.byApiKey[c].lastUsed||e)&&(n.byApiKey[c].lastUsed=e)}}return n}f=(i.then?(await i)():i)[0],d()}catch(a){d(a)}})},89122:(a,b,c)=>{function d(a){if(!a)return{};let b={..."function"==typeof a.entries?Object.fromEntries(a.entries()):{...a}},c=["authorization","x-api-key","cookie","token"];for(let a of Object.keys(b)){let d=a.toLowerCase();if(!c.some(a=>d.includes(a)))continue;let e=b[a];"string"==typeof e&&e.length>20?b[a]=`${e.slice(0,10)}...${e.slice(-5)}`:e&&(b[a]="[REDACTED]")}return b}function e(a,b=0){if(null==a)return a;if("string"==typeof a)return function(a,b=65536){return a.length<=b?a:`${a.slice(0,Math.floor(b/2))}
|
|
67
67
|
[...truncated ${a.length-b} chars...]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
exports.id=19849,exports.ids=[19849],exports.modules={954:(a,b,c)=>{"use strict";c.d(b,{D:()=>e,U:()=>f});let d=new Set;function e(a){d.add(a)}function f(){for(let a of d)try{a()}catch(a){console.warn("[DB] Failed to reset module state:",a)}}},3845:(a,b,c)=>{var d={"./ar.json":[48464,48464],"./bg.json":[60944,60944],"./bn.json":[62215,62215],"./cs.json":[26929,26929],"./da.json":[18976,18976],"./de.json":[22372,22372],"./en.json":[31960,31960],"./es.json":[87011,87011],"./fa.json":[2238,2238],"./fi.json":[96118,96118],"./fr.json":[53911,53911],"./gu.json":[3099,3099],"./he.json":[28867,51248],"./hi.json":[18876,18876],"./hu.json":[50496,50496],"./id.json":[16930,16930],"./in.json":[30708,30708],"./it.json":[32594,32594],"./ja.json":[37650,37650],"./ko.json":[79837,79837],"./mr.json":[42428,42428],"./ms.json":[55752,33371],"./nl.json":[35097,35097],"./no.json":[88220,88220],"./phi.json":[28706,28706],"./pl.json":[99119,99119],"./pt-BR.json":[41990,41990],"./pt.json":[11623,11623],"./ro.json":[71880,71880],"./ru.json":[61526,61526],"./sk.json":[25945,25945],"./sv.json":[85094,85094],"./sw.json":[14509,14509],"./ta.json":[64112,64112],"./te.json":[7412,7412],"./th.json":[55047,55047],"./tr.json":[58509,58509],"./uk-UA.json":[11584,11584],"./ur.json":[96116,96116],"./vi.json":[22214,22214],"./zh-CN.json":[65521,65521]};function e(a){if(!c.o(d,a))return Promise.resolve().then(()=>{var b=Error("Cannot find module '"+a+"'");throw b.code="MODULE_NOT_FOUND",b});var b=d[a],e=b[0];return c.e(b[1]).then(()=>c.t(e,19))}e.keys=()=>Object.keys(d),e.id=3845,a.exports=e},7224:(a,b,c)=>{Promise.resolve().then(c.bind(c,67045))},7396:(a,b,c)=>{Promise.resolve().then(c.bind(c,95127))},8979:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/OmniRoute/OmniRoute/src/app/not-found.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/OmniRoute/OmniRoute/src/app/not-found.tsx","default")},12608:(a,b,c)=>{Promise.resolve().then(c.bind(c,8979))},22746:(a,b,c)=>{"use strict";c.d(b,{CardSkeleton:()=>k,PageLoading:()=>i,Skeleton:()=>j,Spinner:()=>h,default:()=>l});var d=c(48249),e=c(77360),f=c(31846);let g={sm:"size-4",md:"size-6",lg:"size-8",xl:"size-12"};function h({size:a="md",className:b,label:c}){let i=(0,e.c)("common"),j=c??i("loading");return(0,d.jsxs)("span",{role:"status","aria-live":"polite","aria-label":j,className:(0,f.cn)("inline-flex",b),children:[(0,d.jsx)("span",{className:"sr-only",children:j}),(0,d.jsx)("span",{"aria-hidden":"true",className:(0,f.cn)("material-symbols-outlined text-primary animate-spin motion-reduce:animate-none",g[a]),children:"progress_activity"})]})}function i({message:a,className:b}){let c=(0,e.c)("common");return(0,d.jsxs)("div",{className:(0,f.cn)("fixed inset-0 z-50 flex flex-col items-center justify-center bg-bg px-6",b),role:"status","aria-live":"polite","aria-busy":"true",children:[(0,d.jsx)(h,{size:"xl"}),(0,d.jsx)("p",{className:"mt-4 text-text-muted text-center",children:a??c("loading")})]})}function j({className:a,...b}){return(0,d.jsx)("div",{"aria-hidden":"true",className:(0,f.cn)("animate-pulse motion-reduce:animate-none rounded-lg bg-border",a),...b})}function k(){return(0,d.jsxs)("div",{className:"p-6 rounded-xl border border-border bg-surface","aria-hidden":"true",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-4 gap-4",children:[(0,d.jsx)(j,{className:"h-4 w-24"}),(0,d.jsx)(j,{className:"size-10 rounded-lg"})]}),(0,d.jsx)(j,{className:"h-8 w-16 mb-2"}),(0,d.jsx)(j,{className:"h-3 w-20"})]})}function l({type:a="spinner",className:b,message:c,size:e,label:f,...g}){switch(a){case"page":return(0,d.jsx)(i,{message:c,className:b});case"skeleton":return(0,d.jsx)(j,{className:b,...g});case"card":return(0,d.jsx)(k,{});default:return(0,d.jsx)(h,{size:e,className:b,label:f})}}},31714:(a,b,c)=>{"use strict";c.d(b,{Sc:()=>i,getCachedSettings:()=>h});class d{constructor(a){this.cache=new Map,this.ttlMs=a}get(a){let b=this.cache.get(a);if(b)return Date.now()>b.expiresAt?void this.cache.delete(a):b.value}set(a,b){this.cache.set(a,{value:b,expiresAt:Date.now()+this.ttlMs})}invalidate(a){a?this.cache.delete(a):this.cache.clear()}}let e=new d(5e3),f=new d(3e4),g=new d(5e3);async function h(){let a=e.get("settings");if(a)return a;let{getSettings:b}=await Promise.all([c.e(23969),c.e(9679)]).then(c.bind(c,9679)),d=await b();return e.set("settings",d),d}function i(a){a&&"settings"!==a||e.invalidate(),a&&"pricing"!==a||f.invalidate(),a&&"connections"!==a||g.invalidate()}new d(5e3)},31846:(a,b,c)=>{"use strict";function d(...a){return a.filter(Boolean).join(" ").replace(/\s+/g," ").trim()}c.d(b,{cn:()=>d})},32444:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call ThemeProvider() from the server but ThemeProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/OmniRoute/OmniRoute/src/shared/components/ThemeProvider.tsx","ThemeProvider")},39710:(a,b,c)=>{Promise.resolve().then(c.bind(c,97507))},39948:(a,b,c)=>{"use strict";c.d(b,{Dp:()=>x,eF:()=>w,k3:()=>o,k6:()=>n,lR:()=>v,mG:()=>r});var d=c(87550),e=c.n(d),f=c(33873),g=c.n(f),h=c(29021),i=c.n(h),j=c(77044),k=c(954);let l=0,m=new Set(["1","true","yes","on"]);function n(){var a=process.env.DB_BACKUP_MAX_FILES;if(!a)return 20;let b=Number.parseInt(a,10);return Number.isInteger(b)&&b>0?b:20}function o(){var a=process.env.DB_BACKUP_RETENTION_DAYS;if(void 0===a)return 0;let b=Number.parseInt(a,10);return Number.isInteger(b)&&b>=0?b:0}function p(){return j.NJ||g().join(j.nJ,"db_backups")}function q(a){if(!i().existsSync(a))return[];let b=new Map;for(let c of i().readdirSync(a)){let d;if(!c.startsWith("db_"))continue;let e=c.endsWith("-wal")||c.endsWith("-shm")?c.slice(0,-4):c.endsWith("-journal")?c.slice(0,-8):c,f=g().join(a,c);try{d=i().statSync(f)}catch{continue}let h=b.get(e)||{base:e,hasPrimary:!1,primaryMtimeMs:0,latestMtimeMs:0,files:[]};h.files.push(c),h.latestMtimeMs=Math.max(h.latestMtimeMs,d.mtimeMs),c===e&&c.endsWith(".sqlite")&&(h.hasPrimary=!0,h.primaryMtimeMs=d.mtimeMs),b.set(e,h)}return[...b.values()]}function r(a){let b=p();if(!i().existsSync(b))return{deletedBackupFamilies:0,deletedFiles:0,keptBackupFamilies:0,maxFiles:a?.maxFiles??n(),retentionDays:a?.retentionDays??o()};let c=Math.max(1,a?.maxFiles??n()),d=Math.max(0,a?.retentionDays??o()),e=d>0?Date.now()-24*d*36e5:0,f=q(b),h=new Set(f.filter(a=>a.hasPrimary).sort((a,b)=>b.primaryMtimeMs-a.primaryMtimeMs).slice(0,c).map(a=>a.base)),j=0,k=0;for(let a of f){let c=a.hasPrimary&&!h.has(a.base),f=d>0&&a.latestMtimeMs<e,l=!a.hasPrimary;if(c||f||l)for(let c of(j+=1,a.files))try{i().unlinkSync(g().join(b,c)),k+=1}catch{}}return{deletedBackupFamilies:j,deletedFiles:k,keptBackupFamilies:q(b).filter(a=>a.hasPrimary).length,maxFiles:c,retentionDays:d}}function s(){if("u">typeof process&&(void 0!==process.env.VITEST||process.argv.some(a=>a.includes("test"))))return!0;let a=process.env.DISABLE_SQLITE_AUTO_BACKUP;return!!a&&m.has(a.trim().toLowerCase())}function t(a){return new Promise(b=>setTimeout(b,a))}async function u(a,b){let c=Math.max(1,b?.maxAttempts??10),d=new Set(b?.retryableCodes??["EBUSY","EPERM"]),e=Math.max(0,b?.baseDelayMs??100);for(let b=0;b<c;b++)try{i().existsSync(a)&&i().unlinkSync(a);return}catch(f){let a=f&&"object"==typeof f&&"code"in f?f.code:"";if("ENOENT"===a)return;if(d.has(String(a))&&b<c-1)await t(e*(b+1));else throw f}}function v(a="auto"){try{if(j.I8||j.m1||!j.oh||!i().existsSync(j.oh)||"manual"!==a&&s())return null;let b=i().statSync(j.oh);if(b.size<4096)return console.warn(`[DB] Backup SKIPPED — DB too small (${b.size}B)`),null;let c=Date.now();if("manual"!==a&&"pre-restore"!==a&&c-l<36e5)return null;l=c;let d=p();if(i().existsSync(d)||i().mkdirSync(d,{recursive:!0}),"manual"!==a&&"pre-restore"!==a){let a=i().readdirSync(d).filter(a=>a.startsWith("db_")&&a.endsWith(".sqlite")).sort();if(a.length>0){let c=a[a.length-1],e=i().statSync(g().join(d,c));if(e.size>4096&&b.size<.5*e.size)return console.warn(`[DB] Backup SKIPPED — DB shrank from ${e.size}B to ${b.size}B`),null}}let e=new Date().toISOString().replace(/[:.]/g,"-"),f=g().join(d,`db_${e}_${a}.sqlite`);return(0,j.sm)().backup(f).then(()=>{console.log(`[DB] Backup created: ${f} (${b.size} bytes)`),r()}).catch(a=>{let b=a instanceof Error?a.message:String(a);console.error("[DB] Backup failed:",b)}),{filename:g().basename(f),size:b.size}}catch(a){return console.error("[DB] Backup failed:",a instanceof Error?a.message:String(a)),null}}async function w(){let a=p();try{if(!i().existsSync(a))return[];return i().readdirSync(a).filter(a=>a.startsWith("db_")&&a.endsWith(".sqlite")).sort().reverse().map(b=>{let c=g().join(a,b),d=i().statSync(c),f=b.match(/^db_(.+?)_([^.]+)\.sqlite$/),h=f?f[2]:"unknown",j=0;try{let a=new(e())(c,{readonly:!0}),b=a.prepare("SELECT COUNT(*) as cnt FROM provider_connections").get();j=b?.cnt||0,a.close()}catch{}return{id:b,filename:b,createdAt:d.mtime.toISOString(),size:d.size,reason:h,connectionCount:j}})}catch{return[]}}async function x(a){let b=p();if(!a.startsWith("db_")||!a.endsWith(".sqlite")||a.includes(g().sep)||a.includes("/"))throw Error("Invalid backup ID");let c=g().resolve(b,a);if(!c.startsWith(g().resolve(b)+g().sep)&&c!==g().resolve(b))throw Error("Invalid backup ID: path traversal detected");if(!i().existsSync(c))throw Error(`Backup not found: ${a}`);try{let a=new(e())(c,{readonly:!0}),b=a.pragma("integrity_check");if(a.close(),b[0]?.integrity_check!=="ok")throw Error("Backup integrity check failed")}catch(b){if(b instanceof Error&&"Backup integrity check failed"===b.message)throw b;let a=b instanceof Error?b.message:String(b);throw Error(`Backup file is corrupt: ${a}`)}if(!s()){l=0;let a=p();if(j.oh&&i().existsSync(j.oh)&&i().statSync(j.oh).size>=4096){i().existsSync(a)||i().mkdirSync(a,{recursive:!0});let b=g().join(a,`db_${new Date().toISOString().replace(/[:.]/g,"-")}_pre-restore.sqlite`),c=(0,j.sm)();await c.backup(b),l=Date.now()}}(0,j.jX)(),(0,k.U)();let d=j.oh;if(!d)throw Error("SQLITE_FILE is unavailable in local backup restore");for(let a of(await t(500),[d,`${d}-wal`,`${d}-shm`,`${d}-journal`]))a&&await u(a);i().copyFileSync(c,d);let f=(0,j.sm)(),h=f.prepare("SELECT COUNT(*) as cnt FROM provider_connections").get()?.cnt||0,m=f.prepare("SELECT COUNT(*) as cnt FROM provider_nodes").get()?.cnt||0,n=f.prepare("SELECT COUNT(*) as cnt FROM combos").get()?.cnt||0,o=f.prepare("SELECT COUNT(*) as cnt FROM api_keys").get()?.cnt||0;return console.log(`[DB] Restored backup: ${a} (${h} connections)`),{restored:!0,backupId:a,connectionCount:h,nodeCount:m,comboCount:n,apiKeyCount:o}}},44438:(a,b,c)=>{Promise.resolve().then(c.bind(c,64385))},47336:(a,b,c)=>{"use strict";c.d(b,{v:()=>d,B:()=>e});let d={name:"OmniRoute",description:"AI Gateway for Multi-Provider LLMs",version:"3.7.2"},e={storageKey:"theme",defaultTheme:"system"}},47695:(a,b,c)=>{"use strict";c.d(b,{A:()=>i,F:()=>h});var d=c(31417),e=c(300),f=c(47336);let g=(0,d.v)()((0,e.Zr)((a,b)=>({theme:f.B.defaultTheme,colorTheme:"coral",customColor:"#3b82f6",setTheme:b=>{a({theme:b})},setColorTheme:c=>{a({colorTheme:c}),b().customColor},setCustomColorTheme:b=>{let c=function(a){let b=(a||"").trim(),c=b.startsWith("#")?b:`#${b}`;return/^#([0-9a-fA-F]{6})$/.test(c)?c.toLowerCase():"#3b82f6"}(b);a({colorTheme:"custom",customColor:c})},toggleTheme:()=>{let c="dark"===b().theme?"light":"dark";a({theme:c})},initTheme:()=>{let{theme:a,colorTheme:c,customColor:d}=b()}}),{name:f.B.storageKey})),h={coral:"#e54d5e",blue:"#3b82f6",red:"#ef4444",green:"#22c55e",violet:"#8b5cf6",orange:"#f97316",cyan:"#06b6d4"},i=g},60548:(a,b,c)=>{Promise.resolve().then(c.bind(c,65909))},61135:()=>{},64385:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/OmniRoute/OmniRoute/src/app/error.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/OmniRoute/OmniRoute/src/app/error.tsx","default")},65909:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>f});var d=c(48249),e=c(22746);function f(){return(0,d.jsx)(e.PageLoading,{message:"Loading OmniRoute..."})}},67045:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(48249);function e({error:a,reset:b}){return(0,d.jsx)("html",{lang:"en",children:(0,d.jsx)("body",{className:"flex flex-col items-center justify-center min-h-screen p-6 bg-bg text-text-main font-[system-ui,-apple-system,sans-serif] text-center m-0",children:(0,d.jsxs)("main",{role:"alert","aria-live":"assertive",className:"flex flex-col items-center",children:[(0,d.jsx)("div",{className:"text-[64px] mb-4","aria-hidden":"true",children:"⚠️"}),(0,d.jsx)("h1",{className:"text-[28px] font-bold mb-2",children:"Something went wrong"}),(0,d.jsx)("p",{className:"text-[15px] text-text-muted max-w-[400px] leading-relaxed mb-6",children:"An unexpected error occurred. This has been logged and our team will investigate."}),!1,(0,d.jsxs)("div",{className:"flex flex-col sm:flex-row gap-3",children:[(0,d.jsx)("button",{onClick:b,"aria-label":"Retry loading the page",className:"px-8 py-3 rounded-[10px] text-white border-none text-sm font-semibold cursor-pointer transition-transform duration-200 motion-reduce:transition-none motion-reduce:transform-none shadow-warm hover:-translate-y-0.5 bg-gradient-to-br from-primary to-primary-hover focus:outline-2 focus:outline-offset-2 focus:outline-primary",children:"Try Again"}),(0,d.jsx)("a",{href:"/status",className:"px-8 py-3 rounded-[10px] text-sm font-semibold border border-[var(--color-border)] hover:bg-[var(--color-bg-alt)] no-underline focus:outline-2 focus:outline-offset-2 focus:outline-primary","aria-label":"Open system status",children:"System Status"})]})]})})})}},69199:(a,b,c)=>{Promise.resolve().then(c.bind(c,86392)),Promise.resolve().then(c.bind(c,32444))},73857:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g});var d=c(48249),e=c(2116),f=c.n(e);function g(){return(0,d.jsxs)("div",{className:"flex flex-col items-center justify-center min-h-screen p-6 bg-bg text-text-main text-center",role:"main","aria-labelledby":"not-found-title",children:[(0,d.jsx)("div",{className:"text-[96px] font-extrabold leading-none mb-2 bg-gradient-to-br from-primary to-primary-hover bg-clip-text text-transparent","aria-hidden":"true",children:"404"}),(0,d.jsx)("h1",{id:"not-found-title",className:"text-2xl font-semibold mb-2",children:"Page not found"}),(0,d.jsx)("p",{className:"text-[15px] text-text-muted max-w-[400px] leading-relaxed mb-8",children:"The page you're looking for doesn't exist or has been moved."}),(0,d.jsxs)("div",{className:"flex flex-col sm:flex-row items-center gap-3",children:[(0,d.jsx)(f(),{href:"/dashboard",className:"px-8 py-3 rounded-xl text-white text-sm font-medium no-underline transition-all duration-200 motion-reduce:transition-none shadow-warm hover:-translate-y-0.5 bg-gradient-to-br from-primary to-primary-hover hover:shadow-elevated focus:outline-2 focus:outline-offset-2 focus:outline-primary","aria-label":"Return to dashboard",children:"Go to Dashboard"}),(0,d.jsx)(f(),{href:"/status",className:"px-8 py-3 rounded-xl text-sm font-medium no-underline border border-border hover:bg-bg-alt transition-colors duration-200 motion-reduce:transition-none focus:outline-2 focus:outline-offset-2 focus:outline-primary","aria-label":"Open system status page",children:"System Status"})]})]})}},75146:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>f});var d=c(48249);c(67484);var e=c(47695);function f({children:a}){let{initTheme:b}=(0,e.A)();return(0,d.jsx)(d.Fragment,{children:a})}},76160:(a,b,c)=>{Promise.resolve().then(c.bind(c,73857))},76537:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>n,generateMetadata:()=>m});var d=c(5735),e=c(50609),f=c.n(e);c(61135);var g=c(32444),h=c(68625),i=c(62026),j=c(28440),k=c(83750),l=c(9679);async function m(){let a=await (0,l.getSettings)(),b=a?.instanceName||"OmniRoute";return{title:`${b} — AI Gateway for Multi-Provider LLMs`,description:"OmniRoute is an AI gateway for multi-provider LLMs. One endpoint for all your AI providers.",icons:{icon:a?.customFaviconUrl||a?.customFaviconBase64?"/api/settings/favicon":"/favicon.svg",apple:"/apple-touch-icon.svg"}}}async function n({children:a}){let b=await (0,i.A)(),c=await (0,j.A)(),e=k.rB.includes(b);return(0,d.jsxs)("html",{lang:b,dir:e?"rtl":"ltr",suppressHydrationWarning:!0,children:[(0,d.jsxs)("head",{children:[(0,d.jsx)("link",{rel:"preconnect",href:"https://fonts.googleapis.com"}),(0,d.jsx)("link",{rel:"preconnect",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),(0,d.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap",rel:"stylesheet"}),(0,d.jsx)("script",{dangerouslySetInnerHTML:{__html:`
|
|
1
|
+
exports.id=19849,exports.ids=[19849],exports.modules={954:(a,b,c)=>{"use strict";c.d(b,{D:()=>e,U:()=>f});let d=new Set;function e(a){d.add(a)}function f(){for(let a of d)try{a()}catch(a){console.warn("[DB] Failed to reset module state:",a)}}},3845:(a,b,c)=>{var d={"./ar.json":[48464,48464],"./bg.json":[60944,60944],"./bn.json":[62215,62215],"./cs.json":[26929,26929],"./da.json":[18976,18976],"./de.json":[22372,22372],"./en.json":[31960,31960],"./es.json":[87011,87011],"./fa.json":[2238,2238],"./fi.json":[96118,96118],"./fr.json":[53911,53911],"./gu.json":[3099,3099],"./he.json":[28867,51248],"./hi.json":[18876,18876],"./hu.json":[50496,50496],"./id.json":[16930,16930],"./in.json":[30708,30708],"./it.json":[32594,32594],"./ja.json":[37650,37650],"./ko.json":[79837,79837],"./mr.json":[42428,42428],"./ms.json":[55752,33371],"./nl.json":[35097,35097],"./no.json":[88220,88220],"./phi.json":[28706,28706],"./pl.json":[99119,99119],"./pt-BR.json":[41990,41990],"./pt.json":[11623,11623],"./ro.json":[71880,71880],"./ru.json":[61526,61526],"./sk.json":[25945,25945],"./sv.json":[85094,85094],"./sw.json":[14509,14509],"./ta.json":[64112,64112],"./te.json":[7412,7412],"./th.json":[55047,55047],"./tr.json":[58509,58509],"./uk-UA.json":[11584,11584],"./ur.json":[96116,96116],"./vi.json":[22214,22214],"./zh-CN.json":[65521,65521]};function e(a){if(!c.o(d,a))return Promise.resolve().then(()=>{var b=Error("Cannot find module '"+a+"'");throw b.code="MODULE_NOT_FOUND",b});var b=d[a],e=b[0];return c.e(b[1]).then(()=>c.t(e,19))}e.keys=()=>Object.keys(d),e.id=3845,a.exports=e},7224:(a,b,c)=>{Promise.resolve().then(c.bind(c,67045))},7396:(a,b,c)=>{Promise.resolve().then(c.bind(c,95127))},8979:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/OmniRoute/OmniRoute/src/app/not-found.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/OmniRoute/OmniRoute/src/app/not-found.tsx","default")},12608:(a,b,c)=>{Promise.resolve().then(c.bind(c,8979))},22746:(a,b,c)=>{"use strict";c.d(b,{CardSkeleton:()=>k,PageLoading:()=>i,Skeleton:()=>j,Spinner:()=>h,default:()=>l});var d=c(48249),e=c(77360),f=c(31846);let g={sm:"size-4",md:"size-6",lg:"size-8",xl:"size-12"};function h({size:a="md",className:b,label:c}){let i=(0,e.c)("common"),j=c??i("loading");return(0,d.jsxs)("span",{role:"status","aria-live":"polite","aria-label":j,className:(0,f.cn)("inline-flex",b),children:[(0,d.jsx)("span",{className:"sr-only",children:j}),(0,d.jsx)("span",{"aria-hidden":"true",className:(0,f.cn)("material-symbols-outlined text-primary animate-spin motion-reduce:animate-none",g[a]),children:"progress_activity"})]})}function i({message:a,className:b}){let c=(0,e.c)("common");return(0,d.jsxs)("div",{className:(0,f.cn)("fixed inset-0 z-50 flex flex-col items-center justify-center bg-bg px-6",b),role:"status","aria-live":"polite","aria-busy":"true",children:[(0,d.jsx)(h,{size:"xl"}),(0,d.jsx)("p",{className:"mt-4 text-text-muted text-center",children:a??c("loading")})]})}function j({className:a,...b}){return(0,d.jsx)("div",{"aria-hidden":"true",className:(0,f.cn)("animate-pulse motion-reduce:animate-none rounded-lg bg-border",a),...b})}function k(){return(0,d.jsxs)("div",{className:"p-6 rounded-xl border border-border bg-surface","aria-hidden":"true",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-4 gap-4",children:[(0,d.jsx)(j,{className:"h-4 w-24"}),(0,d.jsx)(j,{className:"size-10 rounded-lg"})]}),(0,d.jsx)(j,{className:"h-8 w-16 mb-2"}),(0,d.jsx)(j,{className:"h-3 w-20"})]})}function l({type:a="spinner",className:b,message:c,size:e,label:f,...g}){switch(a){case"page":return(0,d.jsx)(i,{message:c,className:b});case"skeleton":return(0,d.jsx)(j,{className:b,...g});case"card":return(0,d.jsx)(k,{});default:return(0,d.jsx)(h,{size:e,className:b,label:f})}}},31714:(a,b,c)=>{"use strict";c.d(b,{Sc:()=>i,getCachedSettings:()=>h});class d{constructor(a){this.cache=new Map,this.ttlMs=a}get(a){let b=this.cache.get(a);if(b)return Date.now()>b.expiresAt?void this.cache.delete(a):b.value}set(a,b){this.cache.set(a,{value:b,expiresAt:Date.now()+this.ttlMs})}invalidate(a){a?this.cache.delete(a):this.cache.clear()}}let e=new d(5e3),f=new d(3e4),g=new d(5e3);async function h(){let a=e.get("settings");if(a)return a;let{getSettings:b}=await Promise.all([c.e(23969),c.e(9679)]).then(c.bind(c,9679)),d=await b();return e.set("settings",d),d}function i(a){a&&"settings"!==a||e.invalidate(),a&&"pricing"!==a||f.invalidate(),a&&"connections"!==a||g.invalidate()}new d(5e3)},31846:(a,b,c)=>{"use strict";function d(...a){return a.filter(Boolean).join(" ").replace(/\s+/g," ").trim()}c.d(b,{cn:()=>d})},32444:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call ThemeProvider() from the server but ThemeProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/OmniRoute/OmniRoute/src/shared/components/ThemeProvider.tsx","ThemeProvider")},39710:(a,b,c)=>{Promise.resolve().then(c.bind(c,97507))},39948:(a,b,c)=>{"use strict";c.d(b,{Dp:()=>x,eF:()=>w,k3:()=>o,k6:()=>n,lR:()=>v,mG:()=>r});var d=c(87550),e=c.n(d),f=c(33873),g=c.n(f),h=c(29021),i=c.n(h),j=c(77044),k=c(954);let l=0,m=new Set(["1","true","yes","on"]);function n(){var a=process.env.DB_BACKUP_MAX_FILES;if(!a)return 20;let b=Number.parseInt(a,10);return Number.isInteger(b)&&b>0?b:20}function o(){var a=process.env.DB_BACKUP_RETENTION_DAYS;if(void 0===a)return 0;let b=Number.parseInt(a,10);return Number.isInteger(b)&&b>=0?b:0}function p(){return j.NJ||g().join(j.nJ,"db_backups")}function q(a){if(!i().existsSync(a))return[];let b=new Map;for(let c of i().readdirSync(a)){let d;if(!c.startsWith("db_"))continue;let e=c.endsWith("-wal")||c.endsWith("-shm")?c.slice(0,-4):c.endsWith("-journal")?c.slice(0,-8):c,f=g().join(a,c);try{d=i().statSync(f)}catch{continue}let h=b.get(e)||{base:e,hasPrimary:!1,primaryMtimeMs:0,latestMtimeMs:0,files:[]};h.files.push(c),h.latestMtimeMs=Math.max(h.latestMtimeMs,d.mtimeMs),c===e&&c.endsWith(".sqlite")&&(h.hasPrimary=!0,h.primaryMtimeMs=d.mtimeMs),b.set(e,h)}return[...b.values()]}function r(a){let b=p();if(!i().existsSync(b))return{deletedBackupFamilies:0,deletedFiles:0,keptBackupFamilies:0,maxFiles:a?.maxFiles??n(),retentionDays:a?.retentionDays??o()};let c=Math.max(1,a?.maxFiles??n()),d=Math.max(0,a?.retentionDays??o()),e=d>0?Date.now()-24*d*36e5:0,f=q(b),h=new Set(f.filter(a=>a.hasPrimary).sort((a,b)=>b.primaryMtimeMs-a.primaryMtimeMs).slice(0,c).map(a=>a.base)),j=0,k=0;for(let a of f){let c=a.hasPrimary&&!h.has(a.base),f=d>0&&a.latestMtimeMs<e,l=!a.hasPrimary;if(c||f||l)for(let c of(j+=1,a.files))try{i().unlinkSync(g().join(b,c)),k+=1}catch{}}return{deletedBackupFamilies:j,deletedFiles:k,keptBackupFamilies:q(b).filter(a=>a.hasPrimary).length,maxFiles:c,retentionDays:d}}function s(){if("u">typeof process&&(void 0!==process.env.VITEST||process.argv.some(a=>a.includes("test"))))return!0;let a=process.env.DISABLE_SQLITE_AUTO_BACKUP;return!!a&&m.has(a.trim().toLowerCase())}function t(a){return new Promise(b=>setTimeout(b,a))}async function u(a,b){let c=Math.max(1,b?.maxAttempts??10),d=new Set(b?.retryableCodes??["EBUSY","EPERM"]),e=Math.max(0,b?.baseDelayMs??100);for(let b=0;b<c;b++)try{i().existsSync(a)&&i().unlinkSync(a);return}catch(f){let a=f&&"object"==typeof f&&"code"in f?f.code:"";if("ENOENT"===a)return;if(d.has(String(a))&&b<c-1)await t(e*(b+1));else throw f}}function v(a="auto"){try{if(j.I8||j.m1||!j.oh||!i().existsSync(j.oh)||"manual"!==a&&s())return null;let b=i().statSync(j.oh);if(b.size<4096)return console.warn(`[DB] Backup SKIPPED — DB too small (${b.size}B)`),null;let c=Date.now();if("manual"!==a&&"pre-restore"!==a&&c-l<36e5)return null;l=c;let d=p();if(i().existsSync(d)||i().mkdirSync(d,{recursive:!0}),"manual"!==a&&"pre-restore"!==a){let a=i().readdirSync(d).filter(a=>a.startsWith("db_")&&a.endsWith(".sqlite")).sort();if(a.length>0){let c=a[a.length-1],e=i().statSync(g().join(d,c));if(e.size>4096&&b.size<.5*e.size)return console.warn(`[DB] Backup SKIPPED — DB shrank from ${e.size}B to ${b.size}B`),null}}let e=new Date().toISOString().replace(/[:.]/g,"-"),f=g().join(d,`db_${e}_${a}.sqlite`);return(0,j.sm)().backup(f).then(()=>{console.log(`[DB] Backup created: ${f} (${b.size} bytes)`),r()}).catch(a=>{let b=a instanceof Error?a.message:String(a);console.error("[DB] Backup failed:",b)}),{filename:g().basename(f),size:b.size}}catch(a){return console.error("[DB] Backup failed:",a instanceof Error?a.message:String(a)),null}}async function w(){let a=p();try{if(!i().existsSync(a))return[];return i().readdirSync(a).filter(a=>a.startsWith("db_")&&a.endsWith(".sqlite")).sort().reverse().map(b=>{let c=g().join(a,b),d=i().statSync(c),f=b.match(/^db_(.+?)_([^.]+)\.sqlite$/),h=f?f[2]:"unknown",j=0;try{let a=new(e())(c,{readonly:!0}),b=a.prepare("SELECT COUNT(*) as cnt FROM provider_connections").get();j=b?.cnt||0,a.close()}catch{}return{id:b,filename:b,createdAt:d.mtime.toISOString(),size:d.size,reason:h,connectionCount:j}})}catch{return[]}}async function x(a){let b=p();if(!a.startsWith("db_")||!a.endsWith(".sqlite")||a.includes(g().sep)||a.includes("/"))throw Error("Invalid backup ID");let c=g().resolve(b,a);if(!c.startsWith(g().resolve(b)+g().sep)&&c!==g().resolve(b))throw Error("Invalid backup ID: path traversal detected");if(!i().existsSync(c))throw Error(`Backup not found: ${a}`);try{let a=new(e())(c,{readonly:!0}),b=a.pragma("integrity_check");if(a.close(),b[0]?.integrity_check!=="ok")throw Error("Backup integrity check failed")}catch(b){if(b instanceof Error&&"Backup integrity check failed"===b.message)throw b;let a=b instanceof Error?b.message:String(b);throw Error(`Backup file is corrupt: ${a}`)}if(!s()){l=0;let a=p();if(j.oh&&i().existsSync(j.oh)&&i().statSync(j.oh).size>=4096){i().existsSync(a)||i().mkdirSync(a,{recursive:!0});let b=g().join(a,`db_${new Date().toISOString().replace(/[:.]/g,"-")}_pre-restore.sqlite`),c=(0,j.sm)();await c.backup(b),l=Date.now()}}(0,j.jX)(),(0,k.U)();let d=j.oh;if(!d)throw Error("SQLITE_FILE is unavailable in local backup restore");for(let a of(await t(500),[d,`${d}-wal`,`${d}-shm`,`${d}-journal`]))a&&await u(a);i().copyFileSync(c,d);let f=(0,j.sm)(),h=f.prepare("SELECT COUNT(*) as cnt FROM provider_connections").get()?.cnt||0,m=f.prepare("SELECT COUNT(*) as cnt FROM provider_nodes").get()?.cnt||0,n=f.prepare("SELECT COUNT(*) as cnt FROM combos").get()?.cnt||0,o=f.prepare("SELECT COUNT(*) as cnt FROM api_keys").get()?.cnt||0;return console.log(`[DB] Restored backup: ${a} (${h} connections)`),{restored:!0,backupId:a,connectionCount:h,nodeCount:m,comboCount:n,apiKeyCount:o}}},44438:(a,b,c)=>{Promise.resolve().then(c.bind(c,64385))},47336:(a,b,c)=>{"use strict";c.d(b,{v:()=>d,B:()=>e});let d={name:"OmniRoute",description:"AI Gateway for Multi-Provider LLMs",version:"3.7.3"},e={storageKey:"theme",defaultTheme:"system"}},47695:(a,b,c)=>{"use strict";c.d(b,{A:()=>i,F:()=>h});var d=c(31417),e=c(300),f=c(47336);let g=(0,d.v)()((0,e.Zr)((a,b)=>({theme:f.B.defaultTheme,colorTheme:"coral",customColor:"#3b82f6",setTheme:b=>{a({theme:b})},setColorTheme:c=>{a({colorTheme:c}),b().customColor},setCustomColorTheme:b=>{let c=function(a){let b=(a||"").trim(),c=b.startsWith("#")?b:`#${b}`;return/^#([0-9a-fA-F]{6})$/.test(c)?c.toLowerCase():"#3b82f6"}(b);a({colorTheme:"custom",customColor:c})},toggleTheme:()=>{let c="dark"===b().theme?"light":"dark";a({theme:c})},initTheme:()=>{let{theme:a,colorTheme:c,customColor:d}=b()}}),{name:f.B.storageKey})),h={coral:"#e54d5e",blue:"#3b82f6",red:"#ef4444",green:"#22c55e",violet:"#8b5cf6",orange:"#f97316",cyan:"#06b6d4"},i=g},60548:(a,b,c)=>{Promise.resolve().then(c.bind(c,65909))},61135:()=>{},64385:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/OmniRoute/OmniRoute/src/app/error.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/OmniRoute/OmniRoute/src/app/error.tsx","default")},65909:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>f});var d=c(48249),e=c(22746);function f(){return(0,d.jsx)(e.PageLoading,{message:"Loading OmniRoute..."})}},67045:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(48249);function e({error:a,reset:b}){return(0,d.jsx)("html",{lang:"en",children:(0,d.jsx)("body",{className:"flex flex-col items-center justify-center min-h-screen p-6 bg-bg text-text-main font-[system-ui,-apple-system,sans-serif] text-center m-0",children:(0,d.jsxs)("main",{role:"alert","aria-live":"assertive",className:"flex flex-col items-center",children:[(0,d.jsx)("div",{className:"text-[64px] mb-4","aria-hidden":"true",children:"⚠️"}),(0,d.jsx)("h1",{className:"text-[28px] font-bold mb-2",children:"Something went wrong"}),(0,d.jsx)("p",{className:"text-[15px] text-text-muted max-w-[400px] leading-relaxed mb-6",children:"An unexpected error occurred. This has been logged and our team will investigate."}),!1,(0,d.jsxs)("div",{className:"flex flex-col sm:flex-row gap-3",children:[(0,d.jsx)("button",{onClick:b,"aria-label":"Retry loading the page",className:"px-8 py-3 rounded-[10px] text-white border-none text-sm font-semibold cursor-pointer transition-transform duration-200 motion-reduce:transition-none motion-reduce:transform-none shadow-warm hover:-translate-y-0.5 bg-gradient-to-br from-primary to-primary-hover focus:outline-2 focus:outline-offset-2 focus:outline-primary",children:"Try Again"}),(0,d.jsx)("a",{href:"/status",className:"px-8 py-3 rounded-[10px] text-sm font-semibold border border-[var(--color-border)] hover:bg-[var(--color-bg-alt)] no-underline focus:outline-2 focus:outline-offset-2 focus:outline-primary","aria-label":"Open system status",children:"System Status"})]})]})})})}},69199:(a,b,c)=>{Promise.resolve().then(c.bind(c,86392)),Promise.resolve().then(c.bind(c,32444))},73857:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g});var d=c(48249),e=c(2116),f=c.n(e);function g(){return(0,d.jsxs)("div",{className:"flex flex-col items-center justify-center min-h-screen p-6 bg-bg text-text-main text-center",role:"main","aria-labelledby":"not-found-title",children:[(0,d.jsx)("div",{className:"text-[96px] font-extrabold leading-none mb-2 bg-gradient-to-br from-primary to-primary-hover bg-clip-text text-transparent","aria-hidden":"true",children:"404"}),(0,d.jsx)("h1",{id:"not-found-title",className:"text-2xl font-semibold mb-2",children:"Page not found"}),(0,d.jsx)("p",{className:"text-[15px] text-text-muted max-w-[400px] leading-relaxed mb-8",children:"The page you're looking for doesn't exist or has been moved."}),(0,d.jsxs)("div",{className:"flex flex-col sm:flex-row items-center gap-3",children:[(0,d.jsx)(f(),{href:"/dashboard",className:"px-8 py-3 rounded-xl text-white text-sm font-medium no-underline transition-all duration-200 motion-reduce:transition-none shadow-warm hover:-translate-y-0.5 bg-gradient-to-br from-primary to-primary-hover hover:shadow-elevated focus:outline-2 focus:outline-offset-2 focus:outline-primary","aria-label":"Return to dashboard",children:"Go to Dashboard"}),(0,d.jsx)(f(),{href:"/status",className:"px-8 py-3 rounded-xl text-sm font-medium no-underline border border-border hover:bg-bg-alt transition-colors duration-200 motion-reduce:transition-none focus:outline-2 focus:outline-offset-2 focus:outline-primary","aria-label":"Open system status page",children:"System Status"})]})]})}},75146:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>f});var d=c(48249);c(67484);var e=c(47695);function f({children:a}){let{initTheme:b}=(0,e.A)();return(0,d.jsx)(d.Fragment,{children:a})}},76160:(a,b,c)=>{Promise.resolve().then(c.bind(c,73857))},76537:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>n,generateMetadata:()=>m});var d=c(5735),e=c(50609),f=c.n(e);c(61135);var g=c(32444),h=c(68625),i=c(62026),j=c(28440),k=c(83750),l=c(9679);async function m(){let a=await (0,l.getSettings)(),b=a?.instanceName||"OmniRoute";return{title:`${b} — AI Gateway for Multi-Provider LLMs`,description:"OmniRoute is an AI gateway for multi-provider LLMs. One endpoint for all your AI providers.",icons:{icon:a?.customFaviconUrl||a?.customFaviconBase64?"/api/settings/favicon":"/favicon.svg",apple:"/apple-touch-icon.svg"}}}async function n({children:a}){let b=await (0,i.A)(),c=await (0,j.A)(),e=k.rB.includes(b);return(0,d.jsxs)("html",{lang:b,dir:e?"rtl":"ltr",suppressHydrationWarning:!0,children:[(0,d.jsxs)("head",{children:[(0,d.jsx)("link",{rel:"preconnect",href:"https://fonts.googleapis.com"}),(0,d.jsx)("link",{rel:"preconnect",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),(0,d.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap",rel:"stylesheet"}),(0,d.jsx)("script",{dangerouslySetInnerHTML:{__html:`
|
|
2
2
|
try {
|
|
3
3
|
const stored = localStorage.getItem('theme');
|
|
4
4
|
const parsed = stored ? JSON.parse(stored) : null;
|