omniroute 2.0.0 → 2.0.2
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/README.ar.md +4 -3
- package/README.bg.md +4 -3
- package/README.da.md +4 -2
- package/README.de.md +3 -2
- package/README.es.md +1 -0
- package/README.fi.md +1 -0
- package/README.fr.md +1 -0
- package/README.he.md +9 -8
- package/README.hu.md +1 -0
- package/README.id.md +1 -0
- package/README.in.md +9 -8
- package/README.it.md +1 -0
- package/README.ja.md +3 -0
- package/README.ko.md +9 -8
- package/README.md +17 -16
- package/README.ms.md +9 -8
- package/README.nl.md +9 -8
- package/README.no.md +1 -0
- package/README.phi.md +2 -1
- package/README.pl.md +9 -8
- package/README.pt-BR.md +3 -2
- package/README.pt.md +1 -0
- package/README.ro.md +2 -0
- package/README.ru.md +1 -0
- package/README.sk.md +1 -0
- package/README.sv.md +1 -0
- package/README.th.md +1 -0
- package/README.uk-UA.md +1 -0
- package/README.vi.md +1 -0
- package/README.zh-CN.md +10 -9
- package/app/.env +122 -0
- package/app/.next/BUILD_ID +1 -1
- package/app/.next/app-path-routes-manifest.json +54 -54
- package/app/.next/build-manifest.json +3 -3
- package/app/.next/prerender-manifest.json +3 -3
- package/app/.next/required-server-files.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/a2a/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/a2a/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/a2a/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/analytics/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/analytics/page.js.nft.json +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.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/api-manager/page.js.nft.json +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-log/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/audit-log/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page.js.nft.json +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/cli-tools/page.js +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +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.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +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.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/costs/page.js.nft.json +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.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +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.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/health/page.js.nft.json +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.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/limits/page.js.nft.json +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 +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/logs/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/mcp/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/mcp/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/mcp/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/media/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js.nft.json +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 +2 -2
- 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/profile/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +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.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +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.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/settings/page.js.nft.json +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.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page.js.nft.json +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/translator/page.js +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +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.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/.well-known/agent.json/route.js +1 -1
- package/app/.next/server/app/.well-known/agent.json/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/400/page.js +2 -2
- package/app/.next/server/app/400/page.js.nft.json +1 -1
- package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/401/page.js +2 -2
- package/app/.next/server/app/401/page.js.nft.json +1 -1
- package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/403/page.js +2 -2
- package/app/.next/server/app/403/page.js.nft.json +1 -1
- package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/408/page.js +2 -2
- package/app/.next/server/app/408/page.js.nft.json +1 -1
- package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/429/page.js +2 -2
- package/app/.next/server/app/429/page.js.nft.json +1 -1
- package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/500/page.js +2 -2
- package/app/.next/server/app/500/page.js.nft.json +1 -1
- package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/502/page.js +2 -2
- package/app/.next/server/app/502/page.js.nft.json +1 -1
- package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/503/page.js +2 -2
- package/app/.next/server/app/503/page.js.nft.json +1 -1
- package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error/page.js +3 -3
- package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +2 -2
- package/app/.next/server/app/_global-error.rsc +5 -5
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +5 -5
- 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 +4 -4
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page.js +2 -2
- package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/a2a/route.js +2 -2
- package/app/.next/server/app/a2a/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/a2a/status/route.js +1 -1
- package/app/.next/server/app/api/a2a/status/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/a2a/tasks/[id]/cancel/route.js +1 -1
- package/app/.next/server/app/api/a2a/tasks/[id]/cancel/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/a2a/tasks/[id]/route.js +1 -1
- package/app/.next/server/app/api/a2a/tasks/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/a2a/tasks/route.js +1 -1
- package/app/.next/server/app/api/a2a/tasks/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/auth/login/route.js +1 -1
- package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/auth/logout/route.js +1 -1
- package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/auth/status/route.js +1 -1
- package/app/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cache/route.js +1 -1
- package/app/.next/server/app/api/cache/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cache/stats/route.js +1 -1
- package/app/.next/server/app/api/cache/stats/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +3 -3
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/cline-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/cline-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/codex-profiles/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/codex-profiles/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/droid-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/kilo-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/openclaw/auto-order/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/openclaw/auto-order/route_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/status/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/status/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cloud/auth/route.js +1 -1
- package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cloud/credentials/update/route.js +1 -1
- package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cloud/model/resolve/route.js +1 -1
- package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cloud/models/alias/route.js +1 -1
- package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/combos/[id]/route.js +1 -1
- package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/combos/auto/route.js +1 -1
- package/app/.next/server/app/api/combos/auto/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/combos/metrics/route.js +1 -1
- package/app/.next/server/app/api/combos/metrics/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/combos/route.js +1 -1
- package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/combos/test/route.js +1 -1
- package/app/.next/server/app/api/combos/test/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/compliance/audit-log/route.js +1 -1
- package/app/.next/server/app/api/compliance/audit-log/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/db-backups/export/route.js +1 -1
- package/app/.next/server/app/api/db-backups/export/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/db-backups/exportAll/route.js +1 -1
- package/app/.next/server/app/api/db-backups/exportAll/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/db-backups/import/route.js +1 -1
- package/app/.next/server/app/api/db-backups/import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/db-backups/route.js +1 -1
- package/app/.next/server/app/api/db-backups/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/evals/[suiteId]/route.js +1 -1
- package/app/.next/server/app/api/evals/[suiteId]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/evals/route.js +1 -1
- package/app/.next/server/app/api/evals/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/fallback/chains/route.js +2 -2
- package/app/.next/server/app/api/fallback/chains/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/init/route.js +1 -1
- package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/keys/[id]/route.js +1 -1
- package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/keys/route.js +1 -1
- package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/logs/console/route.js +1 -1
- package/app/.next/server/app/api/logs/console/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/mcp/audit/route.js +2 -2
- package/app/.next/server/app/api/mcp/audit/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/mcp/audit/stats/route.js +2 -2
- package/app/.next/server/app/api/mcp/audit/stats/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/mcp/sse/route.js +1 -1
- package/app/.next/server/app/api/mcp/sse/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/mcp/status/route.js +1 -1
- package/app/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/mcp/stream/route.js +1 -1
- package/app/.next/server/app/api/mcp/stream/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/mcp/tools/route.js +1 -1
- package/app/.next/server/app/api/mcp/tools/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/models/alias/route.js +1 -1
- package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/models/availability/route.js +1 -1
- package/app/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/models/catalog/route.js +2 -2
- package/app/.next/server/app/api/models/catalog/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/models/route.js +2 -2
- package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/monitoring/health/route.js +2 -2
- package/app/.next/server/app/api/monitoring/health/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +2 -2
- package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/cursor/auto-import/route.js +1 -1
- package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/cursor/import/route.js +1 -1
- package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/auto-import/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/import/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/policies/route.js +2 -2
- package/app/.next/server/app/api/policies/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/pricing/defaults/route.js +1 -1
- package/app/.next/server/app/api/pricing/defaults/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/pricing/models/route.js +1 -1
- package/app/.next/server/app/api/pricing/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/pricing/route.js +1 -1
- package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/provider-metrics/route.js +2 -2
- package/app/.next/server/app/api/provider-metrics/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/provider-models/route.js +1 -1
- package/app/.next/server/app/api/provider-models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
- package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/provider-nodes/route.js +2 -2
- package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/provider-nodes/validate/route.js +1 -1
- package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/[id]/models/route.js +2 -2
- package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/[id]/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/client/route.js +1 -1
- package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/route.js +2 -2
- package/app/.next/server/app/api/providers/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/validate/route.js +1 -1
- package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/rate-limit/route.js +1 -1
- package/app/.next/server/app/api/rate-limit/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/rate-limits/route.js +1 -1
- package/app/.next/server/app/api/rate-limits/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/resilience/reset/route.js +1 -1
- package/app/.next/server/app/api/resilience/reset/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/resilience/route.js +1 -1
- package/app/.next/server/app/api/resilience/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/restart/route.js +1 -1
- package/app/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/sessions/route.js +1 -1
- package/app/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/background-degradation/route.js +1 -1
- package/app/.next/server/app/api/settings/background-degradation/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/combo-defaults/route.js +1 -1
- package/app/.next/server/app/api/settings/combo-defaults/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/ip-filter/route.js +1 -1
- package/app/.next/server/app/api/settings/ip-filter/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/model-aliases/route.js +1 -1
- package/app/.next/server/app/api/settings/model-aliases/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/proxy/route.js +1 -1
- package/app/.next/server/app/api/settings/proxy/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/proxy/test/route.js +1 -1
- package/app/.next/server/app/api/settings/proxy/test/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/require-login/route.js +1 -1
- package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/route.js +1 -1
- package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/system-prompt/route.js +1 -1
- package/app/.next/server/app/api/settings/system-prompt/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/thinking-budget/route.js +1 -1
- package/app/.next/server/app/api/settings/thinking-budget/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/shutdown/route.js +1 -1
- package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/storage/health/route.js +1 -1
- package/app/.next/server/app/api/storage/health/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/sync/cloud/route.js +1 -1
- package/app/.next/server/app/api/sync/cloud/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/sync/initialize/route.js +1 -1
- package/app/.next/server/app/api/sync/initialize/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/tags/route.js +1 -1
- package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/telemetry/summary/route.js +1 -1
- package/app/.next/server/app/api/telemetry/summary/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/token-health/route.js +1 -1
- package/app/.next/server/app/api/token-health/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/detect/route.js +1 -1
- package/app/.next/server/app/api/translator/detect/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/history/route.js +1 -1
- package/app/.next/server/app/api/translator/history/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/load/route.js +1 -1
- package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/save/route.js +1 -1
- package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/send/route.js +1 -1
- package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/translate/route.js +1 -1
- package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/[connectionId]/route.js +2 -2
- package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/analytics/route.js +1 -1
- package/app/.next/server/app/api/usage/analytics/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/budget/route.js +2 -2
- package/app/.next/server/app/api/usage/budget/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/call-logs/[id]/route.js +1 -1
- package/app/.next/server/app/api/usage/call-logs/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/call-logs/route.js +1 -1
- package/app/.next/server/app/api/usage/call-logs/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/history/route.js +1 -1
- package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/logs/route.js +1 -1
- package/app/.next/server/app/api/usage/logs/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/proxy-logs/route.js +1 -1
- package/app/.next/server/app/api/usage/proxy-logs/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/quota/route.js +1 -1
- package/app/.next/server/app/api/usage/quota/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/request-logs/route.js +1 -1
- package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/api/chat/route.js +1 -1
- package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/audio/speech/route.js +1 -1
- package/app/.next/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
- package/app/.next/server/app/api/v1/audio/transcriptions/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
- package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
- package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/images/generations/route.js +1 -1
- package/app/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/images/generations/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
- package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/messages/route.js +1 -1
- package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/models/route.js +1 -1
- package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/moderations/route.js +1 -1
- package/app/.next/server/app/api/v1/moderations/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/music/generations/route.js +1 -1
- package/app/.next/server/app/api/v1/music/generations/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js +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]/images/generations/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/rerank/route.js +1 -1
- package/app/.next/server/app/api/v1/rerank/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/responses/route.js +1 -1
- package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/route.js +1 -1
- package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/videos/generations/route.js +1 -1
- package/app/.next/server/app/api/v1/videos/generations/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
- package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1beta/models/route.js +2 -2
- package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/callback/page.js +2 -2
- package/app/.next/server/app/callback/page.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 +4 -4
- package/app/.next/server/app/docs/page.js.nft.json +1 -1
- package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forbidden/page.js +2 -2
- package/app/.next/server/app/forbidden/page.js.nft.json +1 -1
- package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forgot-password/page.js +2 -2
- package/app/.next/server/app/forgot-password/page.js.nft.json +1 -1
- package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing/page.js +2 -2
- package/app/.next/server/app/landing/page.js.nft.json +1 -1
- package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/login/page.js +2 -2
- package/app/.next/server/app/login/page.js.nft.json +1 -1
- package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/maintenance/page.js +2 -2
- package/app/.next/server/app/maintenance/page.js.nft.json +1 -1
- package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/offline/page.js +2 -2
- package/app/.next/server/app/offline/page.js.nft.json +1 -1
- package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/page.js +2 -2
- package/app/.next/server/app/page.js.nft.json +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/privacy/page.js +2 -2
- package/app/.next/server/app/privacy/page.js.nft.json +1 -1
- package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/status/page.js +2 -2
- package/app/.next/server/app/status/page.js.nft.json +1 -1
- package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/terms/page.js +2 -2
- package/app/.next/server/app/terms/page.js.nft.json +1 -1
- package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app-paths-manifest.json +54 -54
- package/app/.next/server/chunks/1033.js +1 -1
- package/app/.next/server/chunks/1909.js +2 -0
- package/app/.next/server/chunks/2180.js +1 -1
- package/app/.next/server/chunks/2901.js +1 -1
- package/app/.next/server/chunks/2910.js +1 -1
- package/app/.next/server/chunks/3498.js +1 -1
- package/app/.next/server/chunks/3969.js +1 -1
- package/app/.next/server/chunks/4488.js +1 -1
- package/app/.next/server/chunks/4631.js +2 -2
- package/app/.next/server/chunks/7109.js +1 -1
- package/app/.next/server/chunks/7167.js +1 -0
- package/app/.next/server/chunks/7669.js +1 -1
- package/app/.next/server/chunks/8020.js +3 -3
- package/app/.next/server/chunks/8369.js +1 -1
- package/app/.next/server/chunks/9548.js +1 -1
- package/app/.next/server/instrumentation.js +1 -1
- package/app/.next/server/middleware-build-manifest.js +1 -1
- package/app/.next/server/middleware.js +3 -3
- package/app/.next/server/next-font-manifest.js +1 -1
- package/app/.next/server/next-font-manifest.json +1 -1
- package/app/.next/server/pages/500.html +2 -2
- 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/{5846-c2071f4db5ecc3da.js → 5846-014698d5430bb218.js} +1 -1
- package/app/.next/static/chunks/{647-f42f77310d9d9936.js → 647-52d3e2e64d7de62e.js} +2 -2
- package/app/.next/static/chunks/app/(dashboard)/dashboard/a2a/page-ed1f5b1ae0e01c02.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/analytics/loading-6a2bb3ad980b05b9.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/analytics/{page-bef5c045e7eae657.js → page-6ab7701da3357bb9.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/api-manager/page-027b3eb09d2d46e0.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/audit-log/page-c9b98846b8479f3f.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/auto-combo/{page-8e609f4c9b26a901.js → page-851063ded34ab7a6.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-86acc32f9984a4e2.js +15 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-ac5dcffbe54f77f9.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/costs/{page-7a233357dfbd2e05.js → page-8f6233f59f5277e9.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-36f33de29eb978a1.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/health/{page-66ee4e631429e0d8.js → page-1e1eb2f79d606ab2.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/limits/page-e8a28e4cf62889bd.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/logs/{page-6e4bcb48b8731915.js → page-95e4b5e0bf023d76.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/mcp/page-d9b5c3282ec5d809.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media/page-72b768421394b42c.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/onboarding/{page-d424641c7e428be9.js → page-5378e9473a20cd6a.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/page-40d20c1273f57206.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-350aed2e86512c23.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/{error-0400f175dd1372fa.js → error-a5ae03ba05400b04.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/loading-7deaa9f550841465.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-3ef302da4b756e50.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/{page-87f0d43ce6cca0cb.js → page-cd0feb6c545b8a49.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/{error-c39d18f10fb7d3f6.js → error-ec9643134a96bbcd.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/{loading-b5faf05c78a2cc54.js → loading-3519a633b514f31a.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/{page-6b38a30bfddf3b89.js → page-cbaa4b638a583fe9.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/pricing/{page-a4b8b03ffb39da1d.js → page-69eb8b0eb0e9de00.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/{page-b29f17c4dc7d449f.js → page-8cc93e616925f0a0.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-8c8f2d59d0cbb516.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/{layout-6d0afc53f5f2a538.js → layout-7ae0c66c22bee8a1.js} +1 -1
- package/app/.next/static/chunks/app/400/{page-3b77bf358909019a.js → page-3b9079ea400ca287.js} +1 -1
- package/app/.next/static/chunks/app/401/{page-3b77bf358909019a.js → page-3b9079ea400ca287.js} +1 -1
- package/app/.next/static/chunks/app/403/{page-3b77bf358909019a.js → page-3b9079ea400ca287.js} +1 -1
- package/app/.next/static/chunks/app/408/{page-3b77bf358909019a.js → page-3b9079ea400ca287.js} +1 -1
- package/app/.next/static/chunks/app/429/page-3b9079ea400ca287.js +1 -0
- package/app/.next/static/chunks/app/500/page-3b9079ea400ca287.js +1 -0
- package/app/.next/static/chunks/app/502/page-3b9079ea400ca287.js +1 -0
- package/app/.next/static/chunks/app/503/page-3b9079ea400ca287.js +1 -0
- package/app/.next/static/chunks/app/callback/{page-585a53f7dc6a30f1.js → page-0f0ebc0820dd18a5.js} +1 -1
- package/app/.next/static/chunks/app/docs/{page-9624e5fb8cabf7d8.js → page-dc88e0a01d291518.js} +1 -1
- package/app/.next/static/chunks/app/{error-f7f595c541537e63.js → error-32c03f14529d3920.js} +1 -1
- package/app/.next/static/chunks/app/forbidden/page-8d8e1709a1e32585.js +1 -0
- package/app/.next/static/chunks/app/forgot-password/page-d5c9b77748aa9deb.js +1 -0
- package/app/.next/static/chunks/app/global-error-5840b1caa830f2ec.js +1 -0
- package/app/.next/static/chunks/app/landing/page-75b0c988db383cfc.js +1 -0
- package/app/.next/static/chunks/app/{layout-108592eafb959363.js → layout-070972eb026af319.js} +1 -1
- package/app/.next/static/chunks/app/{loading-e063375d5b12a2f7.js → loading-da2f6e1471afc070.js} +1 -1
- package/app/.next/static/chunks/app/login/{page-cf6b82187b09a701.js → page-26d717c652d56032.js} +1 -1
- package/app/.next/static/chunks/app/maintenance/page-3b9079ea400ca287.js +1 -0
- package/app/.next/static/chunks/app/not-found-faf36d2a9a452506.js +1 -0
- package/app/.next/static/chunks/app/offline/page-bf68bf461af876a3.js +1 -0
- package/app/.next/static/chunks/app/privacy/{page-9624e5fb8cabf7d8.js → page-dc88e0a01d291518.js} +1 -1
- package/app/.next/static/chunks/app/status/page-29a433b40631ce12.js +1 -0
- package/app/.next/static/chunks/app/terms/{page-9624e5fb8cabf7d8.js → page-dc88e0a01d291518.js} +1 -1
- package/app/.next/static/chunks/{main-app-c9da11a8061df107.js → main-app-ae230f6bf51a5edb.js} +1 -1
- package/app/logs/application/app.log +1 -0
- package/app/package.json +1 -1
- package/app/server.js +1 -1
- package/package.json +1 -1
- package/app/.next/server/chunks/5248.js +0 -1
- package/app/.next/server/chunks/7889.js +0 -2
- package/app/.next/static/chunks/app/(dashboard)/dashboard/a2a/page-43d6fa6b75cca497.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/analytics/loading-49ae846d72948391.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/api-manager/page-16f886b3711a6a50.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/audit-log/page-e5bf8955e7b9a4f5.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-d1e5ed188e14c618.js +0 -15
- package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-8d4d2f071d114b90.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-7b1037d65eef97a8.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/limits/page-d5e0c556e2b32478.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/mcp/page-8e35334b9f393139.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media/page-1d0ca9b5d3eaf7cd.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/page-d75ccdb976b36258.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-1abb3ea768844f2b.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/loading-9552383fd2e11282.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-d57908b59d4b482c.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-9e20463252daf023.js +0 -1
- package/app/.next/static/chunks/app/429/page-3b77bf358909019a.js +0 -1
- package/app/.next/static/chunks/app/500/page-3b77bf358909019a.js +0 -1
- package/app/.next/static/chunks/app/502/page-3b77bf358909019a.js +0 -1
- package/app/.next/static/chunks/app/503/page-3b77bf358909019a.js +0 -1
- package/app/.next/static/chunks/app/forbidden/page-b33079c1573b0bfa.js +0 -1
- package/app/.next/static/chunks/app/forgot-password/page-90cd6259c75badfc.js +0 -1
- package/app/.next/static/chunks/app/global-error-1dfd1c91ad5199fe.js +0 -1
- package/app/.next/static/chunks/app/landing/page-9d540ab1716f8e3e.js +0 -1
- package/app/.next/static/chunks/app/maintenance/page-3b77bf358909019a.js +0 -1
- package/app/.next/static/chunks/app/not-found-511518956bcae7bc.js +0 -1
- package/app/.next/static/chunks/app/offline/page-9d6ea493783a0219.js +0 -1
- package/app/.next/static/chunks/app/status/page-4e5e9b5a513aa474.js +0 -1
- /package/app/.next/static/{i4hXorUJfOXsVFs23YXiR → GDoUzLvy4YDqhnGqUCiZ0}/_buildManifest.js +0 -0
- /package/app/.next/static/{i4hXorUJfOXsVFs23YXiR → GDoUzLvy4YDqhnGqUCiZ0}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";exports.id=3969,exports.ids=[3969],exports.modules={13419:(a,b,c)=>{c.d(b,{H:()=>h,J:()=>g});let d=["valid","expiring","expired","refreshing"];function e(a){if("number"==typeof a&&Number.isFinite(a))return a;if("string"==typeof a&&""!==a.trim()){let b=Number(a);if(Number.isFinite(b))return b}return null}function f(a,b,c){return Math.min(c,Math.max(b,a))}function g(a){var b;let c=a&&"object"==typeof a?a:{},g="string"==typeof c.provider?c.provider:"unknown",h="string"==typeof c.name&&c.name.trim()?c.name:g,i="string"==typeof c.connectionId&&c.connectionId.trim()?c.connectionId:"unknown",j=e(c.quotaTotal),k=null!==j&&j>=0?j:null,l=e(c.quotaUsed)??0,m=null!==k?f(l,0,k):Math.max(0,l),n=e(c.percentRemaining);return null===n&&(n=k&&k>0?(k-m)/k*100:100),{name:h,provider:g,connectionId:i,quotaUsed:m,quotaTotal:k,percentRemaining:f(n,0,100),resetAt:"string"==typeof c.resetAt&&c.resetAt.trim()?c.resetAt:null,tokenStatus:"string"==typeof(b=c.tokenStatus)&&d.includes(b)?b:"valid"}}function h(a,b={}){let c=a&&"object"==typeof a?a:{},d=(Array.isArray(c.providers)?c.providers:Array.isArray(a)?a:[]).map(a=>g(a)),e=c.meta&&"object"==typeof c.meta?c.meta:{},f=e.filters&&"object"==typeof e.filters?e.filters:{},i=b.provider??("string"==typeof f.provider&&f.provider.trim()?f.provider:null),j=b.connectionId??("string"==typeof f.connectionId&&f.connectionId.trim()?f.connectionId:null);return{providers:d,meta:{generatedAt:"string"==typeof e.generatedAt&&e.generatedAt.trim()?e.generatedAt:new Date().toISOString(),filters:{provider:i||null,connectionId:j||null},totalProviders:d.length}}}},43620:(a,b,c)=>{c.d(b,{Im:()=>n,c7:()=>i,h6:()=>l,jW:()=>m,rs:()=>k});var d=c(73024),e=c(48161),f=c(76760);let g="runtime";function h(){let a=process.env.DATA_DIR;return"string"==typeof a&&a.trim().length>0?a.trim():(0,f.join)((0,e.homedir)(),".omniroute")}function i(){return(0,f.join)(h(),g,"mcp-heartbeat.json")}async function j(a){let b=i(),c=(0,f.join)(h(),g);await d.promises.mkdir(c,{recursive:!0}),await d.promises.writeFile(b,JSON.stringify(a,null,2),"utf-8")}function k(a){let b=new Date().toISOString(),c=null,d=!1,e="number"==typeof a.intervalMs&&a.intervalMs>0?a.intervalMs:5e3,f=async()=>{if(d)return;let c={pid:process.pid,startedAt:b,lastHeartbeatAt:new Date().toISOString(),version:a.version,transport:"stdio",scopesEnforced:a.scopesEnforced,allowedScopes:[...a.allowedScopes],toolCount:a.toolCount};try{await j(c)}catch(a){console.error("[MCP Heartbeat] Failed to write heartbeat:",a instanceof Error?a.message:String(a))}};return f(),c=setInterval(()=>{f()},e),()=>{d||(d=!0,c&&(clearInterval(c),c=null),f())}}async function l(){let a=i();try{let b=await d.promises.readFile(a,"utf-8"),c=JSON.parse(b);if(!c||"object"!=typeof c||"number"!=typeof c.pid||"string"!=typeof c.startedAt||"string"!=typeof c.lastHeartbeatAt||"string"!=typeof c.version||"stdio"!==c.transport||"boolean"!=typeof c.scopesEnforced||!Array.isArray(c.allowedScopes)||"number"!=typeof c.toolCount)return null;let e=c.allowedScopes.filter(a=>"string"==typeof a);return{pid:c.pid,startedAt:c.startedAt,lastHeartbeatAt:c.lastHeartbeatAt,version:c.version,transport:"stdio",scopesEnforced:c.scopesEnforced,allowedScopes:e,toolCount:c.toolCount}}catch{return null}}function m(a){if(!Number.isFinite(a)||a<=0)return!1;try{return process.kill(a,0),!0}catch{return!1}}function n(a,b){if(!a)return!1;let c="number"==typeof b?.staleAfterMs&&b.staleAfterMs>0?b.staleAfterMs:15e3,d=Date.now()-new Date(a.lastHeartbeatAt).getTime();return!!Number.isFinite(d)&&!(d>c)&&(b?.requireLivePid===!1||m(a.pid))}},63969:(a,b,c)=>{c.d(b,{lJ:()=>ag,e5:()=>af,V6:()=>ae});var d=c(77598),e=c(3226),f=c(68557),g=c(2306),h=c(43620),i=c(64926);function j(a){return Array.isArray(a)?Array.from(new Set(a.filter(a=>"string"==typeof a).map(a=>a.trim()).filter(Boolean))):[]}var k=c(13419);let l=process.env.OMNIROUTE_BASE_URL||"http://localhost:20128",m=process.env.OMNIROUTE_API_KEY||"";async function n(a,b={}){let c=`${l}${a}`,d={"Content-Type":"application/json",...m?{Authorization:`Bearer ${m}`}:{},...b.headers||{}},e=await fetch(c,{...b,headers:d,signal:AbortSignal.timeout(3e4)});if(!e.ok){let a=await e.text().catch(()=>"Unknown error");throw Error(`API [${e.status}]: ${a}`)}return e.json()}function o(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function p(a){return o(a)?a:{}}function q(a){return Array.isArray(a)?a.filter(o):[]}function r(a,b=""){return"string"==typeof a?a:b}function s(a,b=0){let c="number"==typeof a?a:"string"==typeof a&&a.trim().length>0?Number(a):NaN;return Number.isFinite(c)?c:b}function t(a){let b=q(a.models),c=q(p(a.data).models);return(b.length>0?b:c).map(a=>({provider:r(a.provider,"unknown"),model:r(a.model,""),inputCostPer1M:s(a.inputCostPer1M,3)}))}function u(a){if(Array.isArray(a))return a.filter(o);let b=p(a);return Array.isArray(b.combos)?b.combos.filter(o):[]}let v=null,w={aggressive:{profiles:{oauth:{transientCooldown:3e3,rateLimitCooldown:3e4,maxBackoffLevel:4,circuitBreakerThreshold:2,circuitBreakerReset:3e4},apikey:{transientCooldown:2e3,rateLimitCooldown:0,maxBackoffLevel:3,circuitBreakerThreshold:3,circuitBreakerReset:15e3}},defaults:{requestsPerMinute:180,minTimeBetweenRequests:100,concurrentRequests:16}},balanced:{profiles:{oauth:{transientCooldown:5e3,rateLimitCooldown:6e4,maxBackoffLevel:8,circuitBreakerThreshold:3,circuitBreakerReset:6e4},apikey:{transientCooldown:3e3,rateLimitCooldown:0,maxBackoffLevel:5,circuitBreakerThreshold:5,circuitBreakerReset:3e4}},defaults:{requestsPerMinute:100,minTimeBetweenRequests:200,concurrentRequests:10}},conservative:{profiles:{oauth:{transientCooldown:8e3,rateLimitCooldown:12e4,maxBackoffLevel:10,circuitBreakerThreshold:8,circuitBreakerReset:12e4},apikey:{transientCooldown:5e3,rateLimitCooldown:3e4,maxBackoffLevel:8,circuitBreakerThreshold:8,circuitBreakerReset:6e4}},defaults:{requestsPerMinute:60,minTimeBetweenRequests:350,concurrentRequests:6}}},x={coding:{preferred:["claude","deepseek","codex"],traits:["fast","code-optimized"]},review:{preferred:["claude","gemini","openai"],traits:["analytical","thorough"]},planning:{preferred:["gemini","claude","openai"],traits:["reasoning","structured"]},analysis:{preferred:["gemini","claude"],traits:["deep-reasoning","large-context"]},debugging:{preferred:["claude","deepseek","codex"],traits:["code-aware","fast"]},documentation:{preferred:["gemini","claude","openai"],traits:["clear","structured"]}};async function y(a){let b=Date.now();try{let[c,d,e]=await Promise.allSettled([n("/api/combos"),n("/api/monitoring/health"),n("/api/usage/quota")]),f="fulfilled"===c.status?u(c.value):[],g="fulfilled"===d.status?p(d.value):{},h="fulfilled"===e.status?(0,k.H)(e.value):(0,k.H)({}),j=a.combo?f.find(b=>r(b.id)===a.combo||r(b.name)===a.combo):f.find(a=>!1!==a.enabled);if(!j)return{content:[{type:"text",text:JSON.stringify({error:"No matching combo found"})}],isError:!0};let l=t(j),m=q(g.circuitBreakers),o=h.providers,s=l.map((b,c)=>{let d=m.find(a=>r(a.provider)===b.provider),e=o.find(a=>a.provider===b.provider),f=a.promptTokenEstimate/1e6*b.inputCostPer1M;return{provider:b.provider,model:b.model||a.model,probability:0===c?.85:.15/Math.max(l.length-1,1),estimatedCost:Math.round(1e4*f)/1e4,healthStatus:r(d?.state,"CLOSED"),quotaAvailable:e?.percentRemaining??100}}),v=s.map(a=>a.estimatedCost),w={simulatedPath:s,fallbackTree:{primary:s[0]?.provider||"unknown",fallbacks:s.slice(1).map(a=>a.provider),worstCaseCost:Math.max(...v,0),bestCaseCost:Math.min(...v,0)}};return await (0,i.Bv)("omniroute_simulate_route",a,w,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(w,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_simulate_route",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function z(a){let b=Date.now();try{let c=0;try{let a=p(await n("/api/usage/analytics?period=session"));c=s(a.totalCost,0)}catch{}v={sessionId:`budget_${Date.now()}`,maxCost:a.maxCost,action:a.action,degradeToTier:a.degradeToTier,spent:c,createdAt:new Date().toISOString()};let d=Math.max(0,a.maxCost-c),e={sessionId:v.sessionId,budgetTotal:a.maxCost,budgetSpent:Math.round(1e4*c)/1e4,budgetRemaining:Math.round(1e4*d)/1e4,action:a.action,status:d<=0?"exceeded":d<.2*a.maxCost?"warning":"active"};return await (0,i.Bv)("omniroute_set_budget_guard",{maxCost:a.maxCost,action:a.action},e,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(e,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_set_budget_guard",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function A(a){let b=Date.now();try{let c=w[a.profile];if(!c)return{content:[{type:"text",text:`Error: Invalid profile "${a.profile}"`}],isError:!0};await n("/api/resilience",{method:"PATCH",body:JSON.stringify({profiles:c.profiles,defaults:c.defaults})});let d={applied:!0,profile:a.profile,settings:c};return await (0,i.Bv)("omniroute_set_resilience_profile",a,d,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(d,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_set_resilience_profile",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function B(a){let b=Date.now();try{let c=u(await n("/api/combos")).find(b=>r(b.id)===a.comboId||r(b.name)===a.comboId);if(!c)return{content:[{type:"text",text:JSON.stringify({error:`Combo "${a.comboId}" not found`})}],isError:!0};let d=t(c),e=(a.testPrompt||"Say hello").slice(0,200),f=(await Promise.allSettled(d.map(async a=>{let b=Date.now();try{let c=p(await n("/v1/chat/completions",{method:"POST",body:JSON.stringify({model:a.model||"auto",messages:[{role:"user",content:e}],max_tokens:50,stream:!1,"x-provider":a.provider})})),d=p(c.usage);return{provider:a.provider,model:a.model||r(c.model,"unknown"),success:!0,latencyMs:Date.now()-b,cost:s(c.cost,0),tokenCount:s(d.prompt_tokens,0)+s(d.completion_tokens,0)}}catch(c){return{provider:a.provider,model:a.model||"unknown",success:!1,latencyMs:Date.now()-b,cost:0,tokenCount:0,error:c instanceof Error?c.message:String(c)}}}))).map(a=>"fulfilled"===a.status?a.value:{provider:"unknown",model:"unknown",success:!1,latencyMs:0,cost:0,tokenCount:0,error:"Promise rejected"}),g=f.filter(a=>a.success),h=g.sort((a,b)=>a.latencyMs-b.latencyMs)[0],j=g.sort((a,b)=>a.cost-b.cost)[0],k={results:f,summary:{totalProviders:f.length,successful:g.length,fastestProvider:h?.provider||"none",cheapestProvider:j?.provider||"none"}};return await (0,i.Bv)("omniroute_test_combo",{comboId:a.comboId},k.summary,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(k,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_test_combo",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function C(a){let b=Date.now();try{let[c,d,e]=await Promise.allSettled([n("/api/monitoring/health"),n(`/api/usage/quota?provider=${encodeURIComponent(a.provider)}`),n(`/api/usage/analytics?period=session&provider=${encodeURIComponent(a.provider)}`)]),f="fulfilled"===c.status?p(c.value):{},g="fulfilled"===d.status?(0,k.H)(d.value,{provider:a.provider}):(0,k.H)({}),h="fulfilled"===e.status?p(e.value):{},j=q(f.circuitBreakers).find(b=>r(b.provider)===a.provider),l=g.providers.find(b=>b.provider===a.provider)||null,m={provider:a.provider,successRate:s(h.successRate,1),requestCount:s(h.requestCount,0),avgLatencyMs:s(h.avgLatencyMs,0),p50LatencyMs:s(h.p50LatencyMs,0),p95LatencyMs:s(h.p95LatencyMs,0),p99LatencyMs:s(h.p99LatencyMs,0),errorRate:s(h.errorRate,0),lastError:r(h.lastError)||null,circuitBreakerState:r(j?.state,"CLOSED"),quotaInfo:l?{used:l.quotaUsed,total:l.quotaTotal,resetAt:l.resetAt}:{used:0,total:null,resetAt:null}};return await (0,i.Bv)("omniroute_get_provider_metrics",a,m,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(m,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_get_provider_metrics",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function D(a){let b=Date.now();try{let c=x[a.taskType]||x.coding,d=u(await n("/api/combos")).filter(a=>!1!==a.enabled);if(0===d.length)return{content:[{type:"text",text:JSON.stringify({error:"No enabled combos available"})}],isError:!0};let e=d.map(a=>{let b=t(a),d=0;for(let a of b){let b=c.preferred.indexOf(a.provider);b>=0&&(d+=(c.preferred.length-b)*10)}let e=r(a.name).toLowerCase();for(let a of c.traits)e.includes(a)&&(d+=5);let f=e.includes("free")||b.every(a=>a.provider.toLowerCase().includes("free"));return{combo:a,score:d,isFree:f}});e.sort((a,b)=>b.score-a.score);let f=e[0],g=e.slice(1,4).map(a=>({id:a.combo.id,name:a.combo.name,tradeoff:a.isFree?"free but may have limits":a.score<.5*f.score?"cheaper but slower":"similar quality, different providers"})),h=e.find(a=>a.isFree&&a!==f),j={recommendedCombo:{id:f.combo.id,name:f.combo.name,reason:`Best match for "${a.taskType}": preferred providers (${c.preferred.slice(0,3).join(", ")})`},alternatives:g,freeAlternative:h?{id:h.combo.id,name:h.combo.name}:null};return await (0,i.Bv)("omniroute_best_combo_for_task",a,j.recommendedCombo,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(j,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_best_combo_for_task",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function E(a){let b=Date.now();try{let c=null;try{c=p(await n(`/api/routing/decisions/${encodeURIComponent(a.requestId)}`))}catch{}let d=c?{requestId:a.requestId,decision:{comboUsed:c.comboUsed||"default",providerSelected:c.providerSelected||"unknown",modelUsed:c.modelUsed||"unknown",score:c.score||0,factors:c.factors||[{name:"health",value:1,weight:.3,contribution:.3},{name:"quota",value:1,weight:.25,contribution:.25},{name:"cost",value:.8,weight:.2,contribution:.16},{name:"latency",value:.9,weight:.15,contribution:.135},{name:"task_fit",value:.7,weight:.1,contribution:.07}],fallbacksTriggered:c.fallbacksTriggered||[],costActual:c.costActual||0,latencyActual:c.latencyActual||0}}:{requestId:a.requestId,decision:{comboUsed:"unknown",providerSelected:"unknown",modelUsed:"unknown",score:0,factors:[],fallbacksTriggered:[],costActual:0,latencyActual:0},note:"Routing decision not found. The /api/routing/decisions endpoint may not be implemented yet, or the requestId is invalid."};return await (0,i.Bv)("omniroute_explain_route",a,{requestId:a.requestId},Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(d,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_explain_route",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function F(){let a=Date.now();try{let b=p(await n("/api/usage/analytics?period=session").catch(()=>({}))),c=p(b.tokenCount),d=q(b.byModel),e=q(b.byProvider),f={sessionStart:r(b.sessionStart,new Date().toISOString()),duration:r(b.duration,"unknown"),requestCount:s(b.requestCount,0),costTotal:s(b.totalCost,0),tokenCount:{prompt:s(c.prompt,0),completion:s(c.completion,0)},topModels:d.slice(0,5).map(a=>({model:r(a.model,"unknown"),count:s(a.requests,0)})),topProviders:e.slice(0,5).map(a=>({provider:r(a.name,"unknown"),count:s(a.requests,0)})),errors:s(b.errorCount,0),fallbacks:s(b.fallbackCount,0),budgetGuard:v?{active:!0,remaining:Math.max(0,v.maxCost-v.spent),action:v.action}:null};return await (0,i.Bv)("omniroute_get_session_snapshot",{},{requestCount:f.requestCount},Date.now()-a,!0),{content:[{type:"text",text:JSON.stringify(f,null,2)}]}}catch(c){let b=c instanceof Error?c.message:String(c);return await (0,i.Bv)("omniroute_get_session_snapshot",{},null,Date.now()-a,!1,b),{content:[{type:"text",text:`Error: ${b}`}],isError:!0}}}let G=process.env.OMNIROUTE_BASE_URL||"http://localhost:20128",H=process.env.OMNIROUTE_API_KEY||"",I="true"===process.env.OMNIROUTE_MCP_ENFORCE_SCOPES,J=new Set((process.env.OMNIROUTE_MCP_SCOPES||"").split(",").map(a=>a.trim()).filter(Boolean));function K(a){return a&&"object"==typeof a&&!Array.isArray(a)?a:{}}function L(a){return Array.isArray(a)?a:[]}function M(a,b=""){return"string"==typeof a?a:b}function N(a,b=0){return"number"==typeof a&&Number.isFinite(a)?a:b}async function O(a,b={}){let c=`${G}${a}`,d={"Content-Type":"application/json",...H?{Authorization:`Bearer ${H}`}:{},...b.headers||{}},e=await fetch(c,{...b,headers:d,signal:AbortSignal.timeout(1e4)});if(!e.ok){let a=await e.text().catch(()=>"Unknown error");throw Error(`OmniRoute API error [${e.status}]: ${a}`)}return e.json()}function P(a,b){return async(c,d)=>{let e=function(a,b=[]){let c="string"==typeof a?.authInfo?.clientId&&a.authInfo.clientId.trim()||"string"==typeof a?.sessionId&&a.sessionId.trim()||"anonymous",d=j(a?.authInfo?.scopes);if(d.length>0)return{callerId:c,scopes:d,source:"authInfo"};let e=function(a){if(!a||"object"!=typeof a)return[];let b=j(a.scopes);if(b.length>0)return b;let c=a.auth;if(c&&"object"==typeof c){let a=j(c.scopes);if(a.length>0)return a}let d=a.omniroute;if(d&&"object"==typeof d){let a=j(d.scopes);if(a.length>0)return a}return[]}(a?._meta);if(e.length>0)return{callerId:c,scopes:e,source:"meta"};let f=j(b);return f.length>0?{callerId:c,scopes:f,source:"env"}:{callerId:c,scopes:[],source:"none"}}(d,Array.from(J)),f=function(a,b,c){let d=g.Dk[a];if(!d)return{allowed:!1,required:[],provided:Array.from(b),missing:[],reason:"tool_definition_missing"};let e=Array.isArray(d.scopes)?Array.from(d.scopes):[],f=j(b);if(!c||0===e.length)return{allowed:!0,required:e,provided:f,missing:[]};let h=e.filter(a=>!f.some(b=>(function(a,b){if("*"===a||a===b)return!0;if(a.endsWith("*")){let c=a.slice(0,-1);return b.startsWith(c)}return!1})(b,a)));return{allowed:0===h.length,required:e,provided:f,missing:h,reason:h.length>0?"missing_scopes":void 0}}(a,e.scopes,I);if(!f.allowed){let b=f.missing.length>0?f.missing.join(", "):"unavailable",d=f.reason||"scope_check_failed",g=`Insufficient MCP scopes for ${a}. Missing: ${b}. Caller=${e.callerId}, source=${e.source}.`,h=c&&"object"==typeof c?K(c):{rawArgs:c};return await (0,i.Bv)(a,{...h,_scopeCheck:{callerId:e.callerId,source:e.source,required:f.required,provided:f.provided,missing:f.missing}},null,0,!1,`scope_denied:${d}`),{content:[{type:"text",text:`Error: ${g}`}],isError:!0}}return b(c,d)}}async function Q(){let a=Date.now();try{let[b,c,d]=await Promise.allSettled([O("/api/monitoring/health"),O("/api/resilience"),O("/api/rate-limits")]),e="fulfilled"===b.status?K(b.value):{},f="fulfilled"===c.status?K(c.value):{},g="fulfilled"===d.status?K(d.value):{},h=K(e.memoryUsage),j=K(e.cacheStats),k=L(f.circuitBreakers),l=L(g.limits),m={uptime:M(e.uptime,"unknown"),version:M(e.version,"unknown"),memoryUsage:{heapUsed:N(h.heapUsed,0),heapTotal:N(h.heapTotal,0)},circuitBreakers:k,rateLimits:l,cacheStats:Object.keys(j).length>0?{hits:N(j.hits,0),misses:N(j.misses,0),hitRate:N(j.hitRate,0)}:void 0};return await (0,i.Bv)("omniroute_get_health",{},m,Date.now()-a,!0),{content:[{type:"text",text:JSON.stringify(m,null,2)}]}}catch(c){let b=c instanceof Error?c.message:String(c);return await (0,i.Bv)("omniroute_get_health",{},null,Date.now()-a,!1,b),{content:[{type:"text",text:`Error: ${b}`}],isError:!0}}}async function R(a){let b=Date.now();try{let c=await O("/api/combos"),d=K(c),e=Array.isArray(d.combos)?d.combos:Array.isArray(c)?c:[],f={};a.includeMetrics&&(f=K(await O("/api/combos/metrics").catch(()=>({}))));let g={combos:L(e).map(b=>{let c=K(b),d=K(c.data),e=M(c.id,""),g=Array.isArray(c.models)&&c.models.length>0?c.models:d.models;return{id:e,name:M(c.name,e||"unnamed"),models:L(g).map((a,b)=>{let c=K(a);return{provider:M(c.provider,"unknown"),model:M(c.model,"unknown"),priority:N(c.priority,b+1)}}),strategy:M(c.strategy,M(d.strategy,"priority")),enabled:!1!==c.enabled,...a.includeMetrics?{metrics:f[e]??null}:{}}})};return await (0,i.Bv)("omniroute_list_combos",a,g,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(g,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_list_combos",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function S(a){let b=Date.now();try{let c=await O(`/api/combos/metrics?comboId=${encodeURIComponent(a.comboId)}`);return await (0,i.Bv)("omniroute_get_combo_metrics",a,c,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(c,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_get_combo_metrics",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function T(a){let b=Date.now();try{let c=await O(`/api/combos/${encodeURIComponent(a.comboId)}`,{method:"PUT",body:JSON.stringify({isActive:a.active})});return await (0,i.Bv)("omniroute_switch_combo",a,c,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(c,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_switch_combo",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function U(a){let b=Date.now();try{let c="/api/usage/quota";a.connectionId?c+=`?connectionId=${encodeURIComponent(a.connectionId)}`:a.provider&&(c+=`?provider=${encodeURIComponent(a.provider)}`);let d=(0,k.H)(await O(c),{provider:a.provider||null,connectionId:a.connectionId||null});return await (0,i.Bv)("omniroute_check_quota",a,d,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(d,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_check_quota",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function V(a){let b=Date.now();try{let c={model:a.model,messages:a.messages,stream:!1};a.combo&&(c["x-combo"]=a.combo);let d=await O("/v1/chat/completions",{method:"POST",body:JSON.stringify(c)}),e=L(d.choices),f=K(e[0]),g=K(f.message),h=K(d.usage),j={response:{content:M(g.content,""),model:M(d.model,a.model),tokens:{prompt:N(h.prompt_tokens,0),completion:N(h.completion_tokens,0)}},routing:{provider:M(d.provider,"unknown"),combo:d.combo??null,fallbacksTriggered:N(d.fallbacksTriggered,0),cost:N(d.cost,0),latencyMs:Date.now()-b,routingExplanation:M(d.routingExplanation,"Request routed through primary provider")}};return await (0,i.Bv)("omniroute_route_request",{model:a.model,messageCount:a.messages.length},j.routing,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(j,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_route_request",{model:a.model},null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function W(a){let b=Date.now();try{let c=a.period||"session",d={session:"1d",day:"1d",week:"7d",month:"30d"}[c]||"30d",e=K(await O(`/api/usage/analytics?range=${encodeURIComponent(d)}`)),f=K(e.tokenCount),g=K(e.budget),h={period:c,totalCost:N(e.totalCost,0),requestCount:N(e.requestCount,0),tokenCount:{prompt:N(f.prompt,0),completion:N(f.completion,0)},byProvider:L(e.byProvider),byModel:L(e.byModel),budget:{limit:g.limit??null,remaining:g.remaining??null}};return await (0,i.Bv)("omniroute_cost_report",a,h,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(h,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_cost_report",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function X(a){let b=Date.now();try{let c="/v1/models",d=new URLSearchParams;a.provider&&d.set("provider",a.provider),a.capability&&d.set("capability",a.capability),d.toString()&&(c+=`?${d.toString()}`);let e=K(await O(c)),f={models:L(e.data).map(a=>{let b=K(a);return{id:M(b.id,""),provider:M(b.owned_by,M(b.provider,"unknown")),capabilities:function(a,b=[]){let c=L(a).filter(a=>"string"==typeof a);return c.length>0?c:b}(b.capabilities,["chat"]),status:M(b.status,"available"),pricing:b.pricing}})};return await (0,i.Bv)("omniroute_list_models_catalog",a,{modelCount:f.models.length},Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(f,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_list_models_catalog",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}function Y(){let a=new e._({name:"omniroute",version:process.env.npm_package_version||"1.8.1"});return a.registerTool("omniroute_get_health",{description:"Returns OmniRoute health status including uptime, memory, circuit breakers, rate limits, and cache stats",inputSchema:g.nu},P("omniroute_get_health",async a=>(g.nu.parse(a??{}),Q()))),a.registerTool("omniroute_list_combos",{description:"Lists all configured combos (model chains) with strategies and optional metrics",inputSchema:g.ME},P("omniroute_list_combos",a=>R(g.ME.parse(a)))),a.registerTool("omniroute_get_combo_metrics",{description:"Returns detailed performance metrics for a specific combo",inputSchema:g.Gs},P("omniroute_get_combo_metrics",a=>S(g.Gs.parse(a)))),a.registerTool("omniroute_switch_combo",{description:"Activates or deactivates a combo for routing",inputSchema:g.B1},P("omniroute_switch_combo",a=>T(g.B1.parse(a)))),a.registerTool("omniroute_check_quota",{description:"Checks remaining API quota for one or all providers",inputSchema:g.Fp},P("omniroute_check_quota",a=>U(g.Fp.parse(a)))),a.registerTool("omniroute_route_request",{description:"Sends a chat completion request through OmniRoute intelligent routing",inputSchema:g.fL},P("omniroute_route_request",a=>V(g.fL.parse(a)))),a.registerTool("omniroute_cost_report",{description:"Generates a cost report for the specified period",inputSchema:g.c},P("omniroute_cost_report",a=>W(g.c.parse(a)))),a.registerTool("omniroute_list_models_catalog",{description:"Lists all available AI models across providers with capabilities and pricing",inputSchema:g._v},P("omniroute_list_models_catalog",a=>X(g._v.parse(a)))),a.registerTool("omniroute_simulate_route",{description:"Simulates the routing path a request would take without executing it (dry-run)",inputSchema:g.gl},P("omniroute_simulate_route",a=>y(g.gl.parse(a)))),a.registerTool("omniroute_set_budget_guard",{description:"Sets a session budget limit with configurable action when exceeded (degrade/block/alert)",inputSchema:g.b9},P("omniroute_set_budget_guard",a=>z(g.b9.parse(a)))),a.registerTool("omniroute_set_resilience_profile",{description:"Applies a resilience profile controlling circuit breakers, retries, timeouts, and fallback depth",inputSchema:g.dE},P("omniroute_set_resilience_profile",a=>A(g.dE.parse(a)))),a.registerTool("omniroute_test_combo",{description:"Tests each provider in a combo with a real prompt, reporting latency, cost, and success per provider",inputSchema:g.n0},P("omniroute_test_combo",a=>B(g.n0.parse(a)))),a.registerTool("omniroute_get_provider_metrics",{description:"Returns detailed metrics for a specific provider including latency percentiles and circuit breaker state",inputSchema:g.xs},P("omniroute_get_provider_metrics",a=>C(g.xs.parse(a)))),a.registerTool("omniroute_best_combo_for_task",{description:"Recommends the best combo for a task type based on provider fitness and constraints",inputSchema:g.h0},P("omniroute_best_combo_for_task",a=>D(g.h0.parse(a)))),a.registerTool("omniroute_explain_route",{description:"Explains why a request was routed to a specific provider, showing scoring factors and fallbacks",inputSchema:g.t7},P("omniroute_explain_route",a=>E(g.t7.parse(a)))),a.registerTool("omniroute_get_session_snapshot",{description:"Returns a full snapshot of the current working session: cost, tokens, top models, errors, budget status",inputSchema:g.ne},P("omniroute_get_session_snapshot",async a=>(g.ne.parse(a??{}),F()))),a}async function Z(){let a=Y(),b=new f.S,c=process.env.npm_package_version||"1.8.1",d=(0,h.rs)({version:c,scopesEnforced:I,allowedScopes:Array.from(J),toolCount:g.nS.length}),e=()=>{d()};process.once("exit",e),process.once("SIGINT",e),process.once("SIGTERM",e),console.error("[MCP] OmniRoute MCP Server starting (stdio transport)...");try{await a.connect(b),console.error("[MCP] OmniRoute MCP Server connected and ready.")}finally{e(),process.off("exit",e),process.off("SIGINT",e),process.off("SIGTERM",e)}}process.argv[1]&&"file:///home/runner/work/OmniRoute/OmniRoute/open-sse/mcp-server/server.ts".endsWith(process.argv[1].replace(/\\/g,"/"))&&Z().catch(a=>{console.error("[MCP] Fatal error:",a),process.exit(1)});var $=c(60021);let _=null,aa=null,ab=null,ac=null;function ad(a){if(_&&aa&&ac===a)return{server:_,transport:aa};if(aa)try{aa.close()}catch{}return _=Y(),aa=new $.a({sessionIdGenerator:()=>(0,d.randomUUID)()}),ac=a,ab=Date.now(),_.connect(aa),console.log(`[MCP] HTTP transport started (${a})`),{server:_,transport:aa}}async function ae(a){let{transport:b}=ad("streamable-http");try{return await b.handleRequest(a)}catch(a){return console.error("[MCP] Streamable HTTP error:",a),new Response(JSON.stringify({error:"MCP transport error"}),{status:500,headers:{"Content-Type":"application/json"}})}}async function af(a){let{transport:b}=ad("sse");try{return await b.handleRequest(a)}catch(a){return console.error("[MCP] SSE error:",a),new Response(JSON.stringify({error:"MCP SSE transport error"}),{status:500,headers:{"Content-Type":"application/json"}})}}function ag(){return{online:null!==aa&&null!==ac,transport:ac,startedAt:ab,uptime:ab?`${Math.floor((Date.now()-ab)/1e3)}s`:null}}},64926:(a,b,c)=>{async function d(a){let b=JSON.stringify(a),c=new TextEncoder;return Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256",c.encode(b)))).map(a=>a.toString(16).padStart(2,"0")).join("")}function e(a){return"string"==typeof a?a:null}function f(a,b){let c=i(a,b);return Number.isFinite(c)?Math.max(0,Math.floor(c)):b}function g(a){return{id:f(a.id,0),toolName:j(a.tool_name),inputHash:j(a.input_hash),outputSummary:j(a.output_summary),durationMs:i(a.duration_ms,0),apiKeyId:e(a.api_key_id),success:function(a,b=!1){return"boolean"==typeof a?a:1===a||"1"===a||0!==a&&"0"!==a&&b}(a.success,!1),errorCode:e(a.error_code),createdAt:j(a.created_at)}}c.d(b,{JY:()=>n,Bv:()=>l,Gj:()=>m});let h=null;function i(a,b=0){let c="number"==typeof a?a:"string"==typeof a&&a.trim().length>0?Number(a):NaN;return Number.isFinite(c)?c:b}function j(a){return"string"==typeof a?a:""}async function k(){if(h)return h;try{let{homedir:a}=await Promise.resolve().then(c.t.bind(c,48161,23)),{join:b}=await Promise.resolve().then(c.t.bind(c,76760,23)),{existsSync:d}=await Promise.resolve().then(c.t.bind(c,73024,23)),e=process.env.DATA_DIR?b(process.env.DATA_DIR,"storage.sqlite"):b(a(),".omniroute","storage.sqlite");if(!d(e))return console.error(`[MCP Audit] Database not found at ${e} — audit logging disabled`),null;return h=new(await Promise.resolve().then(c.t.bind(c,87550,23))).default(e)}catch(a){return console.error("[MCP Audit] Failed to connect to database:",a instanceof Error?a.message:String(a)),null}}async function l(a,b,c,e,f,g){try{let h=await k();if(!h)return;let i=await d(b),j=function(a,b=200){if(null==a)return"(null)";let c="string"==typeof a?a:JSON.stringify(a);return c.length<=b?c:c.slice(0,b)+"…"}(c),l=process.env.OMNIROUTE_API_KEY_ID||null;h.prepare(`INSERT INTO mcp_tool_audit (tool_name, input_hash, output_summary, duration_ms, api_key_id, success, error_code)
|
|
1
|
+
"use strict";exports.id=3969,exports.ids=[3969],exports.modules={13419:(a,b,c)=>{c.d(b,{H:()=>h,J:()=>g});let d=["valid","expiring","expired","refreshing"];function e(a){if("number"==typeof a&&Number.isFinite(a))return a;if("string"==typeof a&&""!==a.trim()){let b=Number(a);if(Number.isFinite(b))return b}return null}function f(a,b,c){return Math.min(c,Math.max(b,a))}function g(a){var b;let c=a&&"object"==typeof a?a:{},g="string"==typeof c.provider?c.provider:"unknown",h="string"==typeof c.name&&c.name.trim()?c.name:g,i="string"==typeof c.connectionId&&c.connectionId.trim()?c.connectionId:"unknown",j=e(c.quotaTotal),k=null!==j&&j>=0?j:null,l=e(c.quotaUsed)??0,m=null!==k?f(l,0,k):Math.max(0,l),n=e(c.percentRemaining);return null===n&&(n=k&&k>0?(k-m)/k*100:100),{name:h,provider:g,connectionId:i,quotaUsed:m,quotaTotal:k,percentRemaining:f(n,0,100),resetAt:"string"==typeof c.resetAt&&c.resetAt.trim()?c.resetAt:null,tokenStatus:"string"==typeof(b=c.tokenStatus)&&d.includes(b)?b:"valid"}}function h(a,b={}){let c=a&&"object"==typeof a?a:{},d=(Array.isArray(c.providers)?c.providers:Array.isArray(a)?a:[]).map(a=>g(a)),e=c.meta&&"object"==typeof c.meta?c.meta:{},f=e.filters&&"object"==typeof e.filters?e.filters:{},i=b.provider??("string"==typeof f.provider&&f.provider.trim()?f.provider:null),j=b.connectionId??("string"==typeof f.connectionId&&f.connectionId.trim()?f.connectionId:null);return{providers:d,meta:{generatedAt:"string"==typeof e.generatedAt&&e.generatedAt.trim()?e.generatedAt:new Date().toISOString(),filters:{provider:i||null,connectionId:j||null},totalProviders:d.length}}}},43620:(a,b,c)=>{c.d(b,{Im:()=>n,c7:()=>i,h6:()=>l,jW:()=>m,rs:()=>k});var d=c(73024),e=c(48161),f=c(76760);let g="runtime";function h(){let a=process.env.DATA_DIR;return"string"==typeof a&&a.trim().length>0?a.trim():(0,f.join)((0,e.homedir)(),".omniroute")}function i(){return(0,f.join)(h(),g,"mcp-heartbeat.json")}async function j(a){let b=i(),c=(0,f.join)(h(),g);await d.promises.mkdir(c,{recursive:!0}),await d.promises.writeFile(b,JSON.stringify(a,null,2),"utf-8")}function k(a){let b=new Date().toISOString(),c=null,d=!1,e="number"==typeof a.intervalMs&&a.intervalMs>0?a.intervalMs:5e3,f=async()=>{if(d)return;let c={pid:process.pid,startedAt:b,lastHeartbeatAt:new Date().toISOString(),version:a.version,transport:"stdio",scopesEnforced:a.scopesEnforced,allowedScopes:[...a.allowedScopes],toolCount:a.toolCount};try{await j(c)}catch(a){console.error("[MCP Heartbeat] Failed to write heartbeat:",a instanceof Error?a.message:String(a))}};return f(),c=setInterval(()=>{f()},e),()=>{d||(d=!0,c&&(clearInterval(c),c=null),f())}}async function l(){let a=i();try{let b=await d.promises.readFile(a,"utf-8"),c=JSON.parse(b);if(!c||"object"!=typeof c||"number"!=typeof c.pid||"string"!=typeof c.startedAt||"string"!=typeof c.lastHeartbeatAt||"string"!=typeof c.version||"stdio"!==c.transport||"boolean"!=typeof c.scopesEnforced||!Array.isArray(c.allowedScopes)||"number"!=typeof c.toolCount)return null;let e=c.allowedScopes.filter(a=>"string"==typeof a);return{pid:c.pid,startedAt:c.startedAt,lastHeartbeatAt:c.lastHeartbeatAt,version:c.version,transport:"stdio",scopesEnforced:c.scopesEnforced,allowedScopes:e,toolCount:c.toolCount}}catch{return null}}function m(a){if(!Number.isFinite(a)||a<=0)return!1;try{return process.kill(a,0),!0}catch{return!1}}function n(a,b){if(!a)return!1;let c="number"==typeof b?.staleAfterMs&&b.staleAfterMs>0?b.staleAfterMs:15e3,d=Date.now()-new Date(a.lastHeartbeatAt).getTime();return!!Number.isFinite(d)&&!(d>c)&&(b?.requireLivePid===!1||m(a.pid))}},63969:(a,b,c)=>{c.d(b,{lJ:()=>ag,e5:()=>af,V6:()=>ae});var d=c(77598),e=c(3226),f=c(68557),g=c(2306),h=c(43620),i=c(64926);function j(a){return Array.isArray(a)?Array.from(new Set(a.filter(a=>"string"==typeof a).map(a=>a.trim()).filter(Boolean))):[]}var k=c(13419);let l=process.env.OMNIROUTE_BASE_URL||"http://localhost:20128",m=process.env.OMNIROUTE_API_KEY||"";async function n(a,b={}){let c=`${l}${a}`,d={"Content-Type":"application/json",...m?{Authorization:`Bearer ${m}`}:{},...b.headers||{}},e=await fetch(c,{...b,headers:d,signal:AbortSignal.timeout(3e4)});if(!e.ok){let a=await e.text().catch(()=>"Unknown error");throw Error(`API [${e.status}]: ${a}`)}return e.json()}function o(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function p(a){return o(a)?a:{}}function q(a){return Array.isArray(a)?a.filter(o):[]}function r(a,b=""){return"string"==typeof a?a:b}function s(a,b=0){let c="number"==typeof a?a:"string"==typeof a&&a.trim().length>0?Number(a):NaN;return Number.isFinite(c)?c:b}function t(a){let b=q(a.models),c=q(p(a.data).models);return(b.length>0?b:c).map(a=>({provider:r(a.provider,"unknown"),model:r(a.model,""),inputCostPer1M:s(a.inputCostPer1M,3)}))}function u(a){if(Array.isArray(a))return a.filter(o);let b=p(a);return Array.isArray(b.combos)?b.combos.filter(o):[]}let v=null,w={aggressive:{profiles:{oauth:{transientCooldown:3e3,rateLimitCooldown:3e4,maxBackoffLevel:4,circuitBreakerThreshold:2,circuitBreakerReset:3e4},apikey:{transientCooldown:2e3,rateLimitCooldown:0,maxBackoffLevel:3,circuitBreakerThreshold:3,circuitBreakerReset:15e3}},defaults:{requestsPerMinute:180,minTimeBetweenRequests:100,concurrentRequests:16}},balanced:{profiles:{oauth:{transientCooldown:5e3,rateLimitCooldown:6e4,maxBackoffLevel:8,circuitBreakerThreshold:3,circuitBreakerReset:6e4},apikey:{transientCooldown:3e3,rateLimitCooldown:0,maxBackoffLevel:5,circuitBreakerThreshold:5,circuitBreakerReset:3e4}},defaults:{requestsPerMinute:100,minTimeBetweenRequests:200,concurrentRequests:10}},conservative:{profiles:{oauth:{transientCooldown:8e3,rateLimitCooldown:12e4,maxBackoffLevel:10,circuitBreakerThreshold:8,circuitBreakerReset:12e4},apikey:{transientCooldown:5e3,rateLimitCooldown:3e4,maxBackoffLevel:8,circuitBreakerThreshold:8,circuitBreakerReset:6e4}},defaults:{requestsPerMinute:60,minTimeBetweenRequests:350,concurrentRequests:6}}},x={coding:{preferred:["claude","deepseek","codex"],traits:["fast","code-optimized"]},review:{preferred:["claude","gemini","openai"],traits:["analytical","thorough"]},planning:{preferred:["gemini","claude","openai"],traits:["reasoning","structured"]},analysis:{preferred:["gemini","claude"],traits:["deep-reasoning","large-context"]},debugging:{preferred:["claude","deepseek","codex"],traits:["code-aware","fast"]},documentation:{preferred:["gemini","claude","openai"],traits:["clear","structured"]}};async function y(a){let b=Date.now();try{let[c,d,e]=await Promise.allSettled([n("/api/combos"),n("/api/monitoring/health"),n("/api/usage/quota")]),f="fulfilled"===c.status?u(c.value):[],g="fulfilled"===d.status?p(d.value):{},h="fulfilled"===e.status?(0,k.H)(e.value):(0,k.H)({}),j=a.combo?f.find(b=>r(b.id)===a.combo||r(b.name)===a.combo):f.find(a=>!1!==a.enabled);if(!j)return{content:[{type:"text",text:JSON.stringify({error:"No matching combo found"})}],isError:!0};let l=t(j),m=q(g.circuitBreakers),o=h.providers,s=l.map((b,c)=>{let d=m.find(a=>r(a.provider)===b.provider),e=o.find(a=>a.provider===b.provider),f=a.promptTokenEstimate/1e6*b.inputCostPer1M;return{provider:b.provider,model:b.model||a.model,probability:0===c?.85:.15/Math.max(l.length-1,1),estimatedCost:Math.round(1e4*f)/1e4,healthStatus:r(d?.state,"CLOSED"),quotaAvailable:e?.percentRemaining??100}}),v=s.map(a=>a.estimatedCost),w={simulatedPath:s,fallbackTree:{primary:s[0]?.provider||"unknown",fallbacks:s.slice(1).map(a=>a.provider),worstCaseCost:Math.max(...v,0),bestCaseCost:Math.min(...v,0)}};return await (0,i.Bv)("omniroute_simulate_route",a,w,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(w,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_simulate_route",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function z(a){let b=Date.now();try{let c=0;try{let a=p(await n("/api/usage/analytics?period=session"));c=s(a.totalCost,0)}catch{}v={sessionId:`budget_${Date.now()}`,maxCost:a.maxCost,action:a.action,degradeToTier:a.degradeToTier,spent:c,createdAt:new Date().toISOString()};let d=Math.max(0,a.maxCost-c),e={sessionId:v.sessionId,budgetTotal:a.maxCost,budgetSpent:Math.round(1e4*c)/1e4,budgetRemaining:Math.round(1e4*d)/1e4,action:a.action,status:d<=0?"exceeded":d<.2*a.maxCost?"warning":"active"};return await (0,i.Bv)("omniroute_set_budget_guard",{maxCost:a.maxCost,action:a.action},e,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(e,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_set_budget_guard",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function A(a){let b=Date.now();try{let c=w[a.profile];if(!c)return{content:[{type:"text",text:`Error: Invalid profile "${a.profile}"`}],isError:!0};await n("/api/resilience",{method:"PATCH",body:JSON.stringify({profiles:c.profiles,defaults:c.defaults})});let d={applied:!0,profile:a.profile,settings:c};return await (0,i.Bv)("omniroute_set_resilience_profile",a,d,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(d,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_set_resilience_profile",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function B(a){let b=Date.now();try{let c=u(await n("/api/combos")).find(b=>r(b.id)===a.comboId||r(b.name)===a.comboId);if(!c)return{content:[{type:"text",text:JSON.stringify({error:`Combo "${a.comboId}" not found`})}],isError:!0};let d=t(c),e=(a.testPrompt||"Say hello").slice(0,200),f=(await Promise.allSettled(d.map(async a=>{let b=Date.now();try{let c=p(await n("/v1/chat/completions",{method:"POST",body:JSON.stringify({model:a.model||"auto",messages:[{role:"user",content:e}],max_tokens:50,stream:!1,"x-provider":a.provider})})),d=p(c.usage);return{provider:a.provider,model:a.model||r(c.model,"unknown"),success:!0,latencyMs:Date.now()-b,cost:s(c.cost,0),tokenCount:s(d.prompt_tokens,0)+s(d.completion_tokens,0)}}catch(c){return{provider:a.provider,model:a.model||"unknown",success:!1,latencyMs:Date.now()-b,cost:0,tokenCount:0,error:c instanceof Error?c.message:String(c)}}}))).map(a=>"fulfilled"===a.status?a.value:{provider:"unknown",model:"unknown",success:!1,latencyMs:0,cost:0,tokenCount:0,error:"Promise rejected"}),g=f.filter(a=>a.success),h=g.sort((a,b)=>a.latencyMs-b.latencyMs)[0],j=g.sort((a,b)=>a.cost-b.cost)[0],k={results:f,summary:{totalProviders:f.length,successful:g.length,fastestProvider:h?.provider||"none",cheapestProvider:j?.provider||"none"}};return await (0,i.Bv)("omniroute_test_combo",{comboId:a.comboId},k.summary,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(k,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_test_combo",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function C(a){let b=Date.now();try{let[c,d,e]=await Promise.allSettled([n("/api/monitoring/health"),n(`/api/usage/quota?provider=${encodeURIComponent(a.provider)}`),n(`/api/usage/analytics?period=session&provider=${encodeURIComponent(a.provider)}`)]),f="fulfilled"===c.status?p(c.value):{},g="fulfilled"===d.status?(0,k.H)(d.value,{provider:a.provider}):(0,k.H)({}),h="fulfilled"===e.status?p(e.value):{},j=q(f.circuitBreakers).find(b=>r(b.provider)===a.provider),l=g.providers.find(b=>b.provider===a.provider)||null,m={provider:a.provider,successRate:s(h.successRate,1),requestCount:s(h.requestCount,0),avgLatencyMs:s(h.avgLatencyMs,0),p50LatencyMs:s(h.p50LatencyMs,0),p95LatencyMs:s(h.p95LatencyMs,0),p99LatencyMs:s(h.p99LatencyMs,0),errorRate:s(h.errorRate,0),lastError:r(h.lastError)||null,circuitBreakerState:r(j?.state,"CLOSED"),quotaInfo:l?{used:l.quotaUsed,total:l.quotaTotal,resetAt:l.resetAt}:{used:0,total:null,resetAt:null}};return await (0,i.Bv)("omniroute_get_provider_metrics",a,m,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(m,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_get_provider_metrics",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function D(a){let b=Date.now();try{let c=x[a.taskType]||x.coding,d=u(await n("/api/combos")).filter(a=>!1!==a.enabled);if(0===d.length)return{content:[{type:"text",text:JSON.stringify({error:"No enabled combos available"})}],isError:!0};let e=d.map(a=>{let b=t(a),d=0;for(let a of b){let b=c.preferred.indexOf(a.provider);b>=0&&(d+=(c.preferred.length-b)*10)}let e=r(a.name).toLowerCase();for(let a of c.traits)e.includes(a)&&(d+=5);let f=e.includes("free")||b.every(a=>a.provider.toLowerCase().includes("free"));return{combo:a,score:d,isFree:f}});e.sort((a,b)=>b.score-a.score);let f=e[0],g=e.slice(1,4).map(a=>({id:a.combo.id,name:a.combo.name,tradeoff:a.isFree?"free but may have limits":a.score<.5*f.score?"cheaper but slower":"similar quality, different providers"})),h=e.find(a=>a.isFree&&a!==f),j={recommendedCombo:{id:f.combo.id,name:f.combo.name,reason:`Best match for "${a.taskType}": preferred providers (${c.preferred.slice(0,3).join(", ")})`},alternatives:g,freeAlternative:h?{id:h.combo.id,name:h.combo.name}:null};return await (0,i.Bv)("omniroute_best_combo_for_task",a,j.recommendedCombo,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(j,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_best_combo_for_task",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function E(a){let b=Date.now();try{let c=null;try{c=p(await n(`/api/routing/decisions/${encodeURIComponent(a.requestId)}`))}catch{}let d=c?{requestId:a.requestId,decision:{comboUsed:c.comboUsed||"default",providerSelected:c.providerSelected||"unknown",modelUsed:c.modelUsed||"unknown",score:c.score||0,factors:c.factors||[{name:"health",value:1,weight:.3,contribution:.3},{name:"quota",value:1,weight:.25,contribution:.25},{name:"cost",value:.8,weight:.2,contribution:.16},{name:"latency",value:.9,weight:.15,contribution:.135},{name:"task_fit",value:.7,weight:.1,contribution:.07}],fallbacksTriggered:c.fallbacksTriggered||[],costActual:c.costActual||0,latencyActual:c.latencyActual||0}}:{requestId:a.requestId,decision:{comboUsed:"unknown",providerSelected:"unknown",modelUsed:"unknown",score:0,factors:[],fallbacksTriggered:[],costActual:0,latencyActual:0},note:"Routing decision not found. The /api/routing/decisions endpoint may not be implemented yet, or the requestId is invalid."};return await (0,i.Bv)("omniroute_explain_route",a,{requestId:a.requestId},Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(d,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_explain_route",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function F(){let a=Date.now();try{let b=p(await n("/api/usage/analytics?period=session").catch(()=>({}))),c=p(b.tokenCount),d=q(b.byModel),e=q(b.byProvider),f={sessionStart:r(b.sessionStart,new Date().toISOString()),duration:r(b.duration,"unknown"),requestCount:s(b.requestCount,0),costTotal:s(b.totalCost,0),tokenCount:{prompt:s(c.prompt,0),completion:s(c.completion,0)},topModels:d.slice(0,5).map(a=>({model:r(a.model,"unknown"),count:s(a.requests,0)})),topProviders:e.slice(0,5).map(a=>({provider:r(a.name,"unknown"),count:s(a.requests,0)})),errors:s(b.errorCount,0),fallbacks:s(b.fallbackCount,0),budgetGuard:v?{active:!0,remaining:Math.max(0,v.maxCost-v.spent),action:v.action}:null};return await (0,i.Bv)("omniroute_get_session_snapshot",{},{requestCount:f.requestCount},Date.now()-a,!0),{content:[{type:"text",text:JSON.stringify(f,null,2)}]}}catch(c){let b=c instanceof Error?c.message:String(c);return await (0,i.Bv)("omniroute_get_session_snapshot",{},null,Date.now()-a,!1,b),{content:[{type:"text",text:`Error: ${b}`}],isError:!0}}}let G=process.env.OMNIROUTE_BASE_URL||"http://localhost:20128",H=process.env.OMNIROUTE_API_KEY||"",I="true"===process.env.OMNIROUTE_MCP_ENFORCE_SCOPES,J=new Set((process.env.OMNIROUTE_MCP_SCOPES||"").split(",").map(a=>a.trim()).filter(Boolean));function K(a){return a&&"object"==typeof a&&!Array.isArray(a)?a:{}}function L(a){return Array.isArray(a)?a:[]}function M(a,b=""){return"string"==typeof a?a:b}function N(a,b=0){return"number"==typeof a&&Number.isFinite(a)?a:b}async function O(a,b={}){let c=`${G}${a}`,d={"Content-Type":"application/json",...H?{Authorization:`Bearer ${H}`}:{},...b.headers||{}},e=await fetch(c,{...b,headers:d,signal:AbortSignal.timeout(1e4)});if(!e.ok){let a=await e.text().catch(()=>"Unknown error");throw Error(`OmniRoute API error [${e.status}]: ${a}`)}return e.json()}function P(a,b){return async(c,d)=>{let e=function(a,b=[]){let c="string"==typeof a?.authInfo?.clientId&&a.authInfo.clientId.trim()||"string"==typeof a?.sessionId&&a.sessionId.trim()||"anonymous",d=j(a?.authInfo?.scopes);if(d.length>0)return{callerId:c,scopes:d,source:"authInfo"};let e=function(a){if(!a||"object"!=typeof a)return[];let b=j(a.scopes);if(b.length>0)return b;let c=a.auth;if(c&&"object"==typeof c){let a=j(c.scopes);if(a.length>0)return a}let d=a.omniroute;if(d&&"object"==typeof d){let a=j(d.scopes);if(a.length>0)return a}return[]}(a?._meta);if(e.length>0)return{callerId:c,scopes:e,source:"meta"};let f=j(b);return f.length>0?{callerId:c,scopes:f,source:"env"}:{callerId:c,scopes:[],source:"none"}}(d,Array.from(J)),f=function(a,b,c){let d=g.Dk[a];if(!d)return{allowed:!1,required:[],provided:Array.from(b),missing:[],reason:"tool_definition_missing"};let e=Array.isArray(d.scopes)?Array.from(d.scopes):[],f=j(b);if(!c||0===e.length)return{allowed:!0,required:e,provided:f,missing:[]};let h=e.filter(a=>!f.some(b=>(function(a,b){if("*"===a||a===b)return!0;if(a.endsWith("*")){let c=a.slice(0,-1);return b.startsWith(c)}return!1})(b,a)));return{allowed:0===h.length,required:e,provided:f,missing:h,reason:h.length>0?"missing_scopes":void 0}}(a,e.scopes,I);if(!f.allowed){let b=f.missing.length>0?f.missing.join(", "):"unavailable",d=f.reason||"scope_check_failed",g=`Insufficient MCP scopes for ${a}. Missing: ${b}. Caller=${e.callerId}, source=${e.source}.`,h=c&&"object"==typeof c?K(c):{rawArgs:c};return await (0,i.Bv)(a,{...h,_scopeCheck:{callerId:e.callerId,source:e.source,required:f.required,provided:f.provided,missing:f.missing}},null,0,!1,`scope_denied:${d}`),{content:[{type:"text",text:`Error: ${g}`}],isError:!0}}return b(c,d)}}async function Q(){let a=Date.now();try{let[b,c,d]=await Promise.allSettled([O("/api/monitoring/health"),O("/api/resilience"),O("/api/rate-limits")]),e="fulfilled"===b.status?K(b.value):{},f="fulfilled"===c.status?K(c.value):{},g="fulfilled"===d.status?K(d.value):{},h=K(e.memoryUsage),j=K(e.cacheStats),k=L(f.circuitBreakers),l=L(g.limits),m={uptime:M(e.uptime,"unknown"),version:M(e.version,"unknown"),memoryUsage:{heapUsed:N(h.heapUsed,0),heapTotal:N(h.heapTotal,0)},circuitBreakers:k,rateLimits:l,cacheStats:Object.keys(j).length>0?{hits:N(j.hits,0),misses:N(j.misses,0),hitRate:N(j.hitRate,0)}:void 0};return await (0,i.Bv)("omniroute_get_health",{},m,Date.now()-a,!0),{content:[{type:"text",text:JSON.stringify(m,null,2)}]}}catch(c){let b=c instanceof Error?c.message:String(c);return await (0,i.Bv)("omniroute_get_health",{},null,Date.now()-a,!1,b),{content:[{type:"text",text:`Error: ${b}`}],isError:!0}}}async function R(a){let b=Date.now();try{let c=await O("/api/combos"),d=K(c),e=Array.isArray(d.combos)?d.combos:Array.isArray(c)?c:[],f={};a.includeMetrics&&(f=K(await O("/api/combos/metrics").catch(()=>({}))));let g={combos:L(e).map(b=>{let c=K(b),d=K(c.data),e=M(c.id,""),g=Array.isArray(c.models)&&c.models.length>0?c.models:d.models;return{id:e,name:M(c.name,e||"unnamed"),models:L(g).map((a,b)=>{let c=K(a);return{provider:M(c.provider,"unknown"),model:M(c.model,"unknown"),priority:N(c.priority,b+1)}}),strategy:M(c.strategy,M(d.strategy,"priority")),enabled:!1!==c.enabled,...a.includeMetrics?{metrics:f[e]??null}:{}}})};return await (0,i.Bv)("omniroute_list_combos",a,g,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(g,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_list_combos",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function S(a){let b=Date.now();try{let c=await O(`/api/combos/metrics?comboId=${encodeURIComponent(a.comboId)}`);return await (0,i.Bv)("omniroute_get_combo_metrics",a,c,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(c,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_get_combo_metrics",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function T(a){let b=Date.now();try{let c=await O(`/api/combos/${encodeURIComponent(a.comboId)}`,{method:"PUT",body:JSON.stringify({isActive:a.active})});return await (0,i.Bv)("omniroute_switch_combo",a,c,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(c,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_switch_combo",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function U(a){let b=Date.now();try{let c="/api/usage/quota";a.connectionId?c+=`?connectionId=${encodeURIComponent(a.connectionId)}`:a.provider&&(c+=`?provider=${encodeURIComponent(a.provider)}`);let d=(0,k.H)(await O(c),{provider:a.provider||null,connectionId:a.connectionId||null});return await (0,i.Bv)("omniroute_check_quota",a,d,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(d,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_check_quota",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function V(a){let b=Date.now();try{let c={model:a.model,messages:a.messages,stream:!1};a.combo&&(c["x-combo"]=a.combo);let d=await O("/v1/chat/completions",{method:"POST",body:JSON.stringify(c)}),e=L(d.choices),f=K(e[0]),g=K(f.message),h=K(d.usage),j={response:{content:M(g.content,""),model:M(d.model,a.model),tokens:{prompt:N(h.prompt_tokens,0),completion:N(h.completion_tokens,0)}},routing:{provider:M(d.provider,"unknown"),combo:d.combo??null,fallbacksTriggered:N(d.fallbacksTriggered,0),cost:N(d.cost,0),latencyMs:Date.now()-b,routingExplanation:M(d.routingExplanation,"Request routed through primary provider")}};return await (0,i.Bv)("omniroute_route_request",{model:a.model,messageCount:a.messages.length},j.routing,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(j,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_route_request",{model:a.model},null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function W(a){let b=Date.now();try{let c=a.period||"session",d={session:"1d",day:"1d",week:"7d",month:"30d"}[c]||"30d",e=K(await O(`/api/usage/analytics?range=${encodeURIComponent(d)}`)),f=K(e.tokenCount),g=K(e.budget),h={period:c,totalCost:N(e.totalCost,0),requestCount:N(e.requestCount,0),tokenCount:{prompt:N(f.prompt,0),completion:N(f.completion,0)},byProvider:L(e.byProvider),byModel:L(e.byModel),budget:{limit:g.limit??null,remaining:g.remaining??null}};return await (0,i.Bv)("omniroute_cost_report",a,h,Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(h,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_cost_report",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}async function X(a){let b=Date.now();try{let c="/v1/models",d=new URLSearchParams;a.provider&&d.set("provider",a.provider),a.capability&&d.set("capability",a.capability),d.toString()&&(c+=`?${d.toString()}`);let e=K(await O(c)),f={models:L(e.data).map(a=>{let b=K(a);return{id:M(b.id,""),provider:M(b.owned_by,M(b.provider,"unknown")),capabilities:function(a,b=[]){let c=L(a).filter(a=>"string"==typeof a);return c.length>0?c:b}(b.capabilities,["chat"]),status:M(b.status,"available"),pricing:b.pricing}})};return await (0,i.Bv)("omniroute_list_models_catalog",a,{modelCount:f.models.length},Date.now()-b,!0),{content:[{type:"text",text:JSON.stringify(f,null,2)}]}}catch(d){let c=d instanceof Error?d.message:String(d);return await (0,i.Bv)("omniroute_list_models_catalog",a,null,Date.now()-b,!1,c),{content:[{type:"text",text:`Error: ${c}`}],isError:!0}}}function Y(){let a=new e._({name:"omniroute",version:process.env.npm_package_version||"1.8.1"});return a.registerTool("omniroute_get_health",{description:"Returns OmniRoute health status including uptime, memory, circuit breakers, rate limits, and cache stats",inputSchema:g.nu},P("omniroute_get_health",async a=>(g.nu.parse(a??{}),Q()))),a.registerTool("omniroute_list_combos",{description:"Lists all configured combos (model chains) with strategies and optional metrics",inputSchema:g.ME},P("omniroute_list_combos",a=>R(g.ME.parse(a)))),a.registerTool("omniroute_get_combo_metrics",{description:"Returns detailed performance metrics for a specific combo",inputSchema:g.Gs},P("omniroute_get_combo_metrics",a=>S(g.Gs.parse(a)))),a.registerTool("omniroute_switch_combo",{description:"Activates or deactivates a combo for routing",inputSchema:g.B1},P("omniroute_switch_combo",a=>T(g.B1.parse(a)))),a.registerTool("omniroute_check_quota",{description:"Checks remaining API quota for one or all providers",inputSchema:g.Fp},P("omniroute_check_quota",a=>U(g.Fp.parse(a)))),a.registerTool("omniroute_route_request",{description:"Sends a chat completion request through OmniRoute intelligent routing",inputSchema:g.fL},P("omniroute_route_request",a=>V(g.fL.parse(a)))),a.registerTool("omniroute_cost_report",{description:"Generates a cost report for the specified period",inputSchema:g.c},P("omniroute_cost_report",a=>W(g.c.parse(a)))),a.registerTool("omniroute_list_models_catalog",{description:"Lists all available AI models across providers with capabilities and pricing",inputSchema:g._v},P("omniroute_list_models_catalog",a=>X(g._v.parse(a)))),a.registerTool("omniroute_simulate_route",{description:"Simulates the routing path a request would take without executing it (dry-run)",inputSchema:g.gl},P("omniroute_simulate_route",a=>y(g.gl.parse(a)))),a.registerTool("omniroute_set_budget_guard",{description:"Sets a session budget limit with configurable action when exceeded (degrade/block/alert)",inputSchema:g.b9},P("omniroute_set_budget_guard",a=>z(g.b9.parse(a)))),a.registerTool("omniroute_set_resilience_profile",{description:"Applies a resilience profile controlling circuit breakers, retries, timeouts, and fallback depth",inputSchema:g.dE},P("omniroute_set_resilience_profile",a=>A(g.dE.parse(a)))),a.registerTool("omniroute_test_combo",{description:"Tests each provider in a combo with a real prompt, reporting latency, cost, and success per provider",inputSchema:g.n0},P("omniroute_test_combo",a=>B(g.n0.parse(a)))),a.registerTool("omniroute_get_provider_metrics",{description:"Returns detailed metrics for a specific provider including latency percentiles and circuit breaker state",inputSchema:g.xs},P("omniroute_get_provider_metrics",a=>C(g.xs.parse(a)))),a.registerTool("omniroute_best_combo_for_task",{description:"Recommends the best combo for a task type based on provider fitness and constraints",inputSchema:g.h0},P("omniroute_best_combo_for_task",a=>D(g.h0.parse(a)))),a.registerTool("omniroute_explain_route",{description:"Explains why a request was routed to a specific provider, showing scoring factors and fallbacks",inputSchema:g.t7},P("omniroute_explain_route",a=>E(g.t7.parse(a)))),a.registerTool("omniroute_get_session_snapshot",{description:"Returns a full snapshot of the current working session: cost, tokens, top models, errors, budget status",inputSchema:g.ne},P("omniroute_get_session_snapshot",async a=>(g.ne.parse(a??{}),F()))),a}async function Z(){let a=Y(),b=new f.S,c=process.env.npm_package_version||"1.8.1",d=(0,h.rs)({version:c,scopesEnforced:I,allowedScopes:Array.from(J),toolCount:g.nS.length}),e=()=>{d()};process.once("exit",e),process.once("SIGINT",e),process.once("SIGTERM",e),console.error("[MCP] OmniRoute MCP Server starting (stdio transport)...");try{await a.connect(b),console.error("[MCP] OmniRoute MCP Server connected and ready.")}finally{e(),process.off("exit",e),process.off("SIGINT",e),process.off("SIGTERM",e)}}process.argv[1]&&"file:///home/diegosouzapw/dev/proxys/9router/open-sse/mcp-server/server.ts".endsWith(process.argv[1].replace(/\\/g,"/"))&&Z().catch(a=>{console.error("[MCP] Fatal error:",a),process.exit(1)});var $=c(60021);let _=null,aa=null,ab=null,ac=null;function ad(a){if(_&&aa&&ac===a)return{server:_,transport:aa};if(aa)try{aa.close()}catch{}return _=Y(),aa=new $.a({sessionIdGenerator:()=>(0,d.randomUUID)()}),ac=a,ab=Date.now(),_.connect(aa),console.log(`[MCP] HTTP transport started (${a})`),{server:_,transport:aa}}async function ae(a){let{transport:b}=ad("streamable-http");try{return await b.handleRequest(a)}catch(a){return console.error("[MCP] Streamable HTTP error:",a),new Response(JSON.stringify({error:"MCP transport error"}),{status:500,headers:{"Content-Type":"application/json"}})}}async function af(a){let{transport:b}=ad("sse");try{return await b.handleRequest(a)}catch(a){return console.error("[MCP] SSE error:",a),new Response(JSON.stringify({error:"MCP SSE transport error"}),{status:500,headers:{"Content-Type":"application/json"}})}}function ag(){return{online:null!==aa&&null!==ac,transport:ac,startedAt:ab,uptime:ab?`${Math.floor((Date.now()-ab)/1e3)}s`:null}}},64926:(a,b,c)=>{async function d(a){let b=JSON.stringify(a),c=new TextEncoder;return Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256",c.encode(b)))).map(a=>a.toString(16).padStart(2,"0")).join("")}function e(a){return"string"==typeof a?a:null}function f(a,b){let c=i(a,b);return Number.isFinite(c)?Math.max(0,Math.floor(c)):b}function g(a){return{id:f(a.id,0),toolName:j(a.tool_name),inputHash:j(a.input_hash),outputSummary:j(a.output_summary),durationMs:i(a.duration_ms,0),apiKeyId:e(a.api_key_id),success:function(a,b=!1){return"boolean"==typeof a?a:1===a||"1"===a||0!==a&&"0"!==a&&b}(a.success,!1),errorCode:e(a.error_code),createdAt:j(a.created_at)}}c.d(b,{JY:()=>n,Bv:()=>l,Gj:()=>m});let h=null;function i(a,b=0){let c="number"==typeof a?a:"string"==typeof a&&a.trim().length>0?Number(a):NaN;return Number.isFinite(c)?c:b}function j(a){return"string"==typeof a?a:""}async function k(){if(h)return h;try{let{homedir:a}=await Promise.resolve().then(c.t.bind(c,48161,23)),{join:b}=await Promise.resolve().then(c.t.bind(c,76760,23)),{existsSync:d}=await Promise.resolve().then(c.t.bind(c,73024,23)),e=process.env.DATA_DIR?b(process.env.DATA_DIR,"storage.sqlite"):b(a(),".omniroute","storage.sqlite");if(!d(e))return console.error(`[MCP Audit] Database not found at ${e} — audit logging disabled`),null;return h=new(await Promise.resolve().then(c.t.bind(c,87550,23))).default(e)}catch(a){return console.error("[MCP Audit] Failed to connect to database:",a instanceof Error?a.message:String(a)),null}}async function l(a,b,c,e,f,g){try{let h=await k();if(!h)return;let i=await d(b),j=function(a,b=200){if(null==a)return"(null)";let c="string"==typeof a?a:JSON.stringify(a);return c.length<=b?c:c.slice(0,b)+"…"}(c),l=process.env.OMNIROUTE_API_KEY_ID||null;h.prepare(`INSERT INTO mcp_tool_audit (tool_name, input_hash, output_summary, duration_ms, api_key_id, success, error_code)
|
|
2
2
|
VALUES (?, ?, ?, ?, ?, ?, ?)`).run(a,i,j,e,l,+!!f,g||null)}catch(a){console.error("[MCP Audit] Failed to log:",a instanceof Error?a.message:String(a))}}async function m(a={}){try{let b,c,d=await k(),e=Math.max(1,Math.min(500,f(a.limit,50))),h=Math.max(0,f(a.offset,0));if(!d)return{entries:[],total:0,limit:e,offset:h};let{whereSql:i,params:j}=(b=[],c=[],"string"==typeof a.tool&&a.tool.trim().length>0&&(b.push("tool_name = ?"),c.push(a.tool.trim())),"boolean"==typeof a.success&&(b.push("success = ?"),c.push(+!!a.success)),"string"==typeof a.apiKeyId&&a.apiKeyId.trim().length>0&&(b.push("api_key_id = ?"),c.push(a.apiKeyId.trim())),{whereSql:b.length>0?`WHERE ${b.join(" AND ")}`:"",params:c}),l=d.prepare(`SELECT COUNT(*) as total FROM mcp_tool_audit ${i}`).get(...j);return{entries:d.prepare(`SELECT
|
|
3
3
|
id,
|
|
4
4
|
tool_name,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";exports.id=4488,exports.ids=[4488],exports.modules={44488:(a,b,c)=>{c.d(b,{getDbInstance:()=>y});var d=c(87550),e=c.n(d),f=c(76760),g=c.n(f),h=c(73024),i=c.n(h),j=c(48161),k=c.n(j);let l="omniroute";function m(){try{return k().homedir()}catch{return process.cwd()}}function n(a){if("string"!=typeof a)return null;let b=a.trim();return b?g().resolve(b):null}function o(){return g().join(m(),`.${l}`)}var p=c(73136);let q=function(){try{let a="file:///home/
|
|
1
|
+
"use strict";exports.id=4488,exports.ids=[4488],exports.modules={44488:(a,b,c)=>{c.d(b,{getDbInstance:()=>y});var d=c(87550),e=c.n(d),f=c(76760),g=c.n(f),h=c(73024),i=c.n(h),j=c(48161),k=c.n(j);let l="omniroute";function m(){try{return k().homedir()}catch{return process.cwd()}}function n(a){if("string"!=typeof a)return null;let b=a.trim();return b?g().resolve(b):null}function o(){return g().join(m(),`.${l}`)}var p=c(73136);let q=function(){try{let a="file:///home/diegosouzapw/dev/proxys/9router/src/lib/db/migrationRunner.ts";if(a&&a.startsWith("file://")){let b=(0,p.fileURLToPath)(a);return g().join(g().dirname(b),"migrations")}}catch{}return g().join(process.cwd(),"src","lib","db","migrations")}(),r="object"==typeof globalThis.caches&&null!==globalThis.caches,s="phase-production-build"===process.env.NEXT_PHASE,t=function({isCloud:a=!1}={}){if(a)return"/tmp";let b=n(process.env.DATA_DIR);if(b)return b;let c=m();if("win32"===process.platform){let a=process.env.APPDATA||g().join(c,"AppData","Roaming");return g().join(a,l)}let d=n(process.env.XDG_CONFIG_HOME);return d?g().join(d,l):o()}({isCloud:r});r||o();let u=r?null:g().join(t,"storage.sqlite"),v=r?null:g().join(t,"db.json");if(r||g().join(t,"db_backups"),!r&&!i().existsSync(t))try{i().mkdirSync(t,{recursive:!0})}catch(b){let a=b instanceof Error?b.message:String(b);console.warn(`[DB] Cannot create data directory '${t}': ${a}
|
|
2
2
|
[DB] Set the DATA_DIR environment variable to a writable path, e.g.:
|
|
3
3
|
[DB] DATA_DIR=/path/to/writable/dir omniroute`)}let w=`
|
|
4
4
|
CREATE TABLE IF NOT EXISTS provider_connections (
|