omniroute 1.7.2 → 1.7.4
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 -0
- package/README.bg.md +4 -0
- package/README.da.md +4 -0
- package/README.de.md +13 -9
- package/README.es.md +13 -9
- package/README.fi.md +4 -0
- package/README.fr.md +13 -9
- package/README.he.md +29 -25
- package/README.hu.md +4 -0
- package/README.id.md +4 -0
- package/README.in.md +4 -0
- package/README.it.md +13 -9
- package/README.ja.md +4 -0
- package/README.ko.md +29 -25
- package/README.md +45 -0
- package/README.ms.md +4 -0
- package/README.nl.md +4 -0
- package/README.no.md +4 -0
- package/README.phi.md +4 -0
- package/README.pl.md +4 -0
- package/README.pt-BR.md +29 -25
- package/README.pt.md +4 -0
- package/README.ro.md +4 -0
- package/README.ru.md +13 -9
- package/README.sk.md +4 -0
- package/README.sv.md +4 -0
- package/README.th.md +16 -12
- package/README.uk-UA.md +4 -0
- package/README.vi.md +4 -0
- package/README.zh-CN.md +26 -22
- package/app/.env +122 -0
- package/app/.next/BUILD_ID +1 -1
- package/app/.next/app-path-routes-manifest.json +30 -28
- 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/routes-manifest.json +12 -0
- 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/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/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/_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 +4 -4
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +4 -4
- 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 +3 -3
- 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/api/auth/login/route.js +1 -1
- package/app/.next/server/app/api/auth/login/route.js.nft.json +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.js.nft.json +1 -1
- 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 +2 -2
- 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 +2 -2
- 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-settings/route.js +2 -2
- 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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- package/app/.next/server/app/api/combos/[id]/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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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/models/alias/route.js +1 -1
- package/app/.next/server/app/api/models/alias/route.js.nft.json +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.js.nft.json +1 -1
- 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.js.nft.json +1 -1
- 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.js.nft.json +1 -1
- 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.js.nft.json +1 -1
- 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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- 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.js.nft.json +1 -1
- 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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- 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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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 -0
- package/app/.next/server/app/api/settings/background-degradation/route.js.nft.json +1 -0
- package/app/.next/server/app/api/settings/background-degradation/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/settings/combo-defaults/route.js +1 -1
- package/app/.next/server/app/api/settings/combo-defaults/route.js.nft.json +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 -0
- package/app/.next/server/app/api/settings/model-aliases/route.js.nft.json +1 -0
- package/app/.next/server/app/api/settings/model-aliases/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/settings/proxy/route.js +1 -1
- package/app/.next/server/app/api/settings/proxy/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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 +1 -1
- package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- 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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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/request-logs/route.js +1 -1
- package/app/.next/server/app/api/usage/request-logs/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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 +2 -2
- package/app/.next/server/app/api/v1/models/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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 +3 -3
- 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/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/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 +30 -28
- package/app/.next/server/chunks/1248.js +1 -1
- package/app/.next/server/chunks/1308.js +1 -1
- package/app/.next/server/chunks/1526.js +1 -1
- package/app/.next/server/chunks/1584.js +1 -1
- package/app/.next/server/chunks/1623.js +1 -1
- package/app/.next/server/chunks/1880.js +1 -1
- package/app/.next/server/chunks/1960.js +1 -1
- package/app/.next/server/chunks/1990.js +1 -1
- package/app/.next/server/chunks/2180.js +1 -1
- package/app/.next/server/chunks/2214.js +1 -1
- package/app/.next/server/chunks/2372.js +1 -1
- package/app/.next/server/chunks/2594.js +1 -1
- package/app/.next/server/chunks/2767.js +1 -1
- package/app/.next/server/chunks/2901.js +2 -2
- package/app/.next/server/chunks/2910.js +1 -1
- package/app/.next/server/chunks/3371.js +1 -1
- package/app/.next/server/chunks/3447.js +1 -1
- package/app/.next/server/chunks/3498.js +1 -1
- package/app/.next/server/chunks/3596.js +1 -1
- package/app/.next/server/chunks/3801.js +2 -0
- package/app/.next/server/chunks/3911.js +1 -1
- package/app/.next/server/chunks/4488.js +1 -1
- package/app/.next/server/chunks/4568.js +1 -1
- package/app/.next/server/chunks/496.js +1 -1
- package/app/.next/server/chunks/5047.js +1 -1
- package/app/.next/server/chunks/5094.js +1 -1
- package/app/.next/server/chunks/5097.js +1 -1
- package/app/.next/server/chunks/5521.js +1 -1
- package/app/.next/server/chunks/5945.js +1 -1
- package/app/.next/server/chunks/6118.js +1 -1
- package/app/.next/server/chunks/6930.js +1 -1
- package/app/.next/server/chunks/7011.js +1 -1
- package/app/.next/server/chunks/708.js +1 -1
- package/app/.next/server/chunks/7109.js +1 -1
- package/app/.next/server/chunks/7230.js +2 -2
- package/app/.next/server/chunks/7650.js +1 -1
- package/app/.next/server/chunks/8020.js +3 -3
- package/app/.next/server/chunks/8220.js +1 -1
- package/app/.next/server/chunks/8464.js +1 -1
- package/app/.next/server/chunks/8706.js +1 -1
- package/app/.next/server/chunks/8976.js +1 -1
- package/app/.next/server/chunks/9119.js +1 -1
- package/app/.next/server/chunks/944.js +1 -1
- package/app/.next/server/chunks/9548.js +1 -0
- package/app/.next/server/chunks/9679.js +1 -0
- package/app/.next/server/chunks/9824.js +2 -2
- package/app/.next/server/chunks/9837.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/a624rqqXG_QtNPqv8ZMWa/_buildManifest.js +1 -0
- package/app/.next/static/chunks/5846-1dad4fadf761e0d8.js +2 -0
- package/app/.next/static/chunks/{993-035473765d7d1871.js → 993-9f36b0b069ca090e.js} +2 -2
- package/app/.next/static/chunks/app/(dashboard)/dashboard/analytics/loading-ce5214cdf489c9df.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/analytics/{page-52f76c7c91444ec2.js → page-20786f2c7fdbab57.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/api-manager/page-12d772841a253032.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/cli-tools/page-5e34630a5dc32825.js +15 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/{page-3dce7fccfcf177dd.js → page-85a3e6a423aceded.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/costs/{page-3ed2a7685adf9b91.js → page-cdb8071441476da9.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-588b8bc3c4e631e0.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/health/{page-9a6519bf1468f16e.js → page-b480b3cb318782d7.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/limits/page-0ae1d6cc5fc4671f.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/logs/{page-833d24f322a20f5a.js → page-ffdc1dcf074c7528.js} +1 -1
- 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-5c87e49261a22fd5.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/page-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-b38f2d03bae8166a.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/{error-2f0177a2197dd556.js → error-f0730d6d62d02e82.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/{loading-99ab4d478260d53b.js → loading-59cbccd6d5185ca9.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-a7fb36872be60fe0.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/{page-1f022385b812b987.js → page-40dc5ac82df708e9.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/{error-e844916e39172c8b.js → error-cc85c3ff1f63aea6.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/{loading-bb068659ee679ff4.js → loading-19fc771a287bcb4c.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/page-1550a2460948273c.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/pricing/{page-f10a8d4bb8236913.js → page-cbe9b21b62bbc2bd.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/{page-83b07523f81d6282.js → page-534e13a69cb60a4f.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/{page-9cc99ab874fc36e7.js → page-86a076d820931a30.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/{layout-00d5d56af65098a9.js → layout-16302e54f9ef3d0e.js} +1 -1
- package/app/.next/static/chunks/app/_global-error/page-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/_not-found/page-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/auth/login/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/auth/logout/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/auth/status/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/cache/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/cache/stats/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/backups/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/codex-profiles/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/guide-settings/[toolId]/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/runtime/[toolId]/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/status/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/auth/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/credentials/update/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/model/resolve/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/models/alias/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/combos/[id]/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/combos/metrics/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/combos/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/combos/test/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/compliance/audit-log/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/db-backups/export/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/db-backups/exportAll/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/db-backups/import/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/db-backups/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/evals/[suiteId]/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/evals/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/fallback/chains/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/init/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/keys/[id]/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/keys/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/logs/console/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/models/alias/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/models/availability/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/models/catalog/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/models/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/monitoring/health/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/policies/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/pricing/defaults/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/pricing/models/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/pricing/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/provider-metrics/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/provider-models/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/providers/client/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/providers/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/providers/test-batch/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/providers/validate/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/rate-limit/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/rate-limits/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/resilience/reset/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/resilience/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/restart/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/sessions/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/settings/background-degradation/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/settings/combo-defaults/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/settings/ip-filter/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/settings/model-aliases/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/settings/proxy/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/settings/proxy/test/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/settings/require-login/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/settings/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/settings/system-prompt/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/settings/thinking-budget/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/shutdown/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/storage/health/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/sync/cloud/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/sync/initialize/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/tags/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/telemetry/summary/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/token-health/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/translator/detect/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/translator/history/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/translator/load/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/translator/save/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/translator/send/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/translator/translate/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/usage/analytics/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/usage/budget/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/usage/call-logs/[id]/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/usage/call-logs/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/usage/history/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/usage/logs/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/usage/proxy-logs/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/usage/request-logs/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/v1/api/chat/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/v1/embeddings/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/v1/images/generations/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/v1/messages/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/v1/moderations/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/v1/music/generations/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/v1/providers/[provider]/chat/completions/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/v1/providers/[provider]/embeddings/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/v1/providers/[provider]/images/generations/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/v1/rerank/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/v1/responses/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/v1/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/v1/videos/generations/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/api/v1beta/models/route-6301a4ed902b878a.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-2fe9dcbeb3f738c0.js → page-3658b3f15df3a19e.js} +1 -1
- package/app/.next/static/chunks/app/{error-0d59fc4efafbc38c.js → error-f918d9961a2368d3.js} +1 -1
- package/app/.next/static/chunks/app/forbidden/page-77657dfa95e61cd8.js +1 -0
- package/app/.next/static/chunks/app/forgot-password/page-be3bacc125c30a6b.js +1 -0
- package/app/.next/static/chunks/app/global-error-504ff9093e2a997d.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/login/{page-121c612ee459e7c2.js → page-6c769465e407368f.js} +1 -1
- package/app/.next/static/chunks/app/not-found-11b712c853d93172.js +1 -0
- package/app/.next/static/chunks/app/page-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/app/privacy/{page-2fe9dcbeb3f738c0.js → page-3658b3f15df3a19e.js} +1 -1
- package/app/.next/static/chunks/app/terms/{page-2fe9dcbeb3f738c0.js → page-3658b3f15df3a19e.js} +1 -1
- package/app/.next/static/chunks/{main-app-c9da11a8061df107.js → main-app-ae230f6bf51a5edb.js} +1 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-6301a4ed902b878a.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-6301a4ed902b878a.js +1 -0
- package/app/.next/static/css/bcd1741aee9d39ab.css +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/5393.js +0 -2
- package/app/.next/static/chunks/5846-9e0f1f3afcbfb08c.js +0 -2
- package/app/.next/static/chunks/app/(dashboard)/dashboard/analytics/loading-6f1750506292c630.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/api-manager/page-1dd4d0c348a7b0a6.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-77ab26722f5c56c7.js +0 -15
- package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-1420c3ca376f1585.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/limits/page-f4a2d6d07df5ddc4.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-388840686801f3f5.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/page-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-9c8ffb212f855704.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-31cdb6e15134d8c2.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/page-1393d4935fc087cf.js +0 -1
- package/app/.next/static/chunks/app/_global-error/page-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/_not-found/page-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/auth/login/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/auth/logout/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/auth/status/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/cache/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/cache/stats/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/backups/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/codex-profiles/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/guide-settings/[toolId]/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/runtime/[toolId]/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/status/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/auth/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/credentials/update/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/model/resolve/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/models/alias/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/combos/[id]/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/combos/metrics/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/combos/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/combos/test/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/compliance/audit-log/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/db-backups/export/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/db-backups/exportAll/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/db-backups/import/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/db-backups/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/evals/[suiteId]/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/evals/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/fallback/chains/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/init/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/keys/[id]/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/keys/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/logs/console/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/models/alias/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/models/availability/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/models/catalog/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/models/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/monitoring/health/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/policies/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/pricing/defaults/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/pricing/models/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/pricing/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/provider-metrics/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/provider-models/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/providers/client/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/providers/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/providers/test-batch/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/providers/validate/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/rate-limit/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/rate-limits/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/resilience/reset/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/resilience/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/restart/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/sessions/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/settings/combo-defaults/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/settings/ip-filter/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/settings/proxy/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/settings/proxy/test/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/settings/require-login/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/settings/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/settings/system-prompt/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/settings/thinking-budget/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/shutdown/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/storage/health/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/sync/cloud/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/sync/initialize/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/tags/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/telemetry/summary/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/token-health/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/translator/detect/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/translator/history/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/translator/load/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/translator/save/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/translator/send/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/translator/translate/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/usage/analytics/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/usage/budget/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/usage/call-logs/[id]/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/usage/call-logs/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/usage/history/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/usage/logs/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/usage/proxy-logs/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/usage/request-logs/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/v1/api/chat/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/v1/embeddings/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/v1/images/generations/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/v1/moderations/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/v1/music/generations/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/v1/providers/[provider]/chat/completions/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/v1/providers/[provider]/embeddings/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/v1/providers/[provider]/images/generations/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/v1/rerank/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/v1/responses/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/v1/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/v1/videos/generations/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/route-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/app/forbidden/page-df886dfa2d5bd9fa.js +0 -1
- package/app/.next/static/chunks/app/forgot-password/page-2a495f0b0c653ab4.js +0 -1
- package/app/.next/static/chunks/app/global-error-41eef2a698918fc1.js +0 -1
- package/app/.next/static/chunks/app/landing/page-9d540ab1716f8e3e.js +0 -1
- package/app/.next/static/chunks/app/not-found-1dbd8c3e506fe00f.js +0 -1
- package/app/.next/static/chunks/app/page-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-cab2fb7f592d3c36.js +0 -1
- package/app/.next/static/css/b77490a14619ffbb.css +0 -1
- package/app/.next/static/ozfkuTtQLl3_rnlOdkSZi/_buildManifest.js +0 -1
- /package/app/.next/static/{ozfkuTtQLl3_rnlOdkSZi → a624rqqXG_QtNPqv8ZMWa}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=1960,exports.ids=[1960],exports.modules={31960:a=>{a.exports=JSON.parse('{"common":{"save":"Save","cancel":"Cancel","delete":"Delete","loading":"Loading...","error":"An error occurred","success":"Success","confirm":"Are you sure?","refresh":"Refresh","close":"Close","add":"Add","edit":"Edit","search":"Search","back":"Back","next":"Next","submit":"Submit","reset":"Reset","copy":"Copy","copied":"Copied!","enabled":"Enabled","disabled":"Disabled","active":"Active","inactive":"Inactive","noData":"No data available","configure":"Configure","manage":"Manage","name":"Name","actions":"Actions","status":"Status","type":"Type","model":"Model","models":"models","provider":"Provider","account":"Account","time":"Time","details":"Details","created":"Created","lastUsed":"Last Used","loadMore":"Load More","noResults":"No results found","reloadPage":"Reload Page","connected":"Connected","disconnected":"Disconnected","notConfigured":"Not configured","testConnection":"Test Connection","enable":"Enable","disable":"Disable","columns":"Columns","newest":"Newest","oldest":"Oldest","all":"All","none":"None","yes":"Yes","no":"No","warning":"Warning","note":"Note","free":"Free","skipToContent":"Skip to content"},"sidebar":{"home":"Home","dashboard":"Dashboard","providers":"Providers","combos":"Combos","usage":"Usage","analytics":"Analytics","costs":"Costs","health":"Health","limits":"Limits & Quotas","cliTools":"CLI Tools","media":"Media","settings":"Settings","translator":"Translator","docs":"Docs","issues":"Issues","endpoint":"Endpoint","apiManager":"API Manager","logs":"Logs","auditLog":"Audit Log","shutdown":"Shutdown","restart":"Restart","shutdownConfirm":"Shut down OmniRoute?","restartConfirm":"Restart OmniRoute?","version":"v{version}","debug":"Debug","system":"System","help":"Help","serverDisconnected":"Server Disconnected","serverDisconnectedMsg":"The proxy server has been stopped or is restarting.","expandSidebar":"Expand sidebar","collapseSidebar":"Collapse sidebar"},"header":{"logout":"Logout","language":"Language","providers":"Providers","providerDescription":"Manage your AI provider connections","combos":"Combos","comboDescription":"Model combos with fallback","usage":"Usage & Analytics","usageDescription":"Monitor your API usage, token consumption, and request logs","analytics":"Analytics","analyticsDescription":"Charts, trends, and evaluation insights","cliTools":"CLI Tools","cliToolsDescription":"Configure CLI tools","home":"Home","homeDescription":"Welcome to OmniRoute","endpoint":"Endpoint","endpointDescription":"API endpoint configuration","settings":"Settings","settingsDescription":"Manage your preferences","openaiCompatible":"OpenAI Compatible","anthropicCompatible":"Anthropic Compatible","media":"Media","mediaDescription":"Generate images, videos, and music"},"home":{"quickStart":"Quick Start","quickStartDesc":"Get up and running in 4 steps. Connect providers, route models, monitor everything.","fullDocs":"Full Docs","step1Title":"1. Create API key","step1Desc":"Go to <endpoint>Endpoint</endpoint> -> Registered Keys. Generate one key per environment.","step2Title":"2. Connect providers","step2Desc":"Add accounts in <providers>Providers</providers>. Supports OAuth, API Key, and free tiers.","step3Title":"3. Point your client","step3Desc":"Set base URL to {url} in your IDE or API client.","step4Title":"4. Monitor & optimize","step4Desc":"Track tokens, cost and errors in <logs>Request Logs</logs> and <analytics>Analytics</analytics>.","providersOverview":"Providers Overview","configuredOf":"{configured} configured of {total} available providers","noModelsAvailable":"No models available for this provider.","configureFirst":"Configure a connection first in {providers}","configureProvider":"Configure Provider","modelAvailable":"{count} model available","modelsAvailable":"{count} models available","connectionsActive":"{count} connection active","connectionsActivePlural":"{count} connections active","copyModelName":"Copy model name","documentation":"Documentation","healthMonitor":"Health Monitor","reportIssue":"Report issue","activeError":"{active} active \xb7 {errors} error","oauthLabel":"OAuth","apiKeyLabel":"API Key","requestsShort":"{count} reqs","providerModelsTitle":"{provider} - Models","copiedModel":"Copied: {model}","aliasLabel":"alias"},"analytics":{"title":"Analytics","overviewDescription":"Monitor your API usage patterns, token consumption, costs, and activity trends across all providers and models.","evalsDescription":"Run evaluation suites to test and validate your LLM endpoints. Compare model quality, detect regressions, and benchmark latency.","overview":"Overview","evals":"Evals"},"apiManager":{"title":"API Keys","createKey":"Create API Key","key":"Key","revokeKey":"Revoke Key","revokeConfirm":"Are you sure you want to revoke this API key?","noKeys":"No API keys yet","noKeysDesc":"Create your first API key to authenticate requests to your endpoint","keyLabel":"Key Label","permissions":"Permissions","expiresAt":"Expires","never":"Never","revoke":"Revoke","showKey":"Show Key","hideKey":"Hide Key","copyKey":"Copy API Key","allModels":"All models","selectedModels":"Selected Models","readOnly":"Read Only","fullAccess":"Full Access","keyManagement":"API Key Management","keyManagementDesc":"Create and manage API keys for authenticating requests to your endpoint","totalKeys":"Total Keys","restricted":"Restricted","totalRequests":"Total Requests","modelsAvailable":"Models Available","registeredKeys":"Registered Keys","keysRegistered":"{count} keys registered","keyRegistered":"{count} key registered","keysSecurityNote":"Each key isolates usage tracking and can be revoked independently. Keys are masked after creation for security.","createFirstKey":"Create Your First Key","name":"Name","usage":"Usage","created":"Created","actions":"Actions","reqs":"reqs","neverUsed":"Never used","deleteConfirm":"Delete this API key?","usageTips":"Usage Tips","tipAuth":"Use API keys in the Authorization header as Bearer YOUR_KEY","tipSecure":"Keys are only shown once during creation — store them securely","tipSeparate":"Create separate keys for different clients or environments","tipRestrict":"Restrict keys to specific models for better security and cost control","keyName":"Key Name","keyNamePlaceholder":"e.g., Production Key, Development Key","keyNameDesc":"Choose a descriptive name to identify this key\'s purpose","keyCreated":"API Key Created","keyCreatedSuccess":"Key created successfully!","keyCreatedNote":"Copy and store this key now — it won\'t be shown again.","done":"Done","savePermissions":"Save Permissions","allowAll":"Allow All","restrict":"Restrict","allowAllInfo":"This key can access all available models.","restrictInfo":"This key can access {selected} of {total} models.","selected":"{count} selected","all":"All","clear":"Clear","searchModels":"Search models by name or provider...","noModelsFound":"No models found","keyNameRequired":"Key name is required","keyNameTooLong":"Key name must be {max} characters or less","keyNameInvalid":"Key name can only contain letters, numbers, spaces, hyphens, and underscores","invalidKeyName":"Invalid key name","failedCreateKey":"Failed to create key","failedCreateKeyRetry":"Failed to create key. Please try again.","invalidKeyId":"Invalid key ID","failedDeleteKey":"Failed to delete key","failedDeleteKeyRetry":"Failed to delete key. Please try again.","invalidModelsSelection":"Invalid models selection","cannotSelectMoreThanModels":"Cannot select more than {max} models","failedUpdatePermissions":"Failed to update permissions","failedUpdatePermissionsRetry":"Failed to update permissions. Please try again.","unknownProvider":"unknown","copyMaskedKey":"Copy masked key","modelsCount":"{count, plural, one {# model} other {# models}}","lastUsedOn":"Last: {date}","editPermissions":"Edit permissions","deleteKey":"Delete key","model":"{count} model","models":"{count} models","permissionsTitle":"Permissions: {name}","allowAllDesc":"This key can access all available models.","restrictDesc":"This key can access {selectedCount} of {totalModels} models.","selectedCount":"{count} selected"},"auditLog":{"title":"Audit Log","searchPlaceholder":"Search actions...","action":"Action","actor":"Actor","target":"Target","ipAddress":"IP Address","timestamp":"Timestamp","noEntries":"No audit entries found","filterByAction":"Filter by action...","filterByActor":"Filter by actor...","filterEntriesAria":"Filter audit log entries","filterByActionTypeAria":"Filter by action type","filterByActorAria":"Filter by actor","refreshAuditLogAria":"Refresh audit log","tableAria":"Audit log entries","failedFetchAuditLog":"Failed to fetch audit log","notAvailable":"—","description":"Administrative actions and security events","showing":"Showing {count} entries (offset {offset})","previous":"Previous"},"media":{"title":"Media Playground","subtitle":"Generate images, videos, and music using your configured providers","model":"Model","prompt":"Prompt","generate":"Generate","generating":"Generating...","loadingModels":"Loading available models...","noModels":"No models available. Configure providers with media capabilities first.","error":"Generation Failed","result":"Result","imageDescription":"Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.","videoDescription":"Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.","musicDescription":"Compose music using Stable Audio Open or MusicGen via ComfyUI."},"cliTools":{"title":"CLI Tools","noActiveProviders":"No active providers","noActiveProvidersDesc":"Please add and connect providers first to configure CLI tools.","mapModels":"Map Models","testConnection":"Test Connection","connectionStatus":"Connection Status","configureEndpoint":"Configure Endpoint","instructions":"Instructions","modelMapping":"Model Mapping","baseUrl":"Base URL","apiKey":"API Key","configured":"Configured","notConfigured":"Not configured","notInstalled":"Not installed","custom":"Custom","unknown":"Unknown","lastSavedAt":"Last saved: {date}","never":"Never","justNow":"just now","minutesAgoShort":"{count}m ago","hoursAgoShort":"{count}h ago","daysAgoShort":"{count}d ago","monthsAgoShort":"{count}mo ago","yearsAgoShort":"{count}y ago","runtimeCheckFailed":"Runtime check failed","yourApiKeyPlaceholder":"your-api-key","modelPlaceholder":"provider/model-id","configurationSaved":"Configuration saved successfully.","failedToSave":"Failed to save configuration.","noApiKeysCreateOne":"No API keys - Create one in Keys page","defaultOmnirouteKey":"sk_omniroute (default)","selectModel":"Select Model","selectModelForAlias":"Select model for {alias}","selectModelForTool":"Select Model for {tool}","select":"Select","clear":"Clear","comingSoon":"Coming soon","checkingRuntime":"Checking runtime status...","guideOnlyIntegration":"Guide-only integration (no local runtime required)","cliRuntimeDetected":"CLI runtime detected and ready","cliFoundNotRunnable":"CLI found but not runnable{reason}","cliRuntimeNotDetected":"CLI runtime not detected","binary":"Binary","configPath":"Config path","configPathShort":"Config","failedCheckRuntimeStatus":"Failed to check runtime status.","copy":"Copy","copied":"Copied","copyConfig":"Copy Config","saveConfig":"Save Config","selectionSaved":"Selection saved","guide":"Guide","detected":"Detected","notReady":"Not ready","active":"Active","inactive":"Inactive","startMitm":"Start MITM","stopMitm":"Stop MITM","mitmStarted":"MITM started successfully!","mitmStopped":"MITM stopped successfully!","failedStart":"Failed to start MITM","failedStop":"Failed to stop MITM","saveMappings":"Save Mappings","mappingsSaved":"Mappings saved!","failedSaveMappings":"Failed to save mappings","howItWorks":"How it works:","antigravityHowWorksDesc":"Antigravity sends requests to Google\'s endpoint. MITM intercepts and redirects them to OmniRoute.","antigravityStep1":"1. Start MITM to route requests through OmniRoute.","antigravityStep2Prefix":"2. Add","antigravityStep2Suffix":"to your hosts file as 127.0.0.1.","antigravityStep3":"3. Open Antigravity and requests will be proxied.","sudoPasswordRequiredTitle":"Sudo Password Required","sudoPasswordHint":"Administrator password is required to modify hosts file and system proxy settings.","enterSudoPassword":"Enter sudo password","sudoPasswordRequiredError":"Sudo password is required.","cancel":"Cancel","confirm":"Confirm","settingsApplied":"Settings applied successfully!","failedApplySettings":"Failed to apply settings","settingsReset":"Settings reset successfully!","failedResetSettings":"Failed to reset settings","backupRestored":"Backup restored!","failedRestore":"Failed to restore","checkingCli":"Checking {tool} CLI...","cliNotRunnable":"{tool} CLI installed but not runnable","cliNotInstalled":"{tool} CLI not installed","cliNotDetected":"{tool} CLI not detected","cliDetectedReady":"{tool} CLI detected and ready","cliFoundFailedHealthcheck":"{tool} CLI was found but failed runtime healthcheck{reason}.","installCliPrompt":"Please install {tool} CLI to use this feature.","installCodexPrompt":"Please install Codex CLI to use auto-apply feature.","hide":"Hide","howToInstall":"How to Install","installationGuide":"Installation Guide","platforms":"macOS / Linux / Windows:","afterInstallationRun":"After installation, run","toVerify":"to verify.","current":"Current","baseUrlPlaceholder":"https://.../v1","resetToDefault":"Reset to default","providerModelPlaceholder":"provider/model-id","apply":"Apply","reset":"Reset","manualConfig":"Manual Config","backups":"Backups","configBackups":"Config Backups","noBackupsYet":"No backups yet. Backups are created automatically before each Apply or Reset.","restore":"Restore","backupRestoredReloading":"Backup restored! Reloading status...","failedRestoreBackup":"Failed to restore backup","applied":"Applied!","failed":"Failed","resetDone":"Reset!","omnirouteConfiguredOpenAiCompatible":"OmniRoute is configured as OpenAI-compatible provider","provider":"Provider","model":"Model","providers":"Providers","auth":"Auth","noApiKeysAvailable":"No API keys available","usingDefaultOmniroute":"Using default: sk_omniroute","updateConfig":"Update Config","applyConfig":"Apply Config","noBackupsAvailable":"No backups available.","profileSaved":"Profile \\"{name}\\" saved!","failedSaveProfile":"Failed to save profile","profileActivated":"Profile activated!","failedActivateProfile":"Failed to activate profile","profiles":"Profiles","savedProfiles":"Saved Profiles","noProfilesYet":"No profiles saved yet. Save current config as a profile below.","activate":"Activate","deleteProfile":"Delete profile","profileNamePlaceholder":"Profile name (e.g. Personal Account)","saveCurrent":"Save Current","codexAuthNotePrefix":"Codex uses","codexAuthNoteMiddle":"with","codexAuthNoteSuffix":"Click \\"Apply\\" to auto-configure.","claudeManualConfiguration":"Claude CLI - Manual Configuration","codexManualConfiguration":"Codex CLI - Manual Configuration","droidManualConfiguration":"Factory Droid - Manual Configuration","openClawManualConfiguration":"Open Claw - Manual Configuration","clineManualConfiguration":"Cline Manual Configuration","kiloManualConfiguration":"Kilo Code Manual Configuration","toolDescriptions":{"antigravity":"Google Antigravity IDE with MITM","claude":"Anthropic Claude Code CLI","codex":"OpenAI Codex CLI","droid":"Factory Droid AI Assistant","openclaw":"Open Claw AI Assistant","cline":"Cline AI Coding Assistant CLI","kilo":"Kilo Code AI Assistant CLI","cursor":"Cursor AI Code Editor","continue":"Continue AI Assistant"},"guides":{"cursor":{"notes":{"0":"Requires Cursor Pro account to use this feature.","1":"Cursor routes requests through its own server, so local endpoint is not supported. Please enable Cloud Endpoint in Settings."},"steps":{"1":{"title":"Open Settings","desc":"Go to Settings -> Models"},"2":{"title":"Enable OpenAI API","desc":"Enable \\"OpenAI API key\\" option"},"3":{"title":"Base URL"},"4":{"title":"API Key"},"5":{"title":"Add Custom Model","desc":"Click \\"View All Model\\" -> \\"Add Custom Model\\""},"6":{"title":"Select Model"}}},"continue":{"steps":{"1":{"title":"Open Config","desc":"Open Continue configuration file"},"2":{"title":"API Key"},"3":{"title":"Select Model"},"4":{"title":"Add Model Config","desc":"Add the following configuration to your models array:"}}}}},"combos":{"title":"Combos","description":"Create model combos with weighted routing and fallback support","createCombo":"Create Combo","editCombo":"Edit Combo","deleteCombo":"Delete Combo","noModels":"No models","noModelsYet":"No models added yet","addModel":"Add Model","addModelToCombo":"Add Model to Combo","routingStrategy":"Routing Strategy","maxRetries":"Max Retries","timeout":"Timeout (ms)","healthcheck":"Healthcheck","priority":"Priority","fallback":"Fallback","roundRobin":"Round Robin","random":"Random","leastLatency":"Least Latency","comboName":"Combo Name","comboNamePlaceholder":"my-combo","deleteConfirm":"Delete this combo?","noCombosYet":"No combos yet","comboCreated":"Combo created successfully","comboUpdated":"Combo updated successfully","comboDeleted":"Combo deleted","failedCreate":"Failed to create combo","failedUpdate":"Failed to update combo","errorCreating":"Error creating combo","errorUpdating":"Error updating combo","errorDeleting":"Error deleting combo","testFailed":"Test request failed","failedToggle":"Failed to toggle combo","testResults":"Test Results — {name}","resolvedBy":"Resolved by:","more":"+{count} more","reqs":"reqs","success":"success","proxyConfigured":"Proxy configured","copyComboName":"Copy combo name","enableCombo":"Enable combo","disableCombo":"Disable combo","testCombo":"Test combo","duplicate":"Duplicate","proxyConfig":"Proxy configuration","nameRequired":"Name is required","nameInvalid":"Only letters, numbers, -, _, / and . allowed","nameHint":"Letters, numbers, -, _, / and . allowed","priorityDesc":"Sequential fallback: tries model 1 first, then 2, etc.","weightedDesc":"Distributes traffic by weight percentage with fallback","roundRobinDesc":"Circular distribution: each request goes to the next model in rotation","randomDesc":"Uniform random selection, then fallback to remaining models","leastUsedDesc":"Picks the model with fewest requests, balancing load over time","costOptimizedDesc":"Routes to the cheapest model first based on pricing","models":"Models","autoBalance":"Auto-balance","advancedSettings":"Advanced Settings","retryDelay":"Retry Delay (ms)","concurrencyPerModel":"Concurrency / Model","queueTimeout":"Queue Timeout (ms)","advancedHint":"Leave empty to use global defaults. These override per-provider settings.","moveUp":"Move up","moveDown":"Move down","removeModel":"Remove","saving":"Saving...","weighted":"Weighted","leastUsed":"Least-Used","costOpt":"Cost-Opt"},"costs":{"title":"Costs","budget":"Budget","totalCost":"Total Cost","breakdown":"Cost Breakdown","noData":"No cost data","byModel":"By Model","byProvider":"By Provider"},"endpoint":{"title":"API Endpoint","available":"Available Endpoints","cloudProxy":"Cloud Proxy","disableConfirm":"Are you sure you want to disable cloud proxy?","baseUrl":"Base URL","apiKeyLabel":"API Key","registeredKeys":"Registered Keys","chatCompletions":"Chat Completions","responses":"Responses","listModels":"List Models","usingCloudProxy":"Using Cloud Proxy","usingLocalServer":"Using Local Server","machineId":"Machine ID: {id}...","disableCloud":"Disable Cloud","enableCloud":"Enable Cloud","modelsAcrossEndpoints":"{models} models across {endpoints} endpoints","chatDesc":"Streaming & non-streaming chat with all providers","embeddings":"Embeddings","embeddingsDesc":"Text embeddings for search & RAG pipelines","imageGeneration":"Image Generation","imageDesc":"Generate images from text prompts","rerank":"Rerank","rerankDesc":"Rerank documents by relevance to a query","audioTranscription":"Audio Transcription","audioTranscriptionDesc":"Transcribe audio files to text (Whisper)","textToSpeech":"Text to Speech","textToSpeechDesc":"Convert text to natural-sounding speech","moderations":"Moderations","moderationsDesc":"Content moderation and safety classification","enableCloudTitle":"Enable Cloud Proxy","whatYouGet":"What you will get","cloudBenefitAccess":"Access your API from anywhere in the world","cloudBenefitShare":"Share endpoint with your team easily","cloudBenefitPorts":"No need to open ports or configure firewall","cloudBenefitEdge":"Fast global edge network","cloudSessionNote":"Cloud will keep your auth session for 1 day. If not used, it will be automatically deleted.","cloudUnstableNote":"Cloud is currently unstable with Claude Code OAuth in some cases.","cloudConnected":"Cloud Proxy connected!","connectingToCloud":"Connecting to cloud...","verifyingConnection":"Verifying connection...","connecting":"Connecting...","verifying":"Verifying...","connected":"Connected!","disableCloudTitle":"Disable Cloud Proxy","disableWarning":"All auth sessions will be deleted from cloud.","syncingData":"Syncing latest data...","disablingCloud":"Disabling cloud...","syncing":"Syncing...","disabling":"Disabling...","cloudConnectedVerified":"Cloud Proxy connected and verified!","connectedVerificationPending":"Connected — verification pending","connectedVerificationPendingWithError":"Connected — verification pending: {error}","cloudDisabledSuccess":"Cloud disabled successfully","syncedSuccess":"Synced successfully","failedDisable":"Failed to disable cloud","failedEnable":"Failed to enable cloud","cloudRequestTimeout":"Cloud request timeout","cloudRequestFailed":"Cloud request failed","cloudWorkerUnreachable":"Could not reach cloud worker. Make sure the cloud service is running (npm run dev in /cloud).","connectionFailed":"Connection failed","syncFailed":"Failed to sync cloud data","providerModelsTitle":"{provider} — Models","noModelsForProvider":"No models available for this provider.","chat":"Chat","embedding":"Embedding","image":"Image","custom":"custom","modelsCount":"{count, plural, one {# model} other {# models}}"},"health":{"title":"System Health","description":"Real-time monitoring of your OmniRoute instance","healthy":"Healthy","degraded":"Degraded","down":"Down","uptime":"Uptime","memory":"Memory","memoryRss":"Memory (RSS)","heap":"Heap","cpu":"CPU","database":"Database","version":"Version","lastCheck":"Last Check","providerHealth":"Provider Health","systemMetrics":"System Metrics","tokenHealth":"Token Health","refreshAll":"Refresh All","checkNow":"Check Now","loadingHealth":"Loading health data...","failedToLoad":"Failed to load health data: {error}","retry":"Retry","allOperational":"All systems operational","issuesDetected":"System issues detected","updatedAt":"Updated {time}","latency":"Latency","latencyP50":"p50","latencyP95":"p95","latencyP99":"p99","millisecondsShort":"{value}ms","notAvailable":"—","totalRequests":"Total requests","noDataYet":"No data yet","promptCache":"Prompt Cache","entries":"Entries","hitRate":"Hit Rate","hitsMisses":"Hits / Misses","signatureCache":"Signature Cache","signatureDefaults":"Defaults","signatureTool":"Tool","signatureFamily":"Family","signatureSession":"Session","recovering":"Recovering","noCBData":"No circuit breaker data available. Make some requests first.","providerHealthStatusAria":"Provider health status","issuesLabel":"Issues Detected","operational":"Operational","providers":"Providers","healthyCount":"{count} healthy","nodeVersion":"Node {version}","failures":"{count} failure","failuresPlural":"{count} failures","lastFailure":"Last","rateLimitStatus":"Rate Limit Status","activeLimiters":"{count} active limiter","activeLimitersPlural":"{count} active limiters","queued":"Queued","queuedCount":"{count} queued","running":"running","runningCount":"{count} running","ok":"OK","activeLockouts":"Active Lockouts","resetConfirm":"Reset all circuit breakers to healthy state? This will clear all failure counts and restore all providers to operational status.","resetAllTitle":"Reset all circuit breakers to healthy state","resetting":"Resetting...","resetAll":"Reset All","until":"Until {time}"},"limits":{"title":"Limits & Quotas","rateLimit":"Rate Limit","remaining":"Remaining","requestsPerMinute":"Requests/min","tokensPerMinute":"Tokens/min","dailyLimit":"Daily Limit"},"logs":{"title":"Logs","requestLogs":"Request Logs","proxyLogs":"Proxy Logs","auditLog":"Audit Log","console":"Console","auditLogDesc":"Administrative actions and security events","loading":"Loading...","refresh":"Refresh","filterByAction":"Filter by action...","filterByActor":"Filter by actor...","filterEntriesAria":"Filter audit log entries","filterByActionTypeAria":"Filter by action type","filterByActorAria":"Filter by actor","refreshAuditLogAria":"Refresh audit log","tableAria":"Audit log entries","failedFetchAuditLog":"Failed to fetch audit log","showing":"Showing {count} entries (offset {offset})","search":"Search","timestamp":"Timestamp","action":"Action","actor":"Actor","target":"Target","details":"Details","ipAddress":"IP Address","notAvailable":"—","noEntries":"No audit log entries found","previous":"Previous","next":"Next"},"onboarding":{"welcome":"Welcome","security":"Security","test":"Test","ready":"Ready!","setPassword":"Set Password","addProvider":"Add your first provider","getStarted":"Get Started","skip":"Skip","skipWizard":"Skip wizard entirely","skipPassword":"Skip password setup","skipAndContinue":"Skip & Continue","passwordLabel":"Password","confirmPassword":"Confirm Password","enterPassword":"Enter password","confirmPasswordPlaceholder":"Confirm password","passwordsMismatch":"Passwords do not match","setupComplete":"Setup Complete!","goToDashboard":"Go to Dashboard →","welcomeDesc":"OmniRoute is your local AI API proxy. It routes requests to multiple AI providers with load balancing, failover, and usage tracking.","multiProvider":"Multi-Provider","usageTracking":"Usage Tracking","apiKeyMgmt":"API Key Mgmt","securityDesc":"Set a password to protect your dashboard, or skip for now.","providerDesc":"Connect your first AI provider. You can add more later.","apiKeyRequired":"API Key (required)","customUrlOptional":"Custom URL (optional)","testDesc":"Let\'s verify your provider connection works.","runTest":"Run Connection Test","testingConnection":"Testing connection...","connectionSuccessful":"Connection successful! Your provider is ready.","noProviderFound":"No provider found. You can add one from the dashboard later.","testFailed":"Test failed, but you can configure this later.","couldNotTest":"Could not test right now. You can test from the dashboard.","doneDesc":"You\'re all set! Your OmniRoute instance is configured and ready to proxy AI requests.","yourEndpoint":"Your endpoint:","continue":"Continue","retry":"Retry","failedSetPassword":"Failed to set password. Try again.","failedAddProvider":"Failed to add provider. Try again.","connectionError":"Connection error. Please try again.","provider":"Provider"},"providers":{"title":"Providers","addProvider":"Add Provider","editProvider":"Edit Provider","deleteProvider":"Delete Provider","noProviders":"No providers configured","modelAvailability":"Model Availability","accounts":"Accounts","newAccount":"New Account","deleteConfirm":"Are you sure you want to delete this provider?","testing":"Testing...","testConnection":"Test Connection","testSuccess":"Connection successful","testFailed":"Connection failed","available":"Available","cooldown":"Cooldown","unavailable":"Unavailable","unknown":"Unknown","oauthLabel":"OAuth","compatibleLabel":"Compatible","chat":"Chat","responses":"Responses","messages":"Messages","oauthProviders":"OAuth Providers","freeProviders":"Free Providers","apiKeyProviders":"API Key Providers","compatibleProviders":"API Key Compatible Providers","testAll":"Test All","testAllOAuth":"Test all OAuth connections","testAllFree":"Test all Free connections","testAllApiKey":"Test all API Key connections","testAllCompatible":"Test all Compatible connections","connected":"{count} Connected","errorCount":"{count} Error ({code})","errorCountNoCode":"{count} Error","noConnections":"No connections","disabled":"Disabled","enableProvider":"Enable provider","disableProvider":"Disable provider","testResults":"Test Results","noCompatibleYet":"No compatible providers added yet","compatibleHint":"Use the buttons above to add OpenAI or Anthropic compatible endpoints","addOpenAICompatible":"Add OpenAI Compatible","addAnthropicCompatible":"Add Anthropic Compatible","addNewProvider":"Add New Provider","backToProviders":"Back to Providers","configureNewProvider":"Configure a new AI provider to use with your applications.","providerLabel":"Provider","selectProvider":"Select a provider","selectedProvider":"Selected provider","authMethod":"Authentication Method","apiKeyLabel":"API Key","apiKeyRequired":"API Key is required","selectProviderRequired":"Please select a provider","enterApiKey":"Enter your API key","apiKeySecure":"Your API key will be encrypted and stored securely.","oauth2Connect":"Connect with OAuth2","oauth2Label":"OAuth2","oauth2Desc":"Connect your account using OAuth2 authentication.","displayName":"Display Name","displayNamePlaceholder":"e.g., Production API, Dev Environment","displayNameHint":"Optional. A friendly name to identify this configuration.","active":"Active","activeDescription":"Enable this provider for use in your applications","cancel":"Cancel","createProvider":"Create Provider","failedCreate":"Failed to create provider","errorOccurred":"An error occurred. Please try again.","modelStatus":"Model Status","allModelsOperational":"All models operational","modelsWithIssues":"{count} model(s) with issues","allModelsNormal":"All models are responding normally.","cooldownCleared":"Cooldown cleared for {model}","failedClearCooldown":"Failed to clear cooldown","loadingAvailability":"Loading model availability...","clearCooldown":"Clear","clearing":"Clearing...","until":"Until {time}","providerTestFailed":"Provider test failed","modeTest":"{mode} Test","passedCount":"{count} passed","failedCount":"{count} failed","testedCount":"{count} tested","millisecondsAbbr":"{value}ms","okShort":"OK","errorShort":"ERROR","noActiveConnectionsInGroup":"No active connections found for this group.","allTestsPassed":"All {total} tests passed","testSummary":"{passed}/{total} passed, {failed} failed","nameLabel":"Name","prefixLabel":"Prefix","baseUrlLabel":"Base URL","apiTypeLabel":"API Type","prefixHint":"Required. Unique prefix for model names.","nameHint":"Required. A friendly label for this node.","baseUrlHint":"Required. Provider API base URL.","anthropicPrefixPlaceholder":"ac-prod","openaiPrefixPlaceholder":"oc-prod","anthropicBaseUrlPlaceholder":"https://api.anthropic.com/v1","openaiBaseUrlPlaceholder":"https://api.openai.com/v1","validateConnection":"Validate Connection","validating":"Validating...","connectionValid":"Connection is valid!","connectionFailed":"Connection failed. Check URL and key.","testKeyLabel":"Test API Key","testKeyPlaceholder":"sk-... (for validation only)","providerNotFound":"Provider not found","deleteConnectionConfirm":"Delete this connection?","failedSetAlias":"Failed to set alias","failedSaveConnection":"Failed to save connection","failedSaveConnectionRetry":"Failed to save connection. Please try again.","failedRetestConnection":"Failed to retest connection","deleteCompatibleNodeConfirm":"Delete this {type} Compatible node?","anthropicCompatibleDetails":"Anthropic Compatible Details","openaiCompatibleDetails":"OpenAI Compatible Details","messagesApi":"Messages API","responsesApi":"Responses API","chatCompletions":"Chat Completions","importingModels":"Importing...","importFromModels":"Import from /models","addConnectionToImport":"Add a connection to enable importing.","noModelsConfigured":"No models configured","connectionCount":"{count} connection(s)","fetchingModels":"Fetching available models...","failedFetchModels":"Failed to fetch models","noModelsFound":"No models found","importFailed":"Import failed","noNewModelsAdded":"No new models were added.","adding":"Adding...","importingModelsTitle":"Importing Models","copyModel":"Copy model","removeModel":"Remove model","rateLimitProtected":"Protected","rateLimitUnprotected":"Unprotected","enableRateLimitProtection":"Click to enable rate limit protection","disableRateLimitProtection":"Click to disable rate limit protection","productionKey":"Production Key","enterNewApiKey":"Enter new API key","optional":"Optional","anthropicCompatibleName":"Anthropic Compatible","openaiCompatibleName":"OpenAI Compatible","failedImportModels":"Failed to import models","noModelsReturnedFromEndpoint":"No models returned from /models endpoint.","importingModelsProgress":"Importing {current} of {total} models...","foundModelsStartingImport":"Found {count} models. Starting import...","importingModelById":"Importing {modelId}...","importSuccessCount":"Successfully imported {count, plural, one {# model} other {# models}}!","noNewModelsAddedExisting":"No new models were added (all already exist).","importDoneCount":"✓ Done! {count, plural, one {# model imported.} other {# models imported.}}","unexpectedErrorOccurred":"An unexpected error occurred","connectionCountLabel":"{count, plural, one {# connection} other {# connections}}","messagesPath":"messages","responsesPath":"responses","chatCompletionsPath":"chat/completions","add":"Add","edit":"Edit","delete":"Delete","anthropic":"Anthropic","openai":"OpenAI","singleConnectionPerCompatible":"Only one connection is allowed per compatible node. Add another node if you need more connections.","connections":"Connections","providerProxyTitleConfigured":"Provider proxy: {host}","configured":"configured","providerProxyConfigureHint":"Configure proxy for all connections of this provider","providerProxy":"Provider Proxy","noConnectionsYet":"No connections yet","addFirstConnectionHint":"Add your first connection to get started","addConnection":"Add Connection","availableModels":"Available Models","pageAutoRefresh":"Page will refresh automatically...","statusDisabled":"disabled","statusConnected":"connected","statusRuntimeIssue":"runtime issue","statusAuthFailed":"auth failed","statusRateLimited":"rate limited","statusNetworkIssue":"network issue","statusTestUnsupported":"test unsupported","statusUnavailable":"unavailable","statusFailed":"failed","statusError":"error","oauthAccount":"OAuth Account","errorTypeRuntime":"Local runtime","errorTypeUpstreamAuth":"Upstream auth","errorTypeMissingCredential":"Missing credential","errorTypeRefreshFailed":"Refresh failed","errorTypeTokenExpired":"Token expired","errorTypeRateLimited":"Rate limited","errorTypeUpstreamUnavailable":"Upstream unavailable","errorTypeNetworkError":"Network error","errorTypeTestUnsupported":"Test unsupported","errorTypeUpstreamError":"Upstream error","proxySourceGlobal":"Global","proxySourceProvider":"Provider","proxySourceKey":"Key","proxyConfiguredBySource":"Proxy ({source}): {host}","autoPriority":"Auto: {priority}","proxy":"Proxy","retestAuthentication":"Retest authentication","retest":"Retest","disableConnection":"Disable connection","enableConnection":"Enable connection","reauthenticateConnection":"Re-authenticate this connection","proxyConfig":"Proxy config","aliasExistsAlert":"Alias \\"{alias}\\" already exists. Please use a different model or edit existing alias.","openRouterAnyModelHint":"OpenRouter supports any model. Add models and create aliases for quick access.","modelIdFromOpenRouter":"Model ID (from OpenRouter)","openRouterModelPlaceholder":"anthropic/claude-3-opus","customModels":"Custom Models","customModelsHint":"Add model IDs not in the default list. These will be available for routing.","modelId":"Model ID","customModelPlaceholder":"e.g. gpt-4.5-turbo","loading":"Loading...","removeCustomModel":"Remove custom model","noCustomModels":"No custom models added yet.","allSuggestedAliasesExist":"All suggested aliases already exist. Please choose a different model or remove conflicting aliases.","failedSaveCustomModel":"Failed to save custom model","modelAddedSuccess":"Model {modelId} added successfully","failedAddModelTryAgain":"Failed to add model. Please try again.","failedSaveImportedModel":"Failed to save imported model to custom database","failedImportModelsTryAgain":"Failed to import models. Please try again.","failedRemoveModelFromDatabase":"Failed to remove model from database","modelRemovedSuccess":"Model removed successfully","failedDeleteModelTryAgain":"Failed to delete model. Please try again.","compatibleModelsDescription":"Add {type}-compatible models manually or import them from the /models endpoint.","anthropicCompatibleModelPlaceholder":"claude-3-opus-20240229","openaiCompatibleModelPlaceholder":"gpt-4o","apiKeyValidationFailed":"API key validation failed. Please check your key and try again.","addProviderApiKeyTitle":"Add {provider} API Key","checking":"Checking...","check":"Check","valid":"Valid","invalid":"Invalid","creating":"Creating...","validationChecksAnthropicCompatible":"Validation checks {provider} by verifying the API key.","validationChecksOpenAiCompatible":"Validation checks {provider} via /models on your base URL.","priorityLabel":"Priority","saving":"Saving...","save":"Save","editConnection":"Edit Connection","accountName":"Account name","email":"Email","healthCheckMinutes":"Health Check (min)","healthCheckHint":"Proactive token refresh interval. 0 = disabled.","failedTestConnection":"Failed to test connection","failed":"Failed","leaveBlankKeepCurrentApiKey":"Leave blank to keep the current API key.","editCompatibleTitle":"Edit {type} Compatible","compatibleBaseUrlHint":"Use the base URL (ending in /v1) for your {type}-compatible API.","apiKeyForCheck":"API Key (for Check)","compatibleProdPlaceholder":"{type} Compatible (Prod)"},"settings":{"title":"Settings","general":"General","security":"Security","appearance":"Appearance","routing":"Routing","cache":"Cache","resilience":"Resilience","systemPrompt":"System Prompt","thinkingBudget":"Thinking Budget","proxy":"Proxy","pricing":"Pricing","storage":"Storage","policies":"Policies","ipFilter":"IP Filter","comboDefaults":"Combo Defaults","fallbackChains":"Fallback Chains","changePassword":"Change Password","enablePassword":"Enable Password","darkMode":"Dark Mode","lightMode":"Light Mode","systemTheme":"System Theme","enableCache":"Enable Cache","cacheTTL":"Cache TTL","maxCacheSize":"Max Cache Size","clearCache":"Clear Cache","cacheHits":"Cache Hits","cacheMisses":"Cache Misses","hitRate":"Hit Rate","cacheEntries":"Cache Entries","circuitBreaker":"Circuit Breaker","retryPolicy":"Retry Policy","maxRetries":"Max Retries","retryDelay":"Retry Delay","timeoutMs":"Timeout (ms)","enableSystemPrompt":"Enable System Prompt","systemPromptText":"System Prompt Text","enableThinking":"Enable Thinking","maxThinkingTokens":"Max Thinking Tokens","enableProxy":"Enable Proxy","proxyUrl":"Proxy URL","pricingRates":"Pricing Rates Format","currentPricing":"Current Pricing Overview","loadingPricing":"Loading pricing data...","noPricing":"No pricing data available","input":"Input","output":"Output","cached":"Cached","reasoning":"Reasoning","cacheCreation":"Cache Creation","customPricing":"Custom Pricing","databaseSize":"Database Size","backupDb":"Backup Database","restoreDb":"Restore Database","exportData":"Export Data","importData":"Import Data","clearData":"Clear All Data","clearDataConfirm":"This will permanently delete all data. Are you sure?","enableRequestLogs":"Enable Request Logs","logRetention":"Log Retention","ipWhitelist":"IP Whitelist","ipBlacklist":"IP Blacklist","addIP":"Add IP","savedSuccessfully":"Settings saved successfully","ai":"AI","advanced":"Advanced","localMode":"Local Mode — All data stored on your machine","settingsSectionsAria":"Settings sections","switchThemes":"Switch between light and dark themes","themeSelectionAria":"Theme selection","themeLight":"Light","themeDark":"Dark","themeSystem":"System","hideHealthLogs":"Hide Health Check Logs","hideHealthLogsDesc":"When ON, suppress [HealthCheck] messages in server console","promptCache":"Prompt Cache","flushCache":"Flush Cache","flushing":"Flushing…","size":"Size","hits":"Hits","evictions":"Evictions","loadingCacheStats":"Loading cache stats…","globalProxy":"Global Proxy","globalProxyDesc":"Configure a global outbound proxy for all API calls. Individual providers, combos, and keys can override this.","noGlobalProxy":"No global proxy configured","globalLabel":"Global","configure":"Configure","globalSystemPrompt":"Global System Prompt","systemPromptDesc":"Injected into all requests at proxy level","saved":"Saved","systemPromptPlaceholder":"Enter system prompt to inject into all requests...","systemPromptHint":"This prompt is prepended to the system message of every request. Use for global instructions, safety guidelines, or response formatting rules.","chars":"{count} chars","thinkingBudgetTitle":"Thinking Budget","thinkingBudgetDesc":"Control AI reasoning token usage across all requests","passthrough":"Passthrough","passthroughDesc":"No changes — client controls thinking budget","auto":"Auto","autoDesc":"Strip all thinking config — let provider decide","custom":"Custom","customDesc":"Set a fixed token budget for all requests","adaptive":"Adaptive","adaptiveDesc":"Scale budget based on request complexity","effortNone":"None (0 tokens)","effortLow":"Low (1K tokens)","effortMedium":"Medium (10K tokens)","effortHigh":"High (128K tokens)","tokenBudget":"Token Budget","tokens":"tokens","baseEffortLevel":"Base Effort Level","adaptiveHint":"Adaptive mode scales from this base level based on message count, tool usage, and prompt length.","requireLogin":"Require login","requireLoginDesc":"When ON, dashboard requires password. When OFF, access without login.","currentPassword":"Current Password","enterCurrentPassword":"Enter current password","newPassword":"New Password","enterNewPassword":"Enter new password","confirmPassword":"Confirm New Password","confirmPasswordPlaceholder":"Confirm new password","passwordsNoMatch":"Passwords do not match","passwordUpdated":"Password updated successfully","failedUpdatePassword":"Failed to update password","errorOccurred":"An error occurred","updatePassword":"Update Password","setPassword":"Set Password","apiEndpointProtection":"API Endpoint Protection","requireAuthModels":"Require API key for /models","requireAuthModelsDesc":"When ON, the /v1/models endpoint returns 404 for unauthenticated requests. Prevents model discovery by unauthorized users.","blockedProviders":"Blocked Providers","blockedProvidersDesc":"Hide specific providers from the /v1/models response. Blocked providers will not appear in model listings.","providersBlocked":"{count} provider(s) blocked from /models","blockProviderTitle":"Block {provider}","unblockProviderTitle":"Unblock {provider}","routingStrategy":"Routing Strategy","fillFirst":"Fill First","fillFirstDesc":"Use accounts in priority order","roundRobin":"Round Robin","roundRobinDesc":"Cycle through all accounts","p2c":"P2C","p2cDesc":"Pick 2 random, use the healthier one","random":"Random","randomDesc":"Random account each request","leastUsed":"Least Used","leastUsedDesc":"Pick least recently used account","costOpt":"Cost Opt","costOptDesc":"Prefer cheapest available account","stickyLimit":"Sticky Limit","stickyLimitDesc":"Calls per account before switching","modelAliases":"Model Aliases","modelAliasesDesc":"Wildcard patterns to remap model names • Use * and ?","aliasPatternPlaceholder":"claude-sonnet-*","aliasTargetPlaceholder":"claude-sonnet-4-20250514","pattern":"Pattern","targetModel":"Target Model","add":"+ Add","session":"Session","sessionDetailsAria":"Session details","status":"Status","authenticated":"Authenticated","guest":"Guest","loginTime":"Login Time","sessionAge":"Session Age","browser":"Browser","clearLocalData":"Clear Local Data","logout":"Logout","clearLocalDataConfirm":"Clear all local data? This will reset your preferences.","unknown":"Unknown","systemActor":"system","ipAccessControl":"IP Access Control","ipAccessControlDesc":"Block or allow specific IP addresses","ipModeDisabled":"Disabled","ipModeBlacklist":"Blacklist","ipModeWhitelist":"Whitelist","ipModeWhitelistPriority":"WL Priority","addIpAddress":"Add IP Address","ipAddressPlaceholder":"192.168.1.0/24 or 10.0.*.*","block":"+ Block","allow":"+ Allow","blocked":"Blocked ({count})","allowed":"Allowed ({count})","temporaryBans":"Temporary Bans ({count})","minLeft":"{min}m left","auditLog":"Audit Log","searchAuditLogs":"Search audit logs...","failedLoadAuditLog":"Failed to load audit log","noAuditEvents":"No audit events found","action":"Action","actor":"Actor","details":"Details","time":"Time","fallbackChainsTitle":"Fallback Chains","fallbackChainsDesc":"Define provider fallback order per model","addChain":"+ Add Chain","modelName":"Model Name","modelNamePlaceholder":"claude-sonnet-4-20250514","providersCommaSeparated":"Providers (comma-separated, in priority order)","providersCommaSeparatedPlaceholder":"anthropic, openai, gemini","createChain":"Create Chain","noFallbackChains":"No Fallback Chains","noFallbackChainsDesc":"Create a chain to define provider fallback order for a model.","loadingFallbackChains":"Loading fallback chains...","deleteChainConfirm":"Delete fallback chain for \\"{model}\\"?","chainCreated":"Chain created for {model}","chainDeleted":"Chain deleted for {model}","failedCreateChain":"Failed to create chain","failedDeleteChain":"Failed to delete chain","deleteChain":"Delete chain","fillModelAndProviders":"Please fill model name and providers","addAtLeastOneProvider":"Add at least one provider","comboDefaultsTitle":"Combo Defaults","globalComboConfig":"Global combo configuration","defaultStrategy":"Default Strategy","defaultStrategyDesc":"Applied to new combos without explicit strategy","comboStrategyAria":"Combo strategy","priority":"Priority","weighted":"Weighted","maxRetriesLabel":"Max Retries","retryDelayLabel":"Retry Delay (ms)","timeoutLabel":"Timeout (ms)","healthCheck":"Health Check","healthCheckDesc":"Pre-check provider availability","trackMetrics":"Track Metrics","trackMetricsDesc":"Record per-combo request metrics","providerOverrides":"Provider Overrides","providerOverridesDesc":"Override timeout and retries per provider. Provider settings override global defaults.","providerMaxRetriesAria":"{provider} max retries","providerTimeoutAria":"{provider} timeout ms","removeProviderOverrideAria":"Remove {provider} override","newProviderNamePlaceholder":"e.g. google, openai...","newProviderNameAria":"New provider name","retries":"retries","ms":"ms","saveComboDefaults":"Save Combo Defaults","maxNestingDepth":"Max Nesting Depth","concurrencyPerModel":"Concurrency / Model","queueTimeout":"Queue Timeout (ms)","providerProfiles":"Provider Profiles","providerProfilesDesc":"Separate resilience settings for OAuth (session-based) and API Key (metered) providers. OAuth providers have stricter thresholds due to lower rate limits.","oauthProviders":"OAuth Providers","apiKeyProviders":"API Key Providers","transientCooldown":"Transient Cooldown","rateLimitCooldown":"Rate Limit Cooldown","maxBackoffLevel":"Max Backoff Level","cbThreshold":"CB Threshold","cbResetTime":"CB Reset Time","rateLimiting":"Rate Limiting","rateLimitingDesc":"API Key providers are automatically rate-limited with safe defaults. Limits are learned from response headers and adapt over time.","defaultSafetyNet":"Default Safety Net","rpm":"RPM","minGap":"Min Gap","maxConcurrent":"Max Concurrent","activeLimiters":"Active Limiters","noActiveLimiters":"No active rate limiters yet.","reservoir":"Reservoir","running":"Running","queued":"Queued","circuitBreakers":"Circuit Breakers","breakerStateClosed":"Closed","breakerStateOpen":"Open","breakerStateHalfOpen":"Half-Open","tripped":"{count} tripped","healthy":"{count} healthy","resetAll":"Reset All","noCircuitBreakers":"No circuit breakers active yet. They are created automatically when requests flow through the combo pipeline.","failures":"{count} failure(s)","policiesLocked":"Policies & Locked Identifiers","allOperational":"All systems operational — no lockouts or tripped breakers","loadingPolicies":"Loading policies...","lockedIdentifiers":"Locked Identifiers","unlockedIdentifier":"Unlocked: {identifier}","sinceDate":"since {date}","forceUnlock":"Force Unlock","unlocking":"Unlocking...","failedUnlock":"Failed to unlock","failedLoadWithStatus":"Failed to load: {status}","failedLoadResilience":"Failed to load resilience status","saveFailed":"Save failed","resetFailed":"Reset failed","loadingResilience":"Loading resilience status...","retry":"Retry","systemStorage":"System & Storage","allDataLocal":"All data stored locally on your machine","databasePath":"Database Path","exportDatabase":"Export Database","exportAll":"Export All (.tar.gz)","importDatabase":"Import Database","confirmDbImport":"Confirm Database Import","confirmDbImportDesc":"This will replace all current data with the content from {file}. A backup will be created automatically before the import.","yesImport":"Yes, Import","lastBackup":"Last Backup","noBackupYet":"No backup yet","backupNow":"Backup Now","backupRestore":"Backup & Restore","viewBackups":"View Backups","hide":"Hide","backupRetentionDesc":"Database snapshots are created automatically before restore and every 15 minutes when data changes. Retention: 24 hourly + 30 daily backups with smart rotation.","loadingBackups":"Loading backups...","noBackupsYet":"No backups available yet. Backups will be created automatically when data changes.","backupsAvailable":"{count} backup(s) available","refresh":"Refresh","confirm":"Confirm?","yes":"Yes","no":"No","restore":"Restore","invalidFileType":"Invalid file type. Only .sqlite files are accepted.","exportFailed":"Export failed","exportFailedWithError":"Export failed: {error}","fullExportFailedWithError":"Full export failed: {error}","backupCreated":"Backup created: {file}","restoreSuccess":"Restored! {connections} connections, {nodes} nodes, {combos} combos, {apiKeys} API keys.","importSuccess":"Database imported! {connections} connections, {nodes} nodes, {combos} combos, {apiKeys} API keys.","justNow":"just now","minutesAgo":"{count}m ago","hoursAgo":"{count}h ago","daysAgo":"{count}d ago","backupReasonManual":"manual","backupReasonPreRestore":"pre-restore","connectionsCount":"{count, plural, one {# connection} other {# connections}}","noChangesSinceBackup":"No changes since last backup","backupFailed":"Backup failed","restoreFailed":"Restore failed","importFailed":"Import failed","errorDuringRestore":"An error occurred during restore","errorDuringImport":"An error occurred during import","modelPricing":"Model Pricing","modelPricingDesc":"Configure cost rates per model • All rates in $/1M tokens","providers":"Providers","registry":"Registry","priced":"Priced","searchProvidersModels":"Search providers or models...","showAll":"Show All","noProvidersMatch":"No providers match your search.","howPricingWorks":"How Pricing Works","cacheWrite":"Cache Write","unsaved":"unsaved","resetDefaults":"Reset Defaults","saveProvider":"Save Provider","saving":"Saving...","model":"Model","models":"models","moreProviders":"{count} more providers","withPricing":"with pricing configured","policiesCircuitBreakers":"Policies & Circuit Breakers","activeIssuesDetected":"Active issues detected","off":"Off","resetPricingConfirm":"Reset all pricing for {provider} to defaults?","pricingDescInput":"Input: tokens sent to the model","pricingDescOutput":"Output: tokens generated","pricingDescCached":"Cached: reused input (~50% of input rate)","pricingDescReasoning":"Reasoning: thinking tokens (falls back to Output)","pricingDescCacheWrite":"Cache Write: creating cache entries (falls back to Input)","pricingDescFormula":"Cost = (input \xd7 input_rate) + (output \xd7 output_rate) + (cached \xd7 cached_rate) per million tokens.","pricingSettingsTitle":"Pricing Settings","totalModels":"Total Models","active":"Active","costCalculation":"Cost Calculation","costCalculationDesc":"Costs are calculated based on token usage and pricing rates configured for each model.","pricingFormat":"Pricing Format","pricingFormatDesc":"All rates are in $/1M tokens (dollars per million tokens).","tokenTypes":"Token Types","inputTokenDesc":"Standard prompt tokens","outputTokenDesc":"Completion/response tokens","cachedTokenDesc":"Cached input tokens (typically 50% of input rate)","reasoningTokenDesc":"Special reasoning/thinking tokens (fallback to output rate)","cacheCreationTokenDesc":"Tokens used to create cache entries (fallback to input rate)","customPricingNote":"You can override default pricing for specific models. Custom overrides take priority over auto-detected pricing.","editPricing":"Edit Pricing","viewFullDetails":"View Full Details"},"translator":{"title":"Translator","metaTitle":"Translator Playground | OmniRoute","metaDescription":"Debug, test, and visualize API format translations between providers","playgroundTitle":"Translator Playground","playground":"Playground","realtime":"Real-Time Translation Activity","chatTester":"Chat Tester","testBench":"Test Bench","liveMonitor":"Live Monitor","modeDescriptionPlayground":"Paste any API request body and see how OmniRoute translates it between provider formats (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)","modeDescriptionChatTester":"Send real chat requests through OmniRoute and inspect the full round-trip: input, translated request, provider response, and translated output.","modeDescriptionTestBench":"Run predefined scenarios and compare compatibility across providers and models.","modeDescriptionLiveMonitor":"Watch translation events in real time as requests flow through OmniRoute.","modeDescriptionFallback":"Debug, test, and visualize how OmniRoute translates API requests between providers.","recentTranslations":"Recent Translations","noTranslations":"No translations yet","source":"Source","target":"Target","time":"Time","model":"Model","status":"Status","latency":"Latency","totalTranslations":"Total Translations","successful":"Successful","errors":"Errors","avgLatency":"Avg Latency","millisecondsShort":"{value}ms","notAvailableSymbol":"—","liveAutoRefreshing":"Live — Auto-refreshing","paused":"Paused","eventsAppearHint":"Translation events appear here as requests flow through OmniRoute. Use any of these methods to generate events:","chatTesterTab":"Chat Tester tab","testBenchTab":"Test Bench tab","externalApiCalls":"External API calls","ideCliIntegrations":"IDE/CLI integrations","inMemoryNote":"Note: Events are stored in-memory and reset when the server restarts.","ok":"OK","errorShort":"ERR","formatConverter":"Format Converter","formatConverterDescription":"Paste or type a JSON request body. The translator will auto-detect the source format and convert it to the target format. Use this to debug how OmniRoute translates requests between formats (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).","input":"Input","output":"Output","auto":"Auto","swapFormats":"Swap formats","translateAction":"Translate","clear":"Clear","inputPlaceholder":"Paste a request body here or select a template below...","exampleTemplates":"Example Templates","exampleTemplatesHint":"— Click to load","templateLoadHint":"Template loads the request in {format} format. Change Source Format to load in a different format.","compatibilityTester":"Compatibility Tester","compatibilityReport":"Compatibility Report","testBenchDescription":"Run predefined scenarios (Simple Chat, Tool Calling, etc.) to verify translation and provider compatibility. Select a source format and target provider, then run all tests to see a compatibility percentage. Use this to find which features work across providers.","targetProvider":"Target Provider","runAllTests":"Run All Tests","runTest":"Run Test","reRun":"Re-run","running":"Running...","passed":"passed","failed":"failed","passedIconLabel":"✅ Passed","chunks":"chunks","scenarioSimpleChat":"Simple Chat","scenarioToolCalling":"Tool Calling","scenarioMultiTurn":"Multi-turn","scenarioThinking":"Thinking","scenarioSystemPrompt":"System Prompt","scenarioStreaming":"Streaming","templateNames":{"simple-chat":"Simple Chat","tool-calling":"Tool Calling","multi-turn":"Multi-turn","thinking":"Thinking","system-prompt":"System Prompt","streaming":"Streaming"},"templateDescriptions":{"simple-chat":"Basic text message","tool-calling":"Function/tool invocation","multi-turn":"Conversation with history","thinking":"Extended thinking / reasoning","system-prompt":"Complex system instructions","streaming":"SSE streaming request"},"templatePayloads":{"simpleChat":{"system":"You are a helpful assistant.","userGreeting":"Hello! How are you today?"},"toolCalling":{"userWeather":"What\'s the weather in S\xe3o Paulo?","toolDescription":"Get current weather for a location","cityNameDescription":"City name"},"multiTurn":{"system":"You are a coding assistant.","userInitial":"Write a function to sort an array in Python.","assistantExample":"Here\'s a simple sort function:\\n\\n```python\\ndef sort_array(arr):\\n return sorted(arr)\\n```","userFollowUp":"Now make it sort in descending order."},"thinking":{"question":"What is the sum of the first 100 prime numbers?"},"systemPrompt":{"systemInstruction":"You are a senior software engineer specializing in distributed systems. Answer questions concisely using industry best practices. Always provide code examples when relevant. Format your responses using markdown.","question":"How do I implement a circuit breaker pattern?"},"streaming":{"prompt":"Tell me a short story about a robot learning to paint."}},"openaiCompatibleLabel":"OpenAI Compatible","anthropicCompatibleLabel":"Anthropic Compatible","noTemplateForFormat":"No template for this format","translationFailed":"Translation failed: {error}","pipelineDebugger":"Pipeline Debugger","translationPipeline":"Translation Pipeline","pipelineVisualization":"Pipeline visualization","pipelineVisualizationHint":"Send a message to see how your request flows through detection → translation → provider call.","chatTesterDescription":"Send messages as a specific client format and inspect each step of the translation pipeline.","chatTesterFlow":"Client Request → Format Detection → OpenAI Intermediate → Provider Format → Response","clickStepToInspect":"Click any step to inspect the data at that stage.","clientFormat":"Client Format","provider":"Provider","modelPlaceholder":"Select or type a model name...","sendMessageToSeePipeline":"Send a message to see the translation pipeline","chatMessageHintPrefix":"Your message will be formatted as a","chatMessageHintSuffix":"request, translated through the pipeline, and sent to the selected provider.","youWithFormat":"You ({format})","assistant":"Assistant","typeMessage":"Type a message...","send":"Send","clientRequest":"Client Request","clientRequestDescription":"The request body as your client would send it","formatDetected":"Format Detected","formatDetectedDescription":"OmniRoute auto-detects the API format from the request structure","openaiIntermediate":"OpenAI Intermediate","openaiIntermediateDescription":"All formats are first normalized to OpenAI format (the universal bridge)","providerFormat":"Provider Format","providerFormatDescription":"OpenAI format is translated to the provider\'s native format","providerResponse":"Provider Response","providerResponseRawDescription":"The raw response from the provider API","providerResponseSseDescription":"The raw SSE stream from the provider API","unexpectedError":"An unexpected error occurred","error":"Error","errorMessage":"Error: {message}","requestFailed":"Request failed","noTextExtracted":"(No text extracted)","liveMonitorDescriptionPrefix":"Shows translation events as API calls flow through OmniRoute. Events come from the in-memory buffer (resets on restart). Use","liveMonitorDescriptionSuffix":", or external API calls to generate events."},"usage":{"title":"Usage","loggerTab":"Logger","proxyTab":"Proxy","budgetManagement":"Budget Management","budgetSaved":"Budget limits saved","budgetSaveFailed":"Failed to save budget","loadingBudgetData":"Loading budget data...","noApiKeysTitle":"No API Keys","noApiKeysDescription":"Add API keys first to set up budget limits.","apiKey":"API Key","todaysSpend":"Today\'s Spend","thisMonth":"This Month","setLimits":"Set Limits","dailyLimitUsd":"Daily Limit (USD)","monthlyLimitUsd":"Monthly Limit (USD)","warningThresholdPercent":"Warning Threshold (%)","dailyLimitPlaceholder":"e.g. 5.00","monthlyLimitPlaceholder":"e.g. 50.00","warningThresholdPlaceholder":"80","saveLimits":"Save Limits","budgetOk":"Budget OK — {remaining} remaining","budgetExceeded":"Budget exceeded — requests may be blocked","totalRequests":"Total requests","noDataYet":"No data yet","latency":"Latency","latencyP50":"p50","latencyP95":"p95","latencyP99":"p99","promptCache":"Prompt Cache","systemHealth":"System Health","entries":"Entries","activeCount":"{count} active","openCircuitBreakersDetected":"Open circuit breakers detected","hitRate":"Hit Rate","hitsMisses":"Hits / Misses","circuitBreakers":"Circuit Breakers","lockedIPs":"Locked IPs","lockoutsAutoRefreshHint":"Per-model rate limit locks • Auto-refresh 10s","lockedCount":"{count, plural, one {# locked} other {# locked}}","timeLeft":"{time} left","howItWorks":"How It Works","howItWorksSubtitle":"Learn how evaluations validate your LLM responses","define":"Define","defineStepDescription":"Create test cases with input prompts and expected output criteria using strategies like contains, regex, or exact match.","run":"Run","runStepDescription":"Execute test cases against your LLM endpoints through OmniRoute. Each case is sent as a real API request.","evaluate":"Evaluate","evaluateStepDescription":"Responses are compared against expected criteria. See pass/fail for each case with latency metrics and detailed feedback.","evalSuites":"Evaluation Suites","evalSuitesHint":"Click a suite to view test cases, then run to evaluate your LLM endpoints","evalsLoading":"Loading eval suites...","noEvalSuitesFound":"No Eval Suites Found","noEvalSuitesDescription":"Eval suites can be defined via the API or in code. They test model outputs against expected results using strategies like contains, regex, exact match, and custom functions.","columnCase":"Case","columnStatus":"Status","columnLatency":"Latency","columnDetails":"Details","columnModel":"Model","columnStrategy":"Strategy","columnExpected":"Expected","statsSuites":"Suites","statsTestCases":"Test Cases","statsModels":"Models","statsCoverage":"Coverage","statsStrategiesCount":"{count} strategies","evaluationStrategies":"Evaluation Strategies","modelsUnderTest":"Models Under Test","searchSuitesPlaceholder":"Search suites...","passSuffix":"pass","casesCount":"{count, plural, one {# case} other {# cases}}","runEval":"Run Eval","runningProgress":"Running {current}/{total}...","passRate":"pass rate","summaryBreakdown":"{passed} passed \xb7 {failed} failed \xb7 {total} total","passedIconLabel":"✅ Passed","failedIconLabel":"❌ Failed","detailsContains":"Contains: \\"{term}\\"","detailsRegex":"Regex: {pattern}","detailsExpected":"Expected: \\"{expected}\\"","noResultsYet":"No results yet","testCasesCount":"Test Cases ({count})","noTestCasesDefined":"No test cases defined","runEvalHint":"Click \\"Run Eval\\" to execute all cases against your LLM endpoint. Each test sends a real request through OmniRoute.","notifyNoTestCases":"No test cases defined for this suite","notifyAllCasesPassed":"All {total} cases passed ✅","notifySomeCasesFailed":"{passed}/{total} passed, {failed} failed","notifyEvalRunFailed":"Eval run failed","notifyEvalTitle":"Eval: {name}","modelEvals":"Model Evaluations","evalsHeroDescription":"Test and validate your LLM endpoints by running predefined evaluation suites. Each suite contains test cases that send real prompts through OmniRoute and compare responses against expected criteria — helping you detect regressions, compare models, and ensure response quality across providers.","qualityValidation":"Quality Validation","modelComparison":"Model Comparison","regressionDetection":"Regression Detection","latencyBenchmarks":"Latency Benchmarks","modelLockouts":"Model Lockouts","noLockouts":"No models currently locked","activeSessions":"Active Sessions","noSessions":"No active sessions","sessionsHint":"Sessions appear as requests flow through the proxy","sessionsTrackedHint":"Tracked via request fingerprinting • Auto-refresh 5s","session":"Session","age":"Age","requests":"Requests","connection":"Connection","durationMillisecondsShort":"{value}ms","durationSecondsShort":"{value}s","durationMinutesShort":"{value}m","durationHoursShort":"{value}h","reasonSeparator":" - ","notAvailableSymbol":"-","providerLimits":"Provider Limits","noProviders":"No Providers Connected","connectProvidersForQuota":"Connect to providers with OAuth to track your API quota limits and usage.","accountsCount":"{count, plural, one {# account} other {# accounts}}","filteredFromCount":"(filtered from {count})","autoRefresh":"Auto-refresh","refreshAll":"Refresh All","loadingQuotas":"Loading...","account":"Account","modelQuotas":"Model Quotas","lastUsed":"Last Used","actions":"Actions","refreshQuota":"Refresh quota","today":"Today","tomorrow":"Tomorrow","dayTimeFormat":"{day}, {time}","inDuration":"in {duration}","notApplicable":"N/A","rawPlanWithValue":"Raw plan: {plan}","noPlanFromProvider":"No plan from provider","noQuotaData":"No quota data","noQuotaDataAvailable":"No quota data available","noAccountsForTierFilter":"No accounts found for tier filter","tierAll":"All","tierEnterprise":"Enterprise","tierTeam":"Team","tierBusiness":"Business","tierUltra":"Ultra","tierPro":"Pro","tierPlus":"Plus","tierFree":"Free","tierUnknown":"Unknown"},"modals":{"waitingAuth":"Waiting for Authorization","verificationUrl":"Verification URL","yourCode":"Your Code","remoteAccess":"Remote access:","connectedSuccess":"Connected Successfully!","connectionFailed":"Connection Failed","chooseAuthMethod":"Choose your authentication method:","awsBuilderId":"AWS Builder ID","awsIamIdentity":"AWS IAM Identity Center","googleAccount":"Google Account","githubAccount":"GitHub Account","importToken":"Import Token","pasteToken":"Paste refresh token from Kiro IDE.","awsRegion":"AWS Region","autoDetecting":"Auto-detecting tokens...","readingFromCache":"Reading from AWS SSO cache","readingFromCursor":"Reading from Cursor IDE database","initializing":"Initializing...","pricingConfig":"Pricing Configuration","loadingPricing":"Loading pricing data...","pricingRatesFormat":"Pricing Rates Format","noPricingData":"No pricing data available","noModelsFound":"No models found"},"loggers":{"allProviders":"All Providers","allModels":"All Models","allAccounts":"All Accounts","allApiKeys":"All API Keys","allTypes":"All Types","allLevels":"All Levels","modelAZ":"Model A-Z","modelZA":"Model Z-A","loadingLogs":"Loading logs...","loadingProxyLogs":"Loading proxy logs...","noLogEntries":"No log entries found","noPayloadData":"No payload data available for this log entry.","proxyEvent":"Proxy Event","proxy":"Proxy","level":"Level","directNative":"Direct (native)","combo":"Combo","inputTokens":"I:","outputTokens":"O:"},"stats":{"usageOverview":"Usage Overview","outputTokens":"Output Tokens","totalCost":"Total Cost","usageByModel":"Usage by Model","usageByAccount":"Usage by Account","failedToLoad":"Failed to load usage statistics.","tokenHealth":"Token Health","totalOAuth":"Total OAuth","healthy":"Healthy","warning":"Warning","errored":"Errored","lastCheck":"Last check","noData":"No data","share":"Share","unableToLoad":"Unable to load system metrics","product":"Product","resources":"Resources","company":"Company"},"auth":{"welcome":"Welcome","signIn":"Sign in","enterPassword":"Enter your password to continue","password":"Password","unifiedProxy":"Unified AI API Proxy","unifiedAiApiProxy":"Unified AI API Proxy","unifiedAiApiProxyDesc":"Route requests to multiple AI providers through a single endpoint. Load balancing, failover, and usage tracking built in.","passwordNotEnabled":"Password protection is not enabled","loading":"Loading...","invalidPassword":"Invalid password","errorOccurredRetry":"An error occurred. Please try again.","configureInstance":"Let\'s get your OmniRoute instance configured","runOnboardingWizard":"Run the onboarding wizard to set up your password and connect your first AI provider.","startOnboarding":"Start Onboarding","secureYourInstance":"Secure Your Instance","setPasswordDescription":"Set a password to protect your dashboard and secure your API endpoints from unauthorized access.","configurePassword":"Configure Password","continue":"Continue","windowWillClose":"This window will close automatically...","closeTabNow":"You can close this tab now.","copyUrlManual":"Please copy the URL from the address bar and paste it in the application.","accessDeniedDescription":"You don\'t have permission to access this resource. Check your API key or contact the administrator.","goToDashboard":"Go to Dashboard","featureMultiProviderTitle":"Multi-Provider","featureMultiProviderDesc":"OpenAI, Anthropic, Google, and more","featureLoadBalancingTitle":"Load Balancing","featureLoadBalancingDesc":"Distribute requests intelligently","featureUsageTrackingTitle":"Usage Tracking","featureUsageTrackingDesc":"Monitor costs and tokens","resetPassword":"Reset Password","resetDescription":"Choose a method to recover access to your dashboard","stopServer":"Stop the OmniRoute server","processing":"Processing...","pleaseWait":"Please wait while we complete the authorization.","authSuccess":"Authorization Successful!","copyUrl":"Copy This URL","accessDenied":"Access Denied","methodCliTitle":"Method 1: CLI Reset","methodCliDescription":"Run the following command on the server where OmniRoute is running:","methodCliHint":"This will prompt you to set a new password. The server must be stopped first.","methodManualTitle":"Method 2: Manual Reset","methodManualDescription":"Delete the password from the database and set a new one on startup:","setPasswordInYour":"Set a new password in your","fileLabelSuffix":"file:","newPasswordPlaceholder":"your_new_password","deleteSettingsFile":"Delete","orRemovePasswordHashField":"or remove the passwordHash field","restartServerWithNewPassword":"Restart the server - it will use the new password","backToLogin":"Back to Login","forgotPassword":"Forgot password?"},"landing":{"brandName":"OmniRoute","navigateHome":"Navigate to home","toggleMenu":"Toggle menu","featuresLink":"Features","docsLink":"Docs","github":"GitHub","versionLive":"v1.0 is now live","oneEndpoint":"One Endpoint for","allProviders":"All AI Providers","heroDescription":"AI endpoint proxy with web dashboard - A JavaScript port of CLIProxyAPI. Works seamlessly with Claude Code, OpenAI Codex, Cline, RooCode, and other CLI tools.","getStarted":"Get Started","viewOnGithub":"View on GitHub","powerfulFeatures":"Powerful Features","featuresSubtitle":"Everything you need to manage your AI infrastructure in one place, built for scale.","featureUnifiedEndpointTitle":"Unified Endpoint","featureUnifiedEndpointDesc":"Access all providers via a single standard API URL.","featureEasySetupTitle":"Easy Setup","featureEasySetupDesc":"Get up and running in minutes with npx command.","featureModelFallbackTitle":"Model Fallback","featureModelFallbackDesc":"Automatically switch providers on failure or high latency.","featureUsageTrackingTitle":"Usage Tracking","featureUsageTrackingDesc":"Detailed analytics and cost monitoring across all models.","featureOAuthApiKeysTitle":"OAuth & API Keys","featureOAuthApiKeysDesc":"Securely manage credentials in one vault.","featureCloudSyncTitle":"Cloud Sync","featureCloudSyncDesc":"Sync your configurations across devices instantly.","featureCliSupportTitle":"CLI Support","featureCliSupportDesc":"Works with Claude Code, Codex, Cline, Cursor, and more.","featureDashboardTitle":"Dashboard","featureDashboardDesc":"Visual dashboard for real-time traffic analysis.","howItWorks":"How OmniRoute Works","howItWorksDescription":"Data flows seamlessly from your application through our intelligent routing layer to the best provider for the job.","howItWorksStep1Title":"1. CLI & SDKs","howItWorksStep1Description":"Your requests start from your favorite tools or our unified SDK. Just change the base URL.","howItWorksStep2Title":"2. OmniRoute Hub","howItWorksStep2Description":"Our engine analyzes the prompt, checks provider health, and routes for lowest latency or cost.","howItWorksStep3Title":"3. AI Providers","howItWorksStep3Description":"The request is fulfilled by OpenAI, Anthropic, Gemini, or others instantly.","getStartedIn30Seconds":"Get Started in 30 Seconds","getStartedDescription":"Install OmniRoute, configure your providers via web dashboard, and start routing AI requests.","installOmniRoute":"Install OmniRoute","installStepDescription":"Run npx command to start the server instantly","openDashboard":"Open Dashboard","openDashboardStepDescription":"Configure providers and API keys via web interface","routeRequests":"Route Requests","routeRequestsStepDescription":"Point your CLI tools to {endpoint}","terminal":"terminal","copy":"Copy","copied":"✓ Copied","startingOmniRoute":"Starting OmniRoute...","serverRunningOnLabel":"Server running on","dashboardLabel":"Dashboard","readyToRoute":"Ready to route! ✓","configureProvidersNote":"\uD83D\uDCDD Configure providers in dashboard or use environment variables","dataLocation":"Data Location:","dataLocationMacLinux":" macOS/Linux:","dataLocationWindows":" Windows:","product":"Product","dashboardLink":"Dashboard","changelog":"Changelog","resources":"Resources","documentation":"Documentation","npm":"NPM","legal":"Legal","mitLicense":"MIT License","footerTagline":"The unified endpoint for AI generation. Connect, route, and manage your AI providers with ease.","copyright":"\xa9 {year} OmniRoute. All rights reserved.","flowToolClaudeCode":"Claude Code","flowToolOpenAICodex":"OpenAI Codex","flowToolCline":"Cline","flowToolCursor":"Cursor","flowProviderOpenAI":"OpenAI","flowProviderAnthropic":"Anthropic","flowProviderGemini":"Gemini","flowProviderGithubCopilot":"GitHub Copilot","interactiveDiagram":"Interactive diagram visible on desktop","ctaTitle":"Ready to Simplify Your AI Infrastructure?","ctaDescription":"Join developers who are streamlining their AI integrations with OmniRoute. Open source and free to start.","startFree":"Start Free","readDocumentation":"Read Documentation"},"docs":{"title":"Documentation","quickStart":"Quick Start","features":"Features","supportedProviders":"Supported Providers","supportedProvidersToc":"Providers","commonUseCases":"Common Use Cases","clientCompatibility":"Client Compatibility","apiReference":"API Reference","method":"Method","path":"Path","notes":"Notes","modelPrefixes":"Model Prefixes","prefix":"Prefix","troubleshooting":"Troubleshooting","supportsChat":"Supports both chat and responses endpoints.","oauthAutoRefresh":"OAuth connection with automatic token refresh.","fullStreaming":"Full streaming support for all models.","docsLabel":"Docs","docsHeroDescription":"AI gateway for multi-provider LLMs. One endpoint for OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor, and 20+ more providers.","openDashboard":"Open Dashboard","endpointPage":"Endpoint Page","github":"GitHub","reportIssue":"Report Issue","onThisPage":"On this page","documentationVersion":"Documentation - v{version}","quickStartStep1Title":"1. Install and run","quickStartStep1Prefix":"Run","quickStartStep1Middle":"or clone from GitHub and run","quickStartStep2Title":"2. Create API key","quickStartStep2Text":"Go to Endpoint -> Registered Keys. Generate one key per environment.","quickStartStep3Title":"3. Connect providers","quickStartStep3Text":"Add provider accounts via OAuth login, API key, or free-tier auto-connect.","quickStartStep4Title":"4. Set client base URL","quickStartStep4Prefix":"Point your IDE or API client to","quickStartStep4Suffix":"Use provider prefix, for example","featureRoutingTitle":"Multi-Provider Routing","featureRoutingText":"Route requests to 30+ AI providers through a single OpenAI-compatible endpoint. Supports chat, responses, audio, and image APIs.","featureCombosTitle":"Combos and Balancing","featureCombosText":"Create model combos with fallback chains and balancing strategies: round-robin, priority, random, least-used, and cost-optimized.","featureUsageTitle":"Usage and Cost Tracking","featureUsageText":"Real-time token counting, cost calculation per provider/model, and detailed usage breakdown by API key and account.","featureAnalyticsTitle":"Analytics Dashboard","featureAnalyticsText":"Visual analytics with charts for requests, tokens, errors, latency, costs, and model popularity over time.","featureHealthTitle":"Health Monitoring","featureHealthText":"Live health checks, provider status, circuit breaker states, and automatic rate limit detection with exponential backoff.","featureCliTitle":"CLI Tools","featureCliText":"Manage IDE configurations, export/import backups, discover codex profiles, and configure settings from the dashboard.","featureSecurityTitle":"Security and Policies","featureSecurityText":"API key authentication, IP filtering, prompt injection guard, domain policies, session management, and audit logging.","featureCloudSyncTitle":"Cloud Sync","featureCloudSyncText":"Sync your configuration to Cloudflare Workers for remote access with encrypted credentials and automatic failover.","providersAcrossConnectionTypes":"{count} providers across three connection types.","manageProviders":"Manage Providers","providersCount":"{count} providers","providerTypeFree":"Free Tier","providerTypeOAuth":"OAuth","providerTypeApiKey":"API Key","useCaseSingleEndpointTitle":"Single endpoint for many providers","useCaseSingleEndpointText":"Point clients to one base URL and route by model prefix (for example: gh/, cc/, kr/, openai/).","useCaseFallbackTitle":"Fallback and model switching with combos","useCaseFallbackText":"Create combo models in Dashboard and keep client config stable while providers rotate internally.","useCaseUsageVisibilityTitle":"Usage, cost and debug visibility","useCaseUsageVisibilityText":"Track tokens and cost by provider, account, and API key in Usage and Analytics tabs.","clientCherryStudioTitle":"Cherry Studio","baseUrlLabel":"Base URL","chatEndpointLabel":"Chat endpoint","modelRecommendationLabel":"Model recommendation: explicit prefix","clientCodexTitle":"Codex / GitHub Copilot Models","clientCodexBullet1":"Use model IDs with","clientCodexBullet2":"Codex-family models auto-route to","clientCodexBullet3":"Non-Codex models continue on","clientCursorTitle":"Cursor IDE","clientCursorBullet1":"Use","clientCursorBullet1Suffix":"prefix for Cursor models.","clientCursorBullet2":"OAuth connection - login from the Providers page.","clientClaudeTitle":"Claude Code / Antigravity","clientClaudeBullet1Prefix":"Use","clientClaudeBullet1Middle":"(Claude) or","clientClaudeBullet1Suffix":"(Antigravity) prefix.","endpointChatNote":"OpenAI-compatible chat endpoint (default).","endpointResponsesNote":"Responses API endpoint (Codex, o-series).","endpointModelsNote":"Model catalog for all connected providers.","endpointAudioNote":"Audio transcription (Deepgram, AssemblyAI).","endpointImagesNote":"Image generation (NanoBanana).","endpointRewriteChatNote":"Rewrite helper for clients without /v1.","endpointRewriteResponsesNote":"Rewrite helper for Responses without /v1.","endpointRewriteModelsNote":"Rewrite helper for model discovery without /v1.","modelPrefixesDescriptionStart":"Use the provider prefix before the model name to route to a specific provider. Example:","modelPrefixesDescriptionEnd":"routes to GitHub Copilot.","provider":"Provider","type":"Type","troubleshootingModelRouting":"If the client fails with model routing, use explicit provider/model (for example: gh/gpt-5.1-codex).","troubleshootingAmbiguousModels":"If you receive ambiguous model errors, pick a provider prefix instead of a bare model ID.","troubleshootingCodexFamily":"For GitHub Codex-family models, keep model as gh/<codex-model>; router selects /responses automatically.","troubleshootingTestConnection":"Use Dashboard > Providers > Test Connection before testing from IDEs or external clients.","troubleshootingCircuitBreaker":"If a provider shows circuit breaker open, wait for the cooldown or check Health page for details.","troubleshootingOAuth":"For OAuth providers, re-authenticate if tokens expire. Check the provider card status indicator."},"legal":{"privacyPolicy":"Privacy Policy","termsOfService":"Terms of Service","providerConfigurations":"Provider configurations","apiKeys":"API keys","usageLogs":"Usage logs","applicationSettings":"Application settings","viewExportAnalytics":"View and export usage analytics","clearHistory":"Clear usage history at any time","configureRetention":"Configure log retention policies","backupRestore":"Back up and restore your database","privacyMetadataTitle":"Privacy Policy | OmniRoute","privacyMetadataDescription":"Privacy policy for the OmniRoute AI API proxy router.","termsMetadataTitle":"Terms of Service | OmniRoute","termsMetadataDescription":"Terms of service for the OmniRoute AI API proxy router.","backToHome":"Back to home","lastUpdated":"Last updated: {date}","policyLastUpdatedDate":"February 13, 2026","listSeparator":"-","questionsVisit":"Questions? Visit our","githubRepository":"GitHub repository","privacySection1Title":"1. Local-First Architecture","privacySection1Text":"OmniRoute is designed as a local-first application. All data processing and storage occurs entirely on your machine. There is no centralized server collecting your information.","privacySection2Title":"2. Data We Store","privacyDataStoredIn":"The following data is stored locally in","privacyDataProviderConfigurationsDesc":"connection URLs, provider types, and priority settings","privacyDataApiKeysDesc":"encrypted and stored locally for authenticating with AI providers","privacyDataUsageLogsDesc":"request counts, token usage, model names, timestamps, and response times","privacyDataApplicationSettingsDesc":"theme preferences, routing strategy, and combo configurations","privacySection3Title":"3. No Telemetry","privacySection3Text":"OmniRoute does not collect telemetry, analytics, or crash reports. No data is sent to us or any third party. Your usage patterns, API calls, and configurations remain entirely private.","privacySection4Title":"4. Third-Party AI Providers","privacySection4Text":"When you make API calls through OmniRoute, your requests are forwarded to the AI providers you have configured (for example: OpenAI, Anthropic, Google). These providers have their own privacy policies that govern how they handle your data. Please review:","privacyOpenAiPolicy":"OpenAI Privacy Policy","privacyAnthropicPolicy":"Anthropic Privacy Policy","privacyGooglePolicy":"Google Privacy Policy","privacySection5Title":"5. Cloud Sync (Optional)","privacySection5Text":"If you enable the optional cloud sync feature, provider configurations and API keys may be transmitted to a configured cloud endpoint. This feature is disabled by default and requires explicit opt-in.","privacySection6Title":"6. Logging","privacyLoggingIntro":"Request logs can be configured through the dashboard settings. You can:","privacySection7Title":"7. Your Rights","privacySection7TextStart":"Since all data is stored locally, you have full control. You can delete your data at any time by removing the","privacySection7TextEnd":"directory or using the database backup and restore features in the dashboard.","termsSection1Title":"1. Overview","termsSection1Text":"OmniRoute is a local-first AI API proxy router that operates entirely on your machine. It routes requests to multiple AI providers with load balancing, failover, and usage tracking.","termsSection2Title":"2. User Responsibilities","termsResponsibilityApiKeys":"You are solely responsible for managing your own API keys and credentials for third-party AI providers (OpenAI, Anthropic, Google, etc.).","termsResponsibilityCompliance":"You must comply with the terms of service of each AI provider whose API you access through OmniRoute.","termsResponsibilitySecurity":"You are responsible for the security of your local OmniRoute installation, including setting a password and restricting network access.","termsSection3Title":"3. How It Works","termsSection3Text":"OmniRoute acts as an intermediary proxy. API calls sent to OmniRoute are translated and forwarded to your configured AI providers. OmniRoute does not modify the content of your requests or responses beyond the necessary protocol translation.","termsSection4Title":"4. Data Handling","termsDataStoredLocally":"All data is stored locally on your machine in a SQLite database.","termsNoTransmission":"OmniRoute does not transmit any data to external servers unless you explicitly enable cloud sync features.","termsDataLocationText":"Usage logs, API keys, and configuration are stored in","termsSection5Title":"5. Disclaimer","termsSection5Text":"OmniRoute is provided \\"as is\\" without warranty of any kind. We are not responsible for any costs incurred through API usage, service disruptions, or data loss. Always maintain backups of your configuration.","termsSection6Title":"6. Open Source","termsSection6Text":"OmniRoute is open-source software. You are free to inspect, modify, and distribute it under the terms of its license."}}')}};
|
|
1
|
+
"use strict";exports.id=1960,exports.ids=[1960],exports.modules={31960:a=>{a.exports=JSON.parse('{"common":{"save":"Save","cancel":"Cancel","delete":"Delete","loading":"Loading...","error":"An error occurred","success":"Success","confirm":"Are you sure?","refresh":"Refresh","close":"Close","add":"Add","edit":"Edit","search":"Search","back":"Back","next":"Next","submit":"Submit","reset":"Reset","copy":"Copy","copied":"Copied!","enabled":"Enabled","disabled":"Disabled","active":"Active","inactive":"Inactive","noData":"No data available","configure":"Configure","manage":"Manage","name":"Name","actions":"Actions","status":"Status","type":"Type","model":"Model","models":"models","provider":"Provider","account":"Account","time":"Time","details":"Details","created":"Created","lastUsed":"Last Used","loadMore":"Load More","noResults":"No results found","reloadPage":"Reload Page","connected":"Connected","disconnected":"Disconnected","notConfigured":"Not configured","testConnection":"Test Connection","enable":"Enable","disable":"Disable","columns":"Columns","newest":"Newest","oldest":"Oldest","all":"All","none":"None","yes":"Yes","no":"No","warning":"Warning","note":"Note","free":"Free","skipToContent":"Skip to content"},"sidebar":{"home":"Home","dashboard":"Dashboard","providers":"Providers","combos":"Combos","usage":"Usage","analytics":"Analytics","costs":"Costs","health":"Health","limits":"Limits & Quotas","cliTools":"CLI Tools","media":"Media","settings":"Settings","translator":"Translator","docs":"Docs","issues":"Issues","endpoint":"Endpoint","apiManager":"API Manager","logs":"Logs","auditLog":"Audit Log","shutdown":"Shutdown","restart":"Restart","shutdownConfirm":"Shut down OmniRoute?","restartConfirm":"Restart OmniRoute?","version":"v{version}","debug":"Debug","system":"System","help":"Help","serverDisconnected":"Server Disconnected","serverDisconnectedMsg":"The proxy server has been stopped or is restarting.","expandSidebar":"Expand sidebar","collapseSidebar":"Collapse sidebar"},"header":{"logout":"Logout","language":"Language","providers":"Providers","providerDescription":"Manage your AI provider connections","combos":"Combos","comboDescription":"Model combos with fallback","usage":"Usage & Analytics","usageDescription":"Monitor your API usage, token consumption, and request logs","analytics":"Analytics","analyticsDescription":"Charts, trends, and evaluation insights","cliTools":"CLI Tools","cliToolsDescription":"Configure CLI tools","home":"Home","homeDescription":"Welcome to OmniRoute","endpoint":"Endpoint","endpointDescription":"API endpoint configuration","settings":"Settings","settingsDescription":"Manage your preferences","openaiCompatible":"OpenAI Compatible","anthropicCompatible":"Anthropic Compatible","media":"Media","mediaDescription":"Generate images, videos, and music"},"home":{"quickStart":"Quick Start","quickStartDesc":"Get up and running in 4 steps. Connect providers, route models, monitor everything.","fullDocs":"Full Docs","step1Title":"1. Create API key","step1Desc":"Go to <endpoint>Endpoint</endpoint> -> Registered Keys. Generate one key per environment.","step2Title":"2. Connect providers","step2Desc":"Add accounts in <providers>Providers</providers>. Supports OAuth, API Key, and free tiers.","step3Title":"3. Point your client","step3Desc":"Set base URL to {url} in your IDE or API client.","step4Title":"4. Monitor & optimize","step4Desc":"Track tokens, cost and errors in <logs>Request Logs</logs> and <analytics>Analytics</analytics>.","providersOverview":"Providers Overview","configuredOf":"{configured} configured of {total} available providers","noModelsAvailable":"No models available for this provider.","configureFirst":"Configure a connection first in {providers}","configureProvider":"Configure Provider","modelAvailable":"{count} model available","modelsAvailable":"{count} models available","connectionsActive":"{count} connection active","connectionsActivePlural":"{count} connections active","copyModelName":"Copy model name","documentation":"Documentation","healthMonitor":"Health Monitor","reportIssue":"Report issue","activeError":"{active} active \xb7 {errors} error","oauthLabel":"OAuth","apiKeyLabel":"API Key","requestsShort":"{count} reqs","providerModelsTitle":"{provider} - Models","copiedModel":"Copied: {model}","aliasLabel":"alias"},"analytics":{"title":"Analytics","overviewDescription":"Monitor your API usage patterns, token consumption, costs, and activity trends across all providers and models.","evalsDescription":"Run evaluation suites to test and validate your LLM endpoints. Compare model quality, detect regressions, and benchmark latency.","overview":"Overview","evals":"Evals"},"apiManager":{"title":"API Keys","createKey":"Create API Key","key":"Key","revokeKey":"Revoke Key","revokeConfirm":"Are you sure you want to revoke this API key?","noKeys":"No API keys yet","noKeysDesc":"Create your first API key to authenticate requests to your endpoint","keyLabel":"Key Label","permissions":"Permissions","expiresAt":"Expires","never":"Never","revoke":"Revoke","showKey":"Show Key","hideKey":"Hide Key","copyKey":"Copy API Key","allModels":"All models","selectedModels":"Selected Models","readOnly":"Read Only","fullAccess":"Full Access","keyManagement":"API Key Management","keyManagementDesc":"Create and manage API keys for authenticating requests to your endpoint","totalKeys":"Total Keys","restricted":"Restricted","totalRequests":"Total Requests","modelsAvailable":"Models Available","registeredKeys":"Registered Keys","keysRegistered":"{count} keys registered","keyRegistered":"{count} key registered","keysSecurityNote":"Each key isolates usage tracking and can be revoked independently. Keys are masked after creation for security.","createFirstKey":"Create Your First Key","name":"Name","usage":"Usage","created":"Created","actions":"Actions","reqs":"reqs","neverUsed":"Never used","deleteConfirm":"Delete this API key?","usageTips":"Usage Tips","tipAuth":"Use API keys in the Authorization header as Bearer YOUR_KEY","tipSecure":"Keys are only shown once during creation — store them securely","tipSeparate":"Create separate keys for different clients or environments","tipRestrict":"Restrict keys to specific models for better security and cost control","keyName":"Key Name","keyNamePlaceholder":"e.g., Production Key, Development Key","keyNameDesc":"Choose a descriptive name to identify this key\'s purpose","keyCreated":"API Key Created","keyCreatedSuccess":"Key created successfully!","keyCreatedNote":"Copy and store this key now — it won\'t be shown again.","done":"Done","savePermissions":"Save Permissions","allowAll":"Allow All","restrict":"Restrict","allowAllInfo":"This key can access all available models.","restrictInfo":"This key can access {selected} of {total} models.","selected":"{count} selected","all":"All","clear":"Clear","searchModels":"Search models by name or provider...","noModelsFound":"No models found","keyNameRequired":"Key name is required","keyNameTooLong":"Key name must be {max} characters or less","keyNameInvalid":"Key name can only contain letters, numbers, spaces, hyphens, and underscores","invalidKeyName":"Invalid key name","failedCreateKey":"Failed to create key","failedCreateKeyRetry":"Failed to create key. Please try again.","invalidKeyId":"Invalid key ID","failedDeleteKey":"Failed to delete key","failedDeleteKeyRetry":"Failed to delete key. Please try again.","invalidModelsSelection":"Invalid models selection","cannotSelectMoreThanModels":"Cannot select more than {max} models","failedUpdatePermissions":"Failed to update permissions","failedUpdatePermissionsRetry":"Failed to update permissions. Please try again.","unknownProvider":"unknown","copyMaskedKey":"Copy masked key","modelsCount":"{count, plural, one {# model} other {# models}}","lastUsedOn":"Last: {date}","editPermissions":"Edit permissions","deleteKey":"Delete key","model":"{count} model","models":"{count} models","permissionsTitle":"Permissions: {name}","allowAllDesc":"This key can access all available models.","restrictDesc":"This key can access {selectedCount} of {totalModels} models.","selectedCount":"{count} selected"},"auditLog":{"title":"Audit Log","searchPlaceholder":"Search actions...","action":"Action","actor":"Actor","target":"Target","ipAddress":"IP Address","timestamp":"Timestamp","noEntries":"No audit entries found","filterByAction":"Filter by action...","filterByActor":"Filter by actor...","filterEntriesAria":"Filter audit log entries","filterByActionTypeAria":"Filter by action type","filterByActorAria":"Filter by actor","refreshAuditLogAria":"Refresh audit log","tableAria":"Audit log entries","failedFetchAuditLog":"Failed to fetch audit log","notAvailable":"—","description":"Administrative actions and security events","showing":"Showing {count} entries (offset {offset})","previous":"Previous"},"media":{"title":"Media Playground","subtitle":"Generate images, videos, and music using your configured providers","model":"Model","prompt":"Prompt","generate":"Generate","generating":"Generating...","loadingModels":"Loading available models...","noModels":"No models available. Configure providers with media capabilities first.","error":"Generation Failed","result":"Result","imageDescription":"Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.","videoDescription":"Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.","musicDescription":"Compose music using Stable Audio Open or MusicGen via ComfyUI."},"cliTools":{"title":"CLI Tools","noActiveProviders":"No active providers","noActiveProvidersDesc":"Please add and connect providers first to configure CLI tools.","mapModels":"Map Models","testConnection":"Test Connection","connectionStatus":"Connection Status","configureEndpoint":"Configure Endpoint","instructions":"Instructions","modelMapping":"Model Mapping","baseUrl":"Base URL","apiKey":"API Key","configured":"Configured","notConfigured":"Not configured","notInstalled":"Not installed","custom":"Custom","unknown":"Unknown","lastSavedAt":"Last saved: {date}","never":"Never","justNow":"just now","minutesAgoShort":"{count}m ago","hoursAgoShort":"{count}h ago","daysAgoShort":"{count}d ago","monthsAgoShort":"{count}mo ago","yearsAgoShort":"{count}y ago","runtimeCheckFailed":"Runtime check failed","yourApiKeyPlaceholder":"your-api-key","modelPlaceholder":"provider/model-id","configurationSaved":"Configuration saved successfully.","failedToSave":"Failed to save configuration.","noApiKeysCreateOne":"No API keys - Create one in Keys page","defaultOmnirouteKey":"sk_omniroute (default)","selectModel":"Select Model","selectModelForAlias":"Select model for {alias}","selectModelForTool":"Select Model for {tool}","select":"Select","clear":"Clear","comingSoon":"Coming soon","checkingRuntime":"Checking runtime status...","guideOnlyIntegration":"Guide-only integration (no local runtime required)","cliRuntimeDetected":"CLI runtime detected and ready","cliFoundNotRunnable":"CLI found but not runnable{reason}","cliRuntimeNotDetected":"CLI runtime not detected","binary":"Binary","configPath":"Config path","configPathShort":"Config","failedCheckRuntimeStatus":"Failed to check runtime status.","copy":"Copy","copied":"Copied","copyConfig":"Copy Config","saveConfig":"Save Config","selectionSaved":"Selection saved","guide":"Guide","detected":"Detected","notReady":"Not ready","active":"Active","inactive":"Inactive","startMitm":"Start MITM","stopMitm":"Stop MITM","mitmStarted":"MITM started successfully!","mitmStopped":"MITM stopped successfully!","failedStart":"Failed to start MITM","failedStop":"Failed to stop MITM","saveMappings":"Save Mappings","mappingsSaved":"Mappings saved!","failedSaveMappings":"Failed to save mappings","howItWorks":"How it works:","antigravityHowWorksDesc":"Antigravity sends requests to Google\'s endpoint. MITM intercepts and redirects them to OmniRoute.","antigravityStep1":"1. Start MITM to route requests through OmniRoute.","antigravityStep2Prefix":"2. Add","antigravityStep2Suffix":"to your hosts file as 127.0.0.1.","antigravityStep3":"3. Open Antigravity and requests will be proxied.","sudoPasswordRequiredTitle":"Sudo Password Required","sudoPasswordHint":"Administrator password is required to modify hosts file and system proxy settings.","enterSudoPassword":"Enter sudo password","sudoPasswordRequiredError":"Sudo password is required.","cancel":"Cancel","confirm":"Confirm","settingsApplied":"Settings applied successfully!","failedApplySettings":"Failed to apply settings","settingsReset":"Settings reset successfully!","failedResetSettings":"Failed to reset settings","backupRestored":"Backup restored!","failedRestore":"Failed to restore","checkingCli":"Checking {tool} CLI...","cliNotRunnable":"{tool} CLI installed but not runnable","cliNotInstalled":"{tool} CLI not installed","cliNotDetected":"{tool} CLI not detected","cliDetectedReady":"{tool} CLI detected and ready","cliFoundFailedHealthcheck":"{tool} CLI was found but failed runtime healthcheck{reason}.","installCliPrompt":"Please install {tool} CLI to use this feature.","installCodexPrompt":"Please install Codex CLI to use auto-apply feature.","hide":"Hide","howToInstall":"How to Install","installationGuide":"Installation Guide","platforms":"macOS / Linux / Windows:","afterInstallationRun":"After installation, run","toVerify":"to verify.","current":"Current","baseUrlPlaceholder":"https://.../v1","resetToDefault":"Reset to default","providerModelPlaceholder":"provider/model-id","apply":"Apply","reset":"Reset","manualConfig":"Manual Config","backups":"Backups","configBackups":"Config Backups","noBackupsYet":"No backups yet. Backups are created automatically before each Apply or Reset.","restore":"Restore","backupRestoredReloading":"Backup restored! Reloading status...","failedRestoreBackup":"Failed to restore backup","applied":"Applied!","failed":"Failed","resetDone":"Reset!","omnirouteConfiguredOpenAiCompatible":"OmniRoute is configured as OpenAI-compatible provider","provider":"Provider","model":"Model","providers":"Providers","auth":"Auth","noApiKeysAvailable":"No API keys available","usingDefaultOmniroute":"Using default: sk_omniroute","updateConfig":"Update Config","applyConfig":"Apply Config","noBackupsAvailable":"No backups available.","profileSaved":"Profile \\"{name}\\" saved!","failedSaveProfile":"Failed to save profile","profileActivated":"Profile activated!","failedActivateProfile":"Failed to activate profile","profiles":"Profiles","savedProfiles":"Saved Profiles","noProfilesYet":"No profiles saved yet. Save current config as a profile below.","activate":"Activate","deleteProfile":"Delete profile","profileNamePlaceholder":"Profile name (e.g. Personal Account)","saveCurrent":"Save Current","codexAuthNotePrefix":"Codex uses","codexAuthNoteMiddle":"with","codexAuthNoteSuffix":"Click \\"Apply\\" to auto-configure.","claudeManualConfiguration":"Claude CLI - Manual Configuration","codexManualConfiguration":"Codex CLI - Manual Configuration","droidManualConfiguration":"Factory Droid - Manual Configuration","openClawManualConfiguration":"Open Claw - Manual Configuration","clineManualConfiguration":"Cline Manual Configuration","kiloManualConfiguration":"Kilo Code Manual Configuration","toolDescriptions":{"antigravity":"Google Antigravity IDE with MITM","claude":"Anthropic Claude Code CLI","codex":"OpenAI Codex CLI","droid":"Factory Droid AI Assistant","openclaw":"Open Claw AI Assistant","cline":"Cline AI Coding Assistant CLI","kilo":"Kilo Code AI Assistant CLI","cursor":"Cursor AI Code Editor","continue":"Continue AI Assistant"},"guides":{"cursor":{"notes":{"0":"Requires Cursor Pro account to use this feature.","1":"Cursor routes requests through its own server, so local endpoint is not supported. Please enable Cloud Endpoint in Settings."},"steps":{"1":{"title":"Open Settings","desc":"Go to Settings -> Models"},"2":{"title":"Enable OpenAI API","desc":"Enable \\"OpenAI API key\\" option"},"3":{"title":"Base URL"},"4":{"title":"API Key"},"5":{"title":"Add Custom Model","desc":"Click \\"View All Model\\" -> \\"Add Custom Model\\""},"6":{"title":"Select Model"}}},"continue":{"steps":{"1":{"title":"Open Config","desc":"Open Continue configuration file"},"2":{"title":"API Key"},"3":{"title":"Select Model"},"4":{"title":"Add Model Config","desc":"Add the following configuration to your models array:"}}}}},"combos":{"title":"Combos","description":"Create model combos with weighted routing and fallback support","createCombo":"Create Combo","editCombo":"Edit Combo","deleteCombo":"Delete Combo","noModels":"No models","noModelsYet":"No models added yet","addModel":"Add Model","addModelToCombo":"Add Model to Combo","routingStrategy":"Routing Strategy","maxRetries":"Max Retries","timeout":"Timeout (ms)","healthcheck":"Healthcheck","priority":"Priority","fallback":"Fallback","roundRobin":"Round Robin","random":"Random","leastLatency":"Least Latency","comboName":"Combo Name","comboNamePlaceholder":"my-combo","deleteConfirm":"Delete this combo?","noCombosYet":"No combos yet","comboCreated":"Combo created successfully","comboUpdated":"Combo updated successfully","comboDeleted":"Combo deleted","failedCreate":"Failed to create combo","failedUpdate":"Failed to update combo","errorCreating":"Error creating combo","errorUpdating":"Error updating combo","errorDeleting":"Error deleting combo","testFailed":"Test request failed","failedToggle":"Failed to toggle combo","testResults":"Test Results — {name}","resolvedBy":"Resolved by:","more":"+{count} more","reqs":"reqs","success":"success","proxyConfigured":"Proxy configured","copyComboName":"Copy combo name","enableCombo":"Enable combo","disableCombo":"Disable combo","testCombo":"Test combo","duplicate":"Duplicate","proxyConfig":"Proxy configuration","nameRequired":"Name is required","nameInvalid":"Only letters, numbers, -, _, / and . allowed","nameHint":"Letters, numbers, -, _, / and . allowed","priorityDesc":"Sequential fallback: tries model 1 first, then 2, etc.","weightedDesc":"Distributes traffic by weight percentage with fallback","roundRobinDesc":"Circular distribution: each request goes to the next model in rotation","randomDesc":"Uniform random selection, then fallback to remaining models","leastUsedDesc":"Picks the model with fewest requests, balancing load over time","costOptimizedDesc":"Routes to the cheapest model first based on pricing","models":"Models","autoBalance":"Auto-balance","advancedSettings":"Advanced Settings","retryDelay":"Retry Delay (ms)","concurrencyPerModel":"Concurrency / Model","queueTimeout":"Queue Timeout (ms)","advancedHint":"Leave empty to use global defaults. These override per-provider settings.","moveUp":"Move up","moveDown":"Move down","removeModel":"Remove","saving":"Saving...","weighted":"Weighted","leastUsed":"Least-Used","costOpt":"Cost-Opt"},"costs":{"title":"Costs","budget":"Budget","totalCost":"Total Cost","breakdown":"Cost Breakdown","noData":"No cost data","byModel":"By Model","byProvider":"By Provider"},"endpoint":{"title":"API Endpoint","available":"Available Endpoints","cloudProxy":"Cloud Proxy","disableConfirm":"Are you sure you want to disable cloud proxy?","baseUrl":"Base URL","apiKeyLabel":"API Key","registeredKeys":"Registered Keys","chatCompletions":"Chat Completions","responses":"Responses","listModels":"List Models","usingCloudProxy":"Using Cloud Proxy","usingLocalServer":"Using Local Server","machineId":"Machine ID: {id}...","disableCloud":"Disable Cloud","enableCloud":"Enable Cloud","modelsAcrossEndpoints":"{models} models across {endpoints} endpoints","chatDesc":"Streaming & non-streaming chat with all providers","embeddings":"Embeddings","embeddingsDesc":"Text embeddings for search & RAG pipelines","imageGeneration":"Image Generation","imageDesc":"Generate images from text prompts","rerank":"Rerank","rerankDesc":"Rerank documents by relevance to a query","audioTranscription":"Audio Transcription","audioTranscriptionDesc":"Transcribe audio files to text (Whisper)","textToSpeech":"Text to Speech","textToSpeechDesc":"Convert text to natural-sounding speech","moderations":"Moderations","moderationsDesc":"Content moderation and safety classification","responsesDesc":"OpenAI Responses API for Codex and advanced agentic workflows","listModelsDesc":"List all available models across all connected providers","settingsApiDesc":"Read and modify OmniRoute configuration via API","settingsApi":"Settings API","categoryCore":"Core APIs","categoryMedia":"Media & Multi-Modal","categoryUtility":"Utility & Management","enableCloudTitle":"Enable Cloud Proxy","whatYouGet":"What you will get","cloudBenefitAccess":"Access your API from anywhere in the world","cloudBenefitShare":"Share endpoint with your team easily","cloudBenefitPorts":"No need to open ports or configure firewall","cloudBenefitEdge":"Fast global edge network","cloudSessionNote":"Cloud will keep your auth session for 1 day. If not used, it will be automatically deleted.","cloudUnstableNote":"Cloud is currently unstable with Claude Code OAuth in some cases.","cloudConnected":"Cloud Proxy connected!","connectingToCloud":"Connecting to cloud...","verifyingConnection":"Verifying connection...","connecting":"Connecting...","verifying":"Verifying...","connected":"Connected!","disableCloudTitle":"Disable Cloud Proxy","disableWarning":"All auth sessions will be deleted from cloud.","syncingData":"Syncing latest data...","disablingCloud":"Disabling cloud...","syncing":"Syncing...","disabling":"Disabling...","cloudConnectedVerified":"Cloud Proxy connected and verified!","connectedVerificationPending":"Connected — verification pending","connectedVerificationPendingWithError":"Connected — verification pending: {error}","cloudDisabledSuccess":"Cloud disabled successfully","syncedSuccess":"Synced successfully","failedDisable":"Failed to disable cloud","failedEnable":"Failed to enable cloud","cloudRequestTimeout":"Cloud request timeout","cloudRequestFailed":"Cloud request failed","cloudWorkerUnreachable":"Could not reach cloud worker. Make sure the cloud service is running (npm run dev in /cloud).","connectionFailed":"Connection failed","syncFailed":"Failed to sync cloud data","providerModelsTitle":"{provider} — Models","noModelsForProvider":"No models available for this provider.","chat":"Chat","embedding":"Embedding","image":"Image","custom":"custom","modelsCount":"{count, plural, one {# model} other {# models}}"},"health":{"title":"System Health","description":"Real-time monitoring of your OmniRoute instance","healthy":"Healthy","degraded":"Degraded","down":"Down","uptime":"Uptime","memory":"Memory","memoryRss":"Memory (RSS)","heap":"Heap","cpu":"CPU","database":"Database","version":"Version","lastCheck":"Last Check","providerHealth":"Provider Health","systemMetrics":"System Metrics","tokenHealth":"Token Health","refreshAll":"Refresh All","checkNow":"Check Now","loadingHealth":"Loading health data...","failedToLoad":"Failed to load health data: {error}","retry":"Retry","allOperational":"All systems operational","issuesDetected":"System issues detected","updatedAt":"Updated {time}","latency":"Latency","latencyP50":"p50","latencyP95":"p95","latencyP99":"p99","millisecondsShort":"{value}ms","notAvailable":"—","totalRequests":"Total requests","noDataYet":"No data yet","promptCache":"Prompt Cache","entries":"Entries","hitRate":"Hit Rate","hitsMisses":"Hits / Misses","signatureCache":"Signature Cache","signatureDefaults":"Defaults","signatureTool":"Tool","signatureFamily":"Family","signatureSession":"Session","recovering":"Recovering","noCBData":"No circuit breaker data available. Make some requests first.","providerHealthStatusAria":"Provider health status","issuesLabel":"Issues Detected","operational":"Operational","providers":"Providers","healthyCount":"{count} healthy","nodeVersion":"Node {version}","failures":"{count} failure","failuresPlural":"{count} failures","lastFailure":"Last","rateLimitStatus":"Rate Limit Status","activeLimiters":"{count} active limiter","activeLimitersPlural":"{count} active limiters","queued":"Queued","queuedCount":"{count} queued","running":"running","runningCount":"{count} running","ok":"OK","activeLockouts":"Active Lockouts","resetConfirm":"Reset all circuit breakers to healthy state? This will clear all failure counts and restore all providers to operational status.","resetAllTitle":"Reset all circuit breakers to healthy state","resetting":"Resetting...","resetAll":"Reset All","until":"Until {time}"},"limits":{"title":"Limits & Quotas","rateLimit":"Rate Limit","remaining":"Remaining","requestsPerMinute":"Requests/min","tokensPerMinute":"Tokens/min","dailyLimit":"Daily Limit"},"logs":{"title":"Logs","requestLogs":"Request Logs","proxyLogs":"Proxy Logs","auditLog":"Audit Log","console":"Console","auditLogDesc":"Administrative actions and security events","loading":"Loading...","refresh":"Refresh","filterByAction":"Filter by action...","filterByActor":"Filter by actor...","filterEntriesAria":"Filter audit log entries","filterByActionTypeAria":"Filter by action type","filterByActorAria":"Filter by actor","refreshAuditLogAria":"Refresh audit log","tableAria":"Audit log entries","failedFetchAuditLog":"Failed to fetch audit log","showing":"Showing {count} entries (offset {offset})","search":"Search","timestamp":"Timestamp","action":"Action","actor":"Actor","target":"Target","details":"Details","ipAddress":"IP Address","notAvailable":"—","noEntries":"No audit log entries found","previous":"Previous","next":"Next"},"onboarding":{"welcome":"Welcome","security":"Security","test":"Test","ready":"Ready!","setPassword":"Set Password","addProvider":"Add your first provider","getStarted":"Get Started","skip":"Skip","skipWizard":"Skip wizard entirely","skipPassword":"Skip password setup","skipAndContinue":"Skip & Continue","passwordLabel":"Password","confirmPassword":"Confirm Password","enterPassword":"Enter password","confirmPasswordPlaceholder":"Confirm password","passwordsMismatch":"Passwords do not match","setupComplete":"Setup Complete!","goToDashboard":"Go to Dashboard →","welcomeDesc":"OmniRoute is your local AI API proxy. It routes requests to multiple AI providers with load balancing, failover, and usage tracking.","multiProvider":"Multi-Provider","usageTracking":"Usage Tracking","apiKeyMgmt":"API Key Mgmt","securityDesc":"Set a password to protect your dashboard, or skip for now.","providerDesc":"Connect your first AI provider. You can add more later.","apiKeyRequired":"API Key (required)","customUrlOptional":"Custom URL (optional)","testDesc":"Let\'s verify your provider connection works.","runTest":"Run Connection Test","testingConnection":"Testing connection...","connectionSuccessful":"Connection successful! Your provider is ready.","noProviderFound":"No provider found. You can add one from the dashboard later.","testFailed":"Test failed, but you can configure this later.","couldNotTest":"Could not test right now. You can test from the dashboard.","doneDesc":"You\'re all set! Your OmniRoute instance is configured and ready to proxy AI requests.","yourEndpoint":"Your endpoint:","continue":"Continue","retry":"Retry","failedSetPassword":"Failed to set password. Try again.","failedAddProvider":"Failed to add provider. Try again.","connectionError":"Connection error. Please try again.","provider":"Provider"},"providers":{"title":"Providers","addProvider":"Add Provider","editProvider":"Edit Provider","deleteProvider":"Delete Provider","noProviders":"No providers configured","modelAvailability":"Model Availability","accounts":"Accounts","newAccount":"New Account","deleteConfirm":"Are you sure you want to delete this provider?","testing":"Testing...","testConnection":"Test Connection","testSuccess":"Connection successful","testFailed":"Connection failed","available":"Available","cooldown":"Cooldown","unavailable":"Unavailable","unknown":"Unknown","oauthLabel":"OAuth","compatibleLabel":"Compatible","chat":"Chat","responses":"Responses","messages":"Messages","oauthProviders":"OAuth Providers","freeProviders":"Free Providers","apiKeyProviders":"API Key Providers","compatibleProviders":"API Key Compatible Providers","testAll":"Test All","testAllOAuth":"Test all OAuth connections","testAllFree":"Test all Free connections","testAllApiKey":"Test all API Key connections","testAllCompatible":"Test all Compatible connections","connected":"{count} Connected","errorCount":"{count} Error ({code})","errorCountNoCode":"{count} Error","noConnections":"No connections","disabled":"Disabled","enableProvider":"Enable provider","disableProvider":"Disable provider","testResults":"Test Results","noCompatibleYet":"No compatible providers added yet","compatibleHint":"Use the buttons above to add OpenAI or Anthropic compatible endpoints","addOpenAICompatible":"Add OpenAI Compatible","addAnthropicCompatible":"Add Anthropic Compatible","addNewProvider":"Add New Provider","backToProviders":"Back to Providers","configureNewProvider":"Configure a new AI provider to use with your applications.","providerLabel":"Provider","selectProvider":"Select a provider","selectedProvider":"Selected provider","authMethod":"Authentication Method","apiKeyLabel":"API Key","apiKeyRequired":"API Key is required","selectProviderRequired":"Please select a provider","enterApiKey":"Enter your API key","apiKeySecure":"Your API key will be encrypted and stored securely.","oauth2Connect":"Connect with OAuth2","oauth2Label":"OAuth2","oauth2Desc":"Connect your account using OAuth2 authentication.","displayName":"Display Name","displayNamePlaceholder":"e.g., Production API, Dev Environment","displayNameHint":"Optional. A friendly name to identify this configuration.","active":"Active","activeDescription":"Enable this provider for use in your applications","cancel":"Cancel","createProvider":"Create Provider","failedCreate":"Failed to create provider","errorOccurred":"An error occurred. Please try again.","modelStatus":"Model Status","allModelsOperational":"All models operational","modelsWithIssues":"{count} model(s) with issues","allModelsNormal":"All models are responding normally.","cooldownCleared":"Cooldown cleared for {model}","failedClearCooldown":"Failed to clear cooldown","loadingAvailability":"Loading model availability...","clearCooldown":"Clear","clearing":"Clearing...","until":"Until {time}","providerTestFailed":"Provider test failed","modeTest":"{mode} Test","passedCount":"{count} passed","failedCount":"{count} failed","testedCount":"{count} tested","millisecondsAbbr":"{value}ms","okShort":"OK","errorShort":"ERROR","noActiveConnectionsInGroup":"No active connections found for this group.","allTestsPassed":"All {total} tests passed","testSummary":"{passed}/{total} passed, {failed} failed","nameLabel":"Name","prefixLabel":"Prefix","baseUrlLabel":"Base URL","apiTypeLabel":"API Type","prefixHint":"Required. Unique prefix for model names.","nameHint":"Required. A friendly label for this node.","baseUrlHint":"Required. Provider API base URL.","anthropicPrefixPlaceholder":"ac-prod","openaiPrefixPlaceholder":"oc-prod","anthropicBaseUrlPlaceholder":"https://api.anthropic.com/v1","openaiBaseUrlPlaceholder":"https://api.openai.com/v1","validateConnection":"Validate Connection","validating":"Validating...","connectionValid":"Connection is valid!","connectionFailed":"Connection failed. Check URL and key.","testKeyLabel":"Test API Key","testKeyPlaceholder":"sk-... (for validation only)","providerNotFound":"Provider not found","deleteConnectionConfirm":"Delete this connection?","failedSetAlias":"Failed to set alias","failedSaveConnection":"Failed to save connection","failedSaveConnectionRetry":"Failed to save connection. Please try again.","failedRetestConnection":"Failed to retest connection","deleteCompatibleNodeConfirm":"Delete this {type} Compatible node?","anthropicCompatibleDetails":"Anthropic Compatible Details","openaiCompatibleDetails":"OpenAI Compatible Details","messagesApi":"Messages API","responsesApi":"Responses API","chatCompletions":"Chat Completions","importingModels":"Importing...","importFromModels":"Import from /models","addConnectionToImport":"Add a connection to enable importing.","noModelsConfigured":"No models configured","connectionCount":"{count} connection(s)","fetchingModels":"Fetching available models...","failedFetchModels":"Failed to fetch models","noModelsFound":"No models found","importFailed":"Import failed","noNewModelsAdded":"No new models were added.","adding":"Adding...","importingModelsTitle":"Importing Models","copyModel":"Copy model","removeModel":"Remove model","rateLimitProtected":"Protected","rateLimitUnprotected":"Unprotected","enableRateLimitProtection":"Click to enable rate limit protection","disableRateLimitProtection":"Click to disable rate limit protection","productionKey":"Production Key","enterNewApiKey":"Enter new API key","optional":"Optional","anthropicCompatibleName":"Anthropic Compatible","openaiCompatibleName":"OpenAI Compatible","failedImportModels":"Failed to import models","noModelsReturnedFromEndpoint":"No models returned from /models endpoint.","importingModelsProgress":"Importing {current} of {total} models...","foundModelsStartingImport":"Found {count} models. Starting import...","importingModelById":"Importing {modelId}...","importSuccessCount":"Successfully imported {count, plural, one {# model} other {# models}}!","noNewModelsAddedExisting":"No new models were added (all already exist).","importDoneCount":"✓ Done! {count, plural, one {# model imported.} other {# models imported.}}","unexpectedErrorOccurred":"An unexpected error occurred","connectionCountLabel":"{count, plural, one {# connection} other {# connections}}","messagesPath":"messages","responsesPath":"responses","chatCompletionsPath":"chat/completions","add":"Add","edit":"Edit","delete":"Delete","anthropic":"Anthropic","openai":"OpenAI","singleConnectionPerCompatible":"Only one connection is allowed per compatible node. Add another node if you need more connections.","connections":"Connections","providerProxyTitleConfigured":"Provider proxy: {host}","configured":"configured","providerProxyConfigureHint":"Configure proxy for all connections of this provider","providerProxy":"Provider Proxy","noConnectionsYet":"No connections yet","addFirstConnectionHint":"Add your first connection to get started","addConnection":"Add Connection","availableModels":"Available Models","pageAutoRefresh":"Page will refresh automatically...","statusDisabled":"disabled","statusConnected":"connected","statusRuntimeIssue":"runtime issue","statusAuthFailed":"auth failed","statusRateLimited":"rate limited","statusNetworkIssue":"network issue","statusTestUnsupported":"test unsupported","statusUnavailable":"unavailable","statusFailed":"failed","statusError":"error","oauthAccount":"OAuth Account","errorTypeRuntime":"Local runtime","errorTypeUpstreamAuth":"Upstream auth","errorTypeMissingCredential":"Missing credential","errorTypeRefreshFailed":"Refresh failed","errorTypeTokenExpired":"Token expired","errorTypeRateLimited":"Rate limited","errorTypeUpstreamUnavailable":"Upstream unavailable","errorTypeNetworkError":"Network error","errorTypeTestUnsupported":"Test unsupported","errorTypeUpstreamError":"Upstream error","proxySourceGlobal":"Global","proxySourceProvider":"Provider","proxySourceKey":"Key","proxyConfiguredBySource":"Proxy ({source}): {host}","autoPriority":"Auto: {priority}","proxy":"Proxy","retestAuthentication":"Retest authentication","retest":"Retest","disableConnection":"Disable connection","enableConnection":"Enable connection","reauthenticateConnection":"Re-authenticate this connection","proxyConfig":"Proxy config","aliasExistsAlert":"Alias \\"{alias}\\" already exists. Please use a different model or edit existing alias.","openRouterAnyModelHint":"OpenRouter supports any model. Add models and create aliases for quick access.","modelIdFromOpenRouter":"Model ID (from OpenRouter)","openRouterModelPlaceholder":"anthropic/claude-3-opus","customModels":"Custom Models","customModelsHint":"Add model IDs not in the default list. These will be available for routing.","modelId":"Model ID","customModelPlaceholder":"e.g. gpt-4.5-turbo","loading":"Loading...","removeCustomModel":"Remove custom model","noCustomModels":"No custom models added yet.","allSuggestedAliasesExist":"All suggested aliases already exist. Please choose a different model or remove conflicting aliases.","failedSaveCustomModel":"Failed to save custom model","modelAddedSuccess":"Model {modelId} added successfully","failedAddModelTryAgain":"Failed to add model. Please try again.","failedSaveImportedModel":"Failed to save imported model to custom database","failedImportModelsTryAgain":"Failed to import models. Please try again.","failedRemoveModelFromDatabase":"Failed to remove model from database","modelRemovedSuccess":"Model removed successfully","failedDeleteModelTryAgain":"Failed to delete model. Please try again.","compatibleModelsDescription":"Add {type}-compatible models manually or import them from the /models endpoint.","anthropicCompatibleModelPlaceholder":"claude-3-opus-20240229","openaiCompatibleModelPlaceholder":"gpt-4o","apiKeyValidationFailed":"API key validation failed. Please check your key and try again.","addProviderApiKeyTitle":"Add {provider} API Key","checking":"Checking...","check":"Check","valid":"Valid","invalid":"Invalid","creating":"Creating...","validationChecksAnthropicCompatible":"Validation checks {provider} by verifying the API key.","validationChecksOpenAiCompatible":"Validation checks {provider} via /models on your base URL.","priorityLabel":"Priority","saving":"Saving...","save":"Save","editConnection":"Edit Connection","accountName":"Account name","email":"Email","healthCheckMinutes":"Health Check (min)","healthCheckHint":"Proactive token refresh interval. 0 = disabled.","failedTestConnection":"Failed to test connection","failed":"Failed","leaveBlankKeepCurrentApiKey":"Leave blank to keep the current API key.","editCompatibleTitle":"Edit {type} Compatible","compatibleBaseUrlHint":"Use the base URL (ending in /v1) for your {type}-compatible API.","apiKeyForCheck":"API Key (for Check)","compatibleProdPlaceholder":"{type} Compatible (Prod)"},"settings":{"title":"Settings","general":"General","security":"Security","appearance":"Appearance","routing":"Routing","cache":"Cache","resilience":"Resilience","systemPrompt":"System Prompt","thinkingBudget":"Thinking Budget","proxy":"Proxy","pricing":"Pricing","storage":"Storage","policies":"Policies","ipFilter":"IP Filter","comboDefaults":"Combo Defaults","fallbackChains":"Fallback Chains","changePassword":"Change Password","enablePassword":"Enable Password","darkMode":"Dark Mode","lightMode":"Light Mode","systemTheme":"System Theme","enableCache":"Enable Cache","cacheTTL":"Cache TTL","maxCacheSize":"Max Cache Size","clearCache":"Clear Cache","cacheHits":"Cache Hits","cacheMisses":"Cache Misses","hitRate":"Hit Rate","cacheEntries":"Cache Entries","circuitBreaker":"Circuit Breaker","retryPolicy":"Retry Policy","maxRetries":"Max Retries","retryDelay":"Retry Delay","timeoutMs":"Timeout (ms)","enableSystemPrompt":"Enable System Prompt","systemPromptText":"System Prompt Text","enableThinking":"Enable Thinking","maxThinkingTokens":"Max Thinking Tokens","enableProxy":"Enable Proxy","proxyUrl":"Proxy URL","pricingRates":"Pricing Rates Format","currentPricing":"Current Pricing Overview","loadingPricing":"Loading pricing data...","noPricing":"No pricing data available","input":"Input","output":"Output","cached":"Cached","reasoning":"Reasoning","cacheCreation":"Cache Creation","customPricing":"Custom Pricing","databaseSize":"Database Size","backupDb":"Backup Database","restoreDb":"Restore Database","exportData":"Export Data","importData":"Import Data","clearData":"Clear All Data","clearDataConfirm":"This will permanently delete all data. Are you sure?","enableRequestLogs":"Enable Request Logs","logRetention":"Log Retention","ipWhitelist":"IP Whitelist","ipBlacklist":"IP Blacklist","addIP":"Add IP","savedSuccessfully":"Settings saved successfully","ai":"AI","advanced":"Advanced","localMode":"Local Mode — All data stored on your machine","settingsSectionsAria":"Settings sections","switchThemes":"Switch between light and dark themes","themeSelectionAria":"Theme selection","themeLight":"Light","themeDark":"Dark","themeSystem":"System","hideHealthLogs":"Hide Health Check Logs","hideHealthLogsDesc":"When ON, suppress [HealthCheck] messages in server console","promptCache":"Prompt Cache","flushCache":"Flush Cache","flushing":"Flushing…","size":"Size","hits":"Hits","evictions":"Evictions","loadingCacheStats":"Loading cache stats…","globalProxy":"Global Proxy","globalProxyDesc":"Configure a global outbound proxy for all API calls. Individual providers, combos, and keys can override this.","noGlobalProxy":"No global proxy configured","globalLabel":"Global","configure":"Configure","globalSystemPrompt":"Global System Prompt","systemPromptDesc":"Injected into all requests at proxy level","saved":"Saved","systemPromptPlaceholder":"Enter system prompt to inject into all requests...","systemPromptHint":"This prompt is prepended to the system message of every request. Use for global instructions, safety guidelines, or response formatting rules.","chars":"{count} chars","thinkingBudgetTitle":"Thinking Budget","thinkingBudgetDesc":"Control AI reasoning token usage across all requests","passthrough":"Passthrough","passthroughDesc":"No changes — client controls thinking budget","auto":"Auto","autoDesc":"Strip all thinking config — let provider decide","custom":"Custom","customDesc":"Set a fixed token budget for all requests","adaptive":"Adaptive","adaptiveDesc":"Scale budget based on request complexity","effortNone":"None (0 tokens)","effortLow":"Low (1K tokens)","effortMedium":"Medium (10K tokens)","effortHigh":"High (128K tokens)","tokenBudget":"Token Budget","tokens":"tokens","baseEffortLevel":"Base Effort Level","adaptiveHint":"Adaptive mode scales from this base level based on message count, tool usage, and prompt length.","requireLogin":"Require login","requireLoginDesc":"When ON, dashboard requires password. When OFF, access without login.","currentPassword":"Current Password","enterCurrentPassword":"Enter current password","newPassword":"New Password","enterNewPassword":"Enter new password","confirmPassword":"Confirm New Password","confirmPasswordPlaceholder":"Confirm new password","passwordsNoMatch":"Passwords do not match","passwordUpdated":"Password updated successfully","failedUpdatePassword":"Failed to update password","errorOccurred":"An error occurred","updatePassword":"Update Password","setPassword":"Set Password","apiEndpointProtection":"API Endpoint Protection","requireAuthModels":"Require API key for /models","requireAuthModelsDesc":"When ON, the /v1/models endpoint returns 404 for unauthenticated requests. Prevents model discovery by unauthorized users.","blockedProviders":"Blocked Providers","blockedProvidersDesc":"Hide specific providers from the /v1/models response. Blocked providers will not appear in model listings.","providersBlocked":"{count} provider(s) blocked from /models","blockProviderTitle":"Block {provider}","unblockProviderTitle":"Unblock {provider}","routingStrategy":"Routing Strategy","fillFirst":"Fill First","fillFirstDesc":"Use accounts in priority order","roundRobin":"Round Robin","roundRobinDesc":"Cycle through all accounts","p2c":"P2C","p2cDesc":"Pick 2 random, use the healthier one","random":"Random","randomDesc":"Random account each request","leastUsed":"Least Used","leastUsedDesc":"Pick least recently used account","costOpt":"Cost Opt","costOptDesc":"Prefer cheapest available account","stickyLimit":"Sticky Limit","stickyLimitDesc":"Calls per account before switching","modelAliases":"Model Aliases","modelAliasesTitle":"Model Aliases","modelAliasesDesc":"Wildcard patterns to remap model names • Use * and ?","addCustomAlias":"Add Custom Alias","deprecatedModelId":"Deprecated model ID","newModelId":"New model ID","customAliases":"Custom Aliases","builtInAliases":"Built-in Aliases","backgroundDegradationTitle":"Background Task Degradation","backgroundDegradationDesc":"Auto-detect background tasks (titles, summaries) and route to cheaper models","enableDegradation":"Enable Background Degradation","enableDegradationHint":"When enabled, background tasks like title generation and summarization are routed to cheaper models automatically","tasksDetected":"Tasks detected","degradationMap":"Model Degradation Map","premiumModel":"Premium model","cheapModel":"Cheap model","detectionPatterns":"Detection Patterns","newPattern":"e.g. \\"generate a title\\"","aliasPatternPlaceholder":"claude-sonnet-*","aliasTargetPlaceholder":"claude-sonnet-4-20250514","pattern":"Pattern","targetModel":"Target Model","add":"+ Add","session":"Session","sessionDetailsAria":"Session details","status":"Status","authenticated":"Authenticated","guest":"Guest","loginTime":"Login Time","sessionAge":"Session Age","browser":"Browser","clearLocalData":"Clear Local Data","logout":"Logout","clearLocalDataConfirm":"Clear all local data? This will reset your preferences.","unknown":"Unknown","systemActor":"system","ipAccessControl":"IP Access Control","ipAccessControlDesc":"Block or allow specific IP addresses","ipModeDisabled":"Disabled","ipModeBlacklist":"Blacklist","ipModeWhitelist":"Whitelist","ipModeWhitelistPriority":"WL Priority","addIpAddress":"Add IP Address","ipAddressPlaceholder":"192.168.1.0/24 or 10.0.*.*","block":"+ Block","allow":"+ Allow","blocked":"Blocked ({count})","allowed":"Allowed ({count})","temporaryBans":"Temporary Bans ({count})","minLeft":"{min}m left","auditLog":"Audit Log","searchAuditLogs":"Search audit logs...","failedLoadAuditLog":"Failed to load audit log","noAuditEvents":"No audit events found","action":"Action","actor":"Actor","details":"Details","time":"Time","fallbackChainsTitle":"Fallback Chains","fallbackChainsDesc":"Define provider fallback order per model","addChain":"+ Add Chain","modelName":"Model Name","modelNamePlaceholder":"claude-sonnet-4-20250514","providersCommaSeparated":"Providers (comma-separated, in priority order)","providersCommaSeparatedPlaceholder":"anthropic, openai, gemini","createChain":"Create Chain","noFallbackChains":"No Fallback Chains","noFallbackChainsDesc":"Create a chain to define provider fallback order for a model.","loadingFallbackChains":"Loading fallback chains...","deleteChainConfirm":"Delete fallback chain for \\"{model}\\"?","chainCreated":"Chain created for {model}","chainDeleted":"Chain deleted for {model}","failedCreateChain":"Failed to create chain","failedDeleteChain":"Failed to delete chain","deleteChain":"Delete chain","fillModelAndProviders":"Please fill model name and providers","addAtLeastOneProvider":"Add at least one provider","comboDefaultsTitle":"Combo Defaults","globalComboConfig":"Global combo configuration","defaultStrategy":"Default Strategy","defaultStrategyDesc":"Applied to new combos without explicit strategy","comboStrategyAria":"Combo strategy","priority":"Priority","weighted":"Weighted","maxRetriesLabel":"Max Retries","retryDelayLabel":"Retry Delay (ms)","timeoutLabel":"Timeout (ms)","healthCheck":"Health Check","healthCheckDesc":"Pre-check provider availability","trackMetrics":"Track Metrics","trackMetricsDesc":"Record per-combo request metrics","providerOverrides":"Provider Overrides","providerOverridesDesc":"Override timeout and retries per provider. Provider settings override global defaults.","providerMaxRetriesAria":"{provider} max retries","providerTimeoutAria":"{provider} timeout ms","removeProviderOverrideAria":"Remove {provider} override","newProviderNamePlaceholder":"e.g. google, openai...","newProviderNameAria":"New provider name","retries":"retries","ms":"ms","saveComboDefaults":"Save Combo Defaults","maxNestingDepth":"Max Nesting Depth","concurrencyPerModel":"Concurrency / Model","queueTimeout":"Queue Timeout (ms)","providerProfiles":"Provider Profiles","providerProfilesDesc":"Separate resilience settings for OAuth (session-based) and API Key (metered) providers. OAuth providers have stricter thresholds due to lower rate limits.","oauthProviders":"OAuth Providers","apiKeyProviders":"API Key Providers","transientCooldown":"Transient Cooldown","rateLimitCooldown":"Rate Limit Cooldown","maxBackoffLevel":"Max Backoff Level","cbThreshold":"CB Threshold","cbResetTime":"CB Reset Time","rateLimiting":"Rate Limiting","rateLimitingDesc":"API Key providers are automatically rate-limited with safe defaults. Limits are learned from response headers and adapt over time.","defaultSafetyNet":"Default Safety Net","rpm":"RPM","minGap":"Min Gap","maxConcurrent":"Max Concurrent","activeLimiters":"Active Limiters","noActiveLimiters":"No active rate limiters yet.","reservoir":"Reservoir","running":"Running","queued":"Queued","circuitBreakers":"Circuit Breakers","breakerStateClosed":"Closed","breakerStateOpen":"Open","breakerStateHalfOpen":"Half-Open","tripped":"{count} tripped","healthy":"{count} healthy","resetAll":"Reset All","noCircuitBreakers":"No circuit breakers active yet. They are created automatically when requests flow through the combo pipeline.","failures":"{count} failure(s)","policiesLocked":"Policies & Locked Identifiers","allOperational":"All systems operational — no lockouts or tripped breakers","loadingPolicies":"Loading policies...","lockedIdentifiers":"Locked Identifiers","unlockedIdentifier":"Unlocked: {identifier}","sinceDate":"since {date}","forceUnlock":"Force Unlock","unlocking":"Unlocking...","failedUnlock":"Failed to unlock","failedLoadWithStatus":"Failed to load: {status}","failedLoadResilience":"Failed to load resilience status","saveFailed":"Save failed","resetFailed":"Reset failed","loadingResilience":"Loading resilience status...","retry":"Retry","systemStorage":"System & Storage","allDataLocal":"All data stored locally on your machine","databasePath":"Database Path","exportDatabase":"Export Database","exportAll":"Export All (.tar.gz)","importDatabase":"Import Database","confirmDbImport":"Confirm Database Import","confirmDbImportDesc":"This will replace all current data with the content from {file}. A backup will be created automatically before the import.","yesImport":"Yes, Import","lastBackup":"Last Backup","noBackupYet":"No backup yet","backupNow":"Backup Now","backupRestore":"Backup & Restore","viewBackups":"View Backups","hide":"Hide","backupRetentionDesc":"Database snapshots are created automatically before restore and every 15 minutes when data changes. Retention: 24 hourly + 30 daily backups with smart rotation.","loadingBackups":"Loading backups...","noBackupsYet":"No backups available yet. Backups will be created automatically when data changes.","backupsAvailable":"{count} backup(s) available","refresh":"Refresh","confirm":"Confirm?","yes":"Yes","no":"No","restore":"Restore","invalidFileType":"Invalid file type. Only .sqlite files are accepted.","exportFailed":"Export failed","exportFailedWithError":"Export failed: {error}","fullExportFailedWithError":"Full export failed: {error}","backupCreated":"Backup created: {file}","restoreSuccess":"Restored! {connections} connections, {nodes} nodes, {combos} combos, {apiKeys} API keys.","importSuccess":"Database imported! {connections} connections, {nodes} nodes, {combos} combos, {apiKeys} API keys.","justNow":"just now","minutesAgo":"{count}m ago","hoursAgo":"{count}h ago","daysAgo":"{count}d ago","backupReasonManual":"manual","backupReasonPreRestore":"pre-restore","connectionsCount":"{count, plural, one {# connection} other {# connections}}","noChangesSinceBackup":"No changes since last backup","backupFailed":"Backup failed","restoreFailed":"Restore failed","importFailed":"Import failed","errorDuringRestore":"An error occurred during restore","errorDuringImport":"An error occurred during import","modelPricing":"Model Pricing","modelPricingDesc":"Configure cost rates per model • All rates in $/1M tokens","providers":"Providers","registry":"Registry","priced":"Priced","searchProvidersModels":"Search providers or models...","showAll":"Show All","noProvidersMatch":"No providers match your search.","howPricingWorks":"How Pricing Works","cacheWrite":"Cache Write","unsaved":"unsaved","resetDefaults":"Reset Defaults","saveProvider":"Save Provider","saving":"Saving...","model":"Model","models":"models","moreProviders":"{count} more providers","withPricing":"with pricing configured","policiesCircuitBreakers":"Policies & Circuit Breakers","activeIssuesDetected":"Active issues detected","off":"Off","resetPricingConfirm":"Reset all pricing for {provider} to defaults?","pricingDescInput":"Input: tokens sent to the model","pricingDescOutput":"Output: tokens generated","pricingDescCached":"Cached: reused input (~50% of input rate)","pricingDescReasoning":"Reasoning: thinking tokens (falls back to Output)","pricingDescCacheWrite":"Cache Write: creating cache entries (falls back to Input)","pricingDescFormula":"Cost = (input \xd7 input_rate) + (output \xd7 output_rate) + (cached \xd7 cached_rate) per million tokens.","pricingSettingsTitle":"Pricing Settings","totalModels":"Total Models","active":"Active","costCalculation":"Cost Calculation","costCalculationDesc":"Costs are calculated based on token usage and pricing rates configured for each model.","pricingFormat":"Pricing Format","pricingFormatDesc":"All rates are in $/1M tokens (dollars per million tokens).","tokenTypes":"Token Types","inputTokenDesc":"Standard prompt tokens","outputTokenDesc":"Completion/response tokens","cachedTokenDesc":"Cached input tokens (typically 50% of input rate)","reasoningTokenDesc":"Special reasoning/thinking tokens (fallback to output rate)","cacheCreationTokenDesc":"Tokens used to create cache entries (fallback to input rate)","customPricingNote":"You can override default pricing for specific models. Custom overrides take priority over auto-detected pricing.","editPricing":"Edit Pricing","viewFullDetails":"View Full Details"},"translator":{"title":"Translator","metaTitle":"Translator Playground | OmniRoute","metaDescription":"Debug, test, and visualize API format translations between providers","playgroundTitle":"Translator Playground","playground":"Playground","realtime":"Real-Time Translation Activity","chatTester":"Chat Tester","testBench":"Test Bench","liveMonitor":"Live Monitor","modeDescriptionPlayground":"Paste any API request body and see how OmniRoute translates it between provider formats (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)","modeDescriptionChatTester":"Send real chat requests through OmniRoute and inspect the full round-trip: input, translated request, provider response, and translated output.","modeDescriptionTestBench":"Run predefined scenarios and compare compatibility across providers and models.","modeDescriptionLiveMonitor":"Watch translation events in real time as requests flow through OmniRoute.","modeDescriptionFallback":"Debug, test, and visualize how OmniRoute translates API requests between providers.","recentTranslations":"Recent Translations","noTranslations":"No translations yet","source":"Source","target":"Target","time":"Time","model":"Model","status":"Status","latency":"Latency","totalTranslations":"Total Translations","successful":"Successful","errors":"Errors","avgLatency":"Avg Latency","millisecondsShort":"{value}ms","notAvailableSymbol":"—","liveAutoRefreshing":"Live — Auto-refreshing","paused":"Paused","eventsAppearHint":"Translation events appear here as requests flow through OmniRoute. Use any of these methods to generate events:","chatTesterTab":"Chat Tester tab","testBenchTab":"Test Bench tab","externalApiCalls":"External API calls","ideCliIntegrations":"IDE/CLI integrations","inMemoryNote":"Note: Events are stored in-memory and reset when the server restarts.","ok":"OK","errorShort":"ERR","formatConverter":"Format Converter","formatConverterDescription":"Paste or type a JSON request body. The translator will auto-detect the source format and convert it to the target format. Use this to debug how OmniRoute translates requests between formats (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).","input":"Input","output":"Output","auto":"Auto","swapFormats":"Swap formats","translateAction":"Translate","clear":"Clear","inputPlaceholder":"Paste a request body here or select a template below...","exampleTemplates":"Example Templates","exampleTemplatesHint":"— Click to load","templateLoadHint":"Template loads the request in {format} format. Change Source Format to load in a different format.","compatibilityTester":"Compatibility Tester","compatibilityReport":"Compatibility Report","testBenchDescription":"Run predefined scenarios (Simple Chat, Tool Calling, etc.) to verify translation and provider compatibility. Select a source format and target provider, then run all tests to see a compatibility percentage. Use this to find which features work across providers.","targetProvider":"Target Provider","runAllTests":"Run All Tests","runTest":"Run Test","reRun":"Re-run","running":"Running...","passed":"passed","failed":"failed","passedIconLabel":"✅ Passed","chunks":"chunks","scenarioSimpleChat":"Simple Chat","scenarioToolCalling":"Tool Calling","scenarioMultiTurn":"Multi-turn","scenarioThinking":"Thinking","scenarioSystemPrompt":"System Prompt","scenarioStreaming":"Streaming","templateNames":{"simple-chat":"Simple Chat","tool-calling":"Tool Calling","multi-turn":"Multi-turn","thinking":"Thinking","system-prompt":"System Prompt","streaming":"Streaming"},"templateDescriptions":{"simple-chat":"Basic text message","tool-calling":"Function/tool invocation","multi-turn":"Conversation with history","thinking":"Extended thinking / reasoning","system-prompt":"Complex system instructions","streaming":"SSE streaming request"},"templatePayloads":{"simpleChat":{"system":"You are a helpful assistant.","userGreeting":"Hello! How are you today?"},"toolCalling":{"userWeather":"What\'s the weather in S\xe3o Paulo?","toolDescription":"Get current weather for a location","cityNameDescription":"City name"},"multiTurn":{"system":"You are a coding assistant.","userInitial":"Write a function to sort an array in Python.","assistantExample":"Here\'s a simple sort function:\\n\\n```python\\ndef sort_array(arr):\\n return sorted(arr)\\n```","userFollowUp":"Now make it sort in descending order."},"thinking":{"question":"What is the sum of the first 100 prime numbers?"},"systemPrompt":{"systemInstruction":"You are a senior software engineer specializing in distributed systems. Answer questions concisely using industry best practices. Always provide code examples when relevant. Format your responses using markdown.","question":"How do I implement a circuit breaker pattern?"},"streaming":{"prompt":"Tell me a short story about a robot learning to paint."}},"openaiCompatibleLabel":"OpenAI Compatible","anthropicCompatibleLabel":"Anthropic Compatible","noTemplateForFormat":"No template for this format","translationFailed":"Translation failed: {error}","pipelineDebugger":"Pipeline Debugger","translationPipeline":"Translation Pipeline","pipelineVisualization":"Pipeline visualization","pipelineVisualizationHint":"Send a message to see how your request flows through detection → translation → provider call.","chatTesterDescription":"Send messages as a specific client format and inspect each step of the translation pipeline.","chatTesterFlow":"Client Request → Format Detection → OpenAI Intermediate → Provider Format → Response","clickStepToInspect":"Click any step to inspect the data at that stage.","clientFormat":"Client Format","provider":"Provider","modelPlaceholder":"Select or type a model name...","sendMessageToSeePipeline":"Send a message to see the translation pipeline","chatMessageHintPrefix":"Your message will be formatted as a","chatMessageHintSuffix":"request, translated through the pipeline, and sent to the selected provider.","youWithFormat":"You ({format})","assistant":"Assistant","typeMessage":"Type a message...","send":"Send","clientRequest":"Client Request","clientRequestDescription":"The request body as your client would send it","formatDetected":"Format Detected","formatDetectedDescription":"OmniRoute auto-detects the API format from the request structure","openaiIntermediate":"OpenAI Intermediate","openaiIntermediateDescription":"All formats are first normalized to OpenAI format (the universal bridge)","providerFormat":"Provider Format","providerFormatDescription":"OpenAI format is translated to the provider\'s native format","providerResponse":"Provider Response","providerResponseRawDescription":"The raw response from the provider API","providerResponseSseDescription":"The raw SSE stream from the provider API","unexpectedError":"An unexpected error occurred","error":"Error","errorMessage":"Error: {message}","requestFailed":"Request failed","noTextExtracted":"(No text extracted)","liveMonitorDescriptionPrefix":"Shows translation events as API calls flow through OmniRoute. Events come from the in-memory buffer (resets on restart). Use","liveMonitorDescriptionSuffix":", or external API calls to generate events."},"usage":{"title":"Usage","loggerTab":"Logger","proxyTab":"Proxy","budgetManagement":"Budget Management","budgetSaved":"Budget limits saved","budgetSaveFailed":"Failed to save budget","loadingBudgetData":"Loading budget data...","noApiKeysTitle":"No API Keys","noApiKeysDescription":"Add API keys first to set up budget limits.","apiKey":"API Key","todaysSpend":"Today\'s Spend","thisMonth":"This Month","setLimits":"Set Limits","dailyLimitUsd":"Daily Limit (USD)","monthlyLimitUsd":"Monthly Limit (USD)","warningThresholdPercent":"Warning Threshold (%)","dailyLimitPlaceholder":"e.g. 5.00","monthlyLimitPlaceholder":"e.g. 50.00","warningThresholdPlaceholder":"80","saveLimits":"Save Limits","budgetOk":"Budget OK — {remaining} remaining","budgetExceeded":"Budget exceeded — requests may be blocked","totalRequests":"Total requests","noDataYet":"No data yet","latency":"Latency","latencyP50":"p50","latencyP95":"p95","latencyP99":"p99","promptCache":"Prompt Cache","systemHealth":"System Health","entries":"Entries","activeCount":"{count} active","openCircuitBreakersDetected":"Open circuit breakers detected","hitRate":"Hit Rate","hitsMisses":"Hits / Misses","circuitBreakers":"Circuit Breakers","lockedIPs":"Locked IPs","lockoutsAutoRefreshHint":"Per-model rate limit locks • Auto-refresh 10s","lockedCount":"{count, plural, one {# locked} other {# locked}}","timeLeft":"{time} left","howItWorks":"How It Works","howItWorksSubtitle":"Learn how evaluations validate your LLM responses","define":"Define","defineStepDescription":"Create test cases with input prompts and expected output criteria using strategies like contains, regex, or exact match.","run":"Run","runStepDescription":"Execute test cases against your LLM endpoints through OmniRoute. Each case is sent as a real API request.","evaluate":"Evaluate","evaluateStepDescription":"Responses are compared against expected criteria. See pass/fail for each case with latency metrics and detailed feedback.","evalSuites":"Evaluation Suites","evalSuitesHint":"Click a suite to view test cases, then run to evaluate your LLM endpoints","evalsLoading":"Loading eval suites...","noEvalSuitesFound":"No Eval Suites Found","noEvalSuitesDescription":"Eval suites can be defined via the API or in code. They test model outputs against expected results using strategies like contains, regex, exact match, and custom functions.","columnCase":"Case","columnStatus":"Status","columnLatency":"Latency","columnDetails":"Details","columnModel":"Model","columnStrategy":"Strategy","columnExpected":"Expected","statsSuites":"Suites","statsTestCases":"Test Cases","statsModels":"Models","statsCoverage":"Coverage","statsStrategiesCount":"{count} strategies","evaluationStrategies":"Evaluation Strategies","modelsUnderTest":"Models Under Test","searchSuitesPlaceholder":"Search suites...","passSuffix":"pass","casesCount":"{count, plural, one {# case} other {# cases}}","runEval":"Run Eval","runningProgress":"Running {current}/{total}...","passRate":"pass rate","summaryBreakdown":"{passed} passed \xb7 {failed} failed \xb7 {total} total","passedIconLabel":"✅ Passed","failedIconLabel":"❌ Failed","detailsContains":"Contains: \\"{term}\\"","detailsRegex":"Regex: {pattern}","detailsExpected":"Expected: \\"{expected}\\"","noResultsYet":"No results yet","testCasesCount":"Test Cases ({count})","noTestCasesDefined":"No test cases defined","runEvalHint":"Click \\"Run Eval\\" to execute all cases against your LLM endpoint. Each test sends a real request through OmniRoute.","notifyNoTestCases":"No test cases defined for this suite","notifyAllCasesPassed":"All {total} cases passed ✅","notifySomeCasesFailed":"{passed}/{total} passed, {failed} failed","notifyEvalRunFailed":"Eval run failed","notifyEvalTitle":"Eval: {name}","modelEvals":"Model Evaluations","evalsHeroDescription":"Test and validate your LLM endpoints by running predefined evaluation suites. Each suite contains test cases that send real prompts through OmniRoute and compare responses against expected criteria — helping you detect regressions, compare models, and ensure response quality across providers.","qualityValidation":"Quality Validation","modelComparison":"Model Comparison","regressionDetection":"Regression Detection","latencyBenchmarks":"Latency Benchmarks","modelLockouts":"Model Lockouts","noLockouts":"No models currently locked","activeSessions":"Active Sessions","noSessions":"No active sessions","sessionsHint":"Sessions appear as requests flow through the proxy","sessionsTrackedHint":"Tracked via request fingerprinting • Auto-refresh 5s","session":"Session","age":"Age","requests":"Requests","connection":"Connection","durationMillisecondsShort":"{value}ms","durationSecondsShort":"{value}s","durationMinutesShort":"{value}m","durationHoursShort":"{value}h","reasonSeparator":" - ","notAvailableSymbol":"-","providerLimits":"Provider Limits","noProviders":"No Providers Connected","connectProvidersForQuota":"Connect to providers with OAuth to track your API quota limits and usage.","accountsCount":"{count, plural, one {# account} other {# accounts}}","filteredFromCount":"(filtered from {count})","autoRefresh":"Auto-refresh","refreshAll":"Refresh All","loadingQuotas":"Loading...","account":"Account","modelQuotas":"Model Quotas","lastUsed":"Last Used","actions":"Actions","refreshQuota":"Refresh quota","today":"Today","tomorrow":"Tomorrow","dayTimeFormat":"{day}, {time}","inDuration":"in {duration}","notApplicable":"N/A","rawPlanWithValue":"Raw plan: {plan}","noPlanFromProvider":"No plan from provider","noQuotaData":"No quota data","noQuotaDataAvailable":"No quota data available","noAccountsForTierFilter":"No accounts found for tier filter","tierAll":"All","tierEnterprise":"Enterprise","tierTeam":"Team","tierBusiness":"Business","tierUltra":"Ultra","tierPro":"Pro","tierPlus":"Plus","tierFree":"Free","tierUnknown":"Unknown"},"modals":{"waitingAuth":"Waiting for Authorization","verificationUrl":"Verification URL","yourCode":"Your Code","remoteAccess":"Remote access:","connectedSuccess":"Connected Successfully!","connectionFailed":"Connection Failed","chooseAuthMethod":"Choose your authentication method:","awsBuilderId":"AWS Builder ID","awsIamIdentity":"AWS IAM Identity Center","googleAccount":"Google Account","githubAccount":"GitHub Account","importToken":"Import Token","pasteToken":"Paste refresh token from Kiro IDE.","awsRegion":"AWS Region","autoDetecting":"Auto-detecting tokens...","readingFromCache":"Reading from AWS SSO cache","readingFromCursor":"Reading from Cursor IDE database","initializing":"Initializing...","pricingConfig":"Pricing Configuration","loadingPricing":"Loading pricing data...","pricingRatesFormat":"Pricing Rates Format","noPricingData":"No pricing data available","noModelsFound":"No models found"},"loggers":{"allProviders":"All Providers","allModels":"All Models","allAccounts":"All Accounts","allApiKeys":"All API Keys","allTypes":"All Types","allLevels":"All Levels","modelAZ":"Model A-Z","modelZA":"Model Z-A","loadingLogs":"Loading logs...","loadingProxyLogs":"Loading proxy logs...","noLogEntries":"No log entries found","noPayloadData":"No payload data available for this log entry.","proxyEvent":"Proxy Event","proxy":"Proxy","level":"Level","directNative":"Direct (native)","combo":"Combo","inputTokens":"I:","outputTokens":"O:"},"stats":{"usageOverview":"Usage Overview","outputTokens":"Output Tokens","totalCost":"Total Cost","usageByModel":"Usage by Model","usageByAccount":"Usage by Account","failedToLoad":"Failed to load usage statistics.","tokenHealth":"Token Health","totalOAuth":"Total OAuth","healthy":"Healthy","warning":"Warning","errored":"Errored","lastCheck":"Last check","noData":"No data","share":"Share","unableToLoad":"Unable to load system metrics","product":"Product","resources":"Resources","company":"Company"},"auth":{"welcome":"Welcome","signIn":"Sign in","enterPassword":"Enter your password to continue","password":"Password","unifiedProxy":"Unified AI API Proxy","unifiedAiApiProxy":"Unified AI API Proxy","unifiedAiApiProxyDesc":"Route requests to multiple AI providers through a single endpoint. Load balancing, failover, and usage tracking built in.","passwordNotEnabled":"Password protection is not enabled","loading":"Loading...","invalidPassword":"Invalid password","errorOccurredRetry":"An error occurred. Please try again.","configureInstance":"Let\'s get your OmniRoute instance configured","runOnboardingWizard":"Run the onboarding wizard to set up your password and connect your first AI provider.","startOnboarding":"Start Onboarding","secureYourInstance":"Secure Your Instance","setPasswordDescription":"Set a password to protect your dashboard and secure your API endpoints from unauthorized access.","configurePassword":"Configure Password","continue":"Continue","windowWillClose":"This window will close automatically...","closeTabNow":"You can close this tab now.","copyUrlManual":"Please copy the URL from the address bar and paste it in the application.","accessDeniedDescription":"You don\'t have permission to access this resource. Check your API key or contact the administrator.","goToDashboard":"Go to Dashboard","featureMultiProviderTitle":"Multi-Provider","featureMultiProviderDesc":"OpenAI, Anthropic, Google, and more","featureLoadBalancingTitle":"Load Balancing","featureLoadBalancingDesc":"Distribute requests intelligently","featureUsageTrackingTitle":"Usage Tracking","featureUsageTrackingDesc":"Monitor costs and tokens","resetPassword":"Reset Password","resetDescription":"Choose a method to recover access to your dashboard","stopServer":"Stop the OmniRoute server","processing":"Processing...","pleaseWait":"Please wait while we complete the authorization.","authSuccess":"Authorization Successful!","copyUrl":"Copy This URL","accessDenied":"Access Denied","methodCliTitle":"Method 1: CLI Reset","methodCliDescription":"Run the following command on the server where OmniRoute is running:","methodCliHint":"This will prompt you to set a new password. The server must be stopped first.","methodManualTitle":"Method 2: Manual Reset","methodManualDescription":"Delete the password from the database and set a new one on startup:","setPasswordInYour":"Set a new password in your","fileLabelSuffix":"file:","newPasswordPlaceholder":"your_new_password","deleteSettingsFile":"Delete","orRemovePasswordHashField":"or remove the passwordHash field","restartServerWithNewPassword":"Restart the server - it will use the new password","backToLogin":"Back to Login","forgotPassword":"Forgot password?"},"landing":{"brandName":"OmniRoute","navigateHome":"Navigate to home","toggleMenu":"Toggle menu","featuresLink":"Features","docsLink":"Docs","github":"GitHub","versionLive":"v1.0 is now live","oneEndpoint":"One Endpoint for","allProviders":"All AI Providers","heroDescription":"AI endpoint proxy with web dashboard - A JavaScript port of CLIProxyAPI. Works seamlessly with Claude Code, OpenAI Codex, Cline, RooCode, and other CLI tools.","getStarted":"Get Started","viewOnGithub":"View on GitHub","powerfulFeatures":"Powerful Features","featuresSubtitle":"Everything you need to manage your AI infrastructure in one place, built for scale.","featureUnifiedEndpointTitle":"Unified Endpoint","featureUnifiedEndpointDesc":"Access all providers via a single standard API URL.","featureEasySetupTitle":"Easy Setup","featureEasySetupDesc":"Get up and running in minutes with npx command.","featureModelFallbackTitle":"Model Fallback","featureModelFallbackDesc":"Automatically switch providers on failure or high latency.","featureUsageTrackingTitle":"Usage Tracking","featureUsageTrackingDesc":"Detailed analytics and cost monitoring across all models.","featureOAuthApiKeysTitle":"OAuth & API Keys","featureOAuthApiKeysDesc":"Securely manage credentials in one vault.","featureCloudSyncTitle":"Cloud Sync","featureCloudSyncDesc":"Sync your configurations across devices instantly.","featureCliSupportTitle":"CLI Support","featureCliSupportDesc":"Works with Claude Code, Codex, Cline, Cursor, and more.","featureDashboardTitle":"Dashboard","featureDashboardDesc":"Visual dashboard for real-time traffic analysis.","howItWorks":"How OmniRoute Works","howItWorksDescription":"Data flows seamlessly from your application through our intelligent routing layer to the best provider for the job.","howItWorksStep1Title":"1. CLI & SDKs","howItWorksStep1Description":"Your requests start from your favorite tools or our unified SDK. Just change the base URL.","howItWorksStep2Title":"2. OmniRoute Hub","howItWorksStep2Description":"Our engine analyzes the prompt, checks provider health, and routes for lowest latency or cost.","howItWorksStep3Title":"3. AI Providers","howItWorksStep3Description":"The request is fulfilled by OpenAI, Anthropic, Gemini, or others instantly.","getStartedIn30Seconds":"Get Started in 30 Seconds","getStartedDescription":"Install OmniRoute, configure your providers via web dashboard, and start routing AI requests.","installOmniRoute":"Install OmniRoute","installStepDescription":"Run npx command to start the server instantly","openDashboard":"Open Dashboard","openDashboardStepDescription":"Configure providers and API keys via web interface","routeRequests":"Route Requests","routeRequestsStepDescription":"Point your CLI tools to {endpoint}","terminal":"terminal","copy":"Copy","copied":"✓ Copied","startingOmniRoute":"Starting OmniRoute...","serverRunningOnLabel":"Server running on","dashboardLabel":"Dashboard","readyToRoute":"Ready to route! ✓","configureProvidersNote":"\uD83D\uDCDD Configure providers in dashboard or use environment variables","dataLocation":"Data Location:","dataLocationMacLinux":" macOS/Linux:","dataLocationWindows":" Windows:","product":"Product","dashboardLink":"Dashboard","changelog":"Changelog","resources":"Resources","documentation":"Documentation","npm":"NPM","legal":"Legal","mitLicense":"MIT License","footerTagline":"The unified endpoint for AI generation. Connect, route, and manage your AI providers with ease.","copyright":"\xa9 {year} OmniRoute. All rights reserved.","flowToolClaudeCode":"Claude Code","flowToolOpenAICodex":"OpenAI Codex","flowToolCline":"Cline","flowToolCursor":"Cursor","flowProviderOpenAI":"OpenAI","flowProviderAnthropic":"Anthropic","flowProviderGemini":"Gemini","flowProviderGithubCopilot":"GitHub Copilot","interactiveDiagram":"Interactive diagram visible on desktop","ctaTitle":"Ready to Simplify Your AI Infrastructure?","ctaDescription":"Join developers who are streamlining their AI integrations with OmniRoute. Open source and free to start.","startFree":"Start Free","readDocumentation":"Read Documentation"},"docs":{"title":"Documentation","quickStart":"Quick Start","features":"Features","supportedProviders":"Supported Providers","supportedProvidersToc":"Providers","commonUseCases":"Common Use Cases","clientCompatibility":"Client Compatibility","apiReference":"API Reference","method":"Method","path":"Path","notes":"Notes","modelPrefixes":"Model Prefixes","prefix":"Prefix","troubleshooting":"Troubleshooting","supportsChat":"Supports both chat and responses endpoints.","oauthAutoRefresh":"OAuth connection with automatic token refresh.","fullStreaming":"Full streaming support for all models.","docsLabel":"Docs","docsHeroDescription":"AI gateway for multi-provider LLMs. One endpoint for OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor, and 20+ more providers.","openDashboard":"Open Dashboard","endpointPage":"Endpoint Page","github":"GitHub","reportIssue":"Report Issue","onThisPage":"On this page","documentationVersion":"Documentation - v{version}","quickStartStep1Title":"1. Install and run","quickStartStep1Prefix":"Run","quickStartStep1Middle":"or clone from GitHub and run","quickStartStep2Title":"2. Create API key","quickStartStep2Text":"Go to Endpoint -> Registered Keys. Generate one key per environment.","quickStartStep3Title":"3. Connect providers","quickStartStep3Text":"Add provider accounts via OAuth login, API key, or free-tier auto-connect.","quickStartStep4Title":"4. Set client base URL","quickStartStep4Prefix":"Point your IDE or API client to","quickStartStep4Suffix":"Use provider prefix, for example","featureRoutingTitle":"Multi-Provider Routing","featureRoutingText":"Route requests to 30+ AI providers through a single OpenAI-compatible endpoint. Supports chat, responses, audio, and image APIs.","featureCombosTitle":"Combos and Balancing","featureCombosText":"Create model combos with fallback chains and balancing strategies: round-robin, priority, random, least-used, and cost-optimized.","featureUsageTitle":"Usage and Cost Tracking","featureUsageText":"Real-time token counting, cost calculation per provider/model, and detailed usage breakdown by API key and account.","featureAnalyticsTitle":"Analytics Dashboard","featureAnalyticsText":"Visual analytics with charts for requests, tokens, errors, latency, costs, and model popularity over time.","featureHealthTitle":"Health Monitoring","featureHealthText":"Live health checks, provider status, circuit breaker states, and automatic rate limit detection with exponential backoff.","featureCliTitle":"CLI Tools","featureCliText":"Manage IDE configurations, export/import backups, discover codex profiles, and configure settings from the dashboard.","featureSecurityTitle":"Security and Policies","featureSecurityText":"API key authentication, IP filtering, prompt injection guard, domain policies, session management, and audit logging.","featureCloudSyncTitle":"Cloud Sync","featureCloudSyncText":"Sync your configuration to Cloudflare Workers for remote access with encrypted credentials and automatic failover.","providersAcrossConnectionTypes":"{count} providers across three connection types.","manageProviders":"Manage Providers","providersCount":"{count} providers","providerTypeFree":"Free Tier","providerTypeOAuth":"OAuth","providerTypeApiKey":"API Key","useCaseSingleEndpointTitle":"Single endpoint for many providers","useCaseSingleEndpointText":"Point clients to one base URL and route by model prefix (for example: gh/, cc/, kr/, openai/).","useCaseFallbackTitle":"Fallback and model switching with combos","useCaseFallbackText":"Create combo models in Dashboard and keep client config stable while providers rotate internally.","useCaseUsageVisibilityTitle":"Usage, cost and debug visibility","useCaseUsageVisibilityText":"Track tokens and cost by provider, account, and API key in Usage and Analytics tabs.","clientCherryStudioTitle":"Cherry Studio","baseUrlLabel":"Base URL","chatEndpointLabel":"Chat endpoint","modelRecommendationLabel":"Model recommendation: explicit prefix","clientCodexTitle":"Codex / GitHub Copilot Models","clientCodexBullet1":"Use model IDs with","clientCodexBullet2":"Codex-family models auto-route to","clientCodexBullet3":"Non-Codex models continue on","clientCursorTitle":"Cursor IDE","clientCursorBullet1":"Use","clientCursorBullet1Suffix":"prefix for Cursor models.","clientCursorBullet2":"OAuth connection - login from the Providers page.","clientClaudeTitle":"Claude Code / Antigravity","clientClaudeBullet1Prefix":"Use","clientClaudeBullet1Middle":"(Claude) or","clientClaudeBullet1Suffix":"(Antigravity) prefix.","endpointChatNote":"OpenAI-compatible chat endpoint (default).","endpointResponsesNote":"Responses API endpoint (Codex, o-series).","endpointModelsNote":"Model catalog for all connected providers.","endpointAudioNote":"Audio transcription (Deepgram, AssemblyAI).","endpointImagesNote":"Image generation (NanoBanana).","endpointRewriteChatNote":"Rewrite helper for clients without /v1.","endpointRewriteResponsesNote":"Rewrite helper for Responses without /v1.","endpointRewriteModelsNote":"Rewrite helper for model discovery without /v1.","modelPrefixesDescriptionStart":"Use the provider prefix before the model name to route to a specific provider. Example:","modelPrefixesDescriptionEnd":"routes to GitHub Copilot.","provider":"Provider","type":"Type","troubleshootingModelRouting":"If the client fails with model routing, use explicit provider/model (for example: gh/gpt-5.1-codex).","troubleshootingAmbiguousModels":"If you receive ambiguous model errors, pick a provider prefix instead of a bare model ID.","troubleshootingCodexFamily":"For GitHub Codex-family models, keep model as gh/<codex-model>; router selects /responses automatically.","troubleshootingTestConnection":"Use Dashboard > Providers > Test Connection before testing from IDEs or external clients.","troubleshootingCircuitBreaker":"If a provider shows circuit breaker open, wait for the cooldown or check Health page for details.","troubleshootingOAuth":"For OAuth providers, re-authenticate if tokens expire. Check the provider card status indicator."},"legal":{"privacyPolicy":"Privacy Policy","termsOfService":"Terms of Service","providerConfigurations":"Provider configurations","apiKeys":"API keys","usageLogs":"Usage logs","applicationSettings":"Application settings","viewExportAnalytics":"View and export usage analytics","clearHistory":"Clear usage history at any time","configureRetention":"Configure log retention policies","backupRestore":"Back up and restore your database","privacyMetadataTitle":"Privacy Policy | OmniRoute","privacyMetadataDescription":"Privacy policy for the OmniRoute AI API proxy router.","termsMetadataTitle":"Terms of Service | OmniRoute","termsMetadataDescription":"Terms of service for the OmniRoute AI API proxy router.","backToHome":"Back to home","lastUpdated":"Last updated: {date}","policyLastUpdatedDate":"February 13, 2026","listSeparator":"-","questionsVisit":"Questions? Visit our","githubRepository":"GitHub repository","privacySection1Title":"1. Local-First Architecture","privacySection1Text":"OmniRoute is designed as a local-first application. All data processing and storage occurs entirely on your machine. There is no centralized server collecting your information.","privacySection2Title":"2. Data We Store","privacyDataStoredIn":"The following data is stored locally in","privacyDataProviderConfigurationsDesc":"connection URLs, provider types, and priority settings","privacyDataApiKeysDesc":"encrypted and stored locally for authenticating with AI providers","privacyDataUsageLogsDesc":"request counts, token usage, model names, timestamps, and response times","privacyDataApplicationSettingsDesc":"theme preferences, routing strategy, and combo configurations","privacySection3Title":"3. No Telemetry","privacySection3Text":"OmniRoute does not collect telemetry, analytics, or crash reports. No data is sent to us or any third party. Your usage patterns, API calls, and configurations remain entirely private.","privacySection4Title":"4. Third-Party AI Providers","privacySection4Text":"When you make API calls through OmniRoute, your requests are forwarded to the AI providers you have configured (for example: OpenAI, Anthropic, Google). These providers have their own privacy policies that govern how they handle your data. Please review:","privacyOpenAiPolicy":"OpenAI Privacy Policy","privacyAnthropicPolicy":"Anthropic Privacy Policy","privacyGooglePolicy":"Google Privacy Policy","privacySection5Title":"5. Cloud Sync (Optional)","privacySection5Text":"If you enable the optional cloud sync feature, provider configurations and API keys may be transmitted to a configured cloud endpoint. This feature is disabled by default and requires explicit opt-in.","privacySection6Title":"6. Logging","privacyLoggingIntro":"Request logs can be configured through the dashboard settings. You can:","privacySection7Title":"7. Your Rights","privacySection7TextStart":"Since all data is stored locally, you have full control. You can delete your data at any time by removing the","privacySection7TextEnd":"directory or using the database backup and restore features in the dashboard.","termsSection1Title":"1. Overview","termsSection1Text":"OmniRoute is a local-first AI API proxy router that operates entirely on your machine. It routes requests to multiple AI providers with load balancing, failover, and usage tracking.","termsSection2Title":"2. User Responsibilities","termsResponsibilityApiKeys":"You are solely responsible for managing your own API keys and credentials for third-party AI providers (OpenAI, Anthropic, Google, etc.).","termsResponsibilityCompliance":"You must comply with the terms of service of each AI provider whose API you access through OmniRoute.","termsResponsibilitySecurity":"You are responsible for the security of your local OmniRoute installation, including setting a password and restricting network access.","termsSection3Title":"3. How It Works","termsSection3Text":"OmniRoute acts as an intermediary proxy. API calls sent to OmniRoute are translated and forwarded to your configured AI providers. OmniRoute does not modify the content of your requests or responses beyond the necessary protocol translation.","termsSection4Title":"4. Data Handling","termsDataStoredLocally":"All data is stored locally on your machine in a SQLite database.","termsNoTransmission":"OmniRoute does not transmit any data to external servers unless you explicitly enable cloud sync features.","termsDataLocationText":"Usage logs, API keys, and configuration are stored in","termsSection5Title":"5. Disclaimer","termsSection5Text":"OmniRoute is provided \\"as is\\" without warranty of any kind. We are not responsible for any costs incurred through API usage, service disruptions, or data loss. Always maintain backups of your configuration.","termsSection6Title":"6. Open Source","termsSection6Text":"OmniRoute is open-source software. You are free to inspect, modify, and distribute it under the terms of its license."}}')}};
|